Перейти к содержимому
Форум sonic-world.ru
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

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


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

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

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


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

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

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


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

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

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

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

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


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

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

 

а сплиты С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[

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


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

оффтоп/

ну я насколько знаю в 7ке есть эмулятор хр)) virtualPC с хр вроде)) ну а если нет, ставь WMware, отличный эмулятор железки)) и ставь на него хрюню))

/оффтоп

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


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

ха) все гораздо проще) я открыл свойства 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 дайте пожалуйста сылку на на программу которая из рома всё вытаскивает, а после изменений всё опять превращает в ром.

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


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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

×