About me:
Hey folks, I’m Dan Dahl - Senior Producer at Digital Extremes by trade, and hobbyist game developer after hours. Outside of work, usually a couple of hours each night and a few more over the weekends, I have been working on a passion project. Project: Pact is my take on classic browser RPGs like Mob Wars, with a modern visual twist.
My problem:
For a little background, I didn't get into persistent browser games during their early heyday when Zynga dominated Facebook gaming. I discovered them later in life, so nostalgia isn't what draws me to these games. There was something appealing about them, but I'd quickly become bored and churn away. This pattern repeated over the next couple of years with the same outcome - there's a hook that keeps drawing me back, but no lasting excitement to keep me engaged.
Here’s a picture showcasing the Job System from Mob Wars: LCN:
So, here I can see that I’m 78% through completing the “Fix a race at a track job”. The job is going to consume 20 energy, and requires a horse and jockey, which I must have purchased at some point. In return, I’ll get over one million dollars in cash and 40 XP. Clicking the button increased the progress bar by a couple of percent, gave me over $12 million dollars, 40 XP and some other random currency - 835 GP. It presents this to me in a pop-up dialog that just blinks into existence.
This flow works great from a nostalgic point of view, it’s very reminiscent of Mob Wars and Mafia Wars, back in the day - but this is also what I dislike the most about it. It copies the formula verbatim. Mafia Wars was released in 2008, and this feels very much like a game that was made 17 years ago. I tried Torn as well, and had the same issue, it has a good excuse to feel that way though - it is over twenty years old at this point, and that’s a great achievement to keep the game running and maintaining an active player base over this time.
Still, as a new player, I quickly found myself bored by the lack of interactivity, and overwhelmed by the noise in the UI. Both games feature extensive menus showing the potential depth of the game, and I felt lost in the clutter. To Torn’s credit, it did have a much better onboarding experience, but after completing a few tutorials, it became evident that I would need to invest a significant amount of time to catch up to a point where I wouldn’t be easily attacked by random players. I found the experience of getting mugged, and having my money stolen or hospitalized and unable to play when I wanted to - not really to my liking.
My Solution:
So here’s what I’m looking to do differently. Firstly, my game will have a focus on PvE with an opt-in PvP game mode, and it will take on a Dark Fantasy setting. The reason for this is two-fold. One, I prefer fantasy settings myself, and two, I want to add a few degrees of separation between my game and Mob Wars or Torn. Next, instead of Jobs or Crimes, it will have an Expedition system.
Much like classic MMORPGs, the world will be divided into distinct realms, each realm will be comprised of several zones, and within each zone are several specific locations. These locations might be community hubs, where players can go to interact, sell their wares, crafts goods, etc… or they might be Adventure locations where players can undertake Expeditions or Gather resources.
Both Expeditions and Gathering will use the Expedition system, but when Gathering, you have a higher chance of finding resources, over combat and other encounters. Locations can become temporarily “safe” after you complete a given number of Expeditions, allowing for a greater chance of harvesting resources and further reducing combat and hazard encounters.
With that detail out of the way, here’s how my UI is currently looking:
While I’m not a UI/UX Designer by trade, I have been spoiled by great UX experiences while working with modern apps, so I have a sense for what I like. I feel like this genre is ripe for modern visual design and a streamlined user experience.
Feature Breakdown
Difficulty Rating
To the top-left of my app is a set of three stars. When you begin your first expedition at a location, this will show up as three grey stars. Upon completing the Expedition, you unlock the next difficulty, and a blue star will replace the next available grey star - up to three blue stars in total. This will raise the difficulty of events (increasing enemy levels, increasing the required stat check to succeed, etc…) and increasing the amount of rewards granted. I haven’t decided if I will let the player select which difficulty they want to play, or just make it purely incremental. I am going to steal borrow a concept from Mob Wars: LCN here though. Once you 100% complete a zone, you’ll be able to ‘Prestige’ it, unlocking three additional difficulty tiers (gold stars) with even greater challenges and rewards.
Terrains
In the top-right corner, there will be an icon showing one of several terrains. From left-to-right, I have: Mountain, Forest, Desert, Plains, Coast and Swamp.
These act as filters for what components can be populated within events, defined within a Zone. Components will be variables that can either be randomly or deliberately set for an encounter.
For example, in the zone of Ashmoor, Combat events may yield encounters with various types of Goblins in Forest expeditions, while different kinds of Lizardfolk may lurk in Swamp expeditions. Hazard encounters may be populated by Quicksand in Desert expeditions, while Falling Rocks may occur in Mountain expeditions. Certain items might only be found from Discovery or Treasure events in Expeditions with a specific terrain type, in a given Zone. As another example, the [Emerald Rose] quest item is a component that can only be found from Discovery events in Forest expeditions in Ashmoor.
Event Grid
Each time the player clicks Explore (or the Autoplay feature ticks) a set amount of Stamina (my game’s Energy resource) is consumed, and a random event is triggered. This is displayed as a tile in the Event Grid. Note that this next image is from an earlier iteration. I’m using Rive to develop every aspect of this UI, and I recently pivoted to use one of their new Artboard List features to dynamically grow the length of the grid at runtime. Unfortunately, that means I can’t show it in action until I get the client code working for it.
Low resolution, and terrible to look at, but it demonstrates what happens. The first three times I click, I get one of the more mundane events, “Exploration” which will award me a small amount of experience, and include a simple story, like “Turning the corner, you come to an empty hallway. Torches mounted along one of the walls light your way forward.” A variable will store the current room you are in, in this case “Hallway” so subsequent events can carry on the story. The third time I click the Explore button, I get a Combat event. The description reads “As you approach the end of the hallway, a pile of bones rattle to life, and rise giving form to a [Skeletal Vagrant]. You parry its lunge and shatter its skull with a swift blow from your mace. You notice a small pouch hanging from its belt as it crumbles back into a lifeless pile of bone. You pick it up and carry on.”
This event would look up what monsters are available to my current expedition, and choose one at random. It would compare my combat prowess against the Skeletal Vagrant’s power to determine if I would successfully defeat and continue (gaining gold and XP) or retreat to safety (gaining just XP). It would also look at my inventory and possibly my skills to generate the story that goes with the event.
This would continue until you complete all of the events in the Expedition, or until you run out of Stamina. Should you run out of Stamina, your progress will be saved, ready for you to pick up where you left off when you come back. I’ll likely frame in with some kind of Town Portal mechanic, so you can go back to town and craft or spend other resources, and when you gain more Stamina, you'll be able to return to this Expedition and pick up where you left off, or pick a new Expedition entirely.
And these tiles represent my current set of Events:
From left-to-right, top-to-bottom I have:
- Exploration (Variant 1) - Mundane story, awards a small amount of XP.
- Exploration (Variant 2) - Exactly the same as Variant 1, just visual flavour that alternated with Variant 1 to give the impression of walking to the next event.
- Hazard - Some kind of danger that requires a skill check to avoid taking damage. Awards a moderate amount of XP.
- Discovery - The player discovers something important, maybe a quest item or a shrine that grants a boon for the rest of the expedition. Awards a large amount of XP and possibly an item or buff.
- Treasure - The player finds some loot. Awards a moderate amount of XP and Gold and/or Items.
- Social - The player encounters an NPC, possibly makes a skill check and gets awarded XP and potentially something else.
- Puzzle - The player encounters some kind of puzzle and needs to make a skill check. Success grants XP and Loot, failure just grants XP.
- Combat - The player encounters a hostile opponent. A quick check in power level difference determines the outcome and whether or not damage is sustained. Success awards a large amount of XP, Gold and/or items. Failure awards a moderate amount of XP.
- Rival - An encounter with a persistent, narrative-driven adversary. Ties into a planned turn-based combat system. The Rival system will have a quest to opt into it, and players will be able to opt into a battle with the Rival at this point or forfeit some advantage to them. Rewards will be dependent on the outcome of the combat or narrative beat.
- Boss - An encounter with a strong enemy. Only found in Dungeon and Raid Expeditions. Ties into a planned turn-based combat system. Rewards will be determined upon completion of the battle.
- Forage - Only encountered during Gathering expeditions specifically for Foraging. Awards some plant-based resource and a small amount of XP.
- Mining - Only encountered during Gathering expeditions specifically for Mining. Awards a small amount of XP and a mineral-based resource. Once you get one of these events, it triggers a sequence of another 2-3 Mining events, but these have a chance to flip over to reveal a Treasure or Discovery event, awarding additional rewards.
- Fishing - Only encountered during Gathering expeditions specifically for Fishing. Awards a small amount of XP.
- Catch! - Occasionally, a Fishing event will flip into a Catch! event, awarding a Fish resource, and a moderate amount of XP.
Description Box
Beneath the grid, this area will contain a small storylet, inspired by Fallen London. The label at the top will change to match the type of the event, and its colours will match the tile for the event, to help players make the association that the description in the box is tied to the event in the grid. The rewards gained from the event will appear as coloured pills at the bottom (Gold for gold coins, Teal for XP, and other colours based on rarity for items - Common items = Grey, Uncommon items = Green, Rare items = Blue, Epic items = Purple, etc…). Some components will be referenced in coloured text between square brackets. Players can tap these to pause the Expedition and get a pop-up dialog that gives more information on the component.
Expedition Progress
In the bottom-left of the UI, I have a progress bar. Instead of showing an abstract representation of progress as a percentage, you’ll see exactly how many events remain in the current expedition.
Explore Button
Finally, to the bottom right, is a Split Button. The larger side can be clicked to progress the Expedition to the next event, and it shows how much Stamina it will cost to do so. The smaller menu button beside it will open options to toggle between Manual Progression and Auto-Progression at x1, x2, and x3 speeds.
Auto progression will automatically consume Stamina on each tick until the Expedition is completed or the player runs out of Stamina. The idea is that Auto x1 will give the players enough time to read the story that appears, wait a beat, and then move to the next one, saving players the need to tap the button every couple of seconds. The Auto x3 speed is for players who don’t want to read and just want to get on with spending their energy. Lastly, Auto x2 is something in between these other two extremes.
Conclusion:
So, this is the design for one of the core features of my game. I believe it addresses the main issues I have with other text-based RPGs. I’d love to hear if anyone has any feedback or advice. I’m developing this through vibes (vibe-designing, not vibe-coding, I enjoy that part of the development too much to outsource it to AI), and I’m not an artist, but I think it looks okay, though I would welcome opinions on that as well.
Currently, I have a first pass on my backend model, built and deployed on Serverpod, which gave me a nice starting point for my game. I'm simultaneously developing an Admin app and a Game client - the Admin app will let me set up the game data that the client uses. I'll be focusing on one feature at a time, with Expeditions being my priority, and my next few weekly blogs will walk through my development process for this feature.
Thank you to anyone who has read this far, I appreciate you taking the time to read about my project. For anyone who's interested, you can follow along my progress with weekly updates over at magipunk.com or on this Discord server that I just threw together - disclaimer: It's pretty bare bones at the moment, and will likely stay that way until I develop a community around my game.
It's very early days, and I don't have a timeframe for Alphas or Betas yet, but I have been making steady progress and plan to maintain a steady rhythm for working on content. While I'll be heading off to bed shortly, I'll be more than happy to reply to comments tomorrow morning.
Cheers,
Dan Dahl
Top comments (0)