Initial commit: SpaceshipTest, a top-down space RTS in Godot 4.7.1
A fleet of neon-outlined ships explores a procedurally generated, seeded infinite world: tap/joystick steering, pinch zoom, formation pivoting, planet landings, an ore economy with extractors and haulers, and player built structures (mothership, ship crafter, command centre). All art is hand-drawn with draw_* calls rather than textures, and the backgrounds are camera-relative shaders so they stay precise at large world coordinates. Includes a 35-test headless suite (tests/run_tests.sh) plus screenshot tooling that renders real frames through Xvfb and Mesa softpipe, since --headless has no GPU. Excluded from version control: .godot/ (import cache, and it holds export credentials), builds/, android/build/ and packaged APKs - all regenerable, and ~325 MB combined. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
commit
85814ce88c
192 changed files with 9602 additions and 0 deletions
38
tests/screenshot.sh
Normal file
38
tests/screenshot.sh
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
#!/data/data/com.termux/files/usr/bin/bash
|
||||
# Renders a real screenshot of a Godot scene from Termux, via the Godot
|
||||
# 4.7.1 Linux arm64 build inside the proot-distro Ubuntu container, using
|
||||
# Xvfb (virtual display) + Mesa's softpipe software rasterizer.
|
||||
#
|
||||
# NOTE: Mesa's default software rasterizer, llvmpipe, crashes with
|
||||
# SIGILL in this environment (confirmed via feasibility spike - its LLVM
|
||||
# JIT appears to emit a CPU instruction this ARM64/proot/Android setup
|
||||
# doesn't actually support, reproduced even with an empty project and no
|
||||
# script). softpipe is Mesa's older non-JIT (pure C) rasterizer - slower,
|
||||
# but doesn't hit this crash. Good enough for one-shot screenshots.
|
||||
#
|
||||
# Usage: bash tests/screenshot.sh <scene_res_path> <output_png_path> [wait_frames] [WxH]
|
||||
# Example: bash tests/screenshot.sh res://Main.tscn /tmp/out.png 60 720x1280
|
||||
#
|
||||
# The resolution matters for anything with UI in it: the game is authored
|
||||
# for a 720x1280 portrait viewport, so rendering at the default landscape
|
||||
# size stretches the layout and makes it useless for judging whether
|
||||
# controls fit. Pass 720x1280 when checking UI.
|
||||
|
||||
set -e
|
||||
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
GODOT_BIN="/root/Godot_v4.7.1-stable_linux.arm64"
|
||||
|
||||
SCENE_PATH="${1:?usage: screenshot.sh <scene_res_path> <output_png_path> [wait_frames] [WxH]}"
|
||||
OUTPUT_PATH="${2:?usage: screenshot.sh <scene_res_path> <output_png_path> [wait_frames] [WxH]}"
|
||||
WAIT_FRAMES="${3:-60}"
|
||||
RESOLUTION="${4:-1280x720}"
|
||||
|
||||
proot-distro login ubuntu -- bash -c "
|
||||
Xvfb :99 -screen 0 ${RESOLUTION}x24 &
|
||||
XVFB_PID=\$!
|
||||
sleep 2
|
||||
mkdir -p /tmp/xdgrt && chmod 700 /tmp/xdgrt
|
||||
cd '$PROJECT_DIR'
|
||||
DISPLAY=:99 XDG_RUNTIME_DIR=/tmp/xdgrt GALLIUM_DRIVER=softpipe '$GODOT_BIN' --rendering-driver opengl3 --rendering-method gl_compatibility --resolution '$RESOLUTION' -s res://tests/_screenshot_tool.gd -- '$SCENE_PATH' '$OUTPUT_PATH' '$WAIT_FRAMES'
|
||||
kill \$XVFB_PID
|
||||
"
|
||||
Loading…
Reference in a new issue