Hello, I have tried works fine in ACT3 too, except you can't break up with Shadowheart. So she will doesn't mind your other male or female, but she will comment it HahahaThepledge wrote: ↑Tue Aug 15, 2023 11:30 amBeen a busy time, and I'm still in Act 1, so haven't had the opportunity to test it much beyond using it to start all the romances simultaneously in act 1. It may be that they can't be started later, and I did read some reference to a stabledating counter in some of the data files, so I will take a look when I have the chance, but it may be a while before I get there, and my own skills are fairly limited.icedtea676 wrote: ↑Mon Aug 14, 2023 9:04 pmIs there any chance you can take a look at this again? I managed to insert it into the cheat engine table provided on the OP, though it took a bit of finagling. The code also doesn't work at all if made in its own .ct file, Cheat Engine complains about the command cmdCall or whatever. Anyways, once the code does work after very precise copy/pasting, it fails to actually do what is intended to do.Thepledge wrote: ↑Sat Aug 12, 2023 3:45 pm
I've made a series of console commands for setting and clearing the various isdating flags, and have managed to start the romance paths with everyone but wyll so far in my game by clearing other romances, then trying to trigger the relevant dialog, IE, get approval high with gale, clear all romances, camp, wait til night, get magic lessons, then reset all your romances. probably there will be other conflicts to navigate as time goes on, but working alright so far.
Just copy the below code, then press ctrl v within your cheatengine table
Code: Select all
<?xml version="1.0" encoding="utf-8"?> <CheatTable> <CheatEntries> <CheatEntry> <ID>4499</ID> <Description>"Romance Flags"</Description> <LastState Value="" RealAddress="00000000"/> <GroupHeader>1</GroupHeader> <CheatEntries> <CheatEntry> <ID>4507</ID> <Description>"Dating Gale"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "75d0e041-c16c-d089-6d89-64354fa4c9d9" --Debug_SetReallyTagsToo 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>4492</ID> <Description>"Dating Wyll"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "f1520748-1d36-4500-9f8a-0da4207f8dd5" -- ORI_State_DatingWithWyll 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>4493</ID> <Description>"Dating Astarion"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "ba298c56-26b6-4918-9bd4-616668d369d8" -- ORI_State_DatingAstarion 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>4494</ID> <Description>"Dating Shadowheart"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "e87f1e21-a758-47ae-8c0e-9e715eb289b5" -- ORI_State_DatingShadowheart 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>4508</ID> <Description>"Dating Lae'zel"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "86eaa84a-350b-401b-8b43-b53eeb534579" -- ORI_State_DatingLaezel 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>4509</ID> <Description>"Dating Minthara"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "de1360cd-894b-40ea-95a7-1166d675d040" -- ORI_State_DatingMinthara 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>4510</ID> <Description>"Dating Karlach"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "f24c3f3e-7287-4908-84bf-ba314921f5ee" -- ORI_State_DatingKarlach 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>4511</ID> <Description>"Dating"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "a3346d5b-c54b-4c73-bf18-0a2bf90c35da" -- ORI_State_Dating 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>4500</ID> <Description>"Clear Dating Gale"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "75d0e041-c16c-d089-6d89-64354fa4c9d9" --Debug_SetReallyTagsToo 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("ClearFlag") 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>4501</ID> <Description>"Clear Dating Wyll"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "f1520748-1d36-4500-9f8a-0da4207f8dd5" -- ORI_State_DatingWithWyll 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("ClearFlag") 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>4502</ID> <Description>"Clear Dating Astarion"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "ba298c56-26b6-4918-9bd4-616668d369d8" -- ORI_State_DatingAstarion 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("ClearFlag") 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>4503</ID> <Description>"Clear Dating Shadowheart"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "e87f1e21-a758-47ae-8c0e-9e715eb289b5" -- ORI_State_DatingShadowheart 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>4504</ID> <Description>"Clear Dating Lae'zel"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "86eaa84a-350b-401b-8b43-b53eeb534579" -- ORI_State_DatingLaezel 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("ClearFlag") 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>4505</ID> <Description>"Clear Dating Minthara"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "de1360cd-894b-40ea-95a7-1166d675d040" -- ORI_State_DatingMinthara 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("ClearFlag") 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>4512</ID> <Description>"Clear Dating"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "a3346d5b-c54b-4c73-bf18-0a2bf90c35da" -- ORI_State_Dating 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("ClearFlag") 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>4506</ID> <Description>"Clear Dating Karlach"</Description> <LastState/> <VariableType>Auto Assembler Script</VariableType> <AssemblerScript>[ENABLE] {$lua} if syntaxcheck then return end local uuid = "f24c3f3e-7287-4908-84bf-ba314921f5ee" -- ORI_State_DatingKarlach 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("ClearFlag") 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>
As others have mentioned, clearing dating or clearing dating with a specific NPC, they still remain as the main romance. When trying to clear Karlach (my current romance partner), she is still swooning me. When trying to clear Karlach, clear Dating, and enable Dating Shadowheart; Shadowhearts' initial dialogue goes directly into a "this would have been a nice thing, I'm sorry it couldn't happen".
Have you tested your code at all past Act 1? I'm at Wyrm's Crossing/Lower-City of Baldur's Gate. This type of change romance would be very much appreciated, but appears to be broken.
Thank you for your time =).
How to use this cheat table?
- Install Cheat Engine
- Double-click the .CT file in order to open it.
- Click the PC icon in Cheat Engine in order to select the game process.
- Keep the list.
- Activate the trainer options by checking boxes or setting values from 0 to 1