Chibi-Robo Translation Problem

Discussion in 'NDS - ROM Hacking and Translations' started by Zacklol, Aug 13, 2011.

  1. Zacklol

    Zacklol Member

    Oct 22, 2009
    Hello everyone, I'm trying to translate to spanish the Chibi-Robo: Park Patrol, I already found the texts and edited the fonts, but my knowledge about pointers is basic so I tried to find them but with no success. I hope if anyone can help me with them, the texts of the game is in five .bmg, thanks in advance.
  2. FAST6191

    FAST6191 Techromancer

    pip Reporter
    Nov 21, 2005
    United Kingdom
    BMG is a fairly common format but OK. You say you have the text parts sorted (00 occasionally used to end a list type section and maybe a section, 0a used for new line and so forth, the odd bit of shiftJIS (I think) Japanese still buried in the rom).

    Using the US release. MsgResSystem.bmg
    First note it starts with MESGbmg1 which is one thing but after that is A004 - you will note the file ends at 04A0 , this having the file length here (usually at the 8th byte) after the magic stamp is very common in DS formats- it appears again in the INF1 section and again in the DAT1 section (2004 -- 0420). I do not imagine you will have changed the INF1 section's length.

    You will need to change this overall file length and if you have added length to the file and also change the length of the DAT1 section

    the INF1 section

    00000020 494E 4631 INF1
    00000024 6000 0000 `...
    00000028 0013 0004 ....
    0000002C 0002 000D ....
    00000030 0001 0000 ....
    00000034 0050 0000 .P..
    00000038 0077 0000 .w..
    0000003C 00A0 0000 ....
    00000040 00ED 0000 ....
    00000044 0106 0000 ....
    00000048 0121 0000 .!..
    0000004C 0146 0000 .F..
    00000050 0193 0000 ....
    00000054 01AC 0000 ....
    00000058 01C7 0000 ....
    0000005C 0218 0000 ....
    00000060 026A 0000 .j..
    00000064 0284 0000 ....
    00000068 02B8 0000 ....
    0000006C 02EF 0000 ....
    00000070 033F 0000 .?..
    00000074 0374 0000 .t..
    00000078 03AA 0000 ....
    0000007C 0000 0000 ....
    00000080 4441 5431 DAT1
    I am not sure what the 0004 and 000D are about- I would guess markup but as you will see later those values are not your standard text pointers.

    the DAT1 section starts at 80 hex with each section ended with 0000 (no thought to alignment by the looks of things) so doing a search for 0000
    0x00000086 0x00000002
    0x00000092 0x00000002
    0x000000E1 0x00000002
    0x00000108 0x00000002
    0x00000131 0x00000002
    0x0000017E 0x00000002
    0x00000197 0x00000002
    0x000001B2 0x00000002
    0x000001D7 0x00000002
    0x00000224 0x00000002
    0x0000023D 0x00000002
    0x000002FB 0x00000002
    0x00000315 0x00000002
    0x00000349 0x00000002
    0x00000380 0x00000002
    0x000003D0 0x00000002
    0x00000405 0x00000002
    0x0000043B 0x00000002
    0x0000049B 0x00000002
    0x0000049D 0x00000002

    Not immediately obvious unlike some games but hey this is hacking.
    I am lazy so spreadsheet time.


    For now looking at that run of the same differences between the values and the previous one.

    Pointer at 0034 leads to 00E1
    Pointer at 0038 leads to 0108
    Pointer at 003c leads to 0131
    Pointer values

    It then appears they start counting from the 0012 in the DAT1 section- it was reasonable to think it started at the start of the DAT1 section but that was wrong so I chopped off a bit more to make the pointer line up and 0012 worked. Upon closer inspection it appears as though 0000 might not be the whole story with FF also appearing in the ending sections making the whole arrangement to end a section FF0000.
    It is however not over as the pattern breaks down after a while with some phantom entries- searching for now FF there are two extra pointers pointing at 01c7 and 0218 that are pointing right in the middle of words (in both cases the b in "Unable" is the word). I have no idea what these are (had there been less of them I might have guessed it was something to do with the %d placeholders but there are lots in the file).
    It also means two later FF0000 sections are without pointers- 2 phantom entries and 2 apparent section ends without pointers?

    Also I am curious as to what the first 15 hex bytes do in the DAT1 section- markup perhaps.
    Looking back at the INF1 section 0013 0002 and 0001 before the 0050 (the first pointer) could well be a text start, actual text start and skip the 09 value before the P in the Preparing (09 corresponds to tab in ascii- ) however for a straight up translation you probably do not need to worry as you are likely changing just text and if it needed to be red and blinking in English it probably needs to be red and blinking in Spanish. If however you were modding the game to do something different total conversion or making a fan game with the engine you would need to experiment and find out.

    I did a quick check on MsgStatic.bmg and the 04 and 0d returned but this time the extra pointers were a lot more and were often 3 bytes from the last one. MsgResStaff.bmg on the other hand saw all the pointers hold with no extras and just for giggles it seems MsgResOther.bmg was using 00 in text and as section endings.

    On the face of it you have some fairly standard offset pointers but there is something else going on here that needs to be figured out. Hopefully I have pointed you in the right direction though.
  3. Zacklol

    Zacklol Member

    Oct 22, 2009
    Thanks for your help, well all I want to do is make the translation as good as I can, and to do that I need more space, that's why I want to recalculate the pointers, and with your data I tried but I only got the rom crashed. -.- I guess I still don't get it so much but thanks I'll keep trying to play with the pointers, I hope to be luckier sometime and I'll be studying what you said.