aureli0, попробуй сделать версию без Lib_game, не в обиду Pilgrim'у, её проблематично использовать в более менее сложных играх.
А на счёт чтения базы могу посоветовать код из своего Сталкера, он конешно требует переделки, но всё же лучше, чем посимвольное чтение))
делал для чтения внутримидлетского xml-файла, но думаю переделать
не сложно будет. Мой вариант считывает любой параметр с текущей строки txt ресурса Res (пример параметра CardName="Мразень", пример считывания name:=reads('CardName'); ), плюс любую строку можно интерпретировать в мидлете как условие или команду(но это надо писать самому).
////////////////////////////////////////////////
/// Требуются 2 глобальных переменных res - для ресурса, и txt - для текущей строки.
//////////////////////////////////////////////////////////////////////////////
Function readI(str:string):integer; // Считывает int-значение параметра str(напр. 'width', 'cost' и др.)
var t:string;
begin
t:=copy(txt,pos(txt,str)+length(str)+2,length(txt));
readi:=stringtointeger(copy(t,0,pos(t,'"')));
end;
Function readS(str:string):string; // считывает значение параметра str как текст
var t:string;
begin
t:=copy(txt,pos(txt,str)+length(str)+2,length(txt));
reads:=copy(t,0,pos(t,'"'));
end;
Procedure skip(n:integer); // пропускает n-1 строк и считывает строку n
var i : integer;
begin
for i:=1 to n do txt:=readline(res);
end;
/////////////// Поиск строки сначала файла
Procedure refind(str:string);
begin
closeresource(res);
res:=openresource('/'+mapname+'.tmx');
repeat
txt:=readline(res);
until(pos(txt,str)<>-1) or (txt='</map>');
if txt='</map>' then txt:='"0"';
end;
/////////////// Поиск строки начиная с текущей.
Procedure find(str:string);
begin
repeat
txt:=readline(res);
until(pos(txt,str)<>-1) or (txt='</map>');
if txt='</map>' then txt:='"0"';
end;
//////////////////////////////////////////////////////
// это пример использования перечисленных функций
/////////////// Загрузка карты mapname
Procedure mapload;
var dat,load,otyp : string; i : integer;
begin
res:=openresource('/'+mapname+'.tmx');
skip(3);
mx:=readi('width'); my:=readi('height');
tw:=readi('tilewidth'); th:=readi('tileheight');
skip(9);
dat:=decode_string(copy(txt,3,length(txt)));
i:=0;
repeat
map[(i)div my+1,(i)mod my+1]:=ord(GetChar(dat,i*4));
i:=i+1;
until (i=mx*my);
skip(4);i:=0;
repeat
i:=i+1;
objname[i]:=reads('name');
otype[i]:=reads('type');
ox[i]:=readi(' x')-tw;
oy[i]:=readi(' y')-th;
if (otype[i]='anim') then
begin
skip(2);
repeat
if reads('name')='frames' then frm[getnum(objname[i])]:=readi('value');
if reads('name')='load' then load:=reads('value');
if reads('name')='mode' then mode[getnum(objname[i])]:=reads('value');
if reads('name')='type' then otyp:=reads('value');
skip(1);
until (txt=' </properties>');
LoadAnim(load,frm[getnum(objname[i])],getnum(objname[i]));
otype[i]:=otyp;
end;
skip(3);
until (txt=' </objectgroup>');
omax:=i;
skip(3);
dat:=decode_string(copy(txt,3,length(txt)));
i:=0;
repeat
rad[(i)div my+1,(i)mod my+1]:=ord(GetChar(dat,i*4));
i:=i+1;
until (i=mx*my);
closeresource(res);
end;
вот пример урезанного xml-файла к процедуре mapload:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map SYSTEM "http://mapeditor.org/dtd/1.0/map.dtd">
<map version="1.0" orientation="orthogonal" width="64" height="64" tilewidth="64" tileheight="64">
<tileset name="LandTiles" firstgid="1" tilewidth="64" tileheight="64">
<image source="LandTiles3.png"/>
</tileset>
<tileset name="RadLevels" firstgid="25" tilewidth="64" tileheight="64">
<image source="RadTiles.png"/>
</tileset>
<layer name="ground" width="64" height="64">
<data encoding="base64">BAAAAAQAAAA.........EAAAABAAAAA==</data>
</layer>
<objectgroup name="objects" width="0" height="0">
<object name="truck" type="car" x="2893" y="2327" width="92" height="65">
<image source="world/truck.png"/>
</object>
<object name="truck" type="car" x="1649" y="3973" width="92" height="65">
<image source="world/truck.png"/>
</object>
<object name="truck" type="car" x="1303" y="2303" width="92" height="65">
<image source="world/truck.png"/>
</object>
<object name="truck" type="car" x="1229" y="3189" width="92" height="65">
<image source="world/truck.png"/>
</object>
<object name="sidor1" type="trader" x="94" y="3054" width="125" height="76">
<image source="world/sidor1.png"/>
</object>
<object name="sidor2" type="trader" x="94" y="3054" width="61" height="98">
<image source="world/sidor2.png"/>
</object>
<object name="electra" type="anim" x="1628" y="2545" width="65" height="62">
<properties>
<property name="frames" value="4"/>
<property name="load" value="st"/>
<property name="mode" value="cycle"/>
<property name="type" value="anomaly"/>
</properties>
<image source="world/electra.png"/>
</object>
<object name="electra" type="anomaly" x="1077" y="2587" width="65" height="62">
<image source="world/electra.png"/>
</object>
<object name="electra" type="anomaly" x="882" y="3244" width="65" height="62">
<image source="world/electra.png"/>
</object>
................
</objectgroup>
<layer name="radiation" width="64" height="64" opacity="0.3">
<data encoding="base64">IgAAACEAAAA...........CIAAAAiAAAAIgAAAA==</data>
</layer>
</map>
А вообще попробуй поюзать библу Lib_xml