(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 года от рождества
господа нашего сэра Клайва Син... тьфу!
Иисуса Христа - антивируса ...??? ААА!!
вспомнил! Спасителя нашего...