Game Oriented Assembly Lisp

Last updated
Game Oriented Assembly Lisp
Paradigms Multi-paradigm
Family Lisp
Designed by Andy Gavin
Developer Naughty Dog
First appeared3 December 2001;22 years ago (2001-12-03)
Stable release
3 / 7 February 2012;12 years ago (2012-02-07)
Typing discipline Dynamic, latent, strong
Scope Lexical
Implementation language Allegro Common Lisp
Platform PlayStation 2, PlayStation Portable, PlayStation 3
License Proprietary
Influenced by
Lisp, Scheme,
Game Oriented Object Lisp (GOOL)

Game Oriented Assembly Lisp (GOAL, also known as Game Object Assembly Lisp) is a programming language, a dialect of the language Lisp, made for video games developed by Andy Gavin and the Jak and Daxter team at the company Naughty Dog.

Contents

It was written using Allegro Common Lisp and used in the development of the entire Jak and Daxter series of games.

Design

GOAL's syntax resembles the Lisp dialect Scheme, though with many idiosyncratic object-oriented programming features such as classes, inheritance, and virtual functions. [1] GOAL encourages an imperative programming style: programs tend to consist of a sequence of events to be executed rather than the functional programming style of functions to be evaluated recursively. This is a diversion from Scheme, which allows such side effects but does not encourage imperative style.

GOAL does not run in an interpreter, but instead is compiled directly into PlayStation 2 machine code to execute. It offers limited facilities for garbage collection, relying extensively on runtime support. It offers dynamic memory allocation primitives designed to make it well-suited to running in constant memory on a video game console. GOAL has extensive support for inlined assembly language code using a special rlet form, [1] allowing programs to freely mix assembly and higher-level constructs within one function.

The GOAL compiler is implemented in Allegro Common Lisp. It supports a long term compiling listener session which gives the compiler knowledge about the state of the compiled and thus running program, including the symbol table. This, in addition to dynamic linking, allows a function to be edited, recompiled, uploaded, and inserted into a running game without having to restart. The process is similar to the edit and continue feature offered by some C++ compilers, but allows programs to replace arbitrary amounts of code (even up to entire object files), and does not interrupt the running game with the debugger. This feature was used to implement code and to enable level streaming in the Jak and Daxter games.

Uses

GOAL's first use was for the Jak and Daxter: The Precursor Legacy game. The predecessor language, Game Oriented Object Lisp (GOOL), was also developed by Andy Gavin for Crash Bandicoot .

Since Naughty Dog no longer employs GOAL's primary development and maintenance engineer, and they were under pressure from their new parent company, Sony, to share technology between studios, Naughty Dog transitioned away from Lisp: [2]

In all honesty, the biggest reason we're not using GOAL for next-gen development is because we're now part of Sony. I can only imagine Sony's shock when they purchased Naughty Dog a few years back, hoping to be able to leverage some of our technology across other Sony studios, and then realized that there was no way anyone else would be able to use any of our codebase. Sony wants us to be able to share code with other studios, and this works both ways - both other studios using our code and vice versa. Add this to the difficulty curve of learning a new language for new hires, lack of support from external development tools (we had our own compiler, linker, and debugger, and pretty much had to use Emacs as our IDE), etc, means that there are clearly a lot of other factors involved. Note, however, that these issues aren't really technical problems, they're social ones.

Scott Shumaker

However, they have since resumed using it for scripting on some PlayStation 3 games, including The Last of Us . [3]

OpenGOAL

A community project, OpenGOAL, started in 2020 with the goal of porting GOAL to x86-64 by decompiling existing Jak and Daxter: The Precursor Legacy and Jak II assets and recompiling them natively. [4] It includes a GOAL compiler written in C++ as well as a read–eval–print loop to enable a similar workflow to Naughty Dog's original implementation.

Related Research Articles

<span class="mw-page-title-main">Common Lisp</span> Programming language standard

Common Lisp (CL) is a dialect of the Lisp programming language, published in American National Standards Institute (ANSI) standard document ANSI INCITS 226-1994 (S2018). The Common Lisp HyperSpec, a hyperlinked HTML version, has been derived from the ANSI Common Lisp standard.

<span class="mw-page-title-main">Emacs Lisp</span> Dialect of Lisp used as the primary implementation and extension language for Emacs

Emacs Lisp is a dialect of the Lisp programming language used as a scripting language by Emacs. It is used for implementing most of the editing functionality built into Emacs, the remainder being written in C, as is the Lisp interpreter. Emacs Lisp is also termed Elisp, although there are also older, unrelated Lisp dialects with that name.

<span class="mw-page-title-main">Lisp (programming language)</span> Programming language family

