Opposites Attract – an ARIS matching game

game-splash

While at AERA this year, I made an ARIS game called Opposites Attract. Go ahead and try it, but you probably won’t get very far unless you have many people to play with. To get anywhere in the game you need to match the card you get with one of 15 others. If you see this and are going to the GLS Conference that would be a good place to convince others to play.

I had been playing around with the idea of a trading card game in ARIS for a few months, interested because it seems like a way to make a decent game for conference attendees – give a bunch of people in a room a game to play together where the other participants matter and where play might lead to actual greetings. I got a chance to try this idea out along with a couple of others.

Like most new ARIS designs I come up with, I also found some things that didn’t work. Bugs in ARIS, problems with my design and with my implementation. And as usually happens, the discovery of these problems ended up being an important part of the overall journey.

Opposites Attract

In this virtual card game, players get one of sixteen cards. The goal is to trade it with a player who has the exact opposite card. Compete for points or get all 8 matches!

Opposites-attract-splash-screenshot

Like Set

Have you ever played the card game Set? It’s an excellent game that inspired me. By making a similar game, I wanted to

  • use spawning to generate the feeling of random assignment in an ARIS game,
  • make use of the new “item tag” feature that allows you to keep track of qualities you attribute to items,
  • create a game that made use of the trading mechanic in ARIS, and
  • create a game well situated for conference attendees: simple, suited to a large session, capable of being spread after the session, not reliant upon physical situation, multi-player for a good reason.

Similar to a restricted version of Set, the cards in Opposites Attract have symbols: 4 qualities (shape, color, shading, number) and 2 types (round or square, blue or red, empty or filled, one or two). This gives 16 cards (Set has 81). Each card has an opposite (two, full, blue squares is opposite one, empty, red circle). The goal of this game is for players to match the one card they have with its unique opposite held by some other player. After a match is made, the player gets a point and a new card. There is a bonus for having made all the matches possible. There is a leaderboard for comparing scores.

All in all, a pretty simple idea. Below my Post-mortem describes what I learned by making this game. If you’re interested in how to make this happen in ARIS, continue with the Implementation section, also below.

Post-mortem

I was able to put this game together in a very few hours (maybe 4, including the art, not counting the fact that something along this idea had been rolling around my head for a while). At AERA, I announced it to the audience in the talk I was giving, and played some with my colleagues and friends. Both the random distribution of cards and the matching system worked. I had made a new type of ARIS game.

It’s pretty cool to be able to come up with an idea and throw together a working game in so little time. But not everything went according to plan.

ARIS bugs

When I developed Opposites Attract, I came across some bugs of which I was previously unaware. In particular,

  • requirements based on “greet character” do not work at present – my intro was designed as a character so as to have background audio to be awesome for players just joining, and
  • requirements about having only one card got in the way of the queuing system for auto display – a player would see a plaque that had spawned to give them a card, and before they “picked it up”, another had spawned as well. This meant that players could end up with two cards, sort of wrecking the tight rules I needed to be able to notice matches.

This is good and bad. The bad is obvious. The good is that these bugs were out there waiting to be found. Instead of getting in the way of a high-risk game or event, I was able to find them making something that was not tied to any real consequences. I submitted them to lighthouse, #502, and #503, and actually made a test game for the former in order to isolate the issue. And now these bugs are being worked on actively. It looks like they will be resolved in the next version.

Faulty execution

Opposites-attract-card

Very few outsiders ended up playing my game. I don’t generally expect a lot of people at education conferences to be like “Yes! A game to play!” They’re there for more serious things I guess. But there’s probably a good reason why I didn’t get a few more players. Before the talk I didn’t have enough time to finish the game art. The game still made sense if you were willing to interpret a code of letters – i.e. a card title like “1ebc” – standing for one empty blue circle instead of an icon showing the same. I thought that the academics would maybe try to look past the surface, or more likely I wanted to say to the audience that I had finished a game in 2 hours before that day’s session. Oh well. If it is not obvious enough already: put at least some placeholder art in before asking strangers to play your game.

Faulty design

I not only got feedback on what ARIS could and couldn’t do, but on what I had accomplished or not as a game designer. Players were able to figure the basic premise out and wanted to win, but the bug with the auto display queue confused them, though this seemed easy to resolve for future plays. More significantly, I found out almost immediately that my game was very difficult, even more than I had anticipated, and that without enough players, there just wasn’t much for a player to do.

It reminds me now of a 99% invisible podcast about the evolution of slot machines. Rather than the old system of matching three across for one chance to either win or lose your bet, modern slots are a panoply of options and configurations. It’s hard to see the original hiding in there, and a typical play involves losing some of your bet but also winning some of it back. Depending on where you stand this is either a very good thing or a very bad thing. Now “penny” slots account for the vast majority of casino revenue, producing large cash inflow by making up for small bets with a vast increase in the number of plays.

In the case of Opposites Attract, it seems likely that players would get more invested and play longer if they could benefit from some small victories rather easily and immediately while still looking for a large payoff through more commitment. I could hand out more cards to make matching with another player more likely- though this makes it more difficult to design the matching system; the obvious ideas run aground of the inability to author certain kinds of logical statements in ARIS or the one-way nature of quest completion. I could also award near opposites. I could also make it possible to get more cards with the idea being to find an opposite not just in another player’s hand but somewhere else in the world.

There are many possibilities that come to mind for how to fix a broken game. Just one of the many ways that failure is a basic, generative force, one that should be invoked often.

Implementation

This is a commented version of my design document, and should give you some idea how to build Opposites Attract or something like it in ARIS.

The cards

