Sonic 4 Episode 1

Discussion in 'Discussion and Q&A Archive' started by USSRSonic, Jan 10, 2016.

  1. USSRSonic

    USSRSonic Newcomer In Limbo

    Joined:
    Jan 10, 2016
    Messages:
    11
    Location:
    Russia
    How make a seven emeralds in Sonic 1
    How import Carnival Zone Boss to Sonic 1
    Please help to me !
     
  2. darkspire

    darkspire Newcomer In Limbo

    Joined:
    Nov 8, 2014
    Messages:
    23
    Location:
    sydney
    don't you mean casino night zone's boss (the claw UFO)
     
  3. USSRSonic

    USSRSonic Newcomer In Limbo

    Joined:
    Jan 10, 2016
    Messages:
    11
    Location:
    Russia
  4. darkspire

    darkspire Newcomer In Limbo

    Joined:
    Nov 8, 2014
    Messages:
    23
    Location:
    sydney
    Try looking around SSRG and SONIC RETRO for that information. i am still learning how to code.
     
  5. USSRSonic

    USSRSonic Newcomer In Limbo

    Joined:
    Jan 10, 2016
    Messages:
    11
    Location:
    Russia
    but how about How make a seven emeralds in Sonic 1
     
  6. D.A. Garden

    D.A. Garden Sonic CD's Sound Test Member

    Joined:
    Aug 6, 2009
    Messages:
    582
    Location:
    England
    OK, so a few things seeing as you are new:

    1) Questions like this probably don't need their own thread and could be put in the Basic Questions and Answers Thread, here: http://sonicresearch.org/community/index.php?threads/basic-questions-and-answers-thread.1155

    2) People on this forum will gladly help you, but you have to help yourself first. Have you attempted to do these things yourself first? If so, please show us what went right/wrong, so we can help you. If you haven't, don't expect people to do all of the work for you.

    3) I'd like to ask you to read the rules, if you haven't already: http://sonicresearch.org/community/index.php?help/terms

    4) You only have 20 trial posts. I'd recommend you use them carefully. There's no guarantee you'll become a member after you've used them all.
     
    Last edited: Jan 10, 2016
  7. MarkeyJester

    MarkeyJester ♡ ! Member

    Joined:
    Jun 27, 2009
    Messages:
    2,867
    In the source code, you will find several instances of:
    Code:
    		cmpi.b	#6,($FFFFFE57).w
    6 is obviously the number of emeralds, what you will need to do, is change all of them to 7. There is also a list stored at $FFFFFE58, interestingly enough it has space for 8 emeralds if necessary, I recall however that the last two bytes contradicts with the platform synchronisation values, you will need to account for that.

    Inside "_inc\Special stage layout pointers.asm" you will need a 7th pointer for your 7th special stage. And you'll need to make and include your new special stage layout here:
    Code:
    ; ---------------------------------------------------------------------------
    ; Special layouts
    ; ---------------------------------------------------------------------------
    SS_1:		incbin	sslayout\1.bin
    		even
    SS_2:		incbin	sslayout\2.bin
    		even
    SS_3:		incbin	sslayout\3.bin
    		even
    SS_4:		incbin	sslayout\4.bin
    		even
    SS_5:		incbin	sslayout\5.bin
    		even
    SS_6:		incbin	sslayout\6.bin
    		even
     
    Pacca, LuigiXHero and USSRSonic like this.
  8. Spanner

    Spanner The Tool Member

    Joined:
    Aug 9, 2007
    Messages:
    2,570
    No more one word posts in the future.
     
  9. USSRSonic

    USSRSonic Newcomer In Limbo

    Joined:
    Jan 10, 2016
    Messages:
    11
    Location:
    Russia
    th
     
  10. USSRSonic

    USSRSonic Newcomer In Limbo

    Joined:
    Jan 10, 2016
    Messages:
    11
    Location:
    Russia
  11. TheStoneBanana

    TheStoneBanana banana Member

    Joined:
    Nov 27, 2013
    Messages:
    602
    Location:
    The Milky Way Galaxy
    Why is this topic called Sonic 4: Episode 1 when it has absolutely nothing to do with it...?
    If it's your hack's name, it's not very original. There must be, like, 5 billion hacks with the name Sonic 4.
     
    Pacca, Clownacy and Devon like this.
  12. warr1or2

    warr1or2 I AM CLG Member

    Joined:
    Apr 7, 2008
    Messages:
    417
    Location:
    Town Creek, AL
    Perhaps grabbing code from a sonic 2 disassembly & converting to sonic 1 (changing + to whatever & branching to it. ++ is skipping one
    Example
    Code:
    Routine:
     Cmpi.b #1, ($FFFFFED0)
     BEQ loc1 (was +)
     Cmpi.b #2, ($FFFFFED0)
     Beq loc2 (was ++)
    loc4:
    move.b #3,($FFFFFFFE)
    Cmpi.b #3,($FFFFFED0)
    BEQ loc4 (was -)
    
    Loc1:
    Move.b #2,($FFFFFFFE)
    CMPI.B #4,($FFFFFED0)
    BEQ whatever (go back twice)
    
    You get it
    For art conversion use SonMapEd... Gives me an idea for my Sonic 2 in Sonic 1 hack
     
    USSRSonic likes this.
  13. rika_chou

    rika_chou Adopt Member

    Joined:
    Aug 11, 2007
    Messages:
    689
    Sounds like he's trying to remake S4:E1 in a Sonic 1 hack.
     
  14. USSRSonic

    USSRSonic Newcomer In Limbo

    Joined:
    Jan 10, 2016
    Messages:
    11
    Location:
    Russia
    Look to the graphicks
     

    Attached Files:

  15. USSRSonic

    USSRSonic Newcomer In Limbo

    Joined:
    Jan 10, 2016
    Messages:
    11
    Location:
    Russia
    Can you help with cp[ining code and paste to sonic 1
     
  16. darkspire

    darkspire Newcomer In Limbo

    Joined:
    Nov 8, 2014
    Messages:
    23
    Location:
    sydney
    you would be better off adding it to S1 yourself. just have ago and experiment. thats what hacking is all about
     
    warr1or2 likes this.
  17. warr1or2

    warr1or2 I AM CLG Member

    Joined:
    Apr 7, 2008
    Messages:
    417
    Location:
    Town Creek, AL
    Honestly, you wouldn't learn anything if I (or someone else) does it for you. I gave you a hint on porting from S2 to S1. I taught myself how to do that. Just remember + is next loc_ and ++ is the one after. So far I haven't seen - and -- in S2 disassembly so you should be good.
     
  18. USSRSonic

    USSRSonic Newcomer In Limbo

    Joined:
    Jan 10, 2016
    Messages:
    11
    Location:
    Russia
    Obj51:
    moveq #0,d0
    move.b objoff_A(a0),d0
    move.w off_318FE(pc,d0.w),d1
    jmp off_318FE(pc,d1.w)
    ; ===========================================================================
    off_318FE:
    dc.w loc_31904-off_318FE
    dc.w loc_31A04-off_318FE; 1
    dc.w loc_31F24-off_318FE; 2
    ; ===========================================================================

    loc_31904:
    move.l #Obj51_MapUnc_320EA,mappings(a0)
    move.w #$3A7,art_tile(a0)
    ori.b #4,render_flags(a0)
    move.b #3,priority(a0)
    move.w #$2A46,x_pos(a0)
    move.w #$654,y_pos(a0)
    move.b #0,objoff_B(a0)
    move.b #$20,objoff_E(a0)
    move.b #$80,objoff_14(a0)
    addq.b #2,objoff_A(a0)
    move.b #0,angle(a0)
    bset #6,render_flags(a0)
    move.b #4,objoff_F(a0)
    move.b #$F,collision_flags(a0)
    move.b #8,objoff_32(a0)
    move.w x_pos(a0),($FFFFF750).w
    move.w y_pos(a0),($FFFFF754).w
    move.w x_pos(a0),x_vel(a0)
    move.w y_pos(a0),y_vel(a0)
    move.b #5,objoff_15(a0)
    move.w x_pos(a0),y_radius(a0)
    move.w y_pos(a0),priority(a0)
    move.b #1,anim_frame(a0)
    move.w x_pos(a0),anim(a0)
    move.w y_pos(a0),anim_frame_duration(a0)
    move.b #6,collision_property(a0)
    move.w x_pos(a0),status(a0)
    move.w y_pos(a0),routine(a0)
    move.b #2,objoff_27(a0)
    move.b #0,objoff_38(a0)
    move.w #0,($FFFFF75A).w
    move.w #-$180,($FFFFF758).w
    move.b #0,objoff_2D(a0)
    move.w #1,($FFFFF75C).w
    bsr.w loc_319D6
    rts
    ; ===========================================================================

    loc_319D6:
    lea ($FFFFF740).w,a2
    move.b #8,(a2)+
    move.b #0,(a2)+
    move.b #1,(a2)+
    move.b #0,(a2)+
    move.b #$10,(a2)+
    move.b #0,(a2)+
    move.b #3,(a2)+
    move.b #0,(a2)+
    move.b #2,(a2)+
    move.b #0,(a2)+
    rts
    ; ===========================================================================

    loc_31A04:
    tst.b ($FFFFF73F).w
    beq.s loc_31A1C
    move.b ($FFFFFE0F).w,d0
    andi.b #$1F,d0
    bne.s loc_31A1C
    move.b #-$30,d0
    bsr.w JmpTo9_PlaySound

    loc_31A1C:
    moveq #0,d0
    move.b angle(a0),d0
    move.w off_31A2A(pc,d0.w),d1
    jmp off_31A2A(pc,d1.w)
    ; ===========================================================================
    off_31A2A:
    dc.w loc_31A36-off_31A2A
    dc.w loc_31BA8-off_31A2A; 1
    dc.w loc_31C22-off_31A2A; 2
    dc.w loc_31D5C-off_31A2A; 3
    dc.w loc_31DCC-off_31A2A; 4
    dc.w loc_31E2A-off_31A2A; 5
    ; ===========================================================================

    loc_31A36:
    moveq #0,d0
    move.b objoff_38(a0),d0
    move.w off_31A44(pc,d0.w),d0
    jmp off_31A44(pc,d0.w)
    ; ===========================================================================
    off_31A44:
    dc.w loc_31A48-off_31A44
    dc.w loc_31A78-off_31A44; 1
    ; ===========================================================================

    loc_31A48:
    cmpi.w #$28C0,($FFFFF750).w
    bgt.s BranchTo_loc_31AA4
    move.w #$28C0,($FFFFF750).w
    move.w #0,($FFFFF75A).w
    move.w #$180,($FFFFF758).w
    move.b #2,objoff_38(a0)
    bset #0,render_flags(a0)
    move.b #0,objoff_2D(a0)

    BranchTo_loc_31AA4
    bra.w loc_31AA4
    ; ===========================================================================

    loc_31A78:
    cmpi.w #$29C0,($FFFFF750).w
    blt.s loc_31AA4
    move.w #$29C0,($FFFFF750).w
    move.w #0,($FFFFF75A).w
    move.w #-$180,($FFFFF758).w
    move.b #0,objoff_38(a0)
    bclr #0,render_flags(a0)
    move.b #0,objoff_2D(a0)

    loc_31AA4:
    bsr.w loc_2D5DE
    tst.b objoff_3F(a0)
    beq.s loc_31AB6
    subq.b #1,objoff_3F(a0)
    bra.w loc_31B46
    ; ===========================================================================

    loc_31AB6:
    move.w (MainCharacter+x_pos).w,d0
    sub.w x_pos(a0),d0
    addi.w #$10,d0
    cmpi.w #$20,d0
    bcc.s loc_31B46
    cmpi.w #$6B0,(MainCharacter+y_pos).w
    bcs.s loc_31B06
    cmpi.b #3,objoff_2D(a0)
    bcc.s loc_31B46
    addq.b #1,objoff_2D(a0)
    addq.b #2,angle(a0)
    move.b #8,($FFFFF740).w
    move.b #0,($FFFFF743).w
    move.b #0,($FFFFF749).w
    move.b #0,($FFFFF73F).w
    bsr.w loc_31BF2
    move.w #$50,($FFFFF75C).w
    bra.w loc_31C08
    ; ===========================================================================

    loc_31B06:
    cmpi.w #$67C,(MainCharacter+y_pos).w
    bcs.s loc_31B46
    move.b #$F,objoff_B(a0)
    move.b #2,($FFFFF73F).w
    move.b #$20,($FFFFF743).w
    move.b #$20,($FFFFF749).w
    move.b #9,($FFFFF740).w
    addq.b #4,angle(a0)
    move.w #0,($FFFFF758).w
    move.w #$180,($FFFFF75A).w
    move.b #0,objoff_3E(a0)
    bra.w loc_31C08
    ; ===========================================================================

    loc_31B46:
    bra.w +
    + addi.w #1,($FFFFF75C).w
    move.w ($FFFFF75C).w,d0
    andi.w #$3F,d0
    bne.w loc_31C08
    btst #6,($FFFFF75D).w
    beq.s loc_31B86
    move.b #$F,objoff_B(a0)
    move.b #2,($FFFFF73F).w
    move.b #$20,($FFFFF743).w
    move.b #$20,($FFFFF749).w
    move.b #9,($FFFFF740).w
    bra.w loc_31C08
    ; ===========================================================================

    loc_31B86:
    move.b #$C,objoff_B(a0)
    move.b #1,($FFFFF73F).w
    move.b #0,($FFFFF743).w
    move.b #0,($FFFFF749).w
    move.b #4,($FFFFF740).w
    bra.w loc_31C08
    ; ===========================================================================

    loc_31BA8:
    move.b #0,($FFFFF73F).w
    subi.w #1,($FFFFF75C).w
    bne.s loc_31BC6
    move.b #$20,($FFFFF743).w
    move.b #$20,($FFFFF749).w
    bra.w loc_31C08
    ; ===========================================================================

    loc_31BC6:
    cmpi.w #-$14,($FFFFF75C).w
    bgt.w loc_31C08
    move.b #0,($FFFFF743).w
    move.b #0,($FFFFF749).w
    move.b #0,angle(a0)
    move.w #-1,($FFFFF75C).w
    move.b #$40,objoff_3F(a0)
    bra.w loc_31C08
    ; ===========================================================================

    loc_31BF2:
    bsr.w JmpTo16_SingleObjLoad
    bne.s return_31C06
    move.b #$51,(a1) ; load obj51
    move.b #4,objoff_A(a1)
    move.l a0,objoff_34(a1)

    return_31C06:
    rts
    ; ===========================================================================

    loc_31C08:
    bsr.w loc_31CDC
    bsr.w loc_31E76
    bsr.w loc_31C92
    lea (off_3209C).l,a1
    bsr.w loc_2D604
    bra.w JmpTo39_DisplaySprite
    ; ===========================================================================

    loc_31C22:
    bsr.w loc_2D5DE
    tst.b objoff_3E(a0)
    bne.s loc_31C60
    cmpi.w #$680,y_pos(a0)
    bcs.s loc_31C08
    move.w #0,($FFFFF758).w
    move.w #-$180,($FFFFF75A).w
    move.b #-1,objoff_3E(a0)
    move.b #1,($FFFFF73F).w
    move.b #0,($FFFFF743).w
    move.b #0,($FFFFF749).w
    move.b #4,($FFFFF740).w
    bra.s loc_31C08
    ; ===========================================================================

    loc_31C60:
    cmpi.w #$654,y_pos(a0)
    bcc.s loc_31C08
    move.b #0,angle(a0)
    move.w #0,($FFFFF75A).w
    move.w #-$180,($FFFFF758).w
    btst #0,render_flags(a0)
    beq.s BranchTo_loc_31C08
    move.w #$180,($FFFFF758).w
    move.b #$C,objoff_B(a0)

    BranchTo_loc_31C08
    bra.w loc_31C08
    ; ===========================================================================

    loc_31C92:
    cmpi.b #$2F,objoff_14(a0)
    bne.s loc_31CAC
    lea ($FFFFF740).w,a1
    andi.b #$F0,6(a1)
    ori.b #6,6(a1)
    rts
    ; ===========================================================================

    loc_31CAC:
    cmpi.b #4,(MainCharacter+routine).w
    beq.s loc_31CBC
    cmpi.b #4,(Sidekick+routine).w
    bne.s return_31CDA

    loc_31CBC:
    lea ($FFFFF740).w,a1
    move.b 6(a1),d0
    andi.b #$F,d0
    cmpi.b #6,d0
    beq.s return_31CDA
    andi.b #$F0,6(a1)
    ori.b #5,6(a1)

    return_31CDA:
    rts
    ; ===========================================================================

    loc_31CDC:
    move.b mapping_frame(a0),d0
    jsr (CalcSine).l
    asr.w #6,d0
    add.w ($FFFFF754).w,d0
    move.w d0,y_pos(a0)
    move.w ($FFFFF750).w,x_pos(a0)
    addq.b #2,mapping_frame(a0)
    cmpi.b #6,angle(a0)
    bcc.s return_31D40
    tst.b objoff_32(a0)
    beq.s loc_31D42
    tst.b collision_flags(a0)
    bne.s return_31D40
    tst.b objoff_14(a0)
    bne.s loc_31D24
    move.b #$30,objoff_14(a0)
    move.w #$AC,d0
    jsr (PlaySound).l

    loc_31D24:
    lea (Normal_palette_line2+2).w,a1
    moveq #0,d0
    tst.w (a1)
    bne.s loc_31D32
    move.w #$EEE,d0

    loc_31D32:
    move.w d0,(a1)
    subq.b #1,objoff_14(a0)
    bne.s return_31D40
    move.b #$F,collision_flags(a0)

    return_31D40:
    rts
    ; ===========================================================================

    loc_31D42:
    moveq #$64,d0
    bsr.w JmpTo7_AddPoints
    move.w #$B3,($FFFFF75C).w
    move.b #6,angle(a0)
    moveq #$40,d0
    bsr.w JmpTo10_LoadPLC
    rts
    ; ===========================================================================

    loc_31D5C:
    st objoff_2C(a0)
    subq.w #1,($FFFFF75C).w
    bmi.s loc_31D7E
    move.b #0,($FFFFF73F).w
    move.b #0,objoff_B(a0)
    move.b #$B,collision_property(a0)
    bsr.w loc_2D6CC
    bra.s loc_31DB8
    ; ===========================================================================

    loc_31D7E:
    bset #0,render_flags(a0)
    clr.w ($FFFFF758).w
    clr.w ($FFFFF75A).w
    addq.b #2,angle(a0)
    lea ($FFFFF740).w,a1
    andi.b #$F0,6(a1)
    ori.b #3,6(a1)
    _move.b #8,0(a1)
    move.b #-$23,($FFFF8C54).w
    move.b #1,(Dirty_flag).w
    move.w #-$12,($FFFFF75C).w

    loc_31DB8:
    move.w ($FFFFF754).w,y_pos(a0)
    move.w ($FFFFF750).w,x_pos(a0)
    bsr.w loc_31E76
    bra.w JmpTo39_DisplaySprite
    ; ===========================================================================

    loc_31DCC:
    addq.w #1,($FFFFF75C).w
    beq.s loc_31DDC
    bpl.s loc_31DE2
    addi.w #$18,($FFFFF75A).w
    bra.s loc_31E0E
    ; ===========================================================================

    loc_31DDC:
    clr.w ($FFFFF75A).w
    bra.s loc_31E0E
    ; ===========================================================================

    loc_31DE2:
    cmpi.w #$18,($FFFFF75C).w
    bcs.s loc_31DFA
    beq.s loc_31E02
    cmpi.w #$20,($FFFFF75C).w
    bcs.s loc_31E0E
    addq.b #2,angle(a0)
    bra.s loc_31E0E
    ; ===========================================================================

    loc_31DFA:
    subi.w #8,($FFFFF75A).w
    bra.s loc_31E0E
    ; ===========================================================================

    loc_31E02:
    clr.w ($FFFFF75A).w
    bsr.w JmpTo6_loc_F626
    bsr.w JmpTo6_loc_F62E

    loc_31E0E:
    bsr.w loc_2D5DE
    bsr.w loc_31CDC
    move.w ($FFFFF754).w,y_pos(a0)
    move.w ($FFFFF750).w,x_pos(a0)
    bsr.w loc_31E76
    bra.w JmpTo39_DisplaySprite
    ; ===========================================================================

    loc_31E2A:
    move.w #$400,($FFFFF758).w
    move.w #-$40,($FFFFF75A).w
    cmpi.w #$2B20,(Camera_Max_X_pos).w
    beq.s loc_31E44
    addq.w #2,(Camera_Max_X_pos).w
    bra.s loc_31E4A
    ; ===========================================================================

    loc_31E44:
    tst.b render_flags(a0)
    bpl.s JmpTo58_DeleteObject

    loc_31E4A:
    bsr.w loc_2D5DE
    bsr.w loc_31CDC
    move.w ($FFFFF754).w,y_pos(a0)
    move.w ($FFFFF750).w,x_pos(a0)
    bsr.w loc_31E76
    lea (off_3209C).l,a1
    bsr.w loc_2D604
    bra.w JmpTo39_DisplaySprite
    ; ===========================================================================

    JmpTo58_DeleteObject
    jmp DeleteObject
    ; ===========================================================================

    loc_31E76:
    move.w x_pos(a0),d0
    move.w y_pos(a0),d1
    move.w d0,y_radius(a0)
    move.w d1,priority(a0)
    move.w d0,anim(a0)
    move.w d1,anim_frame_duration(a0)
    tst.b objoff_2C(a0)
    bne.s loc_31EAE
    move.w d0,status(a0)
    move.w d1,routine(a0)
    move.w d0,x_vel(a0)
    move.w d1,y_vel(a0)
    move.w d1,objoff_3A(a0)
    move.w d1,objoff_34(a0)
    rts
    ; ===========================================================================

    loc_31EAE:
    cmpi.w #$78,($FFFFF75C).w
    bgt.s return_31F22
    subi.w #1,status(a0)
    move.l objoff_3A(a0),d0
    move.w objoff_2E(a0),d1
    addi.w #$38,objoff_2E(a0)
    ext.l d1
    asl.l #8,d1
    add.l d1,d0
    move.l d0,objoff_3A(a0)
    move.w objoff_3A(a0),routine(a0)
    cmpi.w #$6F0,routine(a0)
    blt.s loc_31EE8
    move.w #0,objoff_2E(a0)

    loc_31EE8:
    cmpi.w #$3C,($FFFFF75C).w
    bgt.s return_31F22
    addi.w #1,x_vel(a0)
    move.l objoff_34(a0),d0
    move.w objoff_30(a0),d1
    addi.w #$38,objoff_30(a0)
    ext.l d1
    asl.l #8,d1
    add.l d1,d0
    move.l d0,objoff_34(a0)
    move.w objoff_34(a0),y_vel(a0)
    cmpi.w #$6F0,y_vel(a0)
    blt.s return_31F22
    move.w #0,objoff_30(a0)

    return_31F22:
    rts
    ; ===========================================================================

    loc_31F24:
    movea.l objoff_34(a0),a1 ; a1=object
    cmpi.b #6,angle(a1)
    bcc.w JmpTo59_DeleteObject
    moveq #0,d0
    move.b routine_secondary(a0),d0
    move.w off_31F40(pc,d0.w),d1
    jmp off_31F40(pc,d1.w)
    ; ===========================================================================
    off_31F40:
    dc.w loc_31F48-off_31F40
    dc.w loc_31F96-off_31F40; 1
    dc.w loc_31FDC-off_31F40; 2
    dc.w loc_32080-off_31F40; 3
    ; ===========================================================================

    loc_31F48:
    move.l #Obj51_MapUnc_320EA,mappings(a0)
    move.w #$3A7,art_tile(a0)
    ori.b #4,render_flags(a0)
    move.b #7,priority(a0)
    addq.b #2,routine_secondary(a0)
    movea.l objoff_34(a0),a1 ; a1=object
    move.w x_pos(a1),x_pos(a0)
    move.w y_pos(a1),y_pos(a0)
    addi.w #$30,y_pos(a0)
    move.b #8,y_radius(a0)
    move.b #8,x_radius(a0)
    move.b #$12,mapping_frame(a0)
    move.b #$98,collision_flags(a0)
    rts
    ; ===========================================================================

    loc_31F96:
    movea.l objoff_34(a0),a1 ; a1=object
    move.w x_pos(a1),x_pos(a0)
    move.w y_pos(a1),y_pos(a0)
    move.w objoff_28(a0),d0
    add.w d0,y_pos(a0)
    addi.w #1,d0
    cmpi.w #$2E,d0
    blt.s +
    move.w #$2E,d0
    +
    move.w d0,objoff_28(a0)
    tst.w ($FFFFF75C).w
    bne.w JmpTo39_DisplaySprite
    addq.b #2,routine_secondary(a0)
    move.w #0,x_vel(a0)
    move.w #0,y_vel(a0)
    bra.w JmpTo39_DisplaySprite
    ; ===========================================================================

    loc_31FDC:
    bsr.w loc_31FF8
    jsr (ObjCheckFloorDist).l
    tst.w d1
    bpl.w JmpTo39_DisplaySprite
    add.w d1,y_pos(a0)
    bsr.w loc_32030
    bra.w JmpTo39_DisplaySprite
    ; ===========================================================================

    loc_31FF8:
    moveq #0,d2
    move.w x_pos(a0),d2
    swap d2
    moveq #0,d3
    move.w y_pos(a0),d3
    swap d3
    move.w x_vel(a0),d0
    ext.l d0
    asl.l #8,d0
    add.l d0,d2
    move.w y_vel(a0),d0
    ext.l d0
    asl.l #8,d0
    add.l d0,d3
    addi.w #$38,y_vel(a0)
    swap d2
    move.w d2,x_pos(a0)
    swap d3
    move.w d3,y_pos(a0)
    rts
    ; ===========================================================================

    loc_32030:
    move.b #-$3C,d0
    bsr.w JmpTo9_PlaySound
    move.w #$3A7,art_tile(a0)
    move.b #7,anim(a0)
    move.w #-$300,y_vel(a0)
    move.w #-$100,x_vel(a0)
    move.b #4,objoff_A(a0)
    move.b #6,routine_secondary(a0)
    move.b #$98,collision_flags(a0)
    bsr.w JmpTo23_SingleObjLoad2
    bne.s return_3207E
    moveq #0,d0
    move.w #$F,d1

    loc_3206E:
    move.l (a0,d0.w),(a1,d0.w)
    addq.w #4,d0
    dbf d1,loc_3206E
    neg.w x_vel(a1)

    return_3207E:
    rts
    ; ===========================================================================

    loc_32080:
    bsr.w loc_31FF8
    lea (off_3209C).l,a1
    bsr.w JmpTo20_AnimateSprite
    cmpi.w #$705,y_pos(a0)
    bcs.w JmpTo39_DisplaySprite
    bra.w JmpTo59_DeleteObject
    ; ===========================================================================
    off_3209C:
    dc.w byte_320B0-off_3209C
    dc.w byte_320B3-off_3209C; 1
    dc.w byte_320B9-off_3209C; 2
    dc.w byte_320BF-off_3209C; 3
    dc.w byte_320C3-off_3209C; 4
    dc.w byte_320C8-off_3209C; 5
    dc.w byte_320D3-off_3209C; 6
    dc.w byte_320DD-off_3209C; 7
    dc.w byte_320E1-off_3209C; 8
    dc.w byte_320E4-off_3209C; 9
    byte_320B0: dc.b $F, 1,$FF
    byte_320B3: dc.b $F, 4,$FF, 5,$FC, 2
    byte_320B9: dc.b $F, 2,$FF, 3,$FC, 2
    byte_320BF: dc.b 7, 6, 7,$FF
    byte_320C3: dc.b 1, $C, $D, $E,$FF
    byte_320C8: dc.b 7, 8, 9, 8, 9, 8, 9, 8, 9,$FD, 3
    byte_320D3: dc.b 7, $A, $A, $A, $A, $A, $A, $A,$FD, 3
    byte_320DD: dc.b 3,$13,$14,$FF
    byte_320E1: dc.b 1, 0,$FF
    byte_320E4: dc.b 1, $F,$10,$11,$FF, 0
    ; ----------------------------------------------------------------------------
    ; sprite mappings
    ; ----------------------------------------------------------------------------
    Obj51_MapUnc_320EA: BINCLUDE "mappings/sprite/obj51.bin"
    ; ===========================================================================

    JmpTo39_DisplaySprite
    jmp DisplaySprite
    ; ===========================================================================

    JmpTo59_DeleteObject
    jmp DeleteObject
    ; ===========================================================================

    JmpTo16_SingleObjLoad
    jmp SingleObjLoad
    ; ===========================================================================

    JmpTo9_PlaySound
    jmp (PlaySound).l
    ; ===========================================================================

    JmpTo23_SingleObjLoad2
    jmp SingleObjLoad2
    ; ===========================================================================

    JmpTo20_AnimateSprite
    jmp AnimateSprite
    ; ===========================================================================

    JmpTo10_LoadPLC
    jmp (LoadPLC).l
    ; ===========================================================================

    JmpTo7_AddPoints
    jmp AddPoints
    ; ===========================================================================

    JmpTo6_loc_F626
    jmp loc_F626
    ; ===========================================================================

    JmpTo6_loc_F62E
    jmp loc_F62E
    ; ===========================================================================
    ; ----------------------------------------------------------------------------

    This code is the boss of Sonic 2 of Carnival zone more precisely slightly modified by me and now what i made






    This code is the boss of Sonic 2 of Carnival night area more precisely slightly modified by me
     
    Last edited: Jan 11, 2016