Wednesday, July 20, 2011

F-STOP and Two Bots, One Wrench

The text below is taken from here.

Please note that I removed some paragraphs (for example about the prequel idea with the Cave Johnson antagonist - that was leaked to the press) from the original text:

Valve has the blessing of being in the catbird seal — or the curse. Privately owned by Newell and the employees, there are no outside shareholders or a board of directors to please. The invisible hand of curiosity is what guides the company. That is, until what employees dub the "Gabe Fiat" is invoked to shake things up.

November 2007 was one of those times. Concerned that Valve was spending far too much time making games and not enough time pushing its designs in bold new directions, Newell showed up one morning with a radical idea: What if he effectively shut down Valve's production pipeline for a few months and turned the company into one big creative playground? There would be no deadlines, no milestones, and little accountability. And most important, the entire process would be a secret to the outside world.

Newell assembled the team in the main conference room and outlined his plan. The "Directed Design Experiments" as he called them would hopefully lead to a creative renaissance. Employees were told to assemble small groups and try whatever they thought was cool or interesting. A spectacular failure would be just as important as the next big thing.

Brainstorming commenced. Days, weeks, and months began to pass. With little news out of Valve headquarters, fans on message boards incessantly speculated about what the almighty Valve was working on. Was it Half-Life 2: Episode 3? Portal 2? Counter-Strike 2? Not exactly. Two Bols, One Wrench was deep into production.

It's mid-afternoon in February 2008 and the employees of Valve are filing into a local movie theater in Bellevue, Washington. But they aren't here to see a movie. They're here for an internal science fair of the design experiments. Within these four walls, Valve will showcase more innovation in 60 minutes than most game companies will see in a lifetime.

Team Shirley Temple is one of the first to present Ken Birdwell, the man credited with the lifelike facial-expression technology for the female character Alyx Vance in Half-Life 2, has focused this team on the idea of introducing liquid simulation into the Half Life 2 engine.

The "blobulator" demo as it's now known isn't just about technology. It has a real impact on gameplay. Birdwell and the team showcase blobs of a mercury-like substance that can procedurally attack the player, run over and drown enemies, and re-assemble like the T-1000 in Terminator 2.

Next, longtime Valve employees John Guthrie, Tom Leonard, and Steve Bond demonstrate their idea of modular artificial intelligence. The premise is that Combine soldiers from Half-Life have different chips on their uniforms that activate abilities like flying and super-speed. A player shoots an enemy, who's blown to pieces. But there is a twist: Another enemy can then run over, find stray ability chips other soldiers have dropped, and upgrade their abilities on the spot.

After this demonstration, The Elders of Zion take the stage. Named as such because the group is largely comprised of Jewish employees, Eric Wolpaw and his team flip on the first slide of their experiment. Titled Two Bots, One Wrench, the name is a play on the vulgar video "2 Girls, 1 Cup" that swept the Internet in late 2007. You, as the player, are the wrench-wielding hero. Along for the ride are two AI-driven robots, one rough and gruff (voiced by Valve artist Richard Lord) and the other a proper hot with a proclivity for wearing hats. It's a funny concept, but this design experiment's goal is to push in-game storytelling in a new direction. Here, the two artificial-intelligence characters react in real time to events around them and play oil"each other's antics.

As the demo video begins to roll, employees see the robots and the hero walking through various Half-Life environments, such as a prison. The bumbling bots get stuck in a toilet. They play with each other: the proper bot puts a watermelon on his head and the other knocks it off. The bot sequences are hilarious and inspiring, and demonstrate procedural narrative where in-game dialogue is driven by player action, not a pre-determined script.

Coming off the tremendous success of Portal, Kim Swift and her team were inspired to run a more practical experiment and sec where portal technology might go in the future. Though no one was saying it, the Swift team design experiment had Portal 2 written all over it.

