Bes, зачем тебе дефрагментация? Она автоматом при щелчке на кнопку прокрутки влево. Удаление арта корректное есть в коде Феникса. А алгоритмов дефрагментации основных два:
1) До тех пор, пока поиск пустого слота не вернёт ошибку определяем размер сплошного блока за пустым местом (не слотом!) и переносим его влево к сплошному ряду.
2) Проходимся в цикле по всем слотам, при этом Left указывает на текущую левую границу сплошного ряда артефактов, а i - на индекс слота (0..63). Если очередной слот не пустой, то A[Left]:=A[i]; A[i]:=-1; Left++; Иными словами, если слот не пустой, то массив артов в индексе Left получает значение арта массива в индексе i. А слот, на который указывает i обнуляется (или -1 забивается, что вернее).