Зачем разделять? Это только усложнит.
Псевдокод:
Local entityKind$ ;чтоб знать кому параметры устанавливать, можно int-ом сделать
Local bReadParams% ;флаг - состояние чтения ключевых слов (false) или параметров (true)
Local strLine$, cmdName$, ;текущая строка, считанная из файла, имя параметра
Local tree.TTree ;ссылка на текущее создаваемое дерево, и так перечисляешь здесь все возможные типы создаваемых объектов. по хорошему тут должен быть тип базового класса, но классов тю-тю в блитце
Local entity% ;можно один указатель на все создаваемые модельки сделать, и его присваивать
Dim cmdParams$(0) ;пустой пока, сюда будем вставлять параметры типа x,y,z. приходится делать глобальный массив, т.к. в блитце нельзя возвращать массив из функций, массивы всегда глобальные. чтоб освободить память пишешь в "любом" месте Dim cmdParams$(0) - размер ноль.
................
strLine = ReadLine(file)
If(bReadParams = False) ;если не параметры, то ключевые слова ищем
If(strLine = "tree {")
;тут создаём например
tree = New TTree
entityKind = "tree"
bReadParams = True ;дальше будем параметры читать
strLine = ReadLine(file) ;чтоб не пропускать цикл сразу следующую строку читаем
EndIf
If(bReadParams = True)
cmdName = GetCmdName(strLine) ;возвращает значение до символа "=", твоя функция
If(cmdName = "}") ;параметры кончились
If(entityKind = "tree")
tree\ent = entity ;присваиваем дереву
Else If(.....)
EndIf
entity = 0 ;временного объекта теперь нет, он стал деревом :)
Else ;читаем общие для всех моделек параметры
GetCmdParams(strLine, ",") ;твоя функция, разбивает то что после "=" по символу,
;идущему вторым параметром функции, и записывает в массив, размерность массива внутри функции переопределяется в зависимости
;от количества найденных символов-разделителей
;например для параметра "model" массив будет размерностью 1 и содержать путь к модельке (например, ты можешь хоть чё вставить)
If(cmdName = "model")
entity = LoadMesh(cmdParams(0))
EndIf
;
If(entity <> 0)
Else If(cmdName = "position")
PositionEntity entity,Float(cmdParams(0),Float(cmdParams(1),Float(cmdParams(2)
Else If(cmdName = "scale")
ScaleEntity entity,Float(cmdParams(0),Float(cmdParams(1),Float(cmdParams(2)
Else
;и т.д.
EndIf
EndIf
;плюс проверка наличия индивидуальных параметров, присущих только деревьям (и другим уникальным объектам)
If(entityKind = "tree")
If(cmdName = "enable_wind") ;воздействует ли ветер
tree\bWindEnable = Int(cmdParams(0))
EndIf
EndIf
EndIf
EndIf
EndIf