- Tools & AI
- Creative
- Delivered
Horror VN Kit
A Unity toolkit for branching psychological-horror visual novels. I built the systems so Eden, our writer and artist, could author every scene, choice and scare in the Inspector, without code or a scripting language.
- My role
- Toolkit programmer and tools designer
- Team
- Eden: writer and artist. Me: toolkit programming and tools design
- Built with
- Unity 6, C#, TextMeshPro, ScriptableObjects, custom editor drawers
- Status
- Delivered as a university major project (spring 2026), packaged as a .unitypackage
The design goal
The kit handles the tedious parts of a visual novel (memory, text formatting, portraits) so the writer can focus on writing and atmosphere. Partway through, Eden found Ink, a narrative scripting language. I looked into it and decided against it: it's powerful for huge branching games, but means learning markup and writing outside Unity, which broke our no-code goal. We spent that time on horror effects instead.
Systems
Data, not scenes
Characters and conversations are ScriptableObject assets. A character profile holds a list of named emotion portraits, so a writer can add a “Smirk” or a “NoFace” without anyone changing code.Branching with memory
Choices link to the next conversation asset. The dialogue manager remembers which branches the player has seen and hides choices that lead back to them, so a hub investigation can’t loop forever.Typewriter and audio
A standalone typewriter reveals text without re-wrapping lines mid-reveal, plays randomized voice blips every few letters, and lets the player click to finish a line early.Horror text effects
Per-character mesh effects like jitter, wobble and a blackout focus that darkens everything but one phrase. The writer picks an effect and types the target word into a box; no tags.
Guardrails for the writer
Most bugs in a writer-driven tool come from the data, not the code, so I put the checks where the writer works: a custom Inspector drawer that lays itself out without overlapping labels.
Character counter
Every line shows a live count in the Inspector and turns red past 110 characters, the point where text would overflow the dialogue box.Emotion dropdowns that can’t lie
The emotion menu only lists portraits that character actually has. If an invalid one slips in, it snaps back to Neutral and logs a warning instead of showing an invisible character.Manual overrides for glitches
A line can override the speaker’s name or portrait for one moment, to create a distorted or “imposter” beat without making a new character.
Process
I documented the build in six dev diaries, from a Git ignore rule that tried to upload 33,000 Unity files to a typewriter flicker caused by update order. I also wrote a designer's manual covering setup, branching and troubleshooting. The kit shipped as one Unity package with the manual inside.