GrooveStomp

GrooveStomp Profile Picture

Proteus Review

The best way I can think of to open this review is by quoting myself: “What a weird, boring, delightful, pleasant game. It is really difficult to feel [it] or describe it in one way.”

Proteus is boring. You walk around and have very little agency in the world. You can chase creatures and not much else. I really wish days could be shortened to 5 minutes instead of the current shortest value of 15 minutes. It’s also very soothing. The ambient music works its way into your subconscious. The chirps, squeaks and squawks of the wildlife are enchanting and harken to real outdoor life. There are moments when the game appears to adjust your walking speed downward, and this calms rather than aggravates.

There is one specific interaction that works for me and represents my favorite gameplay mechanic in the game. Before the seasons change, a collection of sprites gather and swarm, gradually spinning more rapidly as you approach their center. You can get close enough so they reach their maximum speed, but then simultaneously hold back and watch the effects on the world. At this state of maximum chaos I quite enjoyed watching the moon and the stars in the night sky; following them as they sped around the planet housing the island I was exploring. My mind would wander to the heavens, imagining similar - or drastically different landscapes in the comsos - all waiting to be explored.

There are really nice touches in Proteus. I like that there’s a button you can hold down which slowly blackens the screen in a way that looks like you’re closing your eyes. Hold it down long enough and your eyes close completely, eventually kicking you back to the main menu. The snapshot feature is neat. Ultimately snapshots are just game saves, but they feel like a photo album and stepping into them is fluid like exiting to the main menu is. On the Vita you can enable gyroscopic freelook; a feature I found to greatly increase immersion.

In Proteus it’s a pleasure to discover new creatures you never noticed before. Interacting with some creatures has an effect. What other creatures might cause some effect? The buildings and landmarks intrigue. Some are clearly the remnants of previous civilizations. But the whole world still feels mostly empty and pointless. There is joy for sure, but there is also boredom. The more I played, the more I enjoyed what I was doing and started getting hooked into the atmosphere, and the more I appreciated the overall experience. I’ve now played three times, each several months apart. Proteus is an experience that will always be welcome in small doses over long stretches like this.

Inspired to Share Gaming Experiences

This past weekend was a little bit rough. Dee and I were both feeling really under the weather so we pretty much got as little done as possible. Dee took over responsibilities for dropping Lily off with her folks, so I jumped at the opportunity to catch up on a few shows. Among them was Jodorowski’s Dune, a film I found to be rather inspirational.

For a long time now I’ve felt rather disillusioned with modern AAA videogames. My preference is definitely for more lo-fi entries and throwback “Retro” games. Things like 1001 Spikes, Super Meat Boy and more. But that’s one part of it. I’m also really intrigued by experience-based games. Gone Home is one of my favorite games of all time. Games like MirrorMoon EP and Fract OSC are also wonderfully different experiences focused on exploration and wonder instead of violence and linear progression.

I’ve decided to take my inspiration from Jodorowski’s Dune and apply it toward the latter interest. I’m currently curating a list of games falling into both style of games mentioned above. I plan on playing through them and writing up my experiences and thoughts. Concurrently with this I’m going to explore an experience-based game design of my own. I’ve only just begun to do this, so I make no guarantees on delivery whatsoever. However, I am rather personally motivated to do it and I plan to keep it small and focused. I will also be focusing a lot on building technology for it. My hope is that this configuration of passions is sufficient to see the design through to its end.

Well, that’s it for now. See you next time Space Cowboy.

Data and Domain Isolation

Today I present some scattered thoughts on organizing data and logic in programs.

