Pages

Friday, July 30, 2010

Back from the Black

I know it has been some time since my last post. In fact, it has been far too long. Whenever I have a spare moment from the busies of life and work on my side projects I see 2 options: I can either blog about what I am doing or I can get more of what I am doing done. Unfortunately, I typically see the latter as being the more productive action.

That said, Robot is still going strong. Justin is diligently working on the script and hopes to have it completed within the next couple weeks. I am attempting to channel all of the mothers of the world and guilt Trevor into sketching the concepts for the characters. I recruited 3D artist to build those fantastic sketches and turn them into a virtual reality. ...And as for me, well...I still need to get a computer that can handle the new Chat Mapper. It doesn't completely freeze my computer. No. I just can't open the application. But of course, and I just realized this, I don't need to open the Chat Mapper to update the exporter. Just to test it.

Ghost is going along quite well. I have yet another buddy of mine, Karl, working on 2D images of the various ghosts. It was crazy. I asked him to create a set of ghosts for the game. I gave him the their various powers and toughnesses (Yes, I play Magic: The Gathering) and the next day he came back with names for all of them and several drafts of the first ghost. It's hard not to love this guy's passion.

(I really do have a lot of really creative and talented friends.)

And with all my various trips back and forth between Chicago and Minneapolis in the past few months, I have had plenty of time to think. And because I am thinking without the specific implementation of either of these 2 games, I came up with yet another game. I call it Martyr. It's based off of a thought experiment in recalled from my "Moral Theory and Practice" course in college. Nearly ten years later, one would think that I would eventually forget those lectures.

Initial iterations would be a zero-player "game" that plays as such:

Initially, a set of characters are created. Each character is defined by a personality. A personality is defined by the Five Factor Model. Each of the five factors is either POSITIVE, NEUTRAL, or NEGATIVE. For each factor, one of its dimensions is randomly selected. This dimension has the same value as its factor. This defines the character's personality. Each dimension carries with it positive and negative weights toward 8 basic emotions. The greatest 2 values in the character's emotional dyad, such as "Love" or "Morbidness". This dyad determines what action the character will perform towards another character. If the dyad is composed of 2 opposing emotions, then cognitive dissonance occurs resulting in no action.

Each character has 3 POSITIVE, NEUTRAL, or NEGATIVE "feelings" toward each character (including himself). This relationship is defined using the Triangular Theory of Love. Now whenever a character acts upon by another character, he has the possibility of influencing the target character's emotional dyad. The intensity and longevity is determined by the target character's relationship toward the acting character. For example, if Character A has an emotional dyad is "Love" and Character B has a consummate love relation toward A, then B's JOY and TRUST values increase permanently and SADNESS and DISGUST values decrease. However, if B were to have a consummate hate relation toward A, the opposite would occur. If B were to have a NEUTRAL commitment toward A, then the influence would last for 1 round. If B were to have a NEGATIVE commitment toward A, then the influence would last for 1 turn.

Each basic emotion has an opposite and resulting emotion. JOY results in more JOY. However, SURPRISE results in ANTICIPATION. This allows for "Dominate" personalities to create "Submissive" personalities, and "Curious" personalities to create "Fatalistic" personalities.

This would be the simulation. The "game" portion returns to the Trolley Problem and also why I call it Martyr. There would be X number of dying characters in play. The player would have Y amount of health (Y is less than X). The player can walk up to the various characters and few their personalities and relationships. Now the player can heal a character and return him to life. Doing so, causes the player to lose 1 point of life. Once the player has expended all of his life, he dies and the simulation occurs for a set number of rounds.

While this "game" may appear evil, we (you and me) as individuals do this sort of thing everyday of our lives. We chose to interact and influence certain people, while ignoring others. This project just brings that unpleasant reality to surface. It begs the question, or at least I hope it does: "How do you spend your life?"

Alright. Back to work on either Robot or Ghost.

Note: There is a certain emotional dyad that will heal other characters. And of course, there is also a dyad that will kill others.

Wednesday, June 16, 2010

The Writer of Things

I never know how to write introductory posts that aren't lame, so let me try to keep this short:

I am the Writer of Things. I've been brought onboard here at Groundling Games to script Robot.

Although I've done some spec dialogue work here and there, my primary background as a freelancer writer lies in the tabletop roleplaying industry. (You can check out my online Bibliography.)

If you're looking for a quick primer on how I think about interactive narrative structures, check out:

The Three Clue Rule
Don't Prep Plots
Getting the Players to Care
Remixing Keep on the Shadowfell

These essays were written for pen 'n paper gaming, so the methods of execution may be radically different when it comes to computer games. But I think the underlying philosophy remains fairly constant.

A final introductory thought: If I could only eliminate one flaw in modern game design it would be the presence of narrative dead space. Pauses of faux-poignancy. Droning repetition. Facile time-wasting. A lot of modern games are the narrative equivalent of a tight two-hour movie blown out into a six-hour waste of time -- they're artificially pumping up their play time by watering down the experience.

Robot is going to be pretty much the opposite of that. Expect intensity.

