Разработка и ромхакинг > Ромхакинг и программирование
[SMD] хакинг Dune: The Battle for Arrakis
<< < (396/447) > >>
SeregaZ:
да что-то не очень то и помогло...


--- Цитата ---rquadspr:
 incbin gfx\sprites\rocketquad.smd
--- Конец цитаты ---
за меткой rquadspr закрепляется файл rocketquad.smd, в котором 5 спрайтов по 2х2 тайла каждый.


--- Цитата ---rquad_tile   equ   (rquadspr-new_units_spr)/32+base
--- Конец цитаты ---
тут черт знает что происходит. видимо расчитывается какой это номер тайла по отношению к самому первому.


--- Цитата ---Rquad_spr_cfg1:      dc.w 0,   $10, $10, $FFF8, spr2x2, rquad_tile+00, $FFF8
Rquad_spr_cfg2:      dc.w 0,   $10, $10, $FFF8, spr2x2, rquad_tile+04, $FFF8
Rquad_spr_cfg3:      dc.w 0,   $10, $10, $FFF8, spr2x2, rquad_tile+08, $FFF8
Rquad_spr_cfg4:      dc.w 0,   $10, $10, $FFF8, spr2x2, rquad_tile+12, $FFF8
Rquad_spr_cfg5:      dc.w 0,   $10, $10, $FFF8, spr2x2, rquad_tile+16, $FFF8
--- Конец цитаты ---
тут видимо индивидуальные настройки по каждому углу поворота.

$10, $10 - видимо это координаты х, у по отношению к 0, 0 ячейки карты. типа если скажем ячейка карты у нас 64х64, то надо отступить от края на 16 пикселей и начинать рисовать тайлы юнита. вот только почему они обозначены как unused, unused

$FFF8 - черт знает что за Y_pos. 65528 или там с минусом? тут бы прояснить.

spr2x2 - видимо размер что 2 тайла на 2.

rquad_tile+00 - номер тайла, откуда начинать рисовать тот 2х2

$FFF8 - тож самое непонятное, только что по Х.


однако почему только 5 штук? разве их не должно быть 16?

то есть тогда таблица выглядела бы по другому:
угол0, используется файлнейм1, размер 2х2, сдвигать по Х на $10, по Y на $10, зеркалох = 0, зеркалоу = 0, половинках = 0, половинкау = 0
угол22, используется файлнейм2, размер 2х2, сдвигать по Х на $10, по Y на $10, зеркалох = 0, зеркалоу = 0, половинках = 0, половинкау = 0
*****
угол112, используется файлнейм4, размер 2х2, сдвигать по Х на $10, по Y на $10, зеркалох = 1, зеркалоу = 0, половинках = 0, половинкау = 0

то есть до 90 они шли без зеркал по очереди, после 90 - используются те-же файлы, но уже применяется зеркало, как пример 112 градусов - зеркалит по оси Х.

тут-же всего 5 вариантов расписано - я не понимаю как система понимает остальные положения. это ладно в том файле они пять положений идут друг за другом 0, 22, 45, 67, 90... но вдруг это соник? там же 0, 125, 90. где-то должна быть эта моя таблица по 16 позициям поворота. ну или если этот танк, там то нету промежуточных - значит всего 8. и тем не менее тут для рокетного квада должно быть 16, а их получается всего 5 и то не вся информация какая должна быть - нет упоминания зеркал и флага половинки, то есть инструкции клонировать, зеркалить и склеивать, как это должно быть в случае с кериолом.

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

вот тогда мозаика в моей голове складывается. хотя  еще не совсем - ибо есть еще орнитоптёры :)
Ti_:
$10,$10 - это размеры спрайты (16на16), насчёт unused я наврал, они нужны, но только для того чтобы юнит не пропадал на левом и верхнем крае экрана (когда на экране видна только часть юнита).
$FFF8 - это значит -8 , смещение спрайта от центра по Y.
$FFF8 - это тоже самое, по X.
rquad_tile+00 - номер тайла + зеркала (HMirr, VMirr, HVMirr или $0800, $1000, $1800)


Добавлено позже:

--- Цитата: SeregaZ от 25 Февраль 2017, 08:10:52 ---rquadspr:
 incbin gfx\sprites\rocketquad.smd
за меткой rquadspr закрепляется файл rocketquad.smd, в котором 5 спрайтов по 2х2 тайла каждый.
--- Конец цитаты ---
метка rquadspr указывает на адрес файл rocketquad.smd в роме, в котором может быть что угодно.

Добавлено позже:

--- Цитата: SeregaZ от 25 Февраль 2017, 08:10:52 ---rquad_tile   equ   (rquadspr-new_units_spr)/32+base
тут черт знает что происходит. видимо расчитывается какой это номер тайла по отношению к самому первому.
--- Конец цитаты ---
base это начальный номер тайла в видеопамяти для новых юнитов (base      equ   $ADA0/32   ; base tile    в new_spr_ptr.asm); $ADA0 - адрес видеопамяти,  32 размер тайла.
(rquadspr-new_units_spr)/32  - вычисляем какой начальный тайл у конкретного нового юнита получается. (узнаем размер вычитая rquadspr - адрес рома где лежит файл спрайта квада минус начальный адрес new_units_spr, откуда начинаются файлы спрайтов новых юнитов).


Добавлено позже:

--- Цитата: SeregaZ от 25 Февраль 2017, 08:10:52 ---однако почему только 5 штук? разве их не должно быть 16?
--- Конец цитаты ---
Остальные зеркалом образуются.
Sprite_type задан в файле юнита:

--- Код: ---sonblast_spr_sets ; 0
std_units_3f; 1
std_units_5f ; 2
soldiers_spr_sets ; 3
soldiers_spr_sets ; 4
thopter_spr_sets ; 5
no_spr_cfg ; 6
carryall_spr_sets ; 7
harvester_spr_sets ; 8
frigate_spr_sets ; 9
config_tank_sprites ; 10
config_SiegeTank_sprites ; 11
superlauncher_spr_sets; 12
lasertank_spr_sets; 13
--- Конец кода ---
Возможно сделаю ещё 2 типа, 3f юниты на 8 положений и 5f юниты на 16.

Добавлено позже:

--- Цитата: SeregaZ от 25 Февраль 2017, 08:10:52 ---нет упоминания зеркал и флага половинки,
--- Конец цитаты ---

--- Цитата: Ti_ от 23 Февраль 2017, 09:09:57 ---Параметра зеркала половинки не существует.
--- Конец цитаты ---
У кэриолла в конфиге 2 записи вот и всё.
Зеркалирование целого спрайта по V,H,VH для типов std_units_3f и std_units_5f  вычисляется на основе угла поворота юнита (если угол от 128 до 191 - при чтении конфигов код добавляет маску H, если от 128 до 255 , то добавляет маску V).
SeregaZ:
все равно в голове моей чот не складывается :) я подумал раз система танцует от типа спрайта, то тогда все понятно - от этого типа спрайта игра выбирает соответствующий алгоритм постройки таблицы углов для юнита... но вот например соник и ланчер - тип спрайта 1. я думаю у них второй спрайт по идее должен одинаково смотреть на 45 градусов. однако на сонике нифига не 45 - он смотрит совсем в другую сторону - 225. но откуда система знает что базовый спрайт оказывается совсем не 45 и в игре все-таки правильно его разворачивает? значит это не от типа спрайта зависит. где-то в другом месте это обозначено.

тогда выходит тип содержит следующие инструкции:
1. количество спрайтов - 3 или 5. (про угловые.) и соответственно 8 или 16 углов поворота.
2. есть анимация или нету. (у техники нет, у пехоты есть)
3. в случае если 3 спрайта, то сам тип угловых спрайтов - это может быть 0, 45 (или 225), 90 - техника или 0, 90, 180 - пехота. ведь у пехоты нет 45 градусных. ток вверх, вправо и вниз.
4. половинка спрайта или целый (кериол или другие типы)
5. башня есть или нету (танк и харвестер например)
6. особый тяжелый случай с орнитоптёром или это обычный юнит.
7. есть ли анимация выстрела (осадный или скажем трайк)
Ti_:

--- Цитата: SeregaZ от 25 Февраль 2017, 10:08:55 ---но откуда система знает что базовый спрайт оказывается совсем не 45 и в игре все-таки правильно его разворачивает?

--- Конец цитаты ---
В самом конфиге к номеру тайла добавлена маска зеркала.

--- Код: ---stank_spr_cfg1: dc.w 0, $18, $18, $FFF4, $600, $483, $FFF4+4
stank_spr_cfg2: dc.w 0, $18, $18, $FFF4, $A00, $47A+$1800, $FFF4
stank_spr_cfg3: dc.w 0, $18, $18, $FFF4+4, $900, $489, $FFF4
--- Конец кода ---

Добавлено позже:

--- Цитата: SeregaZ от 25 Февраль 2017, 10:08:55 ---тогда выходит тип содержит следующие инструкции:

--- Конец цитаты ---
Не содержит. std_3f и std_5f общие случаи, всё остальное частные.

Добавлено позже:

--- Цитата: SeregaZ от 25 Февраль 2017, 10:08:55 ---4. половинка спрайта или целый (кериол или другие типы)
--- Конец цитаты ---
В 3-ий раз пишу, никакой половинки не существует. Там просто более 1 записи в конфиге (Как и у групп пехоты, у танков). Как я уже писал , можно хоть на 20 частей порезать, и положение каждого кусочка описать, в т.ч. с масками.

Конфиг спрайта кэриолла отдельный, только потому что в него дорисовывается харвестер , если hold_id!=0.  Если переставить тип на std_3f, не будет только этого.


--- Код: ---carry_spr_cfg1: dc.w 1
dc.w $20, $20, $FFF0, $700, $1FCC, $FFF0
dc.w $20, $20, $FFF0, $700, $17CC, $0

carry_spr_cfg2: dc.w 0
dc.w $20, $20, $FFF0, $F00, $17D3, $FFF0

carry_spr_cfg3: dc.w 1
dc.w $20, $20, $FFF0, $D00, $17E3, $FFF0
dc.w $20, $20, $0,    $D00, $7E3,  $FFF0
--- Конец кода ---

Добавлено позже:

--- Цитата: SeregaZ от 25 Февраль 2017, 10:08:55 ---харвестер например)

--- Конец цитаты ---
У харвестера отдельный случай, в котором дорисовывается спрайт хвоста харвестера, если он на спайсе. Правда мне его ещё с 3-конфигов пришлось на 8 разбить, потому что там один из спрайтов сдвинут, говорил для чего. Так бы тоже можно было использовать std_3f.
У танков и прочего (последние 4 типа), частные случаи, в котором номер спрайта из файла юнита значения не имеет, а конфиги читаются с опредленных адресов (c указателей hurricane_spr_cfgs, tank_spr_cfgs, lasertank_spr_cfgs).
SeregaZ:

--- Цитата ---добавлена маска зеркала.
--- Конец цитаты ---
вот тут бы уточнить, но я пока не знаю точно как сформулировать этот уточняющий вопрос :)

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

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


замудрено это кароче...
Ti_:

--- Цитата: SeregaZ от 25 Февраль 2017, 12:07:40 ---не пойму какая еще маска, когда это значение номер тайла.

--- Конец цитаты ---

--- Код: ---        - каждый символьная позиция занимает 2 байта, где хранится:
          • номер символа в знакогенераторе (10 бит); указывает на символ в таблице символов
          • зеркало по горизонтали
          • зеркало по вертикали
          • палитра цвета (2 бита); индекс в памяти цвета (CRAM)
          • приоритет
--- Конец кода ---

Добавлено позже:

--- Цитата: Ti_ от 25 Февраль 2017, 08:54:43 ---rquad_tile+00 - номер тайла + зеркала (HMirr, VMirr, HVMirr или $0800, $1000, $1800)
--- Конец цитаты ---

номер тайла от $0000 до $07FF
SeregaZ:
так?

--- Код: ---%1111111111111111
      11111111111 номер тайла
     1            зеркало по горизонтали
    1             зеркало по вертикали
  11              палитра цвета (понятно чего палитр может быть только 4)
 1                приоритет
--- Конец кода ---
приоритет это на случай с кериолом, когда он харвестер будет тащить?
Ti_:

--- Цитата: SeregaZ от 25 Февраль 2017, 13:00:08 ---приоритет это на случай с кериолом, когда он харвестер будет тащить?

--- Конец цитаты ---
Нет, это приоритет над фоном (курсоры,радар, кредиты, иконки).
-RagmuL-:
Ааааа....
Читая это,чувствую что,становлюсь программистом! ....
Аааа.... Бежать! ....

P.S: Где новости по хакам!?

P.S 2: если что,я шучю! =D
SeregaZ:
где где... будут! :) чем больше пытаешь Ti_, тем больше становится возможностей по хакам, и исходя из этих возможностей люди придумывают какие-то новые идеи, и в итоге рождаются какие-то новые хаки.
Серьба:
Кто-нибудь может подсказать, почему большая иконка юнита в редакторе выглядит вот так? С маленькой иконкой тоже самое.
SeregaZ:
незнай... у меня все замечательно. попробуй выставить для больших иконок формат графики: 4bpp msx/md/wsc и шаблон: object 12, 7 H

Добавлено позже:
иконки шаблон: sprite 3,3 V. формат тот-же что большие иконки.
Серьба:
Благодарю!!! Теперь всё нормально.
SeregaZ:
вот посему то и я хотел бы запилить графический редактор :) чтоб независеть от выбранных настроек в yyy, а чтоб сразу были и правильные шаблоны и палитры и блек джек... и чтоб сразу конфигурационную инфу писалось. и чтоб каждый кадр отдельно показывалось. и чтоб друг за другом анимация была.
Ti_:

--- Цитата: SeregaZ от 27 Февраль 2017, 19:33:18 ---вот посему то и я хотел бы запилить графический редактор :) чтоб независеть от выбранных настроек в yyy, а чтоб сразу были и правильные шаблоны и палитры и блек джек... и чтоб сразу конфигурационную инфу писалось. и чтоб каждый кадр отдельно показывалось. и чтоб друг за другом анимация была.

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

по поводу номера тайла я еще подумаю потом. начать наверное надо с самого самого простого - редактирования большой и маленькой иконки, а так-же палитры к ним. надеюсь флаг палитры иконок тоже будет в новой версии вынесен? чтоб мне победить древний недочет с разнобоем в палитре рисования иконок в своем редакторе.
Ti_:

--- Цитата: SeregaZ от 28 Февраль 2017, 06:55:22 ---сейчас смотрю номер спрайта (не тайла) в редакторе и чот харикейн и лазер танк обои 121 и он же осадный. я чот думал что номер спрайта вещь уникальная... походу этот номер спрайта нигде не участвует в работе игры.

--- Конец цитаты ---
Номер спрайта указывает на ; main sprites ptrs
sprites_offs.
Вероятно, в пк-версии использовалась только одна эта таблица. В сега версии такие вещи как танки и некоторые другие сделаны костылем в коде, и их значения sprite1 (и sprite2) из файла юнита значения не имеют. Поскольку движок на 1 объект, только 1 спрайт поддерживает.


Добавлено позже:

--- Цитата: SeregaZ от 28 Февраль 2017, 06:55:22 ---а так-же палитры к ним. надеюсь флаг палитры иконок тоже будет в новой версии вынесен? чтоб мне победить древний недочет с разнобоем в палитре рисования иконок в своем редакторе.

--- Конец цитаты ---
Номер палитры, которые во время игры заключены в sprites_offs, в старший байт адреса.


Добавлено позже:

--- Цитата: SeregaZ от 28 Февраль 2017, 06:55:22 ---походу этот номер спрайта нигде не участвует в работе

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

--- Цитата ---Ну в теории можно передалть, чтобы для каждого юнита по номеру спрайта бралось по таблице.
--- Конец цитаты ---
не... я к тому, что раз этот параметр не используется, то и в редакторе тогда он нафиг :)


а вот геморой с флагом палитры иконок - это новость плохая.
SeregaZ:
первый цвет в палитре всегда прозрачный? это закон? хочу запилить вставку картинки с прозрачным цветом. это оказывается тот еще геморой... там целая система оказывается. спёр у буржуев код, еще пока сам точно невдуплил, но вроде получается. вот думаю при копировании из буфера обмена чтоб картинка прозрачилась везде, где цвет, который под первым номером в палитре (сейчас это фиолетовый вроде)

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

вот с селектом целая история... этот селект наверное не получится реализовать.
Ti_:

--- Цитата: SeregaZ от 01 Март 2017, 06:09:33 ---не... я к тому, что раз этот параметр не используется, то и в редакторе тогда он нафиг :)

--- Конец цитаты ---
Тебе же проще будет, если всё по одной системе, чем добавлять костыли вроде "в случае если spritetype=10 , то считать поинтер на конфиг из lasert_cfg_ptr: dc.l lasertank_spr_cfgs, а не из общей таблицы".

Добавлено позже:

--- Цитата: SeregaZ от 01 Март 2017, 20:23:30 ---первый цвет в палитре всегда прозрачный? это закон?

--- Конец цитаты ---
да.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии