F某4 ムービー音声について

有名どころなので、あまり関わりたくないので消す可能性が高いですが一応書いておきます。

音声をツールで英語トラックに移すやり方が広まりつつありますが
英語トラックを選択している部分を変えるやり方です。CoL の時と同じように
BinkSetSoundTrack を見ます。

00007FF705CBF940 | 48 83 EC 28              | sub rsp,28
00007FF705CBF944 | 81 0A 00 40 00 00    | or dword ptr ds:[rdx],4000
00007FF705CBF94A | 89 4C 24 30              | mov dword ptr ss:[rsp+30],ecx
00007FF705CBF94E | 48 8D 54 24 30         | lea rdx,qword ptr ss:[rsp+30]
00007FF705CBF953 | B9 01 00 00 00          | mov ecx,1
00007FF705CBF958 | FF 15 BA A0 36 05    | call qword ptr ds:[<&BinkSetSoundTrack>]
00007FF705CBF95E | 48 83 C4 28              | add rsp,28
00007FF705CBF962 | C3                              | ret


mov dword ptr ss:[rsp+30],ecx
ここの ecx が track no で english だと 1 が入っています。
ここを
mov ecx, 2    // あえて french 察してください…
mov dword ptr ss:[rsp+30],ecx
とすると french 音声になります。

これを CheatEngine で実装すると
<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="18">
  <CheatEntries>
    <CheatEntry>
      <ID>10000</ID>
      <Description>"french movie voice"</Description>
      <LastState Activated="0"/>
      <Color>80000008</Color>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>[ENABLE]
aobscanmodule(trackNo,Fallout4.exe,89 4C 24 30 48 8D 54 24 30 B9 01 00 00 00)
alloc(MyCode,$1000,trackNo)

label(code)
label(return)

MyCode:

code:
  mov ecx, 2
  mov [rsp+30],ecx
  lea rdx,[rsp+30]
  jmp return

trackNo:
  jmp code
  nop
  nop
  nop
  nop
return:
registersymbol(trackNo)

[DISABLE]
trackNo:
  db 89 4C 24 30 48 8D 54 24 30
unregistersymbol(trackNo)
dealloc(MyCode)

</AssemblerScript>
    </CheatEntry>
  </CheatEntries>
</CheatTable>
こんな感じです。これで仏語音声になるはずです。