Thursday, June 11, 2009

Getting Real In The Early 90's - The Secret Behind the Rise of ID Software

Recently, I've finished Masters of Doom by David Kushner for the second time now and it's interesting the new insights and relations i've noticed . When i read it for the first time (july/2005) i wasn't even working with software development. Now that i'm kinda on the trenches(working as a developer on a small & agile product development team) i'm in better conditions of analyzing it

Games in general always made me curious in terms of how they were made, but Doom was the Coup de grâce that made me pursue programming for a living. The delicate weaving of computer code , art and fun present on games will always interest me.

Masters of Doom describes in a "novelish" style how the precise weaving of such factors, coupled with REAL team work can create a product able to cause a full paradigm shift in its area. While reading the book you possibly will remember of agile principles and some Getting Real essays

Doom was born out of a womb with brilliant minds working together within an Agile-like environment. It's noticeable what ID did at its halcyon days had a lot of Agile and Getting Real ideas rooted in it :

Small, highly synergic development team:
Their common objective was fairly simple. Developing games through hard work(crunch mode included) and having alot of fun in the process. Carmack focused on technology, Romero bridging between the technology/design and Adrian C., Petersen, Hall + Cloud doing graphical and level design.

Iterative Design:
iD's development cycle seemed to be of iterative nature. In those times where technology limitations where the main barrier for them to implement their visions, Carmack was the guy that would do anything to overcome those limits so the game experience could the the best possible. Through research and implementation, the team would test the framework and experiment design ideas over it, giving room for the design to emerge. When something clicked, they directed all their efforts to it until it was shipped. Doom, the game who changed the gaming world as we knew was born in this way. [1]

Motivated individuals in environment with all support needed:
Jay Wilbur, as manager would do whatever needed to get the team focused 100% on the product. From standard business stuff to cooking barbecues and filling junk food supplies for the developers.

Build it for yourself/It Shoudn't Be a Chore:
Being a team of ultimate gaming lovers, they knew how to create fun properly. John Romero always was a hardcore fan of his own work(check out how addicted to Doom he got). The results were notorious , Doom invented a genre, a lifestyle and made ID guys multimillionaires

Fund Yourself:
Id software was assembled with every employee on a Day job at Softdisk. At night and during the weekends everyone would reunite at the Lake House to work on their stuff. They pretty much funded their work on the early days.When good conditions to work full time appeared(after joining ranks with Apogee's Scott Miller) they so did it.

The book makes clear that as iD success grew exponentially, team union started to fade away. John Romero, the lead game designer(and "product owner") got too involved with marketing-related activities and other distractions. Quake(Doom's successor) had a more complex technology and most members of the team felt disoriented in which direction their designs should go. Constant team interaction problems made Quake's development unroll under a heavy weather[2]. Unity was being lost, Carmack/Romero weren't synced anymore and the divergence of their ideas on how Quake and Id's future should be, only increased.

Quake is iD Software's equivalent of Beatles Let it Be: Great work, highly appraised but it costed the union of a very innovative team. Life would never be the same :

[..] The good mood didn't last. Like Romero at Ion Storm, Carmack was discovering that the glory days of a small team and easy chemistry were gone [...]

Although always an excellence in technological innovation through Carmack's work, Id never managed to explore new genres and achieve new game design innovations again. In my view it turned out to be more of a technology company, always providing bleeding edge engine technology. Surely this direction caused their game designer talents to leave over the years(like American McGee & Sandy Petersen)

What Went Wrong?

Scaling is hard
The transformation process of a b2b(buddy to buddy) company to a world synonym of digital entertainment is not easy. I see this happening everywhere, family businesses included. If the entire team is not working together to keep unity solid, the consequences are often bad.

Communication & Feedback
The book explores alot the individual feelings of ID Crew in different times and the impression left is that a communication gap was always present between the team members. Their issues often accumulated in a boilerplate and discussed in tense meetings(one of those got Romero officially fired).

Fame , Fun and Fortune can be harmful distractions
According to the book Romero kinda lost his focus when Doom exploded. Deathmatching competitions , media appearances and related stuff kinda separated him from the work at Id. Although this "Marketing" position was important, the Quake development kickstart was important too. Carmack was left mostly alone during the Quake engine development stage. His trust in Romero greatly reduced during at this period

Everybody together
Again, the moment when Team Members get distant and start working too much time on their own islands, communication isn't exercised and creative potential isn't leveraged properly. The empty spaces tends only to grow

When trying to innovate and create something really remarkable, an agile-way-of-work and good team composition proves to be a powerful ally to achieve groundbreaking results. It is important to keep the "agile core" strong when the whole structure starts to grow.

"In the information age, the barriers just aren't there. The barriers are self-imposed. If you want to get off and go develop some grand new thing you don't need millions of dollars of captalization. You need enough pizza and Diet Coke to stick in your refrigerator, a cheap PC to work on, and the dedication to go through with it. We slept on floors. We Waded across rivers" - John Carmack


Masters of Doom (2004) - How Two Guys Created an Empire and Transformed Pop Culture
[1] See Chapters 9 - 10
[2] Pg 272 This is not the id of the past, he thought, the id of "let's make a great game together and have fun" This is the id of "shut up and work"


Sunday, May 31, 2009

Classic Gaming Shelf : Phantasy Star II

Back in the early 90's, the last-gen video game console i asked my parents to have was the Super Nintendo. Although i consider myself a SNES fanboy, it 's undeniable that Sega done some awesome work with Genesis. Now with Wii's Virtual console, i'm taking the time to play the classics i always was curious about but never managed to play back at the time of their respective releases.

My previous system was a Master System II and one of the best games i've ever played in life was Phantasy Star. My history with PS is a funny one for another post, but now i'll comment my impressions on its successor.
The game mechanics are very similar to PS1. The most noticeable differences are 3rd person perspective in battles (you actually see the characers striking the enemies) and the lack of first person dungeon navigation(this style could have been explored more).

The gameplay starts out fine at first, but gets boring over time because of playability issues:

  • Lots of random battles, moving between cities is a test for patience since the pace speed of the characters in the world map is way too slow with battles popping out of every couple of steps.
  • Dungeons are big, hard to navigate and memorize (the spaces are hard to distinguish). For a regular player its virtually impossible to explore them without a map, and even with the map it's hard to locate yourself in it. It explains a lot why the cartridge had a "110-page hint book included"(as written on the cover).
I'm saying this because i've gone through ~4 dungeons till now (just finished the Bio Systems Lab) and each dungeon (in average) can steal you around a couple of hours easily(not counting the ultra-boring powering up needed to cross them without being annihilated).

IMHO, Phantasy Star 1 had a more balanced gameplay. Of course, it had its load of ultra complex dungeons (like Baya Malay/Medusa Towers) and leveling up moments, but at acceptable doses. It seems that Sega in PS2, instead of enhancing the fine balance of these ingredients, decided to overdose them.

But apart the game mechanics issues , i see it as a landmarker game in the time it was released (1989-1990). The universe surrounding the Algol system is amazingly interesting and full of untold secrets.
I surely bet that PS2 was an everlasting gobstopper for a kid with a full summer vacation to play games.

My curiosity concerning what happened after Lassic's fall was the main motivator for getting this game on Virtual console, but i don't think i'll have the time and patience to finish it now. I wonder if these gameplay issues were improved on the Sega Ages remake. I wanna play it once i learn some japanese :)

Ps : I think i'm getting old

Sunday, May 10, 2009

Uncle Bob just wanna have fun!

Uncle Bob Martin's keynote @ RailsConf'09 is definitely a very remarkable one. What keynote to expect from a General Yamamoto-class of software developer with great communication skills? At least some good advices and food for thought.

The title was "What killed Smalltalk Could Kill Ruby", but don't hang too much on it as much some people did. The majority of the keynote was focused on exposing how decent test suites and TDD adoption generates a positive-clean-code-feedback.

Few points of the presentation pissed Smalltalkers for obvious reasons. Usually "Z language is dead" statements immediately pisses the Z-language hackers. Before spitting flames try to take a deep breath and see the thing on a different perspective(and with a bit of humor, of course).

It's fairly known that "No existing language will die in a long time". An interpretation for "Killed" in the context of programming languages can be: "a language that had lost its lift-off momentum to occupy the front row of IT industry technologies". I believe that Smalltalk and Common Lisp are two examples of it.

Sincerely , i didn't read any tone of "Smalltalk was killed because of the lack of testing" on the presentation as some people did. What i understood is that testing provides you the control mechanism to properly harness the power of languages like Ruby and Smalltalk. On such languages with high degree of expressive freedom it becomes "too easy to make a mess". In other words: you can fly high if you don't have proper discipline.

Fabio Kung published an interesting analogy that came to me a while ago when reading a chapter of The Ruby Programming Language. "With great power comes great responsibility" said Uncle Ben and so did Uncle Bob.

[...] Professionalism is honor, Professionalism is being honest with yourself and Disciplined in the way you work [...]

Bob just nailed it. These are the main attitudes i have been working hard to improve right now. A couple of years ago, when i started to code a solution, my mind entered in a turmoil state trying to unroll the entire thing at once, much like a hungry beast attacking its prey. The final result was that i often got lost in the ideas entering an analysis-paralysis state. Today, i have far better control of the beast(sometimes it leaves the cage.. lol). I'm lucky enough to pair program with great people that gives me feedback when that happens.

I see TDD as a software development equivalent to Ritalin. A way of achieving discipline and delivering quality software with one shot. It's no silver bullet, but surely helps a lot.

Take Bob's words seriously , but not too much. Allow the guy to be a little ironic and humorous sometimes (e.g when he was speaking on Academic Smalltalk adoption).

Uncle Bob just wanna have fun and watch his nephews writing clean code :)


Monday, January 12, 2009

Listener's Review: Chinese Democracy by Guns n' Roses

This is a humble attempt of mine of trying to review a record that had alot of buzz on the media since it's first announcement almost a decade ago.
I always liked GNR, not being the hardcore type of fan(i've met quite a few in some hard rock parties here in Sao Paulo) but someone that have been listening to their stuff for a while(since 1992).

Before going into the musical details, i would like to recommend you to open your mind a little
bit and forget GNR's as you know for a while including any "Use Your Illusion 3" expectations.

To give you a big picture i'll press play and comment in some of the tracks:

[Chinese Democracy]
After building a "chinese streets scenario" , some big drum pounds the record actually starts with a door blowing guitar riff flavored with a modern tone. It's like a musical welcome to the new world of GNR.

[Shackler's Revenge]
After the door slamming it's time to show the new musical territorries Axl's been drown into the last decade. This excellent song features a Sledgehammer guitar riff counterparted by synths that paves the way for Axl's classic bad mother#$*!*% framework.
A sick guitar solo, featuring noise and a sequence of
blistering arpeggios capable of making metal fans drool.

Let's pour a little of sugar , but not enough to screw the freaky mood. The intro feats an interesting guitar riff (which plays the chorus melody) and electronic drums. Very dualistic song, modulating melancholy and rage all over.
Worth noticing the emotional climax with a 1st class sweet solo near the end.

[Street of Dreams]
Mooore sugar! The first song in the album that remembers you that the you're listening to GNR. At this time you can notice that Axl's low notes range has increased.

[If the World]
Modern.. Spanish style guitars poured around the song, electronic drums, synth riffs and strings builds an interesting flirt of classic guns with Alternative Metal.
Ass-kickin mood and great guitar solo.

[There was a Time]
The Alternative Metal ride continues. The chorus melody is kinda disturbing.

[Catcher in the Rye]
This song have a nostalgic 90's rock feel that may remind you a time when GNR was on the fridge and Black Crowes was on the MTV.

After an intro full of axl-isms , a groovy heavy riff oriented song comes. Not one of the best, but worth hearing.

[Riad n' the Bedouins]
Ever wondered what would happen if Led Zeppelin's Immigrant Song and You Could be Mine were crossed over?

Along with "Better" it kinda externalizes (in my view) Axl's emotional rollercoaster over these years. Served on a modern 6/8 british blues dish.

IRS and Madagascar are very good songs but not big surprises, considering the internet leaks and live performances
over the years. Didn't liked "This I Love" and "Prostitute" much, they sounded spiceless to me.

My general conclusion is that the record's "sound and mood" foundation is very non-linear. It makes sense since Chinese Democracy took almost 10 years to get done and it's impossible for an artist's work not to reflect this. Loads of talented producers and musicians put their hands on it making the overall work very rich.

However, it means that this is not an easy listening for most people due to the context switches, but i bet that after a while you'll totally immersed on Chinese Democracy's sound atmosphere . 2 or 3 fillers in a 14-song album is a nice ratio and makes the entire album a great acquisition.

Liked the electronic mash ups and freaky guitar tones. Axl was very brave when he decided to incorporate alternative metal elements. They're blended
flawlessly without saturating the songs.

Overall Note: 9


Monday, November 03, 2008

Reflections Roundup Series nº 1:

The C++ Winter, Game Development Environments and Programming Languages

Meta: Reflection Roundup series are ramblings in one or multiple related subjects where i try to expose my point of view (YMMV of course, so comment!)

Before starting this post, remember that the language i'm talking about is C++(not ANSI C or Objective-C).

My relationship with C++ can be described as a 3-instance date that ended with me putting it up in the refrigerator. What always drove my attraction to C++ is the fact that it's intensively used in the game development world.... being the gamedev wannabe that i am, i said "I must learn it at any cost!" and started reading and gathering information in order to understand the language's mechanisms and their rationale.

When i got committed to a game project a few months ago(that blew up unfortunately) , I've gone through Scott Meyer's Effective C++ [1] to acquire a deeper understanding of the language, its pitfalls and ambiguities.
What I've realized after reading half of the book is that you gotta practice defensive programming all the time. In some situations i bet there are more than 5 ways to add undefined behavior to your program in a single expression. That's a tough thing... because the complexity of the language easily surpass the complexity of the problem being solved and i'm sure that this have a serious impact in productivity.
Spice it up with a large source tree,complex builds, and multi-platform code[2] , roast it intensively with the multicore crisis and you can realize that it's not a very nice place to be...

I can't imagine how these guys manage to be productive... and i would really love to spend one day watching the spartan work of a Sr. Programmer of the game industry, so i could bring my opinion closer to reality.
I'm not the best to speak on its problems... there are people that faced them on a daily basis for some time and can clearly discuss on the subject [3]

Some remarkable guys built something different a while ago. Naughty Dog, the softhouse behind famous Playstation 1 and 2 titles like Crash Bandicoot and Jak And Dexter managed to develop their own environment for game development. It consisted of a lisp DSL that allowed fluent rendering description procedures(probably allowing SIMD assembly inline as well) and game entities management. All of this in the top of a REPL that Emacs clients would connect to send code upgrades on the fly!
This genius environment [4] , structured by Andy Gavin (an MIT-brewed-lisp Jedi) had its flaws as well. Even sounding like the wet dream of most game developers it didn't solved all the problems. With an environment like this ND was swimming against the current, becaus most of the vendor tools were aimed for the C++ market. They had to maintain lots on in-house code, and most of the core stuff was centered in Andy. The result was : When Andy left, there was no further interest to keep improving the technology, so, everything was dropped off in favor of C++[5]
. Another potential case of Philip Greenspun's 10th programming rule.

Even not being the "happily ever after story" it's a proud example where fearless research and exploration of different technologies can led small companies to Beat the Averages and deliver high quality products. Few people tends to pick change instead of cold comfort.

Tim Sweeney, the architect behind Epic's Unreal technology already expressed his ideas of a programming language that would be ideal for games and suggested some good stuff that would be of high value for game developers and other kinds of multimedia/real time apps. Some programming idioms in the presentation may remind you of Haskell (list comprehensions) Erlang and the newborn Clojure (concurrency features like Software Transactional Memory and Actor-based concurrency). The use-or-not-use garbage collection may remind you of Digital Mars D, where you can choose between garbage-collection and manual memory management.
Speaking on D, Andrei Alexandrescu exposed recently the new functional mechanisms to be implemented in D. For those who don't know him , he's the author of a famous C++ template voodoo book[6] and he's currently assisting on the design of D. He surely know what pissed him off in C++, and what would he do to improve it.
C++0x is intending to employ functional constructs as well, but the question is how many 8 years will take for compilers to catch up with the new standard.

It's notable that developing a AAA game is risky business all the way, and the best way to reduce risk is through the use and development of tools that assist in controlling complexity, allowing the developers energy to be better employed in problem solving and design innovations instead of "which side of my declaration the * should go this time?"

Multi-platform game development urgently needs a language/platform to make this happen. I think its past time to appear a massive turnaround in the area (much like Java and Ruby on Rails as internet apps development platform at their respective boooms) The funniest thing is that even games being the type of application responsible for edging technological improvement in the area of PCs and specialized appliances, very little innovation is exposed in terms of programming languages and runtime environments for development and deployment of games... My vision may be distorted , but it looks that stuff is pretty much done the way it was like 15 years ago , but in larger scale.

C++ is still on the run, and there are loads of people using it.
It's kind of a "Double-Edged Gunblade of the programming languages where you can cut your neck and shoot youself in the foot in just one move.
It's a complex and potentially great tool in the hands of a programmer that features a full C++ runtime embedded in his brain.

Me? I prefer to keep ANSI-C, Objective-C, Ruby and Lisp in my weapon box , and you?


[1] Meyers, Scott(2005) Effective C++, 55 specific ways to improve your programs and designs

[2] A pal from Australia that works in the game industry once told me that their C++ game codebase was tweaked to compile/run in more than 3 platforms... imagine the entanglement of #ifdefs and other preprocessor code bending to make it happen

[3] The C++ FQA is a good digest of most common CPP pitfalls. For a more more "first-person-narrative-style " this guy exposes his pain , and how he gave up on C++ and decided to code in a Object Oriented C Idiom.

[4] Gamasutra has one of the few articles around describing how the DSL and the development environment was

[5] A while ago Naughty Dog announced their return to Lisp in their game development platform, using their experience from GOAL to improve their environments. Way to GOAL! :D

[6] Alexandrescu, Andrei(2001) - Modern C++ Design: Generic Programming and Design Patterns applied


Wednesday, March 19, 2008

Super Mario World Soundtrack Revisited!

Today, on my daily reddit navigation , i've found something absolutely über cool. A guy rearranged and re-recorded the entire Super Mario World (Super Nintendo) soundtrack. It is a master class on Video Game music arrangement. Click here for official hosted site

Just push play and take the time to feel nostalgic. Lots of people(me included) got this game with the Super Nintendo Entertainment System package in the early 90s(composed of SMW Cartridge/Booklet, Two Controllers, RCA and RF cables and Power Supply)

SMW is a true classic, being Nintendo's kickstart on its victorious 16-bit generation. I still remember hooking the SNES on my TV and having my first baby steps on the console and Dinosaur Island simultaneously. It just blew my mind in every aspect back then because i never played any mario game before (my 8-bit console was a Sega Master System).

Remembering: If you own a Nintendo Wii, you can download it from Virtual Console.

Labels: , , ,

Sunday, March 09, 2008

It Seems Sun is intending to port Java to the iPhone!

This is gonna be interesting! I don't know if Apple have legal constraints for the
development of a Virtual Machine for the iPhone, considering that IMHO a VM isn't a application at all

Here are some comments concerning the article :

"Will there be an iPhone emulator for NetBeans, too? This is really great news, it means I can bring my entire portfolio of mobile content to the iPhone without having to dust off my crufty 1994 Objective-C manuals. Go JAVA"!

It reinforces my theory that Java programmers don't dig Objective-C. Obj-C kicks ass! Go OBJ-C!!!

"What a crock. Safari runs interpreted code. And you can argue that any half-decent game with AI logic and loadable levels runs interpreted code. Sounds like Apple just reserves the right to be jerks to products that undercut their distribution control, because you can bet that Java apps that can be downloaded over the net connection won't be sold through the App Store."

Everyone knows that Apple tends to have the SaaS approach when developing some of their products... they want to get a piece of the cake in therms of software. Control is needed when we are dealing with cell-phone content.
I don't see the fact concerning the "VM prohibition" as a threat for developing scripted game code. If you don't use a bloated scripting language it is totally possible. I think we can embed a Lua interpreter to any C-based program without big efforts..

Labels: , ,