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

Туториалы по хакингу Sonic (Genesis/Mega Drive)

Рекомендуемые сообщения

Влад, надеюсь, ты не обижаешься на меня. В конце концов, настало время сказать НЯ.

Нет проблем =) Правильно сделал, что принял вызов!

Вышеупомянутую фразу я имел неосторожность ляпнуть довольно давно, когда ситуация с хакингом у нас мне казалась совсем пессимистичной. Рад, что ты доказал, что это не так.

 

А вообще, ты бы лучше с твоими навыками какой-нибудь крутой хак сделал. Если на "получение" хоминга у тебя ушло 3 дня, представляю какой вышел бы хак или просто техно-демка из всяких способностей/фишек, если потратить чуть больше времени. Это точно бы многократно опровергло мои пессимистичные слова.

Поделиться сообщением


Ссылка на сообщение

Как в Sonic1 записать собственный демонстрационный ролик.

К счастью, в оригинальном роме уже есть подпрограмма записи демо-роликов (MoveDemo_Record).

Нужно всего лишь слегка подправить уже имеющийся код.

 

1. Первым делом переходим к MoveSonicInDemo и комментируем команду "rts" таким образом:

MoveSonicInDemo:
   tst.w ($FFFFFFF0).w ; is demo mode on?
   bne.s MoveDemo_On ; if yes, branch
   ;rts

Теперь если демо-режим не включён, выхода из подпрограммы не будет, процессор перейдёт в секцию MoveDemo_Record;

 

2. Первую же команду секции MoveDemo_Record "lea ($80000).l,a1" меняем на "lea ($FFFFA000).l,a1"

Здесь мы устанавливаем адрес, куда будет записываться наш ролик. Адрес $80000 указывает на то, что запись будет производиться в РОМ, однако это невозможно, поскольку само понятие ROM'а (Read Only Memory) говорит о невозможности проведения такой акции.

Выбора нет - остаётся ОЗУ. Самое подходящее место для этого, я считаю, - блок памяти $FFFFA000-$FFFFA3FF. Места размером в $400 байт нам вполне достаточно.

Это место зарезервировано для двух последних чанков (под номерами $51 и $52), которые традиционно пусты и не используются. Временно пожертвуем ими.

 

3. Теперь переходим в подпрограмму Joypad_Read и сразу после "or.b d1,d0" вставляем четыре строчки:

  move.b d0,d2
  rol.b #1,d2
  and.b ($FFFFFFF1).l, d2
  bne.b Joypad_Read_Rts

Шестью строчками ниже прямо перед "rts" вставляем вот это:

Joypad_Read_Rts:

Это необходимо для подключения обработки события Joypad|Press в демо-режиме.

Отныне JumpDash, HomingAttack и другие функции, использующее это событие, будут записываться корректно.

 

Код готов. Переходим непосредственно к тому, для чего и создавалась данная статья, - к записи видео.

Для начала скачиваем эмулятор Gens KMod: http://www.romhackin.../utilities/301/

Компилируем наш хак и запускаем в эмуляторе. Переходим к первому уровню (Green Hill Zone, Act 1), начинаем играть. Как только начнётся отсчёт времени и активизируется управление Соником, программа автоматически начнёт запись нашего демо-ролика в оперативную память. Не спешите зажимать клавиши раньше времени, иначе видео рассинхронизируется. У нас в запасе имеется 30 секунд, после чего demo-режим отключится, и включится режим SegaScreen. За полминуты можно пройти чуть ли не весь первый уровень. По истечении 30 секунд ставим игру на паузу.

 

Теперь нам необходимо вырезать получившееся видео и вставить в наш хак. Для этого в эмуляторе переходим по команде CPU => Debug => Genesis => Genesis - 68K, и в появившемся окне нажимаем кнопку DUMP RAM.

Сохраняем дамп (s1built_68K.ram) на диск и открываем его с помощью любого Hex-редактора, например WinHex. Параллельно в том же редакторе открываем файл demodata/i_ghz.bin.

В файле s1built_68K.ram переходим по смещению 0000A000. Начиная с этого оффсета, записан нужный нам ролик.

 

019e80294d8b.jpg

 

Формат данных таков: 1 байт на состояние зажатых кнопок, 1 байт на задержку (в кадрах), т.е. на любое одно изменение состояния джойстика требуется 2 байта.

Вначале будут идти шестнадцатеричные числа, отличные от нуля, но изредка включающие нули. Чуть ниже будут идти уже сплошные нули. Так вот, нам нужен участок данных от 0000A000 до начала появления сплошных нулей. Выделяем этот блок и копируем в буфер обмена. Будет лучше, если мы заденем лишние нули, но последнюю строку выделим целиком. Например, на рисунке выше лучше выделить участок от 0000A000 до 0000A08F.

Открываем i_ghz.bin и перезаписываем его, вставив из буфера новые данные (в WinHex: устанавливаем курсор на позицию 0 и Ctrl+B или Правка -> Данные буфера -> Запись).

Ничего страшного, если вписываемые данные по объёму будут больше, чем исходный файл: если программа спросит разрешение на расширение места, согласитесь.

Сохраните i_ghz.bin. Снова откомпилируйте ром, запустите и наслаждайтесь проделанной работой.

 

Этот трюк можно проделать и с уровнями Marble Zone, Spring Yard Zone, Special Stage (демо-записи хранятся в файлах i_mz.bin, i_syz.bin, i_ss.bin соответственно). Для быстрого перехода к этим уровням воспользуйтесь кодом выбора уровня.

Если вы хотите записать, к примеру зону Star Light, то можно отредактировать список воспроизводимых уровней (файл misc\dm_ord1.bin).

Количество воспроизводимых уровней задаётся в секции loc_33E4: в инструкции "cmpi.w #4,($FFFFFFF2).w" поменяйте четвёрку, если необходимо.

Время воспроизведения задаётся в секции Level_Demo: в инструкции "move.w #1800,($FFFFF614).w" число 1800 показывает количество кадров (1800 кадров - 30 секунд).

Отключить запись demo можно, раскомментировав команду "rts" в MoveSonicInDemo.

 

Надеюсь, мой гайд окажется полезным.

  • Лайк 3

Поделиться сообщением


Ссылка на сообщение

Скучновато сейчас, много новичков, и мало хороших Рашхаков.

Выложу-ка я код-модификацию джампдэша а-ля Влад`н Сулер.

 

; ---------------------------------------------------------------------------

; Subroutine to do Jump Dash (code by Vladikcomper), mod by Suler_Ma(d)X well.

; ---------------------------------------------------------------------------

 

Оригинальный гайд:

http://vladikcomper.ru/sonic_guides/show_secret_guide/how_to_add_MIDboss/secret_entry

Изменено пользователем Suler_Maxwell

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

Как добавить в Sonic 1 самонаводящуюся атаку.

Прежде чем испробовать эту особенность Соника, настоятельно рекомендую потереть старый JumpDash от vladikcomper'а. Если он у вас, конечно, стоит.

Переходим по ссылке Obj01_MdJump2. В самое её начало вписываем это:

    bsr.w Sonic_JumpDash
Далее, в любое свободное место вставляем следующий код. Я лично вставил его после Sonic_JumpHeight. Для этого найдите строчку «; End of function Sonic_JumpHeight». Сразу после нее вставьте новый код:


Sonic_JumpDash:
    cmpi.b #$02,($FFFFFFEB).w ; if STATE == HOMING
    beq.s Sonic_JD_ChkFramesCount ; checking frames
    tpress A+B+C,(SonicControl) ; if A, B or C pressed
    bne.s Sonic_JD_Init ; then initialize
    rts

Sonic_JD_ChkFramesCount:
    subq.b #01,$001F(a0) ; decrement count of remained frames
    bne.s Sonic_JD_ExecHoming ; if frames > 0, execute homing
    clr.b ($FFFFFFEB).w ; if not, then not
    rts

Sonic_JD_ExecHoming:
    move.w $003A(a0),a1 ; get address of object
    move.w $000C(a1),d1 ; get Y-pos of object
    sub.w $000C(a0),d1 ; get deltaY
    move.w $0008(a1),d2 ; get X-pos of object
    sub.w $0008(a0),d2 ; get deltaX
    jsr CalcAngle.l ; calculate Angle (A)
    jsr CalcSine.l ; get sin & cos of Angle (A)
    move.w #$00001000,d3 ; set homing speed (HS)
    muls.w d3,d0 ; get X-velocity (sin(A)*HS)
    muls.w d3,d1 ; get Y-velocity (cos(A)*HS)
    asr.l #8, d0 ; X-velocity / 256
    asr.l #8, d1 ; Y-velocity / 256
    move.w d1,$0012(a0) ; SET Y-velocity
    move.w d0,$0010(a0) ; SET X-velocity
    move.w d0,$0014(a0) ; SET Ground-velocity
    rts

Sonic_JD_Init:
    lea ($FFFFD800).w,a1 ; set address of Objects
    move.w #$005F,d6 ; set max count of Objects for checking
    moveq #$FFFFFFFF,d3 ; set minimal distanсe from Object to Sonic

Sonic_JD_CheckObject:
    tst.b $01(a1) ; check1
    bpl.w Sonic_JD_NextObject
    tst.b $20(a1) ; check2
    bne.w Sonic_JD_GoodObject

Sonic_JD_NextObject:
    lea $0040(a1),a1 ; select next Object block
    dbf d6, Sonic_JD_CheckObject ; repeat until reach last Object
    cmpi.l #$00006400, d3 ; check distance from Sonic to closest Object
    bhi.w Sonic_JD_ExecJumpDash ; if too far, execute JumpDash

Sonic_JD_InitHoming:
    move.b #$3C,$001F(a0) ; set count of frames for Homing Attack
    move.b #$02,($FFFFFFEB).w ; current STATE = HOMING
    move.w #$00BC,d0 ; select JD sound
    jmp (PlaySound_Special).l ; play JD sound

Sonic_JD_GoodObject:
    lea Sonic_JD_ObjectsDB,a2 ; get address of Objects' database
    move.b (a1),d0 ; get number of current Object

Sonic_JD_IsObjectInTheDB:
    cmp.b (a2)+,d0 ; if object number is there in the database
    beq.b Sonic_JD_GetDX ; if yes, calculate DX
    bhi.b Sonic_JD_IsObjectInTheDB ; else, repeat
    bra.w Sonic_JD_NextObject

Sonic_JD_GetDX:
    move.w $0008(a1),d1 ; get X-position of Object
    sub.w $0008(a0),d1 ; minus X-position of Sonic
    bpl.b Sonic_JD_ObjectToTheRight

Sonic_JD_ObjectToTheLeft:
    btst #0, $0022(a0) ; if Sonic looks left
    beq.w Sonic_JD_NextObject ; if not, go to the next Object
    bra.b Sonic_JD_GetDY

Sonic_JD_ObjectToTheRight:
    btst #0,$0022(a0) ; if Sonic looks right
    bne.w Sonic_JD_NextObject ; if not, go to the next Object

Sonic_JD_GetDY:
    move.w $000C(a1),d2 ; get Y-position of Object
    sub.w $000C(a0),d2 ; minus Y-position of Sonic

Sonic_JD_ChkClosestObject:
    muls.w d1,d1 ; DX^2
    muls.w d2,d2 ; DY^2
    add.l  d1,d2 ; DX^2+DY^2
    cmp.l  d3,d2 ; compare distanсes
    bcc.w Sonic_JD_NextObject

Sonic_JD_SetClosestObject:
    move.l d2,d3 ; set current Object as closest
    move.w a1,$003A(a0) ; set current Object for Homing Attack
    bra.w Sonic_JD_NextObject

; database of valid objects to do homing attack with
; numbers MUST BE in ascending order
Sonic_JD_ObjectsDB: dc.l $1E1F2226, $2B2C2D40, $42435055, $6078FF00

Sonic_JD_ExecJumpDash:
    tst.b ($FFFFFFEB).w ;if STATE == JUMPDASH
    bne.w Sonic_JD_Rts ; if not, branch
    move.b #$01,($FFFFFFEB).w ; current STATE = JUMPDASH
    move.w #$0A00,d0 ; set X-velocity to $A00
    btst #6,$22(a0) ; is Sonic underwater?
    beq.w Sonic_JD_ChkShoes
    move.w #$0600,d0 ; if underwater, set X-velocity to $60

Sonic_JD_ChkShoes:
    tst.b ($FFFFFE2E).w ; does Sonic have speed shoes?
    beq.w Sonic_JD_ChkOrientation ;
    addi.w #$0200,d0 ; set speed to $C00 or $800 if underwater

Sonic_JD_ChkOrientation:
    btst #0,$0022(a0) ; where Sonic looks to?
    beq.w Sonic_JD_SetSpeed; if not to right, then
    neg.w d0 ; reverse X-velocity

Sonic_JD_SetSpeed:
    move.w d0,$0010(a0) ; SET X-velocity
    move.w d0,$0014(a0) ; SET Ground-velocity
    move.w #$0000,$0012(a0) ; SET Y-velocity
    move.w #$00BC,d0 ; select JD sound
    jsr (PlaySound_Special).l ; play JD sound

Sonic_JD_Rts:
    rts

Sonic_JD_StopHoming:
    cmpi.b #$02, ($FFFFFFEB).w ; if STATE == JUMPDASH
    bne Sonic_JD_StopHoming_Rts ; if not, branch
    clr.b ($FFFFFFEB).w ; STATE = NORMAL
    move.w #$FA10,d0 ; set Y-velocity to -5F0
    btst #6,$22(a0) ; is Sonic underwater?
    beq Sonic_JD_StopHoming_ChkShoes
    move.w #$FCE0,d0 ; if underwater, set X-velocity to -320

Sonic_JD_StopHoming_ChkShoes:
    tst.b ($FFFFFE2E).w ; does Sonic have speed shoes?
    beq Sonic_JD_StopHoming_SetSpeed
    move.w #$F9E0,d0 ; set X-velocity to -620

Sonic_JD_StopHoming_SetSpeed:
    move.w #$0000,$0010(a0) ; SET X-velocity
    move.w d0,$0012(a0) ; SET Y-velocity

Sonic_JD_StopHoming_Rts:
    rts
В секции Sonic_ResetOnFloor в самое начало добавляем:

    clr.b ($FFFFFFEB).w ; STATE = NORMAL
Далее переходим к loc_1AF1E и после "addq.b #2,$24(a1)" вписываем:

    jmp Sonic_JD_StopHoming
И, наконец, в секции loc_1AF9C после "bsr.w AddPoints" вставляем:

    jsr Sonic_JD_StopHoming
Откомпилируйте и проверьте - работает!

 

Каждый кадр, покамест ёжик крутится в воздухе, процессор непроизвольно переходит по нашей ссылке, в который вписан практически весь сценарий выполнения усовершенствованного JumpDash'а.

Первой миссией нашей программы становится поиск объектов, удовлетворяющих следующим требованиям:

1) объект входит в список целей, разрешённых для выполнения самонаводящейся атаки.

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

Sonic_JD_ObjectsDB: dc.l $1E1F2226, $2B2C2D40, $42435055, $6078FF00
Здесь 1E, 1F, 22, 26, 2B, 2C и т.д. - это т.н. номера объектов, характеризующие вид объекта. К примеру 22 - это летающие осы. Какой номер что означает можно узнать из программы SonED2.

По умолчанию установлено 14 объектов. Вы можете увеличить их количество добавлением новых dc.l, dc.w, dc.b - как угодно, на ваше усмотрение.

Последний байт (00) ни в коем случае не менять. Программа должна знать, где закончить.

ВНИМАНИЕ! Байты должны идти в строго возрастающем порядке.

2) объект находится в поле зрения Ёжика, а не за ним.

 

Далее находится расстояние от Соника до объекта (точнее, квадрат расстояния) и сравнивается с кратчайшим расстоянием, таким образом вычисляется ближайший к герою объект.

Если таких объектов поблизости нет, выполняется старый добрый JampDash. В противном случае записываем адрес объекта-цели в память и каждый кадр будем менять положение Соника по отношению к врагу в сторону сближения, чтобы в конце концов уничтожить последнего. Это и есть самонаводящаяся атака. Сближение по умолчанию производится в течение 31 кадра, после чего эта особенность отключается. Тем не менее, этого достаточно, чтобы провести молниеносную атаку. При столкновении с целью или препятствием, самонаводящаяся атака также отключается.

 

Надеюсь, мой гайд окажется полезным.

 

 

Спасибо за гайд, но у меня мониторы не разбиваются и когда я убиваю 1 робота, я получаю 640160 очков. Это нормально???

 

Уже исправил s=)  s=)  s=)

Изменено пользователем Price5115

Поделиться сообщением


Ссылка на сообщение

У меня с данным Хомингом проблемка:

Когда компилирую, вылезает ошибка про tpress A+B+C. Я удаляю эту строчку, и выходит неплохой прикол, при нажатии кнопки прыжка Сонюх ускоряется, и если видит цепочку врагов/мониторов делает серийную атаку по ним (как в DX) и отказывается прыгать. Смешно, правда?

Поделиться сообщением


Ссылка на сообщение

У меня с данным Хомингом проблемка:

Когда компилирую, вылезает ошибка про tpress A+B+C. Я удаляю эту строчку, и выходит неплохой прикол, при нажатии кнопки прыжка Сонюх ускоряется, и если видит цепочку врагов/мониторов делает серийную атаку по ним (как в DX) и отказывается прыгать. Смешно, правда?

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

Поделиться сообщением


Ссылка на сообщение

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

Скинь исходник исправлю.

Поделиться сообщением


Ссылка на сообщение

Исходник?

sonic 1 hack.rar

 

Помочь с хомингом. Изменено пользователем Price5115

Поделиться сообщением


Ссылка на сообщение

Скинь исходник исправлю.

Ды что ты как нэ родной, слюшай? Ты здесь напиши код, тогда я поверю.

Поделиться сообщением


Ссылка на сообщение

Ды что ты как нэ родной, слюшай? Ты здесь напиши код, тогда я поверю.

Может сразу sonic1.asm

 

Гиперный, ты через какую программу прописываешь код?

Изменено пользователем Price5115

Поделиться сообщением


Ссылка на сообщение

Итак, я сегодня решил покопаться в АСМе и понял довольно лёгкую штуку, которую наверное уже знают, но всё же.

Как заставить игру выдавать Сонику жизнь за каждый 50 колец?

Идём к лейбелу Obj2E_ChkRings и находим следующие строки:

Цитата

 

cmpi.w #100,($FFFFFE20).w ; check if you have 100 rings

bcs.s Obj2E_RingSound
bset #100,($FFFFFE1B).w
beq.w ExtraLife
cmpi.w #200,($FFFFFE20).w ; check if you have 200 rings
bcs.s Obj2E_RingSound
bset #200,($FFFFFE1B).w
beq.w ExtraLife

Как-то так.

И меняем значения колец:

Цитата

 

cmpi.w #50,($FFFFFE20).w ; check if you have 50 rings

bcs.s Obj2E_RingSound
bset #50,($FFFFFE1B).w
beq.w ExtraLife
cmpi.w #90,($FFFFFE20).w ; check if you have 90 rings
bcs.s Obj2E_RingSound
bset #90,($FFFFFE1B).w
beq.w ExtraLife

Ну я на всякий пожарный прокомментировал строки, кстати, объясню почему у меня написано в этом месте

Цитата

 

cmpi.w #90,($FFFFFE20).w ; check if you have 90 rings

bcs.s Obj2E_RingSound
bset #90,($FFFFFE1B).w
beq.w ExtraLife

90 колец. Видите ли, когда я писал 100 колец, то Соник получал вторую жизнь за 110 колец, когда я написал 90 колец, он стал получать вторую жизнь за 100 колец ровно. PARADOX!

Также, на всякий случай, рекомендую прописать дальнейший порядок, иначе игра (как в моём случае с новым уровнем, на котором 200 колец, где то так) не выдаст следующею жизнь.

Цитата

 

cmpi.w #90,($FFFFFE20).w ; check if you have 140 rings

bcs.s Obj2E_RingSound
bset #140,($FFFFFE1B).w
beq.w ExtraLife

И так далее.

Поделиться сообщением


Ссылка на сообщение

Может сразу sonic1.asm

 

Гиперный, ты через какую программу прописываешь код?

Блокнот,ничего больше.

Поделиться сообщением


Ссылка на сообщение

Блокнот,ничего больше.

 

А для компиляции?

Поделиться сообщением


Ссылка на сообщение

А для компиляции?

build.bat

Мой гайд, как заставить монитор с S давать любой приз(ы), по вашему желанию.

 

Перейдем к Obj2E_ChkSonic.

Прокрутим до Obj2E_ChkEnd. Мы видим разные строчки - так давайте же разберём!

 

 

 

; ===========================================================================
 
Obj2E_ChkSonic:
cmpi.b #2,d0 ; does monitor contain Sonic?
bne.s Obj2E_ChkShoes ; if not, branch
 
ExtraLife:
addq.b #1,($FFFFFE12).w ; add 1 to the number of lives you have Дать 1 жизнь
addq.b #1,($FFFFFE1C).w ; add 1 to the lives counter Обновить счётчик жизней
move.w #$9F,d0
jmp (PlaySound).l ; play extra life music Звук жизни
; ===========================================================================
 
Obj2E_ChkShoes:
cmpi.b #3,d0 ; does monitor contain speed shoes?
bne.s Obj2E_ChkShield ; if not, branch
move.b #1,($FFFFFE2E).w ; set speed shoes flag Поставить флаг ботинков
move.w #$4B0,($FFFFD034).w ; time limit for the power-up Лимит ботинков. Если строчку не вписать, ботинки никогда не закончятся.
move.w #$C00,($FFFFF760).w ; change Sonic's top speed Увеличить скорость Соньки
move.w #$18,($FFFFF762).w }Эти два кода врятли на что-то влияют.
move.w #$80,($FFFFF764).w }Можно не вписывать
move.w #$E2,d0
jmp (PlaySound).l ; Speed up the music Ускорить музыку
; ===========================================================================
 
Obj2E_ChkShield:
cmpi.b #4,d0 ; does monitor contain a shield?
bne.s Obj2E_ChkInvinc ; if not, branch
move.b #1,($FFFFFE2C).w ; give Sonic a shield Дать Сонику щит
move.b #$38,($FFFFD180).w ; load shield object ($38) Загрузть картинку щита
move.w #$AF,d0
jmp (PlaySound).l ; play shield sound Звук щита
; ===========================================================================
 
Obj2E_ChkInvinc:
cmpi.b #5,d0 ; does monitor contain invincibility?
bne.s Obj2E_ChkRings ; if not, branch
move.b #1,($FFFFFE2D).w ; make Sonic invincible Сделать Соньку неуязвимой
move.w #$4B0,($FFFFD032).w ; time limit for the power-up Лимит неуязвимости - см. выше
move.b #$38,($FFFFD200).w ; load stars object ($3801) 
move.b #1,($FFFFD21C).w
move.b #$38,($FFFFD240).w ; load stars object ($3802)
move.b #2,($FFFFD25C).w
move.b #$38,($FFFFD280).w ; load stars object ($3803)
move.b #3,($FFFFD29C).w
move.b #$38,($FFFFD2C0).w ; load stars object ($3804)
move.b #4,($FFFFD2DC).w
tst.b ($FFFFF7AA).w ; is boss mode on?
bne.s Obj2E_NoMusic ; if yes, branch
move.w #$98,d0
jmp (PlaySound).l ; play invincibility music Музыка неуязвимости
; ===========================================================================
 
Obj2E_NoMusic:
rts
; ===========================================================================
 
Obj2E_ChkRings:
cmpi.b #6,d0 ; does monitor contain 10 rings?
bne.s Obj2E_ChkS ; if not, branch
addi.w #$A,($FFFFFE20).w ; add 10 rings to the number of rings you have Дать 10 колец
ori.b #1,($FFFFFE1D).w ; update the ring counter Обновить счётчик колец
См. прошлый гайд
cmpi.w #100,($FFFFFE20).w ; check if you have 100 rings
bcs.s Obj2E_RingSound
bset #1,($FFFFFE1B).w
beq.w ExtraLife
cmpi.w #200,($FFFFFE20).w ; check if you have 200 rings
bcs.s Obj2E_RingSound
bset #2,($FFFFFE1B).w
beq.w ExtraLife
 
Obj2E_RingSound:
move.w #$B5,d0
jmp (PlaySound).l ; play ring sound Звук кольца
; ===========================================================================
 
Мой код
Obj2E_ChkS:
cmpi.b #7,d0 ; does monitor contain 'S'
bne.s Obj2E_ChkGoggles ; if not, branch to Goggle code
move.b #1,($FFFFFE2D).w ; make Sonic invincible
move.b #1,($FFFFFE2E).w ; set speed shoes flag
move.w #$C00,($FFFFF760).w ; change Sonic's top speed
move.w #$18,($FFFFF762).w
move.w #$80,($FFFFF764).w
move.w #$E2,d0
jmp (PlaySound).l ; Speed up the music
nop
 
Obj2E_ChkGoggles:
cmpi.b #8,d0 ; does monitor contain Goggles?
bne.s Obj2E_ChkEnd ; if not, branch to ChkEnd
move.b #1,($FFFFFFFB).w ; move 1 to the goggle check Debug Mode
Obj2E_ChkEnd:
rts
; ===========================================================================

 
Вписывайте нужные коды в ChkS перед строчкой nop.
Изменено пользователем Гиперный

Поделиться сообщением


Ссылка на сообщение
90 колец. Видите ли, когда я писал 100 колец, то Соник получал вторую жизнь за 110 колец, когда я написал 90 колец, он стал получать вторую жизнь за 100 колец ровно. PARADOX!

 

 

Погуглите про шестнадцатеричную систему счисления.

  • Лайк 1
  • Дизлайк 1

Поделиться сообщением


Ссылка на сообщение

Через 5 минут будет видео урок. Как сделать Homing Attack в Sonic the Hedgehog 1 

Поделиться сообщением


Ссылка на сообщение

Через 5 минут будет видео урок. Как сделать Homing Attack в Sonic the Hedgehog 1 

Надеюсь, что 5 минут не равны в этом случае 5 часам?

Поделиться сообщением


Ссылка на сообщение

Надеюсь, что 5 минут не равны в этом случае 5 часам?

 

Нет

А как вставить видео в комментарий?

Изменено пользователем Price5115

Поделиться сообщением


Ссылка на сообщение

[media] <страничкаролика (без &feature.youtube)> [/media ]

Изменено пользователем Гиперный

Поделиться сообщением


Ссылка на сообщение

Прикол: при атаке на монитор Соник начинает вертеться, и если не прыгнуть его отбросит на солидное расстояние.

Поделиться сообщением


Ссылка на сообщение

Во первых: Ты еще тише сделать не мог?

Во вторых: В данном случае собого умения копировать не надо.

В третьих: Люди которые хакают ромы и так смогут прочитать текстовый гайд.

В четвертых: Рано тебе еще в ромхакинг лезть.

Поделиться сообщением


Ссылка на сообщение

Во первых: Ты еще тише сделать не мог?

Во вторых: В данном случае собого умения копировать не надо.

В третьих: Люди которые хакают ромы и так смогут прочитать текстовый гайд.

В четвертых: Рано тебе еще в ромхакинг лезть.

 

1)У меня микрофон нормальный. А бандикам понизил его звук до минимума. А фрапс жрёт очень много памяти.

2)Я не понял, что ты упоминаешь под 

 

собого умения

3)А вдруг кому-то непонятен текстовой гайд?

4)Ромхакингом может заниматься даже 7-ми летний ребёнок.

Изменено пользователем Price5115
  • Лайк 2
  • Дизлайк 2

Поделиться сообщением


Ссылка на сообщение
А вдруг кому-то непонятен текстовой гайд?

Кому? Кому может быть не понятен текстовый гайд? Людям которые не умеют читать?

 

Ромхакингом может заниматься даже 7-ми летний ребёнок.

Ну да, семилетний ребенок, который только пошел в первый класс, который даже не знает что такое умножение, будет просто отличным хакером. Или этот суперхакер полезет в гугл, найдет там гайд, ничего не поймет в нем, посмотрит твое видео, поймет как можно выделить мышкой часть кода, потом скопировать эту часть в дизасм первого соника и вот что мы имеем: еще один бесполезный хак, коих предостаточно, и еще одного члена команды asm-team(Привет vladickcomper'у).

И теперь этот суперхакер умеет вставлять хоминг в ром, а что дальше? А ничего, он ничего больше не умеет.

 

Все выше сказанное мое имхо.

Изменено пользователем TwoFace
  • Лайк 2

Поделиться сообщением


Ссылка на сообщение

Кому? Кому может быть не понятен текстовый гайд? Людям которые не умеют читать?

 

 

Ну да, семилетний ребенок, который только пошел в первый класс, который даже не знает что такое умножение, будет просто отличным хакером. Или этот суперхакер полезет в гугл, найдет там гайд, ничего не поймет в нем, посмотрит твое видео, поймет как можно выделить мышкой часть кода, потом скопировать эту часть в дизасм первого соника и вот что мы имеем: еще один бесполезный хак, коих предостаточно, и еще одного члена команды asm-team(Привет vladickcomper'у).

И теперь этот суперхакер умеет вставлять хоминг в ром, а что дальше? А ничего, он ничего больше не умеет.

 

Все выше сказанное мое имхо.

Ну ок. Уберу ссылку на коды.

Поделиться сообщением


Ссылка на сообщение

...и еще одного члена команды asm-team(Привет vladickcomper'у).

Вот только не надо про ASM team. Глава этой команды участвовал в разработке Sonic Autumn Mix, так что придумайте другой эквивалент слову "Нубас"

 

А тебе, Price5115, я посоветую сначала самому чему-нибудь научиться, прежде чем ворошить гайды Хоумингов и тому подобное. Для начала сделай свои наработки, а только потом уже думай, не занимает ли сторонний контент более половины хака. Ибо хак должен быть уникальным, как создатель. Да, это нелегко, но кто говорил, что будет иначе?

Поделиться сообщением


Ссылка на сообщение

 

 

Вот только не надо про ASM team. Глава этой команды участвовал в разработке Sonic Autumn Mix, так что придумайте другой эквивалент слову "Нубас"
 
Не знал, беру свои слова обратно.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

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

×