Act 3 romance scenes are currently super buggy for some saves and some of them refuse to play. I have noticed people with scenes that don't trigger for Lae'zel, Shadowheart, and Wyll, regardless of how much troubleshooting is done. This doesn't trigger those scenes, but it marks them as done so that the companions get the proper updated dialogue and Lae'zel gets her romance ending available as an option.
I based this on Thepledge's invaluable Romance Flags scripts; just copy and paste it into the sub-list after Console Commands > Register Commands from Zanzer's table on the first post, then tick the relevant boxes:
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>5000</ID>
<Description>"Act 3 romance flags fixes"</Description>
<Options moHideChildren="1"/>
<LastState Value="" RealAddress="00000000"/>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>5001</ID>
<Description>"Laezel sunrise scene"</Description>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
local uuid = "1563bb90-63a5-4957-adfe-43ec4aa4ce2e" -- ORI_Laezel_State_CompletedRomance
local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")
PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)
local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)
writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)
writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)
PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}
[DISABLE]
</AssemblerScript>
</CheatEntry>
<CheatEntry>
<ID>5002</ID>
<Description>"Laezel my joy address"</Description>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
local uuid = "fe454112-39f1-46c5-888c-02c98f4419aa" -- NIGHT_Laezel_Romance3
local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")
PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)
local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)
writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)
writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)
PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}
[DISABLE]
</AssemblerScript>
</CheatEntry>
<CheatEntry>
<ID>5003</ID>
<Description>"Shadowheart scenes (Sharran/Selunite)"</Description>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
local uuid = "4f67ad76-c654-490e-ab62-263ae8fa8d14" -- ORI_Shadowheart_State_Act3RomanceEnded
local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")
PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)
local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)
writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)
writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)
PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}
[DISABLE]
</AssemblerScript>
</CheatEntry>
<CheatEntry>
<ID>5004</ID>
<Description>"Shadowheart skinny dipping comments"</Description>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
local uuid = "9f583304-0a1a-498c-acf9-3c8dcc30ee3d" -- NIGHT_Shadowheart_Skinnydipping
local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")
PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)
local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)
writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)
writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)
PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}
[DISABLE]
</AssemblerScript>
</CheatEntry>
<CheatEntry>
<ID>5005</ID>
<Description>"Shadowheart Nightfall ritual comments"</Description>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
local uuid = "8f1697d4-2402-4283-802a-ef7e1ebd8aa1" -- NIGHT_Shadowheart_NightfallRitual
local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")
PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)
local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)
writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)
writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)
PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}
[DISABLE]
</AssemblerScript>
</CheatEntry>
<CheatEntry>
<ID>5006</ID>
<Description>"Wyll Wilden Oak scene"</Description>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>[ENABLE]
{$lua}
if syntaxcheck then return end
local uuid = "cb51446f-3a3e-62e7-00ee-0484f90f64b7" -- CAMP_Wyll_Act3Romance_Event_Began
local cmdCall = getAddress("cmdCall")
local cmdArgs = getAddress("cmdArgs")
local cmdStr1 = getAddress("cmdStr1")
local cmdStr2 = getAddress("cmdStr2")
PrepareCall("GetHostCharacter")
executeCodeEx(0, nil, cmdCall)
local player = readPointer(cmdArgs + 0x08)
player = readString(player, 256, false)
writeString(cmdStr1, player)
writeBytes(cmdStr1 + #player, 0)
writeString(cmdStr2, uuid)
writeBytes(cmdStr2 + #uuid, 0)
PrepareCall("SetFlag")
writePointer(cmdArgs + 0x08, cmdStr2)
writePointer(cmdArgs + 0x18, cmdStr1)
writeQword(cmdArgs + 0x28, 0)
writeQword(cmdArgs + 0x38, 1)
local result = executeCodeEx(0, nil, cmdCall)
print(result == 1 and "success" or "failure")
{$asm}
[DISABLE]
</AssemblerScript>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatTable>