Перейти к содержимому

vladikcomper

Пользователи
  • Публикации

    947
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    8

Все публикации пользователя vladikcomper

  1. - Я какой прогой вы добавляете Spin Dash??? - спрашивает какой-то бедолага. - Никакой. Это все делается в АСМе - с горестью в голосе отвечают ему. Делалось в АСМе, до сегодняшнего момента. Но теперь такая прога есть! Итак, представляю на ваш суд один из моих самых сложных и крупномасштабных проектов, S1 Hacking Studio Это уникальная в своем роде программа, не имеющая аналогов. Она позволяет: - Одним нажатием кнопки добавлять Spin Dash и Jump Dash, изменять скорость Соника - Настраивать графику в игре и количество ударов у боссов - Выбирать собственную мелодию для каждого акта, причем даже из Sonic 2 и 3K - я для вас много музыки нарипал =) - Изменять тексты Левел Селекта и даже названия зон Причем "Студией" это программа названа не случайно - она работает абсолютно автономно, в ней уже есть все, что нужно: - Hivebrain's Disassembly, серьезно мной отредактированный - SonED2 для редактирования уровней, полностью настроенный на работу - Porter - моя маленькая утилитка, позволяющая портировать уровни, графику и палитры из ваших РОМов Обращаю внимание на дизасембл, он немного отличается от оригинального. Так что запись другого дизасембла поверх этого выведет дизасембл из строя. Но, вы спокойно можете редактировать исходный код, пробовать на нем гиды - все будет работать. Причем некоторые гиды, которые не шли на дизасембле под редакцией hbrd, пойдут. Но в идеале вы вообще можете не касаться внутренностей дизасембла. Вы можете спокойно пользоваться S1 Hacking Studio и SonED2 для создания качественных хаков. Также для вас я приготовил - сюрприз - русский хелп по SonED'у, он лежит в папке "SonED2\Docs". Перед тем, как приступать к работе с S1 Hacking Studio, откройте вкладку "Компиляция" и выберите путь, куда будет записан ваш РОМ. Перед Компиляцией не забудьте нажать кнопочку "Сохранить", чтобы изменения вступили в силу. :angel: Еще, дистрибутив с программой надо обязательно достать из архива. Путь к нему не должен содержать русских букв. Надеюсь, вам понравится моя программа, и пол месяца напряженной работы не пройдет даром :nyam: Скачать
  2. Mega PCM - это мой новый DAC драйвер для Соник 1, написанный с нуля. У нас уже есть DAC-драйверы от JMan'а и S1HL, которые предоставляют массу дополнительных удобств по сравнению с родным драйвером Соник 1. Лично я долго время пользовался драйвером от JMan'а, так как лучше всего подходил моим целям. Однако, как и у всех Z80-драйверов, у него были неприятные недостатки и ограничения. По большому счету, все эти "недостатки" вызваны архитектурой железа: процессор Z80 очень ограничен в плане доступа к ROM-секции (доступ осуществляется через банки в 32 кб) и процессор вынужден посылать сигналы в DAC самостоятельно, что привносит в программирование драйвера немалые трудности. В своем драйвере, я постарался избавиться от неприятных ограничений, которыми обладают другие Z80-драйверы. Я стремился сохранить высокую скорость воспроизведения звука, не смотря на то, что код теперь перегружен дополнительными функциями, которые пришлось внедрить, чтобы преодолеть известные ограничения. К моему удивлению, это удалось, в данный момент Mega PCM способен воспроизводить сэмплы быстрее максимальной частоты выхода DAC у звукового чипа YM2612 (~27 kHz), так что все еще остается место для новых возможностей! ;) Возможности Автоматическое переключение банков Про банки можно забыть, располагайте сэмплы где угодно, как угодно. Сэмплы больше не требуется выравнивать по границе в 32 КБ и следить за тем, чтобы они эту границу не пересекали. Неограниченный размер сэмплов Размер сэмплов больше не ограничивается 32 КБ. "Mega PCM" может проигрывать сэмплы любого размера, так что сэмплы могут быть настолько большими, насколько это позволит размер РОМа. Поддержка двух звуковых форматов "Mega PCM" поддерживает форматы 4-bit DPCM и 8-bit PCM. Первый широко применялся в Сониковских играх как основной формат для DAC-сэмплов, так он занимает в два раза меньше места чем обычный PCM. Однако, 8-bit PCM является "родным" форматом для звукового чипа YM2612 Сеги, он занимает больше места, но отличается более хорошим качеством. Расширенное управление воспроизведением: Стоп, Пауза, Повтор, Приоритет "Mega PCM" может приостанавливать и продолжать воспроизведение звука, так что если вы поставите игру на паузу, длинные сэмплы не будут обрезаны после того как вы игру с паузы снимете. Имеется возможности повторять сэмпл (подходит для DAC-песен). Приоритет означает, что воспроизведение сэмпла не будет прерываться другими, пока он не доиграет до конца (подходит для голосов в игре) Панорамирование звука Можно настроить воспроизведение сэмпла только в левом или в правом динамике. До $5F слотов для сэмплов К примеру, драйвер JMan'а позволял не более $1F сэмплов из-за использования в коде 8-битных поинтеров. На самом деле, количество слотов ограничивается только размером памяти, которую занимает таблица сэмплов. Однако SMPS разрешает не более $5F слотов ($81-$CF). Как установить Mega PCM Если вы заинтересовались драйвером и хотите его опробовать, тогда вперед! В этом гиде, я расскажу как вставить драйвер в хак и слегка улучшить SMPS в угоду потребностям нового драйвера. После этого можно с легкостью включать новые сэмплы в игру! Этот гид также содержит маленький бонус: "Как воспроизводить голоса в игре" (см. ниже) Для начала, скачайте этот архив: https://dl.dropbox.com/u/44757401/MegaPCM_Bin.7z Это почти готовая к использованию конфигурация драйвера, включающая в себя сэмплы из Соник 3 (кроме timpani, версия С3 сюда не подходит). Скопируйте все файлы в папку с дизасемблом. Гид написан для дизасембла Hivebrain, а также S1HS. 1. Замена старого драйвера и загрузчика Откройте Sonic1.asm и найдите лейбел 'Kos_Z80', вы увидите следующий код: Kos_Z80: incbin sound\z80_1.bin dc.w ((SegaPCM&$FF)8) dc.b $21 dc.w (((EndOfRom-SegaPCM)&$FF)8) incbin sound\z80_2.bin even Удалите весь этот код, вместо этого вставьте: include 'MegaPCM.asm' Теперь, перейдите к лейбелу 'SoundDriverLoad' и замените весь код на новый: SoundDriverLoad: ; XREF: GameClrRAM; TitleScreen nop move.w #$100,d0 move.w d0,($A11100).l move.w d0,($A11200).l lea (MegaPCM).l,a0 lea ($A00000).l,a1 move.w #(MegaPCM_End-MegaPCM)-1,d1 @Load: move.b (a0)+,(a1)+ dbf d1,@Load moveq #0,d1 move.w d1,($A11200).l nop nop nop nop move.w d0,($A11200).l move.w d1,($A11100).l rts ; End of function SoundDriverLoad 2. Изменение SMPS для работы с Mega PCM Найдите лейбел 'sub_71B4C' (UpdateMusic в S1HS) и чуть ниже найдите этот участок кода: btst #7,($A01FFD).l beq.s loc_71B82 move.w #0,($A11100).l ; start the Z80 nop nop nop nop nop bra.s sub_71B4C ; =========================================================================== loc_71B82: Удалите или закомментируйте этот код. Далее, найдите перейдите к лейбелу 'loc_71C88', найдите и удалите в коде эти команды: btst #3,d0 bne.s loc_71CAC Найдите лейбел 'loc_71C44', в самое начало кода добавьте: move.b ($A04000).l,d2 btst #7,d2 bne.s loc_71C44 move.b #$2A,($A04000).l Следующие изменения позволят Mega PCM приостанавливать воспроизведение сэмплов при паузе и продолжать после нее. Найдите 'loc_71E7C' и почти в самом конце, перед командой BRA, вставьте: move.b #$7F,($A01FFF).l; pause DAC Затем, перейдите к лейбелу 'loc_71EDC' и замените весь код до лейбела 'loc_71EFE' на это: loc_71EDC: adda.w d3,a5 dbf d4,loc_71EC4 lea $340(a6),a5 btst #7,(a5) beq.s @UnpauseDAC btst #2,(a5) bne.s @UnpauseDAC move.b #-$4C,d0 move.b $A(a5),d1 jsr sub_72722(pc) @UnpauseDAC: move.b #0,($A01FFF).l ; unpause DAC И последний штрих. Будем вызывать команду "остановка", когда SMPS останавливает звук. Перейдите к лейбелу 'loc_725B6' (часть кода 'Sound_E4') и прямо перед "bra.w sub_729B6" добавьте: move.b #$80,($A01FFF).l ; stop DAC playback Вот и все! Как пользоваться драйвером Откройте файл MegaPCM.asm. Этот файл включает в РОМ скомпилированный Z80-код драйвера, а также таблицу сэмплов. Чтобы облегчить работу с таблицей, для формирования таблицы и включения сэмплов я создал макросы и константы, которые делают часть работы за вас. Прокрутите код, пока не увидите эту часть: ; --------------------------------------------------------------- ; DAC Samples Table ; --------------------------------------------------------------- DAC_Entry $08, Kick, dpcm ; $81 - Kick DAC_Entry $08, Snare, dpcm ; $82 - Snare DAC_Entry $1B, Timpani, dpcm ; $83 - Timpani dc.l 0,0 ; $84 - dc.l 0,0 ; $85 - dc.l 0,0 ; $86 - dc.l 0,0 ; $87 - DAC_Entry $12, Timpani, dpcm ; $88 - Hi-Timpani DAC_Entry $15, Timpani, dpcm ; $89 - Mid-Timpani DAC_Entry $1B, Timpani, dpcm ; $8A - Mid-Low-Timpani DAC_Entry $1D, Timpani, dpcm ; $8B - Low-Timpani MegaPCM_End: ; --------------------------------------------------------------- ; DAC Samples Files ; --------------------------------------------------------------- IncludeDAC Kick, bin IncludeDAC Snare, bin IncludeDAC Timpani, bin even Первый блок -- таблица DAC сэмплов, в которой указывается какой сэмпл играть и как его играть. Таблица будет загружена в память Z80 вместе с кодом драйвера. Второй блок включает сами сэмплы в РОМ. Макрос 'IncludeDAC' ищет файл с заданными именем и расширением в папке 'dac' дизасембла, которую вы добавили из скачанного архива. BIN-файлы обычно используются для DPCM-формата. Благодаря тому, что Mega PCM поддерживает этот формат, можно воспроизводить любые сэмплы из Сониковских игр без преобразования в формат PCM, что сделает файл в два раза тяжелее при том же качестве звука. Если вы хотите преобразовать PCM в DPCM, используйте конвертер JMan'а: http://selbi.se.funpic.de/s1sndcomp.exe WAV-файл должны быть в формате "8-bit unsigned PCM". PCM звук может также быть представлен файлом с расширением 'RAW' (звуковой поток без заголовка), некоторые трекеры работают с этим форматом. Частота звука может быть любой до ~30 kHz для PCM и ~32 kHz для DPCM (Да, внезапно с более сложным в декодировании форматом мой драйвер работает быстрее, похоже я слишком сильно оптимизировал код. Думаю ему помогает то, что он посылает 2 импульса DAC за цикл воспроизведения.) В действительности, выходная частота DAC у YM2612 ограничивается ~27 kHz (вывод DAC производится за 288 внутренних такта YM), т.е. сэмплы не должны играть быстрее (превышение частоты приводит к потере части посылаемых DAC импульсов). Однако, эмуляторы не эмулируют такую ситуацию и если вы не заботитесь о качестве звука на реальном железе, не обращайте на это внимание. Таблица DAC сэмплов формируется макросом 'DAC_Entry', у которого следующий формат: [asm]DAC_Entry <pitch>, <sample name>, <flags>[/asm] Настоящий 8-байтовый формат, который использует "Mega PCM" вы можете увидеть в определении этого макроса. Pitch (шаг) определяет, как быстро должен играть сэмпл. Чем ниже питч, тем быстрее он играет. Sample Name (имя сэмпла) ссылается на название файла с сэмплом, которое задается макросом 'IncludeDAC'. Flags (флаги) может принимать следующие флаги: * pcm - задает формат PCM * dpcm - задает формат DPCM * loop - заставляет сэмпл повторяться * pri - флаг приоритета, воспроизведение не будет прервано другими сэмплами. В этом режиме, драйвер отвечает только на команды "пауза"/"остановить" * panL - воспроизвести только в Левом динамике * panR - воспроизвести только в Правом динамике * panLR - воспроизвести в обоих динамиках Флаги можно комбинировать, например так: dpcm+panL+loop+pri Замечание: если флаги панорамирования не заданы (panLR/L/R), "Mega PCM" не будет настраивать панорамирование, сохраняя настройки, сделанные SMPS. Бонус: Как воспроизводить голоса в игре Небольшой пример использования "Mega PCM" -- возможность воспроизводить голоса в игре. Я почти не видел этого в хаках, потому все доступные драйвера до этого момента были весьма неудобны в этом плане. Скачайте небольшой клип: https://dl.dropbox.com/u/44757401/V_Hurt.wav Поместите его в папку 'dac' дизасембла. В самом конце файла MegaPCM.asm, прямо перед 'even', запилите: IncludeDAC V_Hurt,wav Теперь нужно добавить новый сэмпл в один из свободных слотов в таблице. Для примера, я выберу номер $84. Итак, нам нужно чтобы Mega PCM проиграл сэмпл в формате PCM и с приоритетом (иначе его перебьют DAC-сэмплы из музыки). Если записать все в таблицу, она будет выглядить примерно вот так: DAC_Entry $08, Kick, dpcm ; $81 - Kick DAC_Entry $08, Snare, dpcm ; $82 - Snare DAC_Entry $1B, Timpani, dpcm ; $83 - Timpani DAC_Entry $07, V_Hurt, pcm+pri ; $84 - 'Hurt' voice dc.l 0,0 ; $85 - <Free> dc.l 0,0 ; $86 - <Free> dc.l 0,0 ; $87 - <Free> DAC_Entry $12, Timpani, dpcm ; $88 - Hi-Timpani DAC_Entry $15, Timpani, dpcm ; $89 - Mid-Timpani DAC_Entry $1B, Timpani, dpcm ; $8A - Mid-Low-Timpani DAC_Entry $1D, Timpani, dpcm ; $8B - Low-Timpani Готово! Теперь сэмпл можно воспроизвести. Однако, чтобы воспользоваться этим, потребуется добавить в игру новую функцию. Найдите код 'PlaySound' и прямо над ним вставьте: ; --------------------------------------------------------------------------- ; Subroutine to play a DAC sample ; --------------------------------------------------------------------------- PlaySample: move.w #$100,($A11100).l ; stop the Z80 @0 btst #0,($A11100).l bne.s @0 move.b d0,$A01FFF move.w #0,($A11100).l rts Новая функция позволяет воспроизводить DAC сэмплы по их номеру. Номер нового сэмпла - $84, воспроизведем его в игре! Перейдите к 'Hurt_Sound' и замените: jsr (PlaySound_Special).l на moveq #$FFFFFF84,d0 jsr PlaySample Теперь Соник будет кричать, когда его бьют. Наслаждайтесь! Исходный код Mega PCM Mega PCM - драйвер с открытым исходным кодом, вот он: https://dl.dropbox.com/u/44757401/MegaPCM_SourceCode.7z Я принимаю любые идеи по улучшению ядра Mega PCM а также сообщения о багах. Вы можете свободно модифицировать драйвер для своих целей или создавать новые продукты на его основе. Счастливых сэмплов!
  3. Автор хака - Sonic 65, который также написал PCM-звуковой движок. Вобщем, тут не о чем писать, лучше увидеть все своими глазами. Только перед нажатием ссылки морально подготовьтесь - будет гипер-офигенно.
  4. ПЕРВЫЙ ПУБЛИЧНЫЙ РЕЛИЗ Вот и настал этот день. День, когда я наконец выпускаю полноценный, полномасштабный хак, над которым работал весьма продолжительное время. Даже не верится, что это наконец-то случилось! Какой волнительный для меня момент! Я буду счастлив, если вы разделите мою радость, и зацените мой самый крупномастшабный хак на данный момент - Sonic Winter Adventures! Должен сказать, много, очень много работы еще потребуется, чтобы сделать из этого полную игру. К моему сожалению, SWA еще не может похвастаться большим разнообразием уровней, так что не ждите от хака слишком многого. В любом случае, я смог завершить хак как полноценный играбельный релиз, в котором все начатое успешно доделано, чему я несказанно рад. Итак, приступаем! Релизный трейлер. К просмотру обязателен. Не описать, как я благодарен mr. MB за создание этого завораживающего зрелища! Итак, чем может похвастаться новый хак? Бласт Процессинг. Кто сказал, что Сега не может того, что может Супер Нинтендо? Русский и английский языки. Sonic Winter Adventures получает английскую локализацию, два языка представлено в одном РОМе. Сменить язык можно в меню Опций. Скоростной геймплей! Продолжая лучшие традиции своего предшественника - Sonic Quick Winter Adventures, SWA вводит в игру новые приемы, которые привносят в геймплей еще больше скорости и драйва. Это такие движения, как Homing Attack, Jump Dash, Super Peel Out и, конечно же, старый добрый Spin Dash. Новые боссы. Разработка боссов - весьма сложный процесс, требующий много усилий, не говоря уже о том, как сложно порой даже придумать идею добротного босса. Но, как можно было заметить из моих прошлых проектов, к боссам у меня особое пристрастие! Поэтому одной из ключевых фишек Sonic Winter Adventures являются именно они. Боссам в хаке я уделил особое внимание, их разработка заняла много времени и сил. Открываемые секреты. По прохождении основных уровней, игра еще далека от завершения! По мере прохождения, вам будут открываться некоторые раннее скрытые возможности и режимы. Конечно, Sonic Winter Adventures не был бы возможен без помощи и поддержки многих замечательных людей! Jet - великолепный музыкант и просто хороший друг. Его вклад в проект неоценим. Он не только создал для хака музыку потрясного качества, делал технически-сложные порты, но еще и давал ценные советы и высказывал интересные идеи. Не говоря уже о том, что он всячески вдохновлял меня на разработку. Вряд ли бы этот проект получил развитие без его поддержки. S_T_D - еще один первоклассный музыкант, который относительно недавно изъявил желание сделать несколько музыкальных портов для хака. Качество его работы поразило мое воображение, я взял его композиции без лишних вопросов. Deoxys Kyogre - предложил пару шикарнейших идей для уровней первой зоны, что дало мне второе дыхание в улучшении уровней. Он создал всего несколько чанков, но они впоследствии помогли мне реализовать множество интересных решений и новых путей в первой зоне. PsychoRFG - обладает невероятной способностью нажать ту самую редкую комбинацию кнопок, которая заставит игру вести себя весьма неожиданным образом. Также имеет рентгеновское зрение и может увидеть баг даже, если он происходит в одном случае и миллиона. SonicVaan - еще один бета-тестер, который, как и PsychoRFG, позволил выявить множество багов и недоработок. Благодаря ним в игре было исправлено множество мелких и средних багов и изъянов в размещении объектов на уровнях. MarkeyJester - особая благодарность за тестирование некоторых компонентов хака на реальном железе. MainMemory - консультировал меня по английской локализации. Сыендук - тестировал один из пред-финальных прототипов 30 марта 2013 года на реальном железе. Наблюдение за его прохождением помогло мне выявить многие слабые места в строении уровней и некоторые недоработки. mr. MB - предоставил флэш-катридж, благодаря чему и состоялось тестирование Sonic Winter Adventures в Туле 30 марта ;) Создал потрясающий Launch Trailer для хака, за что я ему вечно благодарен. Также выражаю свою благодарность Tech Member'ам Sonic Retro и Sonic SCANF'у! СКАЧАТЬ
  5. Дамы и господа! А давайте сыграем в вечно актуальную игру, Найди 10 отличий! Как давно нам не доводилось играть в эту игру, не правда ли? Но случай просто обязывает. Я даже не поленился и убил полчаса на создание этой наглядной сравнительной таблички, чтобы вам было проще искать отличия. Это было не так уж сложно.
  6. Дополнительный слой заднего плана -- лишь небольшой графический трюк; слой имитируется отрисовкой в нужных местах тайлов, которые анимируется вместе с движением камеры, создавая эффект "окна" в различных местах заднего плана, через которое можно увидеть якобы более удаленные его участки. Анимация тайлов сделана так, чтобы создавать эффект скроллинга вместе с движением камеры -- графика внутри тайлов "прокручивается", тайлы переходят друг в друга, создавая эффект цельного, непрерывного плана. Этот эффект довольно несложно запрограммировать, есть даже несправедливо забытый гид на эту тему: https://forums.sonicretro.org/index.php?showtopic=24664 (к сожалению, картинки в нем не пощадило время)
  7. Вах, какой красивый тайтл скрин!

    1. TheBlad768

      TheBlad768

      Спасибо :)

  8. Должен сказать, я сильно разочарован и недоволен. И даже не качеством финального продукта, уровень которого стал для меня вполне очевидно вырисовываться в последние месяцы перед релизом, за тоннами пустых обещаний со стороны автора хака; теперь он очевиден и всем здесь собравшимся, -- впрочем, все это досканально описано здесь и до меня. Нет, я хотел бы рассказать не об этом. А о том, что стояло за разработкой этого хака, некоторых неприятных событий и манипуляций, невольным свидетелем которых я стал. Я хочу восстановить справедливость и развеять всю пыль, что автор пускал в глаза не только публике, но и самим членам команды. Дело в том, что автор хака как в процессе разработки, так и после релиза пытался выставлять некоторые детали в ложном свете, либо аккуратно умалчивать или искажать их. Создается ощущение, что автор хака преднамеренно пытается выставить чужие достижения за свои, а если точнее, создать соотвествующее впечатление у публики, показывая ей чужую работу в сосбтвенном хаке от своего имени, притом не указывая реальных людей, которые эту работу проделали. И что вы, он ни в коем случае не украл и не присвоил их работу себе! Он просто аккуратно не уточнил главные детали, не указал имена. К сожалению, возникает чувство, что автора хака интересует не самореализация и стремление создать качественный продукт, а тщеславие и признание за чужой счет -- типичная черта людей, готовых пойти на любые ухищрения, лишь бы казаться лучше и умнее, чем они есть на самом деле. Более того, на мой взгляд, автор тем самым проявляет полное неуважение к работе других людей, которые альтруистично согласились тратить собственное свободное время на помощь его хаку, чтобы потом автор фактически отрицал их причастность, либо как минимум наплевательски не упоминал тот большой объем работ, который они проделали. Поэтому я считаю нужным восстановить справедливость и отметить имена тех замечательных ребят, которые действительно внесли немалый вклад: Экран SEGA -- запрограммировал VladislavSavvateev Экран LadegoTeam -- запрограммировал VladislavSavvateev Sound Test -- запрограммировал VladislavSavvateev Level Select -- основную работу по программированию, скорее всего, проделал 7kub (этого я не смог точно установить, т.к. автор хака скрывает этот факт, а поговорить с предполагаемым программистом возможности нет) Экраны при переходах между актами и зонами -- запрограммировал VladislavSavvateev Босс SYZ (падающие блоки) -- запрограммировал TheBlad768 Босс SLZ (лазер) -- основную работу, скорее всего, проделал VladislavSavvateev Босс FZ -- запрограммировал я Расширенная звуковая система (драйвер SMPS/SWA последней версии) -- я А теперь попробуйте среди 4 тем, созданных автором хака, найти хоть одно малейшее упоминание соотвествующего человека, либо хоть одно мимолетное "спасибо" по пунктам, что я перечислил выше. Не пришлось ли вам до этого догадываться, кто и как был причастен к различным составляющим хака? А теперь мысленно вычтите все эти пунктики из хака и попробуйте оценить объем и качество работ, проделанных автором хака самолично. Сделайте соотвествующие выводы. Должен также добавить, что во всех небольших программных изменениях, что автор хака пытался сделать самостоятельно (больших за ним, увы, не числится), насколько мне известно, его постоянно консультировал, а иногда буквально направлял VladislavSavvateev. Также некоторую мелкую помощь оказывал я, и возможно, TheBlad768. Более того, представленный выше список даже не претендует на полноту. Вы не поверите, но мне пришлось буквально распрашивать некоторых из этих скромных и самоотверженных ребят, собирать информацию по частям, потому что автор хака постоянно недоговаривал, скрывал детали даже от собственных членов команды, и фактически обманывал их. * * * К своему стыду должен признать, что автор на первых порах обманул и меня, предоставив некоторые из вышеуказанных работ как свои собственные достижения, зарекоммендовав себя как перспективного и развивающегося программиста. Знай я некоторые детали раньше, ни за что бы не согласился помогать этому проекту. Впрочем, моя помощь была не очень велика: когда, скрипя сердцем, дописал и отдал хаку финального босса, сдержав данное давно обещание, я практически не оказывал хаку поддержки. Позже до меня дошли слухи, что автор даже финального босса, что я написал, пытался в одной приватной беседе выставить как свою собственную работу, когда тот еще был в разработке и его видели только члены команды. * * * Должен сказать, я жалею о том, что изначально согласился создать одного босса для данного хака. Я могу закрыть глаза на то, что автор хака нигде явным образом не уточнил, какую именно работу я проделал, но то, что он сделал в этом, самом последнем релизе, я счел непростительным. В последнем релизе автор нарушил функциональность моего финального босса и отказался от попыток исправить проблему. Ему удалось сломать то, что всегда верно работало во всех моих хаках и в некоторых других, для которых я писал подобных боссов. Он нарушил нормальную работу прокручивающейся камеры, в результате Соник теперь постоянно прилипает к левой границе экрана, а правая граница камеры неприятно сместилась, из-за прижаться к другому краю экрана невозможно. Как результат, вся битва с боссом из-за такого назойливого бага стала выглядеть неполноценной, забагованной и криво реализованной. Я был крайне недоволен положением вещей и потребовал исправить баг. И я думаю, вы поймете мой справедливый гнев, ведь на кону стоит качество моей работы. А я всегда стараюсь придерживаться высокой планки качества, не важно, для кого я выполняю эту работу -- я несу отвественность за качество конечного результата и внимательно слежу за тем, чтобы люди не испытывали проблем любыми составляющими хака или проекта, над которыми я работал. А здесь мою работу фактически заляпали, испортили, вероятно, внося правки, не имея на то достаточной компетенции. Все это стало известно за несколько дней до релиза и ситуацию можно было исправить. Несмотря на то, что это не было моей виной, я готов был полностью взять исправление бага на себя. Я даже уже примерно знал, какую именно процедуру хака автор мог испортить и как все это исправить. Дело на 15 минут. Но автор хакап после недолгих обсуждений отказался от попыток выяснить проблему и не оказывал нужного содействия. Как выяснилось, ему стало лень лень искать причину и следовать моим указаниям. И то, что он мне в итоге ответил, можно свести к трем простым словам: "И так сойдет" "И так сойдет!" -- вот девиз этого хака.
  9. Coming soon!~
  10. Огромное спасибо всем за поздравления :3 Влад, а твой подарок просто шикарен. Великолепная работа! Такого необычного подарка я и представить не мог! Спасибо тебе, S_T_D и Ivan_YO. Да, я учавствую, и немного удачи мне не помешает ;)
  11. Решил ненадолго вернуться в это прекрасное дело хакинга, чтобы вскоре порадовать вас своим небольшим проектом. О НЕТ! КОЕ-КТО СДЕЛАЕТ КОЕ-ТО ОЧЕНЬ НЕХОРОШЕЕ ЧЕРЕЗ МИНУТУ!
  12. Все дело в тайлах. Ты значительно увеличил размер арт-файла после добавления большого количества новых тайлов. Когда этот арт будет загружен в видеопамять, он, естественно, займет значительно больше места, чем задумано, и начнет занимать те участки памяти, где он быть не обязан, а именно, маппинги плана А. Поэтому в начале уровня портится сам логотип: его тайлы, вышедшие за дозволенные им рамки, перепишет план А, а в конце уровня -- сам План А, т.к. его в этот раз перепишут тайлы логотипа, поскольку они в этом случае загружаются позднее. За подробностями почитай этот пост. У тебя такая же проблема. http://sonic-world.ru/forum/topic/16333-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C-%D0%BF%D0%BE-%D1%80%D0%BE%D0%BC%D1%85%D0%B0%D0%BA%D0%B8%D0%BD%D0%B3%D1%83/page-49?do=findComment&comment=252896132
  13. Одна из самых распространенных проблем с самым простым решением. За все время она поднималась огромное количество раз. Только в этой теме как минимум десяток. http://sonic-world.ru/forum/topic/16333-помощь-по-ромхакингу/?p=252358280
  14. В Соник 1 кадр спрайтовых маппингов (sprite mappings frame) имеет следующий формат: Первый байт указывает количество кусочков, из которых состоит целый спрайт (pieces в терминологии SonMapEd), считая с $01. Значение $00 указывает, что кадр пустой и не содержит в себе никаких кусочков. Далее расположены данные самих кусочков -- структуры из 5 байт, имеющие следующий формат: dc.b $YY, %WWHH, $TT, $TT, $XX Для удобства я представил уже готовую запись с указанием форматов полей. Символ $ указывает, что значение имеет шестнадцатеричное представление (hex, hexadecimal). Символ % указывает, что значение имеет двоичное представление (bin, binary). В таком преставлении удобнее задавать битовые поля, которые используются в некоторых байтах структуры. В действительности, не имеет значения, в каком представлении записаны данные, программист сам выбирает наиболее удобное ему представление для конкретного случая. Поля $XX и $YY представляют собой смещение кусочка относительно центра спрайта (центральной точки) в пикселях. Все спрайты в игре обычно центрируются, т.е. X и Y координаты объекта обычно привязаны к центру спрайта. Получается это благодаря тому, что кусочкам задают такие смещения, чтобы они располагались строго вокруг центральной точки (точки отсчета, координат объекта). Поле %WWHH кодирует ширину и высоту кусочка согласно внутреннему формату спрайтов VDP. Биты WW и HH могут принимать следующие значения: 00 -- 8 пикселей 01 -- 16 пикселей 10 -- 24 пикселя 11 -- 32 пикселя Например, чтобы если необходимо задать кусочек размером 16х24 пикселя, то WW=01, HH=10. Получаем: %0110 Поле $TT TT как видно, занимает 2 байта. В этом поле указывается индекс стартового тайла для кусочка относительно арт-поинтера (слова $02 структуры объекта, которое задает начало тайлов объекта в видеопамяти). Замечу, что в этом поле еще есть дополнительные биты, которые часто не используются и остаются нулевыми. Чтобы рассмотреть формат этого поля более подробно, представлю его побитовую запись: %PCCXYTTT TTTTTTTT Бит X -- флаг отражения по оси X (0 -- нет, 1 -- отражение по горизонтали). Бит Y -- флаг отражения по оси Y (0 -- нет, 1 -- отражение по вертикали). Биты CC -- строка палитры, которую использует спрайт (00 -- первая, 01 -- вторая, 10 -- третья, 11 -- четвертая). Строку палитры обычно задают через арт-поинтер. Бит P -- флаг приоритета. Если задан, спрайт будет отображен поверх всех (подобно HUD). Пример прямоугольника 24х40: dc.b $02 dc.b $EC, %1011, $00, $00, $F4 dc.b $0C, %1000, $00, $0C, $F4 Простой и весьма очевидный ответ -- нужно отображать дополнительные спрайты, которые копируют спрайты Соника в тех местах, где объект Соника находился мгновения назад. Движок игры спроектирован так, что определенный спрайт отображается определенным объектом. Понятия спрайт и объект неразрывно связаны в Соник 1 и сиквелах, включая даже Соник 3, в котором движок был значительно переделан. Поэтому в дизасембле Sonic & Knuckles объекты во многих местах названы спрайтами. Можно сказать, объект представляет собой спрайт, его координаты, состояние, анимацию и так далее. Из этого следует продолжение ответа на твой вопрос -- чтобы отображать дополнительные спрайты, нужно загружать дополнительные объекты -- ровно столько, сколько спрайтов еще нужно отобразить. Самым разумным решением будет создать новый объект для отображения предыдущих положений Соника. Узнать сами положения Соника не представляется большой проблемой -- игра все время ведет специальный массив предыдущих положений Соника, который используется объектом Invincibility stars. Массив хранится в области памяти $CB00-$CBFF. Переменная типа word по адресу памяти $F7A8 указывает на текущий элемент массива. Для загрузки предыдущих положений достаточно узнать текущий элемент массива и загрузить выборочно элементы, предст шествующие текущему. За примерами реализаций этих задач можно обратиться к тому самому объекту Invincibility stars.
  15. Помню мой старый мини-гид прямиком из одного поста в теме "Ваши хаки" пятилетней давности. Реализация максимально проста, оттого и чувствительна к разного рода ошибкам. Палитра третьего акта может сбиться после неудачного обновления палитры второго акта, потому что ее местоположение напрямую зависит от прошлых палитр. После следования гиду для GHZ у тебя должно получиться: Pal_GHZ: incbin pallet\ghz1.bin incbin pallet\ghz2.bin incbin pallet\ghz3.bin Важно, чтобы все файлы присутствовали и были корректного размера. Палитра уровня должна состоять из 48 цветов (3 строки палитры по 16 цветов, первая строка, содержащая палитру Соника, общая для всех уровней), т.е. размер каждого из файлов (ghz1.bin, ghz2.bin, ...) должен быть ровно 96 байт. В противном случае, данные окажутся смещены и палитра для нужного акта попросту не окажется на том месте, где этого ожидает игра. Если все файлы палитры были скопированы и включены правильно, остается только один вариант: содержимое какого-то из файлов было нарушено и он содержит больше или меньше строк палитры, чем должен. Если оценивать скриншот на глаз, создается впечатление, будто в загруженной палитре продублировалась палитра Соника (на второй строке), а все остальные строки сместились. Действительно, если насильственно продублировать первую строку палитры, сместив остальные, результат будет тот же:
  16. Проблема не в объекте "Press Start Button", он не может повлиять на координаты заднего и переднего плана (на переднем плане и отрисовывается основа титульного экрана). А вот что может, так это сам Соник, точнее его начальные координаты. Видишь ли, титульный экран по сути использует движок, на котором работают обычные уровни игры. Он частично загружает данные уровня GHZ1, что включает даже начальные позиции Соника -- именно поэтому если изменить начальные координаты Соника в GHZ1, титульник очень часто сбивается -- ведь там работает полноценная камера, которая работает и на обычных уровнях. Это пример очень плохого, ненадежного программирования, но такой подход был очень быстрым и количество кода сократилось до минимума -- в остальном используются те же общие процедуры, которые используются самими уровнями. Самый легкий способ исправить проблему - переместить Соника чуть выше на уровне GHZ1, тогда и камера при загрузке уровня (а титульник, как я уже и сказал, по сути частично загружает уровень GHZ1) будет расположена выше, так что титульный экран на переднем плане не сместится ниже положенного. Кто-то на SSRG или Sonic Retro предлагал довольно верное решение проблемы, но боюсь, я так и не смог найти этот пост: он потерялся со временем. В целом, достаточно лишь исправить позицию камеры, однако лично я не пробовал это, т.к. не было необходимости (в моих хаках титульные экраны я пишу с нуля), поэтому готового и рабочего решения предложить не могу.
  17. мегахак вернуся!!! эта новый мегахак ультра едищн!!1 там есть хоммминг!!! новые палитры!!! новые уравни!!! скриншоты!!! скачать!!!
  18. Боже, не стоит снова вспоминать и пытаться распространить здесь эту нечисть. Сайт с печальной репутацией, целиком состоящий из ворованного кода и его модификаций. Метод реализации Хомминг Аттаки был полностью слизан с утекшего исходного кода третьего Мегамикса. В англоязычных сообществах попытка использовать этот код нарушает негласный хакерский кодекс чести и карается пожизненным баном. Да и зачем нужен кривой и грязный Хомминг, когда в свободном доступе уже давно есть это: http://pastebin.com/A2n9n88Z Не знаю в чем дело, но при попытке открыть пресловутый сайт, моя система полностью провисла на несколько минут, а браузер висел еще минут 5, пока у меня не кончилось терпение, и я не решил его убить через диспетчер задач, но и тот на полминуты провис, пытаясь связаться с процессом. Но и это еще не все! Даже модем неожиданно для меня вырубило и он ушел в ребут по загадочным обстоятельствам. Никогда такого не было. В общем, система приходила в себя около 10 минут, которые длились вечность. Как одна простая ссылка на пресловутый сайт может вызвать столько невозможных проблем -- не укладывается в голове. Может дело действительно в нечисти?
  19. Огромное спасибо вам за поздравления и все теплые слова, ребята! =) Это действительно был лучший день рождения, который у меня был. Спасибо вам всем за то, что вы есть!
  20. SSC: The Challenges Представляю вашему вниманию свой небольшой (оттого недостойный отдельной темы) хак. В SSC: The Challenges вам предстоит пройти несколько оригинальных уровней из различных Сониковских игр. Уровни никак не подверглись изменениям и будут хорошо знакомы всем, кто давно прошел всех классических Соников, однако их нужно пройти с определенной миссией или с определенным условием, что делает их прохождение весьма... вызывающим. При прохождении учитывается ваше общее время во всех "вызовах" и количество колец. Чем быстрее вы пройдете все вызовы, собрав как можно больше колец -- тем лучше. Количество попыток на каждый вызов -- не ограничено. Однако после каждой смерти счетчик времени не сбрасывается, так что чем больше вы будете умирать, тем хуже окажется ваш результат. https://dl.dropboxusercontent.com/u/44757401/ssc.7z
  21. Сегодня для меня великий день. День, когда выходит наконец мой новый проект, который я держал в секрете и давал о нем минимум информации. Все началось с того, что nemesis_c попросил меня помочь с хакингом Sonic Classics, официальной многоигровочки, с которой я поразительным образом не был знаком (как я умудрился?). И тогда у меня родилась идея - а почему бы не сделать многоигровочку c Соник 1, 2 и 3? Сделать то, чего не сделала сама SEGA. И тогда я начал разрабатывать свой проект, SONIC 3 IN 1 Я давно мечтал разработать что-либо под Сегу с нуля, и вот мне подвернулась такая возможность. Еще я задался целью оформить и запрограммить проект лучше, чем это сделала SEGA, поэтому вложил в разработку меню много сил и постарался сделать все как можно красивее (да и практика в хардкордном АСМ-программинге мне не помешала =Р). Что же касается самих игр, включенных в проект, они тоже были сурово модифицированы. Но это уже технические тонкости, что же касается геймплея, то тут изменения небольшие: Sonic 1: - Добавлен Спин Дэш - Исправлен Спайк Баг - Убран Спид Кэп - Исправлена физика Спец-этапов - Отображается текст "PRESS START BUTTON" Sonic 2: - Исправлен баг деформации Emerald Hill Zone - Исправлен Спид Кэп Sonic 3: - Исправлена поддержка регионов, игра теперь запускается на Европейских/Американских машинах. Скачать
  22. Это баг SonED2. Происходит, если закрыть окно программы слишком рано после нажатия клавиши F3 для сохранения. Сохранение данных -- очень трудоемкий процесс, и занимает он несколько секунд. Из-за программной ошибке в архитектуре SonED2, процесс сохранения (как и все другие процессы) насильно обрывается, если закрыть окно программы в момент его выполнения. Программа просто не успевает записать все данные в нужные файлы.
  23. Совершенно верно. Но помимо этого нужно еще позаботиться, чтобы код SignpostArtLoad не выполнялся для уровня, на котором будет босс, в противном случае этот код будет конфликтовать с кодом, блокирующим камеру на арене босса и заблокировать камеру должным образом не получится.
  24. Я вот решил сделать зимний хак на Первого Соника в честь Нового Года - Sonic Quick Winter Adventures. Хак находился в разработке всего 3 дня (!), чтобы зарелизиться до нового года, за такое время я не успел сделать достаточно новых уровней, так что сделал доступной только первую зону (отсюда и "Quick" в названии хака). Впрочем, для такого срока я реализовал крайне много. Вот список изменений: - Spin Dash, Jump Dash, Homing Attack - Падающие снежинки - Новые уровни (они, правда, наполовину новые) - Босс GHZ3 перенесен в GHZ2 (это не так уж легко, как кажется) и подредактирован - А в конец GHZ3 добавлен супер-мега-офигенный сюрприз, работы над котором заняли 90% от времени разработки всего хака. Вы не представляете, насколько это было сложно. Также были некоторые незначительные изменения. Скачать: http://vladikcomper.narod.ru/download/s1qwa.zip
  25. У меня просто нет слов! Это потрясающий и весьма масштабный хак, и, без сомнений, один из лучших хаков за последнее время. Я очень рад, что ты продолжил этот проект, который был очень многообещающим еще год назад, во время релиза первой версии. Признаться, обилие, а главное, качество изменений, произошедших за примерно год меня просто поразили. Это уже по-настоящему самобытная игра, а не обычная модификация первого Соника, с оригинальными уровнями, приятным новым артом и кучей интересных находок. С самого начала чувствуется эта глобальность произошедших перемен, новая атмосфера. Это неописуемое достоверными словами чувство, и чтобы понять его, нужно лишь сыграть в игру... Больше всего меня порадовала, конечно же, очень сильная техническая сторона хака. Новый игровой режим, очень красивая оригинальная система меню (большая редкость для хаков и огромное достижение для хакеров!) и самое главное, оригинальные боссы! Первый босс, на мой взгляд стал чуть более сбалансирован и интересен, чем в первой версии, поскольку было увеличено количество ошибок, которые может совершить игрок, разбивая зря блоки. Второй босс, несмотря на идейную схожесть с один из боссов Соник 2, смотрелся весьма свежо и интересно. Ведь модификация Эггмобиля само по себе интересное явление, которое мало где увидишь в хаках первого Соника 1. По своему опыту я знаю, насколько сложно создать идеально сбалансированного босса. Найти тонкую грань, не сделать его до боли простым и предсказуемым, не сделать его запутанным и случайным. Ты очень хорошо справился с задачей, поздравляю с отлично проделанным нелегким трудом! Хотелось бы и дальше видеть интересных оригинальных боссов. Очень порадовала весьма свежая относительно многих виденных мною хаков игровая механика. Спин Дэш отключен и основной "ударной силой" в игре является Джамп Дэш, который лишен самонаведения, но при попадании им во врага, Соник все также отскакивает. Это уравновешивает уровень сложности, который стремится к нулю во всех 2Д-играх с Хоминг Атакой и в то же время открывает путь к некоторым интересным ходам и перемещениям, которых нигде больше не встретишь. Самое лучше решение, пожалуй это то, что Соник разворачивается после удара о врага и становится уязвимым до повторного использования атаки. На мой взгляд, это создает идеальный баланс сложности и заставляет игрока не проноситься по уровню в агонии, снося все на своем пути, а лишний раз оценить ситуацию. Касаемо музыки, поздравляю Ивана с его полноценным музыкальным дебютом, да еще в таком более чем достойном хаке! Музыка идеально соотвествует общему качеству проделанной работы, а ее подборка отлично вписывается в геймплей. Не могу не отметить обилие качественных сэмплов, придающей музыке большую глубину, а также классные ремиксы на уже представленные в хаке мелодии. В общем, это по истине достойный хак и доставил мне массу незабываемых впечатлений этим вечером (; Ты проделал фантастическую работу, Шутер! Желаю тебе успехов в продолжении проекта!
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×