Lisp is a family of programming languages with a long history and a distinctive, fully parenthesized prefix notation. Originally specified in 1960, it is the third-oldest high-level programming language still in common use, after Fortran and COBOL. Lisp has changed since its early days, and many dialects have existed over its history. Today, the best-known general-purpose Lisp dialects are Common Lisp, Scheme, Racket, and Clojure.

Bytecode is a form of instruction set designed for efficient execution by a software interpreter. Unlike human-readable source code, bytecodes are compact numeric codes, constants, and references that encode the result of compiler parsing and performing semantic analysis of things like type, scope, and nesting depths of program objects.

<i>Jak and Daxter</i> Video game series

Jak and Daxter is an action-adventure video game franchise created by Andy Gavin and Jason Rubin and owned by Sony Interactive Entertainment. The series was originally developed by Naughty Dog with a number of installments being outsourced to Ready at Dawn and High Impact Games. The first game, Jak and Daxter: The Precursor Legacy, released on December 3, 2001, was one of the earliest titles for the PlayStation 2, and is regarded as a defining franchise for the console.

Naughty Dog, LLC is an American first-party video game developer based in Santa Monica, California. Founded by Andy Gavin and Jason Rubin in 1984, the studio was acquired by Sony Computer Entertainment in 2001. Gavin and Rubin produced a sequence of progressively more successful games, including Rings of Power and Way of the Warrior in the early 1990s. The latter game prompted Universal Interactive Studios to sign the duo to a three-title contract and fund the expansion of the company.

<i>Jak II</i> 2003 video game

Jak II is an action-adventure video game developed by Naughty Dog and published by Sony Computer Entertainment for the PlayStation 2 in 2003. It is the second game of the Jak and Daxter series and both a sequel and prequel to Jak and Daxter: The Precursor Legacy. It was followed by Jak 3 the following year in 2004.

<i>Jak 3</i> 2004 platforming video game

Jak 3 is a 2004 action-adventure video game developed by Naughty Dog and published by Sony Computer Entertainment for the PlayStation 2. The game is the sequel to Jak II and serves as the conclusion of the trilogy. The story of the previous games continues as the player takes on the dual role of recurring protagonists Jak and Daxter. It adds new weapons, devices and playable areas. The game was followed by Jak X: Combat Racing.

<i>Jak and Daxter: The Precursor Legacy</i> 2001 video game

Jak and Daxter: The Precursor Legacy is a 2001 platform video game developed by Naughty Dog and published by Sony Computer Entertainment for the Sony PlayStation 2 on December 4, 2001, as the first game of the Jak and Daxter series. The game follows the protagonists, a young teenager named Jak, as he tries to help his friend Daxter after he is transformed into an "ottsel", a fictional hybrid of an otter and a weasel. With the help of Samos the Sage, a master of the mysterious energy called 'Eco' created by an ancient race known as the Precursors, the pair learn that they must save their world from the rogue sages Gol and Maia Acheron, who plan to flood the world with "Dark Eco", a mysterious substance which corrupts all it touches.

<span class="mw-page-title-main">Andy Gavin</span> American video game programmer

Andrew Scott Gavin is an American video game programmer, entrepreneur, and novelist. Gavin co-founded the video game company Naughty Dog with childhood friend Jason Rubin in 1986, which released games including Crash Bandicoot and Jak and Daxter. Prior to founding Naughty Dog, Gavin worked in LISP at the MIT Artificial Intelligence Laboratory.

<span class="mw-page-title-main">Allegro Common Lisp</span>

Allegro Common Lisp is a programming language with an integrated development environment (IDE), developed by Franz Inc. It is a dialect of the language Lisp, a commercial software implementation of the language Common Lisp. Allegro CL provides the full American National Standards Institute (ANSI) Common Lisp standard with many extensions, including threads, CLOS streams, CLOS MOP, Unicode, SSL streams, implementations of various Internet protocols, OpenGL interface. The first version of Allegro Common Lisp was finished at the end of 1986, originally called Extended Common Lisp. Allegro CL is available for many operating systems including Microsoft Windows (32/64-bit), and many Unix and Unix-like, 32-bit or 64-bit, including macOS, Linux (32/64-bit), FreeBSD (32-bit), Solaris, UNICOS, and UTS. Internationalization and localization support is based on Unicode. It supports various external text encodings and provides string and character types based on Universal Coded Character Set 2 (UCS-2). Allegro CL can be used with and without its integrated development environment (IDE), which is available for Windows, Linux, and on macOS in version 8.2. The IDE includes development tools including an editor and an interface designer. Allegro CL can be used to deliver applications.

Apple Dylan is the original implementation of the programming language Dylan. It was developed by Apple Computer from 1992 to 1995.

