No description
  • Kotlin 99.2%
  • Shell 0.3%
  • PowerShell 0.3%
  • Dockerfile 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Oliver 3094d77385
Some checks failed
ci/woodpecker/push/build Pipeline was successful
ci/woodpecker/tag/build Pipeline failed
Update app/build.gradle.kts
2026-09-03 16:42:37 +00:00
.woodpecker
app Update app/build.gradle.kts 2026-09-03 16:42:37 +00:00
docker/emulator
docs/screenshots
gradle/wrapper
scripts
.editorconfig
.gitattributes
.gitignore
build.gradle.kts
compose.yaml
Dockerfile.build
gradle.properties
gradlew
LICENSE
README.md test(render): add gait sheets for ground animals; docs: how to rebuild visual renders 2026-08-31 17:55:42 +02:00
settings.gradle.kts fix(ci): restore google() first and content-filter the Aliyun mirror 2026-08-31 17:43:59 +02:00

WeatherWall

Build Status

📥 https://git.olli.info/Oliver/WeatherWall/releases/latest

Android live wallpaper with a low-poly procedural landscape, weather effects, seasonal details, and gyroscope-driven parallax.

No analytics. No internet permission.

WeatherWall Logo

Screenshots

Dawn clouds Clear day Snowy day Rainy dusk Night sky

Features

  • Procedural low-poly terrain with layered hills and mountains
  • Dynamic sky with sun, moon, stars, and time-of-day lighting
  • Weather effects: rain, snow, hail, lightning, clouds
  • Seasonal visuals: flowers, mushrooms, autumn leaves, snow, frost
  • Seasonal events: Christmas, New Year, St. Patrick's Day
  • Trees, bushes, rivers/lakes, animals, and random wildlife events
  • Gyroscope-based parallax
  • Deterministic world generation from a stable seed
  • Configurable density, clustering, parallax, weather, and terrain settings
  • Optimized rendering with bitmap caches and zero per-frame allocation design

Build

Requirements:

  • Android 8.0+ / API 26+
  • JDK 17
  • Gradle 8.13+

OR

  • Docker
git clone https://git.olli.info/Oliver/WeatherWall.git
cd WeatherWall
./gradlew assembleDebug
adb install app/build/outputs/apk/debug/app-debug.apk

Development

Run unit tests:

./gradlew test

Run lint:

./gradlew lintDebug

Run mutation tests:

./gradlew :app:pitest

Visual renders

Event and scene artwork is reviewed from generated PNGs rather than committed images. event_renders/ is gitignored and is meant to be rebuilt on demand:

./gradlew :app:testDebugUnitTest --tests '*EventRenderTest' --tests '*SceneScreenshotTest'

Both tests run under Robolectric with native graphics and write to event_renders/:

Output Produced by Shows
<Event>.png, <Event>_full.png EventRenderTest.renderEvent Best single frame, cropped and full scene
<Event>_f1..f3.png EventRenderTest.renderFrames Three points across the event lifetime
gait/<Event>.png EventRenderTest.renderGroundAnimalGaits One stride sampled every 100 ms, animal kept centred
scenes/, contact_sheets/ SceneScreenshotTest Full scenes across time of day, weather and seeds

Use the gait sheets to judge leg motion and body attachment — the lifetime frames only show the animal at different screen positions, never at different points of its stride.

Docker

Build the CI image:

docker build -t weatherwall-builder -f Dockerfile.build .

Run tests in Docker:

docker run --rm -v "$PWD":/workspace -w /workspace weatherwall-builder ./gradlew test --no-daemon

Run mutation tests in Docker:

docker run --rm -v "$PWD":/workspace -w /workspace weatherwall-builder ./gradlew :app:pitest --no-daemon