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.
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
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.
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
you would be better off adding it to S1 yourself. just have ago and experiment. thats what hacking is all about
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.
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