PDA

Просмотр полной версии : Цветные линии



vinxru
18.12.2012, 02:13
Самая первая версия. Заставка, король, заголовок, кнопки снизу банально не влезли в 12 Кб памяти. Нижние 32 Кб недоступны во время работы с экраном, остается лишь 12 Кб.

Анимация игрового поля сделана в полной мере.

Завтра (или чуть позже) подумаю как с этим быть.

http://s019.radikal.ru/i623/1212/38/22555135b029.png

Во вложении файл lines01.lvt

vinxru
18.12.2012, 02:34
BIOS функции для проигрывания мелодий никуда не годятся. Частота задается 8 битным значением. И если на низких частотах погрешность еще допустима, то на высоких мелодия страшно лажает.

А в этой игре заставку надо играть на высоких нотах. Но я пока сдеал на низких.

---------- Post added at 01:34 ---------- Previous post was at 01:31 ----------

Почему то при выводе графики и текста через BIOS, компьютер издает звуки. Наверное воображает себя принтером.

Zelya
18.12.2012, 13:27
vinxru,
Тут (http://lvovpc.ho.ua/forum/viewtopic.php?f=3&t=15) как раз обсуждается программирование звука. Где-то со второй половины темы Иван Городецкий балует нас всякими музыкальными движками, в том числе и с чистыми нотами. Рекомендую ознакомится.
Кстати, а спрайты Вы рисуете по точкам? Может лучше релизовать функции по копированию блока памяти в видео. У "Львова" четыре пикселя на байт, так что поточечный вывод катастрофически медленный.

Насчет памяти еще. В Rick'е
http://www.youtube.com/watch?v=Ea2F5usyoXo&feature=youtu.be
все тайлы/спрайты, которые будут использоваться на текущем уровне я держу в верхней памяти. А игровая логика, карты, спрайты других уровней - в нижней.

vinxru
18.12.2012, 14:49
Кстати, а спрайты Вы рисуете по точкам? Может лучше релизовать функции по копированию блока памяти в видео. У "Львова" четыре пикселя на байт, так что поточечный вывод катастрофически медленный.

Копирую байт в байт в видеопамять. Причем в новой версии я переписал функцию вывода спрайта на ассемблер.



; Вывод спрайта 12x16

MOV B, 16

LOOP:

LDAX D
INX D
MOV M, A
INX H

LDAX D
INX D
MOV M, A
INX H

LDAX D
INX D
MOV M, A

MOV A, B
LXI B, 62
DAD B
MOV B, A

DCR B
JNZ LOOP


---------- Post added at 13:49 ---------- Previous post was at 13:45 ----------


все тайлы/спрайты, которые будут использоваться на текущем уровне я держу в верхней памяти. А игровая логика, карты, спрайты других уровней - в нижней.

Заставку и фон игры я думаю разместить в нижней памяти. И копировать их на экран через буфер в верхней памяти. Их выводить надо лишь один раз в всю игру. Заставка займет 16 Кб. Фон игры + побежденный король + игрок в короне займут еще 10-16 Кб.

Zelya
18.12.2012, 14:58
Копирую байт в байт в видеопамять.
Да-да, именно так. Я просто Ваш сишный компилятор просматривал, поэтому и переполошился за возможный поточечный вывод.

---------- Post added at 12:58 ---------- Previous post was at 12:50 ----------


И копировать их на экран через буфер в верхней памяти. Их выводить надо лишь один раз в всю игру.
Нет-нет, это слишком долго. Копировать сначала в буфер, а потом в видеопамять. Дмуаю, даже портом щелкать будет быстрее. Можно заставку сразу залить в верхнюю память и нарисовать. А когда она нарисовалась, уже спрайты перетянуть наверх, перетерев заставку.

b2m
18.12.2012, 15:03
в новой версии я переписал функцию вывода спрайта на ассемблер.
И чё, работает? Может всё-таки LXI B, 62 ? :)

vinxru
18.12.2012, 15:05
А эмитация 6 цветов нормально выглядит? Или можно с БК0010 сплагиатить шарики с узорами.

---------- Post added at 14:05 ---------- Previous post was at 14:04 ----------


И чё, работает? Может всё-таки LXI B, 62 ?

Я по памяти писал.

Zelya
18.12.2012, 15:07
А эмитация 6 цветов нормально выглядит? Или можно с БК0010 сплагиатить шарики с узорами.

Цвета выглядят нормально, но обязательно нужно семь. Так что либо один шарик с БК сплагиатить, либо все, либо еще что-то придумать.

vinxru
18.12.2012, 15:11
Я семь сразу нарисовал, только включил 6.

b2m
18.12.2012, 15:12
Зачем плагиатить, можно же ещё чёрных шариков добавить, хоть три штуки :)

vinxru
18.12.2012, 15:13
Rick крут.

Я Линии выбрал, потому что проще них только Тетрис.

А хочется что то типа Lost Vikings. Неспешная, логическая. И можно подобно Rick-у переключать экраны.

b2m
18.12.2012, 15:13
И ещё три одноцветной штриховкой :)

vinxru
18.12.2012, 15:20
И ещё три одноцветной штриховкой

Да, загнать в ОЗУ несколько вариантов и переключать. Спрайты шариков занимают 4 Кб. И их можно заархивировать.

Zelya
18.12.2012, 15:25
А хочется что то типа Lost Vikings.
Хочется, только арта нету :(

vinxru
18.12.2012, 15:50
Зачем плагиатить, можно же ещё чёрных шариков добавить, хоть три штуки
__________________


Точно, черный.

vinxru
19.12.2012, 02:53
Новая функция вывода графики. Теперь можно выводить графику находящуюся в любом месте ОЗУ.



drawSprite_12_16:
; В HL спрайт
push b
; В DE адрес назначения
.db 11h ; lxi d, 0000
drawSprite_12_16_1 .dw 0
; Высота изображения
mvi b, 16
; Цикл строк
drawSprite_12_16_l0:
push b

; Загружаем 12 пикселей
mov a, m
inx h
mov b, m
inx h
mov c, m
inx h

; Переключаем страницу памяти
push psw
mvi a, 00010b
out 0C3h
pop psw

; Сохраняем 12 пикселей
xchg
mov m, a
inx h
mov m, b
inx h
mov m, c
lxi b, 64-2
dad b
xchg

; Переключаем страницу памяти
mvi a, 00011b
out 0C3h

; Конец цикла
pop b
dcr b
jnz drawSprite_12_16_l0
pop b
ret


Вывод звука сделал через функцию вывода пилот-тона, по ссылке от Zelya. Стало звучать сносно.



void mySound(uchar period, uint delay) {
asm {
push b
mov c, l
mov b, h
lda mySound_1
sta 0BE82h
sta 0BE83h
call 0E28Dh
pop b
}
}


Осталось 4-х цветные картинки дорисовать.

vinxru
20.12.2012, 03:25
http://s020.radikal.ru/i705/1212/8c/7197987d30da.png

http://s43.radikal.ru/i101/1212/ad/648d9b9f9d70.png

Игровой экран полностью сделан, осталось лишь доделать стартовую заставку.

PAINT кстати пригодилась, я ей меняю цвет кнопок F1-F3

NovaStorm
20.12.2012, 09:03
Столько кислотного зелёного глаза не выедает?

vinxru
20.12.2012, 10:19
Вообще это бордюр, он должен быть за краем экрана. Но в эмуляторе смотрится страшновато, подправлю.

---------- Post added at 08:30 ---------- Previous post was at 08:06 ----------

Подарите мне генератор случайных чисел на асме от 0 до 255 :)

---------- Post added at 09:19 ---------- Previous post was at 08:30 ----------

Нарисую еще один вараинт спрайтов, для палитры содержащей черный и белый. Эмитировать 7 цветов не получится уже.

Но зато можно будет сделать клетчатое поле, как в версии БК0010

http://www.sensi.org/~bk/screensh/ColorLines2.png

vinxru
20.12.2012, 17:17
Еще так можно.
http://s017.radikal.ru/i441/1212/30/885fd3b73911.png

Error404
20.12.2012, 17:32
Я все сообщения не отслеживал - таки будет ли удаление по диагонали?

vinxru
20.12.2012, 17:40
уже есть.

vinxru
20.12.2012, 22:34
Прогресс :)

http://s020.radikal.ru/i723/1212/ec/636ea4be098e.png

CodeMaster
20.12.2012, 22:41
Прогресс

Палитра как-то не очень, синий с красным некошерно смешивать. А какие ещё есть варианты?

vinxru
20.12.2012, 22:43
ИМХО остальные еще хуже.

// 0 - красный, синий, зеленый
// 1 - красный, фиолетовый, зеленый
// 2 - желтый, зеленый, синий
// 3 - фиолетовый, зеленый, желтый
// 4 - голубой, красный, фиолетовый
// 5 - белый, голубой, красный
// 6 - белый, синий, красный

CodeMaster
20.12.2012, 22:53
ИМХО остальные еще хуже.

Ну, да. А что от 7-ми цветного варианта ты совсем отказался, я что-то пропустил? Там бордюр можно заменить на иммитацию серого\голубого и было бы отлично.

Zelya
20.12.2012, 23:35
vinxru,
Палитры:

http://i.piccy.info/i7/40e864322855aebaef99dbdb6319766a/1-5-8689/7954839/palette.png

CodeMaster
21.12.2012, 08:27
Палитры:

Ни фига не видно, ни тут ни прямо по линку.

vinxru
21.12.2012, 10:09
Я вижу палитру, но ничего не понял.

