Sign in to follow this  
DF Oliver

Programming Interlude 2: Localization

Recommended Posts

Hi coding friends.

This week I spent a bunch of time working on localization and I want to share the results with you guys! We already had infrastructure in place to show the sub-titles in the correct language, but since some of our scenes contain text painted into the artwork we needed a system to replace these assets as well. The system uses pack-file overlays to basically reroute a file look-up to a different location. So for example when the game tries to load the file "Art/Sign.texture" it will actually read data from "German/Art/Sign.texture".

But enough with the words let's look at some pictures instead. The first image shows the game in the original English version. After switching to German the same room looks a bit different. Personally I think I totally nailed the translation! :-)

programming10_original.PNG

programming10_localized.PNG

Let me know if you have questions.

Oliver.

Share this post


Link to post
Share on other sites

Keep making animal icons after every German translation, and I might just play the game in German instead of English all together. :D

Share this post


Link to post
Share on other sites

Looks good. Someone send Tim a memo. We're all done here.

Share this post


Link to post
Share on other sites

HA!

I'm sure it would annoy German gamers, but if this were final I would definitely play the game in German. xD

Share this post


Link to post
Share on other sites

Now THAT'S a post I expect from a video game company... Good on ya, mate! Hope there's more to come from you in the near future!!!

Share this post


Link to post
Share on other sites

That's very interesting, I never knew "airlock" in English translated to a picture of a cat in German. Foreign languages sure are weird!

It's not related to localization, but I was hoping I could get more clarification on the difference between engine stuff (C++) and scripting stuff (Lua). You mentioned that the entire class/component structure was built in Lua, I believe, but other than that it's a little foggy figuring out what goes in the engine and what goes in the script. Any help at all would be much appreciated!

Share this post


Link to post
Share on other sites

Achtung cat sees you and shakes it's head disapprovingly as you ignore it.

Share this post


Link to post
Share on other sites

Thanks for the update, Oliver. I think you nailed the translation, but had no idea cat-face was a character in the German alphabet. Well, I guess you learn something new everyday :)

Is there any chance you guys could work on the l10n part of the game thinking forward towards the chance of the game being translated to Right-To-Left languages? I personally know that it's not a small feat, but if the game is programmed as such in advance, we might have a better chance of ever seeing the game translated to Hebrew, Arabic, etc...

Share this post


Link to post
Share on other sites
Thanks for the update, Oliver. I think you nailed the translation, but had no idea cat-face was a character in the German alphabet. Well, I guess you learn something new everyday :)

There was a spelling reform in the 90s.

Share this post


Link to post
Share on other sites

Even with the cat, German looks so much more serious than English. When a sign says Achtung! I feel like I'm half in trouble already.

It's always a pleasure to see your updates, Oliver. Count me in as also wanting to see a more detailed rundown of the game engine and wiring.

Share this post


Link to post
Share on other sites

@DF Oliver Cool stuff. Quick question about your art pipeline, generally speaking before the texture packs are generated how are these assets identified as having been localized? This is to say, when an artist creates a texture that has embedded language is it tagged with metadata? Placed in a special directory? Subjected to filename conventions? What?

EDIT:

Also does this mean that the texture artists have to know German or are they painting translated text in a language that they don't know? If they are painting in another language are the textures then checked to make sure a critical umlaut wasn't missed that would cause Double Fine to declare war on doughnuts or something?

Share this post


Link to post
Share on other sites
@DF Oliver Cool stuff. Quick question about your art pipeline, generally speaking before the texture packs are generated how are these assets identified as having been localized? This is to say, when an artist creates a texture that has embedded language is it tagged with metadata? Placed in a special directory? Subjected to filename conventions? What?

Special directory it seems:

The system uses pack-file overlays to basically reroute a file look-up to a different location. So for example when the game tries to load the file "Art/Sign.texture" it will actually read data from "German/Art/Sign.texture".

Share this post


Link to post
Share on other sites
The system uses pack-file overlays to basically reroute a file look-up to a different location. So for example when the game tries to load the file "Art/Sign.texture" it will actually read data from "German/Art/Sign.texture".

@flesk The above quote deals with how the game works after all of the game data has been prepared, combined, and transformed into a form the game engine can use. I was asking more about how those assets are managed before all those files are munged together.

Share this post


Link to post
Share on other sites

First off, I just LOVE that yarn-art looking door image. So happy.

Secondly it's pretty cool that the engine lets you swap out individual assets like that. You could throw in cultural easter eggs for specific regions pretty easily that way.

Share this post


Link to post
Share on other sites

The cursor intrigues me. I wonder when there's going to be a post about the cursor art and style; it's such an important part of an adventure game.

Share this post


Link to post
Share on other sites
Even with the cat, German looks so much more serious than English. When a sign says Achtung! I feel like I'm half in trouble already.

Clearly the cat is German, all the other images have smiley faces, but the cat looks serious and disproving.

Share this post


Link to post
Share on other sites
The crosshair is definitely a throwback to Scumm games.

Either that or it's a placeholder for the final UI.

Share this post


Link to post
Share on other sites

@Oliver

Buhh for such a big spoiler image without any warnings.

If airlocks would look like this there wouldn't be any children on spaceships anymore. They all would be floating through space, although i guess like in most adventure games doors can't be opened this easily without solving a puzzle. Come one, say yes. :o)

One question, do you combine the layers upfront in the texture platform gen process, are you using a multi-texture shader or adding some triangles?

Share this post


Link to post
Share on other sites
The crosshair is definitely a throwback to Scumm games.

Either that or it's a placeholder for the final UI.

My money's on throwback.

Share this post


Link to post
Share on other sites

The cursor's animations in the small bits of gameplay we've seen look pretty complete, I agree with throwback

Share this post


Link to post
Share on other sites

Big red placeholder text like that probably isn't a bad idea, thinking about it. There's no way that would slip past the German playtesters.

Share this post


Link to post
Share on other sites

It's not related to localization, but I was hoping I could get more clarification on the difference between engine stuff (C++) and scripting stuff (Lua). You mentioned that the entire class/component structure was built in Lua, I believe, but other than that it's a little foggy figuring out what goes in the engine and what goes in the script. Any help at all would be much appreciated!

There are no rules really, but roughly speaking game-play and related systems are implemented in Lua and the rest is C++. We do break out of this 'rule' occasionally when some of the game-play code turns out to be too slow in Lua.

Share this post


Link to post
Share on other sites
Sign in to follow this