ZX News
#02
30 ноября 1996 |
|
Как сделать INTRO - пишем интро с плазмой и спрайтами.
(C)1996 Serge Segal ЧТО ТАКОЕ "ИНТРО" И КАК С НИМ БОРОТЬСЯ "По доброй старой традиции, я сейчас буду делать вид, что во всем разбираюсь,а вы будете делать вид, что мне верите..." (из неопубликованных заяв- лений нашего преподавателя теоретической механики) Внимание! Эта статья не является пропагандистским продуктом за или против интро. Цель, ко- торую она преследует,читатель может быть выявит сам. ( Прим.авт. : Очень сомневаюсь! ) Итак, начнем-с. Предположим Вы начинаю- щий крутой, навороченный, какой-нибудь там "CROCODILE GENA + CHEBURASHKA SOFT". Насмотревшись на различные продукты от монстров современного программирования, вы решили сделать собственное интро к какой-нибудь старой и никому на ... не нужной игре.Такое желание должно всячес- ки пресекаться! "Лучше игру напишите!" - советует по этому поводу известный жур- нал "Spectrofon" . Совет полезный, хочу дать еще один в том же духе : "Если Вам захочется есть, то лучше сходите в туа- лет или подышите глубже - тоже ведь по- лезно." Надеюсь у Вас хватит достаточно наглос- ти, чтобы, презрев советы всех разумных людей, взяться за это неблагодарное де- ло. Ладно, приступим пожалуй. Возьмем, к примеру, плазму. Старый эффект, еще из "INSULT md". А поэтому, в данной статье будет рассмотрена моя версия плазмы. Прим.авт.: Спустя два месяца, после того как я написал этот эффект, к нам в Луга- нск попала игра "LASER SQUAD FOR COVOX", в которой я с удивлением увидел эффект как две капли воды похожий на мой. Его автор - Мусиенко из Запорожья. Чтобы не было обид, я свой эффект спрятал подаль- ше,но теперь, ввиду его наглядности,про- стоты и понятности, я извлек его на свет Божий. Я готов признать, что идея - Му- сиенко, и не настаиваю на своих автор- ских правах. К журналу прилагаются все исходники да- нного интро.Главный принцип таков: плаз- ма создается за счет сложения двух оди- наковых синусоид с одновременным их сдвигом на различную длину . Для начала необходимо заготовить табли- цу синуса, т.к. вычислять его с помощью встроенного калькулятора слишком громоз- дко. Вот программа которая делает таблицу: 10 FOR F=0 TO 255: LET S=16+INT (16*SIN (F/256*PI*8)):PLOT F,S:POKE (30000+F), S:NEXT F 20 RANDOMIZE USR 15619:REM:SAVE "INTR1" CODE 30000,256 Как видите, принцип прост до идиотизма, но для неврубившихся поясню - с помощью BASIC'a мы создаем таблицу, в которой байты принимают значения от 0 до 31, из- меняясь при этом по синусoидальной зави- симости. Эту таблицу выгружаем на диск. Число стоящее после PI - частотный коэф- фициент, поэкспериментируйте с ним. Теперь,раздобудьте где-нибудь музончик, скомпилируйте его ( под адрес 25003 ) и нарисуйте font'ик 8*8 (это можно сделать в Art Studio ) . На диске с журналом, вы найдете шрифт seg9.fnt и мелодию ZEFIR. Далее необходимо разобраться с самой программой. Для начала разработаем принцип вывода этой плазмы на экран. По моему личному мнению здесь LDIR не обойтись. Логичнее всего держать в памяти набор спрайтов и выводить их последовательно, один за другим, так, чтобы это выглядело естест- венно. Таким образом все упирается в па- мять. Давайте прикинем: 2/3 экрана - это 4096 байт, а свободного места у нас в 48К режиме - 16384 байт. Следовательно поместится только четыре спрайта, что несколько маловато. Попробуем схитрить : будем выводить на обе трети экрана одни и теже спрайты, но с разной начально фа- зой, это даст нам уже 8 спрайтов. Даль- ше - хуже : сделаем эту треть зеркально отображенной и получим уже 16 спрайтов! Для закрепления своей победы над памя- тью, вспомним что синус - функция перио- дическая, следовательно, разрезав экран еще и вертикально, мы получим 32 спрайта по 512 байт каждый. И все это в одной странице 48К памяти ! Теперь напишем маленькую процедурку,ко- торая будет подготавливать спрайты. Принцип очень прост : один указатель на одно место в графике,другой - на другое. Берем два байта,складываем,делим на два, и получаем высоту пиксела, который нам надо изобразить. Для его изображения во- спользуемся процедурой ПЗУ 8880, которая рассчитает его адрес, а затем выведем его самостоятельно. После изображения 128 пикселов перейдем к заливке. Метод прост : с самого верха экрана берем байт, накладываем его по OR с нижним байтом и заносим в этот ( ниж- ний ) байт, снова по OR со следующим (дальше, вниз) байтом. Когда столбец закончится, перейдем к следующему. Затем возьмем прямо с экрана спрайт и занесем его в память. Изменим оба указателя таблицы синусов и повторим 32 раза (по числу спрайтов). Далее, нам необходимо написать кусочек, который все это выносит на экран. Используем так называемый метод DECRUN- CHING'а. Это значит, что мы где-то в па- мяти создадим программу, которая будет выносить спрайт на экран. Назовем эту процедуру DECRUNCH.Вот при- мерно, что получится в результате ее ра- боты: LD SP, HL POP HL LD (#4000),HL LD (#4010),HL LD (#48E0),HL LD (#48F0),HL POP HL LD (#4002),HL LD (#4012),HL LD (#48E2),HL .... И так далее... Теперь осталось совсем немного: позабо- титься о владельцах 128k машин и о увековечении собственного имени. Для этого необходимо при обнаружении 128k выполнить процедуру создания спрай- тов несколько раз с разными начальными значениями указателей, записывая резуль- тат в разные страницы памяти. Затем сде- лать опрос клавиатуры и переключение страниц. Прим.авт. Честно говоря, единственное, что я взял из интро Мусиенко, - это при- нцип раздельного переключения текста и эффекта, до него мне это как-то не приш- ло в голову. ( естественно это изменение было сделано недавно, перед созданием статьи ) Далее, мы напишем вывод текста, но нес- ложный без особых наворотов. И,для боль- шего эффекта, добавим две движущиеся по- лосочки. Теперь осталось написать текст и найти какую-нибудь игрушку. В приложении к журналу Вы найдете игру "RUFF & REDDY demo", она полностью отве- чает всем требованиям псевдоновья: ста- рая, без музыки и,к тому же, демо-версия вместо полной. Перечислю файлы: INTRN4.Z - исходник интро в формате ZX-ASM 3.0 INTR1, INTR2, INTR3 - результаты экс- периментов с синусами. ZEFIR - мелодия C.Michaell'а скомпили- рованная под 25003. seg9.fnt - шрифтец от Serge Segal'а. RUFF&RED - игра "RUFF & REDDY demo" Ну все, теперь можно сказать : "До сви- дания, AMIGA RULEZ 4EVER, ...",и т.д. и т.п. P.S. К сему творению Serge Segal руку приложил. Писано в славном городе Луган- ске, 17 сентября 1996 года от рождества господа нашего сэра Клайва Син... тьфу! Иисуса Христа - антивируса ...??? ААА!! вспомнил! Спасителя нашего...
Другие статьи номера:
Похожие статьи:
В этот день... 7 октября