============================================================ Supaplex Amiga <-> DOS converter 1.0 Balthasar Szczepański ============================================================ 1. What is this program? 2. How to use the program? 3. Limitations 4. History of changes 5. File format 6. Files 7. Contact information ============================================================ 1. What is this program? This is a program that can transfer player informations and levels from Amiga Supaplex to Dos Supaplex or from DOS Supaplex to Amiga Supaplex. ============================================================ 2. How to use the program? The program file is supadc.exe. The first command line parameter determines type of conversion. ad - Amiga -> Dos conversion da - DOS -> Amiga conversion l (optional) - transfer levels too 2 digit number - number of the levelset All possibilities: ad Amiga-DOS, player info only, default levelset da DOS-Amiga, player info only, default levelset adl Amiga-DOS, pl.info + levels, default levelset dal DOS-Amiga, pl.info + levels, default levelset adxx Amiga-DOS, player info only, levelset xx daxx DOS-Amiga, player info only, levelset xx adlxx Amiga-DOS, pl.info + levels, levelset xx dalxx DOS-Amiga, pl.info + levels, levelset xx The second command line parameter is the Amiga path, the third is the DOS path. To use the current directory write a '.'. Example: supadc dal21 .\amiga e:\supaplex\spfix ============================================================ 3. Limitations Amiga and DOS versions don't store the informations the same way and sometimes it's not possible to transfer them without changes. The maximal playing time in Amiga Supaplex is 999:59:59. In DOS Supaplex It's 255:59:59. Any time greater than 255:59:59 will be changed to 255:59:59. The maximal level number and the maximal player position in Amiga Supaplex is 999. In DOS Supaplex It's 113. Player position greater than 113 will be changed to 113. The game displays it as 999 anyway. In Amiga Supaplex only 3 skipped levels are possible. In DOS Supaplex it's possible to skip all levels (but only by cheating). The 4th skipped level AND EVERY NEXT LEVEL will be set as unsolved. It's possible that you have the Amiga Supaplex files in an ADF file. The program doesn't work on ADFs (yet?). You have to extract the files from the ADF. ============================================================ 4. History of Changes 1.0 This is the first version. ============================================================ 5. File format Amiga files: The data is big-endian! PHIL_00 Undecoded PHIL_01 Undecoded PHIL_02 0-321B7 Undecoded 321B8-32DDB Level name list 32DDC-333FF Undecoded struct LevelList_Entry//28 bytes { char Level_Number[3]; char Space; char Name[23]; char LineFeed; }; struct LevelList//3108 bytes { struct LevelList_Entry LevelList_Entry[111]; }; PHIL_03 Player info struct player_ranking //22 bytes { char position[3]; char space1; char name[8]; char space2; char time[9];//xxx:xx:xx }; struct player_list //10 bytes { short number;//starting from zero char name[8]; }; struct player_status //22 bytes { unsigned char reserved; //0x01 unsigned char status; //0x0F - solved everything //0x01 - reached 111 but has // skipped levels //0x00 - didn't reach 111 unsigned short skipped[3];//skipped level numbers char name [8]; unsigned short hours; //999 max unsigned char minutes; // 59 max unsigned char seconds; // 59 max unsigned short position; //number of level }; struct hall_of_fame //18 bytes { char name[8]; char space; char time[9];//xxx:xx:xx }; struct player_info //2048 butes { struct player_ranking player_ranking[20]; struct player_list player_list [20]; struct player_status player_status [20]; struct hall_of_fame hall_of_fame [3]; unsigned char unused_zero [914]; }; PHIL_10 - PHIL_7E Levels struct amiga_level //2048 bytes { struct dos_level actual_level;//the same as in DOS Supaplex unsigned char unused[512]; }; DOS files: The data is little-endian! LELEL.LST level name list struct LevelList_Entry //28 bytes { char Level_Number[3]; char Space; char Name[23]; char LineFeed; }; struct LevelList //3108 bytes { struct LevelList_Entry LevelList_Entry[111]; }; PLAYER.LST Player info struct Player //128 bytes { char Name [ 8]; unsigned char Zero; unsigned char Hours; //255 max unsigned char Minutes; // 59 max unsigned char Seconds; // 59 max unsigned char Levels[113];//111 for levels, 2 unused //0 - unsolved //1 - solved //2 - skipped unsigned char Reserved1; //0 unsigned char Startup_Level; unsigned char Reserved2; //1 - all levels solved //0 - not all levels solved }; struct PlayerList //2560 bytes { struct Player Player[20]; }; HALLFAME.LST Hall of fame struct ShortPlayer //12 bytes { char Name [ 8]; unsigned char Zero; //everything as in player.lst player unsigned char Hours; unsigned char Minutes; unsigned char Seconds; }; struct HallFame /36 bytes { struct ShortPlayer ShortPlayer[3]; }; LEVELS.DAT 111 levels 1536 bytes each. Will not be described here because the program doesn't decode this. Amiga Supaplex uses the same format ============================================================ 6. Files Amiga: supadc 19860 supadc.info 835 supadc.doc 6326 supadc.doc.info 845 supadc.c 14345 supadc.c.info 713 DOS: supadc.exe 24222 supadc.txt 6192 supadc.cpp 14566 Win32: supadc32.exe 45065 supadc32.txt 6203 supadc .cpp 14566 ============================================================ 7. Contact information balthasar_s@interia.pl rowerynaksiezycu@gmail.com www.baltixy.w.interia.pl ============================================================