Автор Тема: [NES] Не могу разобраться с палитрами и атрибутами на асм  (Прочитано 6800 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Guyver(X.B.M.)

  • Пользователь
  • Сообщений: 2398
  • Пол: Мужской
  • Уничтожим Кронос!
    • Facebook
    • Twitter
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Ну ясно. Надо просто восстановить первоначальное значение. Попробую угадать (как посмотреть я не знаю, но по-умолчанию я его не менял)

Ага, оно было lda #%00000001 - восстановил его и всё стало ОК. Спасибо.

Теперь осталось побороть вот ещё что. У меня длинная мелодия, допустим. 20 секунд. Я нажал кнопку - и она играет. Но если через 5 секунд после начала проигрывания нажать кнопку ещё раз - то звук продолжает играть как ни в чем не бывало. А когда мелодия заканчивается - она звучит сразу же ещё раз, но без первых 5 секунд мелодии. Надо как-то стопорить звуки и не "накапливать" их. Пока не знаю как это сделать...

Как-то можно "обнулить" все звуки вообще?
« Последнее редактирование: 22 Август 2017, 12:29:29 от Guyver(X.B.M.) »

Оффлайн MC68k

  • Пользователь
  • Сообщений: 118
    • Просмотр профиля
Запретить вывод звука. Почему "там играет, а тут нет", давай выкатывай код, будем разбирать.

Оффлайн Guyver(X.B.M.)

  • Пользователь
  • Сообщений: 2398
  • Пол: Мужской
  • Уничтожим Кронос!
    • Facebook
    • Twitter
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Стыдно, он такой гадский у меня :lol:

Добавлено позже:
MusicOver: ;;Музыка конец игры

 jsr NotaLa
 jsr Timer
 jsr NotaLa
 jsr Timer
 jsr NotaLa
 jsr Timer
 jsr NotaFa
 jsr Timer
 jsr NotaStop
 jsr Timer
 jsr NotaStop
 jsr Timer
 jsr NotaStop
 jsr Timer
 jsr NotaSo
 jsr Timer
 jsr NotaSo
 jsr Timer
 jsr NotaSo
 jsr Timer
 jsr NotaMi
 jsr Timer
 jsr NotaStop
 rts

NotaStop:
  lda #%00000000
   sta $4015
   lda #%00000000
   sta $4000
                 lda #$00
   sta $4002
   lda #$05
   sta $4003
   lda #%00000000
   sta $4001
   rts

NotaLa:
   lda #%00000001
   sta $4015
   lda #%10100111
   sta $4000
                 lda #$90
   sta $4002
   lda #$00
   sta $4003
   rts

NotaSo:
   lda #%00000001
   sta $4015
   lda #%10100111
   sta $4000
                 lda #$A0
   sta $4002
   lda #$00
   sta $4003
   rts

NotaFa:
   lda #%00000001
   sta $4015
   lda #%10100111
   sta $4000
                 lda #$B2
   sta $4002
   lda #$00
   sta $4003
   rts

NotaMi:
   lda #%00000001
   sta $4015
   lda #%10100111
   sta $4000
                 lda #$BD
   sta $4002
   lda #$00
   sta $4003
   rts

;;;;;;;;;;;;;;;;;;;;

Timer:
     LDA #1
     STA $0700
     LDA #0
     STA $0701
 loop:DEC $0700
     BNE loop
     DEC $0701
     BNE loop
 RTS

;;;;;;;;;;;;;;;;;;;

  lda currentpage; конец игры
  cmp #$03
  bne Hell1
  jsr MusicOver
Hell1:

А страница у меня подгружается при нажатии на кнопку определённую. Подгружаю я страницу сразу 2 раза - и звук доиграет до конца, а потом опять начинает, но не с начала, а с момента когда я нажал кнопку второй раз. Видимо, надо в личку кидать весь код...
« Последнее редактирование: 22 Август 2017, 14:09:16 от Guyver(X.B.M.) »

Оффлайн MC68k

  • Пользователь
  • Сообщений: 118
    • Просмотр профиля
Все когда-то начинали.

Не понятно, зачем в середине мелодии многократно отключать звук? Что с прерываниями, как сделан опрос кнопок?

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

Оффлайн Guyver(X.B.M.)

  • Пользователь
  • Сообщений: 2398
  • Пол: Мужской
  • Уничтожим Кронос!
    • Facebook
    • Twitter
    • ВКонтакте
    • Youtube
    • Просмотр профиля
С музыкой и звуками разобрался (как мог). Подскажите с другим вопросом, что-то не получается.

NESASM3

  lda currentpage ; считываем номер текущей комнаты
  cmp #$08 ; проверка номера комнаты с числом 8
  bne Pal08
  LDA palettes4, y ; загрузка палитры комнаты
  STA $2007 ; запись в PPU
  RTS
Pal08:

Этот код приведён для проверки комнаты 8, а как написать то же самое для проверки диапазона комнат?

К примеру, комнаты от 3 до 9 и у них будет одна палита - palettes4... Помогите кодом...

Чтобы избавиться от подобных конструкций (и вместо палитры для каждой комнаты забить в 4 палитры 4 набора комнат):

  cmp #$08 ; комната 08
  bne Pal08
  LDA palettes4, y
  STA $2007
  RTS
Pal08:

  cmp #$07 ; комната 07
  bne Pal07
  LDA palettes2, y
  STA $2007
  RTS
Pal07:

  cmp #$06 ; комната 06
  bne Pal06
  LDA palettes3, y
  STA $2007
  RTS
Pal06:

...
« Последнее редактирование: 23 Январь 2018, 02:21:48 от Guyver(X.B.M.) »

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
cmp #$3
beq page3
cmp #$4
beq page4
cmp #$n
beq pagen

Оффлайн Guyver(X.B.M.)

  • Пользователь
  • Сообщений: 2398
  • Пол: Мужской
  • Уничтожим Кронос!
    • Facebook
    • Twitter
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Сделал так:

  cmp #$05
  BCC Palitra3 ; если номер комнаты больше либо равен 05, то палитра 3
  LDA palettes3, y
  jmp LoadPall
Palitra3:

  cmp #$02
  BCC Palitra4 ; если номер комнаты больше либо равен 02, то палитра 4
  LDA palettes4, y
  jmp LoadPall
Palitra4:

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

Вроде работает...
« Последнее редактирование: 23 Январь 2018, 11:38:57 от Guyver(X.B.M.) »