Inspiration

Murudenu Tavern comes from one of my earlier games, A Matter of Choice, a dark card-game RPG. I took its world, its village and its story, and looked at them from somewhere else: behind the counter. Murudenu is a village about to boil over, four factions that can't stand each other, and every one of them ends up drinking at the same inn. In this game you play a different character in that universe, the innkeeper, the one person everybody has to deal with and nobody listens to.

I wanted the tension of that village to fit in one thumb: not a story you read, but a room you have to keep from exploding, night after night.

What it does

You run the inn. Every night the door opens and guests sit down. They show what they want, you tap the right bottle, the glass fills, you slide it over. Too slow and they slam the door; three slammed doors and the night is lost.

  • Four factions share the room. Seat two rivals side by side and a fuse lights: drag one of them to a stool further away before fists fly.
  • Every ten nights, a boss takes the counter. Six figures of Murudenu, each with their own rule and a health bar you empty by serving well. Halm's order always goes first. Mira's order vanishes as soon as it's spoken. Frederik fills the room three at a time. Bruse splashes every glass. Escaut changes her mind mid-order. Vess stays silent and grows impatient.
  • The back room. Coins from a held night buy upgrades: more seats, a repainted sign, a waxed counter, a tidy cellar, a shelf, a slate, and three employees who carry glasses, calm tables and wipe seats.
  • Sixty nights, then the inn is yours. After the ending the door opens again, the regulars come back and the room fills faster.

The first seven nights are free. One non-consumable purchase unlocks the rest forever: no subscription, no ads, no premium currency. Single player, offline, in ten languages.

How I built it

  • Flutter for iOS and Android from one codebase, Riverpod for state and go_router for navigation, with the paywall enforced as a route redirect rather than scattered checks.
  • RevenueCat (purchases_flutter) serves the offering and the entitlement on both stores. The last known entitlement is cached on the device, so a paying player is never locked out on the subway; RevenueCat corrects it as soon as the network answers.
  • The night itself is a pure Dart simulation, independent from the widgets. That let me write a bot that plays the game: it runs all sixty nights at different reaction times and measures how long each night lasts, where players fall and how fast the shop empties. The difficulty curve is frozen in tests, so a tweak that breaks it fails the build.
  • Sentry for crash reports, with no personal data: no user, no request, no screenshot.

Challenges I ran into

  • Finding the game. My first prototype was a slow narrative management game about arbitrating between factions. It was rich, but it didn't hold on a phone. I rebuilt the core as a one-thumb arcade loop and kept what mattered: the village, the factions, the characters.
  • Balancing sixty nights by hand is impossible. The bot above was the answer. It showed me where the curve flattens, which boss is much harder than the others, and when the shop runs out of things to buy.
  • App Store review. My first submission was rejected because the reviewer couldn't find the in-app purchase: the paywall only appeared at night 8. I added a clear "Buy the full version" button on the home screen, which also turned out to be better for players.
  • One room, every screen. The tavern is a painted scene with tables at fixed places. Making it readable from an iPhone SE to a 13-inch iPad, without cropping a table, took several passes.

Accomplishments that I'm proud of

  • A complete game, built solo in about five weeks, from the first Flutter commit to the App Store.
  • Live on the App Store and Google Play.
  • Six bosses that each change how you play, not just how hard it is.
  • A monetization model I'd want as a player: try seven nights, pay once, own it.
  • A difficulty curve that is measured, not guessed, and protected by tests.
  • Ten languages from day one.

What I learned

  • Put the purchase where people, and reviewers, actually look.
  • RevenueCat removes most of the pain of receipts, but the fallback when the network is gone is still your job, and it matters most for the people who paid.
  • A game loop written as plain, testable code pays for itself the first time you need to balance it.
  • Ship the small version first: the narrative depth is still there, in the world and the characters, without asking the player to read.

What's next for Murudenu Tavern

Now that the inn is open, the players decide. The balancing bot tells me where the curve is flat; the first reviews and crash reports will tell me where it hurts. The next updates will follow them: smoothing the middle of the campaign, a second cycle of bosses, and the Google Play launch, already in testing.

Built With

Share this project:

Updates

Submission history