1

Пытаюсь написать игру для ZX, нашел самый вменяемый редактор спрайтов для этого - SevenuP.
Единственная загвоздка - не хочет сохранять спрайты в том формате, в котором мне надо [img]http://zxdemos.ru/oldforum/img/posts/posts_20/30500.gif[/img]
Спрайты занимают 2x2 знакоместа ( карта типа LaserSquad ).
Формат следующий:Код:[левый байт спрайта],[правый байт спрайта],[левый байт спрайта],[правый байт спрайта],...[левый байт спрайта][правый байт спрайта],[атрибут1],[атрибут2],[атрибут3],[атрибут4],[левый байт спрайта],[правый байт спрайта],[левый байт спрайта],[правый байт спрайта],...

Кто-нибудь может сказать как выставить параметры Output Options в нем чтобы получился такой формат?

[img]http://zxdemos.ru/oldforum/img/posts/posts_20/30500.png[/img]


p.s. Если что - вот моя ( често скопипастеная из литературы ) процедура вывода спрайта на экран...Код:; на начало процедуры у нас в HL указатель на область спрайта; а в DE - экранный адресLD A, #10; кол-во линий у спрайтаspr_loop_1PUSH DELDILDIPOP DEEX AF,AF'CALL screen_calc_down_DE; в DE адрес опускаем на линию нижеEX AF,AF'DEC AJR NZ,spr_loop_1POP DE; // original screen positioncall screen_addr_to_attr_DE;LDILDIPUSH HLLD BC, 30LD HL, DEADD HL, BCLD DE, HLPOP HLLDILDIRETОтредактировано Random Great (2017-02-18 13:35:23)

2

POP DE; // original screen position

  call screen_addr_to_attr_DE;
  LDI
  LDI
  PUSH HL
  LD BC, 30
  LD HL, DE
  ADD HL, BC

покажи текст screen_addr_to_attr_DE и screen_calc_down_DE;

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

Ненависть- это подарок
защеканец gpv хорошо сосёт.

3

[b]Шыншыл[/b] спасибо что откликнулся!

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

Вывожу через LDI по очереди байт левого и правого знакоместа спрайта потом перехожу на одну линию вниз и так пока все 16 линий не будут заполнены ( при этом мы переползаем на нижние знакоместа спрайта ), потом вывожу 4 атрибута.
Все сорцы тут: https://github.com/RandomAmbersky/myzx
( Disc!: особого хода мыслей и клевых фишек по оптимизации там нет, работает и ладно )

Но кажись, наконец-то получилось smile Вот так всегда, бъешься над задачей пару дней безрезультатно, а стоит только задать вопрос на форуме - сразу приходит решение [img]http://zxdemos.ru/oldforum/img/posts/posts_20/30500_2.gif[/img]

[img]http://zxdemos.ru/oldforum/img/posts/posts_20/30500_2.png[/img]

4

Гляну, попробую осилить. На первый взгляд:

  LD BC, 30
  LD HL, DE  ;!!ex de,hl
  ADD HL, BC
  LD DE, HL ;!!ex de,hl


+30 - это переход по знакоместам ниже(после двух LDI), но это неправильно, например на адресе $40e2(7 знакомест сверху) не сработает. Удобнее:

ld a,e
add a,30
ld e,a
jr nc, no_down8
ld a,d
add a,8
ld d,a
no_down8

Ненависть- это подарок
защеканец gpv хорошо сосёт.

5

так, из сырков собрал снапшот, показывает одинаковое окно. В чем проблема? не те тайлы отображаются?

Ненависть- это подарок
защеканец gpv хорошо сосёт.

6

Всего в наборе два тайла пока [img]http://zxdemos.ru/oldforum/img/posts/posts_20/30500_3.gif[/img]  До отрисовки массива карты пока не дошел

В файле map.ASM в процедуре map_show_map стабильно подставляется нулевой спрайт:Код:LD A, #0call map_show_sprite

[img]http://zxdemos.ru/oldforum/img/posts/posts_20/30500_3.png[/img]

( правый нижний угол - это я еще пытаюсь спрайт #01  нарисовать поверх карты, в git пока нет )Код:LD BC, 30LD HL, DE  ;!!ex de,hlADD HL, BCLD DE, HL ;!!ex de,hl

Да, про команду EX я-то и забыл )Отредактировано Random Great (2017-02-18 13:34:32)

7

эммм.

из гита:

  ;DI
  call map_show_map;
  ;EI
  ;LD HL, #0000
  ;LD A, #00
  ;call map_show_sprite

далее, что удалось найти(map.asm):
; функция показа карты
map_show_map:
  ;LD BC, #100C ; width and height  - 16 x 12
  LD BC, #100C
  LD HL, #0000 ; current pos variable
map_loop2:
  PUSH BC
map_loop:
  PUSH BC
  PUSH HL
  LD A, #1
  call map_show_sprite
  POP HL
  POP BC
  INC H
  DJNZ map_loop;
  LD H, #00
  INC L
  POP BC; //origin
  DEC C
  JR NZ, map_loop2
  RET

Зачем здесь [b]LDA #1[/b]?
значение берется не из карты тайлов.


и еще:

[b]CALL screen_calc_down_DE[/b] раз используешь знакоместа, то поменяй на inc d.

screen_calc_down_DE: эта процедура перехода по адресу экрана вниз на линию.
  INC D
  LD A,D
  AND 7
  RET NZ
  LD A,E
  ADD A,#20
  LD E,A
  RET C
  LD A,D
  SUB 8
  LD D,A
  RET

Ненависть- это подарок
защеканец gpv хорошо сосёт.

8

Зачем здесь LDA #1?
значение берется не из карты тайлов.

Угу. Карта еще впереди, пока весь экран заливается тайлом #01 [img]http://zxdemos.ru/oldforum/img/posts/posts_20/30500_2.gif[/img]

и еще:
CALL screen_calc_down_DE раз используешь знакоместа, то поменяй на inc d.

Пробовал - плохеет экрану после того как в цикле с верхних знакомест тайла переползаем на нижние.

[img]http://zxdemos.ru/oldforum/img/posts/posts_20/30500_4.png[/img]Код:spr_loop_1PUSH DELDILDIPOP DE;EX AF,AF';CALL screen_calc_down_DE; в DE адрес опускаем на линию ниже;EX AF,AF'INC DDEC AJR NZ,spr_loop_1

9

Ладно, оставь как есть, рисуй дальше.

Ненависть- это подарок
защеканец gpv хорошо сосёт.

10

Делал парсер sev файлов на луа в очень специфический познакоместный формат со смещениями. Проблем вообще нет, сам формат хорошо описан на http://www.zx-modules.de/fileformats/sevformat.html

11

[quote="krt17"]

Делал парсер sev файлов на луа в очень специфический познакоместный формат со смещениями. Проблем вообще нет, сам формат хорошо описан на http://www.zx-modules.de/fileformats/sevformat.html

О, даже так! Благодарю. ) Но думаю пока не потяну парсер, пущай сам редактор мне в ASM конвертит...