My recent interview with Robert Kooima (RLK) yielded a detailed and fascinating account of Neverball's history, inspirations and influences. Here is RLK's full account of the game's conception, growth and evolution over the past decade and a half. Enjoy!
Can you describe the project's evolution from Puttnik through to the 1.5.0 release of Neverball? What inspirations and motivations kept you going?
That's a long story. I would never have thought it notable, but I suppose that if Neverball has evolved into something worth talking about, then the story of it is worth recording. The experience has certainly been valuable to me.
In 1999 I was in the master's program in computer science at the University of Iowa. I was working with a group there called the Advanced Research Computing Service, which has since disbanded. ARCS had what was at the time the best 3D graphics hardware money could buy: Silicon Graphics workstations, specifically O2s and Octanes. I had a research assistantship doing OpenGL programming in support of scientific visualization on campus.
I had been playing Quake 3 with friends since just after its release, and like most Q3 players we eventually got bored with id's maps and had some fun fighting on community-made maps. Some of these maps were great, but many of them were junk, and I decided I could design maps as well as anyone. I learned to use QERadiant, the Quake editor of the day, but ultimately I didn't produce more than one or two well-polished Q3 maps. Instead, the more I learned about how the Quake 3 engine worked and how it represented 3D geometry in the editor and in the game, the more fascinated I became with the data structure itself.
None of it was new to me, as I had been studying 3D graphics at U Iowa since 1996, but I was impressed by how simple and efficient the Q3 implementation was (inferred, of course, from a reverse-engineering of its file formats, since the engine source was still closed at the time.) I had previously worked with 3D tools such as Alias Wavefront and Maya, and I had written a lot of real-time rendering code for ARCS, but I had been unable to establish an effective asset pipeline -- the end-to-end data process from artist to application. The QERadiant MAP file and the Q3 BSP file were an excellent example of such a process. Inspired by these, I implemented my own MAP compiler to produce a simplified version of the BSP file, which I called SOL, and I wrote basic renderer for SOL files. This enabled the development of some nice-looking applications for the Immersadesk, an early virtual reality platform in use at ARCS.
The notable thing about the MAP file is its fundamental geometry representation. A map is an accumulation of convex solids, where each solid is the intersection of a set of infinite textured planes. (It's perfectly legitimate to define infinite structures in a MAP file.) The magic lies in the ease with which this representation allows point-in-solid tests to be performed. My previous work with Maya's polygon-soup exports had led me to believe that point-in-solid testing was difficult and error-prone, but the MAP's union of intersections of half-spaces made it trivial. Similarly, my previous work with Maya's UV editor tool had convinced me that texture placement was an intolerable annoyance, but QERadiant's application of repeating textures to infinite planes made that too trivial.
So I had a pipeline where-in beautiful complex architecture was easy to create and physical simulation within it was easy to perform. In June 2001 I used this to write a mini-golf game. It had a basic putting interface and a believable ball motion, and I designed a few short holes for it in QERadiant. Of course, attention spans are finite, and I lost interest in the project and moved on to something else. Soon, I graduated with a Master's degree in computer science, and on the basis of my experience with OpenGL and the Immersadesk I was hired by a group funded by Old Dominion University to do real-time visualization research at NASA Langley Research Center. I relocated to Hampton, Virginia, and began working 9-to-5.
While at NASA I did a great deal of development for a CAVE and I created a custom virtual reality dome system doing spherical projection using one of the first programmable GPUs, the GeForce3. The CAVE and Dome both had motion tracking systems that enabled stereoscopic, immersive rendering, and I was motivated to created a truly powerful virtual miniature golf simulation by attaching a motion sensor to a real putter and feeding its motion into my mini-golf game. The putt game source had been lost on a junked hard drive, backed up to a university account to which I no longer had access, but my college friend Jake had kept a copy. He sent it to me in April 2003. I renamed it Puttnik and set about updating it with more realistic ball physics.
In late 2002, Super Monkey Ball for the Nintendo Gamecube was getting considerable attention. It was received as quite an original idea, perceived as a fresh take on Marble Madness. I enjoyed the gameplay, and it seemed like the improved Puttnik implementation would handle it nicely, so, goofing off at work one day in May 2003, I made the ball much bigger and mapped the mouse pointer position onto the floor tilt. It worked well, so the project was retargeted to resemble Super Monkey Ball. In the interest of debugging, I made the ball transparent so that I could see through it to the geometry that it touched, and I colored it black and white like a Redstone rocket so that I could visually infer the correctness of its angular velocity and momentum. I was more interested in the ball's behavior than in animated monkeys, and this bias lent the project its tongue-in-cheek new name: Super Empty Ball.
The 2003 open source game community was small. There were a few good 2D games around, and I recall Frozen Bubble being among the most well-regarded. Slashdot was still a thing, Linux pride was strong, and countless open source game projects were launched, many with the name "Tux" in the title or penguins in the theme. The site Happy Penguin had emerged to catalog them, its name a pun on the early PC-gaming site Happy Puppy. Happy Penguin encompassed Linux gaming in general and listed thousands of games, both commercial and free, active and abandoned, complete and incomplete. It naturally emerged as a nexus for open source gamers and game developers. The fundamental problem in the open source community at large was simple: most programmers, especially those working for free, would stop working on a project once the fascination of it had worn off, once the interesting problems had been solved. Few if any open source 3D games had emerged from alpha status, let alone achieved a level of polish that anyone could be proud of.
I felt a growing level of dissatisfaction within the open source game community, and it seemed important to accomplish the goal of completion. To insulate a project from the disappointment of abandonment, I felt that a critical mass of done-ness had to be attained before any mention of the project's existence was made. The mantra of open source at the time was "release early; release often" and I felt certain that this philosophy was absolutely false.
Additionally, I've long subscribed to a notion which, as it turns out, has been studied and understood for many decades: that people who talk about their goals are less likely to achieve them. Psychologically, the simple act of informing others of your intentions can serve to satisfy your motivation to perform the task.
Guided by these two mindsets, I determined that I would say nothing about Super Empty Ball until after a great deal of work had been done. Work proceeded quietly from May until July of 2003. By this time it had developed to the point where it was a "complete" game experience. There were basic sound effects sampled from a Roland 808, a title screen, a ball counter, level interstitials, a game-over screen, and everything one might expect from a minimal game. You could play and be challenged, and through practice and perseverance you could finish. I posted some screenshots to the Flipcode Image of the Day and a thread to the GameDev forums, thus revealing the game publicly for the first time.
Responses began to trickle into my inbox, and as July turned to August I realized I had a real project on my hands. The ball was rolling, as it were. I knew that the name "Super Empty Ball" was fine for a tech demo but that an ongoing project would need something better. I didn't want to fight for the game's identity, so I decided upon two criteria for the game's name: a "clean" Google search and an un-claimed domain name. A made-up word would provide both the first spot on a Google search and an easy domain claim, so I considered a number of nonsensical names.
Sadly, when the brain sets for itself the task of finding a creative name, its capacity for name creativity is absolutely nullified. I made a list and it was crap. But I had played The Neverhood years before and loved it (dum da dum doi doi doi.) To me, "hood" clearly implied a notion of place, which was necessary for an adventure game, but "never" implied a kind of oblivious impossibility, emphasizing that it does not matter that it cannot be, while evoking "nether" meaning "under" and generally implying an other-worldliness. I felt that such a theme would release me from any need to conform to the necessity of a concrete reality, a visual fidelity, a hero-protagonist, or a story. I googled "Neverball" and the Google of 2003 replied "Did you mean 'nonverbal'?" and so the name was chosen. With this name the game was posted to Happy Penguin on August 4, 2003.
It was difficult for me to admit that I wanted people to like it. I had always tried to view the project as something designed for the pleasure of design. While I was happy to share it with others, I did feel that I had created it for myself. Being open source, it was never motivated by profit, and I wanted to feel that it was not motivated by success in any meaningful form, by popularity or general acceptance. But it's impossible to believe such a thing for long. With the project open to public scrutiny, and with my email address attached to it, people would and did certainly respond. Inevitably, while I appreciated the praise, I was riled by the criticism. I immediately and unavoidably cared what people thought of it and this impacted me deeply.
My initial response was to take all suggestions seriously. If a player wanted a feature, I worked to integrate it. Of course this can only be carried so far, and certain suggestions (on-line multi-player, for example) were simply not feasible in a code base not designed from the outset to support them. However, the sheer volume of ideas was always the primary limiting factor. There existed neither the time nor the inclination to satisfy all correspondents. This, oddly, was something that not everyone understood. Few realize that the value of a thing does not lie in the idea for its creation, but in the time invested in its creation. In fact, many people felt I actually owed them something in trade for ideas that they felt were valuable. An open source project lead can always say "If you want it, implement it yourself" but absolutely no one wants to be told that. Some were offended by my inability or unwillingness to incorporate their input. I was truly taken aback by this. While I had given people something for free, their response was to ask for more. The burden of dealing with the rising tide of demanding email turned me around 180 degrees. I began to Ignore Everyone.
But the email continued to pour in. One player by the name of Mehdi Yousfi Monod, or MYM, sent a message in August 2003 to notify me that his mouse pointer had disappeared after he updated from Neverball 0.21.0 to Neverball 0.25.0. MYM's observed mouse pointer behavior was, in fact, a feature rather than a bug. I had been plagued by a flaw in SDL that produced unpredictable (actually, game-breaking) mouse motion events when switching from the absolute mouse positioning used for the menus (pointer visible) to relative mouse motion used during the game (pointer hidden). I attempted to work around the problem by using relative pointer motion for menus. This proved to be an exceedingly unpopular idea, and MYM's message was just one of many to express a distaste for it, ultimately leading to the feature's repeal in the next release. I got less hatemail for SDL's bug than I did for my feature.
At that time I was assigning a version number to each releases to indicate the number of levels that at it contained. I had decided that I would declare version 1.0 with 25 levels, thus the release of version 0.25 in late August 2003 signaled an approach to the finish line. I raced to complete the remaining features that I thought a finished game required, but of course, the last 10% of any project requires as much effort as the first 90%. There would be a total of 13 point releases of version 0.25. In September I purchased a Roland Fantom and set about composing a soundtrack. In October I was briefly distracted by a return to the Puttnik roots of Neverball and spun off a simple mini-golf game that I called Neverputt. I also implemented the replay recording and playback mechanism that would eventually form the nucleus of Neverball's online community. The remaining game engine features would include teleporters, the high score mechanism, OS X and Windows portability, and a long list of bug fixes. After all this, Neverball 1.0 was released in early November 2003.
MYM had mailed me a second time in October 2003, attaching several very impressive replay files. A week after that, he mailed a third time, attaching his first attempt at a custom level. He was the first player to do so. It was a simple level consisting of a curving, sloping path blocked by several large moving cubes. Called "La Descente Infernale", it remains the first course in MYM's first level set, "Tour de Force", still included in the main source of the game.
In the beginning, MYM's cubes had angry faces crudely blocked in with red polygons, and I didn't like them. I felt that putting faces on inanimate objects evoked Nintendo's Mushroom Kingdom and the animist tradition that (I infer) influenced it. This was in conflict with the Platonic ideal of the Never universe. The limitations of the 3D graphics of the day lent a clean perfection to the early look of Neverball, and I chose to embrace this as its design. I resisted the temptation to make ham-fisted attempts at visual realism, as I knew I could never do so consistently, and would have ultimately wound up with a non-uniform distribution of complexity and an amateur appearance.
Facing up to MYM's insistence that the boxes needed faces eventually led me to understand that the game was no longer mine to control, and that indeed no project worthy of growth can continue do so under the thumb of one person. But while I loosened my grip on design, I felt it necessary to maintain a hold on quality control. Those red polygons weren't doing it for me, so in February 2004 I asked my co-worker Derek Wilson, a gifted digital artist, to design an angry face a la Nintendo's Thwomp. I provided this texture to MYM to place on the blocks in descent.map, and thus was born the thwomp face which would became the mascot of the Neverball community. Much later, in July 2010, Derek would design several new thwomps with a variety of facial expressions, thus guaranteeing that the thwomp will remain a part of Neverball in perpetuity.
During the initial flurry of mail in October 2003, MYM also requested a some deep changes to the game engine. His first request was a trigger mechanism, i.e. an entity that would sense the presence of the ball and activate a moving object. I was flat-out opposed, not because I thought it was a bad idea, but because I was still in my Ignore Everyone phase and I was nearing complete burn-out after having spent five solid months dedicated to the game. But by February 2004 I had rested up and was more open to new ideas. It was a productive month for us, and Neverball expanded quickly with MYM's input and assistance. We would eventually release version 1.1 with 50 "official" levels created by me and 25 extras by MYM. I came away from February with a deeper sense of how to determine who to ignore and who to acknowledge. I consider this to be the most important thing that my involvement in open source has taught me.
Through the summer of 2004 I set about making a number of graphical improvements to the game. These included mirrored surfaces, shiny objects, and an entirely new representation of backgrounds that allowed for a dramatic jump in visual appeal. I also merged the Neverputt code into the Neverball source tree, bringing that game up to date with all the improvements made there, and added a bunch of new putting courses contributed by paxed.
By fall of 2004, Neverball had evolved into a rich experience, full of content, with a dedicated group of players and contributors. I had been doing virtual reality research with the same group at Langley for three years, and I had decided it was time to move somewhere different. I had spent enough time in a government research lab, and felt that I wanted to return to academia. I knew that good work in large-scale real-time visualization was being done at the Electronic Visualization Laboratory at the University of Illinois at Chicago, so I contacted their administrator and applied to the doctoral program in computer science. I was accepted, and in August 2004 I moved to Chicago to begin work on a Ph.D. at EVL.
All this time, MYM and others had been recording and sharing replays of impressive feats of Neverball gameplay. In January 2005 he and a Game Tome user named Shinobufan unveiled a web site to catalog these replays called the Neverball Hall of Fame. In April 2005, a forum was added. This forum would become the center of the Neverball community, and site of record for all subsequent Neverball matters. In March 2006 it moved to nevercorner.net, where it remains active.
And this is the point where I more-or-less bowed out of Neverball development. Nevercorner flourished, and active members emerged. Parasti stepped up and took the reins of the project. themacmeister, Dave, Cheeseness, jammnrose, tonesfrommars, Elviz, Challenge Space Yard, Krabby Krap, nue, and others joined MYM and shino to continue to shape the game and its levels. I poked in from time to time, but years passed without my having made a significant contribution, which I regret. I founded a subversion repository for the game in January 2006, and the community took full ownership of the entire project. Under Parasti's direction, a huge number of updates and improvements were made. In January 2009, this incredible effort was released as Neverball 1.5.0.
- Robert Kooima
Thanks for reading!
If you haven't already, I'd like to urge you to read the rest of the interview that this was originally written for. It contains a more insight into the development of Neverball and the evolution of its community.
 Following the interview, RLK wrote to me with an additional anecdote regarding Neverball's black and white default ball:
"It's true that this pattern unambiguously displays the orientation and thus the rotational motion of the ball, which assisted in debugging the rigid body dynamics simulation, but a similar pattern was used for the same reason on many early rockets, in particular the rocket that launched the first American into space.
I was working at Langley, the birthplace of NASA. The Mercury astronauts trained there, and the Mercury capsule was designed and tested there. I'm forced to admit that I wrote a fair amount of Neverball code there, and so the original Neverball ball is an homage to Langley."
You can find out more about Neverball and Neverputt at the official website, and you can find the community forums and an online leader board at nevercorner.net. Both games (and their source) are available for Linux, MacOS and Windows from the Neverball website.
Also of note is the archive of the evolution of the game from Puttnik through to Neverball 1.4.0 that Neverball community member and active developer parasti has put together.
Another member of the Neverball community, ht-never, has recently provided an Italian translation of this article.
You can email me at firstname.lastname@example.org
This interview was first published on the 19th of June 2012.