There are 16 different items for the different cards. We will use item tags to differentiate them. 8 tags total

  • circle
  • square
  • red
  • blue
  • empty
  • full
  • one
  • two

I played around with using the ability to give items weight  in ARIS to help the game understand and make use of the number of cards a player has, but ended up using a ninth tag “card”. Each card has type “card” in addition to its other attributes. Then I use requirements around the tag “card” to check how many cards a player has. Essentially, this extra cards makes it so all the cards can act as elements in a collection, and then we can base requirements on having an element of the collection.

Handing out the cards

There are also 16 plaques (each gives out 2 copies of a single card). I needed to give out two cards so that a player hands one over and keeps the other for comparison.

The plaques that hold the cards spawn when the player needs a card, at a low probability so that the card assignment is for practical purposes random.

Spawn Settings:

  • always nearby (error -1), live 30 sec, delete when viewed;
  • req: player has not cards ≥ 1, greeted intro character (I found that there is a bug in ARIS and this requirement doesn’t work so I switched to an intro plaque);
  • every 30 seconds with 2% probability;
  • spawn per player – what happens when a bunch of people play this game at the same time? As long as the annuli overlap enough, this should work fine.

Matching opposites

So each player gets one of 16 possible cards and then is to look for other players with cards. Upon finding “the one”, players each trade 1 card to each other. When two opposite cards are in the inventory, the player has all 8 types. For this, they are given a point.

The trick here is that the only way to simultaneously have two cards in your inventory and have all 8 attributes is to hold opposite cards. In this way, the game can know when you have satisfied the requirement of having found your opposite.

What happens if a player gets two cards that are not opposites? They will have more than one of the 8 types. So we create two plaques – one that notices they have something amiss (Loser) and one that confirms a match (Win).

Plaque – You Loser!
Content

<p>Maybe your critical thinking skills are not up to snuff. Maybe you just like to break the rules. Maybe you just have fingers that are not careful.</p>
<p>Whatever the case, you have erred.</p>
<p> We hope you are sorry <i>because we are disappointed</i>.</p>

req: player has ≥ 3 of type 1 OR … player has ≥ 3 of type 8
N.B – this got very broken by the queueing bug. I removed the plaque because it was intended for players trying to game the system but ended up showing to most everyone.
exch: take 4 of all cards (4 to be safe in case weird trades happened), take 2 points

Plaque – You Win!
Content
A match! We will remember this. Try another.
req: player has ≥ 1 of all 8 types AND NOT 2 of all types
exch: give 1 point, take 2 of all 16 cards.

Point badge – a bit of satire for an educational conference, just like I did at ELI.
Item given by plaque
Here's a badge for getting points! Isn't it fun to get badges?
req: player has 1 point, not seen point badge plaque, seen you win!
exch: 1 point badge

Opposites-Attract-Inventory

Perfect Completionist

I also designed a way to reward someone who gets all the matches without screwing up. In addition to setting a big goal out there for the players, it was a chance to make use of the fact that quests in ARIS are asymmetrical types of requirements: they can be completed but not uncompleted. It takes a lot of work to make all the pieces work, and I never ended up fully implementing it.

Item given by plaque
You completed all the matches perfectly. Aren't you special?
req: player has > 8 points, player has completed all Card Quests, player has not seen Loser plaque, player has not seen perfect completionist
exch: Perfect Completionist

Card Quests (16 of these)
Here, I’m making constructive use of the fact that quests are one-way gates (i.e. they can be completed, but not uncompleted)
complete: player has specific card
visible: never (player has viewed dummy plaque)

Intro

As mentioned in the ARIS bugs section of my post-mortem, I had to switch to a plaque instead of a character because of a bug with the requirement type “player has greeted character”. I wanted to use a character as an intro so that I could play background audio and have text paging to make the game seem cool.

Character
Opposites Attract
greeting
<dialog hideAdjustTextAreaButton = "1" makeTextAreaFullScreen = "1">
<npc mediaId="51481">
Welcome to <b>Opposites Attract</b>
</npc>
<npc mediaId = ''>
You will soon be given two copies of a single card. Other players will get different cards.
</npc>
<npc>
Each card has a <b>shape</b> (circle or square), <b>color</b> (red or blue), <b>fill</b> (full or empty), and <b>number</b> (one or two).
</npc>
<npc>
Your goal is to find a player who has the <i>exact</i> opposite card. When you do, <b>trade</b> one of your copies and have your new friend do the same.
</npc>
<npc>
For each successful match you will be awarded a point and be given a new card.
</npc>
<npc>
You don't want to find out what will happen if you trade an <i>incorrect match.</i>
</npc>
<npc>
There is a global leaderboard in your <i>inventory</i>. Use this to see who in the world has the most points.
</npc>
<npc>
There is also a special prize if you get all 8 matches without messing up.
</npc>
</dialog>

Plaque version of the intro

<p>
Welcome to <b>Opposites Attract</b>
</p>
<p mediaId = ''>
You will soon be given two copies of a single card. Other players will get different cards.
</p>
<p>
Each card has a <b>shape</b> (circle or square), <b>color</b> (red or blue), <b>fill</b> (full or empty), and <b>number</b> (one or two).
</p>
<p>
Your goal is to find a player who has the <i>exact</i> opposite card. When you do, <b>trade</b> one of your copies and have your new friend do the same.
</p>
<p>
For each successful match you will be awarded a point and be given a new card.
</p>
<p>
You don't want to find out what will happen if you trade an <i>incorrect match.</i>
</p>
<p>
There is a global leaderboard in your <i>inventory</i>. Use this to see who in the world has the most points.
</p>
<p>
There is also a special prize if you get all 8 matches without messing up.
</p>

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s