Еще один файлик для возможной оптимизации - EG_Sprites_Player вроде это вывод спрайтов игрока.

Код:
	inc ixl
	inc ixl

	ld l,(ix+0)  ;2я строка
	ld h,(ix+1)
	;ld (hl),0
	inc hl
	;ld (hl),0
	inc hl
	;ld (hl),0
	inc hl
	;ld (hl),0
	inc hl
	;ld (hl),0
	inc hl
	;ld (hl),0
	and a
	sbc hl,bc  ;1я строка
	;ld (hl),0
	inc hl
	;ld (hl),0
	inc hl
	;ld (hl),0
	inc hl
	;ld (hl),0
	inc hl
	;ld (hl),0
	inc hl
	;ld (hl),0
Все инструкции LD (HL),0 закомментированы, и там куча пустых строк с ними.
Проверить бы всю строку, если она пустая - зачем щелкать HL, можно сразу переходить на следующую.
И еще, какие-то извращенские методы доставания адреса строк через IX, это жрет много времени =)
Получается, что на каждую вертикальную координату экрана своя таблица адресов?
Сколько ж эти таблицы жрут? Или я не догоняю логику работы процедуры вывода?
Саму процедуру можно ускорить, для начала заменив IX и работу с ним на DE:

Код:
	EX	DE,HL
	LD	E,(HL)
	INC	L
	LD	D,(HL)
	INC	HL
	EX	DE,HL
Выигрыш где-то 20 тактов на переход. Немного, но... либо задействовать DE во втором ускорении ниже.
Второе: в коде куча повторяющихся байт, наиболее частый, вроде, 45. Можно распихать самые частые по регистрам.
Свободных регистров у нас получается три: A, E и D (если оставить IX), либо только A.
То бишь пишем в память не числа, а регистры. Получится строка типа такой (заменив 45 на аккум):

Код:
	ld l,(ix+0)  ;2я строка
	ld h,(ix+1)
	;ld (hl),0
	inc hl
	ld (hl),a
	inc hl
	ld (hl),41
	inc hl
	ld (hl),a
	inc hl
	ld (hl),a
	inc hl
	ld (hl),8
	and a
	sbc hl,bc  ;1я строка
	ld (hl),9
	inc hl
	ld (hl),a
	inc hl
	ld (hl),61
	inc hl
	ld (hl),63
	inc hl
	ld (hl),a
	inc hl
	ld (hl),a

	inc ixl
	inc ixl
Выигрыш тоже небольшой, однако по чуток, да набирается экономия, если еще и адреса из DE брать.