Skip to content

AIIDE 2020 Artifact

Latest
Compare
Choose a tag to compare
@mkremins mkremins released this 05 Aug 22:33

This release (specifically the Germinate_AIIDE2020.zip file, attached below) contains the files needed to run the 2020-08-05 version of Germinate, a casual creator for rhetorical games built on the Gemini game generator. This release is associated with the accepted AIIDE 2020 paper "Germinate: A Mixed-Initiative Casual Creator for Rhetorical Games", by Max Kreminski, Melanie Dickinson, Joseph C. Osborn, Adam Summerville, Michael Mateas, and Noah Wardrip-Fruin.

At the time of this writing, the primary repositories for Gemini and Germinate (both of which are bundled in this release) can be found on GitHub. These repositories may contain more up-to-date versions of the software found in this release:

Installation

You'll need all of the following interpreters installed (and on your path):

  • clingo, v5.4.x recommended (to run the core Gemini ASP code)
  • python3, v3.7.x recommended (to run simulate.py, the main Gemini entry point)
  • node, v12.x.x recommended (to run the Gemini websocket server)

You'll also need the following Python packages:

...all of which should be installable via pip install PACKAGE_NAME, e.g. pip install numpy (or pip3 install numpy on systems where pip is an alias for pip2).

Configuration

The Gemini/server/config.js file provides several server configuration variables that you might want to change, including:

  • config.python3Command: The name of the Python 3 CLI command, which the server will use to launch simulate.py. Set to "python3" by default. Depending on how your environment is set up, you might want a different command instead; for instance, Windows users might want to change this to "py".

Running Germinate

To run Germinate yourself, you'll need to perform the following steps:

  1. In the Gemini subdirectory of this release, cd into the server subdirectory and run node index.js. This will launch the Gemini websocket server on the port specified in Gemini/server/config.js.
  2. In the Germinate subdirectory of this release, launch a static webserver, for instance via python3 -m http.server 9000.
  3. In your web browser, navigate to localhost:9000 (or whatever port you specified for the static webserver you launched in step 2). You should see the Germinate web interface.
  4. To ensure everything's working correctly, hit the "Generate Games" button at the bottom left side of the Germinate UI. The server will start generating games and send them back to the client as soon as they become available.

Interaction Flow

In the left-hand column, specify a design intent by modifying, adding, and removing cards. Cards describe four basic types of things that can appear in Gemini games:

  • Entities: Graphical objects that can move around in various ways within a top-down playing field. Depending on the rules of the game, entities can often be interacted with – for instance by clicking them, dragging them, or causing them to overlap with other entities.
  • Resources: Numerical quantities that can vary over the course of play. The goal of a generated game is often to increase, decrease, or maintain the value of one or more of these quantities.
  • Relationships: Ways that entities and resources can interact with one another.
  • Triggers: Trigger-action rules that describe a set of conditions (on the left-hand side) and something that will happen when those conditions are met (on the right-hand side).

Specify a design intent that tells the generator what kind of games you'd like to see. Then, when you're satisfied with the design intent you've created, press the "Generate Games" button at the bottom of the left-hand column to start generating games. The games can take a while to generate, but within a minute or two they should start showing up on the right-hand side of the screen.

The right-hand side of the screen (the Game Navigator) allows you to move from one generated game to the next. The Game Navigator is divided into two columns. On the left, you'll see a playable version of the currently selected game. On the right, you'll see this game's rules, depicted as a set of cards.

Once you've tried out some of the generated games, you'll probably want to change some things about your design intent. You can do this by editing the intent directly, of course, but you can also import cards from the rules of a particular generated game to your intent, if something about that game appeals to you in some way. Then, when you're ready to try again, hit the "Generate Games" button again to see what games the generator will make from your revised intent.

Along the way, you might run into an error. This happens when there's a contradiction in your intent that the generator doesn't know how to resolve. Try changing your intent to resolve anything that seems potentially contradictory, then hitting "Generate Games" again.

Things to Try

Generate a batch of games based on the current design intent by pressing the "Generate Games" button in the bottom left corner of the screen.

Play and interpret a generated game by trying out different interactions (such as clicking, clicking-and-holding, or dragging) on the various entities; observing how the entities and resources behave over time; and reading the rules on the right-hand side.

Import a card from a generated game by clicking the curvy arrow icon in its upper right corner.

Modify an entity by changing its name (by clicking it and typing a new name); changing its icon (by clicking it and selecting a new one); clicking its tags (to cycle their values); shift-clicking its tags (to negate them); or editing its tags in a more fine-grained way (by clicking the "Edit Tags" text, then clicking and shift-clicking desired tag values to assign and un-assign the desired tags).

Modify a resource by changing its name or tags, in the same way as with an entity.

Modify a relationship by changing the entity or resource on either the left-hand or right-hand side (by entering the name of a different entity or resource, or leaving these slots empty as wild cards); changing the relationship type (via the dropdown in the middle); or negating the whole relationship (by shift-clicking it).

Modify a trigger by changing the type of its left-hand or right-hand sides (using the appropriate dropdowns), or negating the trigger (by shift-clicking it).

Randomize any card by clicking the die icon in its upper left corner.

Delete any card by clicking the trash-can icon in its upper right corner.

Create another of any card type by clicking the large dotted rectangle (with a plus icon in the center) near the other cards of that type.

Design Prompts

The original Gemini paper lists two example design intents. These intents aren't fully realizable in Germinate, because the space of intents that you can express with the Germinate UI is substantially smaller than the full space of valid Gemini intents. However, the following design prompts (based on simplified versions of these example intents) might be useful for guiding your exploration of the tool's capabilities:

  • Create a game in which two entities share something (e.g. food) in order to maintain the value of a resource.
  • Create a game in which the player deals with positive and negative criticism while maintaining a resource named "Composure".

In addition, the AIIDE 2020 Germinate paper describes emergent games that inspired a few more design prompts:

  • Create a game in which there exists a tension between chasing success and spending time with your friends.
  • Create a game in which students have to increase their knowledge by interacting with books.