Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Arigato

Страницы: [1] 2 3 Далее
1
Ну судя по картинке армеец явно не рядовой, а какой-то офицер, так что откормленная ряха вполне годится. Рабочему тогда надо взять форму лица у партизан (только без маски), ну и щетину добавить на лицо. А вот помещика, конечно, хотелось бы того, что на обложке. Хотя бы для сохранения аутентичности оригинала.

Вот пример для рабочего:


2
Так а он кем будет? Я же нарисовал помещика уже...
Помещиком и будет. А то получается все однотипные, одни крестьяне выделяются. Рабочего, кстати, тоже можно чуть модифицировать. Я бы у него убрал очки, можно лицо сделать худощавым (а то какие-то они упитанные), добавить щетину. Наверное, форма лица для рабочего лучше подойдет от партизан, только без маски.

3
Ну и как она целиком выглядит
С учетом симметрии можно выводить спрайтами с зеркальным отражением. Тогда потребуется в 2 раза меньше тайлов, и можно даже в один набор уместить всех персонажей. Ну а доп элементы (очки и прочее) можно вывести фоном. Еще надо посмотреть какие части будут повторяться у разных персонажей.

Добавлено позже:
Крестьянин
Было бы неплохо еще и помещика взять с обложки для разнообразия картинок.

4
Тайная полиция/армия/торговцы/партизаны/рабочие/помещики

Можно вообще сделать вот как. Делаем фоном каркас человека, он будет общий для всех групп. А прочие плюшки (шапка, шевроны, погоны и прочее) накладываем спрайтами. Тогда можно легко сделать лицевую анимацию, например, имея вариант злого и доброго лица, а также варианты движения рта для имитации разговора.

Размер 64*64 пикселя (8*8 тайлов) будет оптимальным.

5
Для стилизации под пиксельарт можно использовать нейросеть
Да, симпатично получилось. Цвета можно подогнать под NES вручную.

Одну из половин можно отрисовывать зеркале тайлы.
Это же только в спрайтах можно. Если размер картинок ограничить до 64 тайла всего (8*8), то на экране можно вывести одну картинку с отражением половинки.

6
Торговцы по своей сути это ближе к богачам, или к люмпенам?
Да, богачи. Я бы под них взял эту картинку:



А помещиков зять с обложки. Рабочих можно из крестьянина сделать, переделав шапку.

Остальные группы можно и не отрисовывать.


7
Ну, даже с 4-мя цветами это не особо сложно.
Сделал простенький конвертер (см. вложение, исходники на Лазарусе, там же есть и exe). С ним получается примерно так (см. скриншот). Только надо пересохранять итоговую картинку в формат 16 цветов (можно через Paint) и импортировать в режиме without color data.

У вас, конечно, чуть лучше результат получился. Но и исходная картинка у меня меньше. Да и вручную можно огрехи поправить. Но пока только 3 цвета (плюс фоновый черный). Все же надо больше цветов задействовать.

8
Можно попробовать разделить картинку на области, чтобы применить к ним разные палитры. Например, лицо желтое. Ну если вам не лень этим заниматься, можете сделать, добавлю в игру. Только надо продумать, где именно их выводить, так как они занимают фактически весь набор тайлов. То есть для текста места не остается. Если делать спрайтами, то спрайтов не хватит.

P.S. Если есть желание, можете еще звуки посмотреть. Я прикрепил fms (для FamiStudio), там музыка, она норм. Но есть звук police, но эмитирует этот звук - https://www.youtube.com/watch?v=Gmrb3a6DDgw&t=553s (надеюсь, нет проблем с просмотром ютуба). То есть звук, когда отчет т. полиции не представлен. Если прослушать мой вариант, он очень отдаленно напоминает, и меня даже устраивает. Но это NTSC. А если переключиться на PAL, то там совсем непохоже. Если удастся сделать более универсальную реализацию, чтобы и на PAL нормально звучала, будет отлично!

Также нужны еще некоторые звуки:
1. Вторжение - https://www.youtube.com/watch?v=Gmrb3a6DDgw&t=72s
2. Итоги вторжения - https://www.youtube.com/watch?v=Gmrb3a6DDgw&t=82s
3. Побег на вертолете - https://www.youtube.com/watch?v=Gmrb3a6DDgw&t=817s
4. Вроде еще при покушении были какие-то эффекты.

