Project Overview
Soul Snatched: Ginger Edition is a solo-developed 2D top-down ARPG where the player defends villages from nightly zombie invasions. The core focus is on systemic design: a tight day/night loop, a morality-driven soul siphoning system, and wave-based combat that responds to player choices.
Over time the project has grown into a full ecosystem: the Unity client, a Node.js/Express backend, and a React dashboard used to author, balance, and export the entire item and vendor economy as JSON. This lets me iterate on design quickly while keeping the game data-driven and consistent.
Gameplay Media
Work-in-progress visuals - focus is on systems and feel rather than final art.
Vendor & shop UI: opening the blacksmith, hovering items, and preparing gear before nightfall.
Equipment & stats: swapping gear and seeing character stats update in real time, including paperdoll visuals that track hair stage and gender.
What the Footage Demonstrates
- Vendor & shop UI driven by reputation and in-game currency.
- Equipment window updating stats dynamically as gear changes.
- Inventory and tooltips reacting to item selection and focus.
- UX focus on quick readability and clear feedback for player decisions.
Combat Showcase
A short demonstration of Soul Snatched's core combat loop. Includes: night spawn warning, enemy waves, hit feedback, and player death sequence.
Core Systems & Architecture
How the game is structured under the hood.
Day/Night and Wave Manager
- Central WaveManager controls spawn timing, enemy composition, and lane routing.
- Day/night state machine triggers village recovery, shop refreshes, and preparation windows.
- Difficulty curves are data-driven, allowing tuning without changing core code.
Morality, Souls, and Reputation
- Reputation value ranges from hostile to revered, clamped and color-coded in the UI.
- Souls are a separate currency gained only from villagers, not enemies.
- Vendors and NPCs query reputation to decide inventory, prices, and dialogue options.
- Hair growth / visual state is mapped to soul thresholds for instant feedback.
Equipment, Stats, and Combat
- Items defined via ScriptableObjects with base stats, rarity, and tags.
- Equipment slots drive a stat aggregator that feeds into damage and defense calculations.
- Melee and ranged attacks share a common combat pipeline (hit detection, damage event, feedback).
External Tools & Data Pipeline
- Node.js/Express backend exposes endpoints to manage items, stats, rarities, vendors, and vendor stock, persisting everything as JSON.
- React dashboard lets me author and balance items visually: choose icons, configure stats and enchants, assign vendors, and preview how gear will feel in-game.
-
A one-click export flow generates normalized JSON files
(
items.json,item_stats.json,rarities.json,vendors.json,vendor_stock.json, etc.). -
On the Unity side, ItemDatabaseRuntime and a custom importer recreate
ItemDefScriptableObjects from JSON, attach the correct sprites fromResources/ItemIcons, and register them with runtime systems. - VendorRuntime consumes the vendor stock JSON to build shop inventories at runtime, so buy/sell logic, prices, and quantities all come from the same source of truth as the web tools.
- Recent fixes ensured that buying and selling handle stacked items correctly and use the same runtime inventory abstraction on both sides.
UI & UX Implementation
- Inventory, vendor, and equipment panels built as separate components, wired through events.
- Tooltip and context menus reuse a shared data model and are repositioned based on cursor offset.
- Reputation meter, hair state, and currency text subscribe to central game events rather than polling.
- Equipment panel now includes a paperdoll that reflects player gender and hair stage, driven by the same hair profile logic used in-game.
Professional Development Practices
How I treat this project like a production game, not just a prototype.
Code Quality & Architecture
- Consistent naming conventions and strict encapsulation of gameplay state.
- Separation of data (ScriptableObjects/JSON) from behavior (controllers and managers).
- Use of events and interfaces to decouple UI from gameplay systems.
- Refactoring passes to remove unused methods and keep responsibilities clear.
Tools & Workflow
- Git-based version control with feature branches and descriptive commits.
- In-editor debug views for wave states, reputation, and AI decisions.
- Use of Unity Profiler to track spikes from spawning, pathfinding, and UI updates.
- External Node.js/React tooling feeding JSON into Unity, so designers (future me or collaborators) can work without touching engine internals.
Tech Stack
- Unity (C#)
- 2D URP
- ScriptableObjects & JSON-driven content
- Node.js & Express
- React (item/vendor dashboard)
- REST APIs & tooling
- Git / GitHub
My Role
I am the sole developer on Soul Snatched. I handle programming, system design, backend tools, and implementation, while leveraging free and placeholder art so I can prioritize gameplay, feel, and scalability.
Credits & Asset Attribution
Acknowledging artists and creators whose assets supported prototype development.
Character Art
- Male & Female Protagonists – Custom art created by Sammy (friend / collaborator).
Enemy, NPC, and Environment Art
- Monsters & Pirates Pixel Art Pack by Kenny / PixelFrog / LionRoot (Unity Asset Store)
- Bringer of Death – Free by Edwin del Rio (Unity Asset Store)
UI & Icons
- Addin’s Free Weapon Icons – RPG Icon Pack by Addin
- Pixel Art Icon Pack – RPG by Cainos / Cainos Pixel Art
- 110 Free Armor and Jewelry Icons by CaptainCatSparrow
- Simple Free Pixel Art Styled UI Pack by Jakub Varga
Sound & SFX
- CABAL Voice Lines – Inspired by Command & Conquer: Tiberian Sun.
Soul Snatched: Ginger Edition uses third-party and placeholder assets strictly for prototype and portfolio demonstration purposes. All assets remain the property of their respective creators.
Current Status & Roadmap
- Core wave, morality, and reputation systems: functional.
- Vendor and equipment systems: implemented and connected to reputation.
- Node.js/React item & vendor dashboard: implemented, exporting JSON that the Unity importers consume to rebuild the in-game economy.
- Recent work: new enemy prefabs (Monsters & Bringer of Death), updated zombie animations, and paperdoll visuals tied to hair stages.
- Next steps: content polish, more enemy types, dashboard quality-of-life, and public demo build.