After 10,000 years, I’ve finally published updates to Friendo!

> You can play it here: friendo.mattdelsordo.com <

Apologies in advance: Friendos hatched in v1.x.x are not compatible with this new version.

Click for a changelog from version… 1.2.1?

Changelog for Friendo 2.1.3

Gameplay

  • New resource: hunger! Feeding your Friendo refills their hunger bar - the more full your Friendo, the more energy they’ll passively regenerate.
  • Relatedly, energy now passively regenerates without you having to constantly feed your Friendo. Different activities will affect how fast your Friendo gets tired.
  • Sleep is now more punishing as an incentive to keep your Friendo well fed and to not tire them out too quickly.
  • You can now choose what to feed your Friendo! Fancier meals refill more of the hunger bar. Your Friendo will be able to tolerate fancier meals as their Taste level increases. Select a meal from the Feed button’s dropdown, and check back to see whether a new meal has unlocked.
  • The status bar now displays what activity your Friendo is engaged in, and a timer shows how much longer they’ll be doing it. Clicking the (x) next to the timer will cancel the current exercise.
  • If you close the game, your Friendo will continue exercising while you’re gone! Be sure to feed them regularly.
  • Added a button to the character creator that will randomly generate a name for your Friendo.

Interface and UX

  • New backgrounds! No more white void. Each Friendo has access to the default Home background and one other location corresponding to their element. You can choose a background from the dropdown in the upper left of the viewport.
  • The game now caches itself on your machine, so you can play it even if you don’t have an internet connection (so long as you’ve visited the page once before).
  • You can now install Friendo locally on your machine! This is the coolest change in my opinion. Look for a prompt to add Friendo to your home screen if you’re on a phone. You can even do this on desktop if you use Chrome.
  • The page title now indicates what your Friendo is doing, so you can see while in another tab.
  • Added tooltips that explain parts of the UI. Try mousing over an emoji if you don’t know what one indicates.
  • Rudimentary keyboard controls ([enter] will click main buttons, arrow keys will manipulate the exercise popup.)
  • Misc. changes that (hopefully) improve UX on small screens.
  • Did a bunch of optimizations that hopefully make the page faster and more accessible.

Internal

  • The ENTIRE animation system was completely rewritten to accommodate the new energy system. If you’re wondering what those had to do with each other… exactly.
  • Re-architected how speech works to better accommodate a large number of more dynamic speech options.
  • Changed how saving works to make it harder to cheat/reduce save file size. The game now saves automatically every five minutes, and when you exit the page.
  • Added the ability to backup and restore your Friendo from a “dna” file to try to compensate for using local storage to store save files. Click on the Settings gear icon in the header for this.
  • Tweaked internal values for… pretty much everything. Experience, energy gain, blink rate, you name it.
  • Updated some dependencies for security (tm).

Behind the Scenes

To make a long story short I basically had to rewrite the entire guts of the game. After putting Friendo out there around a year ago I got a bunch of feedback and decided that the next feature I wanted to add was the hunger system. I wanted to disincentivize players from setting really long workouts and then just leaving for ages, and incentivize them to interact with their Friendo more frequently. Having Friendos passively regenerate energy at the price of harsher sleep seemed like a way to do this. When I went to implement that, though, I soon realized that the animation code and the state management code were so tightly coupled that I would have to completely rewrite the main game loop. It ended up being a bigger undertaking than I’d hoped and so my development pace kind of slowed down as I was busy with the end of school and moving to NJ, but eventually in like September I decided that having this project out there, unfinished, bugged me too much, so I picked up the pace.

The other reason this took so long is that creating content is hard. Working on Friendo’s game engine and adding functionality is one thing, but adding content, like the background images, or potential speech options, or new mechanics, or game balance, takes a different kind of thought and it isn’t as clear-cut what “done” means. Using software frameworks and game engines in your projects is valuable because it saves you precious time figuring out how to make your Thing run and lets you dedicate yourself to making your Thing good. The fun part of writing Friendo for me was just trying to make this little squares-dude come alive, so I’m not put out or anything, but when I take a step back from that I kind of go… is Friendo… fun?? I hope so! I think I’ve definitely made it like, quirky and cute, but as a GAME, that people PLAY, I can’t really tell. Making sure everything is fun was more difficult that I expected, and I might be too close to the code at this point to properly judge that for myself. If I do something like this again, design is going to come first, and everything is going to be implemented as a function of that design, with Real Tools For Adults. None of this pure ECMAScript 2015 + jQuery junk, we’re talking Typescript and Vue, baybee.

This is all to say that, at least for now, I’m declaring Friendo “done”. Overall, I’ve spent like three years (!!!) of my life working on this on and off, and I’ve learned a crapton along the way. But I want to do something new, and try out some new technologies. No idea what it’ll be, but I hope I come up with something cool. IF you reading this are a big Friendo fan and there’s a change you really want, I encourage you to implement it yourself and open a pull request on GitHub! Friendo is open source and I would be elated if other people wanted to contribute to it.