Inspiration
The project grew from frustration with the familiar split in media where “wizard” often reads as learned and benign male, while “witch” is shorthand for female evil. Burn the Witch challenges that framing, giving the mantle to a protagonist who is powerful because she cares and disciplined because others depend on her. The historical memory of Salem provides a thematic undercurrent: crowds are easy to marshal when fear leads, and authority often cloaks cruelty in righteousness. This backdrop supports a gothic tone—ruins, candlelit stone, and a sacred space turned profane—delivered through a pixel aesthetic that keeps the world stylized and readable while preserving emotional weight.
Story
Ursula is the last survivor of a small coven of orphaned girls raised by an elderly witch on the edge of town. Their quiet life ended when a warlock–known publicly only as the Bringer of Death–grew jealous of Ursula's innate power. He abducted her sisters, sought to break their spirit for his own rituals, and left them to die. Ursula withdrew even farther from the village, both because she was unwelcome there and because distance kept the warlock's malice away from innocent people. In solitude she trained, and returned with a vow not just to avenge the fallen but to stop the cycle that produced them.
The narrative reclaims “witch” from its common villain coding: in this world, a witch's power is bound to care, responsibility, and the willingness to protect those who fear her. The dead themselves endorse her cause: spirits linger where the living failed them, guiding her path with quiet sentences carved into stone and with crystals that catch the moonlight like waypoints. By the time Ursula confronts the Bringer of Death, her arc has shifted from vengeance to stewardship—she fights to close the wound, not merely to strike back.
Precision platforming: Jump across gaps, moving platforms, and hazards with tight, readable control.
Gem collection: Pick up gems as optional rewards that subtly guide the optimal path through each stage.
One-hit death: Any touch from enemies or projectiles kills Ursula instantly.
Fireball combat: Attack at range in the facing direction to clear threats before they close in.
Boss objective: Progress through three levels to reach, learn, and defeat the final boss.
Together, these mechanics create a fast, punishment-heavy loop where survival depends on careful movement, smart spacing, and reading enemy and level patterns, rewarding players who master each stage in a clean, uninterrupted run.
Level
Level 1 Swamp
Ursula’s journey begins in the wet hush of the swamp where she has lived in exile. The marsh lies deep within a forest of overgrown trees and tangled roots, long abandoned by people. Beneath the mud rest countless human remains from an age no one remembers. Early enemies are transformed fauna such as oversized spiders that lunge in sudden bursts, foreshadowing the warlock’s experiments with life long before she reaches his stronghold. This level teaches the player to cast spells, control distance, and avoid lethal contact in order to push through to the next area.



Level 2 Cemetry
The second stage turns silence into counsel. Stone statues stir just enough to speak in brief carved lines when Ursula approaches, and spirits guide her by teaching her to follow the trail of shining gems through the graves. Enemies are hostile giant mice that patrol in fixed, readable routes, demanding carefulness. The background grows heavier here: dark, crowded hills and a deep purplish-red moon hang over the scene, signaling an approaching calamity and building a somber tension as Ursula moves closer to the boss’s domain.



Level 3 Abandoned Church
The third level reveals the truth of the antagonist's power. Stained-glass windows throw fractured color. Enemies here embody a perversion of sanctity: angel-like fliers with rigid, haloed silhouettes and follower wizards who shoot fireballs. The deeper Ursula goes into the church, the clearer it becomes that the church is a manufactory of obedient creatures assembled from the dead and the barely living.



Boss Level: Bringer of Death
The final battle takes place beneath a broken stained-glass window in the church. The Death Bringer has two attack modes: a close-range reap attack and a thunder spell that targets Ursula's location. Players must closely monitor his movements, anticipate both attacks, and continuously fire while weaving through danger. Ursula's years of training have finally paid off; she severely wounds the Grim Reaper and uses her final spell to sever the life force he steals from the living, utterly destroying him. Ursula's path of revenge then shifts from simple vengeance to self-redemption and saving the world he has corrupted.


Technical Design
This section explains how the game runs under the hood: movement, camera, dialogue, environment interaction, enemies, collectibles, and the boss fight.
Player Control & Camera Follow
Ursula is driven by a custom PlayerController on a Rigidbody2D with ground checks and direct velocity control for tight platforming. Horizontal input sets the x-velocity within a capped speed; a grounded check (overlap at a foot point) gates jumping; facing is flipped via Y-rotation and reused for spell direction and animation states. Attacks are triggered through input, play an attack animation, and spawn a projectile from a firePoint using SpellScript. Death (enemy collision, hazards, falls) routes through a single handler that swaps layers, stops motion, plays animations/SFX, and calls into GameManager for death UI.

CameraFollow tracks Ursula with smoothed horizontal motion and discrete vertical bands so the view is stable but still reveals upper and lower routes. Background elements can follow only on X to create a subtle parallax feel without extra systems.

Dialogue System (Ink Integration)
Dialogue uses an Ink-based system wrapped by DialogueManager and DialogueTrigger.
DialogueTrigger volumes show an interaction icon and call DialogueManager.EnterDialogueMode() when the interact button is pressed with a specific Ink-generated JSON asset.

DialogueManager is a singleton that creates an Ink Story from JSON, shows a dialogue canvas, steps lines on E, and parses tags (e.g. speaker:) to update speaker labels. It also displays multiple-choice options via pooled buttons and uses the EventSystem so keyboard/gamepad navigation “just works.” When the story ends, it hides the UI and returns control.

Materials2D: Wind & Fluid Zones
Wind zones are implemented as trigger areas using WindTrigger, which starts/stops a wind AudioSource when the player enters or leaves, tying ambience directly to level regions without extra state management.

