One-Button Game Mini Hack Entry: X-Ray Guided, coronary stenting on one fluoroscopy pedal
In a cath lab, the most important button is a pedal: press it and you see, release it and the image freezes. Every second you press costs radiation dose. That felt like the perfect one-button game.
My entry, X-Ray Guided, simulates a coronary stenting procedure from the groin to the heart. I work on fluoroscopic image quality as a medical physicist, so I wanted the X-ray image and the dose to behave like the real thing, at least where it matters for the game.
How to play
You are on shift in the cath lab. Patients arrive one after another, each with two random traits (obese, tortuous iliacs, tachycardic, small vessel, renal failure, calcified vessel) that change how the case plays. Three complications end your shift.
Each patient has four steps, and the line at the bottom of the screen always tells you what the tap does right now:
- Wire: tap to start pushing the guidewire blind and watch the FEEL bar. When you meet resistance, you can keep pushing blind (risky) or tap to switch fluoroscopy on. With X-rays on, the wire tip rotates: tap when it lines up with the vessel, or wait and let it creep through slowly while the dose climbs.
- Angiography: tap to inject contrast, then tap again at peak opacification to save the reference image of the lesion.
- Stent: without contrast the vessel is invisible. The stent slides along the wire; use the reference image (top left) and the small contrast puffs at each end of its travel, then tap to deploy it on the lesion.
- Balloon: it inflates by itself, faster and faster. Tap inside the yellow box, at nominal pressure.
A full HARM bar, a full DOSE bar, a missed lesion or a wrong inflation is a complication. Score depends on lesion coverage and expansion, minus dose, vessel trauma and time; consecutive clean cases give a multiplier.

One pedal, many jobs
The contest gives you a single tap, with no hold and no release. That turned out to fit the cath lab surprisingly well, because a real procedure is also a sequence of single, well-timed decisions, and each phase asks a different one:
- Navigation: do I need to look? The wire goes up mostly by feel. The tap is the moment you decide that the resistance in your hand is worth some radiation to understand.
- Fluoroscopy on an obstacle: now, or wait? Tapping when the tip lines up is fast but risky; waiting lets the wire creep through safely, and the DOSE bar shows what that patience costs.
- Angiography: when is the vessel best filled? Saving the reference too early or too late leaves you with a poor map of the lesion for the next step.
- Stent: is it on the lesion? With the contrast gone, you deploy from memory of the reference image and from the short puffs, each of which costs extra dose.
- Balloon: when do I stop? Too little and the stent is under-expanded, too much and you overstretch or rupture the vessel.
So the tap always means “act now”, but what it acts on changes with the phase. Two things made this readable: the game moves things by itself (the tip rotates, the stent slides, the balloon inflates), so when you tap is the decision, and not tapping is a decision too; and a line at the bottom of the screen always says what the tap will do next.Real vs. playable
What I kept real
- Most of the wire’s journey is done without X-rays, by feel. Fluoroscopy is switched on when you need it.
- The image is built like a fluoroscopy frame: attenuation of anatomy, vessel and devices, quantum noise that grows with the signal, and a recursive temporal filter that reduces noise but leaves lag behind moving objects. Release the pedal and you are left with the last image hold.
- Cine costs much more than fluoroscopy. Here it is 5 times per second, so the contrast injection and each puff are visible jumps on the DOSE bar.
- Coronary arteries are invisible without contrast, while the stent’s marker bands are not. That is why a good reference image matters.
- An obese patient means a noisier image and more dose for the same procedure.
What I changed for playability
- Time is compressed: a procedure lasts a couple of minutes, so the DAP values on screen are game numbers, and the per-patient limit is a game rule, not a clinical threshold.
- The contrast puffs during stent positioning are automatic, at each end of the stent’s travel, instead of being a separate action.
- The stent and the balloon move by themselves, so that the single tap becomes a timing decision.
- One projection, simplified anatomy, and a vessel that bends only where the obstacles are.
On the code side, the whole X-ray monitor is a single 128x128 image whose CData is rebuilt every frame from an attenuation map, with noise and temporal filtering added in two lines. For fitting everything into the character limit, Ahmed’s post on how the validator counts reformatted code says it better than I could.
How long does your shift last? And if you work in a cath lab: what would you add?