Image
  • Writing
    • Andy Gavin: Author
    • About my Novels & Writing
    • All Writing Posts
    • The Darkening Dream
      • Buy the Book Online
      • Sample Chapters
      • Reviews
      • Info for Reviewers
      • Press Coverage
      • Awards
      • Cast of Characters
    • Untimed
      • Buy Untimed Online
      • Book Trailer
      • Sample Chapters
      • Reviews
      • Info for Reviewers
      • Press Coverage
      • Awards
      • Cast of Characters
    • Scrivener – Writer’s Word Processor
    • iPad for Writers
    • Naughty Dark Contest
  • Books
    • Book Review Index
    • Favorite Fantasy Novels
    • Andy Gavin: Author
    • The Darkening Dream
      • Buy the Book Online
      • Sample Chapters
      • Short Story: Harvard Divinity
      • Reviews
      • Info for Reviewers
      • Press Coverage
      • Awards
      • Cast of Characters
    • Untimed
      • About the Book
      • Buy Untimed Online
      • Book Trailer
      • Sample Chapters
      • Reviews
      • Info for Reviewers
      • Press Coverage
      • Awards
      • Cast of Characters
    • Naughty Dark Contest
  • Games
    • My Video Game Career
    • Post Archive by Series
    • All Games Posts Inline
    • Making Crash Bandicoot
    • Crash 15th Anniversary Memories
    • World of Warcraft Endgames
    • Getting a Job Designing Video Games
    • Getting a Job Programming Video Games
    • Naughty Dark Contest
  • Movies
    • Movie Review Index
  • Television
    • TV Review Index
    • Buffy the Vampire Slayer
    • A Game of Thrones
  • Food
    • Food Review Index
    • Foodie Club
    • Hedonists
    • LA Sushi Index
    • Chinese Food Index
    • LA Peking Duck Guide
    • Eating Italy
    • Eating France
    • Eating Spain
    • Eating Türkiye
    • Eating Dutch
    • Eating Croatia
    • Eating Vietnam
    • Eating Australia
    • Eating Israel
    • Ultimate Pizza
    • ThanksGavin
    • Margarita Mix
    • Foodie Photography
    • Burgundy Vintage Chart
  • Other
    • All Posts, Magazine Style
    • Archive of all Posts
    • Fiction
    • Technology
    • History
    • Anything Else
  • Gallery
  • Bio
  • About
    • About me
    • About my Writing
    • About my Video Games
    • Ask Me Anything
  • Contact

Archive for NTSC

Parlez vous Crash

Jan06

In the mid to late 90s, Playstation games had three SKUs: SCUS, SCEE, and SCEJ, being respectively the US NTSC version, the European PAL version, and the Japanese NTSC version.

The American version shipped in early September 1996. We finished it in early August (manufacture took a month). From my perspective — and it’s worth noting that during the Crash period I personally did most of the localization work — the European version was finished at the same time. I’d killed myself getting it ready during July. But Europe itself liked to drag matters out with a leisurely testing schedule. I wanted it done, because until it was, I couldn’t do much else.

At Naughty Dog, we pioneered the idea of simultaneous international release. By Crash 2 and Crash 3 the same exact code, conditionalized very slightly, ran all three versions. Jak & Daxter was one of the first games where the American version included the European languages. By Jak II you could switch languages on the fly in the menu anytime. We wanted one code base, one art base, one thing to debug. We wanted it for sale simultaneously world wide. I wanted one gold master.

This goal and the tools to do it began on Crash 1, and were fairly well in place by Crash 2. The international groups weren’t quite as on board and year after year dragged out the European and Japanese editions for extra testing. As best I can tell this resulted mostly from a “this is the way it’s always been done” kind of mentality. Jason and I have never been big on that type of reasoning. Still, that personal caveat aside, even from Crash 1, Sony’s international teams did an awesome job, putting in a tremendous effort to ensure the product was really polished for each territory.

The front of the original PAL edition

Anyway, each territory had its own quirks. With the European version, they stemmed from PAL, the old European video standard. PAL actually has a slightly higher resolution and better color fidelity than NTSC (the US standard). But the kicker is that it runs at 50 hertz instead of 60. For Crash this meant that the frame rate would be 25 frames per second instead of 30.

The resolution itself wasn’t much of a problem. Crash was mostly a 3D game and it wasn’t hard to adjust the projection matrix in the engine to render the game to a different resolution. But the aspect ratio of PAL pixels is also a little different and Crash did have a certain amount of bitmap graphics like the powerups and font. The PAL frame buffers were larger and the machine had the same video RAM so increasing the resolution of the sprites was rarely an option. Generally, we just had to live with a slight aspect shift or stretch them to fit. I developed notation in the original data so that different kinds of sprites could go either way in a fairly uniform manner.

The real kicker was the frame rate. One of the reasons why the animation in Crash is so so much better than most of its contemporaries is that we stored every vertex for every frame — then compressed the living crap out of it. This meant that each segment of animation was sampled from Alias PowerAnimator at 30 fps. I modified the tools to support making a second copy of every animation where the step rate was adjusted to 25fps. The pal version used these files instead of the originals. This worked about 80% of the time.  Sometimes it became necessary to notate a particular animation segment as having a strange or custom step for PAL, or even hand code certain frames. I added special constructs to my custom language (GOOL) which made this stuff as automatic as I could.

It often came in these enlarged boxes to fit all those languages!

But the physics and collision systems also needed to adjust to the different frame rate. I had done PAL conversions for Rings of Power and Way of the Warriorand having every great programmer’s hatred for tedium had developed the notion when starting Crash that I would notate all “time and space based” units not in the traditional game programmer manner of “moves X pixels per frame” but in a kind of neutral space. Hence everything in Crash was measured in meters, seconds, and the like. I built into GOOL constructs like (meters 5) or (meters-per-second 2.5). The compiler or the runtime (depended) would convert these on the fly into the appropriate pixel per frame units.

This had a number of big advantages. First of all, even without the PAL issue, it allowed the physics (and the enemies) to move in a fairly frame rate independent way. Special functions were used to deal with velocity and acceleration which took into account the current frame’s estimated real time (based usually on how long it took the previous frame to compute and render). This meant that the code which propelled Crash in a parabolic arc as he jumped would move him further per frame if the frame rate slipped to 20 or 15 (which, unfortunately, it sometimes did). This wasn’t a perfect solution, 15 fps still played worse than 30, but it helped.

And it really paid off with the PAL conversion. The hard work — and it was incredibly tedious — really only took me about five days. After running all the automatic convertors and debugging those I had to go through the entire game and check every single level, every creature, every behavior of every creature or object and make sure it stilled played and looked okay in PAL. If it didn’t I had to play with the numbers, or in the worst case add some special “if PAL do it a little differently” clauses to the GOOL code.

But this was in a world where most American games just played 16% more sluggishly in Europe and most European games 16% fast in America.

Crash played great in both — and looked great in both. The Euro version actually even looked a little better (higher resolution and better color) although the feel at 25hz was slightly inferior. But we didn’t invent the TV standard.

The final tricky bit with localization was the language(s). Crash 1 didn’t really have any voice (which was to become a huge deal in later games). But it did have some text.

This is Crash 2, which is the only picture I could find, but Crash 1 was similar, just with the C1 title page

In typical programmer fashion, I invented another system for this. All of the text was generated by literal strings in the GOOL code, and since I controlled the compiler, I added a feature where a mapping file could be created for each language specifying the English text and the equivalent phrases in each of our five languages (English, French, Spanish, German, Italian). I changed the way strings were handled to index into a table and to have five files on disk for the string buffer. This is typical now, but was very unusual then. Even on Crash 1 you could change the language on the fly. But Europe made me put the toggle only at the main menu because they didn’t want to have to test for weird bugs that came up when you switched languages in the middle of a level.

I systemized all of this stuff by having the tools and the game itself both have separate notions of: video rate (NTSC, PAL), territory (which country’s disc it actually was), and language. This separated the concept of language from territory, opening up the possibility of foreign languages in the American versions (which didn’t happen until Jak 1 for logistical and legal reasons).

As requests came in from Europe to do peculiar and territory specific things like “make the game harder because European gamers like a challenge” (after Crash 1 we refused to acknowledge this “truism”) I modified the tools to allow territory specific overrides in the files that controlled the game data. For example, CONTINUE_POINT_64_32 in the jungle level, “hide in europe.” While I’m not sure the frustrated Euro gamer appreciated it, the system did make serving the producer’s requests easier.

In any case, the Euro version of Crash was lavished with the same attention to detail with which we did everything, and Sony Europe did the same. This was one (if not the) first product for which the whole international organization was behind and where they controlled the worldwide rights. Each Sony territory really pulled out all the stops in supporting and promoting the game as “made here.” It was highly localized, not just the game itself but each little country in Europe doing its own advertising and marketing campaign. Even the Irish filmed their own ads with Irish accented actors. Traditionally game players were highly “nationalistic” with, for example, French games selling better in France. The attention paid by both us and at all levels of the Sony infrastructure to selling a worldwide product aimed specifically at each and every consumer group really paid off.

The game sold like wildfire everywhere. Although we had certain champion territories like France and Australia (Crash’s virtual birthplace) who really poured on the love.

The story continues with Crash goes to Japan!

If you liked this post, follow me at:

My novels: The Darkening Dream and Untimed
or the
video game post depot
or win Crash & Jak giveaways!

Latest hot post: War Stories: Crash Bandicoot

Yes, Crash really took to the old country.

Related posts:

  1. Crash Bandicoot – An Outsider’s Perspective (part 8)
  2. Making Crash Bandicoot – part 5
  3. Making Crash Bandicoot – part 6
  4. Making Crash Bandicoot – part 1
  5. Making Crash Bandicoot – part 3
By: agavin
Comments (51)
Posted in: Games
Tagged as: Crash Bandicoot, Europe, Games, Localization, Naughty Dog, NTSC, PAL, PAL region, pt_crash_history, SCEE, Sony Computer Entertainment, United States
Watch the Trailer or

Buy it Online!

Buy it Online!

96 of 100 tickets!

Find Andy at:

Follow Me on Pinterest

Subscribe by email:

More posts on:



Complete Archives

Categories

  • Contests (7)
  • Fiction (404)
    • Books (113)
    • Movies (77)
    • Television (123)
    • Writing (115)
      • Darkening Dream (62)
      • Untimed (37)
  • Food (1,764)
  • Games (101)
  • History (13)
  • Technology (21)
  • Uncategorized (16)

Recent Posts

  • Eating Naples – Palazzo Petrucci
  • Eating San Foca – Aura
  • Eating Otranto – ArborVitae
  • Eating Lecce – Gimmi
  • Eating Lecce – Varius
  • Eating Lecce – Duo
  • Eating Lecce – Doppiozero
  • Eating Torre Canne – Autentico
  • Eating Torre Canne – Beach
  • Eating Monopoli – Orto

Favorite Posts

  • I, Author
  • My Novels
  • The Darkening Dream
  • Sample Chapters
  • Untimed
  • Making Crash Bandicoot
  • My Gaming Career
  • Getting a job designing video games
  • Getting a job programming video games
  • Buffy the Vampire Slayer
  • A Game of Thrones
  • 27 Courses of Truffles
  • Ultimate Pizza
  • Eating Italy
  • LA Sushi
  • Foodie Club

Archives

  • May 2025 (3)
  • April 2025 (4)
  • February 2025 (5)
  • January 2025 (3)
  • December 2024 (13)
  • November 2024 (14)
  • October 2024 (14)
  • September 2024 (15)
  • August 2024 (13)
  • July 2024 (15)
  • June 2024 (14)
  • May 2024 (15)
  • April 2024 (13)
  • March 2024 (9)
  • February 2024 (7)
  • January 2024 (9)
  • December 2023 (8)
  • November 2023 (14)
  • October 2023 (13)
  • September 2023 (9)
  • August 2023 (15)
  • July 2023 (13)
  • June 2023 (14)
  • May 2023 (15)
  • April 2023 (14)
  • March 2023 (12)
  • February 2023 (11)
  • January 2023 (14)
  • December 2022 (11)
  • November 2022 (13)
  • October 2022 (14)
  • September 2022 (14)
  • August 2022 (12)
  • July 2022 (9)
  • June 2022 (6)
  • May 2022 (8)
  • April 2022 (5)
  • March 2022 (4)
  • February 2022 (2)
  • January 2022 (8)
  • December 2021 (6)
  • November 2021 (6)
  • October 2021 (8)
  • September 2021 (4)
  • August 2021 (5)
  • July 2021 (2)
  • June 2021 (3)
  • January 2021 (1)
  • December 2020 (1)
  • September 2020 (1)
  • August 2020 (1)
  • April 2020 (11)
  • March 2020 (15)
  • February 2020 (13)
  • January 2020 (14)
  • December 2019 (13)
  • November 2019 (12)
  • October 2019 (14)
  • September 2019 (14)
  • August 2019 (13)
  • July 2019 (13)
  • June 2019 (14)
  • May 2019 (13)
  • April 2019 (10)
  • March 2019 (10)
  • February 2019 (11)
  • January 2019 (13)
  • December 2018 (14)
  • November 2018 (11)
  • October 2018 (15)
  • September 2018 (15)
  • August 2018 (15)
  • July 2018 (11)
  • June 2018 (14)
  • May 2018 (13)
  • April 2018 (13)
  • March 2018 (17)
  • February 2018 (12)
  • January 2018 (15)
  • December 2017 (15)
  • November 2017 (13)
  • October 2017 (16)
  • September 2017 (16)
  • August 2017 (16)
  • July 2017 (11)
  • June 2017 (13)
  • May 2017 (6)
  • March 2017 (3)
  • February 2017 (4)
  • January 2017 (7)
  • December 2016 (14)
  • November 2016 (11)
  • October 2016 (11)
  • September 2016 (12)
  • August 2016 (15)
  • July 2016 (13)
  • June 2016 (13)
  • May 2016 (13)
  • April 2016 (12)
  • March 2016 (13)
  • February 2016 (12)
  • January 2016 (13)
  • December 2015 (14)
  • November 2015 (14)
  • October 2015 (13)
  • September 2015 (13)
  • August 2015 (18)
  • July 2015 (16)
  • June 2015 (13)
  • May 2015 (13)
  • April 2015 (14)
  • March 2015 (15)
  • February 2015 (13)
  • January 2015 (13)
  • December 2014 (14)
  • November 2014 (13)
  • October 2014 (13)
  • September 2014 (12)
  • August 2014 (15)
  • July 2014 (13)
  • June 2014 (13)
  • May 2014 (14)
  • April 2014 (14)
  • March 2014 (10)
  • February 2014 (11)
  • January 2014 (13)
  • December 2013 (14)
  • November 2013 (13)
  • October 2013 (14)
  • September 2013 (12)
  • August 2013 (14)
  • July 2013 (10)
  • June 2013 (14)
  • May 2013 (14)
  • April 2013 (14)
  • March 2013 (15)
  • February 2013 (14)
  • January 2013 (13)
  • December 2012 (14)
  • November 2012 (16)
  • October 2012 (13)
  • September 2012 (14)
  • August 2012 (16)
  • July 2012 (12)
  • June 2012 (16)
  • May 2012 (21)
  • April 2012 (18)
  • March 2012 (20)
  • February 2012 (23)
  • January 2012 (31)
  • December 2011 (35)
  • November 2011 (33)
  • October 2011 (32)
  • September 2011 (29)
  • August 2011 (35)
  • July 2011 (33)
  • June 2011 (25)
  • May 2011 (31)
  • April 2011 (30)
  • March 2011 (34)
  • February 2011 (31)
  • January 2011 (33)
  • December 2010 (33)
  • November 2010 (39)
  • October 2010 (26)
All Things Andy Gavin
Copyright © 2025 All Rights Reserved
Programmed by Andy Gavin