<i>Jak and Daxter: The Lost Frontier</i> 2009 video game

Jak and Daxter: The Lost Frontier is a 2009 platform game developed by High Impact Games and published by Sony Computer Entertainment. The game is the sixth and final game in the Jak and Daxter series. The player assumes the role of Jak, the angst-ridden hero enhanced by his exposure to Light and Dark Eco.

<span class="mw-page-title-main">Jason Rubin</span> American video game director

Jason Rubin is an American video game director, writer, and comic book creator. He is best known for the Crash Bandicoot and Jak and Daxter series of games which were produced by Naughty Dog, the game development studio he co-founded with partner and childhood friend Andy Gavin in 1986. He was the president of THQ before its closure due to bankruptcy on January 23, 2013. Rubin is the vice president of Metaverse Content at Meta Platforms.

A translator or programming language processor is a computer program that converts the programming instructions written in human convenient form into machine language codes that the computers understand and process. It is a generic term that can refer to a compiler, assembler, or interpreter—anything that converts code from one computer language into another. These include translations between high-level and human-readable computer languages such as C++ and Java, intermediate-level languages such as Java bytecode, low-level languages such as the assembly language and machine code, and between similar levels of language on different computing platforms, as well as from any of these to any other of these. Software and hardware represent different levels of abstraction in computing. Software is typically written in high-level programming languages, which are easier for humans to understand and manipulate, while hardware implementations involve low-level descriptions of physical components and their interconnections. Translator computing facilitates the conversion between these abstraction levels. Overall, translator computing plays a crucial role in bridging the gap between software and hardware implementations, enabling developers to leverage the strengths of each platform and optimize performance, power efficiency, and other metrics according to the specific requirements of the application.

Characters of the <i>Jak and Daxter</i> series Fictional character

This is a list of characters in the Jak and Daxter series, a video game franchise originally developed by Naughty Dog for the PlayStation 2. Currently, six games in the series have been released, with Jak as the primary playable character in all except Daxter for the PlayStation Portable.

<span class="mw-page-title-main">Bruce Straley</span> American video game designer

Bruce Straley is an American game director, artist, designer, and studio director. He previously worked for the video game developer Naughty Dog, known for his work on the video games The Last of Us and Uncharted 4: A Thief's End. Straley's first video game work was as an artist at Western Technologies Inc, where he worked on the Menacer six-game cartridge (1992) and X-Men (1993). Following this, he formed a company, Pacific Softscape, where he worked as a designer on Generations Lost (1994). After the company disbanded, Straley was eventually hired at Crystal Dynamics, where he worked as a designer on Gex: Enter the Gecko (1998) and was initially game director for Gex 3: Deep Cover Gecko (1999); he left the company partway through development of the latter.

Charles Steve Zembillas is an American character designer, art director, educator, and author. Zembillas designed early concept art for games such as Crash Bandicoot, Spyro the Dragon, and Jak and Daxter: The Precursor Legacy, as well as animated television series such as Wish Kid, Where's Waldo?, James Bond Jr., and Ghostbusters.

<span class="mw-page-title-main">Evan Wells</span> American video game designer

Evan Wells is an American video game designer and programmer and co-president of Naughty Dog. Wells' first video game was at Sega, where he worked on ToeJam & Earl in Panic on Funkotron, before moving to Crystal Dynamics in 1995 to work on Gex and Gex: Enter the Gecko. He was employed at Naughty Dog in 1998, working on several Crash Bandicoot and Jak and Daxter titles before becoming co-president of the company alongside Stephen White in 2005; White was replaced the following year by Christophe Balestra, who retired in 2017. The two oversaw the release of the Uncharted series, and The Last of Us. Wells remained the sole president, overseeing the release of The Last of Us Part II, until Neil Druckmann's promotion to co-president in 2020. Wells announced his retirement in 2023.

References

  1. 1 2 Shumaker, Scott (11 Aug 2005). "[Sweng-gamedev] Higher Level Languages (Was: Next Gen Multiplatform Load Balancing)". Midnight Ryder Technologies: sweng-gamedev mailinglist. Archived from the original on 2007-04-12. Retrieved 2019-04-20.
  2. Shumaker, Scott (2005-08-08). "[Sweng-gamedev] Higher Level Languages (Was: Next Gen Multiplatform Load Balancing". Midnight Ryder Technologies: sweng-gamedev mailinglist. Archived from the original on 2007-07-20. Retrieved 2019-04-20.
  3. Anthony Newman (2017-10-28). Unsynced: The Last of Us Melee System (Videotape). Game Developer's Conference. 37 minutes in. Archived from the original on 2021-12-14. Retrieved 2017-11-05.
  4. "OpenGOAL".