Разработка и ромхакинг > Ромхакинг и программирование
[SMD] Хак Zero Tolerance
<< < (90/99) > >>
Segaman:
Temkins, есть полностью доделанный сиквел.
а еще есть Piko Interractive, которые не хотят ее выпускать.

от нефиг делать я сел писать эмуляцию сетевухи для ZT :)
SeregaZ:
пятая часть по менеджменту звуков ZT :)

AuAurora:
SeregaZ, прикооооольно
perfect_genius:
Segaman, именно эмуляцию? Модифицируешь эмулятор и он будет выводить два экрана рядом?
SeregaZ:
ZT же по другому принципу играется :) два картриджа, две приставки, два телевизора и кабель, соединяющий гнезда второго игрока на приставке. то есть каждый в своем экране играет. два экрана рядом на одном телевизоре не потянет. тут один экран то и то не на весь экран сделано, чтоб снизить нагрузки на просчет графики. а два сразу рисовать приставка повесится :) через меднафен предполагалось будет возможность играть через интернет.
perfect_genius:
SeregaZ, я про то, как сделали для расширения экрана Дюны - два соединённых экрана эмулятора.
SeregaZ:
Zero Tolerance Sound Manager 0.5.3вроде бы все. добавил чо хотел по звуку. но думаю еще было бы не плохо графику в третьей вкладке :) шрифты редактировать, и экраны. сейчас в архиве выкидыватель тайлов для ZT приложен. но он пока только с одним экраном работает - который "Потрачено", то есть "Deseased" - когда агент погибает. но им же я помница экран титульника правил, если знать где и что. и так-же может быть еще какие экраны можно. но я их не искал. (следует в окошках карты и тайл сета указать файлы из папки и после выделить каждый файл в окошках - произойдет отрисовка надписи. можно еще нажать кнопку демо - программа докинет экран агента и надпись сверху, чтоб видеть как она будет выглядеть в итоге. так-же есть кнопка вставки изображения. то есть можно в пейнте подрисовать и вставить в программу. но будет вписывать в существующую палитру - там 3 или 4 цвета всего чтоль.)

из нового, что уже вышло после видео, это пункт опции трека, при клике правой кнопкой мышки:


в чем суть? как я уже говорил - не во всех треках есть бесконечное зацикливание мелодии, то есть команда loop $7F для дорожек. в результате на этапе можно играть час, а мелодия 2 минуты проиграет и все. дальше будет тишина. то есть как в Дюне например - там мелодии сменяют друг друга. в ZT же одна и та-же мелодия весь этап крутится. сделать мелодию бесконечной можно двумя путями - добавить этот самый loop $7F во всех дорожках мелодии - это сложно все четко расчитать, чтобы никакого рассинхрона не было. либо взять самую длинную дорожку и втулить туда команду play сам на себя. то есть доигрывая мелодию до конца, она стартует сама себя с начала. в результате одна и та-же мелодия будет играть весь этап, как это было в оригинале ZT. вот с помощью этого меню можно сделать такое зацикливание, добавив номер трека сам на себя. то есть кликаем правой на 009 мелодии, добавляем плей 9, применяем и все. песня у нас будет играть бесконечно. но в принципе этим же плеем можно добиться сменяемости мелодии. типа у нас три трека добавлено 009, 010, 011. в 009 добавляем плей 10, в 10 треке добавляем команду плей 11, в 11 треке плей 9. в результате мелодии, доигрывая до конца, будут передавать так сказать проигрывание следующему треку. хотя я думаю все-таки лучше следовать оригиналу - одной мелодии весь этап.

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


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


дальше - поскольку я в ромхакинге разбираюсь весьма отдаленно - на выходе получается гавнохак, не рационально использующий место в роме. дело в том, что музыка лежит в роме, так сказать, по середине. и самый жирный банк - это банк сэмплов. сейчас я добавляю копию нового банка сэмплов в конец рома, увеличивая его размер. а на место оригинального банка сэмплов - пишу новые банки мелодий. но все равно куча неиспользуемого места в роме остается. ну не умею я двигать данные :) в смысле те, что идут после банков GEMS. с Зомбями, жрущими соседей было в этом плане проще. там банки как раз в конце рома лежали и там можно было извращаться как угодно. а тут в середине.
SeregaZ:
кто знает чем кончилось? в смысле в том месте иде Сегаман делал эмуляцию игры по сети для ZT. я чот упустил сей момент... столько времени прошло :) может уже готово?
Segaman:
SeregaZ, у меня навернулось все что могло:
дрова, вайн, проги (все перечисленное из-за отключения света)
на работе дедлайн, сижу в том числе и по 24 часов в сутки.
мне щас тупо максимально не до этого :)
а как только появится время придется весь софт снова настраивать :D
так что много времени пройдет прежде чем я вернусь в обычное русло :)
Lucas [32]:

--- Цитата: Segaman от 09 Октябрь 2020, 13:27:49 ---SeregaZ, у меня навернулось все что могло:
дрова, вайн, проги (все перечисленное из-за отключения света)

--- Конец цитаты ---
Очередное доказательство того, что на разработке эмулятора сетевой игры лежит некое проклятье.
AuAurora:
Ага  :lol:
SeregaZ:
да не, не может быть. я ж знаю у него на мониторе наклеены три иконки - они оберегают :) просто совпадение.
perfect_genius:
Я плотно взялся за изучение того, как Сега опрашивает контроллеры - просто офигел от сложности. Если на NES и SNES достаточно посмотреть на биты нажатых кнопок в определённых байтах в памяти, то на Сеге в байте надо долбить один бит, выпрашивая у геймпада нажатые кнопки через соседние биты. Чтобы опросить XYZ и Mode требуется отправить около 6 сигналов на этот бит, что долго (для трёхнопочного достаточно два), поэтому они и не задействованы ни в кооперативе ни в сингле, скорее всего.
Становится всё интереснее, хочется посмотреть как всё это выглядит в коде.  Когда начну разбираться - отпишусь.
SeregaZ:
я вроде что-то такое читал... что типа изначально делали 3 кнопочный контроллер. следовательно вся архитектура была запилена именно под 3... а тут бац и решили что 3 кнопки мало. начали выкручиваться, чтобы вместить в старую отработанную технологию 6 кнопок.

с подобными костылями сталкивался еще со ZX Спектрумом :) там всего 1 кнопка была. а действий то хочется побольше. там что-то выходило типа зажал кнопку и стрелкой кудалибо. таким образом можно было производить чуть больше действий, чем давала одна кнопка.
perfect_genius:
В случае с Сегой больше похоже не на костыль, а на поддержку дополнительного оборудования кроме стандартного трёхкнопочного геймпада. Ведь к Сеге можно подключить и мышь, пистолеты, модемы, дополнительные геймпады и т.д.  Т.е. "новые" 4 кнопки шестикнопочного геймпада распознаются приставкой как дополнительное устройство. А за костыль можно считать кнопку Mode: большинство игр опрашивают геймпад один раз за кадр игры, но некоторые таки больше, отчего они получают уже значения кнопок XYZ, из-за чего всё работают некорректно. И вот из-за них сделали кнопку Mode - режим трёхкнопочного геймпада, всегда отдающего значения стандартных кнопок (чтобы переключиться в этот режим надо удерживать Mode до включения приставки). В детстве попадалась только одна такая игра - какая-то из Golden Axe в многоигровке. В ней за передвижение отвечали XYZ и Mode, отчего было почти неиграбельно, пробовал даже играть наклонив геймпад. Знал бы я тогда как включать имитацию трёхкнопочного...
В те времена вообще удивлялся тому, как мало игр поддерживает верхние кнопки, а Mode вообще практически нигде не задействован.
Segaman:
perfect_genius,

--- Код: --- lea     ($FFFFFF80).w,a1         ;адрес сохранения состояния кнопок джойстика
lea     ($A10003).l,a0           ;установить чтение первого джойстика
jsr     +                 ;прочесть
;после чтения будет получено 4 байта данных
;первый байт будет содержать кнопки ZYXM
;второй байт - UDLRBCAS
;третий байт - нажатие (press) ZYXM
;четвёртый байт - нажатие UDLRBCAS
addq.w #2,a0                    ;установить чтение второго джойстика (он уже будут прочитан в адрес на 4 больше предыдущего)
+:
; чистим регистры
clr.l   d0
clr.l   d1

; запрос в порт геймпада
move.b   #$40,(a0)

; ожидание ответа
nop
nop

; получить ответ
move.b   (a0),d1

; оставить только нужные биты
andi.b   #$3F,d1

; запрос в порт геймпада
move.b   #$00,(a0)

;ожидание ответа
nop
nop

; получить ответ
move.b   (a0),d0

; оставить только нужные биты
and.b   #$30,d0

;сместить биты дважды влево (все равно что умножить число на 4)
rol.b   #2,d0

;совместить два ответа вместе
or.b   d0,d1

;серия запросов в порт без прочтения ответа
move.b   #$40,(a0)
nop
nop
move.b   #$00,(a0)
nop
nop
move.b   #$40,(a0)
nop
nop
move.b   #$00,(a0)
nop
nop
move.b   #$40,(a0)
nop
nop

; получить ответ
move.b   (a0),d0

; оставить нужные биты
andi.b   #$0F,d0

; обратить биты (xor)
eor.b   #$0F,d0

; сместить биты влево (все равно что помножить на 256)
rol.l   #8,d0

; совместить с предыдущим опросом кнопок
or.w   d1,d0

; хоть убей - не помню что эта команда делает
not.b   d0

; запрос в порт без получения ответа
move.b   #$40,(a0)

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

move.w  (a1),d1
eor.w   d0,d1
;bclr    #11,d1   ;disable mode
;bclr    #11,d0
move.w  d0,(a1)+
and.w   d0,d1
move.w  d1,(a1)+
rts

--- Конец кода ---
perfect_genius:
Подумал, что ты выложил код из исходников игры :)
Даже удивился, что игра таки опрашивала XYZM.

--- Цитата ---хоть убей - не помню что эта команда делает
      not.b   d0
--- Конец цитаты ---
Просто инвертирует биты.


Добавлено позже:
Не хотел настолько углубляться, больше ожидал, что всё это дилетантское безобразие увидят специалисты и расскажут что к чему. Но что-то нет терпения их ждать, но есть сильное любопытство, поэтому продолжил расследование.
Изучая техдоки по МегаДрайву заметил, что значения нажатых кнопок и вообще все порты находятся прямо в адресном пространстве Z80 - отдельном процессоре, отвечающем за звук. Странно же? Поэтому сразу вспомнил, что Z80 использовался в предыдущей консоли как центральный процессор - в Master System, и что в МегаДрайве была обратная совместимость с ней (через Power Base Converter). Глянул на её порты, и действительно - точно такие входы для геймпада! А у геймпада только крестовина и две кнопки, даже Старта нет. Всё стало ясно теперь, почему только эти кнопки и доступны в памяти при первом обращении и почему надо опрашивать остальные у геймпада через дополнительный бит. Это ж память в памяти в памяти [тут картинка с Ди Каприо из "Начала"] - ячейки контроллера в памяти Z80, которая в свою очередь в памяти Сеги. Скорее всего и геймпады SMS без проблем работают на МегаДрайве, и геймпады МегаДрайва работают на SMS, +на МегаДрайве в режиме обратной совместимости с SMS. В этом случае двумя кнопками геймпада SMS на геймпаде МегаДрайва будут выступать кнопки B и C. Шестикнопочный надо переводить в трёхкнопочный, по идее. Кроссовместимость, обратно-передняя совместимость... не знаю как такое назвать.
Скорее всего вся эта информация где-то есть, и может даже на русском, но я не встречал и Википедия ничего не знает.
В итоге SNES даёт нажатые кнопки сразу в двух байтах ("просто, как два байта прочитать" ^_^), а у Сеги из-за обратной совместимости всё сложно как аппаратно, так и программно.
Так что предположение, что
--- Цитата: SeregaZ от 14 Октябрь 2020, 08:36:40 ---типа изначально делали 3 кнопочный контроллер. следовательно вся архитектура была запилена именно под 3
--- Конец цитаты ---
не подтверждается. Изначально всё рассчитывалось на крестовину и две кнопки :lol:



Добавлено позже:
Нашёл сайт фанатов SMS (:debile:), там на форуме подтвердилось всё: и геймпады МегаДрайва работают на SMS в большинстве игр, и кнопки именно B и C, и в трёхкнопочный режим переводить надо. Т.е. выходит, что кнопка Mode не только из-за 16-битных игр Сеги, но и 8-битных предыдущего поколения.

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

--- Цитата: perfect_genius от 14 Октябрь 2020, 21:16:23 ---Ого, не знал, что игра вышла в августе в Стиме
Просто эмулятор, мультиплеера нет, сами игры удалили с официального сайта. Похоже, свободно их распространять теперь не выйдет, только патчами
--- Конец цитаты ---
Ого! Не знал, спасибо:)
megavolt85:

--- Цитата: Segaman от 14 Октябрь 2020, 10:22:05 ---; хоть убей - не помню что эта команда делает
      not.b   d0
--- Конец цитаты ---

в самом джое все кнопки подтянуты к плюсу, а при нажатии замыкаются на землю, нажатая кнопка это лог 0, отпущенная лог 1, но привычней в коде использовать 1 нажато, 0 отпущено, для этого и нужна not.b, она инвертирует все биты, те что были 1 становятся нулями, а что были нулями станут единицами
Yoti:

--- Цитата: perfect_genius от 14 Октябрь 2020, 21:16:23 ---Скорее всего вся эта информация где-то есть, и может даже на русском
--- Конец цитаты ---
На каждом углу.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

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