Crime Cats · In Development

Every cat has an alibi. Almost.

An original, clue-driven seating puzzle adapted into a focused Android prototype.

For players

Read the clues. Seat the suspects. Solve the case.

Crime Cats tests whether a physical logic-puzzle concept feels good on a phone. Six recurring cats, a consistent board, and structured clues make every case a compact deduction problem.

Forty cases

Ten cases each at Beginner, Intermediate, Advanced, and Expert difficulty.

Direct play

Drag and drop cats into clockwise seats, swap placements, and keep unneeded suspects in the tray.

Persistent progress

Completed cases, the latest case, and a separate unfinished arrangement for every case are saved locally.

Clean replay

Solving clears that case’s unfinished arrangement, so a replay starts from a clean board.

Consistent world

Board landmarks and evidence remain fixed; each case changes the clue set, crime seat, seating solution, and culprit.

Offline prototype

No account, networked features, social layer, or cloud dependency. The full case set lives on the device.

Current status: Private Android gameplay prototype in development. Contact support@wildonionlabs.com about playtesting.

For developers

Puzzle data that can prove itself.

Architecture

Kotlin and Jetpack Compose UI over a pure Kotlin placement/swap/solve engine. Models define canonical geometry, cat traits, structured constraints, cases, and solutions.

Generated catalog

The forty-case Kotlin repository is generated from an authoritative JSON source so supplied clue text, mappings, null seats, solutions, crime seats, and culprits remain exact.

Deterministic rules

Clockwise left/right semantics and physical across-seat pairs are encoded once. Every structured clue constraint is executable against a candidate arrangement.

Uniqueness testing

A brute-force unit test enumerates legal arrangements and confirms every clue set has exactly one solution matching the supplied answer.

Persistence

A small SharedPreferences repository stores completion, resume position, and independent in-progress placement state per case.

Failure containment

Domain logic stays separate from Compose interaction geometry, allowing placement, swapping, incomplete/wrong/solved outcomes, and catalog invariants to be tested without UI state.