Skip to content

Add the flight, survival crafting, RPG and RTS starters with a map - #1088

Open
4ian wants to merge 7 commits into
mainfrom
claude/awesome-knuth-vaoj1s-more-maps
Open

4ian wants to merge 7 commits into
mainfrom
claude/awesome-knuth-vaoj1s-more-maps

Conversation

@4ian

@4ian 4ian commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Adds "with a map" variants of four more 3D starters, on maps made with the 3D terrain extension, modeled on the 3D GTA with a map. The original starters are unchanged.

Uses the theme support for custom objects, the terrain.* slots and the model slots for scattered models of #1082 (merged). Based on the latest main. Same approach as #1086 and #1087.

The starters

Starter Map
starting-3d-flight-sim-with-a-map — "3D Flight Simulator with a map" 16384 px with a low resolution (64 px cells): mountains with snowy tops, valleys, a lake, forests and farms.
starting-first-person-survival-crafting-with-a-map — "3D First Person Survival Crafting with a map" 6144 px: an open forest on hills around a camp in a clearing, with trees and boulders to gather.
starting-3d-top-down-rpg-with-a-map — "3D RPG with a map" 4096 px: a village by a river, paths between hills, forests and a bridge on a ford.
starting-3d-rts-unit-selection-with-a-map — "Top-down RTS (unit selection) with a map" 4096 px: a valley with hills, the base of the starter in the middle crossed by a stream, farms, a mine, an outpost and forests.

Each variant is built from the starter as it is on main. What changed in the events is only what the map needs:

  • Flight: the plane was kept above a flat ground; it is now kept above the terrain under it (Terrain.GroundZ(PlayerAircraft.X(), PlayerAircraft.Y()) + 20), and inside the map (a new event clamps its position, with a comment). The lake is a hollow dug in a flat shore; its water (a Water3D object, rotated along the lake) is as high as the hollow holds it, and all its edges are under the shore, so the shore draws the outline of the lake (no straight edge, no water above the ground).
  • Survival: the terrain is added to RaycastSurface, so that items are placed on it. The trees and boulders to gather stay objects; the bushes, berry bushes, plants and flowers are scattered models.
  • RPG: the events are those of the starter. The player is a 3D physics character instead of a top-down movement: the 3D physics behavior, the 3D character behavior, and the keyboard (arrow keys, like the starter) and joystick mappers (Platformer3DKeyboardMapper, Platformer3DMultitouchMapper). It walks on the terrain and on the planks of the bridge (a static body with the shape of its model), and is stopped by static bodies: the buildings, the obstacle of the starter, the trunk collisions of the trees and rocks, the walls at the limits of the map, and invisible walls along the river banks and the sides of the bridge (RiverBank, 10 boxes): the bridge is the only way across. The only changes in the events: the dialog deactivates the two mappers instead of the top-down movement, and the player is no longer separated from the obstacle (its body stops the player). The dialog box keeps the button variants of the starter (OptionButton) through the update of PanelSpriteButton. The 5 grass models of the starter are now a scattered models object (GrassTufts), as Grass is the terrain grass in the starters with a map. The camera instance is moved above the village.
  • RTS: the units walk with navmesh pathfinding (NavMeshPathfinding), instead of the grid pathfinding of the starter with invisible obstacles over the hills and at each tree. The navmesh is built from the terrain (slopes over 22° can't be walked on, so the units go around the hills and stay in the valley), the trunks of the scattered trees and rocks, and the buildings, and it follows the terrain and the forests when they are changed. The units avoid each other (crowd). The destinations are put on the ground (Terrain.GroundZ): the navmesh keeps the units on it. The map being bigger than the screen, the arrow keys (or WASD) move the camera object, clamped above the valley, and the layers look from it every frame. On touch screens, dragging with two fingers moves the camera (the point of the ground between the fingers stays between them, with TouchX/TouchY of the two touches), in a "Two-finger camera drag" group; the touch controls of the starter (tap to move, hold and drag to select) wait until the fingers are lifted. The buildings are Fantasy RTS models where the starter has its impassable boxes. The water boxes of the starter are replaced by a Water3D object like the river of the RPG, as high as the shallow stream (the units walk across it), with its edges under the banks.

The events of these starters are unfolded, except the groups (which can stay folded).

Each variant has its forests, bushes, rocks and plants as scattered models (Terrain3D::ScatteredModels, GPU instancing, their Model mapped to the nature.* model slots, in a Nature folder), mountains around the playable area (and walls at the limits where the player could climb), its shape in the Edits property of the terrain (generated by a script running the terrain and scatter code of the extension), ambientCG ground textures with normal maps, CC0 asset-store models credited in its README, a new project UUID, a preview.png from 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 survival and the RPG have grass on the whole terrain (one Grass instance: it only grows where its layer is painted and on gentle slopes, drawn in chunks of 500 px, the far ones hidden). The flight and the RTS, seen from far away, have none.

The water of the flight, the RPG and the RTS is a Water3D with an opacity of 120, wave crests 231;248;255, foam 0.05, ripples from assets/WaterNormalMap with a size of 600, wave height 2, wave length 150 and wave speed 1.8. Each keeps its color.

Tests

The tests of the starters are kept and run on the map, with tests added for the gameplay the map changes (in bold; the flight and RPG starters had none):

  • Flight: the plane flies forward above the ground; it stays inside the map.
  • Survival: walking and strafing; harvesting a tree fills the inventory.
  • RPG: talking to a villager opens the dialog.
  • RTS: selecting a unit and ordering it to move; selecting every unit at once; dragging with two fingers moves the camera, without selecting or moving units; the arrow keys move the camera, which stops at the edge of the valley.

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):

  • Flight: "The plane cannot fly into a mountain", "The scattered trees and plants grow on the ground".
  • Survival: "The player and the resources start on the ground", "The player walks up a hill of the forest", "The scattered trees and plants grow on the ground".
  • RPG: "The player and the NPCs stand on the ground", "The player walks up a hill and stays on the ground", "The river stops the player, the bridge lets it cross", "The houses stop the player", "A tree stops the player", "The scattered trees and plants grow on the ground".
  • RTS: "The units start on the ground", "A unit sent behind a hill walks around it", "The scattered trees and plants grow on the ground".

