[stella] Sprite Animation Help!

Subject: [stella] Sprite Animation Help!
From: "J Parlee" <lost_monkey@xxxxxxxxxxxx>
Date: Sun, 4 Aug 2002 12:41:32 -0400
Greetings all...

I have decided to finally come forward and admit that I have hit a wall....
(big surprise!)

I started working on a couple of Stella programming projects back in
November 2001, but when I started up a home business in February, I found I
didn't have time to work on them anymore... Now things have settled to a
comfortable level and I can get back to work...

 I have attached the source to a game that I was working on back in
February, where I got stuck on the animation of Player 2.  Player 2 starts
off correctly (except for  some garbage at the bottom of the sprite) but as
soon as P2 starts to move, the locations the sprite data are being pulled
from goes "off".

I have NO background in programming, I am learning all of this "as I go"...
but here is what I *think* is happening.  I am thinking that when the
character is "moving" the address is "out of range" (>128 bytes away?).. but
I have tried moving the sprite data around and it doesn't help things...

Any help on this would be appreciated...

Any guesses on what the game is (intended) to be?

BTW:  The code contains snippets from Eckard Stohlberg's "Big Move" demo,
Cracker's "...Another" demo and David Crane's "Pitfall" ( amazingly
interpreted Thomas Jentzsch)

Thanks

Jason
;01/21/02 	Begin the title screen of Sxxxx Sxxxx Bxxx. using code from ES Big Move Demo
;01/21/02	Title screen works 40x40 baby! need to work on placing it better and a PF outline
;01/21/02	Began work on sprite conversion from other roms.  About half done
;01/22/02	Change some colours, finish sprites, added Mario PF 
;02/02/02	Removed title screen code, to be added back later...
;02/02/02	Changed the loop of the kernel.  gone is the main loop and replaced with a 
;		straight through approach, with a couple JMPs instead of JSR RTS
;		The result, is that the screen looks a little different, due to the timing.
;		Next project is to start the counting. I would like to get the code to work on  a
;		real vcs before going any further.
;02/02/02	The quest to design a new kernel begins.  
;		1st time counting is complete...added a well placed wsync and the BG is good...characters are
;		taking too long to draw though...damn cycles!		
;02/03/02	The character pointers are complete. Need to create a routine to select preset matches
;02/04/02	P1 is getting sprite info from the wrong location once it starts animating.. why?

       
	 processor 6502
	 include vcs.h

; ES RIOT registers

Swacnt	=	$0281
Swbcnt	=	$0283

; ROM definitions
;


RomStart	=     $F000
RomEnd          =     $FFFF
IntVectors      =     $FFFA

;####################################################################################################
;####################################################################################################
;Game Constants
;####################################################################################################

;X constants

ScreenWide	=	160	;width of playfield
XLeft		=	8	;players leftmost possible position
XRight		=	152	;players rightmost possible position

;length of a jump

JumpLength	=	30	;once this is implemented it can be adjusted

;####################################################################################################

;Y constants

;screen objects sizes

P0Height	=	24	
P1Height	=	24	
ScoreHeight	=	8

;pre-defined y positions (ground and 2 platform heights)

Ground		=	108	;this is how far the player is from the top of the screen when on the ground
Platform1	=	81	;this is how far the player is from the top of the screen when on the 1st platform
Platform2	=	65	;this is how far the player is from the top of the screen when on the 2nd platform

;P0 Pattern Ids these are going to be set up as Mario and Harry at first (P0 Mario) (P1 Harry)

P0Standing	=	0
P0Running1	=	1
P0Running2	=	2
P0Running3	=	3
P0Running4	=	4
P0Running5	=	5
P0Jumping	=	6

P1Standing	=	0
P1Running1	=	1
P1Running2	=	2
P1Running3	=	3
P1Running4	=	4
P1Running5	=	5
P1Jumping	=	6


; game variables

s1 	= 	$80	; from ES Bigmove
s2      =       $82	; from ES Bigmove
s3      =       $84	; from ES Bigmove
s4      =       $86	; from ES Bigmove
s5      =       $88	; from ES Bigmove
s6      =       $8A	; from ES Bigmove
DelayPTR  =     $8C	; from ES Bigmove
LoopCount =     $8E	; from ES Bigmove
TopDelay  =     $8F	; from ES Bigmove replaces TOP
YPos0 	=	$90  	;This is the starting Y position of sprite 0
YPos1 	=       $91	;This is the starting Y position of sprite 1
ScanLine =       $92     ;This is a Scanline counter
P0Size =       $93     ;This is how many scanlines sprite 0 is
P1Size = 	$94	;This is how many scanlines sprite 1 is
BLKSIZE =       $95     ;This is the size of a playfield block
BLOCK   =       $96     ;This is the block # (blksize*(block+1)=192)
VCOUNT  =	$97	;this is the counter for calculating where the baby is vertically
BottomDelay = 	$98 	;ES bigmove replaces BOTTOM
MoveCount = 	$99	;ES bigmove
Temp	=	$9A	;ES bigmove replaces FIRE
Mode	=	$9B	;0=loading screen, 1=title screen 2=game play
LoadingUD = 	$9C	;0=loading goes down 1= loading goes up
StopCount =	$9D	;stopping animation for P0
P0Move	=	$9E	;Value for player 0 movement
P1Move	=	$9F	;value for player 1 movement
LoopCount1 =	$A0
P0PatPtr  = 	$A1	;Pointer to P0 patterns
P1PatPtr  =	$A3	;Pointer to P1 patterns
P0PatId   =	$A5	;id of current animation frame P0
P1PatId	  =	$A7	;id of current animation frame P1

;##################################################################
; The following bits are lifted from Eckhard Stolberg's Bigmove demo
; My goal is to incorporate this into the opening screen and then modify the
; code to suit my purposes.  Thanks to Eckhard for this code
; CODE (MOSTLY) REMOVED for now


; Program initialization
;
        	ORG  RomStart

Cart_Init:
		SEI				; Disable interrupts.:
		CLD				; Clear "decimal" mode.
	   	LDX  	#$FF
        	TXS
        	LDA  	#$00
Zero:    	STA  	$00,X      		;zero out all addresses
        	DEX
        	BNE  	Zero
		LDA  	#75      
        	STA  	YPos0			;set up the starting vertical position of sprite 1
		STA  	YPos1			;set up the starting vertical position of sprite 2
		LDX	#P0Standing
 		STX    	P0PatId		; 3
    		LDA     MarioPtrTab,x   ; 4
    		STA     P0PatPtr        ; 3
   		LDA     #>Mario1        ; 2
    		STA     P0PatPtr+1    ; 3
		LDX	#P1Standing
 		STX    	P1PatId		; 3
    		LDA     PitPtrTab,x   ; 4
    		STA     P1PatPtr        ; 3
    		LDA     #>Pit1        ; 2
    		STA     P1PatPtr+1    ; 3
		LDA	#5
		STA	LoopCount	
		STA     LoopCount1
		LDA	#8
		STA 	StopCount

vertb:        	LDA  	#$02
        	STA  	WSYNC
        	STA  	WSYNC
        	STA  	WSYNC
        	STA  	VSYNC
        	STA  	WSYNC
        	STA  	WSYNC      	;
        	STA 	HMOVE      	;
        	LDA  	#44       	;
        	STA  	TIM64T     	;set timer
        	LDA  	#$00       	;
        	STA  	CXCLR		;clear collision registers
        	LDA  	#191       	;reset the Scanline counter  to 191
		STA     ScanLine
        	LDA  	#24       	;reset the number of sprite lines.. this is the height of P0.
        	STA  	P0Size
		STA  	P1Size
		LDA  	#0
		STA  	WSYNC
        	STA  	VSYNC


scrnvar: 	LDA  	#$75   		;0+2=[2] 	set background colour blue
        	STA  	COLUBK		;2+3=[5]	
        	LDA  	#$01		;5+2=[8]	set this to 1
        	STA  	CTRLPF		;8+3=[11]	to reflect the playfield
;		LDA	#$06
;		STA	COLUPF

draw:    	LDA  	INTIM		;11+3=[14]
        	BNE  	draw		;14+3=[17]
        	STA  	WSYNC		;0
        	STA  	VBLANK    	;0

load:    	LDX  	BLOCK     	;0+3=[3]			3+3=[6]< from newblk
        	LDA  	MarioPF0,X  	;3+4=[7]			6+4=[10]
        	STA  	PF0 		;7+3=[10]			10+3=[13]
        	LDA  	MarioColPFL,X	;10+4=[14] 			13+4=[17]
        	STA  	COLUPF		;14+3=[17] 			17+3=[20]
        	LDA  	MarioPF1,X    	;17+4=[21]			20+4=[24]
        	STA  	PF1         	;21+3=[24]			24+3=[27]
		LDA  	MarioPF2,X	;24+4=[28]			27+4=[31]
		STA  	PF2		;28+3=[31] 			31+3=[34]


grfx1:		DEC     ScanLine	;31+3=[34]	5+3=[8] <grfx2	34+3=[37]
		LDA  	YPos0    	;34+3=[37] 	8+3=[11]	37+3=[40]
	       	CMP  	ScanLine	;37+3=[40] 	11+3=[14]	40+3=[43]
        	BPL  	sprite1		;40+2=[42]<  	14+2=[16]<	43+2=[45]<	if not taken
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP

grfx2: 		STA  	WSYNC      	;				If not then draw then scanline
        	BEQ  	newblk     	;		0+2=[2]*	or is it time for a new block? THIS DOESN'T MAKE ANY SENSE!
        	JMP  	grfx1      	;		2+3=[5]		get ready for next scanline

sprite1: 	LDY  	P0Size		;42+3=[45]	19+3=[22]	45+3
       		BEQ  	nosprt1    	;45+2=[47]*	22+2=[24]*	48+2*	See if we're finished drawing the sprite.
		LDA  	(P0PatPtr),Y   	;47+5=[52]	24+5=[29]	50+5	If not then load the sprite data.
        	STA  	GRP0		;52+3=[55]	29+3=[32]	55+3
		LDA  	MarioCol,Y	;55+4=[59]	32+4=[36]	58+4
		STA  	COLUP0     	;59+3=[62]	36+3=[39]	62+3	set up sprite colours P0
        	DEC  	P0Size    	;62+3=[65]	39+3=[42]	65+3	get set up for next sprite line
	 	LDY  	P1Size		;65+3=[68]	42+3=[45]	68+3
        	BEQ  	nosprt2    	;68+2=[70]*	45+2=[47]*	71+2*	See if we're finished drawing the sprite.
        	LDA  	(P1PatPtr),Y   	;70+5=[75]	47+5=[52]	73+5	If not then load the sprite data.
        	STA  	GRP1		;75+3=[78]	52+3=[55]	78+3
		LDA  	PitCol,Y	;78+4=[82]	55+4=[59]	81+4
		STA  	COLUP1     	;82+3=[85]	59+3=[62]	85+3	set up sprite colours P0
 		DEC  	P1Size    	;85+3=[88]	62+3=[65]	88+3	get set up for next sprite line
        	JMP  	grfx2      	;88+3=[91]<	65+3=[68]<	91+3=[94]<	go draw current scanline

nosprt1: 	LDA  	#$00       	;47+2=[49]	24+2=[26]	50+2	if we're finished with the sprite then
        	STA  	GRP0       	;49+3=[52]	26+3=[29]	52+3	just fill the sprite with zeros.
        	JMP  	grfx2      	;52+3=[55]<<	29+3=[32]<<	55+3=[58]<<	add some NOPs here?

nosprt2: 	LDA  	#$00       	;70+2=[72]	47+2=[49]	73+2	if we're finished with the sprite then
	     	STA  	GRP1       	;72+3=[75]	49+3=[52]	75+3	just fill the sprite with zeros.
        	JMP  	grfx2      	;75+3=[78]<<<	52+3=[55]<<<	78+3=[81]<<<	then draw the scanline.

newblk:  	LDA  	BLOCK     	;5+3=[8]				check to see if we've finished drawing the screen
        	BEQ  	clear		;8+2=[10]*
        	DEC  	BLOCK      	;10+3=[13]				get ready for the next playfield block
        	LDA  	#$02		;13+2=[15]
        	STA  	BLKSIZE		;15+3=[18]
		STA 	WSYNC		;					added 020202 YEAH! now the PF is finally level!
        	JMP  	load		;18+3=[21]

clear:   	LDA  	#$02       	;10+2=[12]				all done the screen.
        	STA  	WSYNC		
        	STA  	VBLANK

oscan:   	
joy0:     	LDA 	#$00		;set player move value to zero
		STA	GRP0
		STA	GRP1
		STA	PF0
		STA	PF1
		STA	PF2
		STA     P0Move
        	LDA  	SWCHA 		;     
        	ASL
        	BCC 	P0Right
        	ASL
        	BCC 	P0Left
        	ASL
		BCC	P0Up
		ASL
		BCC	P0Down
		LDX	#03 		;attempt to have player revert to standing position after movement is done - works
		STX	P0PatId
		LDA	MarioPtrTab,x
		STA	P0PatPtr
		LDA	StopCount
		BPL	SameFrame0
		LDX	#00 		;attempt to have player revert to standing position after movement is done - works
		STX	P0PatId
		LDA	MarioPtrTab,x
		STA	P0PatPtr
		
P0Up:		JMP	P0Read
		

P0Down:		JMP	P0Read

P0Right:   	LDA	#$00
		STA	REFP0		;this is a good speed for player 0
		LDA  	#$f0       	;set horizontal motion register to one pixel right
		STA	P0Move		;load to player move variable
		LDA	LoopCount
		BPL	SameFrame0
		LDA	#8
		STA	StopCount
		LDA	#5
		STA 	LoopCount
		LDX	P0PatId
		INX
		STX	P0PatId
    		LDA     MarioPtrTab,x   ; 4
    		STA     P0PatPtr        ; 3	
		LDA	#5
		CMP	P0PatId
		BEQ	ResetPtr0R	
		JMP	P0Read



P0Left:    	LDA	#$08
		STA	REFP0		;this speed is okay for player 0
		LDA  	#$10       	;set horizontal motion register to one pixel left
		STA	P0Move
		LDA	LoopCount
		BPL	SameFrame0
		LDA	#5
		STA	LoopCount
		LDA	#8
		STA 	StopCount
		LDX	P0PatId
		INX
		STX	P0PatId
    		LDA     MarioPtrTab,x   ; 4
    		STA     P0PatPtr        ; 3	
		LDA	#5
		CMP	P0PatId
		BEQ	ResetPtr0L	
		JMP	P0Read


SameFrame0:
		JMP	P0Read

NoButton0: 	LDA	#$45
		STA     COLUBK
		JMP	P0Read


    
ResetPtr0R:	LDA	#$00
		STA    	P0PatId
		JMP	P0Read


ResetPtr0L:	LDA	#$00
		STA    	P0PatId
		JMP	P0Read


P0Read:		LDA	P0Move
		STA  	HMP0       	;moves P0 depending on the direction pressed on joystick


joy1:     	LDA 	#$00		;set player move value to zero
		STA	P1Move
        	LDA  	SWCHA 		;     
        	ASL
        	ASL
        	ASL
		ASL
		ASL
		BCC	P1Right
		ASL
		BCC	P1Left
		ASL
		BCC	P1Up
		ASL
		BCC	P1Down
		LDX	#00 		;attempt to have player revert to standing position after movement is done - works
		STX	P1PatId
		LDA	PitPtrTab,x
		STA	P1PatPtr		
;		LDA 	INPT5 		;read the button- no implementation yet
;		BMI 	NoButton1
		JMP 	P1Read
    
P1Up:
		JMP 	P1Read

P1Down:
		JMP 	P1Read

P1Right:   	LDA	#$00
		STA	REFP1			;face player right
		LDA     #$F0  		       	;set horizontal motion register to one pixel right
		STA	P1Move			;this is a good speed for player 1
		LDA	LoopCount1		;check to see if it is time to draw a new frame...
		BPL	SameFrame1		;if not - - go on with same
		LDA	#5			;if so - reset loopcount1
		STA	LoopCount1
		LDX	P1PatId			;load the value of player1 pattern id to x
		INX				;increase x by one
		STX	P1PatId			;store the value of x to player1 pattern id
		LDA     PitPtrTab,x   		;load the xth value of PitPtrTab to A
    		STA     P1PatPtr        	;store the value in player1 pattern pointer	  
 		LDA	#5
		CMP	P1PatId
		BMI	ResetPtr1R	
		JMP 	P1Read

P1Left:		LDA	#$08
		STA	REFP1		;this speed is okay for player 1
	    	LDA  	#$10       	;set horizontal motion register to one pixel left
		STA     P1Move	
		LDA	LoopCount1
		BPL	SameFrame1
		LDA	#5
		STA 	LoopCount1
		LDX	P1PatId
		INX
		STX	P1PatId
    		LDA     PitPtrTab,x   ; 4
    		STA     P1PatPtr        ; 3	
		LDA	#5
		CMP	P1PatId
		BEQ	ResetPtr1L	
		JMP 	P1Read

SameFrame1:
		JMP 	P1Read

NoButton1: 	LDA	#$45
		STA     COLUBK
		JMP 	P1Read

ResetPtr1R:	LDA	#00
		STA    	P1PatId
		JMP 	P1Read

ResetPtr1L:	LDA	#00
		STA    	P1PatId
		JMP 	P1Read

P1Read:		LDA	P1Move
		STA  	HMP1       	;moves P1 depending on joystick 2
		DEC	LoopCount
        	DEC     LoopCount1
		DEC     StopCount
;		LDA  	#$06       	;reset the variables.
;        	STA  	BLKSIZE    	;and other stuff.
        	LDA  	#30
        	STA  	BLOCK
        	LDX  	#$1E

waste:   	STA  	WSYNC
        	DEX
        	BNE  	waste
		JMP 	vertb




	ORG $F300
;#######################################################################################
;Playfield Data
;#######################################################################################


