don't click here

Basic Questions & Answers thread

Discussion in 'Engineering & Reverse Engineering' started by Tweaker, May 29, 2008.

  1. Mikronaut

    Mikronaut

    Member
    15
    0
    0
    Yes and no... I would like to create a hack that basically tells the story of the time between Sonic 1 and 2, but I don't know that I'm happy enough with BTS to want to port it. Plus, I'd like more creative freedom. So if this is something you're actually interested in doing, please message me! I'd love to contribute my spare time to a project like this. (Since I have indeed had a similar thought, I'm curious... have you ever thought of making a Sonic 1 hack with 2 acts per zone, or a Sonic 2 hack with three per zone?)

    ...And, to completely change the subject, where exactly is the code for the title card lettering in the Sonic 1 Github disassembly? For some reason I can't find it anywhere, and I didn't find it even by searching.
     
  2. Steelrush

    Steelrush

    Every good deed has its reward. Member
    19
    0
    1
    A humid place
    Blaze the Cat in Sonic 2
    Currently, I'm having an issue in regards to porting Sonic 1 bosses to Sonic 2. While I'm having no difficultly porting Sonic 3 bosses as of recent, there's an error with the Sonic 1 bosses that I can't find my way around.

    > > >Sonic 1 boss general parts/Boss - Main.bin(1): error: invalid symbol name
    > > > <0x80>l<0x80><0x03>
    > > > €l€
    > > >Sonic 1 boss general parts/Eggman Animations.asm(4): error: invalid symbol name
    > > > @ship
    > > > Ani_Eggman: dc.w @ship-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(5): error: invalid symbol name
    > > > @facenormal1
    > > > dc.w @facenormal1-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(6): error: invalid symbol name
    > > > @facenormal2
    > > > dc.w @facenormal2-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(7): error: invalid symbol name
    > > > @facenormal3
    > > > dc.w @facenormal3-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(8): error: invalid symbol name
    > > > @facelaugh
    > > > dc.w @facelaugh-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(9): error: invalid symbol name
    > > > @facehit
    > > > dc.w @facehit-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(10): error: invalid symbol name
    > > > @facepanic
    > > > dc.w @facepanic-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(11): error: invalid symbol name
    > > > @blank
    > > > dc.w @blank-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(12): error: invalid symbol name
    > > > @flame1
    > > > dc.w @flame1-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(13): error: invalid symbol name
    > > > @flame2
    > > > dc.w @flame2-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(14): error: invalid symbol name
    > > > @facedefeat
    > > > dc.w @facedefeat-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(15): error: invalid symbol name
    > > > @escapeflame
    > > > dc.w @escapeflame-Ani_Eggman
    > > >Sonic 1 boss general parts/Eggman Animations.asm(16): error: invalid symbol name
    > > > @ship
    > > > @ship: dc.b $F, 0, afEnd
    > > >Sonic 1 boss general parts/Eggman Animations.asm(18): error: invalid symbol name
    > > > @facenormal1
    > > > @facenormal1: dc.b 5, 1, 2, afEnd
    > > >Sonic 1 boss general parts/Eggman Animations.asm(20): error: invalid symbol name
    > > > @facenormal2
    > > > @facenormal2: dc.b 3, 1, 2, afEnd
    > > >Sonic 1 boss general parts/Eggman Animations.asm(22): error: invalid symbol name
    > > > @facenormal3
    > > > @facenormal3: dc.b 1, 1, 2, afEnd
    > > >Sonic 1 boss general parts/Eggman Animations.asm(24): error: invalid symbol name
    > > > @facelaugh
    > > > @facelaugh: dc.b 4, 3, 4, afEnd
    > > >Sonic 1 boss general parts/Eggman Animations.asm(26): error: invalid symbol name
    > > > @facehit
    > > > @facehit: dc.b $1F, 5, 1, afEnd
    > > >Sonic 1 boss general parts/Eggman Animations.asm(28): error: invalid symbol name
    > > > @facepanic
    > > > @facepanic: dc.b 3, 6, 1, afEnd
    > > >Sonic 1 boss general parts/Eggman Animations.asm(30): error: invalid symbol name
    > > > @blank
    > > > @blank: dc.b $F, $A, afEnd
    > > >Sonic 1 boss general parts/Eggman Animations.asm(32): error: invalid symbol name
    > > > @flame1
    > > > @flame1: dc.b 3, 8, 9, afEnd
    > > >Sonic 1 boss general parts/Eggman Animations.asm(34): error: invalid symbol name
    > > > @flame2
    > > > @flame2: dc.b 1, 8, 9, afEnd
    > > >Sonic 1 boss general parts/Eggman Animations.asm(36): error: invalid symbol name
    > > > @facedefeat
    > > > @facedefeat: dc.b $F, 7, afEnd
    > > >Sonic 1 boss general parts/Eggman Animations.asm(38): error: invalid symbol name
    > > > @escapeflame
    > > > @escapeflame: dc.b 2, 9, 8, $B, $C, $B, $C, 9, 8, afBack, 2
    > > >Sonic 1 boss general parts/Eggman Maps.asm(4): error: invalid symbol name
    > > > @ship
    > > > Map_Eggman: dc.w @ship-Map_Eggman, @facenormal1-Map_Eggman
    > > >Sonic 1 boss general parts/Eggman Maps.asm(5): error: invalid symbol name
    > > > @facenormal2
    > > > dc.w @facenormal2-Map_Eggman, @facelaugh1-Map_Eggman
    > > >Sonic 1 boss general parts/Eggman Maps.asm(6): error: invalid symbol name
    > > > @facelaugh2
    > > > dc.w @facelaugh2-Map_Eggman, @facehit-Map_Eggman
    > > >Sonic 1 boss general parts/Eggman Maps.asm(7): error: invalid symbol name
    > > > @facepanic
    > > > dc.w @facepanic-Map_Eggman, @facedefeat-Map_Eggman
    > > >Sonic 1 boss general parts/Eggman Maps.asm(8): error: invalid symbol name
    > > > @flame1
    > > > dc.w @flame1-Map_Eggman, @flame2-Map_Eggman
    > > >Sonic 1 boss general parts/Eggman Maps.asm(9): error: invalid symbol name
    > > > @blank
    > > > dc.w @blank-Map_Eggman, @escapeflame1-Map_Eggman
    > > >Sonic 1 boss general parts/Eggman Maps.asm(10): error: invalid symbol name
    > > > @escapeflame2
    > > > dc.w @escapeflame2-Map_Eggman
    > > >Sonic 1 boss general parts/Eggman Maps.asm(11): error: invalid symbol name
    > > > @ship
    > > > @ship: dc.b 6
    > > >Sonic 1 boss general parts/Eggman Maps.asm(18): error: invalid symbol name
    > > > @facenormal1
    > > > @facenormal1: dc.b 2
    > > >Sonic 1 boss general parts/Eggman Maps.asm(21): error: invalid symbol name
    > > > @facenormal2
    > > > @facenormal2: dc.b 2
    > > >Sonic 1 boss general parts/Eggman Maps.asm(24): error: invalid symbol name
    > > > @facelaugh1
    > > > @facelaugh1: dc.b 3
    > > >Sonic 1 boss general parts/Eggman Maps.asm(28): error: invalid symbol name
    > > > @facelaugh2
    > > > @facelaugh2: dc.b 3
    > > >Sonic 1 boss general parts/Eggman Maps.asm(32): error: invalid symbol name
    > > > @facehit
    > > > @facehit: dc.b 3
    > > >Sonic 1 boss general parts/Eggman Maps.asm(36): error: invalid symbol name
    > > > @facepanic
    > > > @facepanic: dc.b 3
    > > >Sonic 1 boss general parts/Eggman Maps.asm(40): error: invalid symbol name
    > > > @facedefeat
    > > > @facedefeat: dc.b 4
    > > >Sonic 1 boss general parts/Eggman Maps.asm(45): error: invalid symbol name
    > > > @flame1
    > > > @flame1: dc.b 1
    > > >Sonic 1 boss general parts/Eggman Maps.asm(47): error: invalid symbol name
    > > > @flame2
    > > > @flame2: dc.b 1
    > > >Sonic 1 boss general parts/Eggman Maps.asm(49): error: invalid symbol name
    > > > @blank
    > > > @blank: dc.b 0
    > > >Sonic 1 boss general parts/Eggman Maps.asm(50): error: invalid symbol name
    > > > @escapeflame1
    > > > @escapeflame1: dc.b 2
    > > >Sonic 1 boss general parts/Eggman Maps.asm(53): error: invalid symbol name
    > > > @escapeflame2
    > > > @escapeflame2: dc.b 2
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(7): error: addressing mode not allowed on 68000
    > > > move.b obRoutine(a0),d0
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(7): error: addressing mode not allowed here
    > > > move.b obRoutine(a0),d0
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(22): error: addressing mode not allowed on 68000
    > > > move.w #$1E10,obX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(22): error: addressing mode not allowed here
    > > > move.w #$1E10,obX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(23): error: addressing mode not allowed on 68000
    > > > move.w #$5C0,obY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(23): error: addressing mode not allowed here
    > > > move.w #$5C0,obY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(24): error: addressing mode not allowed on 68000
    > > > move.w obX(a0),$30(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(24): error: addressing mode not allowed here
    > > > move.w obX(a0),$30(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(25): error: addressing mode not allowed on 68000
    > > > move.w obY(a0),$38(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(25): error: addressing mode not allowed here
    > > > move.w obY(a0),$38(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(26): error: addressing mode not allowed on 68000
    > > > move.b #$F,obColType(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(26): error: addressing mode not allowed here
    > > > move.b #$F,obColType(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(27): error: addressing mode not allowed on 68000
    > > > move.b #8,obColProp(a0) ; set number of hits to 8
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(27): error: addressing mode not allowed here
    > > > move.b #8,obColProp(a0) ; set number of hits to 8
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(28): error: addressing mode not allowed on 68000
    > > > move.b #4,obPriority(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(28): error: addressing mode not allowed here
    > > > move.b #4,obPriority(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(39): error: addressing mode not allowed on 68000
    > > > move.w obX(a0),obX(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(39): error: addressing mode not allowed here
    > > > move.w obX(a0),obX(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(40): error: addressing mode not allowed on 68000
    > > > move.w obY(a0),obY(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(40): error: addressing mode not allowed here
    > > > move.w obY(a0),obY(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(43): error: addressing mode not allowed on 68000
    > > > bclr #0,obStatus(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(43): error: addressing mode not allowed here
    > > > bclr #0,obStatus(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(44): error: addressing mode not allowed on 68000
    > > > clr.b ob2ndRout(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(44): error: addressing mode not allowed here
    > > > clr.b ob2ndRout(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(45): error: addressing mode not allowed on 68000
    > > > move.b (a2)+,obRoutine(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(45): error: addressing mode not allowed here
    > > > move.b (a2)+,obRoutine(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(46): error: addressing mode not allowed on 68000
    > > > move.b (a2)+,obAnim(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(46): error: addressing mode not allowed here
    > > > move.b (a2)+,obAnim(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(47): error: addressing mode not allowed on 68000
    > > > move.b obPriority(a0),obPriority(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(47): error: addressing mode not allowed here
    > > > move.b obPriority(a0),obPriority(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(48): error: addressing mode not allowed on 68000
    > > > move.l #Map_Eggman,obMap(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(48): error: addressing mode not allowed here
    > > > move.l #Map_Eggman,obMap(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(49): error: addressing mode not allowed on 68000
    > > > move.w #$400,obGfx(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(49): error: addressing mode not allowed here
    > > > move.w #$400,obGfx(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(50): error: addressing mode not allowed on 68000
    > > > move.b #4,obRender(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(50): error: addressing mode not allowed here
    > > > move.b #4,obRender(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(51): error: addressing mode not allowed on 68000
    > > > move.b #$20,obActWid(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(51): error: addressing mode not allowed here
    > > > move.b #$20,obActWid(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(56): error: short addressing not allowed
    > > > lea (v_player).w,a1
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(56): error: addressing mode not allowed here
    > > > lea (v_player).w,a1
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(58): error: addressing mode not allowed on 68000
    > > > move.b ob2ndRout(a0),d0
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(58): error: addressing mode not allowed here
    > > > move.b ob2ndRout(a0),d0
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(64): error: addressing mode not allowed on 68000
    > > > and.b obStatus(a0),d0
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(64): error: addressing mode not allowed here
    > > > and.b obStatus(a0),d0
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(65): error: addressing mode not allowed on 68000
    > > > andi.b #$FC,obRender(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(65): error: addressing mode not allowed here
    > > > andi.b #$FC,obRender(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(66): error: addressing mode not allowed on 68000
    > > > or.b d0,obRender(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(66): error: addressing mode not allowed here
    > > > or.b d0,obRender(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(76): error: addressing mode not allowed on 68000
    > > > move.w obX(a1),d0
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(76): error: addressing mode not allowed here
    > > > move.w obX(a1),d0
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(79): error: addressing mode not allowed on 68000
    > > > move.w #-$180,obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(79): error: addressing mode not allowed here
    > > > move.w #-$180,obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(80): error: addressing mode not allowed on 68000
    > > > move.w #$60,obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(80): error: addressing mode not allowed here
    > > > move.w #$60,obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(81): error: addressing mode not allowed on 68000
    > > > addq.b #2,ob2ndRout(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(81): error: addressing mode not allowed here
    > > > addq.b #2,ob2ndRout(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(85): error: addressing mode not allowed on 68000
    > > > move.w $38(a0),obY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(85): error: addressing mode not allowed here
    > > > move.w $38(a0),obY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(86): error: addressing mode not allowed on 68000
    > > > move.w $30(a0),obX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(86): error: addressing mode not allowed here
    > > > move.w $30(a0),obX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(91): error: addressing mode not allowed on 68000
    > > > tst.b obStatus(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(91): error: addressing mode not allowed here
    > > > tst.b obStatus(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(93): error: addressing mode not allowed on 68000
    > > > tst.b obColType(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(93): error: addressing mode not allowed here
    > > > tst.b obColType(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(98): error: invalid operand size
    > > > sfx sfx_HitBoss,0,0,0
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(101): error: short addressing not allowed
    > > > lea (v_pal_dry+$22).w,a1
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(101): error: addressing mode not allowed here
    > > > lea (v_pal_dry+$22).w,a1
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(111): error: addressing mode not allowed on 68000
    > > > move.b #$F,obColType(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(111): error: addressing mode not allowed here
    > > > move.b #$F,obColType(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(133): error: addressing mode not allowed on 68000
    > > > clr.w obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(133): error: addressing mode not allowed here
    > > > clr.w obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(140): error: addressing mode not allowed on 68000
    > > > clr.w obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(140): error: addressing mode not allowed here
    > > > clr.w obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(145): error: addressing mode not allowed on 68000
    > > > move.w #$140,obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(145): error: addressing mode not allowed here
    > > > move.w #$140,obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(146): error: addressing mode not allowed on 68000
    > > > move.w #-$200,obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(146): error: addressing mode not allowed here
    > > > move.w #-$200,obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(147): error: addressing mode not allowed on 68000
    > > > addq.b #2,ob2ndRout(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(147): error: addressing mode not allowed here
    > > > addq.b #2,ob2ndRout(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(158): error: addressing mode not allowed on 68000
    > > > clr.w obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(158): error: addressing mode not allowed here
    > > > clr.w obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(165): error: addressing mode not allowed on 68000
    > > > clr.w obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(165): error: addressing mode not allowed here
    > > > clr.w obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(170): error: addressing mode not allowed on 68000
    > > > move.w #-$180,obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(170): error: addressing mode not allowed here
    > > > move.w #-$180,obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(171): error: addressing mode not allowed on 68000
    > > > addq.b #2,ob2ndRout(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(171): error: addressing mode not allowed here
    > > > addq.b #2,ob2ndRout(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(182): error: addressing mode not allowed on 68000
    > > > move.w #$140,obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(182): error: addressing mode not allowed here
    > > > move.w #$140,obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(183): error: addressing mode not allowed on 68000
    > > > move.w #-$80,obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(183): error: addressing mode not allowed here
    > > > move.w #-$80,obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(186): error: addressing mode not allowed on 68000
    > > > asl obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(186): error: addressing mode not allowed here
    > > > asl obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(187): error: addressing mode not allowed on 68000
    > > > asl obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(187): error: addressing mode not allowed here
    > > > asl obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(190): error: addressing mode not allowed on 68000
    > > > addq.b #2,ob2ndRout(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(190): error: addressing mode not allowed here
    > > > addq.b #2,ob2ndRout(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(195): error: addressing mode not allowed on 68000
    > > > bset #0,obStatus(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(195): error: addressing mode not allowed here
    > > > bset #0,obStatus(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(201): error: addressing mode not allowed on 68000
    > > > bclr #0,obStatus(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(201): error: addressing mode not allowed here
    > > > bclr #0,obStatus(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(209): error: addressing mode not allowed on 68000
    > > > move.w d0,obX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(209): error: addressing mode not allowed here
    > > > move.w d0,obX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(210): error: addressing mode not allowed on 68000
    > > > move.w obVelY(a0),d0
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(210): error: addressing mode not allowed here
    > > > move.w obVelY(a0),d0
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(211): error: short addressing not allowed
    > > > move.w (v_player+obY).w,d1
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(211): error: addressing mode not allowed here
    > > > move.w (v_player+obY).w,d1
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(212): error: addressing mode not allowed on 68000
    > > > sub.w obY(a0),d1
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(212): error: addressing mode not allowed here
    > > > sub.w obY(a0),d1
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(233): error: addressing mode not allowed on 68000
    > > > move.w $38(a0),obY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(233): error: addressing mode not allowed here
    > > > move.w $38(a0),obY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(242): error: addressing mode not allowed on 68000
    > > > clr.w obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(242): error: addressing mode not allowed here
    > > > clr.w obVelX(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(249): error: addressing mode not allowed on 68000
    > > > clr.w obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(249): error: addressing mode not allowed here
    > > > clr.w obVelY(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(254): error: addressing mode not allowed on 68000
    > > > addq.b #2,ob2ndRout(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(254): error: addressing mode not allowed here
    > > > addq.b #2,ob2ndRout(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(255): error: addressing mode not allowed on 68000
    > > > bclr #0,obStatus(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(255): error: addressing mode not allowed here
    > > > bclr #0,obStatus(a0)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(264): error: addressing mode not allowed on 68000
    > > > cmpi.w #$1EC8,obX(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(264): error: addressing mode not allowed here
    > > > cmpi.w #$1EC8,obX(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(266): error: addressing mode not allowed on 68000
    > > > cmpi.w #$F0,obY(a1)
    > > >Labyrinth Boss/77 Boss - Labyrinth.asm(266): error: addressing mode not allowed here
    > > > cmpi.w #$F0,obY(a1)

    I can solve the addressing errors by myself, but I don't know what to do about the bin file. :\
     
  3. LuigiXHero

    LuigiXHero

    Member
    45
    34
    18
    Sonic 1 Character Pak
    Sounds like you used include for the bin file instead of incbin or whatever sonic 2 uses instead.

    It would help if you posted the code.
     
  4. Caverns 4

    Caverns 4

    Member
    346
    0
    16
    Sonic: Retold
    Here's a good question, this one's been really throwing me off in trying to write a dynamic water routine.

    What are the RAM equates "Water_Level_1", 2, and 3, and how are the distinguished in the ASM? Could there perhaps be labeled a little more clearly?

    From my understanding, which isn't very clear since I can't seem to find any consistency:
    Water_Level_1 = The current visible height of the water, relative to the top of the level.
    Water_Level_2 = I have no idea... Something to do with the oscillating motion of the height?
    Water_Level_3 = The water's target height...?
     
  5. MarkeyJester

    MarkeyJester

    Original, No substitute Resident Jester
    2,248
    509
    93
    Japan
    Code (Text):
    1. R_WaterActual   =   $FFFFF646       ; word  Actual water position (including tide's sinewave position)
    2. R_WaterMain =   $FFFFF648       ; word  Main water position
    3. R_WaterDest =   $FFFFF64A       ; word  Water "destination" position
    4. R_WaterSpeed    =   $FFFFF64C       ; byte  Pixel speed to move to "destination"
    5. R_WaterRoutine  =   $FFFFF64D       ; byte  Routine index/flag
    6. R_UnderWater    =   $FFFFF64E       ; byte
    I'd say that; Water_Level_1 = R_WaterActual, Water_Level_2 = R_WaterMain, Water_Level_3 = R_WaterDest, judging by your description (I don't have the RAM addresses to be sure).

    For consistency:

    Code (Text):
    1. ; ===========================================================================
    2. ; ---------------------------------------------------------------------------
    3. ; Subroutine to control everything water related (Labyrinth Zone only in Sonic 1)
    4. ; ---------------------------------------------------------------------------
    5.  
    6. WaterEffects:
    7.         cmpi.b  #$01,(R_ZoneNumber).w           ; is the level Labyrinth Zone?
    8.         bne.s   WE_NotWaterLevel            ; if not, branch and return (no water effects)
    9.         cmpi.b  #$06,($FFFFD000+$24).w          ; is Sonic dying (06 or higher)?
    10.         bcc.s   WE_SetWaterLine             ; if so, branch
    11.         bsr.w   WaterTunnels                ; run water tunnels (fast flowing "wind" tunnels)
    12.         bsr.w   WaterSlides             ; run water slides
    13.         bsr.w   WaterEvents             ; run water events
    14.  
    15. ; ---------------------------------------------------------------------------
    16. ; routine to control the water's sinewave movement, and setting H-blank's position
    17. ; ---------------------------------------------------------------------------
    18.  
    19. WE_SetWaterLine:
    20.         clr.b   (R_UnderWater).w            ; clear underwater flag
    21.         moveq   #$00,d0                 ; clear d0
    22.         move.b  (R_SyncPos00).w,d0          ; load sync position 00
    23.         lsr.w   #$01,d0                 ; divide by 2 (reduce distance)
    24.         add.w   (R_WaterMain).w,d0          ; add water's main position
    25.         move.w  d0,(R_WaterActual).w            ; add to actual "current" position
    26.         move.w  (R_WaterActual).w,d0            ; reload actual position
    27.         sub.w   ($FFFFF704).w,d0            ; minus Screen's FG Y position
    28.         bcc.s   WE_CheckLimit               ; if the water position is below the top of the screen, branch
    29.         tst.w   d0                  ; was the water position already in negative before the subtraction?
    30.         bpl.s   WE_CheckLimit               ; if not, branch
    31.         move.b  #$DF,(R_VDPReg8A+$01).w         ; set scanline position to bottom (we don't need it, we're fully underwater)
    32.         move.b  #$01,(R_UnderWater).w           ; set as fully underwater
    33.  
    34. WE_CheckLimit:
    35.         cmpi.w  #$00DF,d0               ; is the water position below (or above) the screen?
    36.         bcs.s   WE_NoLimit              ; if not, branch
    37.         move.w  #$00DF,d0               ; set scanline position to bottom (we don't need it, we're fully above/below water)
    38.  
    39. WE_NoLimit:
    40.         move.b  d0,(R_VDPReg8A+$01).w           ; set scanline interrupt position for H-blank
    41.  
    42. WE_NotWaterLevel:
    43.         rts                     ; return
    44.  
    45. ; ===========================================================================
    And...

    Code (Text):
    1. ; ===========================================================================
    2. ; ---------------------------------------------------------------------------
    3. ; Subroutine to control the water depending on specific events
    4. ; ---------------------------------------------------------------------------
    5.  
    6. WaterEvents:
    7.         moveq   #$00,d0                 ; clear d0
    8.         move.b  (R_ActNumber).w,d0          ; load Act number
    9.         add.w   d0,d0                   ; multiply by word size (x2)
    10.         move.w  WE_Index(pc,d0.w),d0            ; load correct relative address
    11.         jsr WE_Index(pc,d0.w)           ; add and jump to relative address
    12.         moveq   #$00,d1                 ; clear d1
    13.         move.b  (R_WaterSpeed).w,d1         ; load the water's pixel movement speed
    14.         move.w  (R_WaterDest).w,d0          ; load the water destination
    15.         sub.w   (R_WaterMain).w,d0          ; subtract the main water position
    16.         beq.s   WE_NoMove               ; if the water is at the destination already, branch to return
    17.         bcc.s   WE_MoveDown             ; if it's above it's destination, branch to move it down
    18.         neg.w   d1                  ; reverse direction to go upwards (adding negative will subtract)
    19.  
    20. WE_MoveDown:
    21.         add.w   d1,(R_WaterMain).w          ; move water up/down towards destination
    22.  
    23. WE_NoMove:
    24.         rts                     ; return
    25.  
    26. ; ===========================================================================
     
  6. Caverns 4

    Caverns 4

    Member
    346
    0
    16
    Sonic: Retold
    Yes, the three I asked about do seem to match up.
    R_WaterSpeed, however, is called "Water_on" in Sonic two, which, going by this code:

    Code (ASM):
    1. DynamicWater:
    2.     moveq   #0,d0
    3.     move.w  (Current_ZoneAndAct).w,d0
    4.     ror.b   #1,d0
    5.     lsr.w   #6,d0
    6.     andi.w  #$FFFE,d0
    7.     move.w  Dynamic_water_routine_table(pc,d0.w),d0
    8.     jsr Dynamic_water_routine_table(pc,d0.w)
    9.     moveq   #0,d1
    10.     move.b  (Water_Speed).w,d1
    11.     move.w  (Water_Level_Target).w,d0
    12.     sub.w   (Water_Level_Main).w,d0
    13.     beq.s   ++  ; rts
    14.     bcc.s   +
    15.     neg.w   d1
    16. +
    17.     add.w   d1,(Water_Level_Main).w
    18. +
    19.     rts
    is a slight misnomer, since it only disables water if the speed is 0.

    Besides that, it all matches.Thank you!
     
  7. Koveryl

    Koveryl

    Member
    4
    0
    0
    Hello! I'm looking to grab samples from the past stages of Sonic CD. I'm mainly looking to get the voice from Stardust Speedway Past, and I'd be fine with just having that. Problem is, I don't know how to do it. I've looked googled and searched around to see if anybody has extracted and uploaded samples from the past stages of Sonic CD, but all I'm finding is sound effects. I'd love it if somebody could tell me how to do it! Thanks so much :)
     
  8. ValleyBell

    ValleyBell

    Tech Member
    246
    25
    28
    researching PC-98/X68000 sound drivers
    I wrote a small tool that extracts all sorts of stuff from SNCBNK*.BIN files in 2012, which I linked in this post.
    It seems hard to find via google, so I maybe should put it somewhere on the wiki.
     
  9. Koveryl

    Koveryl

    Member
    4
    0
    0
    Thank you so much!! This worked absolutely perfectly. Thanks for writing that sweet program, and letting me know about it :)
     
  10. Steelrush

    Steelrush

    Every good deed has its reward. Member
    19
    0
    1
    A humid place
    Blaze the Cat in Sonic 2
    I need assistance with boss porting once more. >_>

    While I do have most of the issues figured out, I'm still wondering what code needs to be replaced in order to port the Labyrinth Zone boss to Sonic 2.

    Here is the code;

    ; ---------------------------------------------------------------------------
    ; Object 77 - Eggman (LZ)
    ; ---------------------------------------------------------------------------

    BossLabyrinth: ; XREF: Obj_Index
    moveq #0,d0
    move.b Vint_Routine(a0),d0
    move.w Obj77_Index(pc,d0.w),d1
    jmp Obj777_Index(pc,d1.w)
    ; ===========================================================================
    Obj777_Index: dc.w Obj777_Main-Obj77_Index
    dc.w Obj77_ShipMain-Obj77_Index
    dc.w Obj77_FaceMain-Obj77_Index
    dc.w Obj77_FlameMain-Obj77_Index

    Obj77_ObjData: dc.b 2, 0 ; routine number, animation
    dc.b 4, 1
    dc.b 6, 7
    ; ===========================================================================

    Obj777_Main: ; Vint_Routine 0
    move.w #$1E10,obX(a0)
    move.w #$5C0,obY(a0)
    move.w obX(a0),$30(a0)
    move.w obY(a0),$38(a0)
    move.b #$F,ColType(a0)
    move.b #8,ColProp(a0) ; set number of hits to 8
    move.b #4,Priority(a0)
    lea Obj77_ObjData(pc),a2
    movea.l a0,a1
    moveq #2,d1
    bra.s Obj77_LoadBoss
    ; ===========================================================================

    Obj77_Loop:
    jsr FindNextFreeObj
    bne.s Obj77_ShipMain
    move.b #id_BossLabyrinth,0(a1)
    move.w obX(a0),obX(a1)
    move.w obY(a0),obY(a1)

    Obj77_LoadBoss: ; XREF: Obj77_Main
    bclr #0,obStatus(a0)
    clr.b ob2ndRout(a1)
    move.b (a2)+,Vint_Routine(a1)
    move.b (a2)+,Anim(a1)
    move.b Priority(a0),Priority(a1)
    move.l #Map_Eggman,obMap(a1)
    move.w #$400,obGfx(a1)
    move.b #4,obRender(a1)
    move.b #$20,obActWid(a1)
    move.l a0,$34(a1)
    dbf d1,Obj77_Loop

    Obj77_ShipMain: ; Routine 2
    lea (v_player).w,a1
    moveq #0,d0
    move.b ob2ndRout(a0),d0
    move.w Obj77_ShipIndex(pc,d0.w),d1
    jsr Obj77_ShipIndex(pc,d1.w)
    lea (Ani_Eggman).l,a1
    jsr AnimateSprite
    moveq #3,d0
    and.b obStatus(a0),d0
    andi.b #$FC,obRender(a0)
    or.b d0,obRender(a0)
    jmp DisplaySprite
    ; ===========================================================================
    Obj77_ShipIndex:dc.w loc_17F1E-Obj77_ShipIndex, loc_17FA0-Obj77_ShipIndex
    dc.w loc_17FE0-Obj77_ShipIndex, loc_1801E-Obj77_ShipIndex
    dc.w loc_180BC-Obj77_ShipIndex, loc_180F6-Obj77_ShipIndex
    dc.w loc_1812A-Obj77_ShipIndex, loc_18152-Obj77_ShipIndex
    ; ===========================================================================

    loc_17F1E: ; XREF: Obj77_ShipIndex
    move.w obX(a1),d0
    cmpi.w #$1DA0,d0
    bcs.s loc_17F38
    move.w #-$180,obVelY(a0)
    move.w #$60,obVelX(a0)
    addq.b #2,ob2ndRout(a0)

    loc_17F38:
    bsr.w BossMove
    move.w $38(a0),obY(a0)
    move.w $30(a0),obX(a0)

    loc_17F48:
    tst.b $3D(a0)
    bne.s loc_17F8E
    tst.b obStatus(a0)
    bmi.s loc_17F92
    tst.b obColType(a0)
    bne.s locret_17F8C
    tst.b $3E(a0)
    bne.s loc_17F70
    move.b #$20,$3E(a0)
    sfx sfx_HitBoss,0,0,0

    loc_17F70:
    lea (v_pal_dry+$22).w,a1
    moveq #0,d0
    tst.w (a1)
    bne.s loc_17F7E
    move.w #cWhite,d0

    loc_17F7E:
    move.w d0,(a1)
    subq.b #1,$3E(a0)
    bne.s locret_17F8C
    move.b #$F,obColType(a0)

    locret_17F8C:
    rts
    ; ===========================================================================

    loc_17F8E: ; XREF: loc_17F48
    bra.w BossDefeated
    ; ===========================================================================

    loc_17F92: ; XREF: loc_17F48
    moveq #100,d0
    bsr.w AddPoints
    move.b #-1,$3D(a0)
    rts
    ; ===========================================================================

    loc_17FA0: ; XREF: Obj77_ShipIndex
    moveq #-2,d0
    cmpi.w #$1E48,$30(a0)
    bcs.s loc_17FB6
    move.w #$1E48,$30(a0)
    clr.w obVelX(a0)
    addq.w #1,d0

    loc_17FB6:
    cmpi.w #$500,$38(a0)
    bgt.s loc_17FCA
    move.w #$500,$38(a0)
    clr.w obVelY(a0)
    addq.w #1,d0

    loc_17FCA:
    bne.s loc_17FDC
    move.w #$140,obVelX(a0)
    move.w #-$200,obVelY(a0)
    addq.b #2,ob2ndRout(a0)

    loc_17FDC:
    bra.w loc_17F38
    ; ===========================================================================

    loc_17FE0: ; XREF: Obj77_ShipIndex
    moveq #-2,d0
    cmpi.w #$1E70,$30(a0)
    bcs.s loc_17FF6
    move.w #$1E70,$30(a0)
    clr.w obVelX(a0)
    addq.w #1,d0

    loc_17FF6:
    cmpi.w #$4C0,$38(a0)
    bgt.s loc_1800A
    move.w #$4C0,$38(a0)
    clr.w obVelY(a0)
    addq.w #1,d0

    loc_1800A:
    bne.s loc_1801A
    move.w #-$180,obVelY(a0)
    addq.b #2,ob2ndRout(a0)
    clr.b $3F(a0)

    loc_1801A:
    bra.w loc_17F38
    ; ===========================================================================

    loc_1801E: ; XREF: Obj77_ShipIndex
    cmpi.w #$100,$38(a0)
    bgt.s loc_1804E
    move.w #$100,$38(a0)
    move.w #$140,obVelX(a0)
    move.w #-$80,obVelY(a0)
    tst.b $3D(a0)
    beq.s loc_18046
    asl obVelX(a0)
    asl obVelY(a0)

    loc_18046:
    addq.b #2,ob2ndRout(a0)
    bra.w loc_17F38
    ; ===========================================================================

    loc_1804E:
    bset #0,obStatus(a0)
    addq.b #2,$3F(a0)
    move.b $3F(a0),d0
    jsr (CalcSine).l
    tst.w d1
    bpl.s loc_1806C
    bclr #0,obStatus(a0)

    loc_1806C:
    asr.w #4,d0
    swap d0
    clr.w d0
    add.l $30(a0),d0
    swap d0
    move.w d0,obX(a0)
    move.w obVelY(a0),d0
    move.w (v_player+obY).w,d1
    sub.w obY(a0),d1
    bcs.s loc_180A2
    subi.w #$48,d1
    bcs.s loc_180A2
    asr.w #1,d0
    subi.w #$28,d1
    bcs.s loc_180A2
    asr.w #1,d0
    subi.w #$28,d1
    bcs.s loc_180A2
    moveq #0,d0

    loc_180A2:
    ext.l d0
    asl.l #8,d0
    tst.b $3D(a0)
    beq.s loc_180AE
    add.l d0,d0

    loc_180AE:
    add.l d0,$38(a0)
    move.w $38(a0),obY(a0)
    bra.w loc_17F48
    ; ===========================================================================

    loc_180BC: ; XREF: Obj77_ShipIndex
    moveq #-2,d0
    cmpi.w #$1F4C,$30(a0)
    bcs.s loc_180D2
    move.w #$1F4C,$30(a0)
    clr.w obVelX(a0)
    addq.w #1,d0

    loc_180D2:
    cmpi.w #$C0,$38(a0)
    bgt.s loc_180E6
    move.w #$C0,$38(a0)
    clr.w obVelY(a0)
    addq.w #1,d0

    loc_180E6:
    bne.s loc_180F2
    addq.b #2,ob2ndRout(a0)
    bclr #0,obStatus(a0)

    loc_180F2:
    bra.w loc_17F38
    ; ===========================================================================

    loc_180F6: ; XREF: Obj77_ShipIndex
    tst.b $3D(a0)
    bne.s loc_18112
    cmpi.w #$1EC8,obX(a1)
    blt.s loc_18126
    cmpi.w #$F0,obY(a1)
    bgt.s loc_18126
    move.b #$32,$3C(a0)

    loc_18112:
    move.w #MusID_Boss,d0
    jsrto (PlayMusic).l, JmpTo3_PlayMusic
    if Revision=0
    endif
    else
    clr.b (f_lockscreen).w
    endc
    bset #0,obStatus(a0)
    addq.b #2,ob2ndRout(a0)

    loc_18126:
    bra.w loc_17F38
    ; ===========================================================================

    loc_1812A: ; XREF: Obj77_ShipIndex
    tst.b $3D(a0)
    bne.s loc_18136
    subq.b #1,$3C(a0)
    bne.s loc_1814E

    loc_18136:
    clr.b $3C(a0)
    move.w #$400,obVelX(a0)
    move.w #-$40,obVelY(a0)
    clr.b $3D(a0)
    addq.b #2,ob2ndRout(a0)

    loc_1814E:
    bra.w loc_17F38
    ; ===========================================================================

    loc_18152: ; XREF: Obj77_ShipIndex
    cmpi.w #$2030,(v_limitright2).w
    bcc.s loc_18160
    addq.w #2,(v_limitright2).w
    bra.s loc_18166
    ; ===========================================================================

    loc_18160:
    tst.b obRender(a0)
    bpl.s Obj77_ShipDel

    loc_18166:
    bra.w loc_17F38
    ; ===========================================================================

    Obj77_ShipDel:
    jmp DeleteObject
    ; ===========================================================================

    Obj77_FaceMain: ; Routine 4
    movea.l $34(a0),a1
    move.b (a1),d0
    cmp.b (a0),d0
    bne.s Obj77_FaceDel
    moveq #0,d0
    move.b ob2ndRout(a1),d0
    moveq #1,d1
    tst.b $3D(a0)
    beq.s loc_1818C
    moveq #$A,d1
    bra.s loc_181A0
    ; ===========================================================================

    loc_1818C:
    tst.b obColType(a1)
    bne.s loc_18196
    moveq #5,d1
    bra.s loc_181A0
    ; ===========================================================================

    loc_18196:
    cmpi.b #4,(v_player+Vint_Routine).w
    bcs.s loc_181A0
    moveq #4,d1

    loc_181A0:
    move.b d1,obAnim(a0)
    cmpi.b #$E,d0
    bne.s loc_181B6
    move.b #6,obAnim(a0)
    tst.b obRender(a0)
    bpl.s Obj77_FaceDel

    loc_181B6:
    bra.s Obj77_Display
    ; ===========================================================================

    Obj77_FaceDel:
    jmp DeleteObject
    ; ===========================================================================

    Obj77_FlameMain:; Routine 6
    move.b #7,obAnim(a0)
    movea.l $34(a0),a1
    move.b (a1),d0
    cmp.b (a0),d0
    bne.s Obj77_FlameDel
    cmpi.b #$E,ob2ndRout(a1)
    bne.s loc_181F0
    move.b #$B,obAnim(a0)
    tst.b 1(a0)
    bpl.s Obj77_FlameDel
    bra.s loc_181F0
    ; ===========================================================================
    tst.w obVelX(a1)
    beq.s loc_181F0
    move.b #8,obAnim(a0)

    loc_181F0:
    bra.s Obj77_Display
    ; ===========================================================================

    Obj77_FlameDel: ; XREF: Obj77_FlameMain
    jmp DeleteObject
    ; ===========================================================================

    Obj77_Display:
    lea (Ani_Eggman).l,a1
    jsr AnimateSprite
    movea.l $34(a0),a1
    move.w obX(a1),obX(a0)
    move.w obY(a1),obY(a0)
    move.b obStatus(a1),obStatus(a0)
    moveq #3,d0
    and.b obStatus(a0),d0
    andi.b #$FC,obRender(a0)
    or.b d0,obRender(a0)
    jmp DisplaySprite

    I already began to replace some of the entries, though I can't find a match for the others.
     
  11. Devon

    Devon

    La mer va embrassé moi et délivré moi lakay. Tech Member
    1,425
    1,743
    93
    your mom
    1) Vint_Routine? That variable is a RAM address used for the vertical interrupt to jump to a subroutine within itself. I think the proper definition you are looking for is "obRoutine", which is used by objects to jump to a routine within itself.

    2) The current Sonic 2 uses different definitions than "obXXX". It uses things like x_pos, x_vel, routine, etc. Look them up in the S2 disassembly and your S1 disassembly to see which one is which. You could also copy the definitions with "obXXX" to S2. With the other object SST definitions without a name, just use objoff_XX

    3) When loading the boss object in S2 (in RunDynamicLevelEvents), "Current_Boss_ID" is set. This is kind of like "f_lockscreen" (which doesn't really lock the screen by the way! It just prevents Sonic from going offscreen at the right). This acts as a boss flag, and prevents Sonic from going offscreen at the right, and is used as an index to handle Sonic's collision with the bosses (BossSpecificCollision). For this boss, I say you should just set it to 1.

    4) Ensure that the mappings for the boss are in S2 format and not S1's.

    5) Make sure that if you are loading the boss into a different position that where it originally was, you should change values involving its own position, the right camera boundary, etc.

    6) The "Revision" check isn't needed. You can remove that. That was used to check if S1 is REV00 or REV01

    7) v_limitright2 = Camera_Max_X_pos

    8) id_BossLabyrinth should be defined. You can also just define it as whatever object ID you gave it in S2.

    9) Make sure you also implement the correct PLCs for this boss and import the needed graphics and load them in RunDynamicLevelEvents so it displays correctly.
     
  12. redhotsonic

    redhotsonic

    Also known as RHS Tech Member
    1,587
    10
    18
    United Kingdom
    YouTuber
    It's not often I come to ask questions, but I'm stuck.

    I've ported the S3K Collision manager into Sonic 2 Recreation, and it works perfectly fine, and frees a shit tone of RAM. Happy days. But, editors like SonED2 for example only likes the collision compressed in Kosinski format, and then the hack needs to have the collision in an uncompressed format for it to work properly.

    Basically, every time I make a collision edit in a level editor, I have to decompress it manually every time, for each small change. And it's getting tiring.

    Does anyone know a way to code the build.bat to decompress all the collision files automatically? Seeming as it's not my specialty, I'm a bit clueless.
     
  13. Devon

    Devon

    La mer va embrassé moi et délivré moi lakay. Tech Member
    1,425
    1,743
    93
    your mom
    You can use koscmp from here, and to have it decompress each file automatically, you can use:

    for /r %%F in (collision/*.ext) do koscmp -x %%~nxF %%~nxF_u

    (".ext" being the extension of the collision files. Though it will have the uncompressed extensions be "ext_u" instead of "ext").

    However, for this method, I would either make the collision files use a unique extension, or put them in a separate folder, and change "collision/*.ext" to "[INSERT PATH HERE]/*ext", because it will also try to decompress the angle data and collision heights too, since they share the same extension as the collision data in the S2 disassembly.
     
  14. MainMemory

    MainMemory

    Kate the Wolf Tech Member
    4,795
    383
    63
    SonLVL
    Both SonED2 and SonLVL should be able to use uncompressed collision indexes. For SonED2, have the line "Collision Index Compression: 0" in the project file. For SonLVL, use colindcmp=Uncompressed near the top of the INI before the level definitions.
     
  15. Clownacy

    Clownacy

    Tech Member
    1,099
    689
    93
    I'm not 100% on this, but I think older versions of SonED2's project format don't allow mix-and-match. I had a problem with switching to S3K's ring format in a Xenowhirl-based disasm, and wound up having to totally remake the SonED2 project files in the newer format.
     
  16. redhotsonic

    redhotsonic

    Also known as RHS Tech Member
    1,587
    10
    18
    United Kingdom
    YouTuber
    Okay, all 3 solutions do not work.

    Ralakimus, your solution was the sort of thing I was looking for, but it doesn't seem to work. It just keeps saying, "Cannot find file /r" or something extremely similar. I tried with just one file (ARZ.bin) and using the commands (shame there's no proper readme), it cannot find the file, even if I give it a path or even try the .ext file format.


    MainMemory, the solution for SonED2 doesn't work either. When I insert that, SonED2 will either
    • Treat that as a path and try to load a file from that path (no matter where I stick the command)
    • SonED2 will just crash


    Mainmemory, how on earth do I even get SonLVL to work? Using this guide, it won't recognise any of my files (yes, build is there, asm is there, the right disassembly folder [2007] is being used). Even trying the SonED2 Proj converter (which seems to convert fine) doesn't even work when trying to load from them files. It gets as far as loading the ini file, but as soon as I pick a level, the files do not exist (apparently). StephenUK can't get it to work either.
     
  17. MainMemory

    MainMemory

    Kate the Wolf Tech Member
    4,795
    383
    63
    SonLVL
    Your SonED2 projects are probably in the old format, you'll need to rewrite them in the new format. As for SonLVL, are you sure you have the files in the right places? SonLVL's INI files should be in a subfolder of your disassembly, just like the SonED2 projects, and if you've changed any folder or file names, obviously it won't be able to load those files. You should be able to follow the path given for a file in the INI and get to the corresponding file in your disassembly: Tiles=../art/kosinski/EHZ_HTZ.bin, from the INI folder, go up a level (..), then to the art folder, then the kosinski folder, and you should find the file EHZ_HTZ.bin.
     
  18. redhotsonic

    redhotsonic

    Also known as RHS Tech Member
    1,587
    10
    18
    United Kingdom
    YouTuber
    Guh, out of all the project files I tried to open, I picked the only one that had an error. The others load fine. got SonLVL working. And your code to let it load uncompressed collision also works, thanks.

    And thanks to Clownacy, I've got it working in SonED2. Thanks guys.
     
  19. Sith

    Sith

    The molotov bitch Member
    As I can't wait to play the updated S2 Recreation, I gotta thank you 3 guys for helping out RHS too.
    And RHS, your level layouts are always balanced in difficulty with creative design. As impatient as I am to play this, don't rush things and make more quality levels like you did. I'll be happy to play it when "it's out when it's out".
     
  20. Caverns 4

    Caverns 4

    Member
    346
    0
    16
    Sonic: Retold
    Is it possible to used the "MoveDemo_Record" routine in Sonic 2 in any meaningful way? I don't know where it outputs code to, or how, and it seems like kind of a waste to just trim the code out if I COULD use it to record demos without having to go get Gens Rerecording again.