Pull to refresh

Comments 34

Откройте для себя Rocks`n`Diamonds и не занимайтесь дизассемблированием того что есть в исходниках.
Спасибо, я его видел. Однако это все-таки ремейк, а на тот момент было очень интересно покопаться в оригинале и изучить оригинальную логику.
Вообще-то, если уж на то пошло — Supaplex — это тоже клон, причем из один из последних.

Оригинал — Boulder Dash — вышел в 1984. Потом пошла волна лицензированных продуктов (Boulder Dash 2, 3 и еще тыщи всяких дополнений). Потом пошла волна клонов первого поколения (всякие там Rockford, Skulldiggery, Rockmoor) в районе ~1987-1988, потом опять затишье, потом — клоны второго поколения (в том числе Supaplex) в районе ~1991-1992. Потом произошла дикая смена платформ, пришествие DOS / PC, умирание всего остального (Atari — сразу, Amiga — долго и мучительно) и т.д. и т.п. — и об этих играх незаслуженно забыли.

Потом было долгое молчание — по сути лет на 15 (если не считать собственно Rocks-n-Diamonds в 1995 году) — и воскрешение интереса к подобным играм, но уже в среде казуалочек и на мобильных телефонах — всякие там варианты Gameloft'а и т.п. — но это уже по сути новейшая история.

Так что в этом плане, субъективно, Supaplex и Rocks-n-Diamonds примерно в одинаковом положении. И, насколько я помню, авторы модуля Supaplex'а для Rocks-n-Diamonds тоже заявляли о том, что дизассемблировали сам Supaplex.
О том, что в Rocks-n-Diamonds код тоже получен дизассемблированием я не знал, спасибо за информацию. В любом случае, я не претендую на уникальность. Просто захотелось поделиться с сообществом.
Сам _код_ там как раз написанный руками — хотя бы потому, что RnD предоставляет автору модуля что-то типа очень domain-specific виртуальной машины, внутри которой описывается собственно игра. Дизассемблировали оригинальные игры для того, чтобы понять логику работы и в точности ее повторить, вплоть до всех таймингов и, вероятно, этих самых пресловутых багов Supaplex'а.
А какие там баги? Пресловутые.
Если не считать очевидных — например, то, что некоторые действия неправильно привязаны к таймеру и скорость может зависеть от скорости процессора — то есть n-ное количество своеобразного поведения игровой логики. Вот чуть ниже уважаемый mejedi привел пример одного из них и ссылку на более-менее полный список.

Я сам не копался глубоко в представлениях, но, насколько я помню, там проблема в том, что одни и те же данные представлены что-то типа 2-3-4 разными вариантами (например, взрывы одновременно кодируются списком взрывов, битмапом отображаемых тайлов, битмапом непроходимых тайлов и битмапом убивающих тайлов) — причем эти структуры данных обновляются не одновременно, а для разных игровых объектов разными алгоритмами в разных местах, что регулярно приводит к их рассинхронизации и всяким своеобразным эффектам типа временного или постоянного образования невидимых стенок, прохождения объектов друг сквозь друга, возможности сделать невозможное типа поставить 2 круглых шара (которые «zonk») друг на дружку и т.д.
Массива там только два: текущее состояние уровня и активные взрывы (причем, взрывы еще дублируются в первом массиве). Но ситуация усугубляется тем, что практически все движущиеся объекты одновременно существуют в нескольких ячейках (из которой вышел и в которую направляется), а все кадры анимации кодируются отдельным кодом. И если подгадать тайминги, можно взорвать левую половину движущегося объекта, а правая «доползет» до места и это будет выглядеть странно. Ну и еще такие «половинчатые» объекты обладают странными свойствами (например, попа уползающего Мёрфи ведет себя как стена — на ней замирают падающие предметы, а сник-снак и электрон от нее уползают в обратную сторону, не вызывая взрыва).
Есть ещё Симпаплекс (2004) от Alawar с главным героем по имени… Мямля. Помимо схожей логики и названия, на сколько помню, есть даже похожие уровни.
Эм, да после 2000 я их даже считать смысла не вижу. Этих клонов только на флеше дикие сотни, а если считать мобильные игры — то запросто тысячи…
По идее должны, хотя я не проверял. Там большинство трюков растет из способа хранения игровых данных. Когда Мёрфи ползет по уровню, он занимает две ячейки (левая и правая половина), и эти ячейки обрабатываются специальным образом. Именно поэтому, например, сник-снак отворачивается от Мёрфи, а не съедает его, если отойти в сторону в момент, когда он подошел вплотную.
UFO just landed and posted this here
Я попробую написать что-нибудь на эту тему в ближайшее время. Правда, не факт, что до Нового года. Спасибо за идею.
UFO just landed and posted this here
UFO just landed and posted this here
С этой игрой я, к сожалению, не знаком. В любом случае, удачи, коллега!
Играл в это, но не очень помню суть )))
совпадение почти ;)
я тоже вчера выложил дизассемблированную игрушку

правда это EXOLON для ZX Spectrum.

bitbucket.org/esl/exolon-zx
О, про особенности EXOLON — очень интересно почитать. Расскажете?

Мега штука своего времени. Для меня, например, это вообще первая игра\программа с которой начались компьютеры.
а что бы хотелось узнать? ;)
Интересные особенности и открытия :)

Кое-что уже прочитал в readme в исходниках. Например, почему оно тормозит на большом количестве объектов — весьма интересно.
было интересно посотртеть как оно работает,

«открытий» — как таковых то и нет.

основное откртытие — там вообще нет синхронизации с лучём ;)

тормозит — прозаичесски не успевает отрисовывать столько объектов на экране
чем больше на экране объектов — тем больше тормозит.

там почти нет компенсации кол-ва спрайтов.
точнее есть две, одна для мелких спрайтов 8x8
если их на экране <8 то оно искуственно отрисовывает недостающие пустые
вторая 16x16 — тоже такое хотели сделать (враги, 6 спрайтов)
но забыл вставить увелечение счётчика, и оно всегда работает как задержка
независимо от кол-ва спрайтов ;)

может народ займется и оптимизирует ее

собственно обсуждают это тут zx-pk.ru/showthread.php?t=24083&page=4

Оу, спасибо за детали. — На форуме много интересного нашел.
И отдельно очень порадовало, что есть связь с автором! Это оччень-оччень круто :)
Мега дело делаете! )

Raffaele Cecco — закладывал основы. Exolon, Cybernoid, Stormlord! Эх, Nostalgie… 8)
Порт этой игры на телефоны в моем рейтинге занимает пожалуй первое место среди мобильных игр)
Классная была игрушка
Помню, в школе написал редактор уровней к ней
Началось всё с того, что исполняемый файл то ли запакован, то ли зашифрован. После безуспешного поиска чего-нибудь, что сможет его распаковать
Во времена DOS-a был универсальный распаковщик CUP386, его не пробовали?
Единственное из попадавшегося мне, что было ему не по зубам — файлы, упакованные упаковщиком com-файлов от Microsoft. Но для последнего был распаковщик от самого MS.
Нет, к сожалению не пробовал. В далекие времена, когда я сидел еще под DOSом у меня была коллекция упаковщиков и распаковщиков всех мастей. Но на момент, когда я занялся дизассемблированием, у меня этой коллекции уже давно не было, а имена упаковщиков из моей памяти стерлись. Поэтому я попытался погуглить, но не очень успешно. Правда, как я написал в статье, я не особо-то и старался. Все-таки идея написать свой распаковщик привлекала сильнее и я, скорее, искал моральное оправдание для написания велосипеда.
А как вы создавали псевдокод на C++? Ведь супаплекс написан под 16-bit DOS, который IDA не умеет переводить в Pseudo C++?
Я его руками создавал. Читал оригинал, пытался понять как оно работает и как реализовать это на С++. Это можно частично проследить через импортированные из SVN коммиты (те, которые датируются 2009 годом).

Сначала я сделал компилирующийся .asm-файл и начал в нем разбираться, давая разумные имена функциям и переменным, гуляя по нему отладчиком. Потом, когда было по большей части понятно, что делает та или иная функция, я их переписал на С++.
Жаль :( Я думал, за последнее время что-то поменялось и Ильфак запилил эту фичу. А так бы хотелось спокойно и удобно получить компилирующиеся сырки той-же Civilization.

Опыт получения сырков для Win32 имеется — есть компилирующиеся исходники Diablo: Hellfire

А вам в любом случае респект за труд. Супаплекс прекрасная игра, на 286 в нее рубился очень много
Я когда-то порт Supaplex на J2ME нашёл. Довольно годный, но есть один удручающий недостаток: с ростом открытых уровней серьёзно растёт время запуска. На заполнение хипа вряд ли списать можно, поскольку он такими темпами давно бы кончился, посему вангую случайный ботлнек. Надо было бы поковырять… Даже если автор сырцов не оставил — Java, даже обфусцированная и минифицированная, довольно хорошо дизассемблируется тем же JaD.
Sign up to leave a comment.

Articles