S2 invincibility stars help...

Discussion in 'Discussion and Q&A Archive' started by Tornado, Jul 5, 2009.

Thread Status:
Not open for further replies.
  1. Tornado

    Tornado Active Member Member

    Joined:
    Dec 1, 2008
    Messages:
    30
    Location:
    Hydrocity - Angel Island
    For months I have been trying to import this object for Sonic 1, but something is wrong, because it simply does not work.


    I already checked several times ... the problem should not be in art, and not in the mapping,perhaps the method of reading on invincibility monitor, but I believe that this is not the problem ...Who knows what can cause this problem? Because as I said I'm trying for months and the stars do not work. Thanks and who help me to resolve this issue will have their credits.



    Code:
    
    ; ----------------------------------------------------------------------------
    
    ; Object 4F - S2 Invincibility Stars
    
    ; ----------------------------------------------------------------------------
    
    
    
    Obj4F:
    
    	moveq	#0,d0
    
    	move.b	$A(a0),d0
    
    	move.w	off_1D98C(pc,d0.w),d1
    
    	jmp	off_1D98C(pc,d1.w)
    
    ; ===========================================================================
    
    off_1D98C:
    
    	dc.w loc_1D9A4-off_1D98C
    
    	dc.w loc_1DA0C-off_1D98C; 1
    
    	dc.w loc_1DA80-off_1D98C; 2
    
    	dc.l byte_1DB8F
    
    	dc.w $B
    
    	dc.l byte_1DBA4
    
    	dc.w $160D
    
    	dc.l byte_1DBBD
    
    	dc.w $2C0D
    
    ; ===========================================================================
    
    
    
    loc_1D9A4:
    
    	moveq	#0,d2
    
    	lea	off_1D98C(pc),a2
    
    	lea	(a0),a1
    
    	moveq	#3,d1
    
    
    
    loc_1D9AE:
    
            move.b	(a0),(a1) ; load obj4F
    
            move.b	#4,$A(a1)
    
    	move.l	#Map_S2Stars,4(a1)
    
    	move.w	#$55C,2(a1)
    
    	move.b	#4,1(a1)
    
    	bset	#6,1(a1)
    
    	move.b	#$10,$E(a1)
    
    	move.b	#2,$F(a1)
    
    	move.w	$3E(a0),$3E(a1)
    
    	move.b	d2,$36(a1)
    
    	addq.w	#1,d2
    
    	move.l	(a2)+,$30(a1)
    
    	move.w	(a2)+,$34(a1)
    
    	lea	$40(a1),a1 ; a1=object
    
    	dbf	d1,loc_1D9AE
    
    	move.b	#2,$A(a0)
    
    	move.b	#4,$34(a0)
    
    
    
    loc_1DA0C:
    
    	movea.w	$3E(a0),a1    ; a1=character
    
    	tst.b   ($FFFFFE2D).w
    
    	beq.w	J_DeleteObject
    
    	move.w	8(a1),d0
    
    	move.w	d0,8(a0)
    
    	move.w	$C(a1),d1
    
    	move.w	d1,$C(a0)
    
    	lea	$10(a0),a2
    
    	lea	byte_1DB82(pc),a3
    
    	moveq	#0,d5
    
    
    
    loc_1DA34:
    
    	move.w	$38(a0),d2
    
    	move.b	(a3,d2.w),d5
    
    	bpl.s	loc_1DA44
    
    	clr.w	$38(a0)
    
    	bra.s	loc_1DA34
    
    ; ===========================================================================
    
    
    
    loc_1DA44:
    
    	addq.w	#1,$38(a0)
    
    	lea	byte_1DB42(pc),a6
    
    	move.b	$34(a0),d6
    
    	jsr	loc_1DB2C(pc)
    
    	move.w	d2,(a2)+
    
    	move.w	d3,(a2)+
    
    	move.w	d5,(a2)+
    
    	addi.w	#$20,d6
    
    	jsr	loc_1DB2C(pc)
    
    	move.w	d2,(a2)+
    
    	move.w	d3,(a2)+
    
    	move.w	d5,(a2)+
    
    	moveq	#$12,d0
    
    	btst	#0,$22(a1)
    
    	beq.s	loc_1DA74
    
    	neg.w	d0
    
    
    
    loc_1DA74:
    
    	add.b	d0,$34(a0)
    
    	move.w	#$80,d0
    
    	bra.w	DisplaySprite3
    
    ; ===========================================================================
    
    loc_1DA80:
    
    	movea.w	$3E(a0),a1 ; a1=character
    
    	tst.b   ($FFFFFE2D).w
    
    	beq.w	J_DeleteObject
    
    	lea	($FFFFF7A8).w,a5
    
    	lea	($FFFFCB00).w,a6
    
    	move.b	$36(a0),d1
    
    	lsl.b	#2,d1
    
    	move.w	d1,d2
    
    	add.w	d1,d1
    
    	add.w	d2,d1
    
    	move.w	(a5),d0
    
    	sub.b	d1,d0
    
    	lea	(a6,d0.w),a2
    
    	move.w	(a2)+,d0
    
    	move.w	(a2)+,d1
    
    	move.w	d0,8(a0)
    
    	move.w	d1,$C(a0)
    
    	lea	$10(a0),a2
    
    	movea.l	$30(a0),a3
    
    
    
    loc_1DAD4:
    
    	move.w	$38(a0),d2
    
    	move.b	(a3,d2.w),d5
    
    	bpl.s	loc_1DAE4
    
    	clr.w	$38(a0)
    
    	bra.s	loc_1DAD4
    
    ; ===========================================================================
    
    
    
    loc_1DAE4:
    
    	swap	d5
    
    	add.b	$35(a0),d2
    
    	move.b	(a3,d2.w),d5
    
    	addq.w	#1,$38(a0)
    
    	lea	byte_1DB42(pc),a6
    
    	move.b	$34(a0),d6
    
    	jsr	loc_1DB2C(pc)
    
    	move.w	d2,(a2)+
    
    	move.w	d3,(a2)+
    
    	move.w	d5,(a2)+
    
    	addi.w	#$20,d6
    
    	swap	d5
    
    	jsr	loc_1DB2C(pc)
    
    	move.w	d2,(a2)+
    
    	move.w	d3,(a2)+
    
    	move.w	d5,(a2)+
    
    	moveq	#2,d0
    
    	btst	#0,$22(a1)
    
    	beq.s	loc_1DB20
    
    	neg.w	d0
    
    
    
    loc_1DB20:
    
    	add.b	d0,$34(a0)
    
    	move.w	#$80,d0
    
    	bra.w	DisplaySprite3
    
    ; ===========================================================================
    
    
    
    loc_1DB2C:
    
    	andi.w	#$3E,d6
    
    	move.b	(a6,d6.w),d2
    
    	move.b	1(a6,d6.w),d3
    
    	ext.w	d2
    
    	ext.w	d3
    
    	add.w	d0,d2
    
    	add.w	d1,d3
    
    	rts
    
    ; ---------------------------------------------------------------------------
    
    ; Subroutine to display a sprite/object, when a0 is the object RAM
    
    ; and d0 is already (priority/2)&$380
    
    ; ---------------------------------------------------------------------------
    
    
    
    ; loc_16530:
    
    DisplaySprite3:
    
    	lea	($FFFFAC00).w,a1
    
    	adda.w	d0,a1
    
    	cmpi.w	#$7E,(a1)
    
    	bcc.s	return_16542
    
    	addq.w	#2,(a1)
    
    	adda.w	(a1),a1
    
    	move.w	a0,(a1)
    
    
    
    return_16542:
    
    	rts
    
    ; ===========================================================================
    
    J_DeleteObject:
    
            jmp     DeleteObject
    
    ; ===========================================================================
    
    ; unknown
    
    byte_1DB42:	
    
            dc.w   $F00,  $F03,  $E06,  $D08,  $B0B,  $80D,  $60E,  $30F
    
    	dc.w    $10, -$3F1, -$6F2, -$8F3, -$BF5, -$DF8, -$EFA, -$FFD
    
    	dc.w  $F000, -$F04, -$E07, -$D09, -$B0C, -$80E, -$60F, -$310
    
    	dc.w   -$10,  $3F0,  $6F1,  $8F2,  $BF4,  $DF7,  $EF9,  $FFC
    
    
    
    byte_1DB82:	
    
            dc.b   8,  5,  7,  6,  6,  7,  5,  8,  6,  7,  7,  6,$FF
    
    byte_1DB8F:	
    
            dc.b   8,  7,  6,  5,  4,  3,  4,  5,  6,  7,$FF
    
            dc.b   3,  4,  5,  6,  7,  8,  7,  6,  5,  4
    
    byte_1DBA4:
    
            dc.b   8,  7,  6,  5,  4,  3,  2,  3,  4,  5,  6,  7,$FF
    
    	dc.b   2,  3,  4,  5,  6,  7,  8,  7,  6,  5,  4,  3
    
    byte_1DBBD:	
    
            dc.b   7,  6,  5,  4,  3,  2,  1,  2,  3,  4,  5,  6,$FF
    
    	dc.b   1,  2,  3,  4,  5,  6,  7,  6,  5,  4,  3,  2


    and invincibility monitor:



    Code:
     tst.b   ($FFFFFE19).w
    
                    bne.s    Obj2E_NoMusic
    
                    move.b  #1,($FFFFFE2D).w
                    move.w  #$4B0,($FFFFD032).w
    
                    move.b  #$4F,($FFFFD200).w      ; Call invincibility object (Obj4F = S2 stars)
                    move.w  a1,($FFFFD23E).w
    
                    tst.b   ($FFFFF7AA).w
                    bne.s   Obj2E_NoMusic
                    move.b  #$87,d0
                    jmp     (PlaySound).w
    
    
    Obj2E_NoMusic:
                    rts
     
  2. Tweaker

    Tweaker OI! MIRON! Member

    Joined:
    Aug 10, 2007
    Messages:
    324
    I remember this! If memory serves, the issue is the particular routine used to draw the object being different in Sonic 2 and directly incompatible with Sonic 1 or something. I'll ask around to see if anyone remembers how to fix that and get back to you.
     
  3. Tornado

    Tornado Active Member Member

    Joined:
    Dec 1, 2008
    Messages:
    30
    Location:
    Hydrocity - Angel Island
    Thanks Tweaker ... Actually, I already lost count of how many times I tried .. If I said that I tried over 100 times it would be no exaggeration ..


    EDIT: Issue resolved .... S2 invincibility stars now work in Sonic 1 .. The problem was in BuildSprites routine .....
     
    Last edited by a moderator: Jul 20, 2009
Thread Status:
Not open for further replies.