[solved] Кто может помочь с SevenuP
- Random Great
- Сообщения: 273
- Зарегистрирован: 14 фев 2017, 00:00
- Контактная информация:
[solved] Кто может помочь с SevenuP
Пытаюсь написать игру для ZX, нашел самый вменяемый редактор спрайтов для этого - SevenuP.
Единственная загвоздка - не хочет сохранять спрайты в том формате, в котором мне надо
Спрайты занимают 2x2 знакоместа ( карта типа LaserSquad ).
Формат следующий:Код:[левый байт спрайта],[правый байт спрайта],[левый байт спрайта],[правый байт спрайта],...[левый байт спрайта][правый байт спрайта],[атрибут1],[атрибут2],[атрибут3],[атрибут4],[левый байт спрайта],[правый байт спрайта],[левый байт спрайта],[правый байт спрайта],...
Кто-нибудь может сказать как выставить параметры Output Options в нем чтобы получился такой формат?
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)
Единственная загвоздка - не хочет сохранять спрайты в том формате, в котором мне надо
Спрайты занимают 2x2 знакоместа ( карта типа LaserSquad ).
Формат следующий:Код:[левый байт спрайта],[правый байт спрайта],[левый байт спрайта],[правый байт спрайта],...[левый байт спрайта][правый байт спрайта],[атрибут1],[атрибут2],[атрибут3],[атрибут4],[левый байт спрайта],[правый байт спрайта],[левый байт спрайта],[правый байт спрайта],...
Кто-нибудь может сказать как выставить параметры Output Options в нем чтобы получился такой формат?
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)
- Random Great
- Сообщения: 273
- Зарегистрирован: 14 фев 2017, 00:00
- Контактная информация:
Шыншыл спасибо что откликнулся!
У меня затык был не в том чтобы написать процедуру под формат SevenuP, а в том чтобы формат выгрузки SevenuP подогнать под мою процедуру вывода - у редактора замороченые настройки выгрузки, которые позволяют сконфигурировать формат asm-файла как нужно.
Вывожу через LDI по очереди байт левого и правого знакоместа спрайта потом перехожу на одну линию вниз и так пока все 16 линий не будут заполнены ( при этом мы переползаем на нижние знакоместа спрайта ), потом вывожу 4 атрибута.
Все сорцы тут: https://github.com/RandomAmbersky/myzx
( Disc!: особого хода мыслей и клевых фишек по оптимизации там нет, работает и ладно )
Но кажись, наконец-то получилось Вот так всегда, бъешься над задачей пару дней безрезультатно, а стоит только задать вопрос на форуме - сразу приходит решение
У меня затык был не в том чтобы написать процедуру под формат SevenuP, а в том чтобы формат выгрузки SevenuP подогнать под мою процедуру вывода - у редактора замороченые настройки выгрузки, которые позволяют сконфигурировать формат asm-файла как нужно.
Вывожу через LDI по очереди байт левого и правого знакоместа спрайта потом перехожу на одну линию вниз и так пока все 16 линий не будут заполнены ( при этом мы переползаем на нижние знакоместа спрайта ), потом вывожу 4 атрибута.
Все сорцы тут: https://github.com/RandomAmbersky/myzx
( Disc!: особого хода мыслей и клевых фишек по оптимизации там нет, работает и ладно )
Но кажись, наконец-то получилось Вот так всегда, бъешься над задачей пару дней безрезультатно, а стоит только задать вопрос на форуме - сразу приходит решение
Гляну, попробую осилить. На первый взгляд:
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
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
Ненависть- это подарок
- Random Great
- Сообщения: 273
- Зарегистрирован: 14 фев 2017, 00:00
- Контактная информация:
Всего в наборе два тайла пока До отрисовки массива карты пока не дошел
В файле map.ASM в процедуре map_show_map стабильно подставляется нулевой спрайт:Код:LD A, #0call map_show_sprite
( правый нижний угол - это я еще пытаюсь спрайт #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)
В файле map.ASM в процедуре map_show_map стабильно подставляется нулевой спрайт:Код:LD A, #0call map_show_sprite
( правый нижний угол - это я еще пытаюсь спрайт #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)
эммм.
из гита:
;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
Зачем здесь LDA #1?
значение берется не из карты тайлов.
и еще:
CALL screen_calc_down_DE раз используешь знакоместа, то поменяй на 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
из гита:
;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
Зачем здесь LDA #1?
значение берется не из карты тайлов.
и еще:
CALL screen_calc_down_DE раз используешь знакоместа, то поменяй на 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
Ненависть- это подарок
- Random Great
- Сообщения: 273
- Зарегистрирован: 14 фев 2017, 00:00
- Контактная информация:
Зачем здесь LDA #1?
значение берется не из карты тайлов.
Угу. Карта еще впереди, пока весь экран заливается тайлом #01
и еще:
CALL screen_calc_down_DE раз используешь знакоместа, то поменяй на inc d.
Пробовал - плохеет экрану после того как в цикле с верхних знакомест тайла переползаем на нижние.
Код:spr_loop_1PUSH DELDILDIPOP DE;EX AF,AF';CALL screen_calc_down_DE; в DE адрес опускаем на линию ниже;EX AF,AF'INC DDEC AJR NZ,spr_loop_1
значение берется не из карты тайлов.
Угу. Карта еще впереди, пока весь экран заливается тайлом #01
и еще:
CALL screen_calc_down_DE раз используешь знакоместа, то поменяй на inc d.
Пробовал - плохеет экрану после того как в цикле с верхних знакомест тайла переползаем на нижние.
Код:spr_loop_1PUSH DELDILDIPOP DE;EX AF,AF';CALL screen_calc_down_DE; в DE адрес опускаем на линию ниже;EX AF,AF'INC DDEC AJR NZ,spr_loop_1
Делал парсер sev файлов на луа в очень специфический познакоместный формат со смещениями. Проблем вообще нет, сам формат хорошо описан на http://www.zx-modules.de/fileformats/sevformat.html
- Random Great
- Сообщения: 273
- Зарегистрирован: 14 фев 2017, 00:00
- Контактная информация:
О, даже так! Благодарю. ) Но думаю пока не потяну парсер, пущай сам редактор мне в ASM конвертит...krt17 писал(а):
Делал парсер sev файлов на луа в очень специфический познакоместный формат со смещениями. Проблем вообще нет, сам формат хорошо описан на http://www.zx-modules.de/fileformats/sevformat.html
- Random Great
- Сообщения: 273
- Зарегистрирован: 14 фев 2017, 00:00
- Контактная информация:
О! Там есть режим чтобы мышкой тыкнул - точка зажглась, еще раз тыкнул туда же - погасла ? Я ZX-PaintBrush перед SevenuP смотрел, думал из $SCREEN забирать спрайты, но такого режима не нашел, а в SevenuP такое включается. Хотя по прочим возможностям SevenuP уступает.Шыншыл писал(а):
Нет, вообще я не сталкиался с 7up, я просто рисую в ZX PaintBrush, импортировать спрайты из картинок очень легко.
Random Great писал(а):
Я ZX-PaintBrush перед SevenuP смотрел, думал из $SCREEN забирать спрайты, но такого режима не нашел, а в SevenuP такое включается
Включаешь сетку:
потом выделяешь область, жмешь Ctrl+J, чтобы привязать выделение к сетке. Потом File->Export file/Selection As.., дальше несложно разобраться.
Ненависть- это подарок
- Random Great
- Сообщения: 273
- Зарегистрирован: 14 фев 2017, 00:00
- Контактная информация:
- Random Great
- Сообщения: 273
- Зарегистрирован: 14 фев 2017, 00:00
- Контактная информация:
Теперь берется Сорцы там же - https://github.com/RandomAmbersky/myzxШыншыл писал(а):
Зачем здесь LDA #1?
значение берется не из карты тайлов.
Отредактировано Random Great (2017-02-20 17:22:24)
- Random Great
- Сообщения: 273
- Зарегистрирован: 14 фев 2017, 00:00
- Контактная информация:
Клёво ! А ты как делал? Из LaserSquad есть?GoodBoy писал(а):
я в своё время вынимал спрайты из RebelStar2
весьма похоже
p.s. я брал отсюда - http://rebelstar.ru/