procedure ChangeFrontImages(oldimage, newimage: int);
var
w, h, x, y: int;
neko: PSprite;
begin
w:=strtoint(GetSystemVariable('bricks_x'))+1; // Узнаем кол-во бриков по X
h:=strtoint(GetSystemVariable('bricks_y'))+1; // Узнаем кол-во бриков по Y
for x:=0 to w-1 do // От нуля до конца всех бриков по X делаем...
for y:=0 to h-1 do // От нуля до конца всех бриков по Y делаем...
if GetBrickStruct(x, y).image=oldimage then // Проверяем ID брика и если ещё не изменено то...
begin
// VTDb_FreeMem;
neko := frontSprites.AddSprite; // Добавляем фронт спрайт
neko^.ImageNumber := 48; // Берём картинку палитры (48)
neko^.X := x*32+16; // Назначаем координату X картинке
neko^.Y := y*16+8; // Назначаем координату Y картинке
neko^.SpriteType := 1; // Ставим тип спрайта (не буду объяснять че это)
neko^.frame := newimage-54; // Кадр (фрэйм) нашей картинки брика (из палитры) - 54 (т.к. 54 брика это итемы кажись)
ChangeBrickImage(x, y, 0, 2); // После того как наложили фронт спрайт брика, удаляем настоящий брик
end;
end; type
PSprite = ^TSprite;
TSprite = record
ImageNumber: integer;
X: single;
Y: single;
AX: single;
AY: single;
angle: integer;
scale: integer;
SpriteType: integer;
StartFrame: integer;
EndFrame: integer;
frame: integer;
prev: PSprite;
next: PSprite;
end;
ПОЛУЧАЕТСЯ ТАК ЧТО ЛИБО СПРАЙТЫ либо ФРОНТ БРИКИ, вместе у них несостыковачка небольшая получается
я уж думаю что может это потомучто в одном случае используется динамический массив а в другом обычная фииговина
я в этом нуб может есть какието тонкости
Добавление спрайта:
xobject: array of PSprite;
if (par1 = 'sp_bg') then
begin
if (par2 <> '') and (par3 <> '') and (par4 <> '') and (strtoint(par2) > 499) and (strtoint(par2) < 950) then
begin
setlength(xobject, 2);
XOBJX:=strtoint(par2);
xobject[XOBJX] := backSprites.AddSprite;
xobject[XOBJX]^.ImageNumber := strtoint(par2);
xobject[XOBJX]^.X := strtofloat(par3)*32+128;
xobject[XOBJX]^.Y := strtofloat(par4)*16+128;
xobject[XOBJX]^.SpriteType := 1;
xobject[XOBJX]^.frame := 0;
end;
end;
Где-то в этой процедуре добавления фронт брика я думаю трабла, по неизвестной причине если использовать кучу фронт-бриков
функции движения спрайтов и вобще спрайтов начинает глючить (при том глючит только при первом запуске, после рестарта всё нормально почему-то)...
Злой баг, ели выследил, теперь думаю какбы пофиксить, т.к вроде процедура написана достаточно логично...
FIXED Bot.dll ! Титан комплекс и прочие карты со спрайтами теперь будут работать нормально без всяких рестартов и затычек !!! FiX качать не надо Трибы все это сделают автоматически за вас
Также тудаже добавил команды sp_rotate & sp_frame & sp_size (че это - читать ниже)