I’m starting with MVC because it’s pervasive and well understood. As a pattern for wrangling complexity, it’s solid because it’s so simple: organize your program into three main components and that’s how you deal with complexity. As a bonus, the file organization of your program can just follow the pattern and use three folders. This simplicity makes it easy for new teammates to understand what’s going on. Because it’s so simple, however, MVC has some limitations you encounter pretty quickly. In the Ruby on Rails community they’ve come up with Service Objects. This is really a modification of MVC to what I’ll call MVCS. Instead of three layers, you now get four. Inevitably MVC winds up stacking a bunch of logic into either the controller layer, or the model layer. MVCS adds Service Objects as a new layer intended solely to house application logic. In my experience, this additional layer works pretty well in practice. While it’s a simplistic bandaid to the also-simplistic MVC pattern, it does improve understandability in the programs that I’ve used it with.

Let’s talk about data. Oragizing and modelling data is almost a non-issue in Rails applications, because everybody just uses ActiveRecord and puts all models into the models/ directory. That’s it; everything lives happily together in a monolithic codebase. No problem. But what about “microservices”? By microservices, I simply mean a collection of applications (usually smaller, though not necessarily “micro” as the name implies) that communicate with each other in place of a single, larger, tightly coupled application.

I am not at all an expert on microservices, but I have some experience working with them. I’ve read almost no literature on the topic, so my perspective is most likely naive in that regard. Before I start talking about data, I will preface that there are many ways to decompose programs into microservices and I’ve only had experience with one particular direction - decomposing based on application domain. Follow me on a detour now, while I set up a sample program that we’ll talk about in terms of microservices.

The Detour

Let’s use a hypothetical music application as an example. Let’s say our application will allow the user to rip CDs, to purchase music from an online source, to upload music, to search for music and it will also provide a recommenation engine. If we were going to decompose based on domain, we might end up with separate applications for each of:

Most likely, such an application would have a single front-end interface to present to the end-user. This is a great starting point. It seems like we’ve got some separate domains that are well defined, based on specific functionality. What implications does this division put on our data model? Here are some thoughts that come to mind:

And some questions that come out of those:

How do we organize our data across these applications? Purchasing music requires access to user purchase history. Recommending music requires access to the user’s existing music collection, which may or may not consist entirely of their purchase history, but probably also would like access to search history and uploads. Purchasing music should probably take into account music that’s already been uploaded by the user. We should allow the user to download music multiple times and to different machines.

End Detour

There are two main methods I can visualize for organizing our data. Option 1: Each application can have all of its data local to itself, in an isolated database. This is optimal for keeping services independent from each other, but incurs costs in terms of replicating data and dealing with stale data. Option 2: We can share all data in a universal database and have each application just grab whatever is needed. This is great for data normalization and accuracy. If there is complex business logic associated with reading and writing data, though, and that business logic lives outside of the database itself, then we run the risk of misusing the data, or of duplicating business logic across multiple applications. There are many hybrid approaches that optimize for different needs. You can have isolated databases that replicate to and from a universal master. You can have services be restricted to only access data they need. You can share business logic as library code. You can even do this latter form in multiple ways that approach language-agnosticism. It’s important to keep in mind that with all of these decisions we’re not necessarily reducing complexity, but we’re trying to isolate it and improve any of: runtime cost, memory cost, development cost, data archival accuracy or any number of other factors. Any such decision is always going to be simpler if all the requirements are laid out clearly and prioritized. This is a situation where it’s particularly important not to engage in architecture astronautism and focus on the constraints that are known, as decisions made here can have unforseen long-term effects that may be difficult to address.

Next time I want to start talking about application communication in a microservice architecture. Data organization and models can have a large impact on long-term costs associated with developing and maintaining a project. Decisions about application communication can amplify those costs (or savings).

Balancing Development Considerations

It’s common knowledge that changes are cheap to accomodate early in the lifecycle of development. The extent to which this is true can feel rather visceral, depending on the competing needs of the project and the available resources.

Programming is an iterative process involving a lot of in-the-trenches work, some reflection, and a lot of effort to address technical debt. I think it’s really important to partake in this holistic view of software development regardless of the day-to-day realities of the office. Doing so can help to combat any weariness from the workplace, and keep you motivated about the project. Unfortunately, doing this can also have a negative impact on family life and other non-career-specific goals. I don’t know of a good solution to this specific issue, so I always try to focus on family at home and career at work. Mostly this has worked well.

There are always a lot of tangential or less important issues that need addressing outside of the core considerations of a given project. There’s also a lot of downtime on any given project due to any number of factors. Smaller side issues can sometimes be addressed during bouts of downtime, and dedicated thought can be directed towards larger issues. If management and the team are on board with it, it may be possible to divert a little time away from the primary concerns of “the project” to focus on larger side issues. This can be especially attractive if said side issues represent recurring problems for multiple developers or may otherwise potentially sow large benefits.

Anyway, I realize this is all very vague and unhelpful as it currently stands. I want to explore this more fully, but am unsure to what extent I can talk about my work. Hopefully progress in some of my side projects will provide more fodder for technical thought. I can say this: my interests in programming have certainly shifted from game engines and computer graphics towards operating systems and communication. Cloud computation is pervasive these days, but seems to be somewhat at odds with my direct interests here. I’m curious how much of that is perceived vs. real, and how much my direct experiences are coloring my judgment.

Thoughts on Friday

I just finished playing another two rounds of Friday. Just four more to go until I’ve hit ten plays and can focus on the other titles in my 10x10 challenge. Even when I hit that point, though, I’ll be looking forward to playing Friday between other games.

I tried two different strategies today, neither of which really panned out.

Strategy 1: Remove Low-Scoring Cards

The goal here is to remove any negative or zero pointed cards to strive for a maximally productive deck.

Strategy 2: Remove Negative-Scoring Cards

This strategy was motivated by the failure of the first. The first strategy left me with very few cards in my Robinson deck, so I took on aging cards I otherwise wouldn’t have had to. The purpose of this strategy was less to maximize efficiency, and instead to focus on reducing harm.

Analysis

In the end, both strategies wound up working about the same, netting me -22 and -23 points, respectively.

Strategy #1 felt good, like I was progressing well and building a very productive engine. However, to achieve Strategy #1 I had to sacrifice a lot of health early on, making Phase 3 more difficult. The aging cards really knocked my score down at the end.

Strategy #2 didn’t feel as good as Strategy #1, but I really benefitted from a lot of zero point cards with special abilities that I simply missed out on with Strategy #1. Strategy #2 sort of fell apart all over. I didn’t score well with the Robinson deck at the end because of all the zero-pointed cards. I also didn’t make it far into phase #2, so there were a lot of hazard cards left over to score against me. Finally, I still took on the same number of aging cards that I did with Strategy #1.

Conclusion

I have a lot to learn about this game. The special abilities of various cards are really important. The rulebook also makes it explicit that all information is there for the player to use to their advantage. Look at how many cards are in various discard piles, look at the opposite side of the hazard card to evaluate it, etc. I really need to play more into this aspect of the game. I have the mechanical part of play down now, next is a focus on more tactics and strategy.

Finally, even though I didn’t score well this time, I feel like I may have learned more from these last two plays with regards to strategy and tactics than I have in any previous plays.

Going For Ten

I don’t recall if I’ve ever explicitly mentioned on here the 10x10 challenge for boardgaming. I don’t know it in-depth, but what I recall is essentially to play 10 boardgames you already own 10 times within the calendar year. The theoretical advantage of doing this is less time spent buying new games, and more time spent playing games you already own. What a fantastic idea! Especially for someone like me, who likes to read and research and buy when getting into a new hobby.

So how am I doing?

As of now, here are the results:

Boardgame Number of Plays
Onirim10
VivaJava: The Coffee Game: The Dice Game3
Pandemic: The Cure14
Friday4
LOTR:LCG7
Escape: Curse of the Temple9
Ascension4
Mage Knight4
Dice Masters15
Patchwork2
Race for the Galaxy10
Paperback1

There are a few interesting things to comment on here.

I really like the gameplay of Dice Masters, but really hate the collectible aspect. I may start playing at work with starter sets only.