Saturday, June 12, 2010

Trusting Talent

While I continue my implementation of Ghost, Justin (a extremely talented writer) continues his work with Robot, using the newly released Chat Mapper. Because of its new features, I will need to make time and modify the Yack Pack exporter *.DLL. I know, I know. If I were to focus on one project at a time, I could get that project do that much quicker. But by having multiple projects in different areas of development (in this case, pre-production and production), I am allowed to trust the talented people I surround myself. Besides, other than resolving the exporter issue, I would just impatiently annoying that talent.

Ghost is going well. Using a modified maze generation algorithm, I randomly create a path through a 5x5 tiled board (board size is arbitrary until tested completely). Along the sides of these floor tiles, there are wall tiles that are properly layered to create an illusion of depth. When character-tokens move across the board, their layer position moves up and down to add to that illusion. Ghosts spawn, die, and activate their powers at appropriate phases. Shrines and gates (teleporters) trigger, and appear and disappear based upon ghost population. Bosses spawn and die. The challenge I am running into now is restarting the level once the game has concluded without forcing the players to exit the application altogether. ...At least the game is winnable.

Wednesday, May 12, 2010

Marwwage

For those of you who aren't married, don't expect to have a great deal of free time months before your wedding. I've got about 2 weeks before the big day and I'm grateful that my bride doesn't want to kill me. Of course, this is only one reason for my prolonged silence. The other is that Robot took a brief break. A momentary break. It will be done; that is a promise. Trevor's priorities had a slight shift recently and Robot unfortunately had to shift down a few rungs. Chat Mapper had a rather critical bug, which prevented importing the existing dialog into the engine. Thankfully, things are beginning to calm down for both Trevor and me.

However, do not think that I have been doing nothing in the mean time. I've been working on a digital board game: Ghost. Inspired on the board game "Ghost Stories," Ghost is a 4-player hotseat where players must find and kill a necromancer on a randomly-generated board while battling various ghosts.

Like I said, there are 4 players (Red, Green, Blue, Yellow). Each player has a skill that changes their play style slightly. I tried to link their skills with Bartle's Players: Achiever, Explorer, Socializer, and Killer. By using these types, I think I can more easily accommodate a greater number of players on a psychological level. I will expand on this in a future entry. There are 6 ghosts colors (Red, Green, Blue, Yellow, Black, White). Ghosts can have 3 powers: on-spawn, on-play, and on-death. The "on-play" power can occur during at any phase during a player's turn. Ghosts also have a toughness from 1 to 4.

A player's turn goes a such:
  1. Upkeep: If there are 3 or more ghosts of the player's color (whites count as all colors), then that player takes 1 point of damage and the next phase is skipped.
  2. Draw: A random ghost is spawned onto an explored tile. When the ghost is spawned, its "on-spawn" power triggers, which could spawn an additional ghost or steal a combat dice from the players.
  3. Action: The typically player has 3 Action Points during this phase: explore a new tile (2 AP); visit an explored tile (1 AP); active a Shrine's ability, such as teleport or gain life (1 AP); and engage combat (1 AP). When a player enters combat, he engages all of the ghosts in his room. He rolls typically rolls 3 combat dice. Each die has 1 of 6 colors on each face (associated with each ghost color; whites again are wild). In order to kill a ghost, the player must get number of hits equal to the ghost's toughness. If he cannot, the player can use tokens to purchase hits. Combat is very similar to "Ghost Stories." If a ghost is killed, its "on-death" power is triggered.
For the most part, I have a prototype working in Torque Game Builder with a few things to finish up. And it is all programmer art, so it looks absolutely horrible.

Sunday, March 21, 2010

Sweet is the Scene

For those of you developing any project, videogame or otherwise, save yourself future pain and use some sort of version control. Groundling uses Subversion for the same reason we use Torque - we know it. ...Ok, that and my friend, Seth, has given us some server space and he uses Subversion. For that, I thank him.

I implemented level locking. Assuming Robot continues into future scenes, I don't want every scene as its own executable. Instead, I want scenes to be able to flow into each other relatively seamlessly. But if certain players don't start playing until Scene 3 arrives, I still want them to start at Scene 1 while still having Scenes 2 and 3 on their computers. After Scene 1 is completed, then Scene 2 unlocks. Easy enough.

The complexity is when players return to an earlier scene. For example, assume that you have played up to Scene 5. For some reason (e.g. experimentation), you want to replay Scene 1. Normally, this action wouldn't be inconsequential, but because reputation carries from scene-to-scene, some action needs to occur. Either the player can play through the scene again and reputation will or will not be saved. If the reputation is to be saved, then a certain question must be asked: "What happens to future scenes?" I could think of 2 options. (A) Future scenes are locked as if players are going through the story again; or (B) future scenes use their prior reputation saves until replayed. While (B) provides more freedom to the player, it also creates possibility of multiple story threads occurring simultaneously within the same save file. Because of that complexity, I implemented option (A). That said, I would like to know what people's thoughts are about the matter. Which option would you prefer I implement?