![]() The other codes just modify 3DS virtual memory with some bytes and only need the 1 pointer lookup. Some of the DQ8 gateway codes lookup pointers by 3DS Virtual memory address and so that is why I split it up to DSPtr1 thru 4 because it's looking up 3DS memory and I convert that to how Citra stores the 3DS virtual memory. Since Gateway uses the 3DS virtual memory for codes, I just place what a gateway code would do to the correct spot in memory according to Citra. The Segment is just the first XXXXX000 of an address and each memory area holds 0xFFF of 3DS virtual memory. Citra is structured so that the 3DS virtual memory is mapped to the base pointer + (Segment*8). If I remember correctly, I just found a value like Gold and did a what accesses this address to find the base pointer code. ![]() On a side note, LUA scripting support is being worked on, so perhaps this information could be pulled from there, if the technique is more documented, or perhaps we can use this info to adopt the code to a lua script. Why is it sometimes seem to be calculated "DSPtr2 = ReadInteger(ReadQword(CitraBasePtr + (DSPtr1Segment*8)) + DSPtr1Offset)" and other times hard coded "DSPtr1 = 0x53BD60" or "DSPtr1 = 0x5CF3C4" ![]() How and why did you choose the DSP Ptr/Offset/Segment, and what does it stand for. Why did you choose that AOB to find the Base, and when it changed, how did you figure out what it needed to be changed to. While not exhaustive, since I don't know all the questions I should ask for an explanation, some questions to start with: ![]() I was wondering if you could make explicit your methodology on getting the Base, if not or if you don't have the time, just ignore this. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |