Voldemar0 пишет:Насколько удалось понять: по простому уменьшить силу отскока нельзя, так как столкновение приводит к инвертированию скоростей, причем рост скоростей постоянный, но он перекручивается через разрядность, за счёт чего скорость не растёт бесконечно и даже может уменьшаться. Т.е. нужно вводить некую процедуру сглаживания скоростей (уменьшения по модулю).
Расскажу, как я понимаю схему управления: есть 4 16-разрядных счетчика. То, что лежит в счетчиках, мне кажется, физического смысла не имеет. Можно назвать эти числа "скоростями", но в реальном мире у предмета не может быть одновременно скорости вверх, скорости вниз, скорости влево и скорости вправо.
Есть очередь команд, в которой изначально нули. Стрелка вниз записывает в эту очередь 6 единичек, стрелка влево - 6 двоек, стрелка вправо - 6 троек. Есть процедура, которая эту очередь читает и сдвигает ее на 1 позицию, при этом в хвост очереди записывается нуль. Каждая из цифр (0..3) инкрементит свой счетчик.
Настоящая вертикальная скорость получается после вычитания из "скорости вниз" "скорости вверх", а горизонтальная - после вычитания из "скорости вправо" "скорости влево". Настоящие скорости складываются с текущей вертикальной позицией корабля ($8043, $8042) и горизонтальной ($8041, $8040).
То есть, чтобы убрать движение, нужно приравнять "скорость влево" к "скорости вправо", а "скорость вверх" к "скорости вниз".
Но тут есть засада: корабль-то бьется каким-то одним боком, а скорости придется гасить обе. Это будет странно выглядеть. Кстати, отскок с изменением скоростей, который сейчас есть, тоже выглядит странно: вот корабль летит слева направо, медленно теряя высоту. Он бьется об пол и начинает лететь назад. Но если в реальности мяч так кинуть, он ведь после отскока продолжит лететь вперед, у него только вертикальная скорость изменится.
Чтобы это исправить, нужно знать, с какой стороны корабля было столкновение. Но в игре сделана простейшая проверка, которая возвращает только признак "было столкновение/не было столкновения". Без переделки этой проверки управление не улучшить.
garnizon пишет:А в коде игры, может где-то попадался хоть намек на то, кто автор?
Я даже на более простой вопрос: адаптация это или нет, и то не могу ответить :) Игрушка очень хочет казаться иностранной: все надписи и заставка по-английски, даже клавиши называются SPACE и ESC. Но гугление пока ничего не дало.
В коде есть две интересных строчки: "РАБОТА С ФАЙЛАМИ АГАТ (7-9) wolvskij1986 Г." и
"COPYRIGHT 1979 APPLE COMPUTER INC. ". Есть даже кусок каталога диска. Но как это относится к игре - не знаю. Скорее всего, в коде просто было пустое место и эти строчки - исходное содержимое памяти, то есть к игре они не относятся никак.
С другой стороны, в коде много следов экспериментов: есть вариант кода, использующий прерывания, в процедурах явно все патчено-перепатчено еще до нас :)
И вот еще какая догадка: тут кусок каталога, в нем имена программ UNPACKMOD, UNPACK', UNPACKMODIT. Так могли бы называться программы для распаковки. Так вот, я думаю, что глючный код, типа INC $C03A, мог появиться при распаковке битого архива. А куча патчей в коде - это могла быть попытка заставить работать неправильно распакованную программу.