Discussion in 'Sega Dreamcast Development and Research' started by Renard, Oct 3, 2018.
nice work renard!
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.
Woah! That file list is insanely detailed, that's amazing work!
Very powerful, hard work
This is great ! Keep up the good work !
I've just released gditools3, a Python 3 version of gditools.
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.
It looks great. I look forward to your update.
VER20000.ADX is almost certainly padding.
Maybe it has something worthwhile but the I bet not.
VER20000.ADX and SAMBADEAMIGO.BIN
It's the same useless file. It's just different versions.
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.
OK! Thanks for letting us know
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:
Make changes to any file
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...
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.
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 ?
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.
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
@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
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.
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.
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).
Separate names with a comma.