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

DelayHacks

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

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

  • Посещение

Сообщения, опубликованные пользователем DelayHacks


  1. В 06.05.2019в19:47, Demian Burunduk сказал:

    Слушай, я вот скачал, и у меня вопрос: как изменить передний или задний план уровня? Или хотя бы как изменить название уровня?

    Передний и задний план через SonLVL (раздел "Утилиты"), а названия уровней - Sonic 2 text code generator и "Исправление бага" (это всё в разделе "Тексты")

    0

  2. Здесь я собрал и буду собирать свои гайды по хакингу.

    1. Как добавить Jump Dash в S3K?

    Ищем роутину "Sonic_InstaShield" и заменяем её на это:

    Цитата

    Sonic_InstaShield:    ; Jumpdash code for sonic, written by DelayHacks
            btst    #Status_Shield,status_secondary(a0)    ; does Sonic have an S2 shield (The Elementals were already filtered out at this point)?
            bne.s    locret_11A14                ; if yes, branch
            move.b    #1,double_jump_flag(a0)
            btst    #Status_Facing,status(a0)        ; is Sonic facing left?
            bne.w    Sonic_JumpdashLeft                ; if yes, branch
            move.b    #0,y_vel(a0) ; Clear y velocity
            move.w    #3000,x_vel(a0) ; Set x velocity
            move.w    #$47,d0            ; play Jumpdash sound
            jmp    (Play_Sound_2).l
    Sonic_JumpdashLeft:
            move.b    #0,y_vel(a0) ; Clear y velocity
            move.w    #-3000,x_vel(a0) ; Set x velocity
            move.w    #$47,d0            ; play Jumpdash sound
            jmp    (Play_Sound_2).l

    2. Как добавить камеру как в Sonic CD в S1?

    (Если вы используете GitHub дизассембл, то вам сюда.)

    Всем привет, с вами я.

    Приступим...

    Сперва перед "end of rom" вставляем эту строчку

    Цитата

            include    "_inc\Sonic_PanCamera.asm"    ; ++add this++

    Потом меняем роутину "Obj01_Control" на эту:

    Цитата

    Obj01_Control:                ; XREF: Obj01_Index
            bsr.s   Jmpto_Sonic_PanCamera    ; ++add this++
            tst.w    ($FFFFFFFA).w    ; is debug cheat enabled?
            beq.s    loc_12C58    ; if not, branch
            btst    #iC,(Joypad|Press)    ; is button C pressed?
            beq.s    loc_12C58        ; if not, branch
            move.w    #1,($FFFFFE08).w    ; change Sonic    into a ring/item
            clr.b    ($FFFFF7CC).w
            rts    
    Jmpto_Sonic_PanCamera:
            jmp Sonic_PanCamera
            bsr Obj01_Control

    Потом создаём новый файл в папке "_inc" под названием "Sonic_PanCamera.asm" и вставляем туда этот код:

    Цитата

    ; ---------------------------------------------------------------------------
    ; Subroutine to    horizontally pan the camera view ahead of the player
    ; (Ported from the US version of Sonic CD's "R11A__.MMD" by Nat The Porcupine, ported to Hivebrain disasm by DelayHacks)
    ; ---------------------------------------------------------------------------

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

    Sonic_PanCamera:
            move.w    ($FFFFF7A0).w,d1        ; get the current camera pan value
            move.w    $14(a0),d0        ; get sonic's inertia
            bpl.s    Sonic_PanCamera_abs_inertia            ; if sonic's inertia is positive, branch ahead
            neg.w    d0                        ; otherwise, we negate it to get the absolute value

    Sonic_PanCamera_abs_inertia:

    ; These lines were intended to prevent the Camera from panning while
    ; going up the very first giant ramp in Palmtree Panic Zone Act 1.
    ; However, given that no such object exists in Sonic 1, I just went
    ; ahead and commented these out.
    ;        btst    #1,$2C(a0)                ; is sonic going up a giant ramp in PPZ?
    ;        beq.s    Sonic_PanCamera_skip                    ; if not, branch
    ;        cmpi.w    #$1B00,($FFFFD008).w            ; is sonic's x position lower than $1B00?
    ;        bcs.s    Sonic_PanCamera_reset_pan                ; if so, branch

    ; These lines aren't part of the original routine; I added them myself.
    ; If you've ported the Spin Dash, uncomment the following lines of code
    ; to allow the camera to pan ahead while charging the Spin Dash:
            tst.b    $39(a0)                    ; is sonic charging up a spin dash?
            beq.s    Sonic_PanCamera_skip                    ; if not, branch
            btst    #0,$22(a0)            ; check the direction that sonic is facing
            bne.s    Sonic_PanCamera_pan_right                ; if he's facing right, pan the camera to the right
            bra.s    Sonic_PanCamera_pan_left                ; otherwise, pan the camera to the left

    Sonic_PanCamera_skip:
            cmpi.w    #$600,d0                ; is sonic's inertia greater than $600
            bcs.s    Sonic_PanCamera_reset_pan                ; if not, recenter the screen (if needed)
            tst.w    $14(a0)            ; otherwise, check the direction of inertia (by subtracting it from 0)
            bpl.s    Sonic_PanCamera_pan_left                ; if the result was positive, then inertia was negative, so we pan the screen left

    Sonic_PanCamera_pan_right:
            addq.w    #2,d1                    ; add 2 to the pan value
            cmpi.w    #224,d1                    ; is the pan value greater than 224 pixels?
            bcs.s    Sonic_PanCamera_update_pan                ; if not, branch
            move.w    #224,d1                    ; otherwise, cap the value at the maximum of 224 pixels
            bra.s    Sonic_PanCamera_update_pan                ; branch
    ; ---------------------------------------------------------------------------

    Sonic_PanCamera_pan_left:
            subq.w    #2,d1                    ; subtract 2 from the pan value
            cmpi.w    #96,d1                    ; is the pan value less than 96 pixels?
            bcc.s    Sonic_PanCamera_update_pan                ; if not, branch
            move.w    #96,d1                    ; otherwise, cap the value at the minimum of 96 pixels
            bra.s    Sonic_PanCamera_update_pan                ; branch
    ; ---------------------------------------------------------------------------

    Sonic_PanCamera_reset_pan:
            cmpi.w    #160,d1                    ; is the pan value 160 pixels?
            beq.s    Sonic_PanCamera_update_pan                ; if so, branch
            bcc.s    Sonic_PanCamera_reset_left                ; otherwise, branch if it greater than 160
         
    Sonic_PanCamera_reset_right:
            addq.w    #2,d1                    ; add 2 to the pan value
            bra.s    Sonic_PanCamera_update_pan                ; branch
    ; ---------------------------------------------------------------------------

    Sonic_PanCamera_reset_left:
            subq.w    #2,d1                    ; subtract 2 from the pan value

    Sonic_PanCamera_update_pan:
            move.w    d1,($FFFFF7A0).w        ; update the camera pan value
            rts                                ; return
         
    ; End of function Sonic_PanCamera

    Теперь ищем роутину "ScrollHoriz2" и заменяем всё начиная c "ScrollHoriz2:" до "bra.s    loc_65CC" (влючительно) на это:

    Цитата

    ScrollHoriz2:
            move.w    ($FFFFD008).w,d0
            sub.w    ($FFFFF700).w,d0 ; Sonic's distance from left edge of screen
            sub.w    ($FFFFF7A0).w,d0    ; Horizontal camera pan value
            beq.s    SH_ProperlyFramed    ; if zero, branch
            bcs.s    SH_BehindMid    ; if less than, branch
            bra.s    SH_AheadOfMid    ; branch
    ; ===========================================================================

    SH_ProperlyFramed:
            clr.w    ($FFFFF73A).w
            rts 
    ; ===========================================================================

    SH_AheadOfMid:
            cmpi.w    #16,d0        ; is Sonic within 16px of middle area?
            blt.s    SH_Ahead16    ; if yes, branch
            move.w    #16,d0        ; set to 16 if greater

    SH_Ahead16:
            add.w    ($FFFFF700).w,d0
            cmp.w    ($FFFFF72A).w,d0
            blt.s    SH_SetScreen
            move.w    ($FFFFF72A).w,d0

    SH_SetScreen:
            move.w    d0,d1
            sub.w    ($FFFFF700).w,d1
            asl.w    #8,d1
            move.w    d0,($FFFFF700).w ; set new screen position
            move.w    d1,($FFFFF73A).w ; set distance for screen movement
            rts

    ; ===========================================================================

    SH_BehindMid:
            cmpi.w    #-16,d0        ; is Sonic within 16px of middle area?
            bge.s    SH_Behind16    ; if no, branch
            move.w    #-16,d0        ; set to -16 if less

    SH_Behind16:
            add.w    ($FFFFF700).w,d0
            cmp.w    ($FFFFF728).w,d0
            bgt.s    SH_SetScreen
            move.w    ($FFFFF728).w,d0
            bra.s    SH_SetScreen
          
    ; End of function MoveScreenHoriz

    ; ===========================================================================
            tst.w    d0
            bpl.s    loc_6610
            move.w    #$FFFE,d0
            bra.s    SH_Behind16
    ; ===========================================================================

    loc_6610:
            move.w    #2,d0
            bra.s    SH_AheadOfMid

    Далее ищем роутину "LevelSizeLoad" и перед бранчем в конце вставляем вот эту строчку:

    Цитата

            move.w  #160,($FFFFF7A0).w    ; reset the horizontal camera pan value to 160 pixels

    3. Как добавить Spinboost (способность из Sonic Advance) в S3K?

    Сперва добавляем эту роутину после строчки "; End of function Player_Spindash":

    Цитата

    Sonic_Spinboost: ; Sonic Advance feature, code by DelayHacks, original code from STHOSP
            move.b    ($FFFFF603).w,d0    ; read controller
            andi.b    #$10,d0                ; pressing B?
            beq.w    Sonic_SpinboostRts            ; if not, return
            addq.l    #4,sp                ; increment stack ptr
            move.b    #1,$3D(a0) ;Set Spindash flag
            move.w    #0,$3E(a0)            ; set charge count to 0
    Sonic_SpinboostRts:
            rts

    Далее ищем роутину "Sonic_MdNormal:" и добавляем эту строчку в начале:

    Цитата

            bsr.w    Sonic_Spinboost

    4. Как добавить экран опций (из S2) в S1?

    Сперва скачиваем этот архив,

    Распаковываем файлы и папки из него в ваш дизассембл.

    После чего добавляем эту строчку в самом начале кода:

    Цитата

            include "s2_constants.asm"

    Теперь добавляем эти строчки перед роутиной "LevelSelect":

    Цитата

    MenuScreen:
        include "s2_beginning.asm"
    ; ===========================================================================
    ; ---------------------------------------------------------------------------
    ; Sonic 2 Menu Option
    ; ---------------------------------------------------------------------------
        include "s2_option.asm"
    ; ===========================================================================
        include "s2_end.asm"
    ; end of function MenuScreen
    ; ===========================================================================

    Осталось только исправить баг, ищем роутину "Obj37_MakeRings" и нужно заменить эту строчку:

    Цитата

            bsr.w    CalcSine

    На эту:

    Цитата

            jsr   CalcSine

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

    Заходим в "_inc/Pallet Pointers.asm" и вставляем эти строчки в конце:

    Цитата

        dc.l Menu_Palette; pallet address
        dc.w $FB00    ; RAM address
        dc.w $1F    ; (pallet length / 2) - 1

    Сейчас вы должны придумать как открыть экран опций...

    Вы можете использовать такой вариант:

    Ищем роутину "loc_3230" и в начале добавляем эти две строчки:

    Цитата

            tpress    B,(Joypad)        ; is B button pressed?
            bhi    MenuScreenOpts    ; if yes, branch to options screen

    Чтобы изменить тексты, ищите эти строчки в файле "_inc\s2_option.asm":

    Цитата

    TextOptScr_PlayerSelect:    dc.b    $10,_st,__,_P,_L,_A,_Y,_E,_R,__,_S,_E,_L,_E,_C,_T,__,_st
    TextOptScr_Sonic:            dc.b    $E,__,__,__,__,_S,_O,_N,_I,_C,__,__,__,__,__,__
    TextOptScr_Miles:            dc.b    $E,__,__,__,__,_M,_I,_L,_E,_S,__,__,__,__,__,__
    TextOptScr_Tails:            dc.b    $E,__,__,__,__,_T,_A,_I,_L,_S,__,__,__,__,__,__
    TextOptScr_Knuckles:        dc.b    $E,__,__,__,_K,_N,_U,_C,_K,_L,_E,_S,__,__,__,__
    TextOptScr_VsModeItems:        dc.b    $10,_st,__,__,_S,_O,_U,_N,_D,_T,_R,_A,_C,_K,__,__,__,_st
    TextOptScr_AllKindsItems:    dc.b    $E,__,__,_H,_Y,_P,_E,_R,_D,_R,_I,_V,_E,__,__,__
    TextOptScr_TeleportOnly:    dc.b    $E,__,__,__,_O,_R,_I,_G,_I,_N,_A,_L,__,__,__,__
    TextOptScr_SoundTest:        dc.b    $10,_st,__,__,_S,_O,_U,_N,_D,__,_T,_E,_S,_T,__,__,__,_st
    TextOptScr_0:                dc.b    $10,__,__,__,__,__,__,__,_0,__,__,__,__,__,__,__,__,__

    (Надписи Soundtrack, hyperdrive, original были добавлены мной)

    Чтобы изменить кол-во вариантов ищите эти строчки:

    Цитата

    OptionScreen_Choices:
            dc.l (3-1)<<24|($FFFF8A&$FFFFFF)
            dc.l (2-1)<<24|($FFFFBE&$FFFFFF)
            dc.l ($FF)<<24|($FFFF84&$FFFFFF)

    Чтобы добавить варианты, вы должны сперва добавить для них текст, потом добавить его сюда:

    Цитата

    off_92D2:
            dc.l TextOptScr_Sonic
            dc.l TextOptScr_Tails
            dc.l TextOptScr_Knuckles
    off_92DE:
            dc.l TextOptScr_Sonic
            dc.l TextOptScr_Miles
            dc.l TextOptScr_Knuckles
    off_92EA:
            dc.l TextOptScr_AllKindsItems
            dc.l TextOptScr_TeleportOnly
    off_92F2:
            dc.l TextOptScr_0

    (off_92D2 - это player select, off_92DE - это player select, только с консолью японии, off_92EA - это "soundtrack" или же вторая опция)

    Адресы в RAM:

    Выбор персонажа - $FFFFFF8B

    "Soundtrack" или же вторая опция - $FFFFFFBF

     

    Вот все мои гайды, пользуйтесь.

    3

  3. В 02.08.2017в00:44, Elving сказал:

    Захотелось изобразить бумовского Тейлза в супер-форме. Пусть это и полнейший неканон, но мне просто было интересно узнать, что в итоге получится =)

    Скрытое содержимое

     

    Ларко, Бенгальский Лис, Kyubi the Fox, Kouzvay, Lonic the Hedgehog, Kaoma777, Exception, Post, спасибо за плюсы!

    Можно для аватарки возьму?

    0

  4. (Надеюсь тут дизлайков не будет)

    (не кидайте в меня тапки, за то что я спиз*ил название, если хотите, могу поменять)

    Привет всем, я представляю вам мою программу...

    Sonic 2 Hacking Studio

    Возможности:

    Изменение музыки

    Изменение уровней (через SonLVL)

    Изменение текстов

    Выбор между звуковыми драйверами

    Изменение названия хака

    Jumpdash

    Удаление Speed Cap

    Проигрывать SMPSок первого соника

    Также имеется пак музык

    И так далее...

    Другое:

    Нужно выбрать расположение программы вот такое: "C:\S2HS" или "D:\S2HS" (чтобы багов в программе не было),

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

    Скриншоты и сама программа:

    bandicam 2018-03-28 21-33-55-997.png

    bandicam 2018-03-28 21-33-49-049.png

    bandicam 2018-03-28 21-33-51-279.png

    bandicam 2018-03-28 21-33-52-620.png

    bandicam 2018-03-28 21-33-54-488.png

    https://yadi.sk/d/BHebdcAG3Trv4F - дополнительный файл (обязательно)

    setup.exe - установщик

    1

×