James Liu

Alternate-controller horror game

Signal Lost

A physical rotary phone becomes the interface to a horror game. I engineered the hardware integration, handled game builds, and contributed to gameplay system design.

Signal Lost poster featuring a red rotary phone inside a dark telephone booth
My contribution

Owned hardware integration and game builds; contributed to gameplay system design.

Tools & methods

Unreal Engine · C++ / Blueprints · Arduino · Python · MediaPipe · OSC

Project

Alternate-controller horror game

One playable system across hardware and software.

I engineered the physical controller and hardware integration, handled game builds, and contributed to gameplay system design.

Implementation details

I was responsible for all hardware-related engineering and the game’s build engineering. My work connected the physical phone, input and output devices, and Unreal into a playable system; I also participated in gameplay engineering discussions.

The game’s premise—observe, report, survive—makes a familiar telephone an unsettling interface. Dialing, speaking, listening, and player attention become parts of the interaction rather than separate peripherals.

  • Engineered the physical controller and hardware integration
  • Integrated the input, audio, and attention pipelines with Unreal
  • Handled game builds and contributed to gameplay system design

Translate the rotary dial into game input.

The rotary phone carries both input and output: dial a number, speak into the handset, and hear the game through its speaker.

Rotary controllerA mechanical dial becomes game input
Physical inputTurn the dialElectrical pulses
MicrocontrollerDecode digitsELEGOO Mega 2560
USB serialSend to the PCDecoded dial input
UnrealDrive interactionGame input logic
Voice & physical audioSpeak to the game. Hear it answer.
Voice in
HandsetMicrophoneAudio to the PC
RecognitionSpeech → textVoice input processing
UnrealReport & interact
Sound out
ControlUnreal commands
RoutingVLCMulti-device audio output
DevicesPhone + external audioAmplifier drives the phone speaker
Implementation details

The rotary mechanism produces electrical pulses. An ELEGOO Mega 2560 reads those pulses and sends input over USB serial to Unreal, connecting a mechanical interaction to the game’s input logic.

A microphone provides voice input to the PC, while an amplified speaker routes game audio through the telephone. The controller is both an input device and a physical audio output.

  • Rotary dial → Mega 2560 → USB serial → Unreal
  • Microphone → PC voice input → game interaction
  • Game audio → amplifier → telephone speaker

Make the player’s attention part of the interface.

A computer-vision pipeline tracks the player’s face and attention, then passes that state into Unreal.

Face tracking & attentionPlayer attention becomes a gameplay signal
CaptureWebcamPlayer’s face
TrackMediaPipeFace tracking in p5.js
BridgePythonWebSocket in · OSC out
GameplayUnrealReceive attention state
Implementation details

The attention pipeline uses a webcam and MediaPipe in a p5.js application. A WebSocket connection forwards the result to a Python bridge, which sends attention state to Unreal through OSC.

The engineering challenge is coordinating these separate device and application paths with gameplay. My role covered hardware integration, build engineering, and system design discussions so the complete setup could function as one experience.

  • Webcam → MediaPipe / p5.js → WebSocket
  • Python bridge → OSC → Unreal attention state
Next projectBehavior Tree Framework