[Technical][DC] Samba de Amigo 2000

Discussion in 'Sega Dreamcast Development and Research' started by Renard, Oct 3, 2018.

  1. SMiTH

    SMiTH Member

    Joined:
    Mar 5, 2013
    Messages:
    18
    Likes Received:
    9
    nice work renard!
    :)
     
  2. FunKing

    FunKing Member

    Joined:
    Sep 23, 2013
    Messages:
    14
    Likes Received:
    35
    After much longer than I had anticipated, I've finally annotated almost all files in the game, including transcriptions of Japanese texts and their respective English translations. You can also see where are stored the song names for the music selection menus.

    This is (and hopefully more in the future will be) available on GitHub.

    Next I'll try to write a few scripts to patch the game using a simple GUI.
     
  3. fafadou

    fafadou Gutsy Member

    Joined:
    Aug 3, 2016
    Messages:
    424
    Likes Received:
    148
    Fantastic !!
     
    LuizNai likes this.
  4. Renard

    Renard Member

    Joined:
    Aug 10, 2014
    Messages:
    13
    Likes Received:
    19
    Woah! That file list is insanely detailed, that's amazing work!
     
    LuizNai likes this.
  5. yzb37859365

    yzb37859365 Spirited Member

    Joined:
    Jul 14, 2013
    Messages:
    182
    Likes Received:
    122
    Very powerful, hard work:D
     
    LuizNai and fafadou like this.
  6. corrigo

    corrigo Active Member

    Joined:
    Mar 1, 2009
    Messages:
    39
    Likes Received:
    15
    This is great ! Keep up the good work !
     
    LuizNai and fafadou like this.
  7. FunKing

    FunKing Member

    Joined:
    Sep 23, 2013
    Messages:
    14
    Likes Received:
    35
    I've just released gditools3, a Python 3 version of gditools.

    [​IMG]

    This allows you to browse the contents of GDI images, extract files, preview text and image files, and play media files with an external media player (such as ffplay or VLC).

    I tested it briefly on Windows and Linux, and the only known issue is that it runs considerably slower on Python 3 than on Python 2. I might improve it in the future, though. Feel free to send pull requests for any improvements or bug fixes. Be warned: I just tested the program with one image (Samba De Amigo Ver. 2000 v1.001 (2000)(Sega)(NTSC)(JP)[!]).

    The GUI is written in Python! It works, but is somewhat limited at the moment (e.g., no PVR nor JPG preview). I used the PySimpleGUI library, and that's where I've spent most of my development time: requesting and adding features, fixing bugs and testing that library (and my GUI). Writing such a simple GUI in Python is very fun and addictive!

    Anyway, next I'll jump to the script to patch the image. I have several ideas, and as soon as I get them working I'll let you know.
     
  8. yzb37859365

    yzb37859365 Spirited Member

    Joined:
    Jul 14, 2013
    Messages:
    182
    Likes Received:
    122
    It looks great. I look forward to your update.:D
     
    LuizNai likes this.
  9. Mrneo240

    Mrneo240 Peppy Member

    Joined:
    Sep 15, 2017
    Messages:
    318
    Likes Received:
    260
    VER20000.ADX is almost certainly padding.

    Maybe it has something worthwhile but the I bet not.
     
    LuizNai likes this.
  10. yzb37859365

    yzb37859365 Spirited Member

    Joined:
    Jul 14, 2013
    Messages:
    182
    Likes Received:
    122
    VER20000.ADX and SAMBADEAMIGO.BIN
    It's the same useless file. It's just different versions.
     
    fafadou and LuizNai like this.
  11. Renard

    Renard Member

    Joined:
    Aug 10, 2014
    Messages:
    13
    Likes Received:
    19
    Some quick update (well, nothing new). I'm currently in the process of moving to a new place and am currently not able to follow-up on this.
     
    LuizNai likes this.
  12. iiAlexLiveii

    iiAlexLiveii Rapidly Rising Member

    Joined:
    Sep 24, 2015
    Messages:
    88
    Likes Received:
    38
    OK! Thanks for letting us know :)
     
    LuizNai likes this.
  13. FunKing

    FunKing Member

    Joined:
    Sep 23, 2013
    Messages:
    14
    Likes Received:
    35
    Good luck with your moving, Renard - I know how disrupting it can be...

    Happy new year, everyone! I've got some news, too. I didn't have time to work on this project until yesterday, but I've achieved some progress. Here's my workflow, after unpacking the Samba de Amigo ver. 2000 GDI:
    1. Make changes to any file
    2. Rebuild GDI
    3. Run it with Null DC
    Replacing audio (.ADX):
    If you replace any .ADX file, it just works. That's the easiest part so far. FYI, it seems any stage length is defined not by the audio duration, but by the Amigo (.AMG) file.​

    Replacing Amigo files (.AMG):
    Directly bringing a Wii .AMG file to the Dreamcast (e.g., copying BailaMe.amg over SAMBA_DE_JANEIRO.AMG) crashes Null DC.

    So I inspected the Amigo files. Long story short, Dreamcast .AMG files are little endian, while Wii files are big endian. A quick conversion allowed me to play Baila Me from the Wii version on the Dreamcast emulator! I could play "original" Easy, Normal and Hard modes, but without any background image or animation. Also, playing in "hustle" mode crashes Null DC after a couple of seconds.



    This means I have to investigate more the file format. It has a simple structure: a block name (4 chars), block length (dword) and block content. In a typical Samba de Amigo ver. 2000 .AMG file, these are the blocks found, in order:
    |HEAD|CAM_|EASY|EASY|HARD|HARD|DA_E|DA_E|DA_H|DA_H|DA_N|DA_N|DA_S|DA_S|ACT_|NORM|NORM|ACT_|ACT_|ACT_|SUPR|SUPR| END_ |

    I've written a very simple parser and already understand most of the data on HEAD, EASY, NORM, HARD, SUPR, DA_? and END_ blocks. I guess CAM_ (camera?) and ACT_ (actors?) might be related to the background animations. DA_? blocks are for hustle mode.

    Wii files are basically the same, except they also have a ONSH block, which might be related to training modes.

    Sample from parser:
    23,748 VOLARE.AMG [DC]
    HEAD 136 bytes
    00000020 | 32 entries
    00000000 | 0
    00000000 | 0
    000001ED | 493
    000002E4 | 740
    000003DC | 988
    000004D4 | 1236
    000005CC | 1484
    [... 8< ...]
    00001B93 | 7059
    00000000 | 0

    CAM_ 1480 bytes
    0000002E 00000000 00000001 FFFFFE70 00000034 FFFFFF2E FFFFFE70 00000037 FFFFFF24 00000001 00090002 00000190 00000034 FFFFFF2E 00000190 00000037 FFFFFF24 000001ED 00000001 0000006E 00000043 000000A9 00000000 00000046 00000000 000001EE 00050002 FFFFFF92 00000043 000000A9 00000000 00000046 00000000 000002E4 00000001 0000002A 0000008B 00000035 00000000 00000046 00000000 000002E5 00050002 FFFFFFEA 00000037 00000035 00000000 00000046 00000000 000003DC 00000001 00000023 0000003A FFFFFFF8 0000000F 0000004D FFFFFFDD 000003DD 00050002
    [... 8< ...]

    EASY 1400 bytes
    00000000 | Player 0
    000000E1 | 225 max amigo points
    000000AC | 172 commands
    0000012C 00000123 | frame 300 ( 5.00 s), cmd 00000000000100100011 begin continuous shake, medium left, medium right
    000001AF 00000128 | frame 431 ( 7.18 s), cmd 00000000000100101000 end continuous shake, medium left, medium right
    000001ED 00000121 | frame 493 ( 8.22 s), cmd 00000000000100100001 normal shake, medium left, medium right
    0000020C 00000121 | frame 524 ( 8.73 s), cmd 00000000000100100001 normal shake, medium left, medium right
    0000022B 00000121 | frame 555 ( 9.25 s), cmd 00000000000100100001 normal shake, medium left, medium right
    0000024A 00000121 | frame 586 ( 9.77 s), cmd 00000000000100100001 normal shake, medium left, medium right
    00000269 00000101 | frame 617 ( 10.28 s), cmd 00000000000100000001 normal shake, medium right
    00000288 00000101 | frame 648 ( 10.80 s), cmd 00000000000100000001 normal shake, medium right
    000002A7 00000101 | frame 679 ( 11.32 s), cmd 00000000000100000001 normal shake, medium right
    000002C6 00000101 | frame 710 ( 11.83 s), cmd 00000000000100000001 normal shake, medium right
    000002E4 00000121 | frame 740 ( 12.33 s), cmd 00000000000100100001 normal shake, medium left, medium right
    00000303 00000121 | frame 771 ( 12.85 s), cmd 00000000000100100001 normal shake, medium left, medium right
    00000322 00000121 | frame 802 ( 13.37 s), cmd 00000000000100100001 normal shake, medium left, medium right
    00000341 00000121 | frame 833 ( 13.88 s), cmd 00000000000100100001 normal shake, medium left, medium right
    00000360 00000021 | frame 864 ( 14.40 s), cmd 00000000000000100001 normal shake, medium left
    [... 8< ...]

    I'm documenting everything to publish a more complete report later. Unfortunately, I'll be very busy on the next weeks, so I might resume working on this only next month...

    []s!

    Edit: Doh! Just now I've seen this thread again and noticed Renard already found out about endiannes, hustle mode, etc. (facepalm)! I guess editing the first thread is not such a good idea (we get no notification of editing, only about new replies). Anyway, at least I can confirm what he has found. :p
     
    Last edited: Jan 5, 2019
    americandad, Shiva, Renard and 2 others like this.
  14. fafadou

    fafadou Gutsy Member

    Joined:
    Aug 3, 2016
    Messages:
    424
    Likes Received:
    148
    congratulations for this :)
    Well done for thinking to change format little endian to big endian and importing wii files !
    It's really amazing.

    do you think it will possible to import some picture from the standard version of samba de amigo in order to translate a lot the ver. 2000 ?
     
  15. FunKing

    FunKing Member

    Joined:
    Sep 23, 2013
    Messages:
    14
    Likes Received:
    35
    Fortunately, the endianness change was a bit obvious: the file format uses a FourCC like scheme, so on Dreamcast the first block is "HEAD", while on Wii it is "DAEH"... :)

    What is giving me trouble now is figuring out the hustle mode commands (it seems there are 754 variants!), as well as the meaning and format of HEAD, CAM_ and ACT_ headers. BTW, I'm writing a Kaitai Structure .KSY file, so I can already parse most of the .AMG files in several programming languages.

    My plan is to use the Wii version for the translation (since it has Love Love and Hustle mode, not available in the first game), and (optionally) use the first game to fill in anything missing (specially text about controllers, VMU, etc.). Some pictures could be made "on the fly" for custom songs, too.
     
  16. Renard

    Renard Member

    Joined:
    Aug 10, 2014
    Messages:
    13
    Likes Received:
    19
    Fantastic work! I did not even realize what the "duplicate" difficulty blocks were for, now I see that it's obvious - players simply have different charts to play in multiplayer mode. Maybe the file format was designed with the possibility of having 4 simultaneous players in its early stages, even? I was also looking at a "BPM"-style information in the .AMG headers (à la Stepmania), or at least some sort of timing indicators; I didn't think it could be frame-based.

    I'm very confused about the order of the difficulty blocks, too: Easy / Hard / Normal / SuperHard? I'm guessing everything starting with DA_ is related to the Hustle mode, that they added in-between existing difficulties when expanding the file format; but the fun part is that v2000 files can also be injected into the regular Samba 1, and this game will not crash despite the extra pieces interleaved there.

    When it comes to translations, I considered getting in touch with japanese-cake to see if he could lend a hand with such a task - I've been following his work on other games and the process seemed relatively similar. Translating the game is totally possible, but there's no raw texts (only textures) making it a bit more time-consuming. My initial idea was to steal the graphic assets from Samba 1 to inject them in Samba 2000, but this approach would indeed leave a lot of translations missing, or would require to create quite a lot of new textures. Converting the Wii assets seems to be the best approach indeed :)
     
    FunKing and fafadou like this.
  17. fafadou

    fafadou Gutsy Member

    Joined:
    Aug 3, 2016
    Messages:
    424
    Likes Received:
    148
    @truemaster1 noticed a lot similar things between two version. I don't know if he still around here and if he may could help.

    It's an amazing idea to pick in the wii version and the standard version both to import some translate. I f you can add all the wii musics, it will be clearly fantastic :)

    Nothing is simple in hack ^^ Well done
     
    truemaster1 likes this.
  18. truemaster1

    truemaster1 Gutsy Member

    Joined:
    Nov 10, 2015
    Messages:
    483
    Likes Received:
    193
    happy new year to everyone. im here. i visit at least 1 time everyday:) so for me to undreastand you try to port files to a dc game from its wii counterpart? this will be tricky replacing files probably will not work or semi work like missing stuff. different cpus different os with almost nothing at common. the dc will confuse and crash or buged because cant undreastand correct a file made for wii. also if the wii version has more higher textures maybe the game is unchandled for dc. wii is more the power of the original xbox.
     
    Last edited: Jan 7, 2019
  19. fafadou

    fafadou Gutsy Member

    Joined:
    Aug 3, 2016
    Messages:
    424
    Likes Received:
    148
    Hi, happy new year @truemaster1 , I'm very glad to see you are still following the forum :)

    It's not exactly import the game counterpart but some pictures in english text than japanese and some musics with the actions to do.
    For me the power of wii is disconnect of that.
    Of course there is a huge work to convert the wii picture to pvr dreamcast format, convert the music format to adx (probably ?) and the actions to do with controller (but they have already really progress very well on that part as you can see on the video ).
    They don't want to import some 3d models or animations, if I understand well. And probably they are exactly the sames.

    You're right it will be easier to import in first the pvr from samba de amigo to samba de amigo vers. 2000 and take only the missings from the wii version.

    I remember you had a look in the datas of the both games on dreamcast, maybe you have an opinion and advices in order to help them.
     
  20. FunKing

    FunKing Member

    Joined:
    Sep 23, 2013
    Messages:
    14
    Likes Received:
    35


    I've managed some improvements. This time the preview song is also converted, the "to avoid hitting maracas" audio message is in English, background animation is "mostly" correct and gameplay works eve in hustle mode (that previously was crashing the Null DC emulator).

    I've also made available Amigo Explorer, the script I'm writing to explore and convert Amigo (.AMG) and other files. You can try it yourself if you have Python 3.6 and install the Kaitai Struct Python module. You'll also need a way to pack / unpack your GDI file, a unpacked copy of the Wii game, some other misc. tools (e.g., ffmpeg) and some patience (it is rough around the edges).
     
    truemaster1 likes this.

Share This Page