Уже так и сделал. Сам не знаю почему я до этого так долго додумывался. Теперь все хорошо. В комнате с маленькими отрезками теперь любо попрыгать.:)
Вид для печати
Please install any ZX emulator (ZX SPIN, REALSPECTRUM, SPECTACULATOR, X128, EMUZWIN, FUSE...) and test your game in ZX128 mode. You don't need real hardware.
All fast code must be in fast ram or fast pages. Page 7 can be set in high memory area, but routines from page 7 move to any other fast ram.
INFO ABOUT REAL ZX SPECTRUM versus RUSSIAN SOFTWARE:
http://zx.pk.ru/showthread.php?t=8656&highlight=raining
http://zx.pk.ru/showthread.php?t=7427&highlight=raining
http://zx.pk.ru/showthread.php?t=8300&highlight=raining
OK. I write easy document about making compatible software.
я говорю про общий случай. не стоит при разработке движка привязываться к конкретному лабиринту. а на случай зацикливания в каждой комнате предусмотреть место респавна.
WRITING COMPATIBLE SOFTWARE FOR RUSSIAN ZX CLONES AND ORIGINAL ZX SPECTRUM
Critical points on ZX Spectrum machines:
1) register I must be set in range #80 - #BF only (screen raining elimination). Reg.I can't be modified if ULA show screen data (memory is slow/contended and if I will set to "slow value" then ZX screen will rain)
- it's screen raining effect on real ZX Spectrum 128:
http://velesoft.speccy.cz/other/vera-original.gif
IM2 table can be also in ZX rom, but I=#38/#39/#3A will not work on +2A/+3. This computers use modified 48rom. Only I=#3B can be used on all ZX models with 48rom.
2) IM2 table length must be full 257 bytes (work on computers with unstable floating bus)
3) if any code in adress #4000-#7FFF or #C000-#FFFF work too slow, can be moved to any fast 128kB page or to area #8000-#BFFF
4) if your software use very often operations with stack, please move SP to fast memory
5) ZX Spectrum(128/+2/+2A/+3) use contended (slow) memory, but aftear interrupt is all memory fast. (INTERRUPT -> circa 14300 CPU tacts is all memory fast, next circa 43800 CPU tacts is videoram memory and all slow pages contended with ULA(slow-down), all next frame time is all memory fast.
6) if your IM2 code (keyboard controll, mouse controll, AY sound ...) will shorter than 14300 CPU tacts, then is possible move this code to any slow memory (is fast after interrupt)
7) original ZX Spectrum not use BETA-DISC interface, please use standard BASIC loaders. This software will easy portable to TAP,TZX,TRD,MBD,D80,MGT and DSK formats.
8) newer use reading from ports #7FFD or #1FFD. This ports on russian ZX clone ZS SCORPION switch ON/OFF turbo 7MHz, but real ZX Spectrum can reset.
ZX SPECTRUM - MODELS
Russian games/demos designed for ZX clones run on original ZX128 models with different speed and can often crash.
More ZX clones use fast access to contended(with ULA/videoram) memory. Original ZX Spectrum models use slow access to contended memory(ULA slow-down CPU).
ZX Spectrum 128K / +2(grey)
- 228 Tacts per scanline
- 311 lines per frame
- 63 lines before TV picture
- 70908 Tacts per frame
- Pages 1,3,5,7 are slow (but only when displaying screen)
- if register I is set to point to slow ram, computer gets snow on screen and may crash.
- port #FF works
- out (#FD),rampage works as on pentagon
adress space on original ZX128/+2(grey model):
#0000-#3FFF = zx rom (fast memory)
#4000-#7FFF = videoram 1 (slow memory contended with ula)
#8000-#BFFF = fast memory
#C000-#FFFF = memory paging area (pages 0,2,4,6 = fast / pages 1,3,5,7 = slow)
ZX Spectrum 128+2A / +3
- 228 Tacts per scanline
- 311 lines per frame
- 63 lines before TV picture
- 70908 Tacts per frame
- Pages 4,5,6,7 are slow (but only when displaying screen)
- No problem with I pointing to slow ram
- port #FF doesn't work
- must use out on #7ffd or out (#FD),rampage with 6th bit set (as on scorpion)
- Has faster slow ram than ZX 128K / +2
adress space on original ZX128+2A/+3:
#0000-#3FFF = zx rom (fast memory)
#4000-#7FFF = videoram 1 (slow memory contended with ula)
#8000-#BFFF = fast memory
#C000-#FFFF = memory paging area (pages 0,1,2,3 = fast / pages 4,5,6,7 = slow)
ZX Spectrum +2A/+3 use different slow memory pages than original ZX128/+2 !!!
More russian games/demos can run on different ZX models if you rewrite only numbers of memory pages on instructions OUT (?),A (OUT #7FFD,xx). This is easy way for best compatibility.
Parallel using controll via KEMPSTON MOUSE and KEMPSTON JOYSTICK is impossible on real hardware. Original kempston mouse use uncomplette port adressation and collide with some kempston joystick interfaces.(joy interface detect often only A5=0...). Please use menu with select controll.
links:
http://zx.pk.ru/showpost.php?p=1659&postcount=10
http://zx.pk.ru/showthread.php?t=8656&highlight=raining
http://zx.pk.ru/showthread.php?t=7427&highlight=raining
IM2 table in ZX 48 rom:
http://www.worldofspectrum.org/forum...5&postcount=19
на счет места респавна - попробуй в оригинале спускаясь с первого экрана нажимать кнопку смены уровня. гарантированно попадешь вниз через экран. спускаешься по несуществущей веревке, разбиваешься, и появляешся не на веревке (последнее положение) а на тведом полу
Я пишу, как НАДО сделать "в общем случае", а не как сделано
Возможно, попадание на другой этаж "не по лестнице" вообще не запоминается
И по умолчанию - воскресение просто в "центре"
Что-то не хочется мне совсем заморачиваться на этой детали. Ради одной комнаты менять, копаться в движке...
В оригинале (только на первом уровне!) после геймовера можно было продолжить с того же места, нажав огонь. Давали еще пять жизней, но очки сгорали.
А вот про это-то я забыл. И никто не вспомнил. Хорошо Lethargeek подсказал. Назовем это континьюс. Постараюсь сделать.
---------- Post added at 17:11 ---------- Previous post was at 15:36 ----------
Ну так змей каким цветом делать? Синеватым или зеленым?
Автору огромное спасибо! Игра получилась очень близкой к оригиналу. Просто обалдеть. Сколько мечтал об этом!
Очень понравился звук (почти 1:1 с оригиналом), такие "мелочи", как смена цветовой палитры для стенок на разных этажах пирамиды (тоже очень близко к оригиналу).
По поводу найденных несоответствий или глюков - ничего нового по сравнению с тем, что уже нашли, я не нашел. А где можно брать новые версии?
Немного потестил на реале:
1) Не очищается второй экран - сразу после загрузки игры появляется содержимое второго экрана, а потом рисуется надпись Preliminary Monty
2) Берем первый ключик и идем в ЛЕВУЮ дверь. Там берем булаву и выходим обратно. Результат - катающийся череп мигает, если зайти обратно к змее - она тоже мигает. Через время "спецэффект" пропадает сам собой.
вроде как я выяснил, что это амулет, а не булава.
С амулетом/булавой все понял... ;)
Кстати, на Атари враги в небольших пределах постоянно меняют цвет. Особенно это заметно на черепах - они помигивают. Нет ли мысли сделать похоже на Speccy?
Еще мысли по поводу отсутствия заставки, музыки и концовки в Preliminary Monty на Atari.
Я читал где-то в инете интервью с автором этой игры (Robert Jaeger), и он говорит, что изначально им была написана игра Montezuma's Revenge (а там есть и заставка, и музыка). Но фирма, которой он предложил эту игру, потребовала ее переделать, чтобы она влезла в 16Кб - для картриджей Атари. Их объем был ограничен. Вот игра и была урезана, никаких заставок, картинок и концовок. Заодно, по-видимому, и движок усовершенствовали, ускорили.
А поскольку на Спектруме задача урезания до 16кб не стоит - то можно с чистой совестью делать все примочки, если есть желание :)
Интро, оутро, музыка фоновая и картинка на загрузку будет!
Да, концовку надо сделать обязательно (не люблю бесконечные игры, смысл теряется:) )! А музыка интро из Montezuma's Revenge на Атари ИХМО очень даже рулез - хотелось бы её...
Вопрос - игра всё-таки на что будет больше похожа, на одноуровневую Montezuma's Revenge с Монтезумой-боссом , или на многоуровневую Preliminary Monty на Atari, только с концовкой?
На Preliminary Monty на Atari, только с концовкой. 9 уровень последний. Hi Score запоминается.
Музыка интро - из Montezuma's Revenge!
Ура! С нетерпением ждём Final Release!
не страдаю особой привязанностью к платформерам-лабиринтам, но эта игра понравилась.
Есть идея насчет исчезающих мостов. Сейчас, пока включены, они изображаются миганием некоего статического изображения. А если их сделать как на атари - чтобы изображение было динамическим, своего рода "белый шум"? Или это слишком накладно по быстродействию?
Всё уже. Времени нет. Надо было раньше идеи высказывать. Сейчас идет доводка существующего. Чтоб без глюков и зависаний было главное надо в релизе сделать.
Не знаю какие проверки есть в оригинале, но этих проверок явно недостаточно :) У меня лично был случай убийства в первой комнате после прохождения какого-то там уровня и падения. Не дотянул до колонны... Получил зацикленную смерть. Герой появлялся в центре экрана и падал, разбиваясь насмерть.
Примечательно, но я при разработке тоже получил такой глюк - не дотянул до колонны. (видимо мысли у людей одинаково думаются). Исправил. У меня теперь монтик должен съехать по трубе хотя бы 1 экран прежде чем попадет в начальную комнату.
А "сажать на веревку", я уже писал, так и останется глюк. Неохота мне уже (да и опасно без тестирования) копаться в движке ради одного единственного экрана. Ну скажите - кому придет в голову прыгнуть с этой веревки? Да еще и в самом начале игры.
подожди еще, вот увидишь интро, оутро:rolleyes:.[COLOR="Silver"]
Я думаю, что на Атари для каждой комнаты записаны координаты появления героя после смерти в зависимости от того, из какой комнаты он пришел. В варианте ace210, например, если зайти в комнату в прыжке, а потом в ней погибнуть, то главный герой повторно появляется также в прыжке. Вероятно, в некоторых комнатах это также может привести к зацикленной смерти. А на Атари, независимо от того, как зайти в комнату, герой появляется в ней после смерти стоящим, причем я ни разу не видел случаев зацикленной смерти, кроме вышеописанного "недотягивания до колонны". Это был редкий глюк, но любопытный! Я бы даже оставил небольшую вероятность такого исхода игры. Ну типа как рулетка-сюрприз для игрока. Дотянет живым до следующего уровня или не дотянет!
И вообще я поиграл вчера довольно много в Monty от ace210. Если на Атари я привык, что играю очень быстро, ловко и практически без потерь могу пройти всю игру, то тут приходилось часто погибать, так как немного поменялась динамика игры, прыгать нужно в другие моменты, с других позиций, и черепа прыгающие тяжелее обойти. Часто погибал, иногда даже не доходя до конца уровня. Но это нормально! Просто чуть-чуть поменялась динамика игры, и надо к ней заново привыкать, как когда-то на Атари, когда не мог пройти 1й уровень. Убивался же, а сейчас не могу понять, как!
Только что проверил - так и есть. Зацикленная смерть. Запускаем 1й уровень. Идем в правую дверь, в комнату, где белый и красный ключи. Выходим из нее налево, а потом в прыжке возвращаемся направо. Герой разбивается насмерть, появляется в прыжке и снова разбивается насмерть и т.д. Game over.
На атари на 6 уровне где-то в нижних комнатах есть змея. Если зайти в эту комнату справа, то сразу погибаешь. И так зацикливается.
Черапа будут прыгать чуть повыше. (что ж сразу никто не заметил?).
А я недавно попробовал на джойстике поиграть. Прямо как попал на 20 лет назад в игровой салон! На джойстике играть сложнее. Хотя я помню люди так натренировывались, так уж этого Preliminary замурыжили до дыр, что и на джойстике без проблем доходили до 9 уровня.
Ни разу не видел подобного. Ни у себя, ни в салонах. Кроме того, начиная с 4 уровня враги на карту не добавляются. Просмотрел карту 4 уровня от mapy.atari8.info. Ни в одной комнате, нижней или верхней, не нашел змей настолько близко к краю экрана, чтобы они могли угрожать герою при появлении.
Может ли кто-нибудь более детально указать местоположение этой змеи?
А то ведь придется доходить до 6 уровня и потом его детально исследовать! Благо, есть снапшоты, не страшно погибнуть в случае чего ;)
Надо будет попробовать на финальной версии. Эх, тряхнуть стариной, вернуть те же ощущения от игры!
нету в атариевской версии никакого шестого уровня, после уровня 4 идёт повтор, только скорость увеличивается.
Ты наверно забыл уже... Там есть все уровни вплоть до 9го. Скорость не повышается, но меняется в небольших пределах конфигурация комнат, стен и предметов. Кроме того, с каждым уровнем "поднимается" темная зона. Начиная с 5го уровня враги не исчезают, если об них убиться. Поэтому зацикленная смерть об змею может наступить только начиная с 5го уровня - на уровнях 1-4 эта змея исчезла бы, убив героя один раз.
---------- Post added at 15:22 ---------- Previous post was at 15:06 ----------
Пришла в голову дикая идея... Так сказать, извлечь из игры Monty неслыханное доселе удовольствие!
Идея заключается в том, чтобы написать бот, который играл бы в эту игру. Анализируя содержимое экрана и подавая команды на джойстик, он должен управлять главным героем и пройти игру!
Для хардкор-программеров :)
Я уже встречал в интернете соревнования ботов по игре в Asteroids. Там доходило до того, что боты по поведению игры в первое время выясняли состояние регистров игры, содержимое генератора случайных чисел, и предсказывали игровое поведение на много ходов вперед!
Думаю, для Monty-bot подобное извращение не потребуется... А вот было бы интересно написать адаптивного бота, который заранее не знает карты, не знает динамики персонажа и обучается всему этому по ходу дела.
Облазил практически весь 6й уровень, ходил без мечей. Нашел по крайней мере одну комнату с зацикленной смертью. Только не от змеи, а от паука. Эта комната - та, в которой находится красный ключ, когда идешь в "странное место", он нужен чтобы открыть красную дверь. В левой нижней части пирамиды: второй этаж снизу и 5 комнат левее от центральной. Когда заходишь туда справа - паук убивает.
Но в целом я перепробовал заходить во все комнаты, где есть враги, со всех сторон. И нигде нет циклической смерти. Авторы игры явно постарались!
Что еще интересно: этого фатального паука нет на карте 4го уровня от mapy.atari8.info. Следовательно, после 4го уровня враги добавляются. Будем знать!
Я обошел практически всю правую часть пирамиды и отчасти - левую (путь в сторону странного места). Остальное не исследовал и наверно уже не буду. Удалось подтвердить правоту ace210 о том, что случай циклической смерти возможен - и на этом я останавливаюсь. Кто хочет - пусть сделает лучше! :)
С 6-го. Причем такая змея уже в самом начале есть (комната 2-1, над веревкой), тоже смерть зацикленная прыжком. Так что запоминать динамику перехода не только излишне, но даже вредно. Нужно запоминать только сторону и после смерти ставить перса в стандартные точки по краям, одинаковые для всех стандартных комнат. Межкомнатные лестницы и коридоры всегда по тем же координатам, так что точек всего четыре (плюс пятая центральная, на случай глюков, падений и межкомнатных веревок). И перепроверить врагов, чтобы сразу с краю не появлялись (или чтобы чересчур шустрый прыгающий череп не достал на лестнице).
Спек не потянет слишком долгий перебор на оптимизацию маршрута.
А подставлять готовый ничем не лучше RZX.
Я имею в виду версию на Атари. Там с 5го уровня враги не исчезают. И циклическую смерть на Атари сделать очень сложно (см. мой предыдущий пост). На спеке же, в версии от ace210 за счет "воскресения в прыжке" случаев циклической смерти может быть очень много, один из них я тоже привел ранее.
Вот это да, хорошая идея для всех бета-тестеров. Облазить все уровни, где разное расположение врагов и убедиться, что после смерти в любой комнате, независимо от направления захода в нее, всегда можно увернуться от врагов и продолжить игру.
Более жестких требований (чтобы враги не доезжали до края экрана) вводить не нужно. Только чтобы от них можно было увернуться после появления.
На Атари, кстати, пауки не доезжают по лестницам как раз до того места, где перс появляется после входа в комнату, если он входит туда по лестнице. То есть всегда можно спокойно переждать, пока пауки уедут на безопасное расстояние, и тогда уже лезть дальше в комнату.
Конечно, это задача не для спека. Я имел в виду гонять Монти на эмуляторе Атари или спека на PC, а к эмулятору сделать типа плагин, который, анализируя экран и выдавая команды на эмуляцию джойстика, управлял бы персом и проходил игру.
ace210 поздравляю с победой!!
Заставка понравилась!
Твой диплом должны были отдать LVD.