6f0163a8db
Initial spawning placed clouds uniformly across [0, spawn_width], which broke down at the edges of the scroll range whenever the parallax factor was anything other than exactly 1.0: - With parallax < 1.0 (background feel), a cloud is only ever visible at scrolls in [(drift_x - screen_w) / parallax, drift_x / parallax]. So a far cloud at drift_x near spawn_width (e.g. 28000 with parallax 0.5) needs scroll ~56000 to be seen, far beyond max_scroll. About half the spawn range was a dead zone the user could never reach. - With parallax > 1.0 (foreground feel — what the gardens scene now uses), the opposite happens: clouds visible at the right edge of the scroll range live at drift_x = max_scroll * parallax + screen_w, which is well past spawn_width. The right side of the gardens stayed empty because no cloud was ever spawned that far out. Add a max_scroll parameter to configure_world() and stratify in scroll space: each cloud gets a target_scroll value in its own slot of [0, max_scroll], and its drift_x is placed at target_scroll * parallax + horiz_jitter. The cloud's drift_x range now matches the scroll positions where it can actually be visible, regardless of whether parallax is below or above 1.0. _reset_cloud is updated correspondingly to wrap clouds to the right edge of their individual visibility range rather than the world's right edge. Also have configure_world refresh screen_width every call so the manager picks up the correct viewport size even when the parent invokes it later in the ready sequence.