ZX Forum #04
19 ноября 1997

Технология спрайтов - часть 2: охота на спрайты (поиск и выдирание).

<b>Технология спрайтов</b> - часть 2: охота на спрайты (поиск и выдирание).

             ОХОТА

   Давайте  отправимся  с   Вами
на охоту, а охота  это  такое...
Только-то вот наша охота необыч-
ная: мы с Вами  будем  охотиться
на спрайты. Что  нам  для  этого
понадобится? Все  очень  просто.
Покопайтесь в  своих  стареньких
дисках и найдите 1-2  программы, 
которые перенесены Вами с кассе-
ты, или Вы точно знаете, что они 
не  защищены  нашими  умельцами.
Определить "девственную"  (разве 
что MAGIC'ом  попорченую)  прог-
рамму просто - у нее скорее все-
го не будет при загрузки прыгаю-
щих строк с приветами или надпи-
сей типа "CRACKET  BY...".  Дру-
гие программы нам  не  подходят, 
т.к. они  компрессированные, за-
щищенные, и мы просто в них  ни-
чего не найдем.
   Теперь стоит вооружиться.  Я,
например, взял  себе  не  совсем
новую, но испытанную мной и рас-
пространяемую  Инфоркомом  прог-
рамму  File  dump  editor.   Это
очень удобная программа, и с по-
мощью ее мы легко  сможем  найти
спрайты в программах. Если у Вас
нет этой  программы, то  поищите
на диске какую-либо другую, спо-
собную просматривать и искать  в
программах спрайты.  Для  тех, у
кого вообще  нет  никаких  прог-
рамм, я предлагаю свою. Вам сле-
дует ассемблировать ее в область
памяти, которая  точно  не будет  
затерта  просматриваемым  блоком 
(лучше всего в  3  треть экрана,
т.к. она намеренно не  использу-
ется программой). Затем Вам сле-
дует загрузить программный  блок
и запустить просмотрщик.
   После запуска программы у Вас
появятся следующие клавиши:

 1 - Переключение режимов -
     символ/спрайт.
 Q - Уменьшает адрес просмотра
     на 1 байт.
 A - Увеличивает адрес просмотра 
     на 1.
 O - Уменьшает размер отобража-
     емого окна в длину на 1.
 P - Увеличивает размер отобра-
     жаемого окна на 1.
 SPACE - Выход в бейсик.
 Q+SHIFT - Уменьшает адрес про-
     смотра на 256.
 A+SHIFT - Увеличивает адрес 
     просмотра на 256.

   Изначально  адрес  установлен
на шрифт  ПЗУ  и  включен  режим
просмотра символов.  Вы  сможете
найти при помощи этой  программы
спрайты  почти  всех   форматов.
Размер программы очень мал. Так-
же Вы  можете  усовершенствовать
ее по своему  усмотрению, увели-
чивая количество  клавиш.  Прог-
рамма  написана  для  ассемблера
TASM, но  ее  просто  переделать
для других ассемблеров.
140.
        ORG #61A8     ;Адрес ассемблирования.
        UNPHASE       ;Аналог ENT, но для TASM'а.
        PHASE 20480   ;Эта команда ассемблирует все, что нахо-
                      ;дится за ней, в адрес, который следует за
                      ;ней, в нашем случае в 3 треть экрана, но
                      ;код помещает в адрес ORG.
        EI            ;Включаем прерывания.
        XOR  A        ;Делаем бордер черным.
        OUT  (#FE),A
        INC  A        ;В переменной FLAG режим вывода спрайтов
                      ;на экран - 1 печатаем символы, 0 - спрай-
                      ;ты.
        LD   (FLAG),A
        LD   A,#20    ;В LEN заносим текущий размер окна в шири-
                      ;ну.
        LD   (LEN),A
        LD   HL,#3D00 ;Теперь в переменной VRAM адрес памяти,
                      ;начиная с которого будем печатать на эк-
                      ;ран.
        LD   (VRAM),HL
        CALL SETSP    ;Рисуем на экране содержимое памяти.
KEY     XOR  A        ;В переменную нажатой клавиши заносим 0.
        LD   (#5C08),A
        LD   BC,#0000 ;Пауза до нажатия любой клавиши.
        CALL #1F3D
        LD   A,(#5C08);Читаем содержимое переменной.
        CP   #31      ;Если нажали "1"- происходит переключение
                      ;режимов вывода спрайтов.
        JR   Z,SETFLAG
        CP   #71      ;Если нажали "q" (маленькое) - уменьшаем
                      ;адрес просмотра на 1.
        JR   Z,UP1
        CP   #61      ;Если нажали "a" (маленькое) - увеличиваем
                      ;адрес просмотра на 1.
        JR   Z,DOWN1
        CP   #51      ;Если нажали "Q" (большое) - уменьшаем ад-
                      ;рес просмотра на #0100.
        JR   Z,UP256
        CP   #41      ;Если нажали "A" (большое) - увеличиваем
                      ;адрес просмотра на #0100.
        JR   Z,DOWN256
        CP   #20      ;При нажатии на пробел происходит выход из
                      ;программы.
        RET  Z
        CP   #6F      ;Если нажали "o" (маленькое) - уменьшаем
                      ;размер окна.
        JR   Z,DECR
        CP   #70      ;Если нажали "p" (маленькое) - увеличение
                      ;размера окна.
        JR   Z,INCR
        JR   KEY      ;Если жали другое переход на опрос клавиш.
SETFLAG LD   A,(FLAG) ;Инвертируем флаг.
        XOR  #01
        LD   (FLAG),A
        JR   KEY-3
UP1     LD HL,(VRAM)  ;Следующие процедуры уменьшают/увеличивают
                      ;адрес просмотра.
        DEC  HL
        LD   (VRAM),HL
        JR   KEY-3
DOWN1   LD   HL,(VRAM)
        INC  HL
        JR   UP1+4
UP256   LD   HL,(VRAM)
        LD   DE,#0100
        AND  A
        SBC  HL,DE
        JR   UP1+4
DOWN256 LD   HL,(VRAM)
        LD   DE,#0100
        ADD  HL,DE
        JR   UP1+4
DECR    LD   A,(LEN)  ;Следующие процедуры уменьшают/увеличивают
                      ;размер окна.
        CP   #01
        JR   Z,KEY
        DEC  A
        LD   (LEN),A
        JR   KEY-3
INCR    LD   A,(LEN)
        CP   #20
        JR   Z,KEY
        INC  A
        LD   (LEN),A
        JR   KEY-3
SETSP   CALL CLS      ;Вызываем очистку окна.
        LD   A,(FLAG)
        DEC  A
        JR   Z,CHR    ;Если 1,печатаем символы, иначе - спрайты.
        LD   HL,#4000 ;Адрес начала экрана.
        LD   DE,(VRAM);Адрес в памяти.
        LD   B,#80    ;Размер окна в высоту 128 ПИКСЕЛЕЙ (16*8).
SPR1    PUSH HL
        LD   A,(LEN)  ;Заносим в C размер окна в длину.
        LD   C,A      ;Далее печатаем спрайт.
SPR2    LD   A,(DE)
        LD   (HL),A
        INC  DE
        INC  HL
        DEC  C
        JR   NZ,SPR2
        POP  HL
        CALL DOWN
        DJNZ SPR1
        RET
DOWN    INC  H        ;Переход на следующую пиксельную линию
                      ;снизу.
        LD   A,H
        AND  #07
        RET  NZ
        LD   A,L
        ADD  A,#20
        LD   L,A
        RET  C
        LD   A,H
        SUB  #08
        LD   H,A
        RET
CHR     LD   HL,#4000 ;Адрес 1 трети экрана.
        LD   DE,(VRAM);В DE заносим адрес в памяти.
        CALL CHRSET   ;Заполняем первую треть.
        LD   HL,#4800 ;Адрес второй трети.
        CALL CHRSET   ;Заполняем ее.
        RET
CHRSET  LD   B,#08    ;Эта процедура заполняет треть экрана сим-
                      ;волами.
CHR1    PUSH HL
        LD   A,(LEN)
        LD   C,A
CHR2    PUSH BC
        PUSH HL
        LD   B,#08
CHR3    LD   A,(DE)
        LD   (HL),A
        INC  H
        INC  DE
        DJNZ CHR3
        POP  HL
        POP  BC
        INC  HL
        DEC  C
        JR   NZ,CHR2
        POP  HL
        PUSH DE
        LD   DE,#0020
        ADD  HL,DE
        POP  DE
        DJNZ CHR1
        RET
CLS     LD   HL,#5800 ;Сначала окрашиваем весь экран цветом
                      ;INK 0, PAPER 0.
        PUSH HL
        LD   DE,#5801
        LD   BC,#02FF
        LD   (HL),#00
        LDIR
        POP  HL       ;Затем делаем видимой часть экрана, ко-
                      ;торая попадает в окно.
        LD   B,#10
CLS1    PUSH HL
        LD   A,(LEN)
        LD   C,A
CLS2    LD   (HL),#0F
        INC  HL
        DEC  C
        JR   NZ,CLS2
        POP  HL
        LD   DE,#20
        ADD  HL,DE
        DJNZ CLS1
        RET
FLAG    NOP           ;Переменная, которая хранит указатель фор-
                      ;мата печати.
VRAM    DEFW #0000    ;Переменная, которая хранит адрес в памяти
LEN     NOP           ;Переменная, которая хранит размер окна в
                      ;длину.
2
   Ну  вот, оружие  подобрано, и 
мы  начинаем  охоту.  Что  же мы
должны найти? Спрайты.  Увеличи-
вая или уменьшая адрес просмотра  
и изменяя размеры  окна, найдите
в программе  картинки, предвари-
тельно  переведя  просмотрщик  в
режим просмотра спрайтов.
   Для просмотра я взял несколь-
ко  программ  из  своей  коллек-
ции: 3D BATMAN (OCEAN), ELEFANT-
1 (CODE MASTERS), JACK  THE NIP-
PER-2, KRAKOUT.  Давайте посмот-
рим, что же  мне удалось  в  них
найти.  Первые три спрайта я на-
шел в режиме  поиска спрайтов, а  
спрайт из программы  KRAKOUT был
найден в символьном режиме прос-
мотра.
   Собственно, на этом наша охо-
та закончена и мы плавно перехо-
дим к  следующей  главе, которая
пояснит нам, что же мы нашли.



Другие статьи номера:

Help - Описание оболочки электронного издания "ZX-FORUM 4".

Секреты успешного дизайна - глава для книги "Дизайн Ваших программ"

Экранные эффекты - Бегущая строка из R-Type.

Экранные эффекты - гашения экрана из Zynaps.

Экранные эффекты - "сворачивание" экрана из Comando Tracer.

Экранные эффекты - плавное "затухание" экрана из Сommando Tracer.

Экранные эффекты - модификация символьного набора для получения оригинального стилизованного шрифта из игры Rockstar.

Экранные эффекты - "выбегающая строка" из игры Rockstar.

Экранные эффекты - "наливающийся" экран из игры Rockstar.

Экранные эффекты - сложный многоступенчатый эффект из игры Bubbler.

Новые 40 лучших процедур - скроллинг экрана, слияние двух картинок, инвертирование экрана, поворот символов, замена атрибутов, заливка замкнутого контура, вычисление адресов в экране, копирование части экрана и т.д.

Технология спрайтов - часть 1: введение.

Технология спрайтов - часть 2: охота на спрайты (поиск и выдирание).

Технология спрайтов - часть 3: форматы спрайтов.

Технология спрайтов - часть 4: форматы спрайтов с маской.

Технология спрайтов - часть 5: структура спрайтовых блоков (как уживаются в памяти спрайт и маска, какие данные помогают нам оперативно находить адрес спрайта в памяти и многое другое.)

Технология спрайтов - часть 6: подготовка данных к печати.

Технология спрайтов - часть 8: печать спрайтов (координаты заданы в знакоместах).

Технология спрайтов - часть 9: печать спрайтов (координаты заданы в пикселях).

Технология спрайтов - часть 10: обзор программ для работы со спрайтами и графикой.

Мир звуков Спектрума - глава 1: Физика звука.

Мир звуков Спектрума - глава 2: Оператор BEEP, Создание эффектов на BEEPе, Создание музыки на BEEPе.

Мир звуков Спектрума - глава 3: Как получается звук (устройство BEEP'ра и способы звукоизвлечения).

Мир звуков Спектрума - глава 4: Программирование звука на ассемблере.

Мир звуков Спектрума - глава 4.1: Программирование звуковых эффектов - Тон, Шум, Комплексы эффектов.

Мир звуков Спектрума - глава 4.2: Программирование звуковых эффектов - Управление громкостью.

Мир звуков Спектрума - глава 4.3: Программирование звуковых эффектов - Управление тембром.

Мир звуков Спектрума - глава 4.4: Программирование звуковых эффектов - Программирование музыки.

Мир звуков Спектрума - глава 4.5: Программирование звуковых эффектов - Многоголосые мелодии (полифония).

Мир звуков Спектрума - глава 4.6: Обработка внешних сигналов - оцифровка.

Мир звуков Спектрума - глава 4.7: Обработка внешних сигналов - Реверберация.

Мир звуков Спектрума - глава 4.8: Синтезирование речи.

Мир звуков Спектрума - глава 4.9: воспроизведение звука на прерываниях.

Мир звуков Спектрума - глава 5: Оператор PLAY для музыкального сопроцессора AY- 3-8910 (AY-3-8912).

Мир звуков Спектрума - глава 5.1: Создание эффектов оператором PLAY.

Мир звуков Спектрума - глава 5.2: Создание музыки на PLAYе.

Мир звуков Спектрума - глава 6.1: описание регистров музыкального сопроцессора AY- 3-8910 (AY-3-8912).

Мир звуков Спектрума - глава 6.2: Программирование эффектов и музыки под музыкальный сопроцессор AY- 3-8910 (AY-3-8912).

Мир звуков Спектрума - глава 7: Обзор программного обеспечения ZX-Spectrum для создания звуков и музыки.

Мир звуков Спектрума - глава 7.1: Редактор звуковых эффектов SUPER SOUND.

Мир звуков Спектрума - глава 7.2: Музыкальный редактор Wham the Music Box.

Мир звуков Спектрума - приложения 1, 2: листинги звуковых эффектов SUPER SOUND'а, советы по использованию ассемблера.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
EventS Overview - Surv!v0r о событиях и фактах: Открытие Спектрумовской банерной сети, у POS появился сайт, обзор демок с СС'2000, переименование Eternity Industry, результаты Final Shoque'2k, ЧВ2 не будет, закрытие газеты Born Dead, группа LFG распалась.
Пуля в воде не тонет? - Полезные и интересные сведения, которые можно подчерпнуть из голливу дских фильмов.
Маленькие заметки большого техникума - Козловский занялся ремонтом станка Под шпиндель массивный попала рука.

В этот день...   31 октября