Fluid/swamp areas are defined via tilemaps with colliders and appropriate physics/material settings: visually distinct tiles mark slow/dangerous ground, and movement/penalties are handled through collider configuration plus existing player physics, keeping the system data-driven rather than hard-coded.

Tilemap, Enemies, Spells, Collectibles
Levels are built on Unity Tilemaps with 2D colliders for solid ground and hazards. Moving/platform behavior is enhanced by PlatformSticky, which temporarily parents Ursula to moving platforms while she stands on them, preventing sliding or desync.

Enemies use EnemyScript and EnemyTrigger on prefabs with Rigidbody2D. They patrol horizontally, flip based on direction, and respond to SuccessfulHit() by playing hurt/death, disabling colliders, and destroying themselves after a delay. Collisions with the player call the shared death routine in PlayerController, keeping fail states consistent.

Spells (SpellScript) are spawned from Ursula’s attack animation, move in her facing direction, and destroy themselves on impact or timeout.
Collectibles (CoinCollect) use triggers to increment a gem counter in GameManager, update the UI, play SFX, and self-destroy.
Boss Fight
The boss encounter is activated by BossFightStart, which enables the boss object when Ursula enters a trigger, ensuring the fight scene loads seamlessly from exploration.

BossScript manages autonomous behavior: it orients toward the player, closes distance when far, and switches between melee and ranged attacks based on horizontal distance bands. Melee attacks check an overlap circle; ranged attacks spawn thunderPrefab with a short delay at the player’s position, using ThunderScript to define the hit zone and call SuccessfulHit() on anything in range.

BossHealthScript links the boss’s HP to a UI Slider, initialized from BossScript.HP and updating on every hit. The bar color shifts from green toward red at low health, and the UI is destroyed when HP reaches zero. On death, BossScript plays a dedicated sequence: stop BGM, play boss death SFX, trigger death animation, destroy the boss object after a delay, and notify GameManager to show the win screen.
Arts
Most visual elements are built from online asset packs, selected to match a consistent pixel-based, gothic aesthetic that fits the dark, witch-centric story and echoes classic side-scrolling platformers. The pixel style keeps shapes clear and readable, while the gothic elements support the themes of persecution, corruption, and quiet resilience. This approach lets me focus on composition, lighting, and mood rather than custom asset volume, while maintaining coherence across sources.

References
Arts
Evil Wizard 3 by Luiz Melo
https://assetstore.unity.com/packages/2d/characters/evil-wizard-3-284492
Monsters_Creatures_Fantasy by Luiz Melo
https://assetstore.unity.com/packages/2d/characters/monsters-creatures-fantasy-167949
Bringer Of Death (free) by Clembod
https://assetstore.unity.com/packages/2d/characters/bringer-of-death-free-195719
GothicVania Cemetery by Ansimuz
https://assetstore.unity.com/packages/2d/characters/gothicvania-cemetery-120509
GothicVania Church Pack by Ansimuz
https://assetstore.unity.com/packages/2d/characters/gothicvania-church-pack-147117
GothicVania Swamp by Ansimuz
https://assetstore.unity.com/packages/2d/characters/gothicvania-swamp-152865
Gothicvania Bridge expansion by Ansimuz
https://assetstore.unity.com/packages/2d/environments/gothicvania-bridge-expansion-237630#content
GothicVania Town by Ansimuz
https://assetstore.unity.com/packages/2d/characters/gothicvania-town-101407
2D Pixel Item Asset Pack by Startled Pixels
https://assetstore.unity.com/packages/2d/gui/icons/2d-pixel-item-asset-pack-99645
2D Animated Coin - 2D RPK by Marco Siino
https://assetstore.unity.com/packages/2d/environments/2d-animated-coin-2d-rpk-22009#content
Pixel Art Gem Pack - Animated by karsiori
https://assetstore.unity.com/packages/2d/environments/pixel-art-gem-pack-animated-277559#content
Font
Jacquard 24 by Sarah Cardigan-Fried from Google Fonts
Jacques Francois by Cyreal
https://fonts.google.com/specimen/Jacques+Francois?query=jac&preview.text=Credits
Audio
Fantasy Sfx by Little Robot Sound Factory
https://assetstore.unity.com/packages/audio/sound-fx/fantasy-sfx-32833
Horror Game Essentials by Rosalba Vazquez García
https://assetstore.unity.com/packages/audio/sound-fx/horror-game-essentials-153417#content
RPG Essemtials Sound Effects - FREE! by leophaz
https://assetstore.unity.com/packages/audio/sound-fx/rpg-essentials-sound-effects-free-227708
hit 1 by alphatrooper18
https://freesound.org/people/alphatrooper18/sounds/362422/
player-hit-impact by alphatrooper18
https://freesound.org/people/alphatrooper18/sounds/362422/
coin.ogg by Yoshicakes77
https://freesound.org/people/Yoshicakes77/sounds/703541/
horror 01_loop by supervanz
https://freesound.org/people/supervanz/sounds/428865/
Wind howling and blowing in a field in Texas, close to Dumas. USA. by felix.blume
https://freesound.org/people/felix.blume/sounds/216892/
myst forest drone atmo dark fantasy cinematic by szegvari
https://freesound.org/people/szegvari/sounds/617283/
Bit Forest Evil Theme music by Bertsz
https://freesound.org/people/Bertsz/sounds/545458/
wet spell shoot by Bertsz
https://freesound.org/people/Bertsz/sounds/524305/
monster death scream by Syna-Max
https://freesound.org/people/Syna-Max/sounds/56304/
thunder by SGAK
https://freesound.org/people/SGAK/sounds/467777/
Church Organs created in LMMS by Encek
