Repository navigation
Conversation
Contributor
4ian
force-pushed
the
claude/awesome-knuth-vaoj1s
branch
from
October 14, 2026 09:43
b8b5ef0 to
49a896c
Compare
4ian
force-pushed
the
claude/awesome-knuth-vaoj1s-first-person-maps
branch
from
October 14, 2026 12:16
850a2f1 to
edac405
Compare
4ian
force-pushed
the
claude/awesome-knuth-vaoj1s
branch
from
October 14, 2026 12:17
49a896c to
6541de0
Compare
4ian
force-pushed
the
claude/awesome-knuth-vaoj1s-first-person-maps
branch
from
October 14, 2026 13:25
edac405 to
6130e91
Compare
4ian
force-pushed
the
claude/awesome-knuth-vaoj1s-first-person-maps
branch
from
October 14, 2026 13:48
6130e91 to
afd1210
Compare
Contributor
Author
|
No code fix applies. Re-running the workflow from CircleCI should clear it. I can't re-run CircleCI jobs from here, and I won't push an empty commit to retrigger it. I'm keeping this PR watched until it's green. Generated by Claude Code |
Variants of the four first-person starters on maps made with the 3D terrain extension, built from the starters as they are on main, with the latest versions of their extensions. Forests, rocks and plants are scattered models. The monsters of the horror starters walk with navmesh pathfinding, around the trunks (trunk collisions of the scattered models), the cabin, the crypts and the graves, instead of a grid with invisible obstacles. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
4ian
force-pushed
the
claude/awesome-knuth-vaoj1s-first-person-maps
branch
from
October 14, 2026 17:06
afd1210 to
9e554ed
Compare
…vaoj1s-first-person-maps
They get the skybox of their starters in the standard cube orientation (#1069). In the FPS horror, a shot monster is lowered as it falls over: it rotates around its center, and lay above the ground. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
…a map Built from the 3D FPS game with enemies (#1076), whose enemies walk with navmesh pathfinding, on the same map: a canyon with cover on uneven ground and a ramp up to a plateau, with six enemies. The navmesh is built from the terrain (5 px cells, slopes over 40 degrees are not walkable), the rocks and the cacti (scattered models with trunk collisions) and the cover (obstacles only). The random destinations of the patrol are put on the terrain; the ground box of the starter, where they are picked, is kept hidden under the terrain. The terrain and the cover hide the player from the enemies and stop the bullets. Tests: the tests of the starter (moving, shooting, killing an enemy), and on the map, the player and the enemies start on the ground, a patrolling enemy walks toward the player on the ground, an enemy that sees the player catches them, an enemy goes up the ramp to catch the player on the plateau, and the player walks up the ramp. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
4ian
force-pushed
the
claude/awesome-knuth-vaoj1s-first-person-maps
branch
from
October 19, 2026 13:17
2413453 to
2ff5306
Compare
…gain In the FPS with enemies and the FPS horror with a map, a walking enemy or monster is moved by the navmesh: its physics body (dynamic, as in the starters) is deactivated, and it is activated when it is shot, to take the impulse at the impact of the starters. A shot enemy or monster is thrown back and tumbles again, instead of falling over. Touching the player, which was a collision of the physics bodies, is checked with the distance between them. The test of a shot monster falling over is replaced by a test of a shot enemy or monster thrown back and tumbling. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
The previous change deactivated the physics body of a walking enemy, so that the player could walk into it, and touching the player was checked with a distance. The body now stays: while the navmesh moves it, it has no gravity, doesn't collide with the static objects (mask 1: the ground, the walls), which the navmesh keeps it on and away from, and is 100 times heavier, so that the player bumps into it without pushing it. Touching the player is the collision of the physics bodies again, as in the starter. When it is shot, it gets its density, the gravity and the collisions back (deactivating and activating the behavior creates the body again with them), and takes the impulse at the impact. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
…ples using it The 3D physics "Body type" action is not known by GDevelop 5.6.284 and before, which would skip it. An example using it asks for GDevelop 5.6.285 or later, instead of 5.5.220 or later for the other 3D physics examples. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
The FPS with enemies with a map (built from the FPS with enemies) and the FPS horror with a map use the new "Body type" action of the 3D physics: an enemy or monster moved by the navmesh is kinematic (the player bumps into it without pushing it), and becomes dynamic when it is shot, to be thrown by the impulse at the impact. It replaces the dynamic body without gravity, without the collisions with the static objects and 100 times heavier, whose settings were restored, and the behavior deactivated and activated again, before the impulse. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
…, folders, fewer tests
- The Ground box hidden under the terrain is removed from the horror, FPS
horror and FPS with enemies maps: the random places of the patrol (and
of the monsters appearing) are picked on the terrain, without an eighth
of it on each side, away from the mountains. Its textures are removed.
- The grass covers the whole terrain (one Grass instance): it only grows
on its layer and on gentle slopes, and the far chunks are hidden.
- The pond of the farming uses the water settings of the other maps:
opacity 120, crests 231;248;255, foam 0.05, ripples 600 px, waves 2 px
high, 150 px long, at a speed of 1.8.
- Folders: the scattered trees, rocks and plants are in "Nature", and
PushableBox is with the objects of the map around it ("Decoration",
"Graveyard", "Training ground").
- The tests checking how the map is made (objects starting on the ground,
climbing a given hill, paths around a given building, the copies of the
scattered models, the body type and height of a walking enemy) are
removed: a game made from the starter changes the map. The tests of the
gameplay are kept. The two tests of the FPS submission get 120 s, like
in the starter.
- New previews.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
…he ground The monsters appear at random places of the map, and one can stand on a grave, above the terrain: the test checked how the map is made, and failed on CircleCI when a monster appeared on a broken gravestone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
The starters with a map are more than starters (a map for now, maybe more later): their slug is "starting-expanded-<starter>" instead of "starting-<starter>-with-a-map", which tells them apart from the starters, and their name is "<starter name> Expanded" instead of "<starter name> with a map". The project UUIDs are kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds expanded versions of four first-person starters: the same game, on a map made with the 3D terrain extension, modeled on the 3D GTA Expanded. The original starters are unchanged.
The expanded starters are named
starting-expanded-<starter>and " Expanded": they are more than starters (a map for now, maybe more later), and their slug tells them apart from the starters.The FPS variant is built from the 3D FPS game with enemies of #1076 (with its enemies walking with navmesh pathfinding, done there). It is a project of its own: this PR doesn't need #1076 to be merged first.
Uses the theme support for custom objects, the
terrain.*slots and the model slots for scattered models of #1082 (merged). Based on the latestmain(the skyboxes in the standard cube orientation of #1069 included). Same approach as #1086.The starters
starting-expanded-first-person-farming— "3D First Person Farming Expanded"starting-expanded-first-person-horror— "3D First-Person Horror Game Expanded"starting-expanded-first-person-shooter-horror— "3D FPS Horror game with Gun Expanded"starting-expanded-first-person-shooter-enemies— "3D FPS with enemies Expanded"Each variant is built from the starter as it is on
main. What changed in the events is only what the map needs:RaycastSurfaceof the farming starter, the obstacles the monsters see through, what bullets hit), so seeds are placed and bullets hit on the terrain;NavMeshPathfinding), instead of the grid pathfinding of the starters with an invisible obstacle at each tree. The terrain, the trunks of the scattered trees, rocks, logs and stumps (their trunk collisions give a surface to the navmesh), the cabin, the crypts, the walls and the graves have the navmesh obstacle behavior: the navmesh follows the forest if it is painted again. The monsters keep their state machine, and the chase also follows the navmesh (the path to the player is updated twice per second) instead of pushing the monster with forces. Their 3D physics body is kinematic in the horror starter (moved by the navmesh, it still collides with the player). In the FPS horror, the walking monsters are kinematic too (the player bumps into them without pushing them), and a shot monster is still thrown back by the impulse at the impact of the starter: the "Body type" action of the 3D physics (Add an action to change the body type of 3D physics objects 4ian/GDevelop#9270) makes its body dynamic right before the impulse;Groundbox under the terrain: the patrol of the monsters (and the monsters appearing in the FPS horror) picked random points inside the ground box of the starter. They now pick them on the terrain, away from the mountains around it: inside the terrain, without an eighth of it on each side (Terrain.BoundingBoxLeft() + Terrain.Width() / 8…, with a comment in the events). The ground box and its textures are removed;PutOnGroundaction of the terrain);Terrain.GroundZ). The terrain and the cover hide the player from the enemies and stop the bullets. As in the starter, the walking enemies are kinematic and a shot enemy becomes dynamic, to be thrown back by the impulse at the impact.The "Body type" action needs GDevelop 5.6.285 (released on October 21): an older GDevelop doesn't know it and would skip it, and a shot enemy or monster wouldn't be thrown. So the database asks for GDevelop 5.6.285 or later for the examples using it (
scripts/lib/ExampleGDevelopVersion.js, also in #1097; an older GDevelop shows "Download the latest version of GDevelop to check out this example!").Each variant has its forests, bushes, rocks and plants as scattered models (
Terrain3D::ScatteredModels, GPU instancing, theirModelmapped to thenature.*model slots), mountains around the playable area and invisible walls at the limits, its shape in theEditsproperty of the terrain (generated by a script running the terrain and scatter code of the extension), ambientCG ground textures with normal maps, grass on the whole terrain (oneGrassinstance: it only grows where its layer is painted and on gentle slopes, drawn in chunks of 500 px, the far ones hidden), CC0 asset-store models credited in its README, a new project UUID, apreview.pngfrom a 1280×720 screenshot, the latest version of every extension it uses (including GDevelopApp/GDevelop-extensions#2310), and its objects mapped to theme slots.The pond of the farming starter is a
Water3Dwith an opacity of 120, wave crests 231;248;255, foam 0.05, ripples fromassets/WaterNormalMapwith a size of 600, wave height 2, wave length 150 and wave speed 1.8.The events of these starters are unfolded, except the groups (which can stay folded).
The objects are in folders:
World(terrain, limits, grass, water),Nature(the scattered trees, rocks and plants), and a folder for the objects of the map around the player, withPushableBoxin it:Decoration(horror),Graveyard(FPS horror),Training ground(FPS with enemies).Tests
The tests of the starters are kept and run on the map, with tests added for the gameplay the map changes (in bold):
Removed, because they check how the map is made, which a game made from the starter will change (they would break as soon as the map is edited):
The tests render at 160×90 without shadows, with the grass and the scattered models hidden, and with a 60 s timeout (120 s for the two tests of the FPS submission, as in the starter: one took 58 s of its 60 s). For the tests of the starters, which act at the center of the screen, the 2D layers (mobile controls, UI, crosshair) are zoomed out to show what they show at 1280×720. All 13 tests pass with
node scripts/run-gameplay-tests.jsand the latest build of GDevelop'smaster(the one the CI uses).ExampleGDevelopVersion.spec.jschecks the GDevelop version asked for the examples;jest,tscandprettierpass.Events compared to the starters
What changed in the events of each starter, compared to the starter it expands:
RaycastSurfacegroup.MoveToof the navmesh (patrol, chase), the chase re-paths every 0.5 s instead of pushing the monster with forces, and the random places of the patrol are on the terrain (without an eighth of it on each side) instead of the ground box.PutOnGround); a shot monster becomes dynamic (Body typeaction) before the impulse.Terrain.GroundZ), instead of the ground box.Screenshots
Views of the maps (1280×720, scaled down):
3D First Person Farming Expanded

3D First-Person Horror Game Expanded

3D FPS Horror game with Gun Expanded

3D FPS with enemies Expanded

The horror maps are dark, as in the starters (fog, flashlight).
The horror maps lit up (without the fog, with a bright light), to show the grass covering them:
3D First-Person Horror Game Expanded, lit up

3D FPS Horror game with Gun Expanded, lit up

With themes applied (built from GDevelopApp/GDevelop-assets#704), first view and overview. These were taken before the grass covered the whole terrain and before the new water settings:
Not done / to check
GDevelop-ai-prompts).npm run build(database) stops in this sandbox when fetching the deployed themes (proxy), after the examples are read. The theme slots were checked withcheckStarterThemeSlots, and every theme was applied to every new starter withapplyThemeToStarter.🤖 Generated with Claude Code
https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj