Перейти к содержимому
⭐️ Форум Sonic World
DELETED

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

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

Тогда сегодня постараюсь накалякать.

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


Ссылка на сообщение
Будет ли актуален гид по добавлению летающе-плавающего Тейлза в Соник 1?

 

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

 

Но ты пользовался кодом из Sonic Open Source Project, либо позаимствовал его части. В этом случае публиковать код/способ добавления, который с вероятностью 90% украден из третьего Мегамикса, не следует. Даже если ты сам напишешь гид, это не означает, что ты можешь использовать работу Team Megamix без их разрешения (которого, скорее всего не будет, увы).

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

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


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

В третьей версии Sonic Megamix Тейлза не было! Он появился только в четвертой версии, вместе с Наклзом.

 

http://info.sonicretro.org/images/6/67/Son...egamix_v3.0.zip

 

Думаю, не стоит недооценивать OuricoDoido, поскольку помимо украденного кода хоминг атаки из мегамикса, он написал четыре новых метода хоминг атаки -

 

http://asmtosegagenesis.forumeiros.com/f4-sonic-1

 

А уже об реализации некоторых вещей в STHOSP я и не говорю. В общем, гид почти готов, сегодня выложу.

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

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


Ссылка на сообщение
В третьей версии Sonic Megamix Тейлза не было! Он появился только в четвертой версии, вместе с Наклзом.

 

http://info.sonicretro.org/images/6/67/Son...egamix_v3.0.zip

 

Думаю, не стоит недооценивать OuricoDoido, поскольку помимо украденного кода хоминг атаки из мегамикса, он написал четыре новых метода хоминг атаки -

 

http://asmtosegagenesis.forumeiros.com/f4-sonic-1

 

А уже об реализации некоторых вещей в STHOSP я и не говорю. В общем, гид почти готов, сегодня выложу.

 

Версия Мегамикса могла утечь не сразу после выхода третьей версии, а в процессе разработки следующей. Вполне вероятно, что утекла не третья версия Мегамикса, а, например, версия три с половиной.

 

Я посмотрел его гиды. Действительно, он выглядит как компетентный человек, хорошо знает геометрию и математику, в состоянии применить свою теорию в коде. Хотя АСМ он знает недостаточно хорошо. Это я могу сказать, изучив его код. Он использует только signed-бранчи, описанные в базовых гидах, не знает значения строчки addq.l #4,(sp), пихая ее куда попало в коде своих способностей, не знает про команды ASR/ASL/LSR/LSL. Этих знаний достаточно, чтобы реализовывать нужные ему математические рассчеты, но недостаточно, чтобы выполнять порты объектов.

 

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

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


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

Я не могу понять, какие нафиг авторские права в хакинге? Вслушайтесь в это слово - хакинг (взлом)! Когда как то самое "воровство" хорошенько процветает в геймдеве, "воруются" спрайты, коды, движки. Сделанные тобой с нуля муген-персонажи ты потом можешь увидеть в какой-нибудь другой сборке, а про спрайты и музыку я вообще молчу. Так почему же там на каждом шагу не орут: "он украл Х из игры Y"?

Хакинг сам по себе НЕЗАКОНЕН. Мы не обладаем авторскими правами на игру, и мы не имеем права вносить без разрешения в нее что либо. Даже хранение ромов без оригинального картриджа незаконно! Маленький блок кода из другого хака мы считаем украденным, хотя крадем и даже присваиваем себе весь оригинальный код игры, графику и музыку, "воруем" их у соник тим! Так почему же код из мегамикса, выложенный в общий доступ мы считаем украденным?

Приведу цитату Smoke с форума romhacking.net.ru темы "Как вы увлеклись ромхакингом?", которого тоже можно обвинить в воровстве кода и некоторых элементов из хака Kabal'a, но почему никто его в этом не обвиняет?

По-моему увлечение у меня началось лет 4-5 назад, когда узнал о хаке Кабала. Сразу мысль пришла в голову: типа если он смог, я тоже смогу. Ну и начал штудировать так сказать. Сначала разбирался по его рому, с каждым разом узнавая все больше, параллельно с этим работал над своей версией УМК3. Можно сказать это была практика для лучшего усвоения. Все никак не доведу его до ума. Потом относительно недавно (летом 2008) решил по-человечески писать код с помощью инструкций асма, а не хекс-кодами. Так пришла в голову идея о хаке МК2. Кстати тоже подразумевалось, что это будет некая тренировка

Почему мы должны уподобляться буржуям? Зачем мы должны обсирать хак, в котором есть хоть один процент "ворованного" контента, как это делается на SSRG? Почему все русские ромхакеры не видят в этом воровства?

Цитата с эму-ленда:

Cool-Spot: Вот только разрешат ли авторы использовать эти спрайты в своих целях?

Nemesis_c: вот как-то, мне кажется, вообще самый глупый фактор.. ты ж фирму сега не спрашивал "а можно я вашего соника хакну?".

Зачем, наконец, писать то, что давно уже написано и находится в общем доступе? "Чтобы расширять знания в ромхакинге" - скажете вы. А не будет ли лучше потратить время на написание чего-либо совершенно нового, а не старого и заезженного, которое есть в почти каждом хаке.

Кстати, Влад, почему ты так уверен, что Тейлз из Мегамикса? Ты ведь сам сказал, что OuricoDoido довольно неплохо разбирается в ромхакинге. А раз так, я не поверю что этот код из мегамикса, пока не увижу доказательства. Доказательств нет? Тогда закрыли тему.

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

 

Извиняюсь за оффтоп, да простит меня администрация, крик души.

  • Лайк 3

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


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

Сторого говоря, хакинг игр незаконен. Это так. В то же время Сеге абсолютно все равно, что коды старых игр уже давно почти полностью вскрыты. Это уже не их передовые разработки, которые не должны были попасть в руки к другим компаниям, они были таковыми лишь 20 лет назад.

 

Коммерческие проекты крупных компаний и свободные разработки фанатов-энтузиастов - это разные вещи. Соник Тим абсолютно равнодушны к тому, что пара любителей сделала бесплатную игру/хак с участием их маскота, они не составят им конкуренцию, никак не повлияют на бизнес (если это произойдет, они подадут в суд и будут правы).

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

 

Например, я не хочу, чтобы в каком-нибудь другом хаке были такие же боссы, как у меня, чтобы кто-либо пользовался моим дизайном Title Cards или меню (речь идет о полном или частичном копировании моего арта и кода). Этот контент полностью мой, я рисовал арт, программировал объекты с нуля, потратил на это много времени. Думаю, нет смысла объяснять, почему я этого не хочу. Имею право, авторское право.

 

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

 

Авторские права обычно принято уважать. При использовании чьих-то разработок, имена их авторов добавляют в Создателей (Credits), перед их использованием у авторов спрашивают разрешение. Вообще, зачем филосовствовать на тему законности кражи контента, если можно просто спросить? "Можно мне использовать Х из вашего хака Y?" И все. Какие проблемы? Невыполнимое задание? В наше время с нужным человеком связаться обычно легко.

 

Не вижу смысла уважать/поощрять воровство. Вряд ли тебе понравилось бы, если, например, кто-то взял бы твою работу и заменил твое имя в создателях своим. Кому-то может не понравится, что без спроса используют их спрайты/музыку.

 

... хотя крадем и даже присваиваем себе весь оригинальный код игры, графику и музыку...

Я пока не видел того сумасшедшего, кто кричал "Это я написал весь код в Соник 1!!!111"

 

Так почему же код из мегамикса, выложенный в общий доступ мы считаем украденным?

Его не выкладывали в общий доступ.

 

Кстати, Влад, почему ты так уверен, что Тейлз из Мегамикса? Ты ведь сам сказал, что OuricoDoido довольно неплохо разбирается в ромхакинге. А раз так, я не поверю что этот код из мегамикса, пока не увижу доказательства. Доказательств нет? Тогда закрыли тему.

Я и не говорил, что в этом уверен. В своем посте я писал: "Хотя не исключу, что он все же смог бы это сделать сам."

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

 

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

Хочется верить, что это так.

Я не буду утверждать, что это плохо. Просто я видел несколько случаев, когда авторы удаляли свои гиды, мотивируя это массовым злоупотреблением новой способности и отсутсвием желания делать что либо еще (хотя желания клянчить у автора новые крутые гиды было навалом).

 

По поводу конкретно этого гида - тебе решать. Мой аргумент лишь в том, что это дело с Open Source проектом весьма сомнительное. Если ты доверяешь OuricoDoido и считаешь, что разрешено использовать этот код - выкладывай.

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


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

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

 

КАК ДОБАВИТЬ DOUBLE JUMP

 

Идите к суброутине Obj01_MdJump2 и добавьте после

 

bsr.w Sonic_LevelBound

 

строчку

 

bsr.w Sonic_DoubleJump

 

Сделайте то же самое в суброутине Obj01_MdJump2.

 

Теперь практически в любом месте вставим код даблджампа:

 

Sonic_DoubleJump:
	move.b	($FFFFF603).w,d0; is ABC pressed? 
	andi.b	#$70,d0	; is ABC pressed? 
	beq.w	DJ_End	; if not, branch
	tst.b	($FFFFFFEB).w; was doublejump flag set?
	bne.s	DJ_End	; if yes, branch
	move.b	#1,($FFFFFFEB).w; if not, set doublejump flag
	move.w	#$A0,d0	; set jumping sound
	jsr	(PlaySound).l; play jumping sound
	bclr	#4,$22(a0); clear double jump flag
	move.w	#-$600,$12(a0); set normal double jump speed
	btst	#6,$22(a0); is Sonic underwater?
	beq.s	DJ_End	; if not, branch
	move.w	#-$300,$12(a0); set underwater double jump speed
DJ_End:
	rts		; return or cancel double jump
; End of function Sonic_DoubleJump

 

Теперь перейдите к Sonic_ResetOnFloor и добавьте после нее строчку:

 

clr.b ($FFFFFFEB).w; clear doublejump flag

 

КАК ДОБАВИТЬ SPINBOOST ИЗ STHOSP:

 

Итак, сначала перейдем к Obj01_MdNormal и добавим после нее строчку:

 

bsr.w Sonic_SpinBoost

 

Теперь в любом месте вставляем код буста:

 

; --------------------------------------------------------------------------- 
; Subroutine Sonic Spin Boost 
; --------------------------------------------------------------------------- 

; ||||||||||||||| S U B R O U T I N E ||||||||||||||||||||||||||||||||||||||| 

Sonic_SpinBoost:;Sonic Advance Ability 
 move.b ($FFFFF603).w,d0; read controller 
 andi.b #$10,d0; pressing B? 
 beq.w Sonic_SBrts; if not, return 
 move.w #$D1,d0; spin sound ($E0 in s2) 
 jsr (PlaySound_Special).l; play spin sound 
 addq.l #4,sp; increment stack ptr 
 move.b #1,$39(a0); set spindash flag 
 move.w #0,$3A(a0); set charge count to 0 

Sonic_SBrts: 
 rts 
; End of function Sonic_SpinBoost

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

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


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

В двойной прыжок я бы добавил ещё использование анимации.

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


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

Здесь двойной прыжок другого типа.

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


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

В этот код можно вставить использование анимации.

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


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

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

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

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


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

уважаемые ромхакеры кому не сложно скажите пожалуйста асм код пил аута

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


Ссылка на сообщение
уважаемые ромхакеры кому не сложно скажите пожалуйста асм код пил аута

Ну вообще-то сначала лучше показать насколько хорош хак. Просто так мало что дают. http://forum.sonic-world.ru/index.php?show...#entry252491190 - Ищи тут, если считаешь, что достоен.

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


Ссылка на сообщение
уважаемые ромхакеры кому не сложно скажите пожалуйста асм код пил аута

http://forum.sonic-world.ru/index.php?show...amp;p=252489636

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


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

Ворн за оффтопик. Эта тема не называется "Ваши хаки".

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


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

скажите пожалуйста код активации double jump только при наличии щита

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


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

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

 

tst.b ($FFFFFE2C).w ; does Sonic have shield?

beq.w Obj38_Delete ; if not, branch

 

Вставляй в код дубльджампа, и все.

 

И да, ты не в той теме спросил.

Изменено пользователем Cool-Spot
  • Лайк 1

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


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

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

 

 

 

Вставляй в код дубльджампа, и все.

 

И да, ты не в той теме спросил.

1)спасибо

2)сорри

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


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

ВНЕЗАПНО я решил сделать несколько гидов, после крайне долгого отсутствия активности в этом деле. Нет, большой учебник по ассемблеру еще не готов, я уже думаю о том, как бы начать HTML-верстку (которую я к слову всегда делаю вручную, что займет время). А пока начнем с небольшого обновления весьма своеобразными и немаленькими гидами. В будущем надеюсь делать обновления чуть чаще, чем раз в год =)

 

Встречайте:

 

Как исправить баг с загрузкой Pattern Load Cues (Соник 1 и 2)

Как исправить баг со сдвигом очереди Pattern Load Cues (Соник 1 и 2)

Как исправить баги при смене уровней (Соник 1)

 

Последние два гида - мои собственные, они описывают экзотические неоткрытые ранее баги в Сониках, которые я обнаружил в последние месяцы.

 

Счастливых багфиксов!

  • Лайк 3

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


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

ВНЕЗАПНО я решил сделать несколько гидов, после крайне долгого отсутствия активности в этом деле. Нет, большой учебник по ассемблеру еще не готов, я уже думаю о том, как бы начать HTML-верстку (которую я к слову всегда делаю вручную, что займет время). А пока начнем с небольшого обновления весьма своеобразными и немаленькими гидами. В будущем надеюсь делать обновления чуть чаще, чем раз в год =)

 

Встречайте:

 

Как исправить баг с загрузкой Pattern Load Cues (Соник 1 и 2)

Как исправить баг со сдвигом очереди Pattern Load Cues (Соник 1 и 2)

Как исправить баги при смене уровней (Соник 1)

 

Последние два гида - мои собственные, они описывают экзотические неоткрытые ранее баги в Сониках, которые я обнаружил в последние месяцы.

 

Счастливых багфиксов!

Интересные гиды. Было интересно почитать, может даже пригодиться.

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

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


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

Если честно, ни разу не наблюдал подобные баги, может быть, просто не обращал внимания. Внес в базу гайдов.

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


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

Как-то ВНЕЗАПНО появились гиды :D

Спасибо, за то что пишишь, для нас простых смертных сложные гиды. В хак уже перенес эти гиды.

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


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

Как добавить в 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 кадра, после чего эта особенность отключается. Тем не менее, этого достаточно, чтобы провести молниеносную атаку. При столкновении с целью или препятствием, самонаводящаяся атака также отключается.

 

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

Изменено пользователем Мимо проходящий
  • Лайк 4
  • Дизлайк 2

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

×