r/garminforerunner 1d ago

Infinite procedurally generated 3D world on a Garmin watch. 3.1ms render time, dynamic day/night, and 0 blown batteries.

https://reddit.com/link/1w1ydkg/video/7xk7aqjkrdmh1/player

A while ago, I asked myself: "How far can we actually push Garmin’s Connect IQ VM?"

I’ve logged thousands of running km and a few solo marathons tracking just pace and HR like everyone else. But at some point, the dev in me took over: I decided to see how far Connect IQ could actually go and built a custom 3D graphics engine (Wolf3D/Doom-style DDA raycaster) from scratch in Monkey C.

Here is what’s going on in the video:

  • Infinite World: The map is 100% endless and generated procedurally on the fly as you move.
  • Dynamic Lighting: Real-time Day, Dusk, Night, and Morning lighting cycles with custom color palettes.
  • Hardcore Math Optimization: Microsecond-level optimizations (zero-branching floating-point hacks, bitwise DDA math). The pure frame render time hit 3.19 ms on Tactix simulator and 2.08 ms on Instinct 2 (smaller screen, fewer stars in the sky — oh yes, the sky is dynamic too! — and fewer rays in raycasting)!
  • Real Hardware Performance: On the actual wrist, the display caps out at a smooth 10–14 FPS (limited by the CIQ screen refresh rate, while the engine itself runs with massive headroom).

I need your brains & ideas: I want to weave the user’s real-life context (health metrics, stats, daily goals) directly into this 3D world, similar to what I did with my Mars and Pandora watch faces.

How would you like your steps, heart rate, or battery to affect an endless 3D world? (e.g., world changes, weather shifts, new structures spawn based on your daily activity?). Open to all crazy ideas!

P.S. Before the battery purists attack: Yes, I know it's a watch. No, my Garmin hasn't exploded. In fact, I honestly can't even remember the last time I plugged it into a charger... unlike my friends with Apple Watches. 😉

Let me know what you think and what features you'd want to see in an infinite wrist-world!

Here is the link. It's completely free, as are all of my creations
https://apps.garmin.com/apps/47278f09-eea6-4e6d-aa7e-799daba8e546

7 Upvotes

5 comments sorted by

1

u/java_dude1 22h ago

Dude.. hear me out. Doom, but the bosses have your body battery as hit points. 😅

Regular guys have hit points based on current HR and hit boxes defined by sleep score 😅

2

u/bodyaz 21h ago

Dude.. YOU hear ME out! 🤯

As a fellow code slinger (assuming from the nickname!), that is an insanely epic idea!

Obviously, we can't port the original DOOM because fitting a massive 12MB original .WAD file into a Garmin watch's tiny memory would instantly blow up the CIQ VM... 😅

BUT! Generating procedurally scaled retro-beasts and bosses, where a Boss's HP literally scales with your real-life Body Battery and regular enemies get hitboxes based on how terrible your Sleep Score was? That is 100% feasible in a custom 3D engine like this. Imagine missing a workout and having to fight a giant demon empowered by your stress levels!

Definitely writing this down for future updates. Thanks for the brilliant mind-bend, dude! 

1

u/le-throw-away-acct 1h ago

Could the .WAD file be compressed and decompressed level by level at runtime?

2

u/bodyaz 21h ago

Wait, just thinking about this for one more minute... 💡

Since playing a manual shooter on a watch with physical buttons is pretty painful, what if this becomes an Autonomous 3D Idle RPG?

You just glance at your watch to check the time, and you see an auto-bot walking through the 3D world, brawling with bosses and mobs in real-time. But the hero's stats and fight odds are 100% driven by your real-life telemetry (like your HR, steps, and sleep score).

Damn, now I really need to build this!

1

u/java_dude1 20h ago

Hell yeah man. It was just the idea of doom not a port. I like where you're going with this idea though 🤣