Я продолжаю упарываться. Меня всегда немного смущало, что в Unchained Melody используется здоровый спрайтовый движок, и половина функций которого не используется менюшкой. Очевидно, что он писался для чего-то другого. Вчера я нашёл несколько ошибок в этом движке, и ради интереса стал искать, где же используется такой же движок. И нашёл!
Игра «Go! Benny!», производства NTDEC, 1992 года. Совпадение кода почти полное, там только видно немного более свежая версия движка. По крайней мере тот ошибочный код что я искал там точно исправлен (а на работу Unchained Melody эта ошибка никак не влияла). Также там такой же формат хранения name tables (фонов).
Как раз в 1992 году засветилась первая (?) версия меню из 83-in-1 и мелодией Summer Wine. С учётом того, что в этих менюшках и звуковой движок именно тот, что активно использовался NTDEC (об этом я пару лет назад на emu-russia.net писал), сомнений почти никаких нет, что одни и те же авторы.
Возможно, пока писалась «Go! Benny!», часть её кода была взята и на основе её написана обсуждаемая менюшка, и потом уже она отдельно развивалась. Сразу было 83-in-1, затем что-то промежуточное (дампов нет, но есть видео на youtube.com картриджа 150-in-1, который 100% промежуточное звено), затем 300-in-1 1993 года. Всё что у нас гуляло — это уже хаки/перехаки этого 300-in-1 1993 года. Там в коде есть артефакты, которые явно указывают на это. Причём, что интересно, судя по имеющимся дампам, сразу был сделан хак 1997-in-1 (потому что смещения не поменялись), а потом эти же люди отреверсили эту менюшку, и на её основе сделали уже 300-in-1 1994 года (там в CHR даже сохранились тайлы для 1997) и все остальные мутанты типа 9999-in-1. Но даже 300-in-1 1994 года имеет явный артефакт из аналога 1993 года — табличка смещений сцен, которую при реверс-инжиниринге не отделили от музыкальных данных. Только в 300-in-1 1993 года она указывает на осмысленные адреса.
Добавлено позже:Кстати, а начались мои поиски вот с этой явной ошибки в спрайтовом движке менюшки с морем:
LDA byte_401,X
AND #0
BEQ spr_add_tiles_to_head
JMP spr_add_tiles_to_tail
По задумке автора должен был проверяться бит приоритета и приоритетные спрайты должны выводиться над неприоритетными (на самом деле они просто записываются либо в хвост, либо в начало OAM таблицы). Но авторы забыли указать, какой бит проверять (указали просто #0), в результате всегда выполняется первая ветка кода независимо от бита. А вот в «Go! Benny!» там написано AND #4, то есть проверяется третий бит.
Я уже исправил пару мелких проблем в спрайтовом движке Unchained Melody. И в звуковом тоже. Войдёт в следующий релиз Unchained Nostalgia. Исправление в спрайтовом движке позволит избежать мерцания птиц, когда они пролетают одна над одной.
Надо будет посравнивать код с Go! Benny! и посмотреть, что же сами разработчики там ещё изменили, может что полезное найдётся
Было бы интересно найти какие-нибудь авторские метки. Хотя музыку Unchained Melody и Summer Wine явно писал не тот же человек, что и Go! Benny! Возможно, на помощь пришёл автор Magic Jewelry, ведь у него там музыка была просто шикарная и тоже каверы. Плюс судя по странице
https://tcrf.net/Category:Games_developed_by_Hwang_Shinwei какая-то связь у автора этой игрушки с NTDEC/ASDER/Caltron/MegaSoft (всё одна компания).