Nappyville (Prototype)
Project Status: Functional Prototype (10 Balanced Levels)
Role: Solo Engine Developer & Systems Architect
Tech Stack: Unity, C#, ScriptableObjects, Soap (ScriptableObject Architecture Pattern), Custom Editor Scripting
Project Overview
Nappyville is a real-time, lane-based tactical tower defence game inspired by classic lane mechanics. Players deploy customized unit types (such as Carrot, Broccoli, and Pumpkin units) to defend against advancing waves of dynamic enemies using type-specific tactical counters and dynamic attack bonuses. The project focuses on a robust, data-driven architecture that separates game configuration from execution logic, ensuring high performance, zero memory churn during gameplay, and modular scalability.
Key Engineering & Architecture Highlights
-
Data-Driven Architecture (ScriptableObjects) Utilized Unity ScriptableObjects and the Soap pattern to construct an completely decoupled configuration pipeline. Unit profiles (such as AttackingBabyDataSo) act as data blueprints, defining attack metrics, lines of sight, dynamic layer masks, and fire cooldown variables through highly modular asset management.
-
Scalable Wave Spawning Engine Engineered a fully serialized Wave configuration system that supports customizable wave delays, enemy tracking, and custom announcement events, allowing designers to balance difficulty scales without editing core gameplay code.
-
Advanced Editor Tooling & Automation
-
SpriteAtlasExtractor: Authored a custom low-level editor utility class to solve a deep-seated Unity Engine bug where the TextMesh Pro Font Creator could not access internally packed atlas files. Developed a brute-force texture extraction script using graphics rendering utilities (Graphics.Blit) and pixel reading configurations (ReadPixels) to physically save internal atlas maps as separate PNGs on disk.
-
SceneAutoloader: Implemented an automated global editor state listener using InitializeOnLoad to automatically route project execution through the main menu initialization pipeline while safely handling modified scene cache management.
-
-
Performance-First Mindset Designed systems utilizing interface contracts (such as IPooledObject) to lay the groundwork for object pooling services, avoiding heavy runtime instantiation and garbage collection memory spikes on mobile and lower-end platforms.
Want to see more under the hood?
If you want to read through the complete source code or look at how the real-time lane tracking grid manager calculates bounds, feel free to contact me directly or check out the repository!