а есть возможность максимально развернуть цикл (допустим на 128ой странице) ?
Вид для печати
Теоретически - да, практически же, с текущим раскладом памяти, - очень сложно, придётся всё перетасовать в памяти. Я бы не взялся. Я сделал набросок цикла, бросающего экран через стек, который наверняка влезет по памяти, но получилось не очень хорошо - 15 с копейками тактов на байт, не стоит мороки.
Никто не в курсе, где можно посмотреть как люди эффективно бросали буферы стеком, но в цикле, не разворачивая? у меня обвязка какая-то сложноватая выходит.
introspec, Target Renegade, Batman, Robocop
В Target Renegade и в Robocop уже нашёл, а в Batman не вижу. Который из бетменов имеется в виду, - тот, который изометрический толстый мужик в костюме (в нём не вижу), или тот, который сделан как следует, или тот, которого кодил Джаффа Смит?
ОК, нашёл в многосерийном. jerri, очень большой респект за список: в нём мало того, что всё в тему, так ещё и степень развёрнутости цикла (= требования к памяти) идёт по нарастающей. С такими знаниями нужно делать энциклопедию.
introspec, а как коллизии сделаны не смотрел?
(интересна даже не конкретная игра, а общий принцип)
---------- Post added at 22:30 ---------- Previous post was at 22:30 ----------
introspec, кстати, а можно корабль ГГ сделать с маской? Или хотя бы по OR?
Скролл в хроносе, я думаю, уже больше не ускоришь; можно, конечно, развернуть цикл чуть больше, но без какой-то суперидеи там сейчас более-менее предел скорости. Newart знал что спрашивал; если придумать как быстро делать rld без rld есть шанс на ускорение. С ходу, таблицами, по-моему не выходит. Именно поэтому скролл в быстрых скроллерах никто собственно скроллом, насколько я знаю, не делает.
А мой вопрос был про второго по величине "слона" в хроносе - код для переброски теневого экрана на основной. Со скроллом это не связано. Теоретический предел такой переброски - около 13 тактов на байт, а схема в хроносе даёт более 16. Т.е. можно сберечь ещё где-то процентов 15% на переброске экрана, что даст дополнительное общее ускорение где-то процента на 3.
3% едва ли стоят возни сами по себе, но быструю переброску, если она по-настоящему быстрая, позволит отрисовать экран до луча (или за лучом), что позволит воткнуть halt и привязать движок хроноса к кадровому прерыванию. Это даст ту же скорость, что была в классической игре с багом, но уберёт мерцание и артефакты.
---------- Post added at 19:46 ---------- Previous post was at 19:37 ----------
Коллизии специально не смотрел, но обыкновенно, общим принципом будет сначала "коробка", а потом, если коробки пересеклись, логическое И, напрямую или по маскам. Кронос, я заметил, делает эти операции в линейном буфере. Труба в нижних 7 строках экрана находится как бы "перед" буфером, корабль может лететь за трубой. Хронос скроллит экран за трубой, я хотел убрать этот скролл, чтобы сберечь тактов, но корабль начал сталкиваться с внешне невидимыми предметами в буфере - очевидно, следами несдвинутых спрайтов.
Наложить корабль по маске тривиально; непонятно, почему авторы это не сделали - у них была свободная память для экрана под кораблём; раз у них нет привязки к прерываниям, у них не было и ограничений по скорости. Но встроить это в движок мне будет нелегко, т.к. я не понимаю как следует порядок отрисовки. Без этого знания можно ткнуться наугад и обломиться.
Разобрался в правильной технике. Забавно, что это тоже, в своём роде, змейка. Увы, 13.5-14 тактов в Хроносе не выйдет, а разгадка одна - линейный буфер. Мне и раньше линейный буфер казался сомнительной идеей, а вот подоспел и пример, где на нём теряются тысячи тактов, исключительно ради сомнительного удобства программиста.