# Light & Dark — Prototype A 2D platformer built with **Pygame**. You switch between two forms — **Light** and **Shade** — each with different movement, combat, and ability behavior, all driven by a single shared resource: **Charge (Flow)**. > Note: this is a prototype. All progress (quests, boss tokens, broken walls, defeated bosses) is **in-memory** and resets when you restart the game — intentional, for fast testing. --- ## Running the game ``` python pygame_test.py ``` Requires Python 3.10+ and `pygame`. Game data (rooms, items, sets, enemies, drops) lives in `data/`. Rooms are edited with the included browser tool: `level_editor_v43.html`. --- ## Controls | Action | Key | |---|---| | Move | A / D | | Jump | W | | Move down / drop | S | | Heal | Space (hold) | | Melee attack | E | | Ranged shot | Q | | Dash | Tab | | Shatterstep | R | | Tether | X | | Reality Break | C | | Toggle Light/Shade | Left Shift | | Interact / Talk | F | | Inventory | I | | Stats overlay | H | | Pause / Settings | Esc | --- ## The two forms **Light** — faster movement, higher jump, and charge **refills** over time. You take contact damage from enemies. **Shade** — slower but tanky: **immune to enemy contact damage**, deals double melee damage, and can use shade-specific gear bonuses. But being in Shade **drains Charge** (and Shade is forced off when Charge hits 0). Shade also drains Charge **twice as fast while clipping inside an enemy**. **Charge (Flow)** — base max 100, refills at 20/s in Light, drains at 40/s in Shade. Standing near a **lantern/light source** doubles Charge regeneration. Attacks, dash (Light), ranged shots, and healing all cost Charge. --- ## Abilities (by form) | Ability | Key | Light | Shade | |---|---|---|---| | **Melee** | E | 1 damage, costs 1 Charge | **2 damage**, costs 1 Charge | | **Dash** | Tab | Costs 10 Charge; **stuns** enemies hit | Costs 1 HP; deals **4 damage** to enemies hit | | **Ranged** | Q | Costs 5 Charge, 0.45s cooldown, 0.5 damage; **breaks green ability walls** | Same, but 1.0 damage | | **Shatterstep** | R | Spawns a **platform under your feet** while airborne (extra jumps) | On landing, creates a damaging **shockwave AOE** below you | | **Tether** | X | **Binds** the enemy (3s) and **fears** it (runs away) | **Insta-kills** enemies below a HP threshold (normal ⅓, miniboss 20%, boss 5%); otherwise **slows** them | | **Reality Break** | C | Doubles drop & coin rates and glows enemies | **Instantly kills all enemies** but halves drop & coin rates | | **Heal** | Space | Spend Charge to heal over ~2s (slower while healing) | Unavailable | --- ## Combat notes - Enemy contact damage only applies in **Light** form. - Boss **shockwave attacks poison** you for 4 seconds: the health bar turns green and you lose 1 HP per second. - Attacks and hits use invincibility frames and knockback; your melee hitbox covers ~30% into your body so close/overlapping hits always connect. --- ## Equipment & Armor Sets Slots: **helmet, chest, pants, necklace**. Pieces roll stats (move speed, heal, charge, health, etc.). **Rarities:** `tempered` (tier 1) → `attuned` (tier 2) → `awakened` (tier 3, unlocks ability slots). The **Upgrader** NPC turns 5 tempered copies of an item into 1 attuned copy. **Sets** (3 pieces of the same set, attuned or better): | Set | Summary | |---|---| | Dawnrunner | +HP; awakened adds Light move speed | | Gravemark | +max Charge; awakened adds Charge regen | | Vitalweave | +HP; awakened adds +heal | | Duskwarrior | +Shade damage; awakened restores Charge on Shade hits | | Twister | Removes Shade speed penalty; awakened gives move speed after switching forms | | Paladin | Chance to negate incoming damage; awakened adds +HP | | Luminal Growth | +Charge regen while standing still in Light; awakened also negates damage | | Abyss Cleaver | Chance to heal on kill; awakened also gives move speed on kill | | Umbraflow | Reduces Shade Charge drain | | Adaptive Traveller | Move speed after switching forms; awakened restores Charge on switch | The shade-focused sets (**Duskwarrior, Umbraflow, Abyss Cleaver, Adaptive Traveller**) are intentionally **excluded** from early boss and town-shop loot, so you can always complete the remaining sets. --- ## NPCs (Town 1: Gloomreach) - **Vendor** — sells basic armor pieces. - **Necklace Vendor** — sells necklaces. - **Upgrader** — attunes 5× tempered → attuned. - **Combat Master** — upgrades your boss token to unlock the **Hard** boss variant. - **Boss Diary** — an interactable book: view your collected boss tokens in a grid, slot/unslot them, and start refights. --- ## Rooms & Progression - `room_01` — tutorial. Contains a **quest object** (pink): accept the **"First Kills"** quest (kill 4 normal enemies → 5–15 light coins, repeatable). - `room_02` — first enemies. - `room_07` — hub, branching to the boss, reward room, and town. - `room_boss_01` — **Gloom Warden** fight. Defeating him drops his **boss token**. - `room_reward_01` — reward chest + the **Ranged** ability, locked behind green ability walls. - `room_town_gloomreach` — Town 1 (NPCs above). - `room_boss_refight_01` — diary refight room (same arena, no exits until the boss dies or you die). --- ## Boss Diary & Tokens 1. Beat the world boss → collect his **token** (teal pickup). 2. Bring it to the diary in town and **slot** it (or keep it in your inventory). 3. Slotting unlocks **Fight (Normal)**. Upgrading the token at the Combat Master unlocks **Fight (Hard)** — the boss moves and shoots twice as fast. 4. Dying in a refight returns you to the diary. Removing a token from the diary sends it back to your inventory, disabling the fight until you re-slot it. --- ## HUD & Stats - Top-right: health bar (turns **green while poisoned**), Charge bar, coin counts. - Ability icons with cooldown indicators (top-left). - **H** toggles a detailed overlay: exact HP/Charge, move speeds (both forms), heal duration, attack rate, Charge regen, the lantern buff, and any stat bonuses from gear.