Playscaping Your Life - Jinni's MMOIRLRPG Inventory System
The best games are ones that you make for yourself. Jinni lets players customize their loadout with physical and digital items e.g Fitbit, Spotify. The more items equipped, the more your jinni evolves
Happy 1-month anniversary for Jinni 🎉🍾
Its the 1 month anniversary since I started making the game. Been hustling the last month to build the game from scratch and get a working prototype for zuconnect. This was obviously an ambitious goal (nothing new) and I got way farther than I expected. Including the insane progress in terms of actual code written and features developed, I’ve already done some of the most technically challenging features I thought I’d have to make in the entire game are already done. The game lore and game design is practically writing itself at this point, like now everything is an inventory item and calling wallets "“spellbooks” that you “cast spells” from, which weren’t even ideas when I started a couple weeks ago. I’m excited to start onboarding people and get user feedback over the next two weeks at zuconnect with this zuper aligned community across health & wellness, art/philosophy, privacy and AI/ researchers, longevity data/hardware projects, and social coordination experimenters.
Get all the latest game updates and recommend features you want prioritized
Playscaping Your Life
The best games are ones that you make for yourself. With Jinni I’m not just creating a game, but a playground for people to create their own games to play with themselves and others. It is a game that helps you figure out what games you want to play and help you play them better. By gamifying the whole self-actualization process we are gamifying life itself. Jinni isn’t the answer, it helps you find the right questions and guide you to the answer thats right for you.
The game won’t tell you what you should be trying to become or how to get there. Its your life, your process, and you need to own that process. Self-actualization is introspective and subjective - it can only be done by you, for you. So how do we enable people to play the same game of self-actualization together while everyone also creates and plays their own version of the game that works for them at the same time?
I am taking the approach of RPG games where people can customize their loadouts for their personal style of IRL gameplay. Inventory also acts as an easy way for other people to understand how you are playing the game in comparison to their play style. For example in World of Warcraft two people choose to be paladins but one is a tank vs DPS which is obvious from their profile page without ever having to see them play.
While the game doesn’t define what actions everyone *should* take or *can* take, it does define how they can bond their IRL actions to their jinni and what abilities this will give them. So for example, I don’t say that you should go for a run, or even that running is a part of your game, but you can decide to bond your Apple Health data to your jinni and so every time you go for a run (or walk, or yoga, or….) your jinni automatically receives energy from this.
Design Strategy - Games > Gamification
The problem with other health and productivity gamification apps is that they gamify but aren’t actual games. They dont have stories or progression, do things that you don’t find fun because thats what they want people to do, and at often turn into micromanagers requiring you to login and document everyday. Instead of tasks/quests to gain experience as the primary interaction point in our game, you interact with your jinni through inventory items to gain attributes.
In Jinni I've deliberately chosen not to incorporate a simplistic "points system" akin to XP. Instead, players enhance their jinni's abilities by equipping items that bond your energy to your jinni to evolve over time. The more diverse your items, the more attributes you have, the more ways your jinni will grow and evolve. Alternatively, players can focus exclusively on specific stats to mold their jinni into a specialized archetype. Self-actualization is a multi-dimensional journey unique to each individual, attempting to oversimplify this complexity into a points system would undermine the choose-your-own-adventure gameplay by comparing players to each other. Avatars function as data visualization tools, attempting to illuminate the nuance of each player's path, transcending mere graphs or single numerical metrics.
This game design has the key product benefit of incentivizing players to connect as many integrations as possible. We can get a holistic sense of your being to project it through your jinni’s visual evolutions.
We need better games in the world! I know you know someone else making dope games. Connect us so we can make better games together 🥰
Item Abilities & Widgets
Everything in Jinni is a game item. Want to feed your jinni health data from your phone? Equip the “Cyborg Repair Kit
”. Want to share your Spotify music on your home page? Equip the “Horn of Vibranium
”. Making everything an item with a standardized interfaces is a well disguised plugin system that automatically frames everything in game lore and makes it stupid easy for me to add new features and functionality whether its a physical or digital item. More importantly it means anyone can easily extend the game with their own items or add abilities and widgets to existing items.
This plugin based inventory system with extensible abilities and widgets are also a big part of the super app concierge bot strategy of Jinni. It allows me to easily integrate new tools to evolve the game over time and let players discover new ways to play and things to play with. Equipping items automatically unlocks some abilities and widgets on that item while others might be unlocked over time based on achievements or item usage.
Abilities are singular actions that benefit the player which is enabled by the item. The most important ability in the game is “Activate Jinni
” on the “Malik’s Majik
” item. You equip()
the item by getting tapped into the jinniverse with my majik card which unlocks the majik thats already inside you and gives you the ability cast spells in the game. “Activate Jinni
” is the first spell you cast to find a jinn in the ether that will become bonded to you and resonates with the energy you feed it through items.
An ability for Spotify that I’m working on is “Silent Disco
” with friends that creates a shared playlist and only uses songs that you already have downloaded on your phone so you can party in the middle of nowhere or middle of city without disturbing anyone.
Widgets are shortcuts you can put on your homepage profile. Widgets aren’t an action that someone takes, its a static element to define the aesthetics of your jinni. They are the main way that you customize your profile to show your vibe and play style to other players. They give you and other players easy access to information about your jinni and ways to connect with it. One of the Spotify widgets puts your favorite playlist or a playlist of your theme songs on your homepage so people can see/hear it when they arrive in your house. Widgets dont have to be attached to a specific item necessarily. The stats widgets shows your jinni’s total stat points accumulated across all items for example.
I have an ongoing list of inventory items to integrate and widgets/abilities to build on top of them. Its not a project management dashboard (thats not fun) but you can generally track item development, steps to integration, where I’m at with them, and add comments on what items/abilities/widgets you’d like to see 🌞
Item Types - Physical, Digital, Virtual
There isn’t a class/type/tag system for items (yet) but the main way I’m thinking about them are in terms of physical, digital, and virtual items. Physical items are things you have in the real world - phones, watches, cards, rings, etc. Digital items are web services like Spotify, Github, Facebook, where you are accessing some platform/content/data instead of a physical object. Virtual items are digital assets that may be real/useful or not and may have ephemeral existences e.g. loyalty points or NFTs.
My primary focus is on local first items - physical and non-internet digital like getting your steps data while my secondary focus is on social items - things that let you talk/share/create/etc. with other people (even non-players). Of the first 3 game items so far, 2 are physical and one is digital and there are 2 more physical items waiting to be built for iOS.
Physical
Highest development friction, lowest in game friction. Dealing with hardware means a wide range of environments that the app is running in and receiving data from. They are usually closed-source and rarely have good APIs for us to consume. For example I am using Android Health Connect which comes preinstalled on some android phones but not on others.
Physical items are the lowest friction item for players to use in-game (aka IRL) because they live on your body so without you doing anything they collect reliable data on your life. If you choose to see them as not just gadgets but as IRL inventory items that give you majik jinni powers in the real world, the physical reminder about your intentions for wearing the item in your self-actualization game will keep you focused on your mission.
Digital
Medium dev friction interfacing with standard web services and indie app APIs. Medium in-game friction since they tend to pull you out of the physical world but you probably already use them so not creating another task for you to do to play the game. We get to feed your jinni very divergent data points about work, music, entertainment, etc. Things like productivity and screen activity trackers come in a hundred different UI and API flavors but with this inventory system it shouldnt take too work to get the main ones all supported. This is also where much of the initial social features will live so pretty important piece.
Virtual
I haven’t started working on virtual items yet and won’t for a while but I know how i will make them already since they have the lowest dev friction due to their open source nature. Definitely going to use ZKPs so your jinni can remain anonymous and not reveal your identity through their inventory items. For example in order to equip a “Monkey Mask
” (-10 intellect, -10 Djinn, +20 Community, +20 Spirit) you would prove you’ve held a Bored Ape NFT in your wallet for at least 6 months without revealing which ape or which address. I like this mechanism for virtual items for a few reasons.
Maintenance is way easier/cheaper since I don’t need to pay for APIs or constantly watch chains to verify ownership. Its a one and done proof allowing the game. This also makes it easier to self-host the game in the future.
ZKPs are platform agnostic so can be used for any silo-ed data origins e.g. banks, health records, etc. as well as any blockchain without any custom integrations for each source. That ease + privacy aspects + extensibility of inventory systems
Proofs are more effective than APIs for ensuring you are the one that has actually earned the item - you could say you own any address so I would still need proof from you that you own an address anyway so its easier to only prove you’re qualified with ZKP anonymously instead of proving who you are and what you’ve done with APIs + signatures.
This mechanism also means you get to keep your item because you have done work to earn it, it is imbued with your energy. Even if you transfer the NFT away (for example) that experience and item will always be a part of you.
We can progressively unlock more items or abilities based on how long you prove you’ve had the token, how many you hold, having a combination of tokens, etc. E.g. “
Curious George Boots
” is someone that held Bored Ape for only 1 week instead of 6 months.
Current Game Progress
Getting great feedback on game concept from people at zuconnect which I’m actually surprised by. I figured all these people would have used/heard of something similar but no one has tried comparing me to another app. Dont know if they are being nice or assume I’m making something unique if I’m at zuconnect or these other apps aren’t as popular as I assumed. It might be that I’m calling it a “self-actualization game" now instead of “health & wellness gamification app” thats a major shift in framing that I’m happy i took.
ecrecover()
implemented in API for all requests. Players only sign the queries so theoretically some replay attack potentials since we aren’t signing the data being sent or validTo timestamp or anything but that is trivial to add in later.Testing framework for frontend setup and running. Starting with coverage on core utility functions, getting to inventory items.
Started learning about and writing clojure.spec as a test suite. Starting with data validation for API requests, data transmutations to from raw user data to game :Actions. Had the genius idea that I could use data and function specs to just autogenerate code for every data transmutation for item integrations instead of hand coding. Dont even need fancy shmancy AI, should be able to write a macro to do it. Could be applicable to other types of spells in the book so all the “runes” in the spellbook are just weird looking Clojure macros.
Dockerized the clojure server and getting CI/CD setup on github repo + cloud provider. Kinda writing type definitions and specs but haven’t used them yet nor integrated into CI/CD yet 🥶
Finally fucking finished OAuth login flows! 🙃 Can now
equip()
items connected to other apps and services. Going to be developing out Spotify features in the app starting next week. and working on Github integrationsInventory item page overhaul
Designed more information dense screen layout
Added content for non-game lore human descriptions of what the item does and benefits you get in the game for equipping it.
Added item abilities & widgets as a concept
Moved whitelisted onboarding flow with jubjub cards as an ability. Receiving my signature is still part of `equip()` but now you can use the “Activate Jinni” ability to actually create an account and start saving data.
pseudocode implementation of a few Spotify abilities + a widget
Getting app store stuff going so I can release test versions. Google play store is ready to go I think, haven’t started autopublishing in CI/CD yet but thats not a big deal. Apple is being classic Apple and has blocked me from paying for a developer account so I cant even test my app on my own laptop. Haven’t even gotten to the stage of being rejected for the app store because I cant even build an iOS app to submit to them.
Tested production deployment of android app. Things seem to be working fine in the sense that I am correctly receiving crash reports with code lol.
Submitted app to Google Play store. Waiting for approval to get access to users health data.
Generating random wallets/seed phrases in the app for users when creating accounts. This is a separate step from starting and playing the game which anyone can do but game data wont be saved.
Walked through downloading the app from the website to test the UX flow. It’s terrible lol. Heaps of security warnings even on Android for sideloading apps. One user could download the file but it didnt properly install. I think thats an issue with Android version since im targeting recent OS versions.
Next Steps
Really fucking need to get my server deployed and internet accessible so that I can actually onboard people. This is fucking paramount. Needs to get done by next Monday so I have a full week of onboarding and user testing at zuconnect.
Polishing up game UI bit by bit to make it more usable for people. Already hid the tzolkin and auth pages for now since they aren’t used at the moment.
Test app from fresh by downloading from website like normal player
Figure out talk/workshop on Jinni game to run at zuconnect next week
Continue working on testing suite. Been fucking with a lot of little improvements/logic paths to get things production ready and while everything works great, there were a lot of fragile software with the weird stacks I’m using even with the basic app i have today
Working on Spotify social features which I know will require a lot of work on the inventory system.