| Разработка и ромхакинг > Ромхакинг и программирование |
| [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 ---Скорее всего вся эта информация где-то есть, и может даже на русском --- Конец цитаты --- На каждом углу. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |