Важная информация

User Tag List

Страница 13 из 14 ПерваяПервая ... 91011121314 ПоследняяПоследняя
Показано с 121 по 130 из 132

Тема: Клад для ZX с оригинальными уровнями, как в Rise Out

  1. #121
    Master
    Регистрация
    30.11.2016
    Адрес
    г. Москва
    Сообщений
    514
    Спасибо Благодарностей отдано 
    160
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Просто пожаловаться зашел.

    Все это время я тупо пытаюсь разобрать дизасм игры. И это чудовищно. Куча бессмысленных операций, повторы одного и того же, топтания на месте.

    Ну, вот свежайший пример: код в одном месте осуществляет вызов подпрограммы (call), которая сложнейшими долгими вычислениями, с применением специально записанной в коде программы константы 0 (да, константа со значением ноль, прямо в середине кода, в виде двух нопов - код эту константу использует в качестве одного из слагаемых), вычисляет адрес возврата из этой подпрограммы, а затем торжественно осуществляет безусловный переход по этому адресу.
    И я бы сказал, что проще было бы взять адрес возврата из стека, куда он автоматически помещается при вызове подпрограммы. И что его можно было бы и вообще не брать из стека вручную, ибо команда возврата (ret) сама его оттуда возьмет. Но самое чудовищное, что эти несколько подпрограмм БОЛЬШЕ НИЧЕГО БЛИН НЕ ДЕЛАЮТ, КРОМЕ ВЫЧИСЛЕНИЯ ЭТОГО ЧЕРТОВА АДРЕСА ВОЗВРАТА И ВЫПОЛНЕНИЯ ПЕРЕХОДА ПО НЕМУ!

    На разбор этой цепочки кода я потратил не менее часа. И еще час я не мог поверить и перепроверял свои выводы в отладчике, чтобы убедиться, что я всё правильно понял, и что этот нехилый кусок кода можно просто безболезненно выбросить.

    Я понимаю, что это компилированный ЯВУ. Но я не ожидал, что это был такой ТАЛАНТЛИВЫЙ компилятор!

    - - - Добавлено - - -

    И это я еще до игровой механики не дошел.
    Последний раз редактировалось Гаррий; 14.04.2021 в 02:33.

  2. #121
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #122
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,611
    Спасибо Благодарностей отдано 
    2,187
    Спасибо Благодарностей получено 
    140
    Поблагодарили
    106 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Похоже, что это указатель на процедуру и идёт косвенный вызов? А что код чудовищный, так да. Тогдашние компиляторы не радовали. Как, впрочем, и теперешние. Особенно для такого проца, как 8080.

    Интересно было бы увидеть откомментированный тобой код. Или не практикуешь такое?)

    - - - Добавлено - - -

    Гаррий, там на образе дискеты есть KLAD2. Но тебя ностальгия замучила, насколько я понимаю, только по первому Кладу?)

  4. #123
    Master
    Регистрация
    30.11.2016
    Адрес
    г. Москва
    Сообщений
    514
    Спасибо Благодарностей отдано 
    160
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Похоже, что это указатель на процедуру и идёт косвенный вызов?
    Если изменить эту константу 0, то, действительно, процедура может начать вычислять другие адреса. Но я нигде больше не нашел ни ссылок на вызов этого кода из других мест, ни обращений к этой константе, ни на запись, ни на чтение. Может плохо искал, конечно.


    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Интересно было бы увидеть откомментированный тобой код. Или не практикуешь такое?)
    Да в целом пока рано смотреть. ) Это первый дизасм в моей жизни. Методику себе взял такую:
    - взять из отладчика интересную точку кода на интересном моменте, далее параллельно открыть участок кода в отладчике и в дизасме
    - сначала в дизасме построчно вычитать код и откомментить тупо покомандно, пока не пытаясь въехать в функционал кода в целом
    - потом прочитать по написанным комментариям - иногда уже на этом этапе начинаешь понимать смысл кода - правлю коменты уже с точки зрения алгоритма, помогая себе пошаговым проходом по коду в отладчике
    - если удается ухватить смысл действий, переименовываю функции, переменные, метки и т.п. осмысленными названиями, текстом описываю кратко содержания кусков кода. Если не уверен, что понял правильно, отмечаю написанное/переименованное примечанием "??" на будущее, чтобы, когда вернусь в этот код из других мест, еще раз перепроверить себя
    - от более менее понятого участка кода расхожусь веером по вызовам и повторяю все сначала для новых участков кода.

    Вот пример. На мой взгляд, неплохо получилось разобрать код вывода главного экрана (форум режет пробелы и табуляции, поэтому для большей наглядности выкладываю код скриншотом):

    - - - Добавлено - - -



    - - - Добавлено - - -

    выложил картинку с кодом, вчитался и сразу уже сам нашел несколько ошибок, исправил, хотя до сих пор считал, что этот участок кода неплохо разобран ) Так что эта картинка уже не совсем актуальная )))) Вот поэтому весь дизасм и рано пока выкладывать ))))

    - - - Добавлено - - -

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Гаррий, там на образе дискеты есть KLAD2. Но тебя ностальгия замучила, насколько я понимаю, только по первому Кладу?)
    Видел. У меня и KLAD3 есть ) Думаю, они отличаются только уровнями, но это не точно. Скорее всего, все уровни просто в память не влезли, они же не упакованными хранятся в коде. Вот авторы и разделили на 3 части. Когда закончу с KLAD1, гляну и решу что с ними делать. Как минимум, выдерну уровни из остальных частей.

    Точно могу сказать, что на момент компиляции KLAD1, авторы уже как минимум планировали KLAD2, или даже выпустили их одновременно. потому что в коде KLAD1 есть текст:
    'Поздравляем!!!',0
    'Теперь Вы смело можете',0
    'приступать ко второй части',0
    'нашей игры.',0
    'Желаем успеха!',0

    Видимо, этот текст должен выводиться на экран по завершении 25-го уровня первой части. Но у меня не вывелся, кстати. Я выкладывал картинку - в эмуляторе у меня игра вывела на экран мусор вместо уровня 26, съела по одной все накопленные жизни и повисла.

    - - - Добавлено - - -

    Найти бы авторов. Имена известны (они в таблице рекордов полным именем и фамилией себя записали), но в сети я не нашел о них ни одного упоминания вне этой игры. Наверняка, нашу задачу они могли бы помочь решить на порядок быстрее. При их желании, конечно.

    - - - Добавлено - - -

    Дмитрий Иванов и Андрей Шаталов. Называли они себя, видимо, группой "Woodman".

  5. Этот пользователь поблагодарил Гаррий за это полезное сообщение:

    Oleg N. Cher (14.04.2021)

  6. #124
    Master
    Регистрация
    04.12.2008
    Адрес
    г. Черкассы, Украина
    Сообщений
    957
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    8 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Гаррий Посмотреть сообщение
    Это первый дизасм в моей жизни. Методику себе взял такую:
    не совсем так, вот пример

  7. #125
    Master
    Регистрация
    30.11.2016
    Адрес
    г. Москва
    Сообщений
    514
    Спасибо Благодарностей отдано 
    160
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vlad Посмотреть сообщение
    не совсем так, вот пример
    не понял ваше сообщение, нужны пояснения.

  8. #126
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,611
    Спасибо Благодарностей отдано 
    2,187
    Спасибо Благодарностей получено 
    140
    Поблагодарили
    106 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Гаррий, да, всё отлично. Много чего можно понять. У меня такое пожелание: пусть комментарии не дублируют то, что делает команда ассемблера. К примеру, коммент "pop af ; извлечь из стека AF" ничего не даёт для понимания логики программы. Лучше больше писать о том, что именно хранится в AF.

    Этот код, насколько я понял, вывод спрайта? А зачем там в конце A сравнивается с #80?

  9. #127
    Master
    Регистрация
    30.11.2016
    Адрес
    г. Москва
    Сообщений
    514
    Спасибо Благодарностей отдано 
    160
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    пожелание: пусть комментарии не дублируют то, что делает команда ассемблера. К примеру, коммент "pop af ; извлечь из стека AF" ничего не даёт для понимания логики программы. Лучше больше писать о том, что именно хранится в AF.
    это остатки от самой первой итерации. удалить можно, но лень. не буду, сорри.

    - - - Добавлено - - -


    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Этот код, насколько я понял, вывод спрайта? А зачем там в конце A сравнивается с #80?
    вывод последовательности спрайтов по заранее заданному набору. сравнение - поиск конца набора выводимых спрайтов.

  10. #128
    Master
    Регистрация
    30.11.2016
    Адрес
    г. Москва
    Сообщений
    514
    Спасибо Благодарностей отдано 
    160
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ваще времени свободного не стало Воз и ныне там, к сожалению.

  11. #129
    Junior
    Регистрация
    19.08.2021
    Адрес
    г. Киев, Украина
    Сообщений
    6
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Гаррий Посмотреть сообщение
    Это в Rise Out?

    А кто-нибудь вообще проходил когда-нибудь все 25 уровней Клада на корвете? Это только у меня так?
    Много раз доходил. Всегда так. Проходил на эмуляторе https://sites.google.com/site/wadims...ator-for-linux
    Там даже в инструкции написанно что уровней 25 и по сути это баг концовки.

    Цитата Сообщение от Гаррий Посмотреть сообщение
    Кто-нибудь может проверить, на 14 и 16 уровнях выдается дополнительная жизнь?
    насколько понял, дополнительная жизнь дается за количество кладов с небольшим рандомом. Условно первая жизнь дается при получении 100 кладов с разбросом +- 5 возможно 10 кладов. И дальше аналогично, только следующие пороги через 50 или 100 кладов с похожим небольшим рандомом. По крайней мере эта логика работает если проходить без смертей и собирать все клады.
    Вероятно на 14 и 16 уровнях попадает на порог в 100 кладов, что больше количества кладов на уровне.
    Чуть позже также хотел более подробно разобрать, правда практическим способом, т.к. начал делать аналог на godot, но пока не дошел до этого этапа. Этот движок наверное 1 из лучших для 2Д игр + кроссплатформенный, что мне как линуксоиду не менее важно. Также он достаточно лояльный к новичкам, т.к. много вещей получилось сделать достаточно быстро не имея опыта ни в данной программе ни в разработке игр. Если найдутся желающие совместно продолжить - буду только рад. Также если получистя раздебажить точную логику добавления жизней, то это также сильно поможет.

  12. Эти 2 пользователя(ей) поблагодарили beliy за это полезное сообщение:

    Oleg N. Cher (20.08.2021), Гаррий (19.08.2021)

  13. #130
    Master
    Регистрация
    30.11.2016
    Адрес
    г. Москва
    Сообщений
    514
    Спасибо Благодарностей отдано 
    160
    Спасибо Благодарностей получено 
    82
    Поблагодарили
    48 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от beliy Посмотреть сообщение
    насколько понял, дополнительная жизнь дается за количество кладов с небольшим рандомом.
    Возможно! Мой вопрос был вызван желанием разобраться в содержании заголовка уровня в памяти. Мне там не все удалось расшифровать. Было предположение, что в каких-то байтах именно этот флажок был - выдача жизни на уровне.

    Цитата Сообщение от beliy Посмотреть сообщение
    Если найдутся желающие совместно продолжить - буду только рад.
    Я готов, но со свободным временем совсем плохо сейчас, поэтому тема для меня заморозилась пока. Да и опыт близкий к нулевому. Но если вдруг чем пригожусь - буду рад.

Страница 13 из 14 ПерваяПервая ... 91011121314 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ищу загадочного клона Rise Out/Клад
    от Pafic в разделе Разное
    Ответов: 27
    Последнее: 19.11.2019, 13:32
  2. All Hallows - Rise of the Pumpkin
    от abelenki в разделе Игры
    Ответов: 5
    Последнее: 09.09.2018, 14:34
  3. Ответов: 35
    Последнее: 16.09.2012, 22:21
  4. Rise Out From Dugeons
    от doorsfan в разделе Игры
    Ответов: 7
    Последнее: 24.05.2010, 23:27

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •