Update - 9/27/2021 I just found out it is possible to remove the save dialog on the PC version of AI thanks to ThirteenAG’s SkipSaveConfirmationDialog.
I recently got a copy of Alien Isolation for the PlayStation 4, a sci-fi survival horror game developed by Creative Assembly and I was bothered by the save confirmation dialog box and the narrow Field of View. neither can be changed or tweaked on the console version but this is a multi-plat release and of course there’s the PC version which allowed for changing the FOV and graphical settings that is considered optional on that platform.
But there’s no way to remove the save confirmation screen, let’s see what can be done about it.
Part 1 - Researching Save Prompt
Let’s start with the save confirmation screen, when us, the player goes to save our progress at the emergency station, will be prompted with the dialogbox mentioned earlier.
Assuming the dialog is a boolean, it can either be a
00 or a
01, let’s start by searching for 1 when the prompt is shown and when it is not.
That’s a lot of results.. Let’s rinse and repeat until the result list becomes manageable.
Ah, 11 results. That’s more like it, let’s set a breakpoint on each of these until it breaks when the dialog pops up.
2 Results. First one is a write so we can discard that as it is not important, the second one however is more interesting.
01197e01 41 80 bc CMP byte ptr [R12 + 0x12e1],0x0 24 e1 12 00 00 00 01197e0a 74 0d JZ LAB_01197e19 01197e0c 4c 89 e7 MOV RDI,R12 01197e0f be 1b 00 MOV ESI,0x1b 00 00 01197e14 e9 93 05 JMP LAB_011983ac 00 00 LAB_01197e19 XREF: 01197e0a(j) 01197e19 4d 8d b4 LEA R14,[R12 + 0x1040] 24 40 10 00 00 01197e21 41 0f b6 MOVZX ECX,byte ptr [R12 + 0x1473] 8c 24 73 14 00 00 01197e2a 41 0f b6 MOVZX EDX,byte ptr [R12 + 0x1471] 94 24 71 14 00 00 01197e33 41 8b bc MOV EDI,dword ptr [R12 + 0x48ec] 24 ec 48 00 00 01197e3b 41 8b b4 MOV ESI,dword ptr [R12 + 0x48f0] 24 f0 48 00 00 ... 011983ac e8 bf 0e CALL FUN_01199270 00 00 ... 01199319 48 8d 35 LEA RSI,[s_AI_UI_DLG_BTN_DONT_SAVE_01f03ab1] = "AI_UI_DLG_BTN_DONT_SAVE" 91 a7 d6 00 01199343 48 8d 35 LEA RSI,[s_AI_UI_DLG_BTN_RETRY_01ef8510] = "AI_UI_DLG_BTN_RETRY" c6 f1 d5 00 01199371 48 8d 35 LEA RSI,[s_AI_UI_DLG_WSETUP_CONFIRM_NODEVIC_01f03a = "AI_UI_DLG_WSETUP_CONFIRM_NODE 17 a7 d6 00 01199378 48 8d 15 LEA RDX,[s_AI_UI_DLG_WSETUP_CONFIRM_NODEVIC_01f03a = "AI_UI_DLG_WSETUP_CONFIRM_NODE e8 a6 d6 00
A compare, jump to function, and that function has what seems to be dialog save variables. how about we skip this jump and run the rest of the code?
01197e0a eb 0d JMP LAB_01197e19 ; skip save confirm code
Part 2 - Researching FOV
On the PC there’s an option to adjust the FOV from 47 to 75. The default seems to be 47 and is a float.
Searching for 47 and adjusting the value back and forth, a lot of them is locked but there’s only one that can be manually adjusted.
I manually set
0x05B0AC00 to 100, but this value is not static so let’s have a look in memory and see if we can find it in the console version.
Highlighted in red at the top left is the address and value we just found, the values with red squares indicated that it has changed and is not relevant to us. let’s remember the row of address next to our float value and see if we can find it on the console.
I decided to check the first one and sure enough, it was the one we were looking for.
0115b8c6 e8 3a 84 CALL MyFOVSubroutine ; call 1d 00 MyFOVSubroutine XREF: FUN_0115b770:0115b8c6(c) 01333d05 c7 84 21 MOV dword ptr [RCX + 0x38],0x42c80000 ; 100 degrees as example 38 00 00 00 00 00 01333d10 c5 fa 10 VMOVSS XMM0,dword ptr [RCX + 0x38] ; move 100.0f into xmm0 41 38 01333d15 c3 RET ; return
Just for fun, here is a comparison between the different FOV angles.
Thanks to the patrons who supported me on various platforms! You guys are awesome!