ROM Hack [Release]Gateshark2NTR

MidnightSin

Member
Newcomer
Joined
Aug 21, 2016
Messages
5
Trophies
0
Age
34
XP
81
Country
Ecuador
Is there any difference between your MHGen plugin and one generated through your Gateshark2NTR? Because of the file size difference (Yours 471KB vs 576KB G2N) and the one I made doesn't allow me to connect to online lobbies.

I've attached the .plg and .txt used.
 

Attachments

  • MHGen G2NTR.zip
    99.8 KB · Views: 345

Nanquitas

Well-Known Member
OP
Member
Joined
Sep 29, 2015
Messages
2,345
Trophies
0
Age
30
Location
South of France :)
XP
3,336
Country
France
Is there any difference between your MHGen plugin and one generated through your Gateshark2NTR? Because of the file size difference (Yours 471KB vs 576KB G2N) and the one I made doesn't allow me to connect to online lobbies.

I've attached the .plg and .txt used.
The size is different because in mine I removed the menu's label which are more or less 30 KB each.
 

Samueladi

Active Member
Newcomer
Joined
Apr 25, 2016
Messages
38
Trophies
0
Age
27
XP
236
Country
Indonesia
Nope, you can't use two plugins at same time.

You need to choose one.
But you can add the code from the previous one to the new one you'll made and the problem is solved.

Okay, Thankyou very much @Nanquitas :)

The converter disables online. If you want to go online with NTR, you need to build your own .plg that has online access.

Could you tell me how to build .plg that has online access? Do I need some code or something to make it can go online?
Thankyou
 

MidnightSin

Member
Newcomer
Joined
Aug 21, 2016
Messages
5
Trophies
0
Age
34
XP
81
Country
Ecuador
Translating Gateshark codes to NTR is really easy, it's just intimidating because a cheat code seems like a bunch of random numbers, but in fact, all those numbers represent something specific and once you get at it, you're golden.

Think you could help me translate this? I've been successful with addresses that begin with 00 and going off of that OOT sample I got button triggers to work, but my C# knowledge didn't help much here.

Tried to find tutorials about this whole deal but I couldn't find something clear and when it started mentioning getting mem dumps it got really confusing.

Code:
[(L+Up)Hit Monster Display HP (L+Down)Off v1.0]
D3000000 00000000
E0C1EDE0 00000038
E3A00001 E5840054
E59F0028 E5900000
E200720F E3570203
05900360 E3500601
83A00000 E12FFF1E
E58C1360 E59F3004
E583C000 EAF2D666
00C1EE18 00D9A000
008D47B0 EA0D2994
DD000000 00000240 <- L+Up
00267A54 E1A00000
00267C2C E3A00004
00267D8C EB26DC13
D0000000 00000000
DD000000 00000280 <- L+Down
00267A54 DA000055
00267C2C E7D00005
00267D8C E3E00000
D0000000 00000000

My issue is understanding the logic behind how to translate properly (especially those that don't start with 00). I've just been pretty much lucky so far.
 
  • Like
Reactions: Samueladi

Samueladi

Active Member
Newcomer
Joined
Apr 25, 2016
Messages
38
Trophies
0
Age
27
XP
236
Country
Indonesia
l, you need the source of a plugin that you want, so either build the plugin from scratch (requires knowledge of C) or if there is a open source plugin
Well, you need the source of a plugin that you want, so either build the plugin from scratch (requires knowledge of C) or if there is a open source plugin, then you can download their source and change a couple files around to enable online. What game exactly do you want NTR online for?

--------------------- MERGED ---------------------------

I can help you build the plugin though, just PM me :P
Translating Gateshark codes to NTR is really easy, it's just intimidating because a cheat code seems like a bunch of random numbers, but in fact, all those numbers represent something specific and once you get at it, you're golden.

I want to play MH:Generations online :D
Alright, I will PM you the cheat that I want. Thankyou very much! :D
 

Nanquitas

Well-Known Member
OP
Member
Joined
Sep 29, 2015
Messages
2,345
Trophies
0
Age
30
Location
South of France :)
XP
3,336
Country
France
I want to play MH:Generations online :D
Alright, I will PM you the cheat that I want. Thankyou very much! :D
The only way for you is to do your own plugin, or wait the update of mine.
I'm reworking the core of the plugins to add a lot of things and it take me time. Added to that I have less time to work on it these last days....

Actually, wait I have no idea how to utilize EXXXXXXX lines... sorry.
It's very weird on how it's done, but I've never dealt with it before.
Maybe @Nanquitas can help?
EXXXXXXX is a simple data copy code.

That's how it's working:
EXXXXXXXX YYYYYYYY
ZZZZZZZZ ZZZZZZZZ
X: Addr to copy to + offset
Y: nb of byte(s) to copy
Z: the data to copy (two letter forms a byte so do the math to find Y)

See an exemple below.

@MidnightSin:
There's multiple way to convert this type of code, here's one:
Code:
void    monster_display(void)
{
    u32    address = 0x00C1EDE0;
    static const u8    asm[] = { 0x01, 0x00, 0xA0, 0xE3, 0x54, 0x00, 0x84, 0xE5, 0x28, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x0F, 0x72, 0x00, 0xE2, 0x03, 0x02, 0x57, 0xE3, 0x60, 0x03, 0x90, 0x05, 0x01, 0x06, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x83, 0x1E, 0xFF, 0x2F, 0xE1, 0x60, 0x13, 0x8C, 0xE5, 0x04, 0x30, 0x9F, 0xE5, 0x00, 0xC0, 0x83, 0xE5, 0x66, 0xD6, 0xF2, 0xEA, 0x18, 0xEE, 0xC1, 0x00};

    memcpy((void *)(address), asm, 0x38); //you can use a memcpy32 to speed up the copy if you have it
    write_u32(0x00C1EE18, 0x00D9A000);
    write_u32(0x008D47B0, 0xEA0D2994);
    if (is_pressed( BUTTON_DU + BUTTON_L ))
    {
        write_u32(0x00267A54, 0xE1A00000);
        write_u32(0x00267C2C, 0xE3A00004);
        write_u32(0x00267D8C, 0xEB26DC13);
    }
    if (is_pressed( BUTTON_DD + BUTTON_L ))
    {
        write_u32(0x00267A54, 0xDA000055);
        write_u32(0x00267C2C, 0xE7D00005);
        write_u32(0x00267D8C, 0xE3E00000);
    }
}
 
Last edited by Nanquitas,
  • Like
Reactions: Samueladi

Samueladi

Active Member
Newcomer
Joined
Apr 25, 2016
Messages
38
Trophies
0
Age
27
XP
236
Country
Indonesia
The only way for you is to do your own plugin, or wait the update of mine.
I'm reworking the core of the plugins to add a lot of things and it take me time. Added to that I have less time to work on it these last days....


EXXXXXXX is a simple data copy code.

That's how it's working:

X: Addr to copy to + offset
Y: nb of byte(s) to copy
Z: the data to copy (two letter forms a byte so do the math to find Y)

See an exemple below.

