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

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

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

И так)) решил создать тему)) будем собирать туториалы по хакингу Genesis/Mega Drive соников))

 

Ну чтож) вот первый гид: Sonic 1: в каждом акте своя мелодия

 

Нам понадобится:

Любой текстовый редактор

Исходник Sonic 1 (Split and Text by Hivebrain)

Любой HEX редактор

Прямые руки))

 

 

Сначала идём в папку misc и ищем файл muslist1.bin, скопируйте его 2 раза и назовите копии muslist3.bin и muslist4.bin

 

далее редактируем плейлисты) думаю это не сложно, слушаем sound test и пишем в hex редакторе новое значение в файле)

muslist1.bin 1ый акт, muslist3.bin 2ой акт, muslist4.bin 3ий акт

номера мелодий (в оригинале 81 82 83 84 85 86) Green Hill, Labyrinth, Marble, Star Light, Spring Yard, Scrap Brain соответственно)

пишем новые номера мелодий (какие хотим слышать) сохраняем

 

Открываем Sonic1.asm и ищем в нём строку: MusicList: incbin misc\muslist1.bin

и видим:

 

 

; ---------------------------------------------------------------------------
; Music	playlist
; ---------------------------------------------------------------------------
MusicList:	incbin	misc\muslist1.bin
	even

 

 

добовляем строки:

 

MusicList3:	incbin	misc\muslist3.bin
	even
MusicList4:	incbin	misc\muslist4.bin
	even

 

в итоге получаем:

 

; ---------------------------------------------------------------------------
; Music	playlist
; ---------------------------------------------------------------------------
MusicList:	incbin	misc\muslist1.bin
	even
MusicList3:	incbin	misc\muslist3.bin
	even
MusicList4:	incbin	misc\muslist4.bin
	even

 

 

Далее ищем строку Level_PlayBgm:

и видим это:

 

Level_PlayBgm:
	lea	(MusicList).l,a1; load	music playlist
	move.b	(a1,d0.w),d0; add d0 to a1
	bsr.w	PlaySound; play music
	move.b	#$34,($FFFFD080).w; load title	card object

 

нам надо добавить проверку акта) т.е. какой сейчас акт?))

для этого заменяем это на:

 

Level_PlayBgm:	
	cmpi.b	#$1,($FFFFFE11).w; это акт 2?
	bne.s  CheckAct3;если нет, то идём к проверке акт3? CheckAct3
	lea	(MusicList3).l,a1; см плейлист  акт2
	bra.s   PlayBGM_Cont

 

добавим после этой функции следующюю (проверку акт3):

 

CheckAct3:
	cmpi.b	#$2,($FFFFFE11).w; это акт 3?
	bne.s   PlayAct1;если нет, то играть музыку 1 акта PlayAct1
	lea	(MusicList4).l,a1; см плейлист акт3
	bra.s   PlayBGM_Cont

 

после этой функции добавляем следующую:

 

PlayAct1:
	lea	(MusicList).l,a1; см плейлист акт1

 

после этой функции мы добавляем это:

 

PlayBGM_Cont:
	move.b	(a1,d0.w),d0; add d0 to a1
	bsr.w	PlaySound; play music
	move.b	#$34,($FFFFD080).w; load title	card object

 

ну всё))) build.dat и открываем получившийся ром S1BUILT.bin

 

Радуемся, всё работает) но... если мы возьмём во 2ом или 3ем акте монитор который даёт сонику непобедимость, то когда мелодия кончится начнется мелодия акта 1) нехорошо)))

 

давайте исправим))

 

 

ищем Obj01_PlayMusic:

 

видим там:

 

Obj01_PlayMusic:
	lea	(MusicList2).l,a1
	move.b	(a1,d0.w),d0
	jsr	(PlaySound).l; play normal music

 

ну тут всё просто) мы просто скопируем всё, что с Level_PlayBgm: по PlayBGM_Cont: но назовём функции по другому)

и так) заменяем

 

Obj01_PlayMusic:
	lea	(MusicList2).l,a1
	move.b	(a1,d0.w),d0
	jsr	(PlaySound).l; play normal music

 

на:

 

Obj01_PlayMusic:
	cmpi.b	#$1,($FFFFFE11).w; это акт 2?
	bne.s  CheckAct32;если нет, то идём к проверке акт3? CheckAct3 переименован в CheckAct32
	lea	(MusicList3).l,a1; см плейлист  акт2
	bra.s   PlayBGM_Cont2; PlayBGM_Cont переименован в PlayBGM_Cont2

 

Вставим после этой функции это:

 

CheckAct32:
	cmpi.b	#$2,($FFFFFE11).w; это акт 3?
	bne.s   PlayAct12;если нет, то играть музыку 1 акта PlayAct1 переименован в PlayAct12
	lea	(MusicList4).l,a1; см плейлист акт3
	bra.s   PlayBGM_Cont2;PlayBGM_Cont переименован в PlayBGM_Cont2
PlayAct12:
	lea	(MusicList).l,a1; см плейлист акт1

PlayBGM_Cont2:
	move.b	(a1,d0.w),d0; add d0 to a1
	bsr.w	PlaySound; play music
	move.b	#$34,($FFFFD080).w; load title	card object

 

 

в PlayBGM_Cont2: мы видем

 

PlayBGM_Cont2:
	move.b	(a1,d0.w),d0; add d0 to a1
	bsr.w	PlaySound; play music
	move.b	#$34,($FFFFD080).w; load title	card object

 

заменим 2ую строчку на: move.b #0,($FFFFFE2D).w ; cancel invincibility

в итоге:

 

PlayBGM_Cont2:
	move.b	(a1,d0.w),d0; add d0 to a1
	move.b	#0,($FFFFFE2D).w; cancel invincibility
	jmp	PlaySound; play music

 

 

build.dat и проверяем ром)) радуемся всё работает идеально))

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

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


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

Ценный экземпляр тутора))) Респект, лови пять звёздочек =)

P.S. Для полного счастья поправь букву "е" в слове "видем" на "и".

Изменено пользователем ]lNEOl[

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


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

Молодец, Alexey, полезную темку создал! У меня как раз есть пара собственных туториалов =)

 

Туториал по build.bat

 

1. Если вы такой же ленивый человек, как и я, и не хотите после каждого компиля копировать файл s1built.bin из папки с дизасемблом в папку с РОМами, то можно заставить build.bat делать это за вас. Откройте build.bat в Блокноте, и добавьте в конец файла строчку:

copy s1built.bin [Путь к паке с РОМами]\s1built.bin

Примеры:

copy s1built.bin ..\ROMs\s1built.bin
copy s1built.bin C:\Program Files\Sega Emulator\ROMs\s1built.bin

Вы также можете находу переименовывать файл, для этого достаточно изменить "s1build.bin" в конце строчки на что-нибудь свое:

copy s1built.bin ..\ROMs\Sonic_1_High_Force_[RUS].bin

 

2. Иногда получается так, что build.bat выдает ошибку, но вы просто не успеваете ее прочитать, потому что окно сразу закрывается. Чтобы окно не закрывалось, откройте файл build.bat в Блокноте и добавьте в конец строчку:

@pause

 

 

Как добавить Jump Dash

 

ОК, я все-таки решился раскрыть свой код Jump Dash'а. Это как бы альфа-версия. Не бойтесь, вставить Jump Dash намного легче, чем Spin Dash.

 

Итак, идем к суброутине "Obj01_MdJump:" и добавляем после "bsr.w Sonic_LevelBound" строчку "bsr.w Sonic_Jump_Dash", получится вот так:

Obj01_MdJump:; XREF: Obj01_Modes
	bsr.w	Sonic_JumpHeight
	bsr.w	Sonic_ChgJumpDir
	bsr.w	Sonic_LevelBound
	bsr.w	Sonic_Jump_Dash; Ха! Вот наша строчка!
	jsr	  ObjectFall
	btst	 #6,$22(a0)
	beq.s		loc_12E5C
	subi.w   #$28,$12(a0)

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

 

Теперь напишем саму суброутину "Sonic_Jump_Dash". Вставим-ка ее после суброутины "Sonic_JumpHeight", для этого найдите строчку "; End of function Sonic_JumpHeight" - это конец суброутины. Сразу после нее вставьте код нашей новой суброутины:

Sonic_Jump_Dash:
	cmpi.b	#2,$1C(a0)	; Соник свернут в клубочек?
	bne.s	Sonic_Jump_Dash_Rts; если нет, уходим
	move.b	($FFFFF603).w,d0		   
	andi.b	#$70,d0; нажаты ли A,B или C?
	beq.w	Sonic_Jump_Dash_Rts; если нет, уходим
	move.w  #$BC,d0
	jsr	(PlaySound_Special).l
	move.w  #$900,$10(a0)	
	btst	#0,$22(a0)			  
	beq.s	 Sonic_Jump_Dash_Rts
	neg.w   $10(a0) 

Sonic_Jump_Dash_Rts:
	rts

 

Вот, собственно, всё. Правда, у этого кода есть недостаток - Jump Dash получается многоразовым, но думаю те, кто решил всерьез заняться АСМом, смогут его устранить (я уже могу, только вам не скажу =Ъ).

Ведь многоразовый Jump Dash - это же лучше да?

Изменено пользователем vladikcomper
  • Спасибо! 1

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


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

Вот чего не хватало хакерам - Русских туториалов 0_o ребята, отличные факи, теперь можно запросто делать вещи, о которых раньше только мечтали...

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


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

а как в есе добавлять обьекты?

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


Ссылка на сообщение
а как в есе добавлять обьекты?

ОМГ... Ну не полно ли издеваться над многострадальным ESE?

Никак. Можно только изменять тип и расположение уже существующих объектов.

А вообще давно пора уже перейти на дизасемблы и редактировать с SonED.

  • Лайк 1

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


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

а эта фигня НЕ ЗАПУСКАЕТСЯ И КАВЕРКАЕТ МОИ СЕЙВ СТЕЙТЫ!!!

 

а сплиты С2,С2Б,С3 есть?

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


Ссылка на сообщение
а эта фигня НЕ ЗАПУСКАЕТСЯ И КАВЕРКАЕТ МОИ СЕЙВ СТЕЙТЫ!!!

 

а сплиты С2,С2Б,С3 есть?

Бедный SonED!!!

Значит так:

http://info.sonicretro.org/Disassemblies - все существующие в мире дизасемблы Соника

http://info.sonicretro.org/SCHG_How-to:S1_...c_Level_Editing - как пользоваться SonED'ом

http://info.sonicretro.org/SCHG:SonED2_Manual - полный мануал по SonED'у.

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

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


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

Отличные новости! Теперь я открываю раздел про хакинг Сеговских игр на своем сайте, в котором буду размещать гиды на русском языке. Многие из них будут основаны на гидах с SonicRetro. Это будут не просто переводы, более простые и понятные гиды с необходимыми пометками и комментариями. Разумеется, с исправлением ошибок, которые встречаются в Ретровских гидах.

 

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

 

Основы ассемблера Motorola 68000

 

Вначале я планировал сделать перевод гида, но потом я решил написать свой гид, лишь основываясь на гиде с Соник Ретро. И получилось намного лучше и логичнее. Так же я довольно сильно дополнил свой гид сведениями об ассемблере и описал многие важные моменты, которые были упущены в Ретровском гиде.

 

http://vladikcomper.narod.ru/dump_sonic_view.htm?2

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

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


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

супер) bl>:D отлично написано)) успехов в написании остальных гидов))

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


Ссылка на сообщение
Основы ассемблера Motorola 68000

Awesome :haha:

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


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

Спасибо всем за добрые отзывы :haha:

Совсем скоро будут новые гиды :)

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


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

Я вот тут заметил, что во многих наших хаках не исправлен Spike Bug. Надо с этим бороться.

http://vladikcomper.narod.ru/dump_sonic_view.htm?5

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


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

решил ещё гид небольшой написать)

 

когда мы рисуем новый фон GHZ, то мы сталкиваемя с проблемой скроллинга, а именно:

1scs.jpg

 

скроллинг GHZ портит любой фон)

 

решается это очень просто)

открываем sonic1.asm

ищем строку loc_6384:

и видим там:

loc_6384:
	move.w	d3,d0
	neg.w	d0
	move.l	d0,(a1)+
	swap	d3
	add.l	d2,d3
	swap	d3
	dbf	d1,loc_6384
	rts	
; End of function Deform_GHZ

здесь нам понадобится просто удалить строки с функцией swap

 

в итоге получаем:

loc_6384:
	move.w	d3,d0
	neg.w	d0
	move.l	d0,(a1)+
	add.l	d2,d3
	dbf	d1,loc_6384
	rts
; End of function Deform_GHZ

 

build.dat, проверяем и: 2scl.jpg

 

ура) всё работает идеально)

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

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


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

ещё гид)

 

как исправить walk-jump bug

 

оригинальный гид: http://info.sonicretro.org/SCHG_How-to:Fix..._Bug_in_Sonic_1 (by Cinossu)

 

думаю все знают про этот глюк) подходим вплотную к камню с пружиной в GHZ2, и при прыжке игра использует анимацию ходьбы) очень неприятно)) ну и в Final Zone появляются некоторые проблемы из за этого бага)

 

давайте исправим)

 

открываем sonic1.asm и ищем строку loc_FB92:

 

видим:

 

loc_FB92:
	btst	#5,$22(a0)
	beq.s	loc_FBAC
	move.w	#1,$1C(a1); use walking animation

 

добавляем 2 строки после beq.s loc_FBAC

		cmp.b	#2,$1C(a1); check if in jumping/rolling animation
	beq.s	loc_FBA0

 

в итоге видим:

 

loc_FB92:
	btst	#5,$22(a0)
	beq.s	loc_FBAC
	cmp.b	#2,$1C(a1); check if in jumping/rolling animation
	beq.s	loc_FBA0
	move.w	#1,$1C(a1); use walking animation

 

ну и build.dat, проверяем, радуемся)

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


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

В моей коллекции гидов пополнение =)

 

Как добавить Jump Dash

Как исправить Walk-Jump Bug

 

Да, гид Jump Dash я уже выкладывал на форуме, на моем сайте немного исправленная версия.

Кстати, теперь в листингах присутствуют Tab-ы вместо пробелов, как и положено оформлять АСМ код.

 

ещё гид)

 

как исправить walk-jump bug

 

оригинальный гид: http://info.sonicretro.org/SCHG_How-to:Fix..._Bug_in_Sonic_1 (by Cinossu)

 

Ух-ты )) Я твой пост даже и не заметил. И не знал о его существовании, когда писал этот ))

Классно у нас гиды совпали.

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


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

угу)))

 

ну я думаю надо бы ещё пополнить коллекцию рус. гидов))

 

как расширить музыкальные слоты с $00 до $FF:

 

оригинальный гид: http://info.sonicretro.org/SCHG_How-to:Ext...lots_in_Sonic_1 (by Mikel)

 

открываем sonic1.asm

 

слоты с $00 по $7F:

 

ищем строку PlaySound:

 

видим:

 

PlaySound:
	move.b	d0,($FFFFF00A).w
	rts

 

заменяем на:

PlaySound:
	cmpi.b  #$7F,d0
	ble.s   ChkSounds00to7F
	jmp	 NormalSoundRequest
ChkSounds00to7F:
	cmpi.b  #$01,d0
	bge.s   LoadSlots00to7F
	jmp	 NormalSoundRequest
LoadSlots00to7F:
	add.b   #$80,d0; Add $80 to get slot to starts at $81			
	move.b  #$01,($FFFFFFFC).w; Move $01 to $FFFFFC to make sound driver to load the secound index
NormalSoundRequest:
	move.b	d0,($FFFFF00A).w
	rts

 

дальше ищем PlaySound_Special:

видим:

PlaySound_Special:
	move.b	d0,($FFFFF00B).w
	rts

 

заменяем на:

PlaySound_Special:
	cmpi.b  #$7F,d0
	ble.s   ChkSounds00to7F_Special
	jmp	 NormalSoundRequest_Special
ChkSounds00to7F_Special:

	cmpi.b  #$01,d0
	bge.s   LoadSlots00to7F_Special
	jmp	 NormalSoundRequest_Special
LoadSlots00to7F_Special:
	add.b   #$80,d0; Add $80 to get slot to starts at $81			
	move.b  #$01,($FFFFFFFC).w; Move $01 to $FFFFFC to make the sound driver to load the secound index
NormalSoundRequest_Special:
	move.b	d0,($FFFFF00B).w
	rts

 

далее ищем loc_7202C:

 

видим:

loc_7202C:
	jsr	sub_725CA(pc)
	movea.l	(off_719A0).l,a4
	subi.b	#$81,d7
	move.b	(a4,d7.w),$29(a6)
	movea.l	(Go_MusicIndex).l,a4
	lsl.w	#2,d7
	movea.l	(a4,d7.w),a4
	moveq	#0,d0
	move.w	(a4),d0
	add.l	a4,d0
	move.l	d0,$18(a6)
	move.b	5(a4),d0
	move.b	d0,$28(a6)
	tst.b	$2A(a6)
	beq.s	loc_72068
	move.b	$29(a6),d0

 

заменяем первые 5 строк функции (с jsr sub_725CA(pc) по movea.l (Go_MusicIndex).l,a4 на:

		jsr	sub_725CA(pc)
	movea.l	(off_719A0).l,a4
	subi.b	#$81,d7
	move.b	(a4,d7.w),$29(a6)
	movea.l	(Go_MusicIndex).l,a4
	cmpi.b  #$01,($FFFFFFFD).w
	bne.s   CheckSounds00to80
	movea.l	(Go_MusicIndexFF).l,a4
	jmp	 NormalIndexLoad
CheckSounds00to80:
	cmpi.b  #$01,($FFFFFFFC).w
	bne.s   NormalIndexLoad
	movea.l	(Go_MusicIndex00).l,a4		
NormalIndexLoad:
	clr.w   ($FFFFFFFC).w

 

далее ищем Go_MusicIndex:

видим:

Go_MusicIndex:	dc.l MusicIndex; XREF: Sound_81to9F

 

добавляем на следующей строке это:

Go_MusicIndex00:	dc.l MusicIndex00
Go_MusicIndexFF:	dc.l MusicIndexFF

 

Слоты с $E5 по$FF

 

ищем Sound_ChkValue:

 

видим:

Sound_ChkValue:; XREF: sub_71B4C
	moveq	#0,d7
	move.b	9(a6),d7
	beq.w	Sound_E4
	bpl.s	locret_71F8C
	move.b	#$80,9(a6); reset	music flag
	cmpi.b	#$9F,d7
	bls.w	Sound_81to9F; music	$81-$9F
	cmpi.b	#$A0,d7
	bcs.w	locret_71F8C
	cmpi.b	#$CF,d7
	bls.w	Sound_A0toCF; sound	$A0-$CF
	cmpi.b	#$D0,d7
	bcs.w	locret_71F8C
	cmpi.b	#$E0,d7
	bcs.w	Sound_D0toDF; sound	$D0-$DF
	cmpi.b	#$E4,d7
	bls.s	Sound_E0toE4; sound	$E0-$E4

locret_71F8C:
	rts

 

заменяем на:

Sound_ChkValue:; XREF: sub_71B4C
	moveq	#0,d7
	move.b	9(a6),d7
	beq.w	Sound_E4
	bpl.s	locret_71F8C
	move.b	#$80,9(a6); reset	music flag
	cmpi.b  #$01,($FFFFFFFC).w
	bne.s   Load81to9F
	jmp	 Sound_ChkValueFor00
Load81to9F:
	cmpi.b	#$9F,d7
	bls.w	Sound_81to9F; music	$81-$9F
ContinueSound_ChkValue:
	cmpi.b	#$A0,d7
	bcs.w	locret_71F8C
	cmpi.b	#$CF,d7
	bls.w	Sound_A0toCF; sound	$A0-$CF
	cmpi.b	#$D0,d7
	bcs.w	locret_71F8C
	cmpi.b	#$E0,d7
	bcs.w	Sound_D0toDF; sound	$D0-$DF
	cmpi.b	#$E4,d7
	bls.s	Sound_E0toE4; sound	$E0-$E4
	cmpi.b  #$FF,d7
	bls.w   Sound_E5toFF

locret_71F8C:
	rts

 

далее ищем Sound_81to9F:

 

видим:

Sound_81to9F:			; XREF: Sound_ChkValue
	cmpi.b	#$88,d7	; is "extra life" music	played?
	bne.s	loc_72024; if not, branch
	tst.b	$27(a6)
	bne.w	loc_721B6
	lea	$40(a6),a5
	moveq	#9,d0

 

и добавляем перед функцией Sound_81to9F:

Sound_ChkValueFor00:
	cmpi.b  #$FF,d7; $FF = Last slot for musics in index $00 - $7F ($FF = $7F)
	bls.w   Sound_81to9F
	rts

Sound_E5toFF:
	move.b  #$01,($FFFFFFFD).w
	sub.b   #$64,d7

 

переходим к импорту музыки)

 

в конце рома (перед строкой ; end of 'ROM')

и пишем названия музыкальных файлов по образцу:

MusicIndex00:
	dc.l	Music01; музыка для слота $01
	dc.l	Music02; музыка для слота $02
;и так далее до 7F слота

 

также делаем и с $E5-$FF слотами

 

MusicIndexFF:
	dc.l	MusicE5; музыка для слота $E5
	dc.l	MusicE6; музыка для слота $E6
;и так далее до слота $FF

 

 

после чего вставляем по образцу include функции для файлов

 

Music01:	incbin	sound\music01.bin
	even
Music02:	incbin	sound\music02.bin
	even
MusicE5:	incbin	sound\musicE5.bin
	even
MusicE6:	incbin	sound\musicE6.bin
	even
;и так далее

затем вставляем новую музыку в папку Sound с нашими новыми названиями)

 

 

ну вообщем то всё)

 

теперь дополнение

 

Sound Test с $00 по $FF

 

ищем loc_3550:

 

видим:

loc_3550:
	move.l	#$6C300003,($C00004).l; screen	position (sound	test)
	move.w	($FFFFFF84).w,d0
	addi.w	#$80,d0;замените это на #$00,d0
	move.b	d0,d2
	lsr.b	#4,d0
	bsr.w	LevSel_ChgSnd
	move.b	d2,d0
	bsr.w	LevSel_ChgSnd
	rts	
; End of function LevSelTextLoad

 

заменяем addi.w #$80,d0 на addi.w #$00,d0

 

далее идём к LevSel_SndTest:

видим:

LevSel_SndTest:			; XREF: LevSelControls
	cmpi.w	#$14,($FFFFFF82).w; is	item $14 selected?
	bne.s	LevSel_NoMove; if not, branch
	move.b	($FFFFF605).w,d1
	andi.b	#$C,d1	; is left/right	pressed?
	beq.s	LevSel_NoMove; if not, branch
	move.w	($FFFFFF84).w,d0
	btst	#2,d1	; is left pressed?
	beq.s	LevSel_Right; if not, branch
	subq.w	#1,d0	; subtract 1 from sound	test
	bcc.s	LevSel_Right
	moveq	#$4F,d0	; if sound test	moves below 0, set to $4F

LevSel_Right:
	btst	#3,d1	; is right pressed?
	beq.s	LevSel_Refresh2; if not, branch
	addq.w	#1,d0	; add 1	to sound test
	cmpi.w	#$50,d0
	bcs.s	LevSel_Refresh2
	moveq	#0,d0	; if sound test	moves above $4F, set to	0

LevSel_Refresh2:
	move.w	d0,($FFFFFF84).w; set sound test number
	bsr.w	LevSelTextLoad; refresh text

LevSel_NoMove:
	rts	
; End of function LevSelControls

 

заменяем на:

LevSel_SndTest:			; XREF: LevSelControls
	cmpi.w	#$14,($FFFFFF82).w; is	item $14 selected?
	bne.s	LevSel_NoMove; if not, branch
	move.b	($FFFFF605).w,d1
	andi.b	#$C,d1	; is left/right	pressed?
	beq.s	LevSel_NoMove; if not, branch
	move.w	($FFFFFF84).w,d0
	btst	#2,d1	; is left pressed?
	beq.s	LevSel_Right; if not, branch
	subq.w	#1,d0	; subtract 1 from sound	test
	bcc.s	LevSel_Right
	moveq	#$00,d0	; if sound test	moves below 0, set to $4F

LevSel_Right:
	btst	#3,d1	; is right pressed?
	beq.s	LevSel_Refresh2; if not, branch
	addq.w	#1,d0	; add 1	to sound test
	cmpi.w	#$FF,d0
	bcs.s	LevSel_Refresh2
	moveq	#0,d0	; if sound test	moves above $4F, set to	0

LevSel_Refresh2:
	move.w	d0,($FFFFFF84).w; set sound test number
	bsr.w	LevSelTextLoad; refresh text

LevSel_NoMove:
	rts	
; End of function LevSelControls

 

ну и как обычно build.dat, проверяем, радуемся))

 

вот только хде вы найдете 154 новых мелодии?)) ^_^

 

 

переведено и исправлено by Alexey383

 

 

PS: просьба модераторам)) почистите тему от оффтопа на 1ой стр))

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


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

Я вот недавно помучал исходник соничка и написал альфа-версию кода для добавления новой способности - Water Skimming.

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

 

Так что перед вами абсолютно уникальный гид, который доступен только русскому хакерскому комьюнити,

Как добавить Water Skimming

 

 

UPDATE: Внимание! В гид только что было внесено изменение, исправляющее баг, который не позволял совершать прыжок при отрицательном X-Velocity.

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


Ссылка на сообщение
Так что перед вами абсолютно уникальный гид, который доступен только русскому хакерскому комьюнити,

Как добавить Water Skimming

 

Ого! Интересно!! Не терпится проверить. Но проверить не могу - я поставил Windows 7 x64 и все дизассемблы перестали работать. Некоторые при запуске build.bat ругаются на отсутствие совместимости с 64-разрядными версиями Windows, некоторые молчат, но дают на выходе 1 КБ.

 

P.S. Может, напишете гид, как сделать, чтобы дизассемблы работали на x64? e8[

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


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

ха) все гораздо проще) я открыл свойства build.bat и поставил совместимость с Windows XP. И все компилится!!!

 

/last offtop

 

ой, я нуб) не туда посмотрел. не работает, придется через виртуалку!

Изменено пользователем MAXXX-309

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


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

Извените, но у меня пара вопросов по хакингу StH...

1. Как заменить иконку жизней?

2. Как изменять все надписи Sonic в игре?

3. Как изменить персонажа на заставке? (Я про титульник). И в конце?

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


Ссылка на сообщение
Извените, но у меня пара вопросов по хакингу StH...

1. Как заменить иконку жизней?

2. Как изменять все надписи Sonic в игре?

3. Как изменить персонажа на заставке? (Я про титульник). И в конце?

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

Для этого тебе понадобится редактор тайлов, например Fatilety, и, разумеется, дизасембл. Только учти, что большая часть арта в Соника сжата, но в нормальных дизасемблах есть файл "decompress.bat", который его разжимает. Требуемый тебе арт находится в папке artnem в сжатом виде, создай папку artnem_u, если ее еще нет и запусти "decompress.bat". И в папке artnem_u появятся разжатые файлы.

Я не особо помню, в каких файлах что находится, вот что могу назвать по памяти: livecnt.bin, monitors.bin, hud.bin, ttlcards.bin. Открой их в редакторе, отредактируй, после чего запусти "compress.bat" и файлы снова сожмутся.

Н-да, страшноватые по объему инструкции, но как только ты во все разберешься, все станет легко и просто ;)

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


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

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

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


Ссылка на сообщение
чёт вы не в тему)) есть же тема "Ваши хаки")) в ней бы лучше спрашивать))

Да уже без разницы. Главное, что кто-то еще интересуется хакингом. Эх, что же в России хакинг старых Соников не пошел ;(

 

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

S1 Hacking Studio, как часто я говорю это слово. ^^

Можно так же использовать дизасембл, но тебе же нужна програма, так?

http://forum.sonic-world.ru/index.php?showtopic=14207

  • Лол 1

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


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

Мы ждали его и вот он здесь!

 

Как добавить Spin Dash

 

Опять же, этот гид переработан, реорганизован и исправлен. Также сокращен и облегчен, некоторое, например рипинг спрайта Спин Дэша из Соник 2 я уже сделал за вас и подготовил файл для скачивания. Так что радуйтесь, у нас гид круче чем на Соник Ретро ^^

Это только первая часть, ага.

 

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

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


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

Теперь помимо гидов на Первого Соника, у меня есть гиды на Второго!

 

Как добавить Jump Dash в Sonic 2

Причем этот гид пока в единственном экземпляре, ничего подобного нигде еще нет.

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

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


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

Подскажите плзз что делать ???

В Soniksprite хочу подкрасить соника а у меня вместо нормального ежа выходит это (причем в Sonic the hedgehog 1,2,3) что делать???

post-6115-1264451562_thumb.jpg

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


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

В моей коллеции гидов очередное пополнение! :)

Главное на этот раз событие - обновился мой гид по добавлению Jump Dash в Sonic 1.

Новая версия Jump Dash теперь не может быть многократно использована, в отличие от гида Selbi, вместо байта, флаг JD занимает всего один бит (в последнем бите байта $22 объекта Obj01). К тому же теперь скорость способности будет разной в зависимости от состояний Соника: нормальное, в воде, в Speed Shoes и в воде со Speed Shoes.

Помимо гида о JD, появился гид по исправлению звука "SEGA" и гид для Соник 2 по исправленю деформации EHZ.

Как добавить Jump Dash

Как исправить звук «SEGA»

Как исправить баг деформации EHZ

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


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

Я только что закончил один из самых трудоемких и сложных переводов, перевод гида: http://info.sonicretro.org/SCHG:Sonic_the_...hog/RAM_Editing

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

Для удобства, гид был разделен на 2 части:

 

RAM-адреса

Структуры объектов

 

Оказалось, в гиде есть некоторые неточности, их я исправил в ходе проверки фактов. Также гид был существенно дополнен: многие вещи были расписаны подробнее, некоторые объяснены другими словами, потому что гид пестрит непереводимыми на русский язык оборотами, например: Sonic's "Ride B" flag, если не знать что он делает, низачто нельзя догадаться что это - флаг, переключающий приоритет спрайта Соника.

 

EDIT: GRAMMAR

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

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


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

Ну что-ж, я наконец-то решился написать гид по добавлению JumpDash в Sonic 3 & Knuckles. t^_^

 

Итак:

 

JumpDash in Sonic 3 & Knuckles

 

1. Открываем код и идем к loc_119F6:

loc_119F6:; CODE XREF: sub_118BC+124j
; sub_118BC+12Aj ...
	btst			#0,$2B(a0)
	bne.s			locret_11A14
	move.b	#1,($FFFFCD08).w
	move.b	#1,$2F(a0)
	move.w	#$42,d0
	jmp			(Play_Sound_2).l

 

Как видите, эта саброутина вызывает InstaShield (тот, что в прыжке у Соника).

Ее-то нам и нужно заменить на код JumpDash-а.

 

2. Выделите эту саброутину и замените ее на мой код JumpDash-а:

JumpDash:		; JumpDash Code for S3K - (C) 2010 Scorik MaXXXim
	btst			#0,$2B(a0); can Sonic execute JumpDash now?
	bne.s 	locret_11A14; if not, branch
	move.w	#$900,d0; move JumpDash speed value to d0
	btst			#0,$2A(a0); is Sonic facing left?
	beq.s			JumpDash_Execute; if not, branch
	neg.w	d0; make JumpDash to the left

JumpDash_Execute:
	move.w	d0,$18(a0); execute JumpDash with d0 speed
	move.w	d0,$1C(a0); show rolling animation with d0 speed
	move.w	#0,$1A(a0); stop moving upward
	move.b	#1,$2F(a0); set JumpDash flag
	move.w	#$B6,d0; move JumpDash sound value to d0
	jmp		(Play_Sound_2).l; play d0 sound

 

3. Есть! Но теперь надо заменить ссылки на нее. В loc_119D2: замените:

 

bcc.s loc_119E8

 

на

bcc.s JumpDash

 

Потом:

 

bcs.s loc_119F6

 

на

 

bcs.s JumpDash

 

И еще:

 

bne.s loc_119F6

 

на

 

bne.s JumpDash

 

Теперь в loc_119E8: замените:

 

bcs.s loc_119F6

 

на

bcs.s JumpDash

 

4. Чтобы хак корректно скомпилировался, исправим паддинг. Идем в MusicPadding: и видим там кучу байтов $FF.

Выделяем их и заменяем на

 

cnop 0,$E4104

 

Получилось:

 

MusicPadding: cnop 0,$E4104

 

4. Теперь JumpDash работает! Есть, правда, некоторые баги. Например, во время бонуса бессмертности Соник не может делать JumpDash. Также, после появления Наклза в начале AIZ, уровень начнется, а музыка Накса продолжит играть. Но я надеюсь, что вы обладаете элементарными знаниями ассемблера и сможете "допилить" этот код t:]

Я уже допилил, вот готовый хак.

Изменено пользователем MAXXX-309

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

×