hi all
explanations provided here are my own speculations and could be wrong. also tried to make it newbie friendly.
so to begin our search we need a lead.
lets start with an objective that needs to be done several times and find that changing number. then find the accessing code to eventually find the deciding function.
after scanning we find:
by changing them we verify which affects the objective's completion.
we try to find the accessing code:
dump the running game and open the games exe in IDA pro and when analysis is done go to that function:
let see what are these two offsets:
now if we set the 0x40 to max value, optional objective will be completed. but the problem is that this function only handles objectives which must be done several times. meaning, objectives like "stay undetected" are not checked here.
so a way of looking at this is that the game is constantly checking for objectives completion.
so if we go back we can find the check for those other objectives. lets trace back:
then:
and then:
here we cant find any object other than the previous one. so we go on with tracing back:
step out of this function (by F7 key) and you'll reach:
lets place a breakpoint and see if several structures are passed to this function or not.
press F9 several times and you'll see only two values within ESI. could this be our two optional objectives?
let do a quick check and NOP the "je" after the "test". you'll see the "kill guards from stalking zones" objective will be immediately completed but if you
complete the mission, you'll miss the "stay out of combat" objective even if you are not detected by guards. why is that?
turns out the "stay out of combat" objective internally check "is detected" condition. so by returning TRUE boolean we tell the game "we got detected".
we can find the "completed" or "condition met" flag and set only those we want. lets find them:
copy those two values into dissect data:
we can see if we kill 3 guards from stalking zones the highlighted values of second column are changed and if we get detected the highlighted values of first column are changed.
if we restart the mission and get detected and reset the flags of first column and set the flags of second column without killing any guards, at the end of mission we will get 100% synchronization. so these are indeed correct flags.
now one solution is that we write a script that fetches these structures and lets us edit these flags. but we should edit flags before mission end for every mission.
there's a chance that the games uses some kind of logic in which it has to know if an objective is positive or negative i.e. it should or should be done.
are we lucky enough to have that flag within the structure?! lets get back to dissect data window and try spot any differences between two columns.
by seeing into different pointers i didn't find anything interesting except:
we also find these too:
they are the main suspects. lets hook the bool check code (the code i hooked above) and change each of these flags in turn.
we'll see that 0x54 flag indeed causes the mission to be seen as "should be done" and hooking will set every optional objective to "completed".
a simple patch could be done like:
stepping into the very call we used to get structures:
and stepping till the end:
here we can overwrite the test and use the space to set the 0x54 flag to 1.
so it will be:
from now on, every optional objective will get completed soon as it is introduced.
also attached an AOB hook for it.
[tut] Complete All Optional Objectives cheat for Assassin Creed Black Flag
-
- Expert Cheater
- Posts: 121
- Joined: Wed Dec 27, 2017 2:40 pm
- Reputation: 64
[tut] Complete All Optional Objectives cheat for Assassin Creed Black Flag
- Attachments
-
- AC black flag Complete All Optional Objectives cheat.CT
- (2.51 KiB) Downloaded 151 times
Last edited by reverser69 on Sat Mar 16, 2024 10:49 pm, edited 5 times in total.
-
- Expert Cheater
- Posts: 121
- Joined: Wed Dec 27, 2017 2:40 pm
- Reputation: 64
Re: [tut] Complete All Optional Objectives cheat for Assassin Creed Black Flag
so after testing it for some time, turned out that some minor objectives like eavesdrops are also accessed by this function and our hook breaks those objectives. but there are some ways to filter those objectives.
previous findings come to our aid:
so by checking if objective description is null or not, we can tell if the current objective is really an optional objective or not. there is also 0x60 offset but i didn't test it. so a quick and dirty work around:
updated the 1st post.
previous findings come to our aid:
so by checking if objective description is null or not, we can tell if the current objective is really an optional objective or not. there is also 0x60 offset but i didn't test it. so a quick and dirty work around:
updated the 1st post.
Who is online
Users browsing this forum: No registered users