Занятно, но это вызывало беспокойство как у меня, так и у Activision, но предмет беспокойства был разный. Я знал, что не будет проблем с перемещением Корабля по экрану, движок для "смотрящей назад" графики, основанный на ячейках, уже был написан, что подразумевало спокойное окончание работы. Подумайте об этом так… большой черный экран, который вы получаете на старте уровней, где действительно больше места для пуль, оружия, чужих, прокручивающихся звезд и т. п., которые будут в каждом кадре игры, и расстановка всего этого отнимает игровое время. С Большим Кораблем, занимающим большую часть экрана, не было необходимости расставлять большинство из моих звезд, пуль или оружия из-за минимума свободного пространства для перемещения, поэтому они быстро удалялись, а большинство спрайтов, когда на экране находился Большой Корабль, были его пушками.
Добавьте к этому тот факт, что Большой Корабль немного двигается, медленно, по миллиметрам, передвигая себя по экрану и пытаясь раздавить вас. Это означало, что мне нужно было только обновлять позицию Корабля примерно каждую секунду и т. д. В реальности на третьем уровне все работало быстрее, чем на ранних уровнях, нашпигованных чужими. Нет, моя проблема не заключалась в перемещении корабля, а в нахождении места, чтобы поместить ДВА корабля сразу, вмещаясь в то небольшое количество памяти, которое у меня было.
Оглядываясь назад уже с большим количеством опыта, я могу честно спросить себя: "Каким местом ты думал", изначально планируя иметь два корабля: один эталонный и неприкосновенный, а другой разрушающийся и поврежденный. Когда при обстреле корабля разрушались пушки, я планировал вырезать их, очищая графику и заменять на маленькие блоки поврежденного корабля, придавая вид "обстрелянного". К тому времени, когда игрок доходит до конца уровня, большая часть корабля уже будет повреждена так или иначе, поэтому иметь смысл хранить две версии состояния, производя замену всего что угодно, упрощая себе работу. Марк даже зашел так далеко, что обеспечил меня полным комплектом графики двух состояний корабля.
К счастью, просмотр поврежденной версии корабля, натолкнул меня на мысль, и все, что я сделал, это взял его за основу и, убедившись в правильности, наложил пушки и другие спрайты корабля: оружие, выхлопы и т. д. сверху на предварительно поврежденные части. Когда игрок взрывал что-то из них, то спрайт исчезал в облаке пиксельной пыли, без какой-либо помощи с моей стороны.
Чистая версия корабля действительно появлялась, хотя и в специальной демонстрационной версии, которую я подготовил для Сола, предназначавшаяся для отвода глаз. Когда он однажды на неделе зашел в офис, я показал ему очаровательный, чистый, Большой Корабль довольно быстро прокручиваемый по экрану, и когда он заполнил весь экран, внезапно второй Большой Корабль появился сверху и полетел под ним по диагонали вниз, затем третий Большой Корабль появился внизу экрана и двинулся над ними вверх по диагонали. Это объяснялось тем, что так как экран был в основном заполнен символами Большого Корабля и уже не имело значение сколько еще кораблей появится, поскольку отображался только самый верхний символ в знакоместе, а все остальные, находящиеся под ним, просто игнорировались. После этого казалось, что Activision успокоилась и перестала спрашивать меня, как я собирался это сделать, изменив на "когда игра будет закончена"?
На мой взгляд, работа над самыми сложными частями была завершена, так что сейчас осталось лишь утомительно трудиться, чтобы все закончить. Не сказать, что это будет совсем легко, поскольку каждый из уровней имел уникальные элементы, которые должны быть размещены в памяти, а быстрое уменьшение свободного ОЗУ означало, что вы должны постоянно возвращаться назад к уже написанным процедурам, сокращая и оптимизируя их снова и снова. К сожалению, код становился все более и более запутанным, а одна часть подпрограммы дублировала часть другой подпрограммы. Я стал использовать самомодифицирующийся код, чтобы сокращать как байты, так и время выполнения подпрограмм. Подпрограммы имели несколько точек входа, начальные данные упаковывались в полубайты (четыре бита). Я просматривал графику снова и снова, обрезая пиксели, так что система сжатия сохранила несколько байтов тут и там, а когда и это не помогло, понял, что всю симметричную графику нужно обрезать на половину, а затем уже рисовать как зеркальное изображение.