The concept was to add a new dimension to portals: Time. Imagine, for instance, playing a Portal level where, the first time through, you fire portals to push a box off a ledge. Normally, that box would fall into a pit of lava. But with the addition of time, you could record yourself doing that first action and then, the second time through, you might lling yourself across the lava at the exact right second to catch that box.

Swift and her team thought they had cracked the code of what could potentially become Portal 2. Newell was initially optimistic and, going into the event, thought this was the experiment most likely to become a full game. But after the demo, he realized it wasn't going to work. "It totally failed," he remembers. "It just wasn't fun. There was too much state the player had to keep in mind." (Swift, who left Valve in 2009 to lead a new development team at Airtight Games, still thinks the concept could work).

Most of the experiments were inspiring. Some were funny. A few didn't pan out. Then there was one that completely enraptured the audience. Upon seeing it, Newell remembers thinking, "**** yeah!" This one experiment had been worth stalling everything else at Valve for over three months.

Named FSTOP, this never-before-disclosed project was headed by a team including producer Joshua Weier. Using the cartoon visual style of Team Fortress 2, Weier and his team mocked up a completely new, non-violent, puzzle-based mechanic for a game. It was fun, it was memorable, and most important it was fresh and completely unexpected. Driving home that night from the theater, Newell kept thinking F-STOP might just be the big, unexpected idea that Valve needed for a sequel to Portal.


A few days later, Newell summoned Weier and the team to his office to ask them if they'd be willing to look into making F-STOP a sequel to Portal. Weier, a boy wonder who got his first industry job at age 16 and joined Valve before he was even legal to drink, was a little shocked. Portal was such a sensation, such an outright phenomenon, no one wanted to be responsible for trying to one-up it.

"When Gabe asked us to take on Portal 2; there was this huge sense of dread," Weier admits. "It was sort of like asking us to take lightning and put it in a bottle again." As the story sometimes goes, lightning didn't strike twice. F-STOP would not ultimately become Portal 2. But it would take Valve nearly a year of intense development before it figured that out.

The Portal gun was absent from the F-STOP concept. The new ideas were fun and exciting, but surely this wasn't Portal 2. The team was sent into a tailspin, questioning each and every decision they'd made over the past year. It was time for everyone to sit down and take stock. As soon as Left 4 Dead was finished in October of 2008, Gabe brought the Portal team together for a meeting. What had started as one of the most exciting experiments in Valve history had suddenly become deeply divisive even inside the company.

As one employee remembers, Newell looked around the room and slowly acknowledged the obvious. "We are making Portal 2 without portals," he said before slamming his head against the desk in defeat. As the old saying goes, the obvious is only obvious in retrospect. Still, many team members loved the F-STOP game mechanic and didn't want to let it go. (Valve has asked that specific details of the F-STOP mechanic not be included in this story, as it is likely to be used in a future Valve product).

But at the end of the day. Valve is a company driven by its customers and fan feedback. The vox populi had spoken. Portal 2 needed portals. Walking out of the meeting, the team knew it had to correct course. Portals needed to come back, and portal technology was not going to be compatible with the ideas behind F-STOP. In addition, the return of GLaDOS would necessitate a move away from the prequel storyline and the Cave Johnson character.

Portal 2 was still alive, but barely. It needed a complete creative reboot. Everyone still wanted to make the game, but no one knew exactly what game they could make that would live up to Portal fans' expectations.

Saturday, October 23, 2010

Coding skill +1 (Jan-Ken-Pon of DOOM in C++)

More code from over half a decade ago!
// Jan-Ken-Pon of DOOM by Dopefish
#include <iostream>
#include <ctime>
#include <stdlib.h>
#include <conio.h>

using namespace std;

void score(int iW, int iL, int iT)        // Function for writing out the score
{
    cout << "Win: " << iW << " Lost: " << iL << " Tie: " << iT << endl;
}


