diff --git a/.github/workflows/check_urls.yml b/.github/workflows/check_urls.yml new file mode 100644 index 00000000000..7f7a93bd3fb --- /dev/null +++ b/.github/workflows/check_urls.yml @@ -0,0 +1,36 @@ +name: 🌐 Check URLs +on: + push: + pull_request: + schedule: + # Every day at 18:00 UTC. + # URLs can decay over time. Setting up a schedule makes it possible to be warned + # about dead links as soon as possible. + - cron: "0 18 * * *" + +jobs: + check-urls: + runs-on: ubuntu-24.04 + steps: + + - uses: actions/checkout@v4 + + - name: Restore lychee cache + uses: actions/cache@v4 + with: + path: .lycheecache + key: cache-lychee-${{ github.sha }} + restore-keys: cache-lychee- + + - name: Run lychee + uses: lycheeverse/lychee-action@v2 + with: + args: > + --base . + --no-progress + --cache + --max-cache-age 1d + "**/*.md" "**/*.gd" "**/*.cs" "**/*.tscn" "**/*.tres" "**/*.html" + + - name: Fail if there were link errors + run: exit ${{ steps.lc.outputs.exit_code }} diff --git a/.lycheeignore b/.lycheeignore new file mode 100644 index 00000000000..12889792f87 --- /dev/null +++ b/.lycheeignore @@ -0,0 +1,30 @@ +# Don't read Godot's own URL schemes as web URLs. +user:\/\/.* +res:\/\/.* +uid:\/\/.* + +# Don't read WebSockets or TCP URLs as web URLs. +ws(s?):\/\/.* +tcp:\/\/.* + +# Security checks prevent checking the URLs of these websites automatically, +# typically returning 403 errors. +.*asecuritysite\.com.* +.*intel\.com.* +.*reddit\.com.* + +# Don't check URLs from these websites due to frequent rate limits (error 429) or timeouts. +.*adobe\.com.* +.*gamedevartisan\.com.* +.*github\.com.* +.*gnu\.org.* +.*loopit\.dk.* +.*meta\.com.* +.*sourceforge\.io.* + +# Not a valid URL with the GET method, which lychee always sends. +# Mentioned in the class reference. +.*httpbin\.org\/post + +# Class reference mentions `example.com/index.php` in an example, which is 404. +.*example\.com.* diff --git a/3d/ik/README.md b/3d/ik/README.md index d9f6b8c9cba..906cdc89b1a 100644 --- a/3d/ik/README.md +++ b/3d/ik/README.md @@ -11,7 +11,7 @@ Renderer: Forward+ ## How does it work? This demo shows how to implement IK using two different methods. One uses the -[`SkeletonIK`](https://docs.godotengine.org/en/latest/classes/class_skeletonik.html) +[`SkeletonIK3D`](https://docs.godotengine.org/en/latest/classes/class_skeletonik3d.html) node which is built into Godot. The other method is using a script called FABRIK (inside of the SADE plugin) for inverse kinematics. diff --git a/3d/platformer/coin/coin.gd.uid b/3d/platformer/coin/coin.gd.uid new file mode 100644 index 00000000000..725afd98801 --- /dev/null +++ b/3d/platformer/coin/coin.gd.uid @@ -0,0 +1 @@ +uid://b2kqvu7a5kiev diff --git a/3d/platformer/enemy/enemy.gd.uid b/3d/platformer/enemy/enemy.gd.uid new file mode 100644 index 00000000000..33107ce651c --- /dev/null +++ b/3d/platformer/enemy/enemy.gd.uid @@ -0,0 +1 @@ +uid://dwssf05sbkfak diff --git a/3d/platformer/player/bullet/bullet.gd.uid b/3d/platformer/player/bullet/bullet.gd.uid new file mode 100644 index 00000000000..9c2087dc012 --- /dev/null +++ b/3d/platformer/player/bullet/bullet.gd.uid @@ -0,0 +1 @@ +uid://c4p5enna2foh1 diff --git a/3d/platformer/player/follow_camera.gd.uid b/3d/platformer/player/follow_camera.gd.uid new file mode 100644 index 00000000000..21cbe67855e --- /dev/null +++ b/3d/platformer/player/follow_camera.gd.uid @@ -0,0 +1 @@ +uid://bd03i5s1ufxt4 diff --git a/3d/platformer/player/player.gd.uid b/3d/platformer/player/player.gd.uid new file mode 100644 index 00000000000..7bed0a656ca --- /dev/null +++ b/3d/platformer/player/player.gd.uid @@ -0,0 +1 @@ +uid://dl2fniviqap3d diff --git a/3d/truck_town.zip b/3d/truck_town.zip new file mode 100644 index 00000000000..bf09933e7ee Binary files /dev/null and b/3d/truck_town.zip differ diff --git a/3d/truck_town/README.md b/3d/truck_town/README.md index b82d6da6e30..b4b9690eb76 100644 --- a/3d/truck_town/README.md +++ b/3d/truck_town/README.md @@ -29,11 +29,11 @@ Check out this demo on the asset library: https://godotengine.org/asset-library/ The base vehicle uses a [`VehicleBody3D`](https://docs.godotengine.org/en/latest/classes/class_vehiclebody3d.html) node. The trailer truck is tied together using a -[`ConeJointTwist`](https://docs.godotengine.org/en/latest/classes/class_conetwistjoint.html) +[`ConeJointTwist3D`](https://docs.godotengine.org/en/latest/classes/class_conetwistjoint3d.html) node, and the tow truck is tried together using a chain made of [`RigidBody3D`](https://docs.godotengine.org/en/latest/classes/class_rigidbody3d.html) nodes which are pinned together using -[`PinJoint`](https://docs.godotengine.org/en/latest/classes/class_pinjoint.html) nodes. +[`PinJoint3D`](https://docs.godotengine.org/en/latest/classes/class_pinjoint3d.html) nodes. ## Screenshots diff --git a/3d/truck_town/car_select/car_select.gd.uid b/3d/truck_town/car_select/car_select.gd.uid new file mode 100644 index 00000000000..2826d0fef01 --- /dev/null +++ b/3d/truck_town/car_select/car_select.gd.uid @@ -0,0 +1 @@ +uid://cmy5ysrd0uix diff --git a/3d/truck_town/node_3d.tscn b/3d/truck_town/node_3d.tscn new file mode 100644 index 00000000000..9f217971507 --- /dev/null +++ b/3d/truck_town/node_3d.tscn @@ -0,0 +1,3 @@ +[gd_scene format=3 uid="uid://dnh5gutor1ouh"] + +[node name="Node3D" type="Node3D"] diff --git a/3d/truck_town/spedometer.gd.uid b/3d/truck_town/spedometer.gd.uid new file mode 100644 index 00000000000..d7a11cd6bd0 --- /dev/null +++ b/3d/truck_town/spedometer.gd.uid @@ -0,0 +1 @@ +uid://c1fdkxn0hkfhm diff --git a/3d/truck_town/vehicles/follow_camera.gd.uid b/3d/truck_town/vehicles/follow_camera.gd.uid new file mode 100644 index 00000000000..a1855473e1e --- /dev/null +++ b/3d/truck_town/vehicles/follow_camera.gd.uid @@ -0,0 +1 @@ +uid://bkh3fpsyns2tg diff --git a/3d/truck_town/vehicles/vehicle.gd.uid b/3d/truck_town/vehicles/vehicle.gd.uid new file mode 100644 index 00000000000..e16c279dadf --- /dev/null +++ b/3d/truck_town/vehicles/vehicle.gd.uid @@ -0,0 +1 @@ +uid://cl58vajfqvbv diff --git a/3d/voxel/README.md b/3d/voxel/README.md index 9d2aacb8559..bd8c3df3598 100644 --- a/3d/voxel/README.md +++ b/3d/voxel/README.md @@ -14,7 +14,7 @@ Check out this demo on the asset library: https://godotengine.org/asset-library/ Each chunk is a [`StaticBody3D`](https://docs.godotengine.org/en/latest/classes/class_staticbody3d.html) with each block having its own -[`CollisionShape`](https://docs.godotengine.org/en/latest/classes/class_collisionshape.html) +[`CollisionShape3D`](https://docs.godotengine.org/en/latest/classes/class_collisionshape3d.html) for collisions. The meshes are created using [`SurfaceTool`](https://docs.godotengine.org/en/latest/classes/class_surfacetool.html) which allows specifying vertices, triangles, and UV coordinates @@ -30,7 +30,7 @@ are two terrain types, random blocks and flat grass. A more complex terrain generator is out-of-scope for this demo project. The player can place and break blocks using the -[`RayCast`](https://docs.godotengine.org/en/latest/classes/class_raycast.html) +[`RayCast3D`](https://docs.godotengine.org/en/latest/classes/class_raycast3d.html) node attached to the camera. It uses the collision information to figure out the block position and change the block data. You can switch the active block using the brackets or with the middle mouse button. @@ -40,7 +40,7 @@ Settings are stored inside of an [AutoLoad singleton](https://docs.godotengine.org/en/latest/getting_started/step_by_step/singletons_autoload.html) called "Settings". This class will automatically save settings, and load them when the game opens, by using the -[`File`](https://docs.godotengine.org/en/latest/classes/class_file.html) class. +[`FileAccess`](https://docs.godotengine.org/en/latest/classes/class_fileaccess.html) class. Sticking to GDScript and the built-in Godot tools, as this demo does, is quite limiting. If you are making your own voxel game, you should probably diff --git a/gui/translation/translation_csv.gd.uid b/gui/translation/translation_csv.gd.uid new file mode 100644 index 00000000000..a01e4684ee6 --- /dev/null +++ b/gui/translation/translation_csv.gd.uid @@ -0,0 +1 @@ +uid://dntebjgkpm5of diff --git a/gui/translation/translation_po.gd.uid b/gui/translation/translation_po.gd.uid new file mode 100644 index 00000000000..bf89e0ec7d1 --- /dev/null +++ b/gui/translation/translation_po.gd.uid @@ -0,0 +1 @@ +uid://dumdhngl4f3tj diff --git a/misc/joypads/joypads.gd.uid b/misc/joypads/joypads.gd.uid new file mode 100644 index 00000000000..0900fe70101 --- /dev/null +++ b/misc/joypads/joypads.gd.uid @@ -0,0 +1 @@ +uid://cqqj0ilvqka8m diff --git a/misc/joypads/remap/joy_mapping.gd.uid b/misc/joypads/remap/joy_mapping.gd.uid new file mode 100644 index 00000000000..64b2ef687b7 --- /dev/null +++ b/misc/joypads/remap/joy_mapping.gd.uid @@ -0,0 +1 @@ +uid://puavt2bpk0bt diff --git a/misc/joypads/remap/remap_wizard.gd.uid b/misc/joypads/remap/remap_wizard.gd.uid new file mode 100644 index 00000000000..36b7a8c5266 --- /dev/null +++ b/misc/joypads/remap/remap_wizard.gd.uid @@ -0,0 +1 @@ +uid://41ajashcuyil diff --git a/misc/window_management/control.gd.uid b/misc/window_management/control.gd.uid new file mode 100644 index 00000000000..7e3c6e5f82b --- /dev/null +++ b/misc/window_management/control.gd.uid @@ -0,0 +1 @@ +uid://c3hoeavr06xco diff --git a/misc/window_management/observer/observer.gd.uid b/misc/window_management/observer/observer.gd.uid new file mode 100644 index 00000000000..0c199571b1f --- /dev/null +++ b/misc/window_management/observer/observer.gd.uid @@ -0,0 +1 @@ +uid://dyc3sbymve26q