Game Sprockets. Game Sprockets is a collection of application programming interfaces (APIs) supporting gaming on the classic Mac OS. It consisted of four main parts, DrawSprocket, InputSprocket, SoundSprocket and NetSprocket, each providing a library of pre-rolled routines for common gaming tasks. SpeechSprocket was a relabelled version of the Speech Recognition Manager that provided speech recognition support, and QuickDraw 3D RAVE provided 3D hardware acceleration.

Game Sprockets was first released in 1996, and saw only minor use before development was cancelled in 1997. OS X included many of the same features in the built-in libraries, while OpenGL replaced RAVE as the 3D acceleration layer. NetSprocket lives on as OpenPlay, although adoption is limited.

History

Background
Early in its history, the Macintosh computer was a strong gaming platform due to its high-resolution screen, digital sound hardware and the fact that every Mac came equipped with a reasonable gaming controller, the mouse. However, gaming was never supported in any strong way within Apple, and in some cases actively discouraged. By the 1990s the Mac platform had greatly increased in complexity through a profusion of models with different features. Supporting a game across the entire lineup required the programmer to learn the intricacies of different models at a time when even figuring out which machine the program was installed on had no standard solution.

By the mid-90s, PC gaming had evolved into a powerful market of its own, one of the drivers for new computer purchases. During the move from MS-DOS to Microsoft Windows, several Microsoft staffers noticed that game developers were generally ignoring Windows due to the better performance available under DOS. They decided that Windows needed to support first-class gaming, and set about ensuring that Windows would become the preferred gaming platform in the future. The result was the introduction of the DirectX libraries, which greatly reduced complexity and addressed many of the performance concerns. As 3D games became widespread, the library's Direct3D became a decisive advantage, and DirectX grew to become almost universal for PC gaming.

By the mid-90s, gaming on the Mac was largely dead. The combination of high prices, stagnating sales, poor performance and a lack of a DirectX-like system all resulted in the game developers leaving the Mac field in droves. As it was in Microsoft, several Apple staffers took it upon themselves to redress this problem, led by Chris DeSalvo. The result was a two-pronged effort; on one side was the Game Sprockets libraries (along with RAVE), and on the other was a single target gaming platform, the Pippin.

Short life
Game Sprockets was released on 29 March 1996, just before that year's WWDC.

Game Sprockets was one of many Apple technologies that ended development after the return of Steve Jobs to the CEO position at Apple. Its death was announced in a March 1997 press release, as part of a wide series of layoffs and restructuring as the company moved to a Mac OS X based future. DeSalvo wrote a fairly lengthy open letter on the topic, noting that Sprockets might come to life again in the future.

Description
GameSprockets included four main libraries and two associated ones, discussed in turn below.

DrawSprocket
Unlike the pre-Windows PC system, displaying high-resolution color images had always been easy on the Mac. However, getting details about the resolution and color depth of the machine they were running on required a number of "tricks". Additionally, common gaming tasks, like switching resolutions or fading to black, had intricacies that required the programmer to adjust for differences in color depth that most ignored.

DrawSprocket was a library of utilities to help the programmer address these common problems. Among its many separate functions were calls to allow the user to select a "main monitor" for the game, (because multi-screen configurations were relatively common) cleanly enumerating available resolutions and switching between them, various routines for fading from one image to another (instead of just "to black"), displaying background images and various similar utilities.

A major portion of DrawSprocket provided an abstraction layer for page flipping. Some Macs included the ability to page flip in hardware, while others did not. DrawSprocket provided a single API that worked on any machine, using the hardware if it was available, or falling back to custom-tuned software blitters if it did not. Related code allowed developers to easily create multiple framebuffers to draw into, and then use the page flipping calls to quickly display them.

InputSprocket
The Mac had always shipped with an input device suitable for gaming, the mouse. Even in cases where other devices were better suited to gaming, like joysticks, it was relatively easy to make the devices emulate mouse or keyboard input. However, this model stopped working well as joysticks with increasing complexity were released in the 1990s. New models had several axies controlled by potentiometers with linear input, and in these cases mouse emulation simply didn't work.

The solution was InputSprocket. InputSprocket allowed the hardware vendor to provide a driver for any possible input device. The driver not only handled communications with the input device, but also presented a list of capabilities to the InputSprocket manager. InputSprocket displayed all installed drivers in a single, universal, control panel. Games linking to InputSprocket then provided a list of the operations they wanted the user to control. Through the control panel, the user could map any operation to any input. Apple supplied drivers for mice and keyboards.

InputSprocket was one of the most widely used of the Game Sprockets, and drivers were supplied for many devices that worked on the Mac. This was greatly expanded by mapping InputSprocket onto the similar Human Interface Device system that is part of the USB standard. This meant that almost any USB input device would work to at least some level with InputSprocket without any effort on the part of the developer or the user.

SoundSprocket
The Macintosh's Sound Manager supported digital sound from the earliest versions, and stereo for much of its evolution. SoundSprocket added to this support by including systems to simulate 3D sound. Programmers could add SoundSprocket support to their programs and link in-game objects to sounds that would appear localized in space.

NetSprocket
NetSprocket provided an abstraction layer that made it easy for developers to add networking support to their games. NetSprocket supported either AppleTalk or TCP/IP, and supported naming of games, player and providing passwords. It used a client/server architecture, and included an option to allow a host to run just the networking code without the graphics. NetSprocket also included functionality to assign player ID's, teams, and player types (players, observers, etc.) NetSprocket also provided code for message passing, although the protocol of those messages was left to the programmer.

NetSprocket was the one portion of Game Sprockets that lived on after the project as a whole was downsized. The code was released into open source by Apple and further developed with new functionality and multiple platform support. The latest versions support Mac OS, 
Windows and Linux.

SpeechSprocket
SpeechSprocket was included in Game Sprockets, but consisted of nothing more than a re-badged version of the existing Speech Recognition Manager.

QuickDraw 3D RAVE
Like SpeechSprocket, QuickDraw 3D RAVE was considered to be part of the overall Game Sprockets technology, although it was developed and supported separately. RAVE was a thin hardware abstraction layer similar to DirectX's Direct3D.

References

Notes

Bibliography

 (Sprockets), "GameSprockets 1.7.5 Document and Software" , Apple Inc.
 Jeremy Vineyard, "Sprockets are Forever", MacTech, Volume 13 Issue 2 (1997)
 (Enable), "Apple Game Sprockets to Enable Cutting-Edge Multimedia and Internet Games on the Macintosh" , Apple Inc., 29 March 1996

Macintosh operating systems APIs