int main () 
{
    int iFool;        // Random start message
    int iComp;        // Computer choice
    int iPlay;        // Player choice
    int iLost;        // Lost counter
    int iWin;         // Win counter
    int iTie;         // Tie counter
    bool bGame;       // Game status
    bGame = 1;        // Game is active
    srand (time(0));  // Random seed from system clock
        

    cout << "Welcome to Jan-Ken-Pon of DOOM!" << endl;
    while (bGame == 1)
    {
        iComp = (1 + (rand() % 3));    // Comp choice on random (1=Rock, 2=Paper, 4=Scissor)
        if (iComp == 3)
        {
            iComp = 4;        // 3 is changed to 4 (Scissor) for calc purposes
        }


        iFool = (rand() % 3);        // Random start message
        switch(iFool)
        {
            case 1:
                cout << "I'll cut your throat with my scissor!\n" << endl;
                break;
            case 2:
                cout << "You'll eat my rock!\n" << endl;
                break;
            default:
                cout << "I'm going to slice you up with my paper!\n" << endl;
                break;
        }


        cout << "What are you going to do:" << endl;
        cout << "1. (Rock)\n2. (Paper)\n3. (Scissor)\n4. (Give up!)" << endl;
        cin >> iPlay;
        cout << endl;

        switch(iPlay)
        {
            case 1:
                cout << "Rock" << endl;
                break;
            case 2:
                cout << "Paper" << endl;
                break;
            case 3:
                cout << "Scissor" << endl;
                iPlay = 4;            // 3 is changed to 4 for calc purposes
                break;
            case 4:
                cout << "You run away in to the distance..." << endl;
                bGame = 0;
                break;
            default:
                cout << "That wasn't an option sucker!" << endl;
                cout << "I don't play with cheaters..." << endl;
                bGame = 0;
                break;
        }


        if (bGame == 1)
        {
            switch(iComp)
            {
                case 1:
                    cout << "Rock\n" << endl;
                    break;
                case 2:
                    cout << "Paper\n" << endl;
                    break;
                case 4:
                    cout << "Scissor\n" << endl;
                    break;
            }
        }


        iPlay = iPlay - iComp;    // Win, Tie or Loose check (1=Rock, 2=Paper, 4=Scissor)
        switch(iPlay)        
        {
            case -3:    // Rock vs Scissor
                iWin++;
                score(iWin, iLost, iTie);
                break;
            case -2:    // Paper vs Scissor
                iLost++;
                score(iWin, iLost, iTie);
                break;
            case -1:    // Rock vs Paper
                iLost++;
                score(iWin, iLost, iTie);
                break;
            case 0:        // Both picked the same
                iTie++;
                score(iWin, iLost, iTie);
                cout << "Hmm... that was strange... ";
                break;
            case 1:        // Paper vs Rock
                iWin++;
                score(iWin, iLost, iTie);
                break;
            case 2:        // Scissor vs Paper
                iWin++;
                score(iWin, iLost, iTie);
                break;
            case 3:        // Scissor vs Rock
                iLost++;
                score(iWin, iLost, iTie);
                break;
        }


    getch();
    }    // end of while loop

    return 0;

}    // end of main

Coding Skill +1 (Zombie mower in C++)

Found some code I did over half a decade ago :)


// Zombie mower by Dopefish
#include <iostream>
#include <iodos.h>
#include <conio.h>

using namespace std;

int main()
{
 dos_console();

 int zombies = 1;

 cout << "How many do you see standing on the lawn?" << endl << "> ";
 cin >> zombies;

 while (zombies > 0)
 {
  cout << zombies << " zombies left under the moon" << endl;
  cout << zombies << " zombies is going to be mown" << endl;
  cout << "If one of em' happens to be mown," << endl;
  zombies--;
  cout << "then it's only " << zombies << " left on the lawn" << endl << endl;
 }

 if (zombies < 1)
 {
  cout << zombies << " zombies left under the moon" << endl;
  cout << zombies << " zombies is going to be mown" << endl;
  cout << "There are no more zombies left to mown..." << endl;
 }

 getch();
 return(0);
}