Важная информация

User Tag List

Страница 38 из 71 ПерваяПервая ... 343536373839404142 ... ПоследняяПоследняя
Показано с 371 по 380 из 703

Тема: Новый графический режим для игр

  1. #371
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,913
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    90
    Поблагодарили
    32 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    Предлагаю обсудить текущую линейку простых режимов для модернизации старых и написания новых игр.
    Мне лично эта идея по нраву. Только что вот вопросики есть:
    Цитата Сообщение от zst Посмотреть сообщение
    торой слой и режимы с прозрачным цветом позволят рисовать спрайты без клешинга и затирания фона.
    как карта понимает в какой слой производится рисование? Битик в порту? Получится ли за один проход по экрану рисовать в оба слоя сразу?
    Цитата Сообщение от zst Посмотреть сообщение
    В первом слое тоже можно применить прозрачный цвет. Это позволит сделать фон любого цвета, а поверх нарисовать тайлы с произвольными контурами.
    Опять же вопросы: для фона можно будет использовать палитру? Если да, то с какой глубиной цвета? Если да, то будет ли палитровый BORDER? Если да, то как все это будет управляться?

  2. #372
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Мне лично эта идея по нраву. Только что вот вопросики есть:

    как карта понимает в какой слой производится рисование? Битик в порту?
    Нужно записать число 0 или 1 в параметр layer. Область параметров видеокарты будет располагаться в конце адресов ПЗУ. Это упростит настройку параметров. Можно использовать команды прямой адресации. Это быстрее, чем запись в порт и не требуется регистр BC для адресации порта.
    Получится ли за один проход по экрану рисовать в оба слоя сразу?
    Вопрос непонятен. Требуется как раз рисовать тайлы и спрайты в разных слоях для устранения клешинга и затирания фона. Но вы сможете в любой момент выбрать нужный слой для рисования. Адреса в области пикселов при этом не меняются.
    Опять же вопросы: для фона можно будет использовать палитру? Если да, то с какой глубиной цвета?
    Я предполагаю, что лучше дать возможность программисту для каждого слоя и фона использовать свои палитры VGA. А так как для фона палитра состоит из одного цвета, то может лучше сразу указать три байта в параметрах back_color_r, back_color_g, back_color_b. А VGA DAC изобразит на экране столько битов на цвет, сколько сможет.
    Если да, то будет ли палитровый BORDER? Если да, то как все это будет управляться?
    Указать три байта в параметрах border_color_r, border_color_g, border_color_b.


    О модернизации игр.

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

    Представим, что мы написали игру для старого режима, а теперь хотим немного улучшить ее графику без изменения спрайтов. Как вы знаете, на ZX Spectrum-е почти в любой цветной ходилке главный персонаж выглядит как прозрачный призрак, сквозь которого виден фон из тайлов. Поставим простую задачу - закрасить главного героя двумя цветами на спрайт, например желтым с черным. Этапы переделки могут быть такие.

    Для начала тайлы можно печатать без изменений. Только перед печатью тайлов выбираем слой 0, записав 0 в параметр layer в области параметров видеокарты. Режим цвета выбираем стандартный, записав число COLOR2X64 в параметр color_mode. Далее, как обычно заполняем экран тайлами фона.

    Перед печатью спрайтов выбираем слой 1, записав 1 в параметр layer. Режим цвета выбираем 2 цвета на 8 точек + маска, записав число COLOR2X8M в параметр color_mode.

    Подпрограмму печати спрайта модернизируем. Выбираем цвет спрайта, записав соответствующее число в параметр palette_2c. Вычисляем адрес в области пикселов. Записываем по два байта по одному адресу: маску и пикселы. И так для всех 8 линий части спрайта размером 8х8 точек. Для следущих частей спрайта цвет уже выбирать не надо - только маски и пикселы для каждых 8 точек.

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

    Для перехода из режима 2 цвета на 64 точки к режиму 2 цвета на 8 точек надо сделать так:
    Допустим было так. В памяти тайлы фона хранятся в таком виде - 8 байтов пикселов + 1 байт атрибутов на клетку 8х8 точек. Подпрограмма печати тайла вычисляет адрес в области пикселов, копирует туда 8 байтов пикселов из области тайлов. Затем вычисляет адрес в области атрибутов и копирует туда атрибут тайла.

    Надо немного переделать порядок операций при вывода тайлов. Перед печатью тайлов фона выбираем слой, в который будем печатать тайл - 0. Выбираем режим цвета - 2 цвета на 8 точек. Это указываем в блоке параметров видеокарты.

    Адрес в области атрибутов теперь не требуется. Подпрограмма печати тайла копирует атрибут тайла в параметр palette_2c. Затем вычисляет адрес в области пикселов, копирует туда 8 байтов пикселов из области тайлов.

    Немного подробнее про палитры:
    Палитры первого уровня типа palette_2c преобразовывают 1-4 бита на точку в 8 битов. Это аппаратное представление номера цвета в буфере экрана. При выводе на монитор 8 битов можно будет преобразовать с помощью палитры VGA в 32K цветов или другое разрешение в зависимости от видеоцапа в конкретном компьютере. То есть в 0 и 1 слое могут быть любые 255 цветов из палитры 32К + прозрачный. Для начала палитры можно настроить так, чтобы они соответствовали стандартным цветам. Это упростит модернизацию старых игр. Числа, записываемые в palette_2c будут соответствуют атрибутам стандартного режима.

    Для совместимости палитры первого уровня должны иметь номера 1-15 для стандартных 15 цветов + прозрачный с номером 0.
    Последний раз редактировалось zx-kit; 18.08.2015 в 17:28.
    "L-256"

  3. #373
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Можно уменьшить количество параметров:

    layer - номер слоя, 0 - обычно для тайлов, 1 - обычно для спрайтов, возможно в будущем получится добавить 2 и 3.
    color_mode - режим цвета, описывет количество цветов на тайл или спрайт (2, 3, 4, 7, 8, 15 или 16), наличие прозрачного и т.п.
    attribute - цветовой атрибут, описывает соответствие для преобразовывания 1-4 бита на точку в 8 битов номера цвета, для режимов с 2 цветами аналогичен стандартному атрибуту.
    back_color_r, back_color_g, back_color_b - составляющие RGB цвета заднего фона, его будет видно, если во всех слоях эта точка прозрачная.
    border_color_r, border_color_g, border_color_b - составляющие RGB цвета бордера.

    Включение блока параметров в область ПЗУ: двойной записью числа 1 в ячейку 3FFF.
    Выключение блока параметров из области ПЗУ: одинарной записью числа 0 в ячейку 3FFF.

    Для справки: у Денди тайлы обычно объединяются в блоки размером 16х16 точек, 3 цвета на блок + прозрачный, одна из 4-х палитр на блок.
    Последний раз редактировалось zx-kit; 18.08.2015 в 18:03.
    "L-256"

  4. #374
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,913
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    90
    Поблагодарили
    32 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    Включение блока параметров в область ПЗУ: двойной записью числа 1 в ячейку 3FFF.
    Может все же хотя бы для включения/выключения задействуем один битик в каком-нибудь порту? Олсл остался открытым вопрос о детекте карты.

  5. #375
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Может все же хотя бы для включения/выключения задействуем один битик в каком-нибудь порту? Олсл остался открытым вопрос о детекте карты.
    Пока карта получается без чтения и портов, может порты ZX-EVO ? Можно будет вернуться к этому вопросу, когда все остальное разработаем и если карта будет изготовлена или добавлена поддержка в эмуляторе. Пока остается в игре в разделе настроек вручную выбирать режим графики: Стандартный или "Meteor Graphics Mode1".

    Все остальное нормально ? Давайте вместе подумаем, какими командами включать этот и будущий режимы, чтобы оставалась совместимость. Как потом добавлять скроллинг, карту тайлов, блиттер, точки и линии, менять размер экрана. Отладить все мысленно. Потом подумать, как добавлять постепенно новые возможности в эмулятор. Кто это может сделать и какое описание для этого нужно ? Для начала режимы с 2,3,4 цветами на тайл/спрайт и стирание 8 точек.

    Для загрузки первичных палитр в SDRAM будет окно в области ПЗУ размером 768 байт. Выбираем режим цвета, потом загружаем данные в соответствующую этому режиму палитру. Для режимов 15 и 16 цветов в каждой строке палитры по 16 цветов. Если строк 256 *16=4KB ! Надо еще подумать, как лучше сделать и сколько строк в каждой палитре достаточно для режимов 2, 4, 8, 16 цветов на спрайт...

    Для уменьшения доработок игры надо подумать, как реализовать стандартные цвета в первичных палитрах (атрибутах) и в выходной палитре VGA. Может для этого добавить микроконтроллер ATMEGA48, который будет заполнять палитры в SDRAM стандартными значениями после сброса ?
    Последний раз редактировалось zx-kit; 19.08.2015 в 04:36.
    "L-256"

  6. #376
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    да сделайте уже нормальное 3д. чё вы к этим тайлам привязались???
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  7. #376
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #377
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    да сделайте уже нормальное 3д. чё вы к этим тайлам привязались???
    3D - это конечно интересно, но кто будет это все писать ? А предлагаемые мной режимы легко реализовать на FPGA. Никакой математики и глобальной переделки игр. Представьте, за много лет для Спектрума написали 1000 игр разного уровня цветности, скорости. Игрокам понравились из 1000 только 10. Они предпочтут перекрасить 10 популярных игр, у которых уже хорошая графика или сюжет. А 1001 игра, хоть и 3D может и не понравится. Поэтому для Спектрума нужен режим графики для плавного улучшения стандартных режимов и написания игр с похожей, но улучшенной графикой, но не 3D. А 3D игр итак полно. Вот ELITE недавно сделали в 3D ...

    А тайлы - это основа большинства игр для Спектрума и Денди. Большие экраны и игровые пространства строятся из маленьких повторяющихся тайлов. Только у Спектрума - 2 цвета на тайл, а у Денди - 3 + прозрачный. Разница не очень большая, но какой эффект ! Так давайте лучше немного проапгрейдим компьютер 1982 года до количества цветов игровой приставки 1983 года.

    Надо начать с простого. Лучше сразу в эмуляторе, чтобы все смогли попробовать. Есть у нас такие специалисты ? Даже просто второй слой и режим 2 цвета + маска позволят устранить клешинг атрибутов. А если реализовать 3 цвета + прозрачный и 4 цвета на тайл/спрайт, то этого будет достаточно для резкого повышения качества графики в играх. Дальнейшее увеличение количества цветов до 8 и 16 на тайл/спрайт может и не потребуется.

    ---------- Post added at 06:54 ---------- Previous post was at 06:46 ----------

    Alex Rider, у тебя какие компьютеры ?
    Последний раз редактировалось zx-kit; 20.08.2015 в 05:08.
    "L-256"

  9. #378
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,280
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    3D - это конечно интересно, но кто будет это все писать ? А предлагаемые мной режимы легко реализовать на FPGA. Никакой математики и глобальной переделки игр. Представьте, за много лет для Спектрума написали 1000 игр разного уровня цветности, скорости. Игрокам понравились из 1000 только 10. Они предпочтут перекрасить 10 популярных игр, у которых уже хорошая графика или сюжет. А 1001 игра, хоть и 3D может и не понравится. Поэтому для Спектрума нужен режим графики для плавного улучшения стандартных режимов и написания игр с похожей, но улучшенной графикой, но не 3D. А 3D игр итак полно. Вот ELITE недавно сделали в 3D ...
    и где на спектруме Элиту в 3Д выпустили? хотя СТОП - на спектруме она и так была в 3Д, только "проволочном" и жутко тормозном. А теперь представь эту элиту на спектруме в нормальном, текстурированном 3Д. Лично мне это уже интересно. В элиту не играл как раз из-за убогости графики и тормознутости, ну пожалуй, кривое управление. Есть ещё куча идей и проектов для реализации в 3д. Может оно и сложно реализовать в железе, но результат зато только положительный. Такую карту я был бы готов купить и за 3т.р. и за 5т.р., особенно если была бы возможность прикрутить к спринтеру.
    строятся из маленьких повторяющихся тайлов.
    тайлы это жуткий тупик. нужно начать с того, что для переделки, скажем, того же зинапс, её нужно переломать. залезать в код и менять все процедуры вывода спрайтов. думаете найдутся такие отважные ребята которые станут это делать ради оцветления игры? что-то сомнительно. другое дело, когда есть 3д. масса возможностей. прибавить сюда ещё линейный аксель или блиттер...
    а тайлы это каменный век, ни к чему это не приведёт. тем более ты говоришь, сделать что-то простое. судя по последним постам это уже не простое, а монструозное что-то. крайне не удобное в программировании. слишком много телодвижений.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  10. #379
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,913
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    90
    Поблагодарили
    32 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zst Посмотреть сообщение
    Alex Rider, у тебя какие компьютеры ?
    Только PC. Реала нет.
    Цитата Сообщение от Sayman Посмотреть сообщение
    нужно начать с того, что для переделки, скажем, того же зинапс, её нужно переломать. залезать в код и менять все процедуры вывода спрайтов.
    Обсуждалось тут уже. Это проще, чем сделать новую игру. Потому что для этого нежен только кодер с прямыми руками, а для игры - куча других персонажей, которых мало кто совмещает в одном лице. Мало того, если уж разбирать игру, ее можно переделать сразу и под "Метеор", и под TSConf, и под экран Profi, и, боже упаси, под АТМ.

  11. #380
    Guru Аватар для zx-kit
    Регистрация
    11.04.2009
    Адрес
    г. Санкт-Петербург
    Сообщений
    3,603
    Записей в дневнике
    15
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    52 сообщений
    Mentioned
    1 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Графические переменные и их адреса:

    3FFF enable_graphic_variables - включение блока графических переменных в область ПЗУ двойной записью числа 1, выключение записью числа 0.

    Остальные переменные расположены в области ПЗУ по адресам 3F00 - 3FFE. Размер переменной 1 байт. Адрес уточняется при реализации.

    color_mode - текущий режим цвета, определяет количество битов на точку, наличие байта маски и палитры
    color - номер цвета для режима "1 цвет на байт"
    attr - цветовой атрибут для режима "2 цвета на байт"
    pl2 - номер палитры для рисования для режима "2 цвета на байт"
    pl4 - номер палитры для рисования для режима "4 цвета на байт"
    pl8 - номер палитры для рисования для режима "8 цветов на байт"
    pl16 - номер палитры для рисования для режима "16 цветов на байт"

    current_layer - номер слоя, на котором рисуем
    layers - байт включенности слоев 0-7 (0 = off, 1 = on),
    где слой 0 - стандартная графика ZX Spectrum-a, 1-7 - слои с расширенной графикой

    layer0_pl - номер палитры отображения для слоя 0
    layer1_pl - номер палитры отображения для слоя 1
    layer2_pl - номер палитры отображения для слоя 2
    layer3_pl - номер палитры отображения для слоя 3
    layer4_pl - номер палитры отображения для слоя 4
    layer5_pl - номер палитры отображения для слоя 5
    layer6_pl - номер палитры отображения для слоя 6
    layer7_pl - номер палитры отображения для слоя 7

    Координаты спрайта

    В некоторых старых играх спрайты выводятся не вертикальными столбиками из байтов, а горизонтальными линиями из байтов. При этом, для экономии места, спрайты иногда перед выводом сдвигают программно на нужное количество битов. Чтобы облегчить доработку таких игр добавляются следующие переменные, где 0-7 = номер байта в линии спрайта, A-D (или E-H) = байты 1-4 для соответствующего режима цвета:

    A0, A1, A2, A3, A4, A5, A6, A7,
    B0, B1, B2, B3, B4, B5, B6, B7,
    C0, C1, C2, C3, C4, C5, C6, C7,
    D0, D1, D2, D3, D4, D5, D6, D7,

    или

    E0, F0, G0, H0,
    E1, F1, G1, H1,
    E2, F2, G2, H2,
    E3, F3, G3, H3,
    E4, F4, G4, H4,
    E5, F5, G5, H5,
    E6, F6, G6, H6,
    E7, F7, G7, H7,

    Например, для вывода с маской в байты A0-A7 (или E0-E7) записываются 1-8 байтов маски, а в байты B0-B7 (или F0-F7)— соответствующее количество байтов спрайта.

    Координаты на экране левого байта линии спрайта предварительно задаются следующими переменными:

    x — мл. байт координаты X в пикселах
    xh — cт. байт координаты X в пикселах
    или
    xc — координата X в знакоместах
    xs — смещение по-горизонтали в знакоместе

    y — мл. байт координаты Y в пикселах
    yh — cт. байт координаты Y в пикселах
    или
    yc — координата Y в знакоместах
    ys — смещение по-вертикали в знакоместе

    Это позволяет рисовать спрайты на экране с расположением с точностью до пиксела.

    back_color_r - составляющие RGB цвета заднего фона, его будет видно, если во всех слоях эта точка прозрачная.
    back_color_g
    back_color_b

    border_color_r - составляющие RGB цвета бордера
    border_color_g
    border_color_b

    mask_level - какие биты в маске означают прозрачность точки: 0 = нули, 1 = единицы
    scr_addr - адресация расширенных экранов: 0 = стандартная с адреса 4000, 1 = линейная с адреса 0000

    graphics_mode - режим графики, 0 = стандартный, 1 = Meteor Graphics Mode 1.
    Последний раз редактировалось zx-kit; 03.10.2015 в 05:57.
    "L-256"

Страница 38 из 71 ПерваяПервая ... 343536373839404142 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 18
    Последнее: 11.04.2021, 10:54
  2. графический редактор
    от yur в разделе Вектор
    Ответов: 1
    Последнее: 08.11.2012, 13:01
  3. графический режим на Атари
    от goblinish в разделе Atari
    Ответов: 3
    Последнее: 06.01.2012, 11:19
  4. графический софт для 48 К
    от goglus в разделе Софт
    Ответов: 6
    Последнее: 02.08.2006, 15:33

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •