Working with graphics for the NES can be a little... I won't say difficult, but it is not a walk in the park. As you have your chr file with tiles you have to accomodate them in the screen loading them into memory and using variables for the movement (and then again, the less variables, better for the future as we have to save all the possible memory)
Given the CHR file that I have, I made things like this for the first version of the title screen:
principal: .byte $1B,$12,$17,$0D,$0E,$15,$12,$0A,$24,$24,$24,$24,$24,$24,$24,$24 .byte $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24 .byte $24,$24,$1D,$11,$0E,$24,$15,$0E,$10,$0E,$17,$0D,$24,$24,$24,$24 .byte $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24 .byte $24,$24,$24,$24,$18,$0F,$24,$1D,$11,$0E,$24,$0F,$18,$1E,$1B,$24 .byte $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24 .byte $24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$10 .byte $0E,$16,$1C,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24,$24 It is not, but let's say it is kind of an array of hexadecimal numbers, each one corresponding to a tile in the chr.
After accomodating then in my "engine title zone":
enginetitle: LDA $2002 LDA #$20 STA $2006 LDA #$00 STA $2006 LDX #00 : LDA principal, X STA $2007 INX CPX #$80 BNE :- LDA $2002 LDA #$23 STA $2006 LDA #$C0 STA $2006 LDX #$00 waitforkeypress: LDA button CMP #%00010000 BNE waitforkeypress LDA #PLAYING STA gamestate JMP clearscreen JMP GAMEENGINEDONE I made it appear as this (and as you can see in the waitforkeypress loop, it waits for start button).
I have to quit the render of the character from there, I put it in the vblank zone, have to see how to put it somewhere else, maybe a jump to see if it is in the presentation stage...
Remember from the first days that I had the character being load from spritedata? It is something similar to the backgrond, something like this:
spritedata: ; Y tile attr X .byte $80, $00, $00, $10 .byte $80, $01, $00, $18 .byte $88, $10, $00, $10 .byte $88, $11, $00, $18 Well, now I need it to have some variables to move it in the x/y axis, so I needed to create a couple of variables in the ZEROPAGE segment:
p1x: .res 1 p2x: .res 1 p1y: .res 1 p2y: .res 1 And create a function (sprites load from $0200)
updatesprites: ;I will have to do something to UPDATE ALL in the future LDA p1y STA $0200 STA $0204 LDA p2y STA $0208 STA $020C LDA p1x STA $0203 STA $020B LDA p2x STA $0207 STA $020F LDA #$00 ;this is a tile, should have a variable? (also used for attributes now) STA $0201 STA $0202 STA $0206 STA $020A STA $020E LDA #$01 STA $0205 LDA #$10 STA $0209 LDA #$11 STA $020D CLI LDA #%10000000 STA $2000 LDA #%00010000 STA $2001 RTS Maybe there are better ways to do this, but I am still learning.
Top comments (0)