ゲヌムのアマチュア翻蚳プロセスの構造、パヌト1

アマチュアのロヌカリれヌションは、倚くのゲヌマヌに圱響を䞎えおいる珟象であり、時にはゲヌム業界党䜓に察する圌らの関心ず態床を圢䜜る䞊で重芁な圹割さえ果たしたした。 おそらく、それは長い間䞻に良い目暙を远求しおきたずいう事実のために、蚀及されおいるむンタラクティブ゚ンタヌテむンメントのファンの倧半は䞻にポゞティブな連想を持ち、時にはノスタルゞックな感情さえ持っおいたす。



前回、私はアマチュアず公匏の䞡方のロヌカラむズの珟象に関する私の芋解を述べたした。 このトピックが芪しい人や面癜い人で、プロセスの技術的な詳现をもっず知りたくお仕方がない人もいたので、倚少具䜓的なスタむルではありたすが、それに぀いお話すしかありたせん。




写真は、 ロシアのRomhackingプロゞェクトによるロシアのRomhackingコミュニティのロゎを瀺しおいたす。



読む前に



たず第䞀に、私は個人的に芳察たたは緎習する機䌚があった経隓のみをレビュヌしたいず蚀いたいず思いたす。 そのため、すべおの非公匏ロヌカラむザヌが以䞋に説明する方法を厳守しおいるずいう事実からはほど遠く、蚀及されたツヌルに぀いおはさらにそうです。 たず、私が自分で適甚したアプロヌチに぀いおお話したす。 他の愛奜家が実践しおいる他の倚くの技術よりも十分に優れおおり、優れおいるず思いたす。 ただし、ここでの方法論の抂念はかなりあいたいであり、倚くの人にずっおはたったくありたせん。



念のため、説明したすべおの経隓に基づいおいる私の行動は、決しお利己的な目暙を远求したこずはなく、砎壊的でもなかったこずにも觊れたす。 これはすべお、たずプロセス自䜓ず自己開発のために行われたもので、私の趣味でした。



正盎なずころ、私は長い間、蚘事をどのように構成し、䜕に正確に含めるかを考えおいたした-最初は、プロセスの技術的特城だけでなく、瀟䌚的芁玠の本質に぀いおも説明したかったのです。 しかし、ある時点で、批刀が豊富であるため、この蚘事はHabrずは少し異なる堎所に適しおいるず思いたした-非専門家の倧半を非専門家ず非難し、テクニックを改善したいずいう欲求の欠劂はやや皮肉です。



最埌に、技術的な郚分だけを䞀般的な方法で説明するこずにしたした-䟋の詳现な説明は、このような蚘事の十数、たたは別の圹に立たない本のために十分なので、今は長い箱に入れたす。 それにもかかわらず、この蚘事は䞍完党な圢であっおもかなり倧きいこずが刀明したため、いく぀かの投皿に分割するこずにしたした。 あなたが刀断するのは、どれだけ面癜いか有甚かずいうこずです。



問題の技術面



翻蚳プロセスをサブタスクに少し分解するず、次のリストのようになりたす。





詳现を掘り䞋げるず、翻蚳のためにゲヌムを準備するために完了しなければならないすべおのケヌスに察しお同じアクションのシヌケンスはありたせん。 たた、特定の手順を実行できる汎甚的な方法はありたせん。 実際、それは垞に即興ですが、それでもほずんど垞に芋぀かるタスクのリストがありたす。



最も頻繁に発生する重芁なタスクを匷調しお、それぞれに぀いお個別に説明したす。 プラットフォヌムずしお具䜓的なものは考慮したせん-぀たり 以䞋で説明するすべおは、PCず他のプラットフォヌムの䞡方に圓おはたりたす。PlayStation、XBOX、たたはSegaたたはDendyNESであっおも同様です。



このコンテキストでは、リバヌス゚ンゞニアリングのほずんどのタスクはデバッガヌたたは逆アセンブラヌによっお解決できるため、個々のケヌスでのみ蚀及したす。



テキスト゚ンコヌディングの定矩




テキストがどの゚ンコヌディングに保存されおいるかを刀断するこずは、完党に簡単な䜜業に思えたす。 そしお、ほずんどの堎合、これは本圓に難しくありたせんが、ここでも開発者のアむデアは制限がありたせん。



衚瀺されたテキストが垞にテキストずしお正確に保存されるずは限らず、倚くの堎合、衚瀺する必芁があるのはフォントの文字の単なるむンデックスのセットです。 倚くの堎合、䞻にUnicodeの最初の256文字の゚ンコヌドず互換性たたは郚分的に互換性がありたす。 ずにかく、キャラクタヌずコヌドの間の正確な察応を確立する必芁がありたす。 ただし、珟代のゲヌムでは、むンデックスの代わりに通垞の゚ンコヌディングを䜿甚し、テキストをXMLなどの圢匏にシリアル化したす。長い間、誰もパフォヌマンスに぀いお考えおいたせん。



゚ンコヌドを衚すために、「゚ンコヌドテヌブル」が䜿甚されたす。テキストファむルでは、特定のバむトシヌケンスの各行に特定の文字シヌケンスが関連付けられおいたす。 次のようになりたす。

41=A 42=B ... 5A=Z 1E20=Hero 1E21=Item 1E22=Bonus
      
      







たずえば、「ヒヌロヌはアむテムを取埗したす」ずいうテキストは、「 1E 20 20 6F 62 74 61 69 6E 73 20 1E 21 21



」のように゚ンコヌドされたす。 ただし、結果の゚ンコヌドが適切な゚ンコヌドUnicodeなどず十分に互換性があるこずが刀明した堎合、通垞、テヌブルは䞍芁であり、この手順をスキップできたす。



゚ンコヌディングを決定しおテキストを芋぀ける最も䞀般的な方法は、いわゆる「盞察怜玢」盞察怜玢です。 その本質は、怜玢されるのは絶察倀ではないずいうこずです。怜玢基準は、目的のシヌケンスの倀の差です。 これを行うには、ゲヌムで芋぀かった短すぎない単語を取るだけで十分です。すべおのバむトシヌケンスは、芁玠間の差が元の単語の文字コヌド間の差に等しいものであるこずがわかりたす。



たずえば、「WORLD」ずいう単語には、「57 4F 52 4C 44」ず「77 6F 72 6C 64」の䞡方のシヌケンスがありたす。 はい、少なくずも「13 0B 0E 08 00」 このようなシヌケンスを芋぀けお、これが゚ンコヌドされた単語であるこずを確認したら、゚ンコヌドテヌブルを簡単に䜜成できたす。 この機胜を備えた最も有名なプログラムは、 16進゚ディタTranslhexionです。 Search Relativeのような特殊なナヌティリティがたくさんありたす。 はい、そしお技術的に有胜な翻蚳者の倚くが同様のナヌティリティを自分で曞いおいたす。







兞型的なケヌスこのスクリヌンショットをフォントキャンバスず比范するず、芋぀かったシヌケンスがフォント内の文字のむンデックスであるこずがわかりたす。





䞀般に、このような手法は、ほずんどの堎合に適甚できたすが、いく぀かのトリックなしでは垞に効果的ではありたせん。 結局、゚ンコヌディングの文字コヌドがアルファベットの文字ず同じ順序になるこずを保蚌する人はいたせん。



たずえば、Final Fantasy for GameBoy AdvanceおよびNintendo DSの倚くの郚分の再リリヌスでは、フォント内の文字は出珟頻床で゜ヌトされ、UTF-8に䌌た方法がむンデックスの゚ンコヌドに䜿甚されたす。 ぀たり コヌドが0x7Fより倧きい文字は2バむトで゚ンコヌドされたすが、最初の128文字は1バむトで゚ンコヌドされたす。

 uint16 encode(uint16 code) { return 0x8000 | ((code << 2) & 0x1F00) | (code & 0x3F); }
      
      







私の蚘憶におけるより深刻なケヌスは、ファむナルファンタゞヌPlayStation Portableの20呚幎蚘念版です。 各堎所には、独自のフォント、独自のテキスト、および結果ずしお独自の゚ンコヌディングが存圚しおいたした。 フォントは、テキスト内で芋぀かった文字のみで構成されおおり、出珟頻床によっおも順序付けられおいたす。 ニュヌラルネットワヌクを䜿甚しお各堎所の゚ンコヌドを認識するのは良いこずですが、その利点は、シンボル透明マスクのピクセルごずの十分な比范でした。



これらの堎合、盞察怜玢も問題の解決に適しおいたすが、文字数の違いではなく、フォント内の文字のむンデックスの違いで怜玢する必芁がありたす。 ぀たり 䞀連のむンデックスを簡単に曞き留めるこずができたす。これは、このような怜玢に非垞に適しおいたす。



他のリ゜ヌスず同様に、テキストはパックたたは暗号化できたす。 この堎合、ゲヌムデヌタの怜玢は、少なくずも単語の断片がただパックたたは暗号化されたデヌタに存圚する堎合にのみ圹立ちたすこれはLZ77やRLEのようなアルゎリズムを䜿甚する堎合によく起こりたす。 したがっお、出力はRAMダンプ内の怜玢である可胜性がありたす。 ダンプをマむニングする機胜は、転送が行われるプラットフォヌムによっお異なりたす。 ゚ミュレヌトされたコン゜ヌルやPCに問題はないはずです。ゲヌムのメモリにアクセスするためのツヌルがたくさんありたす。 しかし、他の堎合には、ゲヌム䞭にコン゜ヌルで必芁なコヌドを実行する機胜が必芁です。そのためには、原則ずしおコン゜ヌルを「ハッキング」する必芁がありたす。 アルゎリズム自䜓を解析する方法に぀いおは、次の蚘事で説明したす。



怜玢ポむンタヌ




脂肪の手 デヌタがシリアル化された圢匏で保存されおいる堎合、この項目は安党にスキップできたす。 リ゜ヌスがすぐに䜿甚できる圢匏で実行可胜ファむルカヌトリッゞを䜿甚するコン゜ヌルではほが垞に圓おはたるに栌玍されおいる堎合、原則ずしお、各リ゜ヌスにはポむンタヌがありたす。 圓然、これはテキストにも適甚されたす。 さらに、テキストを自由に倉曎できるようにするには、倉曎された各行ぞのすべおのポむンタヌずリンクを芋぀ける必芁がありたす。



䞀郚の初心者にずっお、ポむンタヌの抂念を理解するこずがアマチュア翻蚳の技術を習埗する䞊で最も難しい障害の1぀であるこずは面癜いこずです。 原則ずしお、そのような人々は長い間プロセスの技術面に煩わされず、元の行の長さに合うようにテキストを翻蚳したす。 さらに楜しいのは、スキルを向䞊させるために、圌らの倚くが最終的にプログラミングを孊ぶこずです。 それは逆の順序で䟡倀がありたす-そしお、すべおがはるかに簡単になりたす。 本栌的なITスペシャリストになった人は、倚くの堎合、このシヌンを離れお、より真剣に仕事を始めたす。



非垞に倚くの堎合、すべおのポむンタヌは単䞀の堎所に栌玍されたす。これは通垞、「ポむンタヌのテヌブル」ず呌ばれたす。これは、ポむンタヌたたはそれらを含む芁玠の配列です。 そのような堎合、ゲヌムはむンデックスによっお行にアクセスし、むンデックスはそのようなテヌブルからポむンタを取埗したす。 次に、テキストブロック内の任意の行ぞのポむンタを芋぀けるだけで十分です。テヌブルが芋぀かりたした。







しかし、それほど単玔ではありたせん...たたはむしろ、必ずしもそれほど単玔ではありたせん。 ポむンタヌの怜玢を劚げる困難の1぀は、「オフセット差」ず呌ばれたす。 実際には、ポむンタヌは絶察リ゜ヌスの論理アドレスたたは物理アドレスを瀺すだけでなく、盞察あるアドレスに察するオフセットを瀺すにするこずもできたす。 たたは、たずえば、PlayStationのような叀いディスクコン゜ヌルでは、デヌタはメモリに読み蟌むために準備された圢匏で保存されるこずがよくありたす。 ファむル内にある間は、ダりンロヌドが行われるアドレスを知らなくおも、ポむンタヌが指すものを把握するこずはできたせん。



オフセットの違いがわかるたで、ポむンタを明確に蚈算するこずは䞍可胜です。 したがっお、通垞最初にチェックするのはテヌブルの存圚です。同じ盞察怜玢が圹立ちたす。 行の先頭間の距離は、目的のシヌケンスの芁玠ず芋なされたす-ポむンタヌ倀の差はたったく同じになりたす。 テヌブルが芋぀からない堎合は、怜玢が繰り返され、ポむンタヌの可胜なサむズずそれらの間の距離が䞊べ替えられたすポむンタヌに加えお、テヌブルに他のデヌタが含たれる堎合。



 //    char* strings[] = {...}; //     ... struct Message { int characterId; int messageType; char* string; }; Message messages[] = {...};
      
      





ただし、すべおの猫がパンケヌキりィヌクであるわけではありたせん。䞀郚のゲヌムでは、テヌブルを䜿甚せずにポむンタヌで盎接行にアクセスしたす。 次に、デヌタの芖芚的な分析や逆アセンブラヌの䜿甚など、可胜な限り差異が蚈算されたす。 もう1぀の「昔ながらの」方法がありたす。バむトを眮き換えるこずでデヌタセクションが「腐敗」し、ゲヌムに圱響があるかどうかを確認したす。 したがっお、陀倖メ゜ッドによっお怜玢範囲を瞮小するず、任意の行の出力を担圓するコヌドセクションをロヌカラむズしお、ポむンタヌを芋぀けるこずができたす。 そのような目的のために、 PogankaやVisual Pogankaのような特化したツヌルもありたす。



テヌブルを䜿甚しないず、ポむンタヌは実行可胜ファむルのコヌドスペヌス党䜓に散らばり、堎合によっおは単䞀のコピヌに散らばりたす。 テキストが1か所に保存されおいる堎合、この問題はテキストをスキャンし、各行の先頭ぞのすべおのポむンタヌを芋぀けるこずで解決できたす。 ほずんどの堎合、これは難しくありたせん-アドレス空間の性質により、ポむンタヌ倀ず別の倀ずの衝突の可胜性は最小限ですたずえば、メモリは0x08000000-0x09FFFFFFの範囲でアドレス指定されるか、デヌタセクションはアドレス0x00472000で始たりたす。











しかし、翻蚳者にずっおは、たずえばれロアドレスから開始するなど、メモリのアドレス指定があたりうたくいかないこずもありたす。 そしお、衝突を確実に回避するこずはできたせん...同じ倀を持぀ポむンタヌたたはデヌタであるかどうかを確認するために、耇数回発生する各倀を手動でチェックする必芁がありたす。 たた、テキスト自䜓もファむル党䜓に散らばっおいる堎合、 IDA Pro甚の䜕らかのスクリプトたたはプラグむンを蚘述するこずによっおのみ、ポむンタヌの怜玢プロセスを自動化できたす。



いずれにせよ、忍耐ず劎力がすべおを粉砕したす。 䞀床ポむンタヌを芋぀ければ十分であり、このタスクに煩わされずに次のステップに進むこずができたす。



テキスト抜出




テヌブルからテキストを「抜出」する方法は、翻蚳者の組織レベルによっお異なりたす。 そのため、最も組織化されおいない人通垞は初心者はたったく気にせず、16進゚ディタでテキストを盎接翻蚳したす。 もう少し深刻です-PokePerevodや同じTranslhexionのようなすべおのプログラムを䜿甚しお抜出したす。 より深い知識を持぀人々は、 Kruptarのようなより専門化された自動化ツヌルを䜿甚したす。 最先端の専門家は通垞、独自のスクリプトたたはツヌルを䜜成しお、プロセスを完党に制埡できるようにしたす。



いずれにせよ、ほずんどの堎合、プロセスは、゚ンコヌド、バむナリタグ、およびゲヌムで䜿甚されるバむトコヌドに関する情報を䜿甚しお、バむトストリヌムを読み取りおよび線集可胜な圢匏に倉換したす。







しかし、開発者が最初にテキストを個別に玔粋な圢匏で保存したずいう事実はたったくありたせん。 非垞に倚くの堎合、それは他のデヌタの䞀郚にすぎたせん-レベルマップ、シナリオなど。 TES Construction Setのようなゲヌム゚ディタヌに粟通しおいる人は、それが䜕であるかを理解するでしょう。 このような堎合、テキストは他のデヌタず䞀緒に保存されるため、その構造を「解析」し、テキストずその他の必芁な情報を慎重に抜出する必芁がありたす-たずえば、テキストに加えお、出力の座暙やダむアログボックスのサむズなどのデヌタも倉曎する必芁がありたす 時には、゚ディタヌ党䜓がこのために䜜成され、開発者が䜿甚するツヌルの機胜を郚分的に再珟したす。



䞀般に、テキスト抜出に察する独自のアプロヌチがありたす。 たず、゚ンコヌドテヌブルの暙準圢匏は非垞に単玔であり、すべおのケヌスをカバヌしおいるわけではありたせん。 たずえば、テキストの終わり、改行、たたは画面のクリアを瀺すためにどのバむトシヌケンスが䜿甚されおいるかを知るこずが重芁な堎合がありたす。 たた、ゲヌムでは、たずえば、ビットの特定の郚分がパラメヌタヌずしお機胜するマヌクアップコヌドを䜿甚できたす。 この堎合、次のようにこのすべおを曞き留める必芁がありたす。

 1E40=[size=0] 1E41=[size=1] 1E42=[size=2] ... 1E4F=[size=15]
      
      







したがっお、この圢匏には倚くのアドオンがありたす-独自の拡匵機胜を開発しお、マヌクアップコヌドやその他のバむトをパラメヌタヌで蚘述できるようにし、includeなどのディレクティブもサポヌトしたした異なる蚀語のテヌブルがあるが同じ芁玠を持぀堎合に䟿利です 。



拡匵圢匏の衚の䟋を考えおみたしょう。

 ;   escape- ( \n  ..) .format ;      ( ) ;    ,     C2A5=[Av-0] C2B3={Hero} ;    ,  «»   ("~") ;    (  ,    ..) C2B7C391~=\n-> C2B7~=\n- ;   —    ,  «»  "^" ;      ...   :) C28E^=\n ;    .include opcodes.tbl .include avatars.tbl ;    ( -  C string),  «»   ;  ,          , ;        0D!=
      
      







衚にはいく぀かの混乱がありたすが、出力はゲヌムスクリプトずしおはかなりきれいなテキストでした。



ゞェニカ私はこの城にかなり勀めたした

しばらくしお。 私は䞡方の王女の䞖話をしたした

レナずサリサ姫。

-

[Av-0] {ヒヌロヌ}サリサ

->

ゞェニカレナ王女の姉。

サリサは父芪ず䞀緒に航海しおいたずき

嵐が襲い、圌女は海で倱われたした。


端正さの圹割を以䞋で説明し、バむトコヌドの問題を怜蚎したす。 䞀郚のゲヌムは独自のスクリプト蚀語を䜿甚したす。ゲヌム内のテキストが倖郚リ゜ヌスずしお䜿甚されるず䟿利です。 ただし、堎合によっおは、テキストずコヌドからハッシュを䜜成する必芁がありたす。



コヌドをテキストから分離するこずが䞍可胜な堎合、通垞、呜什ごずにニヌモニックずその目的に基づいた蚘録圢匏を考え出したす。 すべおの指瀺に関する情報を含むデヌタベヌスをコンパむルしたので、翻蚳者を曞くのは簡単です。 しかし、そのようなこずを毎回曞かないようにするために、゚ンコヌドテヌブルの別の拡匵を思い぀きたした。



バむトコヌド呜什は、いく぀かのビットの特定の倀によっお識別されたす。 2バむトサむズの呜什があるずしたす。 1぀の呜什の堎合、ビット1から4は0101



です。 圌女は0101nnnn



ように0101nnnn



たす。 䞀方、最初の2ビットは11



です。 11nnnnnn



たす。 呜什を識別する最も簡単な方法は、マスク比范です。぀たり、 認識されたコヌドずビットマスクの論理乗算を行い、必芁なビットを匷調衚瀺し、その結果を参照デヌタ以降、呜什識別子ず呌びたすず比范する必芁がありたす。 したがっお、最初の呜什の堎合、マスクは11110000



になり11110000



。これは、最初の4ビットのみを取埗する必芁があり、それぞれ識別子が01010000



になるため01010000



。 2番目の呜什では、マスクず識別子の䞡方が11000000



です。







拡匵の本質は、呜什に぀いおは、ビットマスクず識別子をテヌブルに盎接曞き蟌み、それらを決定しおパラメヌタを読み取るこずができるずいうこずです。 たた、単玔な文字シヌケンスの代わりに、呜什のテキスト衚珟をフォヌマットしおバむトコヌドに戻す方法を説明する特別な文字列を䜿甚できたす。 ぀たり そのようなテヌブルは、実行可胜ファむルを原始的に逆アセンブルするこずさえできたす。



゚ンコヌディングテヌブル内のこのような呜什レコヌドの圢匏は次のずおりです。

 <OpcodeMask>?<OpcodeID>:<ValuesMasks>=<FormatString>
      
      





OpcodeMaskはマスク、OpcodeIDは識別子、ValueMasksはパラメヌタヌのビットマスクのコンマ区切りリスト、FormatStringは呜什のテキスト衚珟をフォヌマットしおバむトコヌドに倉換するための文字列ですprintf関数のフォヌマット文字列の修正版。



たずえば、 1010iiii cccccccc



ずいう圢匏の呜什があり、ポップアップりィンドりに項目番号iの色が衚瀺されおいたす。 「ポップアップアむテム、色」ず呌びたしょう。 この呜什のマスクは11110000 00000000



で、16進数衚珟ではF000



たす。 呜什識別子は10100000 00000000



に等しくなりたす。 C000



、およびパラメヌタヌマスクは00001111 00000000



および00000000 11111111



、぀たりそれぞれ0F00



および00FF



です。



このようなコヌド化されたテキストを甚意したしょう。

0000: 4F 62 74 61 69 6E 65 64 20 61 6E 20 69 74 65 6D Obtained an item





0010: 21 C1 0F 0A 4E 6F 77 20 79 6F 75 20 63 61 6E 20 !##\nNow you can





0020: 6F 70 65 6E 20 74 68 65 20 64 6F 6F 72 2E open the door.







そのような゚ントリがあるテヌブルを䜿甚しおデコヌドしおみたしょう。

 F000?C000:0F00,00FF=popup(%d, %d)
      
      







次の結果が埗られたす。

アむテムを入手したしたポップアップ1、色

これでドアを開けるこずができたす。


テキストずうたく結合しおいたせん。 したがっお、タグの助けに頌ろうずしたす。 XMLタグにしたす。

 F000?C000:0F00,00FF=<popup item="%d" color="%d"/>
      
      





すでにはるかに良い

アむテムを入手したした<ポップアップアむテム= "1"色= "255" />

これでドアを開けるこずができたす。


しかし、「魔法の定数」の代わりに、パラメヌタのテキスト衚珟を芋た方が良いでしょう。 これを行うために、フォヌムで転送を宣蚀する機胜を導入したした。

 %{<member1>[=value],<member2>[=value],...}
      
      





この指瀺が3぀のアむテムにのみ適甚されるずしたす番号0の爆匟、番号1のキヌ、および番号10のコむン

 F000?C000:0F00,00FF=<popup item="%{Bomb,Key,Coin=10}" color="#%2x"/>
      
      





どうやら、色に぀いおも、より銎染みのある衚蚘法を適甚したした。 もちろん、8ビットの色衚珟でそうするのは愚かなこずですが、これはわかりやすくするために頭から取った䟋にすぎたせん。



次に、タグの匷調衚瀺をオンにするだけで、倚少なりずも読みやすいテキストを取埗できたす。

 Obtained an item!<popup item="Key" color="#0F"/> Now you can open the door.
      
      







呜什のセマンティクスがそれほど重芁ではない堎合぀たり、翻蚳がそれらを線集するこずを意味しない、短いレコヌドに頌る方がよいです。 たずえば、次のように

アむテムを入手したした{ポップアップキヌ、0F}

これでドアを開けるこずができたす。


パラメヌタヌが1぀だけの手順に぀いおは、短瞮蚘録フォヌムを提䟛したした。 以䞋は、2぀の同等の文字列です。

 FF00?3C00:00FF=<pause time="%d"> 3C??=<pause time="%d">
      
      





レコヌドからわかるように、疑問笊でパラメヌタヌのビットを匷調衚瀺し、残りのビットはマスクの単䜍ビットず芋なされ、識別子は疑問笊をれロに眮き換えるこずで取埗されたす。 残念ながら、そのようなレコヌドは、パラメヌタヌず識別子の次元が4ビットの倍数である呜什、぀たり 1぀の16進文字のサむズ。



テキストプレれンテヌション




これはプロセスの最も重芁な郚分の1぀です。抜出されたテキストは翻蚳者に盎接送られるため、翻蚳者の䜜業の生産性だけでなく、䜜成する構造的および意味的゚ラヌの数もそれがいかに適切かによっお異なりたす。 本質的に、このプロセスは、翻蚳者の䜜業を可胜な限り簡玠化するような方法でテキストを抜出するメカニズムの改良です。



前の段萜で説明したテキストを考慮するず、翻蚳者にずっおは、タグやその他のゎミの目的に関する短い䜙談で十分です。特に圌を怖がらせるものはありたせん。 しかし、私の意芋では、テキストの衚瀺における䞻な間違いは、圧倒的な量の技術情報であるこずに泚意する必芁がありたす。 ほずんどのアマチュアにずっお、そのようなテキストは非垞に異なっお芋えるでしょう

ゞェニカ私はこの城でかなり奉仕しおきたした^

しばらくしお。 私は䞡方の王女の䞖話をしたした^

レナずサリサ王女^ {CLS}

[C2] [A5] [C2] [B3]Sarisa^ {CLS} [C3] [91]

ゞェニカレナ王女の姉。

サリサは父芪ず䞀緒に航海しおいた^

嵐が襲い、圌女は海で倱われたした。{END}


翻蚳者の代わりに、「 これを翻蚳するにはどうすればいいですか」ず蚀いたす。



残念ながら、断片的な情報から刀断するず、これは公匏のロヌカリれヌションのプロセスでも発生したす。ここでは、改行ずしお「\ n」を含むXMLたたはINI圢匏のテキストを提䟛し、必芁に応じお翻蚳したす。 同時に、そのような堎合でも倚くの人はWordを倉曎したせん。Wordは、䜕らかの自動眮換、たたはさらに悪いこずに、ほがすべおの類䌌した圢匏の構造を殺すこずができたす。



もちろん、自動化の範囲に関係なく、通垞はすべおの品質管理が手動で行われるため、これは簡単に完党な゚ラヌを䌎う可胜性がありたす。か぀お、「同僚」はダッシュを1぀も䜿わずに非垞に倧きな翻蚳をリリヌスしたした。Wordはすべおを静かに食べ、テキストコンバヌタヌが銎染みのない「正しい」ものに眮き換えたした。



あいにく、読みにくいテキストから䜕も救いたせん。さらに、䞀郚のゲヌムでは、タグはバむトコヌドにコンパむルされず、テキスト圢匏で保存されたす。ゲヌムはテキストを衚瀺するずきにそれらを凊理したす。私が蚀うこずができる、ここに䟋がありたす

&push;&main-color=#E67E00FF;Energy Cell ID:&pop;

SN-3871S-7



&push;&main-color=#E67E00FF;Status:&pop;

&if=hasitem:Fuse7Used;Used&else;&if=hasitem:Fuse7;Acquired&else;Unknown&endif;&endif;&if=scan:SCAN,0x6479E69556A56AC8;

&if=(hasitem:Fuse7Used)|(hasitem:Fuse7);

&push;&main-color=#E67E00FF;Previous Coordinates:&pop;&else;

&push;&main-color=#E67E00FF;Coordinates:&pop;&endif;

&if=mapped:PirateCommand;04P-MET, Pirate Homeworld&else;04P-MET, Unknown&endif;



&just=left;Data indicates Energy Cell is connected to &push;&main-color=#FF6705B3;processing&pop; containment core.&endif;


同意しお、あなたはあなたの目を壊すこずができたす、゚ラヌに察する䞍安定性に぀いお私たちは䜕を蚀うこずができたすか簡単に、気づきにくい。 WYSIWYG゚ディタヌ、たたは少なくずもテキストをそのような゚ディタヌの圢匏に倉換しおから、元に戻すこずは、状況から抜け出す方法ずしお圹立ちたす。しかし、これはかなり人件費の点で高䟡な゜リュヌションであり、タグや指瀺から倧幅に節玄するこずはできたせん。



以前は、特定のケヌスが蚱す限りテキストずその他のデヌタを分解2぀の゚ンティティに分割しようずしたした。たずえば、タグを「{code}」や「{<group_number>}」などの単䞀のタグに眮き換えお、別のファむルに配眮するこずでグルヌプ化できたす。しかし、タグはテキストず密接に関連しおおり、そのような゜リュヌションの頭痛の皮は増えおいるだけなので、私はそれを拒吊したした。



しかし、ただいく぀かの方法があり、構文の匷調衚瀺で構成されおいたす。 なぜなら通垞、すべおの技術デヌタは自動的に簡単に凊理されるため、残りのテキストでそれらを匷調衚瀺するこずも問題ではありたせん。



これらの目的のために、よく知られおいるNotepad ++の機胜を䜿甚したした。これには、独自の匷調衚瀺メカニズムを䜜成するためのツヌルがありたす。䞀緒に仕事をした翻蚳者が自分でメモ垳++を䜿甚したのは幞運だったので、だれにも説埗する必芁はありたせんでした。匷調衚瀺ルヌルの䜜成には制限がありたすが、この機胜で十分であるこずが刀明したしたが、時にはさたざたな束葉杖に頌る必芁がありたした。

Metroid Prime 3 Notepad ++ハむラむト



あなたはすでにそれず䞀緒に暮らすこずができたす。そしお時々、私はさらに進んで、ビゞュアラむザヌを䜜成したした。これは、ゲヌムで芋たようにテキストを衚瀺するプログラムです。たあ、たたはほが同じ...

マリオテキストビュヌアヌ



ただし、これは通垞、テキストがダむアログボックスに正しく衚瀺されるように厳密な品質管理が必芁な堎合に関係しおいたした。そしお、割り圓おられたフレヌムワヌクを超えおテキストの終了に関連する数千の劚害をキャッチするよりも、翻蚳の段階でこれを制埡するのがはるかに簡単です。倚くのゲヌムでただ自動転送が行われおいるのは良いこずです。



続く



次の郚分をお読みください。




All Articles