|
Subject: Sprite graphics From: Kevin Lipe <kevin.lipe@xxxxxxxxx> Date: Mon, 11 Oct 2004 01:52:55 -0500 |
OK, So I took the advice given me in the other thread that I started, "Confused newbie..." and read back through the Stella Programmer's Guide, Andrew Davie's tutorials, and 2600 101, and I've gotten to the end of Andrew's tutorials and I don't know what's happening. I've got the code to display the "Bad Llama" sprite working, and something appears and moves across the screen like it's supposed to, but... the graphics are all screwed up and I have no idea why. Just so all the labels and stuff in the code make sense to whoever may be looking at this code, heres my description of this game, "Super Killer Attack Llamas." >The new game, tentatively titled Super Killer Attack Llamas, is kinda like a cross between Space Invaders and Yars Revenge, i guess... basically the player is Good Llama, at the bottom of the screen, and they're fighting Bad Llama at the top of the screen. Bad Llama is shooting down at Good Llama, who has a few playfield objects to hide behind, and must use the cover to shoot up at Bad Llama... that's really it. Bad Llama occupies 10 scanlines and Good Llama occupies 10 scanlines, and they both can only move horizontally, so there's no need to Vertical positioning because they will -always- be on those scanlines... I've pored over this code several times, and can't find what's wrong with it at all. Thanks! ~ kevin
LIST OFF
;============================================================================
; S U P E R K I L L E R A T T A C K L L A M A S
; aka "Killing Me Softly"
;
; (c)2004 Kevin Lipe
;============================================================================
; COMPILE WITH:
; dasm llama.asm -f3 -v5 -ollama.bin
;============================================================================
processor 6502
include vcs.h
include macro.h
LIST ON
;===============================================================================
; A S S E M B L E R S W I T C H E S
;===============================================================================
NTSC = 0
PAL = 1
COMPILE_VERSION = NTSC ; change this to compile for different
; regions
FILL_OPT = 1 ; fills the optimized space with NOPs
;============================================================================
; T I A C O N S T A N T S
;============================================================================
HMOVE_L7 = $70
HMOVE_L6 = $60
HMOVE_L5 = $50
HMOVE_L4 = $40
HMOVE_L3 = $30
HMOVE_L2 = $20
HMOVE_L1 = $10
HMOVE_0 = $00
HMOVE_R1 = $F0
HMOVE_R2 = $E0
HMOVE_R3 = $D0
HMOVE_R4 = $C0
HMOVE_R5 = $B0
HMOVE_R6 = $A0
HMOVE_R7 = $90
HMOVE_R8 = $80
; values for ENAMx and ENABL
DISABLE_BM = %00
ENABLE_BM = %10
; values for NUSIZx
ONE_COPY = %000
DOUBLE_SIZE = %101
QUAD_SIZE = %111
MSBL_SIZE1 = %000000
MSBL_SIZE2 = %010000
MSBL_SIZE4 = %100000
MSBL_SIZE8 = %110000
; values for REFPx
NO_REFLECT = %0000
REFLECT = %1000
; mask for SWCHB
P1_DIFF_MASK = %10000000
BW_MASK = %00001000 ; black and white bit
SELECT_MASK = %00000010
RESET_MASK = %00000001
; SWCHA joystick bits
MOVE_RIGHT = %1000
MOVE_LEFT = %0100
MOVE_DOWN = %0010
MOVE_UP = %0001
NO_MOVE = %11111111
; general constants
SCREEN_WIDTH = 160 ; width of screen, in pixels
NUM_DIGITS = 4 ; number of digits in the score
;============================================================================
; U S E R C O N S T A N T S
;============================================================================
; frame time values
VBLANK_TIME = $2C
; color constants
BLACK = $00
WHITE = $0E
GREEN_BLUE = $A0
RED = $30
YELLOW = $1E
GREEN = $C0
BLUE = $90
LIGHT_BLUE = $80
PURPLE = $60
BROWN = $E0
; game state values
SYSTEM_POWERUP = %00001010
GAME_RUNNING = %11111111
; illegal opcodes allowed
NO_ILLEGAL_OPCODES = 0
; height of the llama sprites
SpriteHeight = 10
;============================================================================
; Z P - V A R I A B L E S
;============================================================================
SEG.U VARS
ORG $80
CTRLPF_shadow ds 1 ; CTRLPF shadow copy
GoodLlamaHPos ds 1 ; Good Llama's horizontal position
BadLlamaHPos ds 1 ; Bad Llama's horizontal position
BadMissleHPos ds 1 ; Bad Llama's bullet's horizontal position
BadMissleVPos ds 1 ; Bad Llama's bullet's vertical position
GoodMissleHPos ds 1 ; Good Llama's bullet's horizontal position
GoodMissleVPos ds 1 ; Good Llama's bullet's vertical position
echo "----",($100 - *) , "bytes of RAM left" ; DASM tells how many bytes of RAM are left.
;===============================================================================
; M A C R O S
;===============================================================================
MAC FILL_NOP
IF FILL_OPT
REPEAT {1}
NOP
REPEND
ENDIF
ENDM
;============================================================================
; R O M C O D E
;============================================================================
SEG Bank0
ORG $F000
Reset
CLEAN_START
;------------------------------------------------
; Once-only initialisation...
lda #YELLOW ; player 0 color = yellow
sta COLUP0
lda #RED ; player 1 color = red
sta COLUP1
lda #LIGHT_BLUE ; playfield color = light blue
sta COLUPF
lda #%10000001 ; Set both shadow copy and CTRLPF to "mirror" mode,
sta CTRLPF_shadow ; the playfield and ball have priority.
sta CTRLPF
lda #$00 ; clear graphics registers
sta PF0
sta PF1
sta PF2
sta GRP0
sta GRP1
ldy #0 ; zeroes out Y
;---------------------------------------
StartOfFrame
; Start of new frame
; Start of vertical blank processing
lda #0
sta VBLANK
lda #2
sta VSYNC
sta WSYNC
sta WSYNC
sta WSYNC ; 3 scanlines of VSYNC signal
lda #0
sta VSYNC
;------------------------------------------------
; 37 scanlines of vertical blank...
ldx #37
VerticalBlank sta WSYNC
dex
bne VerticalBlank
;------------------------------------------------
; The kernel
lda #%11111111
sta PF0
sta PF1
sta PF2
sta WSYNC ; top line of playfield
;------------------------
lda #%00010000
sta PF0
lda #0
sta PF1
sta PF2
sta WSYNC
; Now adjust the sprite position
inc BadLlamaHPos
ldx BadLlamaHPos
cpx #160
bcc LT160
ldx #0
stx BadLlamaHPos
LT160
jsr PositionSprite
lda LlamaSprite
sta GRP1
ldx #9
BadLlama
iny
lda LlamaSprite,y
sta GRP1
dex
sta WSYNC ; 10 lines of resolution for the Bad Llama
bne BadLlama
;-----------------------
lda #0
sta GRP1
ldx #172
MiddleSpace sta WSYNC ; space for the obstacles and missiles
dex
bne MiddleSpace
;------------------------
sta WSYNC
ldx #10
GoodLlama
dex
sta WSYNC ; 10 lines of resolution for the Good Llama
bne GoodLlama
;------------------------
lda #%11111111
sta PF0
sta PF1
sta PF2
sta WSYNC ; bottom of playfield
;------------------------------------------------
lda #%01000010
sta VBLANK ; end of screen - enter blanking
; 30 scanlines of overscan...
ldx #30
Overscan sta WSYNC
dex
bne Overscan
jmp StartOfFrame
;------------------------------------------------
;Other routines
PositionSprite
sta WSYNC
; Pass X register holding desired X position of sprite!
lda Divide15,x ; xPosition / 15
tax
SimpleLoop dex
bne SimpleLoop
sta RESP1 ; start drawing the sprite
rts
;============================================================================
; R O M D A T A
;============================================================================
LlamaSprite: ; isn't it cute?
.byte #%00000100 ; .....X.. ;10
.byte #%00000111 ; .....XXX ;09
.byte #%00000110 ; .....XX. ;08
.byte #%00000110 ; .....XX. ;07
.byte #%00000110 ; .....XX. ;06
.byte #%01111110 ; .XXXXXX. ;05
.byte #%01111110 ; .XXXXXX. ;04
.byte #%01111110 ; .XXXXXX. ;03
.byte #%01100110 ; .XX..XX. ;02
.byte #%01100110 ; .XX..XX. ;01
Divide15 ;much easier than writing out a table...
.POS SET 0
REPEAT 256
.byte (.POS / 15) + 1
.POS SET .POS + 1
REPEND
;===============================================================================
; V E C T O R S
;===============================================================================
ORG $FFFA
InterruptVectors
.word Reset ; NMI
.word Reset ; RESET
.word Reset ; IRQ
END
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Jumpman: Advanced Levels, Manuel Rotschkar | Thread | Re: [stella] Sprite graphics, Andrew Davie |
| Re: [stella] Big Dig, mike m. | Date | Re: [stella] Sprite graphics, Andrew Davie |
| Month |