9
Ладно, можно забить на эти картинки. Попытался их импортировать, ничего вразумительного не получил. Их надо с нуля перерисовывать с учетом палитры NES и ее ограничений. Я вряд ли буду этим заниматься...

10
По логике это не просто полиция, а тайная полиция, то есть такой ярко выраженной формы у них не должно быть, иначе что в них тайного? Они должны быть внедрены в существующие фракции, чтобы узнать о настроениях изнутри. Или как бы они получили данные об уровне поддержки президента и о силах фракций? Так что Т. полицию можно никак не рисовать, на то она и тайная.

У меня две новые фракции: торговцы и рабочие. Ну если прямо под каждую фракцию делать свою картинку, можно попробовать нейронку попросить нарисовать по аналогии с помещиками и крестьянами.

11
Это из официального руководства.
Хм, даже не знал про это руководство. Кому интересно, вот ссылки (в принципе по обоим ссылкам одно и тоже):
1. https://spectrumcomputing.co.uk/entry/1388/ZX-Spectrum/Dictator
2. https://worldofspectrum.net/item/0001388/?

А картинки вы от сюда взяли или есть еще где-то материал, где эти картинки отдельно представлены?


Интересно, что на данной обложке спектрумовская радуга идет в обратном порядке следования цветов. Есть ли тут какой-то скрытый смысл?

Думаю, инструкцию имеет смысл добавить в саму игру.

12
Добавлены фракции (к уже имеющимся трём) или группы?
А что такое группы? Фракции это Помещики, Крестьяне, Армия, Партизаны, Т. Полиция и прочее.

13
Такой вопрос, правки в переводе игры будут?
Вообще я хочу максимально сохранить дух оригинальной игры (переведенной на русский), но при этом расширить контент и добавить новые механики. С этим, в частности, связаны мои мучения с переносом озвучки из оригинала, хотя можно было бы забить и использовать любую другую озвучку. Перевод игры явно имеет сатирический характер. Мне кажется он неплох, если смотреть на него с этой позиции.

В чем заключается расширение контента и механик:
1. Добавлены новые фракции к уже имеющимся.
2. Увеличено количество запросов от каждой из фракции.
3. Увеличено количество последних известий.
4. Увеличено количество решений президента.
5. Добавлена (на данный момент не до конца реализована) валютная биржа, позволяющая покупать и продавать иностранную валюту.
6. Планируется добавить дипломатические запросы (по аналогии с обычными запросами, но от русских, американцев и лефтотанцев).
7. Добавлен выбор уровня сложности игры при старте.

В остальном все близко к оригиналу, но, естественно, на сколько это возможно и с учетом особенностей другой платформы.

14
если это звук, то и экспортировать его нужно как фамистудио sfx code
Не всегда. Формально что звук, что музыка, это одно и тоже. Разница в логике работы famistudio_music_play и famistudio_sfx_play. Второй проще (наверное, это хорошо в плане ресурсов, но его код не изучал). Однако famistudio_sfx_play не дает возможность остановить звук, как famistudio_music_stop. То есть предполагается, что звук проигрывается полностью, ну и он должен быть коротким. Но если нам надо в какой-то момент прекратить звучание, то мы ничего сделать не можем (проверил, famistudio_music_stop не останавливает звук, запущенный famistudio_sfx_play, что логично). Ну и если у нас есть фоновая музыка и звуки, то, конечно, надо их разделить.

При этом в коде есть подпрограмма famistudio_sfx_clear_channel, которая останавливает sfx, но она помечена как "internal", так что может быть не совсем корректно ее использовать (хотя работает, проверил).

Еще выявился один нюанс, что инициализация sfx - famistudio_sfx_init, она не совсем полноценная. Допустим, мне не нужна музыка, а только звуки. Из документации можно сделать вывод, то вызов famistudio_init в этом случае не нужен, так как "Initialize the engine with some music data" и можно обойтись famistudio_sfx_init ("Initialize SFX engine with SFX data"). Оказывается нет, надо сначала вызвать famistudio_init (если музыки нет, дать ссылку куда угодно, так как таблицы у нас нет), а уже следом famistudio_sfx_init. Если первое не сделать, то работает с серьезными багами, например, у меня звуки проигрывались только из треугольного канала. А холостой вызов famistudio_init проблему решает.

Также и регион определяется только через famistudio_init, но при этом учитывается и в famistudio_sfx_play.

15
У меня работает нормально
Ясно, понятно. Короче, FamiStudio я обновил до последней версии, а старая версия библиотеки FAMISTUDIO SOUND ENGINE с новой версией не работала. Обновил библиотеку, теперь норм.

P.S. В общем, звуки я добью самостоятельно. Звук не представленного отчета тайной полиции вполне получился близким к оригиналу (если их "рядом" сравнивать, то не особо, но в самой игре вроде как даже и не заметно, но, как ни странно, на Spectrume с его бипером он звучит даже интереснее). С остальными звуками тоже помучаюсь, но сделаю.

16
Короче, я себе уже голову сломал  :facepalm:

И так, в FamiStudio 4.4.2 смог сделать звук, очень отдаленно, но напоминающий звук отказа тайной полиции предоставлять отчет (см. исходник звука во вложении).

Экспортирую звук, выбрав вариант FamiStudio Music Code:



То, что он выдает (с небольшими моими изменениями) также в прикрепленном архиве.

Но проиграть нормально звук не удается. В коде сказано, что надо установить два флага:

; This file is for the FamiStudio Sound Engine and was generated by FamiStudio
; Required flags for police:
; FAMISTUDIO_USE_SLIDE_NOTES = 1
; FAMISTUDIO_USE_NOISE_SLIDE_NOTES = 1

Так вот если их оба установить, то игра вообще вылетает:



Если не устанавливать второй FAMISTUDIO_USE_NOISE_SLIDE_NOTES, то что-то играет, но не то, с какими-то артефактами и зависанием по итогу.

Что не так делаю? Как запустить этот звук для проигрывания?

17
Руководство будем делать?
Ну если хотите, составьте текст. Так там есть краткая инструкция на вступительном экране. Можно и отдельно более полное сделать.

18
На 9:13 звуковой эффект отказа тайной полиции.
Данный звуковой эффект реализован в машинных кодах. Вот его реализация на ассемблере:
PUSH   BC
LD     B,#1E
#5D4F:
PUSH   BC
LD     C,B
LD     A,(#5C48)
SRL    A
SRL    A
SRL    A
SET    4,A
OUT    (#36),A
NOP
NOP
NOP
#5D61:
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ   #5D61
RES    4,A
OUT    (#36),A
LD     B,C
NOP
NOP
NOP
#5D71:
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ   #5D71
POP    BC
DJNZ   #5D4F
POP    BC
RET
В #5C48 значение #0F (ну это цвет бордюра).

Звук повторяется таким кодом:
1770 POKE 23886,30: FOR a=1 TO 80: LET i=USR 23884: NEXT a
Думаю, как бы это перегнать на NES или в FamiStudio...

19
Думаю, в августе вернусь к проекту.
Как и обещал, в августе возвращаюсь к проекту  :biggrin:

В общем текущая ситуация следующая:
1. По логике игры осталось дописать некоторые игровые механики.
2. Проверить наполненность контента (не помню уже, все ли необходимые данные были внесены в проект).
3. Скорее всего разобраться с работой с мапперами, так как память уже заканчивается, надо будет расширять.
4. Решить проблему со звуками. Видимо (раз никто не может помочь, а сам я вряд ли создам необходимые звуковые эффекты, аналогичные оригинальной игре), придется стянуть звуковые эффекты с какой-нибудь другой игры и их использовать.

20
Эх, что-то всё заглохло... Неужели только в звуках загвоздка?
Нет, во времени загвоздка. Думаю, в августе вернусь к проекту. Но со звуками помощь реально пригодилась бы!

P.S. Я уже ассемблер 6502 и особенности архитектуры NES позабыл, придется все опять вспоминать  :lol:

21
Звук вторжения на 1:12
На 9:13 звуковой эффект отказа тайной полиции.
13:37 - побег на вертолете.

22
По части музыки - при необходимости, конечно, можем и ZX звезд-музыкантов привлечь - очень известных.
Наверное, вы неправильно поняли тему. Под ZX новых версий игры "Диктатор" не будет. Та, что в первом посте темы и так измененная и дополненная на базе оригинала.
Сейчас пишется ремейк этой игры под платформу NES (Денди), причем с достаточно серьезным расширением контента. И вот под NES музыка уже готова вся, простые звуки тоже перенесены из оригинала. А вот сложные звуковые эффекты лично я не знаю как переносить или хотя бы сделать некий аналог, путь даже и отдаленно похожий. Хотя уверен, что там нет ничего сложного, к примеру, звуки войны это звуки пулеметной очереди и взрывов. Такое на NES сделать не проблема. Проблема в том, что я не знаю как это сделать. Как вариант, если кто-то может помочь, то можно или создать оригинальные звуковые эффекты, или где-то надергать готовых, даже может из других игр. Если кто-то возьмется, то могу скинуть аудиозаписи этих звуковых эффектов из игры на ZX, чтобы можно было сотворить нечто подобное.

23
Есть ли какие то новости по части новых версий?
Новостей нет, было лето, период отпусков, потому проект был на это время заброшен. Но скоро вернусь к работе, на самом деле осталось не так много, основное уже сделано.

Может нужна какая то помощь?
Главная загвоздка на текущий момент - звуковое сопровождение. С музыкой своими силами разобрался, простые пикающие звуки тоже повторил один в один как в оригинале. А вот сложные звуковые эффекты (вроде озвучки войны и прочее) сам вряд ли потяну... Эти звуковые эффекты в оригинале написаны на Ассемблере, хотя сама игра на Бейсике.

24
Поэтому, если у тебя много данных для записи (более 1 фрейма по времени) то NMI отключают вместе с дисплеем (или можно в самом nmi вначале добавить 'флаг'),
Или можно разбить вывод на несколько кадров, если скорость неважна. Я так делаю, разбиваю информацию на части и вывожу порциями в разных кадрах.


25
LDA PPU_STATUS тоже нет никакого смысла каждый раз перед установкой адреса делать, это нужно только в 1 случае - если ты где-то записал только 1 раз в $2006 или $2005.
Ну по идеи чисто в теории такая ситуация может возникнуть, если между парой записей произойдет вызов nmi. Хотя это весьма странно, так как к этому моменту работу с PPU уже надо бы завершить. Но читал рекомендацию делать LDA PPU_STATUS, видимо, как раз на такой случай (вариант что просто в коде где-то забыли второй раз записать маловероятен, да и в принципе ошибочен). В общем убрал.

По поводу печати, то у меня две отдельные подпрограммы: одна устанавливает "курсор" в нужную клетку экрана, а другая выводит текст, перемещая курсор в конец строки (ну это автоматически происходит при обращении к PPUDATA). Это позволяет вызывать подпрограмму печати одну за другой, тогда текст будет выводиться дальше, за предыдущим. По логике это как в обычном BASIC командой PRINT происходит.

Например:

_GOTOXY #1, #11 ; это координаты курсора
_PRINT str_hello4 ; это вывод строки на экран
_PRINT16 game_hst ; тут вывод 16-битного числа
_PRINT_CHAR #'.' ; и символ "." в конце предложения

На экране это выглядит так:



При этом в _GOTOXY можно передавать не только числа (константы), но и регистры или переменные. Скажем: _GOTOXY #10, Y - установить курсор в строку с номером Y (регистр) в позицию 10.

Выбор экранов пока не сделал, в данный момент мне это не нужно. Может позже добавлю.

26
Для облегчения жизни написал подпрограмму, которая считает адрес по координатам (X, Y) экрана и устанавливает туда "курсор". Получилось громоздко:

; переместить курсор в позицию (X,Y)
; posx - #значение, переменнаЯ, регистры A, X
; posy - #значение, переменнаЯ, регистры A, Y
.macro _GOTOXY posx, posy
.local addr, px, py
; если оба параметра константы,
; то считаем адрес сразу без вызова процедуры
.if .xmatch (.left (1, {posx}), #) .and .xmatch (.left (1, {posy}), #)
LDA PPUSTATUS
px = .right (.tcount ({posx}) - 1, {posx})
py = .right (.tcount ({posy}) - 1, {posy})
addr = py * 32 + px + SCR_BASE
LDA #>addr
STA PPUADDR
; если старший и младший байты адреса совпадают, то втораЯ запись в A не нужна
.if .not >addr = <addr
LDA #<addr
.endif
STA PPUADDR
.else
.if .xmatch ({posx}, A)
TAX
.elseif .not .xmatch ({posx}, X)
LDX posx
.endif
; если posy константа, то считаем сразу Y * 32
.if .xmatch (.left (1, {posy}), #)
addr = .right (.tcount ({posy}) - 1, {posy}) * 32
_LD16 sreg, #addr
JSR gotoxy::offset
.else
.if .xmatch ({posy}, A)
TAY
.elseif .not .xmatch ({posy}, Y)
LDY posy
.endif
JSR gotoxy
.endif
.endif
.endmacro

; переместить курсор в позицию (X,Y)
; X - новер столбца 0-31, Y - номер строки 0-29
; addr = Y * 32 + X + SCR_BASE
.proc gotoxy

; Y * 32
TYA
_SHL A, 4 ; * 16
STA sreg
LDA #0
ROL A
ASL sreg ; * 32
ROL A
STA sreg + 1

offset:
; + X + SCR_BASE
TXA
ADC sreg
TAX
LDA #>SCR_BASE ; SCR_BASE = $2000
ADC sreg + 1

BIT PPUSTATUS
STA PPUADDR
STX PPUADDR

RTS
.endproc

Пример вызова:

_GOTOXY #3, #2
_PRINT str_hello0

То есть указываем координаты либо константами (с символом # в начале), либо переменная (то есть память), либо один из допустимых регистров. _PRINT печатает строку в установленную позицию курсора:

; вывод строки на экран
; str - строка
; offset - смещение (не обЯзательно): #значение, переменнаЯ, регистр
; Result: X - длина строки
.macro _PRINT str, offset
.ifnblank offset
_LDX offset
.else
LDX #0
.endif
:
LDA str,X
BEQ :+ ; конец строки
STA PPUDATA ; вывод очередного символа
INX
JMP :-
:
.endmacro

Макрос _GOTOXY пытается построить оптимальный код. Если переданы константы, то адрес сразу вычисляется и записывается уже готовое значение. Если же переданы переменные значения, то адрес считается программно в процедуре gotoxy.

В общем, как такое решение? Можно ли что-то улучшить или оптимизировать?

27
Там же нужен один BIT PPUDATA для возврата к цвету фона, а вторая запись в $2006 должна быть #$40.
Логично, что один. Видимо я там уже экспериментировал, потому что и один не возвращал фон в черный в эмуляторе Nintaco (NES). Самое интересное, что мне удалось изначально сделать черный фон в Nintaco (NES), потом что-то еще правил в коде, в итоге фон сбился, и я так и не смог восстановить исходную версию, где фон правильно отрабатывал...

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

о, что ждать 2 раза это никак не связано с инит кодом, просто вначале идёт проверка на вне vblank, а потом vblank.
В приведенном по ссылке коде сначала делают bit $2002 и утверждают, что он должен сбросить состояние, после чего ждут первый раз vblank, затем предлагают заняться разными манипуляциями с памятью (время есть) и ждут второй раз vblank.


28
Попробовал вариант с заменой палитры. По ссылке странно сказано - уложитесь в 21 цикл и при этом приведены шаги, которые никаким образом в 21 цикл не уложишь.

Получился следующий код (комментарии прямо в коде):


_GOTOXY #31, #25 ; установить курсор в позицию (31,25)
_PRINT_CHAR #$ff ; вывести символ $ff (он черный, но не фон)
LDA #200
STA _SPRITE_ADDR_Y(0) ; установить координату Y спрайта 0

@loop1:

; ждем столкновениЯ спрайта 0
@Sprite0:
BIT PPUSTATUS
BVS @Sprite0

; загружаю адрес палитры в регистры заранее
LDX #$3f ; старший адрес палитры
LDY #$0d ; младший адрес палитры
; восстанавливаю палитру длЯ всего экрана
STX PPUADDR
STY PPUADDR
LDA #$11 ; цвет фона текста длЯ всего экрана
STA PPUDATA
LDA #$29 ; цвет текста длЯ всего экрана
STA PPUDATA
LDA #$00
; ставим адрес на цвет фона
STX PPUADDR
STA PPUADDR
; сбрасываем адрес в ноль
STA PPUADDR
STA PPUADDR

@Sprite0b:
BIT PPUSTATUS ; эти такты тоже надо считать
BVC @Sprite0b ; ведь Sprite 0 hits уже случилсЯ

; отключаем рендеринг (в A у нас уже 0, см. выше)
STA PPUMASK
; менЯем палитру
STX PPUADDR ; старший адрес палитры (он уже в X)
STY PPUADDR ; младший адрес палитры (он уже в Y)
LDA #$27 ; цвет фона текста
STA PPUDATA ; устанавливаем цвет фона текста
LDA #$3d ; цвет текста
STA PPUDATA ; устанавливаем цвет текста
; пропускаю цвета, чтобы вернутьсЯ на цвет фона (иначе фон зальет этим цветом)
BIT PPUDATA
BIT PPUDATA
; возвращаем адрес на позицию экрана (тот знакомест, где у нас нулевой спрайт)
LDA #$23
STA PPUADDR
LDA #$3f
STA PPUADDR
; включаем рендеринг
LDA #%00011110
STA PPUMASK ; отключаем рендеринг (в A у нас уже 0, см. выше)

; сбрасываем прокрутку
; не знаю, нужно или нет, но в любом случае тут уже не надо спешить
LDA #$0
STA PPUSCROLL
STA PPUSCROLL
JMP @loop1

В эмуляторе FCEUX отработало идеально (внизу на оранжевом фоне серая надпись, это та же самая палитра, что и выше зеленая надпись на голубом фоне):


В VirtuaNES тоже все идеально. А вот в других эмуляторах начались проблемы.

Nintaco (NES):


Причем голубой фон как-то удалось побороть сдвигом в палитре на цвет фона, но потом я что-то еще менял, а позже уже не смог вернуть рабочий вариант. В любом случае полоса выше панели "КНОПКА" видна на черной фоне и постоянно дергается.

Mesen:


Такая же полоса и цвета уже не возвращаются на исходные.

Как видим, работа очень сильно зависит от эмулятора. Как оно будет на реальном железе - неизвестно (и проверить не на чем). Но даже если на железе оно бы заработало, все равно нынче надо ориентироваться и на эмуляторы, ведь большинство использует эмуляторы. И если мы применяем такие хаки, которые эмуляторы не понимают, то лучше так не делать.

Так что вернусь к варианту вывода надписи спрайтами...

29
Не хватает цветов. Но тогда проще будет надпись вывести спрайтами, тем самым один цвет из палитры освободив для других целей.

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

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

@loop:

; ждем столкновениЯ спрайта 0
@Sprite0:
BIT PPUSTATUS
BVS @Sprite0

LDA #%10010000
STA PPUCTRL
LDA #0
STA PPUSCROLL
STA PPUSCROLL

@Sprite0b:
BIT PPUSTATUS
BVC @Sprite0b

LDA #%10000000
STA PPUCTRL
LDA #0
STA PPUSCROLL
STA PPUSCROLL

JMP @loop



То, что нет осмысленной картинки, это так и должно быть, так как мне не нужен нулевой набор тайлов, просто сделал для проверки работоспособности метода. А артефакт, это первая строка пикселей в самом начале (верхняя слева) частично обрезается.

Ну да ладно, мне и не надо менять наборы тайлов, мне надо менять цвета. Тогда такой код:

@loop:

; ждем столкновениЯ спрайта 0
@Sprite0:
BIT PPUSTATUS
BVS @Sprite0

LDA PPUSTATUS
LDA #$3f
STA PPUADDR
LDA #$01
STA PPUADDR
LDA #$0f ; черный
STA PPUDATA
LDA #$3F
STA PPUADDR
LDA #$00
STA PPUADDR
STA PPUADDR
STA PPUADDR
STA PPUSCROLL
STA PPUSCROLL

@Sprite0b:
BIT PPUSTATUS
BVC @Sprite0b

LDA PPUSTATUS
LDA #$3f
STA PPUADDR
LDA #$01
STA PPUADDR
LDA #$01 ; синий
STA PPUDATA
LDA #$3F
STA PPUADDR
LDA #$00
STA PPUADDR
STA PPUADDR
STA PPUADDR
STA PPUSCROLL
STA PPUSCROLL
JMP @loop

И вот тут все намного хуже:



С одной стороны, цвет действительно поменялся (синий фон за текстом, так и задумано). С другой - этот текст "МЕСЯЦ 0" вообще не от сюда, он сверху экрана свалился вниз. Там внизу совсем другой текст должен быть, но экран куда-то съехал. Вот полный экран как выглядит:


"МЕСЯЦ 0" там внизу быть не должно, он вверху. А надпись, которая была внизу, вообще куда-то пропала.

И как это побороть?  :neznayu:

Добавлено позже:
Добавлю, что даже с отключенным экраном запись палитры нужно делать в VBlank
Я правильно понимаю, что не получится переключать палитру с помощью нулевого спрайта, чтобы у нас на экраны было как бы два набора палитр?

Страницы: [1] 2 3 Далее