Blame | Last modification | View Log | Download
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Как известно, году эдак в1997я начал писать игру Worms.Тогда же я узнал, что этим же занимаются ещё по крайней мере 4 человека/группы. В связи с этим фактом мне пришло в голову объединить мои и чьи-то там ещё усилия и закончить наконец этот проект, если не самолично, то хотя бы при моём участии(прославиться решил ;).Было принято решение зарелизить исходник в од- ном из номеровZX-Guide.Однако номера шли и шли,а исходник всё не был и не был опуб- ликован,потому что под тяжестью работы над журналом мне постоянно не хватало времени привести программу в приблизительно удобо- варимый вид. Это и сейчас не полностью сделано.Так,в программе есть неиспользуемые части,остав- шиеся от предыдущих версий,а некоторые ра- бочие фрагменты программы не подключены в главный цикл. Но за 4 года в программе по- явились вещи,над которыми стоило работать: - Fast Mapping 30x17(он самый,родной;) при карте 93x32(93x22 занято,верх пустой,
внизу речка) - Fast Worms 8x8 Print(выводятся непо- средственно на экран.Возможно одновременно использовать 64 (если не ошибаюсь) фазы. Я подсчитал: этого достаточно для эпизода взрыва - см. ниже).Скора эта процедура не inner loop'ом(он обычный, его 8 штук: LD A,(DE) OR (HL) LD (DE),A INC H INC E | DEC E LD A,(DE) OR (HL) LD (DE),A INC H INC D и т.д.,с установленном в нужном местеDOWN DE),она скора внешней частью - пересчётом списка координат червей в регистры и вызо- вом этого inner loop'а.Весь прикол в кома- ндах: LD SP,IY POP DE ... RET;go to inner loop которые берут два адреса из таблицы. Таких таблиц две: для верхней половины экрана и для нижней. Так избегается юла,и во многом из-за этой конструкции высота экрана равна 17 знакомест.(Такая же высота,в принципе, получалась и исходя из требований дизайна) - Random Map Generator- этим я должен гордиться;) Карта получается по форме один в один как оригинал,причём алгоритм приду-
мал я сам. В спектрумовских аналогахWorms ничего подобного до сих пор не было. - Random Worms Placing Routine- случа- йная расстановка червей на созданной кар- те. Алгоритм очень простой,но опять-таки я вроде бы первый,кто его реализовал наZX. - Логический конвейер,а проще говоря - полёт червей. Очень быстро работает, хо- тя достаточно примитивно - так, катящийся червь не сбивает стоящего собрата.Да и во- обще,он пока не катится. Раньше(при более древней версии движка)он катался и крути- лся в полёте(именно из-за этого и катал- ся, принцип DIZZY).Так что эта программа будет в любом случае дорабатываться лично мной. Итак, ещё раз о том,зачем это опублико- вано. Я обязательно хочу,чтобы наSpeccyпоя- вилась играWorms,причём она была реали- зована при моём участии. Для этого я пока- зываю исходник тому, кто его поймёт. Этот человек может принять 3 решения: а)"Диман,я беру твой движок,дорабатывай поскорее,я допишу остальное(да оно,собст- венно, и дописано;)"
б)"Мне сильно понравилась эта и вон та процедурка, дай-ка я её позаимствую для своей версии. Тебе не сильно напряжно её довести до ума?" в)"Я тут посмотрел на твой исходник, а потом на свой(или наоборот;)и решил: пи- сать вормов будешь ты. Мои сорсы прилагаю- тся". Одно из преимуществ перед демоверсией уже видно.Другой плюс в том,что я не пложу новых демоверсий и не нервирую этим народ. Третий плюс в том,что видно,ЧТО и КАК сде- лано,что не даёт мне обманывать юзера тем, что "всё почти дописано", в то время как, например, отсутствовал бы генератор карты. Ведь нас уже обманывали так, правда? Что тут и как. Для более плавного скроллинга(при по- лёте снаряда это важно)я решил двигать карту если не попиксельно, то по крайней мере по 2 точки.Этим определилось всё рас- пределение памяти: 4 странички под копии карты,ещё одна под червей и bounding маску карты(карта в 2 раза меньше,пиксель в ко- торой указывает,что в этом месте червь до- лжен стоять,не просачиваясь сквозь
землю), внизу выводилка, таблицы и остальная часть программы.В свободной части верхней памяти - спрайты.Меню при нехватке памяти - подг- ружаемое. Панелька статуса и панелька для выбора оружия нарисованы. По-моему,цветовое реше- ние этих панелек очень удачно и вполне ко- мпенсирует чёрно-белую центральную часть экрана. Графика для карты пробная(выдрана из demoF.A.),но вполне терпимая. Графика для червей недорисована. Кстати,графика для карты лежит в форма- теSCUT1.1- можете загружать и редактиро- вать ;) Игра должна работать в нескольких осно- вных эпизодах: - Управление червём.Минимум загружен- ности процессора: только мэппинг,вывод од- ного червя и его кинематика. Остальные че- рви вместе с надписями нарисованы на самой карте.(В текущем сорсе - только надписи.) Проблема: у червя,стоящего на самом верху, надпись на карте не поместится. Решение: кидать надпись спрайтом, времени много, а часть памяти на этом этапе свободна.(Пока не реализовано.) - Полёт снаряда.Ана
логично по времени, но вместо червя - снаряд. Процедура следя- щей камеры достаточно простая: просто дер- жать снаряд в центре. - Взрыв и последующие за ним полёты по- дорванных червей.Самая времяёмкая часть.В самом плохом случае это 16 летящих червей (реализовано),8 летящих мин(не реализо- вано),4 обломкаCluster Bomb(см.описание в ZX-Guide 2.5 trash).Алгоритм следящей камеры не придуман. Поскольку для тупого сравнивания координат червей и мин требуе- тся значительное количество времени,то уп- рощаем задачу:сперва проверяется,не попали ли движущиеся черви на стоячие мины, а по- том - движущиеся мины на стоячих червей. Выигрыш где-то в 3-4 раза. По-видимому, в оригинале такой же алгоритм.Ничего сложно- го здесь не предвидится, т.к.стоячие и ле- тящие черви уже хранятся раздельно.Кстати, в основном списке(который обрабатывается конвейером)по 6 байт на червя: Lspr, Hspr, X/4, Y, Vx, Vy гдеspr- это 2 байта: L=xxSPRITE H=110M0001(еслиH=1,то конец списка)
xx= младшие 2 бита X-координаты; SPRITE= 6 бит номера спрайта; M= 1 бит зеркального отражения. Есть ещё дополнительные списки: для энер- гии, имён червей и т.п. - Убавление энергии и самоубийства чер- вей.Требования к времени - частично как в первом эпизоде,частично как в третьем(так как сцены прощания червей и взрывы череду- ются). - Ход компьютера.Со временем траблов нет, но от самого интеллекта есть только идеи. Например, червь выбирает ближайшего врага(если он не впритык - иначе динамит или в морду),берёт гранату и кидает по баллистической напролом. В оригинале обна- ружена тенденция стелять в стрелявшего раньше. - Управление червём в момент, когда он качается на верёвке.Идей алгоритма нет вообще! В каждой реализации на оффтопике верёвка работает по-разному! -Ну,имелочи:скидывание призов,анима- ции телепорта,пневмобура,камикадзе и т.п. Вот что надо написать. А в исходнике можно:R- генерить новую карту,S- сменить спрайт червя.
Ну и напоследок:объяснит ли кто мне на- конец, что означают буквы"KO"между лине- йками энергий команд??? Может,это какой-то символ? На этом же месте может высвечива- ться остаток времени раунда, если включить соответствующий флажок... ╖√ ° ХVкл √■ ¤╡THUm° Ь я ╫ √√√V$ UP %кк~┐ц║ЪJкДкк@ JпU║лn╫я¤^╡)@ўzDu╡И2▌UU╗ ¤[ї╣пў╡R╓еHФ ДBJЯъ+ Хя▀vяz╘е%кJ@ДР%B е(╘#)ў╜/ S@7RФСI
Х┴!*B"PВ)TА А eu_ ┴JJжTд1R д @╗╩Ч ]0ндАHА Рб ФкйTн"Кў┤Mп╢И % A%JR*R-JzДе*JEYTЯэ╖я■аў*Zе*╓ёlкVй)░I*ДеZРРФ╡дJЎМняанR┼UjФЖйJФ$JTеЕJ╡}z╓я я ╓)_н~сяIкRл}*╡u▌√ў┐ я▀╡╡к@ ┐╝╡^▐ъ ў ▀▀wMTРА їV┐¤ўйDА ┐ zв *]┐ф ^ кеZ╜ $@uU XT Рvи H РUP@ мmXА P TJ Ў я■ 4u╪ЗPФ
Uy)
кFDU╒ Вв иuh ╓ P░╞ $M║ЕU═U 8└░сD Uh Ш▄4аqб┬ └ Ь5Q (рQA@
R╨U "H ??8`yс╨
)hH °2м┐Э╜R7P 5? lбx ╝Q╖А.Tщ c ╒ZR` Цh└ро кJ$@ FFFFFFFFDBBBBBB-╕В √0Щ]=╨ 4>yА5QZ @Х&├ TVюSQФФ╒@ Ю@ ,рЩр `║F (&