All pastes #752558 Raw Edit

Something

public text v1 · immutable
#752558 ·published 2007-10-28 14:44 UTC
rendered paste body

Obj38_Shield:
		move.b	#0,$18(a0)
		move.w	($FFFFD008).w,$08(a0)	; copy Sonic's position
		move.w	($FFFFD00C).w,$0C(a0)	; copy Sonic's position
		move.b	($FFFFD022).w,$22(a0)	; copy Sonic's flags
		clr.l	d2
		move.b	($FFFFFE2C),d2		; get shield type
		lsl.b	#1,d2			; convert to address
		move.l	d2,d0			; copy to d0 to use the address below also
		add.l	#Ani_Shields,d0		; select shield's animation states
		movea.l	d0,a2
		lea	(Ani_Shields).l,a1
		adda.w	(a2),a1
		jsr	AnimateSprite
		moveq	#0,d1			; start loading the shield DPLC
		move.b	$1A(a0),d1
		cmp.b	$30(a0),d1
		beq.w	Obj38_Shield_DPLC_Return
		move.b	d1,$30(a0)
		add.w	d1,d1
		move.l	d2,d6			; copy to d6 to use the address below also
		add.l	#DPLC_Shields,d2	; select shield's DPLC
		movea.l	d2,a1
		lea	(DPLC_Shields).l,a2
		adda.w	(a1),a2
		adda.w	(a2,d1.w),a2
		move.w	(a2)+,d5		; fetch number of parts to load
		subq.w	#1,d5
		bmi.w	Obj38_Shield_DPLC_Return
		move.w	#$A820,d4		; VRAM address
		add.l	#artunc_Shields,d6	; select shield's uncompressed art
		movea.l	d6,a2
		move.l	#artunc_Shields,d6
		add.w	(a2),d6
Obj38_Shield_DPLC_Loop:
		moveq	#0,d1
		move.w	(a2)+,d1		; fetch next item in the DPLC
		move.w	d1,d3			; grab number of tiles to load
		lsr.w	#8,d3			; -> $00XX
		andi.w	#$F0,d3			; -> $00X0
		add.w	#$10,d3			; +1 tile
		andi.w	#$FFF,d1		; grab offset
		lsl.l	#5,d1			; require $20 bytes per tile
		add.l	d6,d1			; d1 = address to art in ROM
		move.w	d4,d2			; d2 = address to load to in VRAM
		add.w	d3,d4			; d3 = $10 * number of tiles
		add.w	d3,d4			; increment for the next iteration
		jsr	DMA_68KtoVRAM
		dbf	d5,Obj38_Shield_DPLC_Loop
Obj38_Shield_DPLC_Return:
		jmp     (DisplaySprite).l