MarioPF0:	.byte 	$E0,$E0,$E0,$E0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
		.byte	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
       		.byte 	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$C0,$00,$00
       		.byte 	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
MarioPF1:	.byte	$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
		.byte	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
       		.byte 	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$00,$00
       		.byte 	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
MarioPF2:	.byte	$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
		.byte	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FE,$00
       		.byte 	$00,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
       		.byte 	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00

MarioColPFL	.byte	$44,$44,$44,$44,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E
		.byte	$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E

MarioColPFR	.byte	$44,$44,$44,$44,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E
		.byte	$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E,$4E
	
PFLColor  	.byte 	$19,$19,$19,$19,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F

PFRColor  	.byte 	$7F,$7F,$7F,$7F,$7D,$60,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10

	ORG	$F500
;#######################################################################################
;Player Data
;#######################################################################################

;Adventure Characters and items

Bat1:		.byte	$00,$66,$5A,$FF,$C3,$C3,$81,$81,$81,$42  	;wings up
Bat2:		.byte	$00,$81,$81,$C3,$66,$5A,$3C,$81,$00,$81		;wings down

Rhindle1:	.byte	$00,$00,$3F,$E1,$8F,$08,$3C,$FF,$C7,$C3,$C3,$E3,$7F,$3F,$1E,$04,$04,$0E,$FE,$F3,$0F,$06,$00,$00	;22 tall, normal pose
Rhindle2:	.byte	$E0,$80,$F8,$08,$1C,$3E,$7F,$7F,$7F,$7F,$3F,$1E,$8E,$44,$24,$1E,$0E,$0B,$1F,$26,$40,$80,$00,$00	;bite pose
Rhindle3:	.byte	$7E,$42,$6E,$20,$78,$7E,$FE,$FE,$FC,$80,$CE,$7F,$1B,$0E,$0C,$0C,$0C,$00,$00,$00,$00,$00,$00,$00	;dead pose

Square:		.byte	$7C,$7C,$7C,$7C,$7C,$7C 		; 6 tall

Sword:		.byte	$20,$40,$FF,$40,$20 			; 5 tall

Magnet:		.byte	$C3,$C3,$C3,$C3,$C3,$E7,$7E,$3C  	; 8 tall

;#######################################################################################

;Asteroids animations

Ast1:		.byte	$00,$00,$00,$00,$00,$00,$10,$10,$38,$38,$7C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00			; facing down
Ast2:		.byte	$00,$00,$00,$00,$00,$00,$20,$30,$38,$3C,$30,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00			; rotate right one
Ast3:		.byte	$00,$00,$00,$00,$00,$00,$40,$30,$3C,$18,$10,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Ast4:		.byte   $00,$00,$00,$00,$00,$00,$40,$3E,$1C,$0C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Ast5:		.byte	$00,$00,$00,$00,$00,$00,$04,$1C,$FC,$1C,$04,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Ast6:		.byte	$00,$00,$00,$00,$00,$00,$0C,$1C,$3E,$40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Ast7:		.byte	$00,$00,$00,$00,$00,$00,$10,$18,$3C,$30,$40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Ast8:		.byte	$00,$00,$00,$00,$00,$00,$30,$3C,$38,$30,$20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Ast9:		.byte	$00,$00,$00,$00,$00,$00,$7C,$38,$38,$10,$10,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Ast10:		.byte	$80,$04,$A2,$00,$20,$81,$22,$10,$04	; blow up sprite
Ast11:		.byte	$38,$44,$54,$44,$38			; Shield on!

;#######################################################################################

;Circus Sprites

Circus1:	.byte 	$00,$82,$44,$38,$10,$10,$38,$54,$92,$38,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00		;10 high standing pose
Circus2:	.byte 	$00,$82,$44,$38,$12,$14,$38,$50,$90,$38,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00		;animation
Circus3:	.byte 	$00,$22,$24,$38,$90,$50,$38,$14,$12,$38,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Circus4:	.byte	$00,$28,$28,$38,$92,$54,$38,$10,$10,$38,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Circus5:	.byte	$00,$FF,$FF,$10,$10,$38,$44,$82,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00		;7 high death animation
Circus6:	.byte	$00,$FF,$FF,$14,$12,$38,$44,$82,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00		; death cont
Circus7:	.byte	$00,$FF,$FF,$50,$90,$38,$24,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00		; Still more death!
Circus8:	.byte	$00,$FF,$FF,$54,$92,$38,$28,$28,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00		; Dead!

;#######################################################################################

;Combat Sprites

