Skip to content

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

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

4ian wants to merge 3 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 player is put on the ground every frame (Terrain.GroundZ(Player.X(), Player.Y())), and separated from a new Obstacles group (the starter's building obstacle, the houses, the inn, the blacksmith, the well, the market stand and the walls at the limits of the map). No invisible obstacles at the trees or along the river: events push the player out of the trunks and the rocks, from the position of the nearest copy of the scattered models (NearestCopyX/Y/Distance expressions), and put the player back where the ground was dry when it is under the water of the river. The river flows under the bridge, whose deck is at the level of the banks: on it, the player walks on the deck (OnBridge variable). 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), and the event putting the units on the ground every frame is removed (the navmesh does 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); 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.

Each variant has its forests, bushes, rocks and plants as scattered models (Terrain3D::ScatteredModels, GPU instancing, their Model mapped to the nature.* model slots), 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, grass only where it is seen up close (none for the flight and the RTS, seen from far away), 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.

Tests

The tests of the starters are kept (the flight and RPG starters had none), and tests of the map are added:

  • Flight: the plane flies forward above the ground; it cannot fly into a mountain; it stays inside the map.
  • Survival: the player and the trees start on the ground; the player walks up a hill.
  • 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 and the bridge lets it cross, walking on its deck; the houses (and the well) stop the player; a tree stops the player; talking to a villager opens the dialog.
  • RTS: the units start on the ground; a unit sent behind a hill (with the mouse, like a player) walks around it on the navmesh and stays within 6 px of the ground; 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.
  • All: each scattered models object has the copies placed by the generation script, standing 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 23 tests pass with node scripts/run-gameplay-tests.js (GDevelop 5.6.284).

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

The lake of the flight, from the airstrip (behind a hill), the east, the north and the start:

flight lake

With themes applied (built from GDevelopApp/GDevelop-assets#704), first view and overview:

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.
  • RPG: walking into the river, the player stops (it doesn't slide along the bank).
  • RTS: the two-finger drag uses TouchX/TouchY rather than the PinchGesture extension: its conversion to the scene crashes on 3D layers (Layer.convertCoords uses the result argument it doesn't get, in the 3D branch).
  • 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
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