Deadly Daily

Survive Your Workday.

A corporate survival game where sprint planning might actually kill you.

REC
TEASER COMING IN THE FUTURE
STATUS: IN DEVELOPMENT

Welcome to the Office.
Try to Survive.

Deadly Daily is a 2.5D isometric pixel-art corporate survival game where every decision could be your last. Navigate through a dystopian office environment where the real monsters wear suits and carry clipboards.

Choose your path through branching narratives, manage your sanity and health, and uncover the dark secrets lurking beneath the fluorescent lights. With roguelike elements and multiple endings, every playthrough offers a unique descent into corporate madness.

Will you escape, comply with the system, expose the truth — or become just another statistic in the company newsletter?

2.5D
Isometric Pixel-Art
4+
Unique Endings
Replayability
🎮 SCREENSHOT COMING SOON
// SCREENSHOT: LEVEL_01_OFFICE_FLOOR
Core Mechanics
❤️ Corporate Survival Loop

Manage health, sanity, and career. One bad meeting costs everything.

👥 NPCs with Agendas

Every coworker has a plan. Trust no one. Befriend strategically.

🔀 Multiple Endings

Escape, comply, expose the truth — or become a statistic.

📋 Office Tools as Lore

Jira-inspired tasks. Your tickets are your lifeline.

🧠 Psychological Horror

Watch your mental health deteriorate in real-time.

Roguelike Permadeath

Die and start over — with scars and hard-won knowledge.

DEV LOG

Progress Report

Building notes from a solo dev. Honest, unfiltered, chronological.

Godot 4 GDScript 2D Pixel Art Lifestyle Simulator / Survival

Deadly Daily was born from a personal experience. Every day: wake up, go to work, survive, come home, repeat. No grand story — just Monday, then Tuesday, then Monday again.

I wanted to make a game that captures it exactly as I feel it: lightly cynical, self-aware, realistic. Work, exhaustion, small joys, and the quiet weight of decisions that are never actually good.

The game has no winner. The goal is simply to survive.

QA pass — the bugs were always there

Full quality pass across the entire project. Signal leaks, null crashes, hard-coded paths, a double callback nobody had caught — all fixed. The game wasn't visibly broken. That was the problem.

TECH DETAILS

  • Hard-coded pathgame_over_screen in player.gd was loaded via get_tree().root.get_node("WakingUP/...") → replaced with current_scene.get_node_or_null("CanvasLayer/GameOverScreen") with null check
  • Signal leaksdialog_bar.gd and smalltalk_bar.gd: lambda connects couldn't be disconnected → replaced with named methods _on_choice_a/b/c; disconnect-before-connect added; dead _on_AnswerA/B/C_pressed functions removed
  • Memory leak_exit_tree() added to player.gd to disconnect the died signal on scene unload; was leaking on every reload
  • Null safetystart_dialog() and start_smalltalk() in stranger.gd, reception.gd, reception_evening.gd: player_ref.get_node() called outside if player_ref: block → rewritten with early return
  • FileAccess — null checks added in GameState.gd and SettingsManager.gd; failed file opens now log push_error() instead of crashing silently
  • State name typoscoffeMachine_usedcoffeemachine_used; coffeemachineevening_used_usedcoffeemachineevening_used; fixed in GameState.gd and Mainmenu.gd
  • Signal mismatchreception_evening.gd was checking "smalltalkeve_finished" on disconnect but disconnecting "smalltalk_finished" → signal never actually disconnected → double callback on every repeat interaction

Turns out "it works" and "it's correct" are two different things. The game was working fine. It just wasn't right.

Forced wake in apartment — edge case

If you spent the whole night in the apartment, the game would skip the forced 06:30 wake entirely — the day transition just wouldn't happen. Fixed.

TECH DETAILS

  • Added WAKE_TIME constant (06:30 in seconds) to waking_up.gd
  • forced_wake_triggered flag prevents double-trigger
  • _process() now checks: if day_advanced_by_clock and game_time ≥ 06:30 → call _force_wake_up()
  • Fade to black (1.5s), reset flag, transition to WakingUp.tscn; energy unchanged — player just lost the night

Nothing like finding an edge case that basically breaks the entire day cycle. Classic.

Game clock, interaction routing, punctuality, night lock

Time now means something. Arriving late costs you. Staying out past 18:00 locks you in. The daily routine finally has structure — and consequences.

TECH DETAILS

  • Game clock — 24h loop at 60× speed (1 real second = 1 game minute); HH:MM shown under day counter; automatic day change at midnight
  • Sleep energy — every started 30 game-minutes of sleep = +4 energy; 8h+ bonus by difficulty (+30 / +20 / +10)
  • Forced wake — if not in bed by 06:30: fade to black + alarm sound + transition to WakingUp; no energy penalty, just no gain
  • Interaction routing — pressing E near multiple objects shows "What do you want to do?" panel; objects self-register on collision; alarm bypasses routing when ringing
  • Office punctuality — before 08:00 → Success +2; after 08:00 → −1; absent all day → −3; every 30 game-minutes at the office → +1
  • Night lock — apartment door locked 18:00–06:30; home desk available as overtime from 18:00 (same effects as office desk)

The world finally feels like it's moving even when I'm sitting still.

Big session: menu, UI, localisation, NPC journal

Menus are actually usable now. The NPC journal remembers everyone you've met — including the cat, who is always watching. Language switching works live.

TECH DETAILS

  • Menu UX — ESC triggers quick Continue (greyed out if no save); confirm before deleting save; difficulty selection on new game; autosave replaces manual Save button
  • Stats UI — full redesign with colour-coded bars and numeric values; Popularity removed from HUD, kept as hidden mechanic
  • Settings — complete menu: volume, fullscreen, difficulty, language, keybind remapping
  • Localisation — full EN/CS via TranslationServer + CSV; stat labels, menu buttons, NPC text, feedback messages, game over all translated; live language switching
  • Feedback bubble — stylised dark panel above the character, fade-in → display → fade-out; interrupted cleanly on new message
  • NPC Journal — menu screen with all encountered NPCs and their affinity; per-NPC relationship tracking; the cat is in the journal (always watching); autosave after every dialogue

One of those days where everything happens at once and somehow it mostly works.

The world grows

The game now has a Game Over screen and enough props placed to feel like a real world. Backup commits kept the project alive during a quiet stretch.

Sometimes just keeping the project alive counts as progress.

Apartment mechanics

First time the apartment feels interactive: you wake up, you turn off the alarm, you make coffee. The daily loop has its first beat.

First time it actually felt like a morning routine.

Project kickoff

Fresh start after a shelved prototype. The main menu is up. Deadly Daily 0.2 exists.

Day one of what was supposed to be a small project.

Mossvale Studio

About Mossvale

A small Czech indie studio building games fueled by caffeine, spreadsheets, and existential dread.

Powered by caffeine and poor life choices

📊

Spreadsheets: our second language

⚠️

Existential dread included free

We're a team of developers who've survived one too many corporate jobs and decided to channel our trauma into game development. Deadly Daily is our love letter to everyone who's ever felt trapped in a conference room that should've been an email.

Based in Prague, we work remotely (ironically, we're living the corporate dream we're satirizing). We believe in creating games that make you think, laugh uncomfortably, and question your career choices.

👤

Petra Fišerová

Project Manager · Custom Software Dev · AI-First · Solo Game Dev

Petra works as a project manager in custom software development — which turns out to be excellent research for a game about surviving office life. She's AI-first by conviction, not by trend: Deadly Daily has been built with AI as an active collaborator from the first commit. One person doing the work of a studio.

// error_404: work-life_balance.not_found