Game Time, the console app, is a habit-tracking & reward framework oriented around gaming. Since it runs on PowerShell Core it can be used in Mac, Linux, and Windows.

In a nutshell, user's define short term 'quests' that help them achieve their long term goals. Each quest completion rewards points to be exchanged for real life gaming time. Therefore, Game Time is really a framework for balancing work time & play time. The goals are two-fold: 1) to facilitate progress on long-term goals 2) to add structure (when and how long) and reflection (notes or journaling) to gaming.

gametime console app menu screen

TLDR

Visit the project page on github for source code & installation instructions, and see ABOUT.md for a more in-depth overview of how to use the system effectively.

PowerShell Client

The PowerShell client aims to make the quest making and reward spending functionality easy and accessible across OS's by utilizing the cross-platform PowerShell Core.

The app's design language blends gaming aesthetics such as the ubiquitous 'directional pad' with translations of material or web design elements like cards, tabs, and radio-boxes to the constraints of an ascii based terminal. The app strives to be simple to use, with consistently located prompts and controls so the user always knows what options are available to them.

gametime console app spend points screen

The initial release includes the ability to create and complete jobs which are either Quest, Daily, or Rare; Completing quests rewards the user with points which can be exchanged for gaming time. Standard quests can be completed repeatedly or for a time period, daily quests can be completed once per day, and rare quests are removed after they are completed.

Users can add notes about their play sessions and quest completions which can be browsed on the logs screen. The launch command, gametime, supports a parameter that allows the Game Time database to be stored in an arbitrary directory, enabling cloud backups to a service like Dropbox.

A little development history

I wrote Game Time because I was wanted something to help me balance these seemingly conflicting desires: 1) to work towards my long-term goals 2) to play video games. In my experience, if I wasn't losing track of time and gaming for too long, I was on the other end of the spectrum, unable to launch a game in the first place for the nagging guilt that I had too much left to do. As this pattern became evident, I imagined a simple productivity system that would mix habit tracking with gamification:

Doing work rewards points and points equal gaming time.

A few years ago I made a lackluster web-app version of Game Time on .NET MVC to practice .NET. I planned a node/MEAN stack rewrite (and this may yet come to pass), but bike-shedding and Azure deployment issues prevailed and I abandoned the project. I wrote Game Time as a bullet journal module. Later on, I used the basic structure of "Game Time" to practice my PowerShell, specifically for an automation I was writing that involved CSV parsing. I went further though and wrote out a rough terminal menu proof of concept.

early proof of concept

After this, I got inspired to see how far I could push the design of my app. I drew upon my experience with web design and labored to make the console app feel more 'physical'. I experimented and iterated on ascii versions of web/ui design concepts. I also leaned hard into the retro gaming aesthetic. I chose a retro font logo to convey the mood and indicated available directional controls with a compass much like a Gameboy or the point and click adventure games I made in college. I found a few PowerShell guru's online who shared their insights on printing ascii art and even writing games for the PowerShell console. This gave me a huge boost of confidence early on.

The actual visual experience is somewhat flickery. Functionally, the screen is completely repainted whenever an input is received and a change must be reflected. I haven't figured out how to repaint more efficiently than that, aka how to blit in the PowerShell console. I'm fairly sure that it's possible though! Nevertheless, I decided to punt that particular issue.

Conclusion

I've still yet to really put GT through the paces. If it turns out this is really useful tool I'll consider giving this project new life on a web app/mobile platform like Flutter or React Native. GT is logically a mobile or web app for the convenience of not being tethered to a specific device/terminal. If you're interested trying out the current console app, however, please do. Let me know if it works for you. Create an issue if you'd like to help out or leave me a comment with your thoughts.

Thanks for reading!


Last updated