@MidnightSin:
There's multiple way to convert this type of code, here's one:
Code:
void    monster_display(void)
{
    u32    address = 0x00C1EDE0;
    static const u8    asm[] = { 0x01, 0x00, 0xA0, 0xE3, 0x54, 0x00, 0x84, 0xE5, 0x28, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x0F, 0x72, 0x00, 0xE2, 0x03, 0x02, 0x57, 0xE3, 0x60, 0x03, 0x90, 0x05, 0x01, 0x06, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x83, 0x1E, 0xFF, 0x2F, 0xE1, 0x60, 0x13, 0x8C, 0xE5, 0x04, 0x30, 0x9F, 0xE5, 0x00, 0xC0, 0x83, 0xE5, 0x66, 0xD6, 0xF2, 0xEA, 0x18, 0xEE, 0xC1, 0x00};

    memcpy((void *)(address), asm, 0x38); //you can use a memcpy32 to speed up the copy if you have it
    write_u32(0x00C1EE18, 0x00D9A000);
    write_u32(0x008D47B0, 0xEA0D2994);
    if (is_pressed( BUTTON_DU + BUTTON_L ))
    {
        write_u32(0x00267A54, 0xE1A00000);
        write_u32(0x00267C2C, 0xE3A00004);
        write_u32(0x00267D8C, 0xEB26DC13);
    }
    if (is_pressed( BUTTON_DD + BUTTON_L ))
    {
        write_u32(0x00267A54, 0xDA000055);
        write_u32(0x00267C2C, 0xE7D00005);
        write_u32(0x00267D8C, 0xE3E00000);
    }
}

I cannot even thank you enough for this amazing tool.
Anyway I am porting the gateshark manually thanks to @itsRyan for helping me out :D. But I have some difficulty on converting this code.
If the codes like this
Code:
[Pouch x99]
D3000000 00000000 // Offset 0
C0000000 00000018 // Loop 18 times
28383D34 00000063 // Write 8 bit 0x63 at 0x8383D34
DC000000 00000004 // Every loop (Offset + 4)
D1000000 00000000 // End Loop
D0000000 00000000 // End Conditional

How can I convert it to C? Can I use while() functions on the cheats.c ?
 

Nanquitas

Well-Known Member
OP
Member
Joined
Sep 29, 2015
Messages
2,345
Trophies
0
Age
30
Location
South of France :)
XP
3,336
Country
France
You can use every C loop / types etc, even use all funtions of the libc EXCEPT malloc / free and functions which rely on these.

Simple C loop code:
Code:
void    pouch_x99(void)
{
    u32    offset;
    int     i;

    offset = 0;
    for (i = 0; i < 0x18; i++)
    {
        write_u8(0x08383D34 + offset, 0x63);
        offset += 4;
    }
}
 
Last edited by Nanquitas,
  • Like
Reactions: Samueladi

Samueladi

Active Member
Newcomer
Joined
Apr 25, 2016
Messages
38
Trophies
0
Age
27
XP
236
Country
Indonesia
You can use every C loop / types etc, even use all funtions of the libc EXCEPT malloc / free and functions which rely on these.

Simple C loop code:
Code:
void    pouch_x99(void)
{
    u32    offset;
    int     i;

    offset = 0;
    for (i = 0; i < 0x18; i++)
    {
        write_u8(0x08383D34 + offset, 0x63);
        offset += 4;
    }
}
Thanks! Is there any difference with WRITEU8 and write_u8?
I'm using this for the compiler https://github.com/RyDog199/blankCheatMenu
 

Samueladi

Active Member
Newcomer
Joined
Apr 25, 2016
Messages
38
Trophies
0
Age
27
XP
236
Country
Indonesia
The difference is that WRITEU8 is a macro and write_u8 is a function that I made.

It's the same goal but my function is secure.
But I don't think it's in the version of the lib @itsRyan have so use the macro.
Alright! Your lib files is the ACNL one on your github right?
Anyway thankyou for your help!
 

MidnightSin

Member
Newcomer
Joined
Aug 21, 2016
Messages
5
Trophies
0
Age
34
XP
81
Country
Ecuador
The only way for you is to do your own plugin, or wait the update of mine.
I'm reworking the core of the plugins to add a lot of things and it take me time. Added to that I have less time to work on it these last days....


EXXXXXXX is a simple data copy code.

That's how it's working:

X: Addr to copy to + offset
Y: nb of byte(s) to copy
Z: the data to copy (two letter forms a byte so do the math to find Y)

See an exemple below.

@MidnightSin:
There's multiple way to convert this type of code, here's one:
Code:
void    monster_display(void)
{
    u32    address = 0x00C1EDE0;
    static const u8    asm[] = { 0x01, 0x00, 0xA0, 0xE3, 0x54, 0x00, 0x84, 0xE5, 0x28, 0x00, 0x9F, 0xE5, 0x00, 0x00, 0x90, 0xE5, 0x0F, 0x72, 0x00, 0xE2, 0x03, 0x02, 0x57, 0xE3, 0x60, 0x03, 0x90, 0x05, 0x01, 0x06, 0x50, 0xE3, 0x00, 0x00, 0xA0, 0x83, 0x1E, 0xFF, 0x2F, 0xE1, 0x60, 0x13, 0x8C, 0xE5, 0x04, 0x30, 0x9F, 0xE5, 0x00, 0xC0, 0x83, 0xE5, 0x66, 0xD6, 0xF2, 0xEA, 0x18, 0xEE, 0xC1, 0x00};

    memcpy((void *)(address), asm, 0x38); //you can use a memcpy32 to speed up the copy if you have it
    write_u32(0x00C1EE18, 0x00D9A000);
    write_u32(0x008D47B0, 0xEA0D2994);
    if (is_pressed( BUTTON_DU + BUTTON_L ))
    {
        write_u32(0x00267A54, 0xE1A00000);
        write_u32(0x00267C2C, 0xE3A00004);
        write_u32(0x00267D8C, 0xEB26DC13);
    }
    if (is_pressed( BUTTON_DD + BUTTON_L ))
    {
        write_u32(0x00267A54, 0xDA000055);
        write_u32(0x00267C2C, 0xE7D00005);
        write_u32(0x00267D8C, 0xE3E00000);
    }
}

Thanks for the explaination! I'll check it and keep testing when I get home later.
 

temper999

Well-Known Member
Member
Joined
Sep 22, 2015
Messages
327
Trophies
0
XP
520
Country
Gambia, The
I receive the following in the log:
Code:
[ERROR] Sources\string_manipulation.c:271:
    int __cdecl is_title_id(char *){ errno: Invalid argument | Name too short.}

But the .PLG gets created. Heres my Cheat file:
Code:
[Crank-a-kai not disappears]
286901E0 00000000

[Rain off]
28690054 00000000

[Rain on]
28690054 00000001

[Unlimited Running]
2885C418 00000000
2885C419 00000000
2885C41A 00000080
2895FE18 00000000
2895FE19 00000000
2895FE1A 00000080
289912E0 00000030

[200 Items you own x99]
C0000000 000000C8
2868D850 00000063
DC000000 00000010
D1000000 00000000

[60 Equipment you own x99]
C0000000 0000003C
2868D8B0 00000063
DC000000 00000014
D1000000 00000000

I am using a Windows 7 VM with DevKitPro 1.6.0 installed.

Edit: Cheats are also not working.
While using the same ones with NTRClient they are working.

Edit2: After renaming the cheat file to a valid TitleID the error was gone.
 
Last edited by temper999,

Timburpton

Well-Known Member
Member
Joined
Nov 18, 2014
Messages
648
Trophies
0
Age
46
XP
580
Country
I've generated a cheat for FF:Explorers EUR version and for Zelda Triforce EUR from codes from fort42 and it doesn't seem to work with NTR 3.2 or 3.4
 

Nanquitas

Well-Known Member
OP
Member
Joined
Sep 29, 2015
Messages
2,345
Trophies
0
Age
30
Location
South of France :)
XP
3,336
Country
France
You can create your own code from NTR dumps.

It'll work same way.

You can use my dumper to do fast dump of a process, it'll generate a dump just like Gateway so you'll be able to use software originally created for Gateway's users.
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    SylverReZ @ SylverReZ: https://www.youtube.com/watch?v=6igvB1yR04A