Latest revision |
Your text |
Line 1: |
Line 1: |
− | {{TOCRIGHT}}
| |
− | {{finished}}
| |
| == Introduction == | | == Introduction == |
| | | |
− | Blood Omnicide support translation packs in the form of separate [[PK3 | PK3 files]]. This article will explain how to edit them, creating your own localization pack. | + | Blood Omnicide support translation packs in the form of separate [[PK3 | PK3 files]]. |
| + | |
| + | This article will explain how to edit them, creating your own localization pack. |
| | | |
| Translation packs follows this rules: | | Translation packs follows this rules: |
Line 15: |
Line 15: |
| == Names == | | == Names == |
| | | |
− | Standart naming for locale file is '''L-localename0.PK3''', where localename is the language identificator. | + | Standart naming for locale file is '''L-localename0.PK3''', where localename is language identificator. |
| | | |
| Example: localname is "espanol" and pack name will be '''L-espanol0.PK3'''. | | Example: localname is "espanol" and pack name will be '''L-espanol0.PK3'''. |
Line 34: |
Line 34: |
| ** '''locales''' | | ** '''locales''' |
| *** ''localename.nsx'' - heading locale script | | *** ''localename.nsx'' - heading locale script |
− | *** ''localename.tga'' - а picture to be shown in the locale selection menu | + | *** ''localename.tga'' - а picture to show in the locale selection menu |
| *** '''locale/''' - general locales folder | | *** '''locale/''' - general locales folder |
| **** '''localename/''' - base locale folder | | **** '''localename/''' - base locale folder |
Line 44: |
Line 44: |
| ***** ''characters.nsx'' - [[NSX (Translation string files) | translation strings]] for character names | | ***** ''characters.nsx'' - [[NSX (Translation string files) | translation strings]] for character names |
| ***** ''credits.nsx'' - translation strings for credits | | ***** ''credits.nsx'' - translation strings for credits |
− | ***** ''gameover.nsx'' - translation strings for demo screen | + | ***** ''gameover.nsx'' - translation strings for game over screen |
− | ***** ''demo.nsx'' - translation strings for game over screen
| + | |
− | ***** ''launcher.nsx'' - translation strings for game launcher. Should be ASCII (Ansi English) encoded, because currently launcher does not support UTF-8.
| + | |
− | ***** ''launcher.utf8'' - a utf8-version of language translation. It is better to make utf8 first, then convert to ANSI.
| + | |
− | ***** ''installer.nsx'' - translation strings for game installer. Should be ANSI encoded, because currently installer does not support UTF-8.
| + | |
− | ***** ''installer.utf8'' - a utf8-version of installer translation. It is better to make utf8 first, then convert to ANSI.
| + | |
| ***** ''gamestats.nsx'' - translation strings for game stats | | ***** ''gamestats.nsx'' - translation strings for game stats |
| ***** ''mapnames.nsx'' - translation strings for map names (keys are filenames under kain/maps, values are names) | | ***** ''mapnames.nsx'' - translation strings for map names (keys are filenames under kain/maps, values are names) |
Line 62: |
Line 57: |
| | | |
| # Download sample pack; | | # Download sample pack; |
− | # Unpack it so that you have access to all files | + | # Unpack it so you will have access to all files |
| # Rename it to your language | | # Rename it to your language |
| # Find .TTF/.OTF fonts that matches your language and place them to the pack (replace default fonts); | | # Find .TTF/.OTF fonts that matches your language and place them to the pack (replace default fonts); |
− | # Translate all the strings files (.nsx); | + | # Translate all strings files (.nsx); |
| # Translate cinematics subtitles (.dpsubs) | | # Translate cinematics subtitles (.dpsubs) |
| # Translate ui.ns2; | | # Translate ui.ns2; |
Line 75: |
Line 70: |
| # Make a [[PK3]] file; | | # Make a [[PK3]] file; |
| | | |
− | == Translating speech == | + | == Speech interactive tags == |
| + | There is two modes for speech subtitles - classic and interactive. Classic mode shows subtitles at the bottom of the screen, interactive subtitles are drawn ontop of NPC they are spoken by. |
| | | |
− | === How speech scripts works ===
| + | Interactive mode is a bit different in representation, so there is special tags to let speech to be shown best way in classic and interactive mode: |
| | | |
− | Speeches are activated by a game scripts which calls a ''character'':''group'':''key'' name to be played. Characters are defined in <locale>/strings/characters.nsx file (also can be defined in any other .nsx file under <locale>/strings/ in the [character] group). Groups are speech groups, defined inside NSX files in the ''[speech_<groupname>]'' style. There are separate groups for kain monologues, scene speech, gossip etc. Keys are key name inside speech groups, a value given to that key sets a text for speech.
| + | * {text} - will be only shown in classic mode |
| + | * [text] - will be only shown in interactive mode |
| + | * <number> - time marker for interactive subtitles parts. "some<2>speech" will make subtiles to be rendered as two parts, with second part to be shown 2 seconds since speech was started. |
| | | |
− | Character+Grops+Keys form a unique speech, which has a text (a value of key) and matching sound file. The sound file path is expected to be: <basepath>/key.ogg or / <speechbase>/key.wav. The ''basepath'' is a basepath for speech files which are set per-character in the [speech] group (defined in very top of speech.nsx). For example, basepath for speech of kain character is 'speech/kain/'.
| + | == Testing speech in game == |
| + | {{cmd|cl_cmd playspeech <type> <character> <number>| [[console]] command helps to test any speech available at current map.}} |
| | | |
− | Example:
| + | Types are: |
− | | + | *speech - standart speech |
− | [speech]
| + | *whisp - voice 'in head of kain' (like mortanius comments), always player in classic mode |
− | kain=speech/kain/
| + | |
− | | + | |
− | [speech_kain]
| + | |
− | aver1=The gate of Avernus opened slowly before me, daring me to cross the threshold.<5.5>Who was I to reject such an invitation?<9>
| + | |
− | aver2=Avernus consumed itself before my eyes. There seemed no easy path to gain entry to the hell laid out before me.<8.5>Perhaps there was a way inside from above the chaos that reigned there.<13>
| + | |
− | | + | |
− | This file defines two speeches:
| + | |
− | * kain:kain:aver1 - points to speech/kain/aver1
| + | |
− | * kain:kain:aver2 - points to speech/kain/aver2
| + | |
− | | + | |
− | === The speech text ===
| + | |
− | Speech text are subtitles text, which also should have ''timing marks'' to break speech in several parts to be played in sequence. It is important to break speech text into a parts as blood omen have some very large speech files, more than 50 seconds, which will take a half-screen for a text if shown all at once.
| + | |
− | | + | |
− | The timing mark are set as **<seconds>** tag, where ''seconds'' is a time, when text after timing mark will be displayed. The last <seconds> tag sets a length of whole speech, so if speech sound file get missing, speech are displayed anyway.
| + | |
− | | + | |
− | Example:
| + | |
− | | + | |
− | aver1=The gate of Avernus opened slowly before me, daring me to cross the threshold.<5.5>Who was I to reject such an invitation?<9>
| + | |
− | | + | |
− | This breaks aver1 speech into 2 parts:
| + | |
− | * ''The gate of Avernus opened slowly before me, daring me to cross the threshold.'' | + | |
− | * ''Who was I to reject such an invitation?'' (starts at 5.5 seconds).
| + | |
− | The whole length of speech is 9 seconds.
| + | |
− | | + | |
− | === Different game versions ===
| + | |
− | | + | |
− | There are some special groups which are used to override the speech files based on current game version.
| + | |
− | | + | |
− | The [!PlayStation!] group sets the speech keys to override default speech, in playstation version of the game. It is proven that PlayStation version have some speech shortened and [!PlayStation!] groups lets it have adequate subtitles. The syntax of speech keys in [!PlayStation!] group is ''group_key=speech text''.
| + | |
− | | + | |
− | === Testing speech in game ===
| + | |
− | | + | |
− | ==== Re-load locale ====
| + | |
− | {{cmd|menu_restart| [[console]] command to restart menu system and re-load the current locale.}}
| + | |
− | | + | |
− | When editing locale strings on-the-fly, use this command to force reload strings in order for changes to take effect.
| + | |
− | | + | |
− | ==== Play particular speech ====
| + | |
− | {{cmd|speech <action> <character> <group> <key> [wait_after_played] [delay_before_played] | [[console]] command helps to test any speech}}
| + | |
− | | + | |
− | Actions are:
| + | |
− | *say - standart speech
| + | |
− | *notice- heard 'in the player's head', used for someone's comments etc. | + | |
− | *overhead - npc talk (yellow text)
| + | |
− | | + | |
− | Examples:
| + | |
− | speech say kain armor_desc 0
| + | |
− | speech say kain kain aver1
| + | |
− | speech say rogue gossip coor3
| + | |
− | | + | |
− | {important|when editing speech.nsx on the fly, call the menu_restart command in the game for tha changes to take effect}}
| + | |
− | | + | |
− | ==== Testing a whole locale ====
| + | |
− | {{cmd|testlocale <localename> [vs localename] | [[console]] command helps to test whole locale for missing or extra strings.}}
| + | |
− | | + | |
− | ''localename'' is the name of the locale to be tested. 'vs localename' additional arg can be supplied to test agains non-default locale (like testign ru-ru vs fr-fr). | + | |
− | | + | |
− | Examples:
| + | |
− | testlocale fr-fr
| + | |
− | textlocale fr-fr vs ru-ru
| + | |
− | | + | |
− | Example of command output:
| + | |
− | string missing: '[speech_guardian] dej2' (locale/default/strings/speech.nsx:435)
| + | |
− | extra string: '[!PlayStation!] [speech_guardian_bane3]' (locale/ru-ru/strings/speech.nsx:561) - not defined in 'default' locale
| + | |
| | | |
| == Sample locale packs == | | == Sample locale packs == |
| Here is the list of reference locale packs that you can use as a base: | | Here is the list of reference locale packs that you can use as a base: |
| | | |
− | ''' Blood Omnicide v0.1 NEW SPEECH LAYOUT ''' | + | ''' Blood Omnicide v0.1 ''' |
− | | + | |
− | :Base locale pack (includes all files and texture sources): [http://omnicide.razorwind.ru/files/omnicide/0.1/locales/defaultLocale.zip download]
| + | |
| | | |
− | :Sample russian locale: [http://omnicide.razorwind.ru/files/omnicide/0.1/locales/sampleLocaleRu.zip download] | + | :English: [http://omnicide.legacy-of-kain.ru/files/omnicide/0.1/locales/L-default0.PK3 download] |
| | | |
| ''' Blood Omnicide Demo ''' (Using old translation layout) | | ''' Blood Omnicide Demo ''' (Using old translation layout) |