No wonder, we have NASA, FBI and whatsoever more to come, to install CIA into ReiLAND to keep it in check.So basically Rei is slowly taking over the world? I see how it is....
No wonder, we have NASA, FBI and whatsoever more to come, to install CIA into ReiLAND to keep it in check.So basically Rei is slowly taking over the world? I see how it is....
You will hate yourself later. Because of newer game compatibility, you'll find yourself on emunand much more than sysnand. You really want all of your previous progress on emunand. When rxTools catches up, it'll be easy to swap them though. You just have to carefully swap movable.sed between the nands.
hahaha bloody spy organizations AND astronauts n shit, probably aliens too... hmmNo wonder, we have NASA, FBI and whatsoever more to come, to install CIA into ReiLAND to keep it in check.
Some badly named homebrew cia installer or something. hahaI'm lost, wtf is NASA?
In reference to the 3DS scene i mean.
the way this works is a bit weird... someone pointed out to me that Nintendo Badge Arcade showed the version as "RX-E 1.3.0".
Thanks... i am very interested to here the outcome
EDIT: are your nands unlinked ??
the way this works is a bit weird... someone pointed out to me that Nintendo Badge Arcade showed the version as "RX-E 1.3.0".
also.......
![]()
Patched agb_firm is NOT needed, for sysnand OR emunand. Holy shit.
Just install your DSiWare and GBA VC games to both sysnand and emunand (or keep your nands linked if you swing that way).
Reisyukaku is love,So basically Rei is slowly taking over the world? I see how it is....
It is a known side-effect of the modified string. mid-kid from cakes pointed out that's the reason why he wouldn't implement it.the way this works is a bit weird... someone pointed out to me that Nintendo Badge Arcade showed the version as "RX-E 1.3.0".
also.......
![]()
int strcomp(char* s1, char* s2, unsigned int size)
{
for(int i = 0; i < size; i++)
{
if(s1 != s2) return 0;
}
return 1;
}
void patches(void)
{
//Change version string
for(int i = 0; i < 0x600000; i+=4)
{
if(strcomp((void*)0x27B00000 - i, (void*)L"Ver.", 4)) strcopy((void*)0x27B00000 - i, (void*)L"\uE024Rei", 4);
}
}
int strcomp(char* s1, char* s2, unsigned int size){
for(int i = 0; i < size*2; i++){
if(s1[i] != s2[i]) return 0;
}
return 1;
}
Fuck it im brave, where is this at in the code and I'll test it myselfI found out why this happens.
Anyone see the problem? It's passing "Ver." to the strcomp function and telling it to check 4 bytes.
But "Ver." is an unicode string. The characters are actually two bytes in width! It should be checking 8 bytes of data. So in reality, it's only checking for "Ve".
The fix is simple. Change the 4 to an 8.
@Reisyukaku There you go![]()
It's in thread.cFuck it im brave, where is this at in the code and I'll test it myself
It's in thread.c
void patches(void){
//Change version string
for(int i = 0; i < 0x600000; i+=8){
if(strcomp((void*)0x27B00000 - i, (void*)L"Ver.", 8)) strcopy((void*)0x27B00000 - i, (void*)L"\uE024Rei", 8);
}
}
https://github.com/Reisyukaku/ReiNand/blob/master/thread/source/thread.c#L71Fuck it im brave, where is this at in the code and I'll test it myself
strcopy() is already correct so you don't need to change that.thanks, I assume both instances of the value 4 need to be updated?
specifically, it should read like so?
Code:void patches(void){ //Change version string for(int i = 0; i < 0x600000; i+=8){ if(strcomp((void*)0x27B00000 - i, (void*)L"Ver.", 8)) strcopy((void*)0x27B00000 - i, (void*)L"\uE024Rei", 8); } }
int strcomp(char* s1, char* s2, unsigned int size){
for(int i = 0; i < size; i++){
if(s1[i] != s2[i]) return 0;
}
return 1;
}
int strcomp(char* s1, char* s2, unsigned int size){
for(int i = 0; i < size*2; i++){
if(s1[i] != s2[i]) return 0;
}
return 1;
}
Nah only the first "4", if you change the second 4 also you ONLY see .::Rei and no version number at all. haha (just tried both ways).thanks, I assume both instances of the value 4 need to be updated?
specifically, it should read like so?
Code:void patches(void){ //Change version string for(int i = 0; i < 0x600000; i+=8){ if(strcomp((void*)0x27B00000 - i, (void*)L"Ver.", 8)) strcopy((void*)0x27B00000 - i, (void*)L"\uE024Rei", 8); } }
https://github.com/Reisyukaku/ReiNand/blob/master/thread/source/thread.c#L71
You should only need to compile/replace arm9.bin
strcopy() is already correct so you don't need to change that.
The best fix would be to modify strcomp() so that it behaves the same as strcopy().
Change (in lib.c):
To:Code:int strcomp(char* s1, char* s2, unsigned int size){ for(int i = 0; i < size; i++){ if(s1[i] != s2[i]) return 0; } return 1; }
Code:int strcomp(char* s1, char* s2, unsigned int size){ for(int i = 0; i < size*2; i++){ if(s1[i] != s2[i]) return 0; } return 1; }
Yeah I see that now, wonder if there is a reason why strcomp doesn't double the size like strcopy does.https://github.com/Reisyukaku/ReiNand/blob/master/thread/source/thread.c#L71
You should only need to compile/replace arm9.bin
strcopy() is already correct so you don't need to change that.
The best fix would be to modify strcomp() so that it behaves the same as strcopy().
Change (in lib.c):
To:Code:int strcomp(char* s1, char* s2, unsigned int size){ for(int i = 0; i < size; i++){ if(s1[i] != s2[i]) return 0; } return 1; }
Code:int strcomp(char* s1, char* s2, unsigned int size){ for(int i = 0; i < size*2; i++){ if(s1[i] != s2[i]) return 0; } return 1; }