UAP/D

UAP/D

Unidentified Aerial Phenomenon, Detected

Top-down stealth UFO game with isometric 3D rendering. Abduct livestock. Avoid the witness threshold. Don't get classified.

C + raylib macOS iOS single-file

Mission Briefing

A rural farmstead. A stretch of I-95. The herd is unaware. You are not.

Drift in low. Hold the tractor beam over a cow until it lifts; a moment too long and the energy bar empties. A civilian inside your vision cone passes through Idle → Curious → Alarmed → Reporting; each tier feeds the threat meter faster. Hit 100% threat and the mission is classified. Lift every cow on the map and the level advances — civilian count scales up, the map flips between RENDLESHAM and I-95, and the herd gets larger.

Three flyable saucers, each with its own beam-energy economy. Hold C to lay procedural crop circles for the next morning's tabloids.

Features

🛸 Three Saucers

Hornet, Starlight, Greyhound — each with distinct speed, beam range, beam time, and energy economy.

👁 Vision-Cone AI

Four-state civilian alert: Idle → Curious → Alarmed → Reporting. Each tier escalates the threat feed rate.

🚔 Mixed Witnesses

FBI agents on foot and police cruisers (faster, slower-turning) split the spotter pool.

🚁 Patrol Helicopters

Search beams sweep the airspace. On detect they lock and chase for 10s; ignore watchtowers, rain threat at 16/s.

🌾 Crop Circles

Hold C to trace concentric rings, 8-fold petals, six-arm spirals. Get spotted mid-lay and the pattern dies.

🎞 Witness Polaroids

Vintage UFO photographs slide in from the screen edge whenever a civilian first spots you.

🎵 Reactive Audio

Looped title/beam/ambient music that ducks the moment any civilian sees you. One-shot stings for spotted/escaped/fly-by.

🗺 Live Minimap

Cow targets, all enemies (color-coded by alert state), the UFO, and the camera viewport — all live in the top-left.

🌀 Endless Levels

Each clear scales civilian count and flips the map. Run mode (Shift) burns through engine-startup stamina.

UFO Archetypes

Golden Hornet
Balanced — all-purpose interceptor
  • Speed320
  • Accel1400
  • Beam Range140
  • Beam Time1.4s
  • Energy6.0
  • Recharge1.0/s
Starlight
Heavy — long beam, slower flight
  • Speed240
  • Accel1100
  • Beam Range190
  • Beam Time1.0s
  • Energy10.0
  • Recharge1.4/s
Greyhound
Light — fast, short beam
  • Speed440
  • Accel1750
  • Beam Range105
  • Beam Time1.7s
  • Energy4.0
  • Recharge2.2/s

In-game stat units are alien jargon: speed in QORG/PYL, range in VEKKS, time in KRN, energy in ZYL.

Maps

Rendlesham
Levels 1, 3, 5 …

Rural farmstead inspired by the 1980 sighting. Rendered from assets/farm.glb, top-down projected onto a 3D ground plane.

I-95 NY
Levels 2, 4, 6 …

Section of New York interstate. Long sightlines, sparse cover — cruisers turn it into a chase.

Threat Cascade

Idle Curious Alarmed Reporting

Each tier feeds the threat meter faster. Threat decays at 5/s when no civilian sees you. Hit 100% and the mission is compromised.

Idle3/s
Curious7/s
Alarmed14/s
Reporting22/s
Helicopter16/s
Decay (no eyes)-5/s

Controls

Fly (camera-relative)W A S D
Run mode (engine-stamina)Shift
Tractor beamLMB / Space
Crop circleHold C
Pause / resumeP
Restart levelR
Free-flight dev mode1 (title)
QuitESC

Witness Polaroids

Whenever a civilian first spots the UFO, a vintage photograph slides in from the screen edge with a ±7° rotation, holds for 3 seconds, then fades. A small sample of what shows up:

Audio

FileTypeTrigger
title.mp3music (loop)title screen
start.mp3one-shottitle → play transition
floating.mp3music (loop)play, no eyes on UFO, beam off
spotted.mp3one-shotcivilian Idle → Curious
flyby.mp3one-shotUFO passes near idle civilian unseen
beam.mp3music (loop)tractor beam engaged
escaped.mp3one-shotlast witness loses sight (with threat ≥ 18%)
engine.mp3one-shotShift held — drives run-mode stamina
snap.mp3one-shotwitness polaroid trigger

Tech

LanguageSingle-file C, ~3.9k lines in src/main.c
Engineraylib 5.5 (no abstraction layer)
RenderingTrue 3D scene, orthographic isometric Camera3D
ModelsglTF (.glb) loaded once, NormalizeModel pre-bakes a transform per model
Mapfarm.glb (272 MB) pre-rendered to PNG cache; iOS bundle ships only the PNG
iOSUIKit + CAEAGLLayer + CADisplayLink bridge driving StepFrame()
Build./run.sh produces a real macOS .app bundle with Cmd+Tab icon

Climb the Leaderboard

The witness threshold is unforgiving. The herd is patient. Submit your run.

View High Scores → Source on GitHub