The tests render at 160×90 without shadows, with the grass and the scattered models hidden, and with a 60 s timeout. All 9 tests pass with node scripts/run-gameplay-tests.js and the latest build of GDevelop's master (the one the CI uses). Checked apart for the RPG with its 3D physics character, with tests not kept: the arrow keys move the player and it walks up a hill; the river stops it; it crosses the bridge walking on its planks (1 to 5 px above the deck), and the walls along the bridge keep it on the planks; a house, the well, the obstacle of the starter and a tree trunk stop it.

Events compared to the starters

What changed in the events of each starter, compared to the starter without a map:

Starter Instructions (without → with a map) Changes in the events
Flight 28 → 30 (+4, −2) The plane is kept above the terrain under it (Terrain.GroundZ(...) + 20) instead of above the ground box, and inside the map (a new event clamps its position).
Survival 149 → 149 None. The terrain replaces the ground in the RaycastSurface group.
RPG 26 → 27 (+4, −3) The dialog deactivates the keyboard and joystick mappers (2 actions) instead of the top-down movement, and the separation from the obstacle is removed: the 3D physics stops the player. The movement itself changes (3D physics character instead of the top-down movement, static bodies), but not in the events.
RTS 50 → 110 (+62, −2) The units walk with navmesh pathfinding: MoveTo with the destination on the ground, instead of the grid pathfinding (twice: touch and mouse). The camera: the arrow keys (or WASD) move it (4 events), the "Two-finger camera drag" group (following the two touches and moving the camera, 9 events), and an event keeping it above the valley, the layers looking from it. The touch controls of the starter wait while two fingers drag (a condition).

Screenshots

Views of the maps (1280×720, scaled down):

3D Flight Simulator with a map
flight

3D First Person Survival Crafting with a map
survival

3D RPG with a map
rpg

Top-down RTS (unit selection) with a map
rts

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:

Flight: winter, pirate Survival: forest, winter
RPG: castle, pirate RTS: medieval, winter

Not done / to check

  • RTS: on slopes, the navmesh is up to ~5 px above the terrain (5 px navmesh cells, built in ~0.3 s at the start). The cursor is projected on the plane at z=0, so clicking on the slopes of a hill sends units a bit off; the base and the paths are at z=0.
  • RTS: the two-finger drag could use the PinchGesture extension: its "Touch is pinching" condition would replace the 5 events following the two touches. But to keep the point of the ground between the fingers, its center must be converted to the scene, and its conversion calls Layer.convertCoords without a result point, which crashes on 3D layers (in GDJS/Runtime/layer.ts, the 3D branch passes result instead of position). With a one-line fix in GDevelop, the starter could use it, but it would then need that version of GDevelop.
  • The starters are not added to the AI prompts (GDevelop-ai-prompts).
  • npm run build (database) stops in this sandbox when fetching the deployed themes (proxy). The theme slots were checked with checkStarterThemeSlots, and every theme was applied to every new starter with applyThemeToStarter.
  • Performance was not measured on a phone.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj

@4ian
4ian force-pushed the claude/awesome-knuth-vaoj1s branch from b8b5ef0 to 49a896c Compare October 14, 2026 09:43
@4ian
4ian force-pushed the claude/awesome-knuth-vaoj1s-more-maps branch from d1d9a1c to 042d988 Compare October 14, 2026 12:16
@4ian
4ian force-pushed the claude/awesome-knuth-vaoj1s branch from 49a896c to 6541de0 Compare October 14, 2026 12:17
@4ian
4ian force-pushed the claude/awesome-knuth-vaoj1s-more-maps branch from 042d988 to a7b178b Compare October 14, 2026 13:25
@4ian
4ian changed the base branch from claude/awesome-knuth-vaoj1s to main October 14, 2026 13:47
@4ian
4ian force-pushed the claude/awesome-knuth-vaoj1s-more-maps branch from a7b178b to 77b2733 Compare October 14, 2026 13:48
Variants of four more 3D 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 lake of the flight and the stream of the RTS are Water3D
objects whose edges are under the shore. The RTS units walk with navmesh
pathfinding, and two fingers move its camera on touch screens. The RPG
player walks on the deck of the bridge, is stopped by the buildings, and
is kept out of the trunks and the river by events, without invisible
obstacles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
@4ian
4ian force-pushed the claude/awesome-knuth-vaoj1s-more-maps branch from 77b2733 to d91fab9 Compare October 14, 2026 17:13
…p on main

They get the skybox of their starters in the standard cube orientation (#1069).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
…r tests

- The grass of the survival and the RPG covers the whole terrain (one
  Grass instance): it only grows on its layer and on gentle slopes, and
  the far chunks are hidden.
- The water of the flight, the RPG and the RTS: 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. Each keeps its color.
- Folders: the scattered trees, rocks and plants of the flight and the
  survival are in "Nature", their buildings and camp in "Decoration".
- The tests checking how the map is made (objects starting on the ground,
  climbing a given hill, a given mountain, house, tree or river stopping
  the player, a path around a given hill, the copies of the scattered
  models) are removed: a game made from the starter changes the map. The
  tests of the gameplay are kept.
- New previews.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wa8uKpYuQrYqGYnqGCsquj
The events moving the player are removed: putting it on the ground, on the
deck of the bridge, out of the trunks and the rocks, and back out of the
river. The player is a 3D physics character instead of a top-down
movement: the 3D physics behavior, the 3D character behavior, and the
keyboard (arrows, like the starter) and joystick mappers. It walks on the
terrain and on the planks of the bridge (a static body with the shape of
its model), and is stopped by static bodies: the buildings, the obstacle
of the starter, the trunk collisions of the trees and rocks, the walls at
the limits of the map, and new invisible walls along the river banks and
the sides of the bridge.

The events are those of the starter, except that the dialog deactivates
the two mappers instead of the top-down movement, and that the player is
no longer separated from the obstacle (its body stops the player). The
"Obstacles" group is removed.

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants