2013年4月1日月曜日

へ スカイリム

英語版exeの「へ スカイリム」、簡単に直せそう。
CPU Disasm
Address   Hex dump          Command                                  Comments
0085FE4E  |.  50            PUSH EAX                                 ; /<%s> => [Arg2]
0085FE4F  |.  51            PUSH ECX                                 ; |<%s> => [1B17FF4] = "へ"
0085FE50  |.  68 AC4C0801   PUSH OFFSET 01084CAC                     ; |Format = "%s %s"
0085FE55  |.  8D5424 18     LEA EDX,[ESP+18]                         ; |
0085FE59  |.  68 04010000   PUSH 104                                 ; |Arg2 = 104
0085FE5E  |.  52            PUSH EDX                                 ; |Arg1 => OFFSET LOCAL.64
0085FE5F  |.  E8 3C04BCFF   CALL 004202A0                            ; \TESV.004202A0
PUSH EAXとPUSH ECXの順番を入れ替えるだけの簡単な作業です。

ためしに修正パッチつくってみようと思うんだけど、
→ 作りました http://skup.dip.jp/up/up04444.7z
へ スカイリムの他に、日本語特有の問題ってあったかなぁ。
セーブファイル名の日本語が空白になるのしか思いつかない。


セーブデータの文字化け対策は、このあたりからコードを辿ればいけそうな気がする
CPU Disasm
Address   Hex dump          Command                                  Comments
00680E10  /$  81EC 08020000 SUB ESP,208                              ; TESV.00680E10(guessed Arg1,Arg2,Arg3)
00680E16  |.  53            PUSH EBX
00680E17  |.  56            PUSH ESI
00680E18  |.  8BF1          MOV ESI,ECX
00680E1A  |.  8B0D E4E8B201 MOV ECX,DWORD PTR DS:[1B2E8E4]
00680E20  |.  57            PUSH EDI
00680E21  |.  E8 DA3CE5FF   CALL 004D4B00
00680E26  |.  8B0D E4E8B201 MOV ECX,DWORD PTR DS:[1B2E8E4]
00680E2C  |.  8BF8          MOV EDI,EAX
00680E2E  |.  E8 3D97E5FF   CALL 004DA570                            ; [TESV.004DA570
00680E33  |.  8BC8          MOV ECX,EAX
00680E35  |.  E8 364DDEFF   CALL 00465B70                            ; [TESV.00465B70
00680E3A  |.  50            PUSH EAX                                 ; /Arg3
00680E3B  |.  8D8424 140100 LEA EAX,[ESP+114]                        ; |
00680E42  |.  68 04010000   PUSH 104                                 ; |Arg2 = 104
00680E47  |.  50            PUSH EAX                                 ; |Arg1 => OFFSET LOCAL.64
00680E48  |.  E8 47158D00   CALL 00F52394                            ; \TESV.00F52394
00680E4D  |.  8B9C24 280200 MOV EBX,DWORD PTR SS:[ESP+228]
00680E54  |.  83C4 0C       ADD ESP,0C
00680E57  |.  53            PUSH EBX                                 ; /Arg2 => [Arg2]
00680E58  |.  8D4C24 10     LEA ECX,[ESP+10]                         ; |
00680E5C  |.  51            PUSH ECX                                 ; |Arg1 => OFFSET LOCAL.129
00680E5D  |.  8BCE          MOV ECX,ESI                              ; |
00680E5F  |.  E8 CCF8FFFF   CALL 00680730                            ; \TESV.00680730
00680E64  |.  80BC24 200200 CMP BYTE PTR SS:[ESP+220],0
00680E6C  |.  A1 C896B101   MOV EAX,DWORD PTR DS:[1B196C8]           ; UTF-8 "オートセーブ"
00680E71  |.  75 05         JNE SHORT 00680E78
00680E73  |.  A1 8C96B101   MOV EAX,DWORD PTR DS:[1B1968C]           ; UTF-8 "セーブ"
00680E78  |>  8D5424 0C     LEA EDX,[ESP+0C]
00680E7C  |.  52            PUSH EDX                                 ; /<%s> => OFFSET LOCAL.129
00680E7D  |.  8B56 08       MOV EDX,DWORD PTR DS:[ESI+8]             ; |
00680E80  |.  8D8C24 140100 LEA ECX,[ESP+114]                        ; |
00680E87  |.  51            PUSH ECX                                 ; |<%s> => OFFSET LOCAL.64
00680E88  |.  57            PUSH EDI                                 ; |<%s>
00680E89  |.  8BBC24 240200 MOV EDI,DWORD PTR SS:[ESP+224]           ; |
00680E90  |.  52            PUSH EDX                                 ; |<%i>
00680E91  |.  50            PUSH EAX                                 ; |<%s>
00680E92  |.  68 1CCA0C01   PUSH OFFSET 010CCA1C                     ; |Format = "%s %i - %s, %s, %s"
00680E97  |.  68 04010000   PUSH 104                                 ; |Arg2 = 104
00680E9C  |.  57            PUSH EDI                                 ; |Arg1 => [Arg1]
00680E9D  |.  E8 FEF3D9FF   CALL 004202A0                            ; \TESV.004202A0
00680EA2  |.  83C4 20       ADD ESP,20
00680EA5  |.  84DB          TEST BL,BL
00680EA7  |.  75 25         JNZ SHORT 00680ECE
00680EA9  |.  8BC7          MOV EAX,EDI
00680EAB  |.  8D50 01       LEA EDX,[EAX+1]
00680EAE  |.  8BFF          MOV EDI,EDI
00680EB0  |>  8A08          /MOV CL,BYTE PTR DS:[EAX]
00680EB2  |.  40            |INC EAX
00680EB3  |.  84C9          |TEST CL,CL
00680EB5  |.^ 75 F9         \JNZ SHORT 00680EB0
00680EB7  |.  2BC2          SUB EAX,EDX
00680EB9  |.  3D FF000000   CMP EAX,0FF
00680EBE  |.  76 06         JBE SHORT 00680EC6
00680EC0  |.  888F FF000000 MOV BYTE PTR DS:[EDI+0FF],CL
00680EC6  |>  57            PUSH EDI                                 ; /Arg1
00680EC7  |.  8BCE          MOV ECX,ESI                              ; |
00680EC9  |.  E8 A2EDFFFF   CALL 0067FC70                            ; \TESV.0067FC70
00680ECE  |>  5F            POP EDI
00680ECF  |.  5E            POP ESI
00680ED0  |.  5B            POP EBX
00680ED1  |.  81C4 08020000 ADD ESP,208
00680ED7  \.  C2 0C00       RETN 0C

11 件のコメント:

  1. ダイアログとかのNPC名が変な所で改行されてしまうのは無理ですか?(´・ω・`)

    返信削除
  2. セーブデータの文字化け対策は期待したいところですが、Pythonの方を弄らなくても直りそうなものなのでしょうか?

    私の所謂「ハイブリット版」は「へ スカイリム」にならず「スカイリム」と表示されています 「TO」を訳していないのでしょうか どっから拾ってきたのかな?

    このような小品は大好きなので、期待しています

    返信削除
  3. 文字化けを修正するには、メモリ上のTESV.exeのコードを直接修正しないといけないので、Python?やPapyrusで実現するのはかなり困難だと思います。

    「スカイリム」の件は
    おそらく、ここの一番下の修正ファイルか、その類のファイルが入っているのだと思います。
    http://wiki.skyrim.z49.org/?MOD%2FBugFix#zeb14079

    この修正ファイルでは
    > "スカイリム" → "スカイリム ヘ"
    > "へ" → ""
    という具合に、「To Skyrim」の「To」部分を空白にして、「スカイリム」側に「へ」をくっつけることで対応しています。

    些細な問題ですが、この方法だと「ヘ」を削ってしまうので、「スカイリム へ」以外の「~~~ へ」は、すべて「へ」が無くなってしまいますね。

    返信削除
  4. わかりました ありがとうございます

    すみません「セーブデータの文字化け」は、Wrye Smash 等で見受けられるcell名のことだと思っていました

    返信削除
  5. なるほど、Wrye Bashだったのですね。
    もしPython版をお使いでしたら、skyrim/Mopy/bash/bosh.py の 2091行目

    self.pcLocation = _unicode(cstrip(self.pcLocation),bolt.pluginEncoding,avoidEncodings=('utf8','utf-8'))

    これを

    self.pcLocation = _unicode(cstrip(self.pcLocation))

    こんな感じに書き換えておけば、文字化け回避できると思います。

    返信削除
    返信
    1. 未明の時間でのご回答、恐縮です

      見事に、嘘のように文字化けが直りました
      (Standalone版でも直ってました)

      とても助かりました ご教示ありがとうございます

      削除
  6. up04444.7zを適用してもなぜか「Sounds of Skyrim - Civilization」の設定画面で「へ スカイリム」になってしまう。
    ModOrganizerが原因なのか・・・
    overwrightフォルダのプラグインに「jp_patch.dll」入ってるんですけどね><

    返信削除
    返信
    1. 自己解決です。
      翻訳ファイルが原因・・・
      汚してしまい申し訳ありませんでした><

      削除
  7. 解決して良かったです。

    ついでなので、こちらのファイルは、「へ スカイリム」だけではなく、セーブファイル名の文字化けも修正するバージョンです。
    http://skup.dip.jp/up/up08670.7z

    ただ、バージョンアップ告知をTwitterでしか行わなかったので、テストしてくれた方が少ないです。
    また、セーブファイル名を扱う関係上、バグがあった場合に最悪セーブファイルが消えてしまうかもしれません。
    (今のところ問題報告は1つも受けていないので、たぶん大丈夫だとは思います)
    もしそれでもよろしければ、こちらも試していただけると嬉しいです。

    返信削除
    返信
    1. コメント見ていただきありがとうございます。

      昨夜グーグルで検索してココを見つけたところ、2013年以降更新がされていない?ようなので既に放置されてるのかとも思いましたが、いろいろ過去の記事を拝見させてもらいましたのでコメントをつけさせていただきました。

      セーブファイル名の文字化け修正版ファイルありがとうございます。

      Skyrimを初めてまだひと月にもなりませんが、試行錯誤して楽しんでおります。
      (とは言え、まだMODのインストールばかりでクエは全然進んでいませんが・・・)

      ちなみに HotKeys++ も既に導入させていただいておりました。
      ココを訪れて過去の記事を見て初めて作者様のHPだと気付いて驚きました^^;

      このたびは有用なファイルまでいただき本当にありがとうございました。

      削除
  8. セーブファイル名の文字化け対策でこちらにたどり着きました
    http://wiki.skyrim.z49.org/?MOD%2FBugFix#zeb14079の「ヘ」を表示させないStringsファイルを使用している環境でup08670.7zのファイルを使用するのは問題ないでしょうか?

    返信削除