Насчёт пустых боксов, я конечно не мастер в питоне, но если можно детектить текстдравы с надписью _ (пустой текстдрав для квадратика) то можно сделать очень кайфовую тему
Программа выдает вот такое значение, я сделал небольшой квадрат посередине экрана.
Первые 2 значения (321 186) - позиция на экране, все гуд
3 значение - я так понимаю оно не играет никакой роли ( в пустом боксе) пишем 0
4 значение - это у нас TextDrawTextSize, второе число (например TextDrawTextSize(PublicTD[0], 360.000000, 90.000000); мы пишем просто 90)
5 значение у нас фонт, ну допустим будем по базе делать 2 алигмент по середине
6 значение - опять таки не играет роли, ставим 0
7 значение - TextDrawLetterSize(PublicTD[0], 1.000000, 12.000000); берем тоже 2 число, тоесть 12, потом пишем цвета, автоматом можно опять таки 0xFFFFFFFF в обоих случаях, и в конце добавить нули в аутлайнах всяких блаблабла
А в самом тексте писать _, а не пустоту)
Вывод программы
0 321.000000 186.000000 12.000000 90.000000 50 2 0 0 -1
Рабочий бокс в кб:
0 321 186 0 90 2 0 12 0xFFFFFFFF 0xFFFFFFFF 0 0 2 0 -1 _