Я сделаю игру с двумя вариантами графики:
1) черный-красно-сине-зеленой, без клеток, шары 7 цветов.
2) черный-голубой-белый-красный, с клетками, шары с узорами.

И переключение по кнопке.

Zelya
21.12.2012, 13:02
vinxru,
Палитра задается через порт 193. На рисунке набор палитр от нуля до 127 (потом повторяются). Выбираете номер палитры, и получаете четыре цвета. Верхний (где номер) - 0, нижний - 3.
Например, Ваша палитра черный-голубой-белый-красный - это 33, 40, 49, 56, 72, 81 (отличаются порядком цветов).

vinxru
21.12.2012, 14:03
Понятно.

А есть ли среди этих вариантов, тех которых нет в функции BIOS-а? Там всего 6 вариантов.

Zelya
21.12.2012, 14:35
vinxru,
Через функции BIOSа есть 6 вариантов палитры, но они меняются в зависимости от нулевого цвета (а он любой из восьми). Я не заморачивался, если честно, все или не все варианты возможны при использовании этих функций. Мне всегда было куда проще ориентироваться по этой табличке.
Главное, подобрать палитры, чтобы менять цвета без изменения спрайтов. Например, в Рике, я использую разные палитры для разных уровней при тех же спрайтах/тайлах (см. вложение)
Вы хотите сделать переключатель цветов. Могу посоветовать и выбрать, как основную 40-ю палитру (с теми цветами, что есть сейчас). И сделать опцию "выбор цветов" для каждого цвета. Например, если мы меняем голубой на зеленый, палитра меняется на 44. Если меняем красный на желтый, 42. Если одновременно и голубой и красный - получаем 46. Этот механизм можно расширить, если изучить табличку.
Либо можно сделать "захардкодженный" переключатель, выбрав самому самые клевые палитры. Главное, чтобы самый темный цвет оставался самым темным (если черный - 0, то и во всех палитрах черный - 0, на карйняк можно поменять его на синий), а самый светлый - светлым (тут можно менять белый-желтый или белый -голубой).

vinxru
21.12.2012, 18:58
Всё, финальная версия графики. Точнее 2 в 1, переключаются кнопкой F0. Прикиньте, там F-ноль есть. А в эмуляторе b2m это кнопка ESC.

http://s004.radikal.ru/i205/1212/a4/53d94a1ce427.png

http://s56.radikal.ru/i154/1212/92/9690d95162fc.png

Скачать игру: http://rghost.ru/42408019

Осталось доделать:
1) Стартовую картинку
2) Мигающий курсор во время ввода имени в таблице рекордов
2) Еще доработаю градиент на трубах. Можно к белому еще голубого цвета добавить.
3) Позиций в таблице рекордов будет больше.
4) Имя победителя бы влево сместить. Но это и так нулевая позиция текста с точки зренеиня BIOS. Надо BIOS обманывать как то.
5) Возможно глаза белым

NovaStorm
22.12.2012, 11:58
>5) Возможно глаза белым
Попробовал покрасить, так по-моему действительно лучше. Палитра больше нравится вторая.

Titus
22.12.2012, 12:16
Однозначно вторая палитра.

vinxru
22.12.2012, 14:11
Вместо F0 на реале получилось СТР. Поправлю.

Переделал переключение спрайтов. Вместо использования указателей на спрайты, и изменения этих указателей, теперь я обмениваю местами участки памяти содержащие старые и новые блоки.

Сделал для этого функцию memswap(void*, void*, uint), но почему то все сломалось.

Еще буду искать в BIOS-е функцию типа getch (ожидать нажатия кнопки и вернуть код), на аналогичную, но без ожидания.

DATAsoft
22.12.2012, 16:05
А мне первая палитра больше понравилась.

Mad Killer/PG
22.12.2012, 16:33
Можно два варианта, первую игру назвать Toxic Edition:-)

DATAsoft
22.12.2012, 16:47
Точно. А вторую назовём blue edition.:)

Mad Killer/PG
22.12.2012, 16:53
DATAsoft, лучше Ice edition:-) в связи с цензурой на голубой цвет.

DATAsoft
22.12.2012, 22:06
Не. Лучше по Принципу Задорнова: блювота, тьфу bluewater - голубая вода.:)

vinxru
25.12.2012, 23:57
5 ый вечер подряд пытаюсь нарисовать заставку...

Zelya
03.01.2013, 15:27
5 ый вечер подряд пытаюсь нарисовать заставку...

И как? Получилось?

vinxru
03.01.2013, 17:04
После праздников дорисую.

Под новый год дел было куча, а сейчас я решил отдохнуть от программирования. Попаять хочется.

18-01-2012: Помню и доделаю.

Zelya
19.01.2013, 02:02
18-01-2012: Помню и доделаю.
А пока, ставим рекорды со старой заставкой :)
http://lvovpc.ho.ua/games/page.php?name=lines