Warning: Slightly Long Post
Okay, I see you made an attempt, which I am extremely happy about and applaud you, partly proves my theory about this place wrong
1.Making new GameMap.dat
So I'll start off with the code I used to generate a new GameMap.dat
Code:
class Program
{
static string ConquerPath = @"C:\Program Files (x86)\Conquer 4351\";
static string OutputPath = @"C:\";
static string NewMapPath = @"map/map/sf-parade.DMap";
static void Main()
{
using (BinaryReader Reader = new BinaryReader(new FileStream(ConquerPath + @"ini\GameMap.dat",FileMode.Open)))
{
int TotalMaps = Reader.ReadInt32();
using (BinaryWriter Writer = new BinaryWriter(new FileStream(OutputPath + "GameMap.dat", FileMode.OpenOrCreate)))
{
Writer.Write((int)(TotalMaps + 1));//Write total maps + 1 (our new map)
Writer.Write((int)(1844));//Our new map id, maybe we can specify our own?
Writer.Write((int)(NewMapPath.Length));//length of dmap file path
Writer.Write(Encoding.ASCII.GetBytes(NewMapPath));//Path to dmap file
Writer.Write((int)(256));//Puzzle Piece Size ([B]Not Always[/B] 256)
for (int i = 0; i < TotalMaps; i++)//Write existing maps into GameMap.dat
{
int nLength;
Writer.Write(Reader.ReadInt32());
Writer.Write(nLength = Reader.ReadInt32());
Writer.Write(Reader.ReadBytes(nLength));
Writer.Write(Reader.ReadUInt32());
}
}
}
Console.WriteLine("Done!");
Console.ReadLine();
}
}
ConquerPath is the path to your client version, in my case, 4351
OutputPath is basically where it puts the new GameMap.dat (Don't output it to your ini folder, place it somewhere else so you can copy + paste it in).
NewMapPath is the path to the DMap file of the map your adding, I'll explain more at the foot of my post.
Note: PuzzlePiece is not always 256, I'll explain more on how to get it at the footer
In regards to specifying our own MapID for the map, I'm not sure, I don't see why not though, I shall experiment later. (Not really sure why you would want to anyway).
2.Replacing Files
Alright, so now you should have copied + pasted your new gamemap.dat into the ini/gamemap.dat folder, you should now get an error in the debug log about map/map/sf-parade.DMap, is missing, simply go to that location in your official installation and copy + paste it in, I'll upload the files anyway.
Then next you'll get an error about the minimap not existing in the minimap.ani, simply open ani/MiniMap up with a text editor, then do the same in your 2.0 installation, find the index it's missing (our case: 1844) then copy + paste it in.
Code:
[1844]
FrameAmount=1
Frame0=data/MiniMap/sf-parade.jpg
Now we need to get the actual jpg file, so go to the Frame0 location and copy + paste it from your official to your client.
Now you need the puzzle file, which unfortunately doesnt seem to appear in the debug log, luckily for us, the name is the same as the map, so just go into your Conquer Installation, map/puzzle/ and copy + paste the sf-parade.pul into your client.
To proceed, we have to login and go to the map, to trigger map object errors, e.g. error in the debug log about a missing tree "n-tree1.tga" in Mapscene.ani, do the same, open up mapscene.ini as a text, copy the value into your client
Code:
[n-tree1.tga]
FrameAmount=1
Frame0=data/map/mapobj/newbie-v/tree/tree/n-tree1.dds
Then do the following for the other ani errors, tedious work..., also make sure you actually copy the dds files into the correct place too
Then that should be it, the map should be working perfectly

, as you can see its a lot of tedious copy + pasting, but if the map is good, it will be worth it in the long run.
Result = sf-parade on 4351 client:
I may actually make an application which you can check which maps you would like to import from the official installation, it will then retrieve all values for you, create the gamemap, create the required files/folders etc.
To further elaborate on the PuzzleFile, it's not always 256, so basically by utilising the structure of gamemap.dat you will have to find the value from the official.
Hope this helps someone, it's obviously generic so you can do it for pretty much any map, I'll try to help people with problems, hope it isn't too complicated and, good luck