I’m looking forward to playing more Mage Knight, but it’s a really heavy game. I would really love to finish my custom insert for it, as I am certain I can improve setup and teardown time. I am pretty sure I can even do something to help with organization for solo play.

Tonight I played one round each of Onirim and Race for the Galaxy to get them up to their ten play marks. I really would have liked to have played some more Onirim as I tried The Tower expansion today and I find any new set of rules typically takes a couple playthroughs to be comfortable with. The Tower expansion seems like a good expansion thus far - I lost my first playthrough, so I would say it is definitely tougher than base Onirim. Could be luck of the draw, though; we’ll see. In Race for the Galaxy I played against the AI robot with The Gathering Storm expansion. I haven’t played that way in a while, so it was really slow to get going as I read the rules and warmed up to it. The game did eventually hit a good rhythm and I beat the easy AI rather handily. I probably won’t play solo again for a while (especially as I shoot to hit ten plays of other games), but I’m looking forward to upping the difficulty and getting familiar enough with the robot AI that I rarely have to refer to rules.

To wrap up, there are a few games I’m seriously thinking of picking up despite the 10x10 challenge.

The former two have been on my wishlist for a while, but the latter two are recent. The latter two have been in heavy representation at Big Pete’s and look interesting enough.

A return... to LOTR:LCG

With my last post being on the 13th, it seems as though I’ve had a slight hiatus from gaming.  For the  most part, I would agree with this.  I managed to play some D&D and Ascension via my phone.

Tonight, however, I made a triumphant return to form with my first session of LOTR:LCG since I built my foamcore insert.  I used this guide for deckbuilding with just one core set and played Passage Through Mirkwood.  It worked fantastically and I was a threat to all the baddies in the encounter deck.

As far as the deck itself and the justifications for it by the author; I mostly agree.  The one justification I disagree with is quoted thus:

suppose a Brown Lands comes off the encounter deck… That’s 5 threat you’re facing, and could cause you to quest unsuccessfully. But if you bring a Scout into play you can immediately explore it (without having to wait for the travel phase)
There may be rules in the game’s errata that specifically allow this behavior, but definitely not in the core set rulebook.  The Snowbourn Scout allows you to place tokens on locations, but not to explore locations (which specifically means that the number of tokens on a location equals it’s printed number), nor to automatically travel to a given location.  I’m not sure what the implications of this are on the deck as a whole, but the rest of the deck seems solid.  Someone else may have already raised this issue in that original thread, too, but I haven’t read that far into the thread, and honestly, I probably won’t.

Playing tonight really brought me back into the game’s world.  This is a thinking person’s game and requires frequent plays and careful attention to detail with a mind towards experimentation and tweaking.  I’m sure this is old hat for anyone who’s ever been into a TCG or CCG, but it’s new to me.  I really enjoyed reading through that aforementioned deckbuilding guide and then playing the game to see how the interactions play out.  This was enhanced by looking through the deck while reading the guide to get a good understanding prior to play, and to recognized cards so they trigger tactics during play.

I’m starting to ramble now, so I’ll try to tie it off.  I am enjoying it.  Sneak Attack is awesome and I want more of it.  I may look into methods of doing so without needing a full core set…  I also want (and probably need) to learn and understand the encounter decks.  I’m really curious about building a hobbit deck, as I envision them being focused on low threat and great questing.  That sounds like my style of play!

More on The Witcher

Well, I got two more games of The Witcher Adventure Game under my belt this evening.  The first game I played was supposed to go to 3 quests, but I quit after two.  Man, that was incredibly frustrating.  One thing that became very apparent is how little interaction there is among players.  This is more of a “multiplayer solitaire” game than any other game I’ve played.  I seriously just open a browser window and do something completely differently while the computer opponents play their roles.  They can draw cards that negatively impact you… but you might as well just draw a random card at the start of the turn for all the input you have as to whether it’ll happen or not.  I’ve drawn cards that have negatively affected other players, but it’s not like I ever chose to enact that ability or anything - it was fully automatic.

In that first game tonight, I managed to complete my quest first, and I was just ahead of the second place player.  I managed to get a few sidequests and sneak ahead.  I had a healthy lead at 22 points compared to 16, then zero, respectively.  I played two more turns (not paying any attention at all to the opponents) and then the second place player was suddenly at 50 points!  I have no idea how it happened, and it was shocking in a not-good way.  From that point I simply got stuck at a location where I had to keep fighting gold monsters as a non-fighter character.  I kept taking light and serious wounds every round, never being able to block or attack the monsters I was facing.  In this situation you just continually lose victory points, and that is probably the farthest thing I can imagine from what fun is.

So here I was doing what I thought was pretty well, then an opponent launches way ahead of me seemingly inexplicably and I end up in a situation where all of my victory points are whittled away.  This was so aggravating and completely unfun that I just sat there clenching my jaws until it was over.  And then I found out it went for three quests!  So I quite immediately and started a single player game.

Oh, hey, you can play this game single player!  That’s actually a cool feature, but by this point the game has really aggravated me and the flavor text is doing nothing.

Likes

Dislikes There are also several things in the videogame version of the boardgame that are really annoying.  I won’t bother going into them, since they won’t apply for the physical boardgame.

I will say this: if you are curious about this game, then spend the $5 on the digital version to see if this game is for you.

I quite like The Witcher universe.  I’ve played The Witcher 2 and liked it well enough.  I’ve read one of the novels and enjoyed it.  I’m certainly not an enthusiast, but I’m probably well within the target demographic.  I was intrigued by my first couple of playthroughs of this boardgame, but at this point I have to say the game is most definitely not something I’m interested in.  I’d probably play it if someone else brought it to the table, but I honestly don’t see it getting more than maybe 3 more plays, tops.

The Witcher Adventure Game

GOG is having an “up to 85%” off sale for their Witcher series of games.  I already have The Witcher 1 and 2, but they’re also offering The Witcher Adventure Game.  I was part of the beta, but didn’t have an opportunity to play it, and only attempted to play the demo a couple of times.  I found the tutorial wasn’t particularly elucidating and just let it be.  I’ve been curious about the boardgame for some time, but don’t know anybody who’s played it, and haven’t seen it come up very often in any boardgame discussions.  It did get a shout out on one episode of The Dice Tower podcast, and that somewhat piqued my interest.

So I’ve suffered through the initial tutorial video (and supplemented with the rest that they provide) and have played two rounds to just a single completed quest each.  I like it!  It’s not my favorite game, and I have some concerns, but it does a great job of giving you that feeling that you’re an adventurer out there exploring to complete quests.  The dice rolling mechanic is passable, maybe even good, but the development cards and everything…  The foul fate cards are interesting and contribute to the game feeling like you’re constantly struggling to make your way, while the game works in such a way that even when you’re overloaded with wounds that you can still do something.  This is a game where the overall feel is greater than the sum of its parts.  I’m no expert yet and I don’t understand all the various bits and pieces, but I like what I’ve seen so far.  I’m really curious if Daniela will enjoy it or not.  I can see it being a game we play out, but whether it’s successful depends on so many subtleties.

 

Marvel Legendary - Secondary Play

I decided to give it another go.  I played the following setup:

I think that’s all that’s important.  The Scheme says to use 6 heroes and put 12 hero cards into the villain deck.  This conflicts with Solo rules which state to use 3 heroes, so I just halved the number of hero cards to add to the villain deck to 6.  Otherwise I used the same rules.

My final score was 2.  I did win. It actually felt pretty close.  It didn’t have the same feel of tension that I remember Legendary Encounters giving me, but there was a better sense of tension than I got from the last playthrough.  Unfortunately, I really think Vassal works against the experience here, with its clunky interface.  I also think part of it is inherent to the design of the Legendary system, though.

I’m not sure here.  I’m lukewarm on Marvel Legendary.  I’ll probably pass on it until I have the opportunity to play in person with some other folks.