Inheritance route seems to work ok. It was actually quite easy to change it. All I did was change theme creation switch-case to a virtual function Create_Structure which chooses from Level (base class) themes and then started to inherit level types to derived classes. The first one is the island. Another change was the way levels are created, because you need to create Island type to call the proper virtual function obviously. Since there were only two 'new Level' calls it was easy to create a factory routine for them:
Level *Game_World::Get_New_Level_From_Factory(int gen_id, int set_id, int theme)
{
T_Level_Theme t(theme);
const int w=t.Get_Width();
const int h=t.Get_Height();
Level *rv;
switch (theme)
{
case thIsland: rv=new Island(gen_id, set_id, w, h); break;
default:
rv=new Level(gen_id, set_id, theme, w, h);
break;
}
return rv;
}