Tank1:		.byte	$00,$FC,$FC,$38,$3F,$38,$FC,$FC,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00		;7 high facing right
Tank2:		.byte	$00,$1C,$78,$FB,$7C,$1C,$1F,$3E,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00		;8 high rotate right
Tank3:		.byte	$00,$19,$3A,$7C,$FF,$DF,$0E,$1C,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00		;rotate right some more
Tank4:		.byte	$00,$24,$64,$79,$FF,$FF,$4E,$0E,$04,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00		;rotate right some more
Tank5:		.byte	$00,$08,$08,$6B,$7F,$7F,$7F,$63,$63,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00		;face down
Tank6:		.byte	$00,$24,$26,$9E,$FF,$FF,$72,$70,$20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Tank7:		.byte	$00,$98,$5C,$3E,$FF,$FB,$70,$38,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Tank8:		.byte	$00,$38,$1E,$DF,$3E,$38,$F8,$7C,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00

;#######################################################################################
	ORG $F800
;Mario!

Mario1:		.byte	$00,$3B,$36,$36,$36,$3E,$3E,$3E,$3E,$DE,$DF,$7D,$3C,$18,$3C,$7E,$70,$57,$5E,$50,$18,$7E,$38,$18 ;23 high standing
Mario2:		.byte	$00,$00,$80,$80,$E7,$FF,$3D,$3C,$0E,$6F,$6F,$7D,$3C,$18,$3C,$7E,$70,$57,$5E,$50,$18,$7E,$38,$18 ;Running 1
Mario3:		.byte	$00,$18,$33,$33,$37,$0E,$1E,$06,$3A,$3A,$24,$3C,$3C,$18,$3C,$7E,$70,$57,$5E,$50,$18,$7E,$38,$18 ;Running 2	
Mario4:		.byte	$00,$47,$46,$06,$0E,$1C,$3C,$3C,$3C,$DC,$DC,$F8,$78,$30,$78,$FC,$E0,$AE,$BC,$A0,$30,$FC,$70,$30 ;Running 3
Mario5:		.byte	$00,$00,$00,$80,$80,$F0,$FF,$3B,$3D,$DD,$DC,$FE,$7F,$19,$3D,$7E,$70,$57,$5E,$50,$18,$FC,$70,$30 ;running 4
Mario6:		.byte	$00,$18,$33,$33,$37,$0E,$1E,$06,$3A,$3A,$24,$3C,$3C,$18,$3C,$7E,$70,$57,$5E,$50,$18,$7E,$38,$18 ;Running 2 repeat	
Mario7:		.byte	$00,$00,$00,$36,$36,$3E,$3E,$3E,$3E,$DE,$DF,$7D,$3C,$18,$3C,$7E,$70,$57,$5E,$50,$18,$7E,$38,$18	;jumping

MarioCol:	.byte	$22,$22,$72,$72,$72,$72,$72,$72,$45,$45,$45,$45,$45,$45,$3F,$3F,$3F,$3F,$3F,$3F,$3F,$72,$72,$72
;#######################################################################################

;Pitfall Harry 21 tall
Pit1:		.byte	$00,$18,$10,$1C,$18,$18,$18,$18,$18,$18,$18,$18,$18,$1C,$1E,$1A,$18,$18,$10,$18,$18,$18,$00,$00	;Stand
Pit2:		.byte	$00,$00,$00,$00,$00,$00,$33,$72,$DA,$1E,$1C,$18,$58,$58,$7C,$3E,$1A,$18,$10,$18,$18,$18,$00,$00	;jump/kneel
Pit3:		.byte	$00,$00,$02,$43,$44,$74,$14,$1C,$1C,$18,$18,$18,$3C,$3E,$3A,$38,$18,$18,$10,$18,$18,$18,$00,$00	;run4
Pit4:		.byte	$00,$00,$08,$28,$28,$3E,$0A,$0E,$1C,$18,$18,$1C,$1C,$18,$18,$18,$18,$18,$10,$18,$18,$18,$00,$00	;run3
Pit5:		.byte	$00,$00,$20,$22,$24,$34,$32,$16,$1E,$1C,$18,$18,$1C,$1C,$18,$18,$18,$18,$10,$18,$18,$18,$00,$00	;run2
Pit6:		.byte	$00,$00,$80,$80,$C3,$62,$62,$36,$3E,$1C,$18,$18,$3C,$3E,$3A,$38,$18,$18,$10,$18,$18,$18,$00,$00	;run1
Pit7:		.byte	$00,$00,$00,$00,$00,$00,$00,$63,$F2,$F6,$DC,$C0,$C0,$C0,$C0,$C0,$F0,$D0,$90,$D0,$D0,$C0,$00,$00	;swing

PitCol:		.byte	$00,$C4,$C4,$C4,$C4,$C4,$C4,$C4,$C4,$C4,$C4,$C4,$CF,$CF,$CF,$CF,$CF,$CF,$CF,$3F,$3F,$23,$00,$00
;#######################################################################################;Ms PacMan

MsPac1:		.byte	$00,$00,$00,$00,$00,$00,$5C,$BE,$77,$57,$77,$63,$63,$41,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00	;facing up open mouth
MsPac2:		.byte	$00,$00,$00,$00,$00,$00,$5C,$BE,$77,$57,$77,$77,$63,$63,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00
MsPac3:		.byte	$00,$00,$00,$00,$00,$00,$5C,$BE,$7F,$5F,$7F,$7F,$7F,$7F,$3E,$1C,$00,$00,$00,$00,$00,$00,$00,$00 ;facing up closed
MsPac4:		.byte	$00,$00,$00,$00,$00,$00,$1C,$38,$78,$70,$60,$60,$70,$68,$B8,$5C,$00,$00,$00,$00,$00,$00,$00,$00 ;facing right wide open
MsPac5:		.byte	$00,$00,$00,$00,$00,$00,$1C,$3E,$7E,$78,$60,$60,$78,$6E,$BE,$5C,$00,$00,$00,$00,$00,$00,$00,$00 ;facing right part closed
MsPac6:		.byte	$00,$00,$00,$00,$00,$00,$1C,$3E,$7F,$7F,$7F,$7F,$7F,$6F,$BE,$5C,$00,$00,$00,$00,$00,$00,$00,$00 ;facing right closed
MsPac7:		.byte	$00,$00,$00,$00,$00,$00,$00,$00,$82,$C6,$C6,$EE,$EA,$EE,$7D,$3A,$00,$00,$00,$00,$00,$00,$00,$00	;facing down open mouth
MsPac8:		.byte	$00,$00,$00,$00,$00,$00,$00,$44,$C6,$C6,$EE,$EE,$EA,$EE,$7D,$3A,$00,$00,$00,$00,$00,$00,$00,$00 ;facing down part closed
MsPac9:		.byte	$00,$00,$00,$00,$00,$00,$38,$7C,$FE,$FE,$FE,$FE,$FA,$FE,$7D,$3A,$00,$00,$00,$00,$00,$00,$00,$00	;facing down closed
MsPac10:	.byte	$00,$00,$00,$00,$00,$00,$38,$1C,$1E,$0E,$06,$06,$0E,$16,$1D,$3A,$00,$00,$00,$00,$00,$00,$00,$00	;left wide open
MsPac11:	.byte	$00,$00,$00,$00,$00,$00,$38,$7C,$7E,$1E,$06,$06,$1E,$76,$7D,$3A,$00,$00,$00,$00,$00,$00,$00,$00	;left part closed
MsPac12:	.byte	$00,$00,$00,$00,$00,$00,$38,$7C,$FE,$FE,$FE,$FE,$FE,$F6,$7D,$3A,$00,$00,$00,$00,$00,$00,$00,$00	;left closed


;#######################################################################################

;Pacman

Pac1:		.byte	$00,$00,$00,$00,$00,$00,$38,$7C,$FE,$FE,$FE,$6C,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Pac2:		.byte	$00,$00,$00,$00,$00,$00,$38,$7C,$FE,$E0,$FE,$6C,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Pac3:		.byte	$00,$00,$00,$00,$00,$00,$38,$7E,$E0,$C0,$E0,$6C,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00

Pacdie1:	.byte	$00,$00,$00,$00,$00,$00,$3C,$7E,$C3,$C3,$E7,$66,$24,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Pacdie2:	.byte	$00,$00,$00,$00,$00,$00,$18,$3C,$7E,$E7,$E7,$C3,$C3,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Pacdie3:	.byte	$00,$00,$00,$00,$00,$00,$3C,$7E,$E7,$C3,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Pacdie4:	.byte	$00,$00,$00,$00,$00,$00,$FF,$7E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Pacdie5:	.byte	$00,$00,$00,$00,$00,$00,$14,$08,$14,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
Pacdie6:	.byte	$00,$00,$00,$00,$00,$00,$14,$22,$00,$41,$00,$41,$00,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00

Eyes:		.byte	$E7,$A5,$E7

;#######################################################################################
	

;Yar 8 tall

Yar1:		.byte	$00,$00,$00,$00,$00,$00,$24,$18,$24,$24,$7E,$5A,$DB,$3C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00	;down,wings down
Yar2:		.byte	$00,$00,$00,$00,$00,$00,$20,$30,$ED,$47,$2C,$3F,$17,$36,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00	;down right, wings down
Yar3:		.byte	$00,$00,$00,$00,$00,$00,$02,$0E,$99,$67,$67,$99,$0E,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00	;right, wings down
Yar4:		.byte	$00,$00,$00,$00,$00,$00,$36,$17,$3F,$2C,$47,$ED,$30,$20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;up right, wings down
Yar5:		.byte	$00,$00,$00,$00,$00,$00,$3C,$DB,$5A,$7E,$24,$24,$18,$24,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;up, wings down
Yar6:		.byte	$00,$00,$00,$00,$00,$00,$24,$99,$A5,$E7,$18,$18,$18,$3C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00	;down , wings up
Yar7:		.byte	$00,$00,$00,$00,$00,$00,$20,$37,$EC,$44,$2C,$FF,$87,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00	;down right, wings up
Yar8:		.byte	$00,$00,$00,$00,$00,$00,$38,$08,$99,$67,$67,$99,$08,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00	;right, wings up
Yar9:		.byte	$00,$00,$00,$00,$00,$00,$06,$87,$FF,$2C,$44,$EC,$37,$20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00	;up right, wings up
Yar10:		.byte	$00,$00,$00,$00,$00,$00,$3C,$18,$18,$18,$E7,$A5,$99,$24,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00	;up, wings up

;#######################################################################################
;#######################################################################################

;Player Pointer Tabs

	
MarioPtrTab:
		.byte	<Mario1
		.byte	<Mario2
		.byte	<Mario3
		.byte	<Mario4
		.byte	<Mario5
		.byte	<Mario6
		.byte	<Mario7

;#######################################################################################

PitPtrTab:
		.byte	<Pit1
		.byte	<Pit2
		.byte	<Pit3
		.byte	<Pit4
		.byte	<Pit5
		.byte	<Pit6
		.byte	<Pit7

;#######################################################################################

AstPtrTab:
		.byte	<Ast1
		.byte	<Ast2
		.byte	<Ast3
		.byte	<Ast4
		.byte	<Ast5
		.byte	<Ast6
		.byte	<Ast7

;#######################################################################################

CircusPtrTab:
		.byte	<Circus1
		.byte	<Circus2
		.byte	<Circus3
		.byte	<Circus4
		.byte	<Circus2
		.byte	<Circus6
		.byte	<Circus7

;#######################################################################################

TankPtrTab:
		.byte	<Tank1
		.byte	<Tank2
		.byte	<Tank3
		.byte	<Tank4
		.byte	<Tank5
		.byte	<Tank6
		.byte	<Tank7

;#######################################################################################

MsPacPtrTab:
		.byte	<MsPac4
		.byte	<MsPac5
		.byte	<MsPac6
		.byte	<MsPac5
		.byte	<MsPac4
		.byte	<MsPac5
		.byte	<MsPac6

;#######################################################################################

PacPtrTab:
		.byte	<Pac1
		.byte	<Pac2
		.byte	<Pac3
		.byte	<Pac1
		.byte	<Pac2
		.byte	<Pac3
		.byte	<Pac2

;#######################################################################################

YarPtrTab:
		.byte	<Yar1
		.byte	<Yar2
		.byte	<Yar3
		.byte	<Yar1
		.byte	<Yar2
		.byte	<Yar3
		.byte	<Yar2

;#######################################################################################

RhindlePtrTab:
		.byte	<Rhindle1
		.byte	<Rhindle2
		.byte	<Rhindle3
		.byte	<Rhindle1
		.byte	<Rhindle2
		.byte	<Rhindle3
		.byte	<Rhindle2

P0PtrTab:

		.word	<MarioPtrTab		;1	
		.word	<PitPtrTab		;2
		.word	<MsPacPtrTab		;3	
		.word	<PacPtrTab		;4
		.word	<YarPtrTab		;5
		.word	<AstPtrTab		;6
		.word	<TankPtrTab		;7
		.word	<CircusPtrTab		;8
		.word	<RhindlePtrTab		;9

P1PtrTab:

		.word	<MarioPtrTab		;1	
		.word	<PitPtrTab		;2
		.word	<MsPacPtrTab		;3	
		.word	<PacPtrTab		;4
		.word	<YarPtrTab		;5
		.word	<AstPtrTab		;6
		.word	<TankPtrTab		;7
		.word	<CircusPtrTab		;8
		.word	<RhindlePtrTab		;9

		ORG 	IntVectors

NMI             .word   Cart_Init
Reset           .word   Cart_Init
IRQ             .word   Cart_Init	



Attachment: smash0803.bin
Description: Binary data

Current Thread