Comments 9
А есть видео или анимация? Сам играть вряд ли буду, а результат увидеть интересно.
Возможно ли модифицировать игру так, чтобы при увеличенной скорости эмуляции получать больше кадров без ускорения игрового процесса? Давно мечтал о такой модификации Elite.
Эмуляция - она на то и эмуляция, что игра не знает, что еë эмулируют на повышенной скорости. Но то, что вы хотите, возможно, хотя для этого игру надо не ускорить, а замедлить. Механика игры работает так: между каждым кадром координаты кораблей изменяются в соответствии с их скоростями. Если разделить эти приращения координат на 2, то при вдвое увеличенной скорости эмуляции вы получите ту же динамику боя. Но придётся иметь несколько версий игры, под разные множители
А если взять модель 128, то можно набабахать сверхбыструю процедуру копирования из буфера на экран. Я уже сейчас не особо помню как мы это делали в 90-е когда писали демки, но принцип всегда такой: меняем количество памяти на такты. Разворачиваем цикл и пошли копировать с помощью POP + две записи в память, и т.д. (или наоборот два чтения + PUSH, уже не помню). Суть в том, что получалась скорость что-то типа 11 тактов на байт. Пишу всё по памяти, так что могу ошибаться. У нас получалось копировать 4 килобайта за один кадр развертки и ещё на музыку оставалось.
Для этой игры тоже можно сделать подобное. Поскольку пишутся байты не последовательно, а читаются - последовательно, то стек можно использовать для чтения. Пока я вижу, что для отрисовки монстров используется много копипастного кода, для каждого монстра свои процедуры. Есть надежда это оптимизировать и выиграть место для отрисовки всего экрана, оставаясь в 48 кб
А какие демки вы писали? )
Да они все в стол пошли. Вроде даже кто-то из нашей команды всё это свалил в кучу и выпустил потом. Но я не знаю как это называлось.
Одна демка повторяла Balls из Shock Megademo. Но у меня шарики были на весь экран, а не на две трети как в оригинале. Это работало только для 128К, потому что был задействован теневой экран. Главная фича была в том, что теневой экран не требовал копирования 6К. Это освобождало время для копирования трёх других буферов на основной экран. Ну и конечно тайминги имели главное значение, это работало только на клонах без ULA.
Напоминаю как это примерно выглядело, но тут сделано на GD32F450 в рамках освоения работы с дисплеем:
Разгон игры «Fred» для ZX Spectrum