From cfeefce8c34f4af0d745e7e2f6e6e04ce0c851f0 Mon Sep 17 00:00:00 2001 From: blondie7575 Date: Sun, 10 Jun 2018 13:00:05 -0600 Subject: [PATCH] Added inventory tabs and number rendering --- Art/Box_002.xcf | Bin 810 -> 812 bytes Art/Tab_007.xcf | Bin 0 -> 764 bytes Art/box_002.gif | Bin 196 -> 197 bytes Art/tab_007.gif | Bin 0 -> 124 bytes GSCats.xcodeproj/project.pbxproj | 2 + Makefile | 2 +- SpriteBank00.bin | Bin 2009 -> 2156 bytes gamemanager.s | 2 +- gscats.2mg | Bin 819264 -> 819264 bytes gscats.s | 1 + inventory.s | 36 +++++-- macros.s | 4 + smallNumbers.s | 160 +++++++++++++++++++++++++++++++ spritebank.s | 6 +- 14 files changed, 202 insertions(+), 11 deletions(-) create mode 100644 Art/Tab_007.xcf create mode 100644 Art/tab_007.gif create mode 100644 smallNumbers.s diff --git a/Art/Box_002.xcf b/Art/Box_002.xcf index 2816797537cff13ffc661cb6f7a73e03ef075731..e1d1696afa6202bd5f867123caac7ac394b3a2ee 100644 GIT binary patch delta 109 tcmZ3*wuWtj9dmhk`9w!cM$V1Z5loRB+*~|df2l`u@Nh8j)iW~u2LORk7r6ic delta 107 rcmZ3(wu)_n9W%p!hKY`rjO-h$BbdVZxVd<^{!)+RS5Z(mQnDp1blZQRFhe(P(K^2Oi;47qQk}ft$NmA3^JbLunqo5vqfg*hZ z!B+_0J@^8maVG9ciWP@^JKugYvl({QW!{jEEr(thMvH*e0P6r5AOQ{lwcD3>_{b%> za_Z01{kQp1>Nwf-AxV;qklAdOrYTA0Hz)Uyon@erIzYk$HUUcenh*ro7GQ;AhkMN1 zhWrlrvI{NgR^WNIAHzQHV&gEh&DieIgvEW@IX*qZNG(rgp6S}U8?qkHmPjLtCj*;C z!GQIeYQu4@U=W0~kvlzfyCyaEjNF!x77sO{w7aBK#OdDzOUKdBw3zSGmiQNllVu{; z^pVeE%6zMDM_3;?PGrYF4Py0g>04PW#e3i;y$S|i%oeX-Yn#@&8wMjkzcw5<+A09U zI6{SUoDMz-)X{bUf~y6t6?mz@%LQHqj^_$n10v26FGKVKA^DCciq@eQ`EgN`pK$+K T)hb$9{ZKTu^#7`q6jJ#DNo$H# literal 0 HcmV?d00001 diff --git a/Art/box_002.gif b/Art/box_002.gif index 6113ec66af5bc012453d46f5e8257df9fe55b9e7..0b225a422d3f651e84415b8c81a8736eff04bb92 100644 GIT binary patch delta 39 vcmX@Yc$9I1Dsy>x`9zIe9^D6yjHE#Zko7InzLg?iB)L}1A{dHGIS2v delta 38 ucmX@gc!Y6+Dl@}>hKU-vJUS0H_oQU%d97Nvx_RP4X^y@XC0@LY4AuY~Ck`C| diff --git a/Art/tab_007.gif b/Art/tab_007.gif new file mode 100644 index 0000000000000000000000000000000000000000..a7d813087eacdd95bc41fe9862fb023566ec5ee3 GIT binary patch literal 124 zcmZ?wbhEHb6kywc6x=<10~mCGatt5?8CYaKto2+StMz)X b;Io8htq(nlo~>NE>d-1VrSm3lT^OtZ4{FE2? h(E&m`Iwl)3sdKDawP4q(m8*b~lQ1MV*D}Vi0RY)7DG>kw delta 65 zcmaDOaFbu$do|ap8cqfV1|c?I78_<~rVPe;4B`wE7l=;O>tkFuac}VC4UD=#EX29; V-8&Btk1zY)P3%+OEWi}Q1^|zC7E=HK diff --git a/gamemanager.s b/gamemanager.s index fc88862..eab1f6f 100644 --- a/gamemanager.s +++ b/gamemanager.s @@ -335,7 +335,7 @@ fire: basePalette: ; Color 0 and 1 must both be sky blue. Compiled rendering uses PHD (which must contain $0000), ; and span rendering uses fill mode, so 0 can't be used there - .word $0aef,$0aef,$0080,$0861,$0c93,$0eb4,$0d66,$0f9a,$00f0,$0f00,$0bbb,$ddd,$007b,$0ff0,$0000,$0fff + .word $0aef,$0aef,$0080,$0861,$0c93,$0eb4,$0d66,$0f9a,$0777,$0f00,$0bbb,$ddd,$007b,$0ff0,$0000,$0fff statusBarPalette: .word $0888,$0aef,$0F00,$0861,$0c93,$0eb4,$0d66,$0f9a,$00f0,$0fff,$0bbb,$ddd,$007b,$0000,$0ff0,$0fff diff --git a/gscats.2mg b/gscats.2mg index d31b176ea0eef8f359dd01881f807aacef877634..1d167bd8957278c1f2598b6d61d990189c0cb2b5 100644 GIT binary patch delta 3075 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 Y3?mF0h6x4(!wka$BOxMAw0>0aKhqai{Qv*} diff --git a/gscats.s b/gscats.s index d1e9fd2..0b14c9c 100644 --- a/gscats.s +++ b/gscats.s @@ -37,6 +37,7 @@ quitGame: .include "graphics.s" .include "font.s" +.include "smallNumbers.s" .include "player.s" .include "terrain.s" .include "collision.s" diff --git a/inventory.s b/inventory.s index 8b62dc1..90ec4c0 100644 --- a/inventory.s +++ b/inventory.s @@ -8,9 +8,11 @@ INVENTORY_ITEMS = 2 ITEM_WIDTH = 16 ; In pixels +ITEM_HEIGHT = 16 ; In pixels ICON_WIDTH = 8 ; In pixels ICON_ORIGIN = (ITEM_WIDTH-ICON_WIDTH)/4 ; In bytes + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; renderInventory ; @@ -25,9 +27,9 @@ renderInventory: ldy currentPlayer PLAYERPTR_Y lda playerData+PD_INVENTORY,y - sta PARAML0 + sta PARAML1 - ; Compute initial VRAM position + ; Compute initial VRAM position ($E1-relative) ldy #(8192 + (160*10 + (160*ICON_ORIGIN + ICON_ORIGIN))) ldx #0 @@ -52,8 +54,8 @@ RESTORE_AXY ; renderInventoryItem ; ; X = Item index -; Y = VRAM pos -; PARAML0 = Inventory state +; Y = VRAM pos ($E1-relative) +; PARAML1 = Inventory state ; renderInventoryItem: SAVE_AXY @@ -63,18 +65,40 @@ renderInventoryItem: lda #2 ; Frame clc jsr DrawSpriteBank - plx ; Find projectile type data - txy + ply ; Pushed as X PROJECTILETYPEPTR_Y ; Render projectile lda projectileTypes+PT_FRAME1,y ply + phy + clc jsr DrawSpriteBank + ; Render counter background + clc + pla + adc #ITEM_HEIGHT*160 + pha + tay + lda #7 + jsr DrawSpriteBank + + ; Render counter + lda #789 + sta PARAML0 + jsr intToString + + sec + pla + sbc #($2000 - 160*2)-1 ; Font engine wants VRAM-relative + tax + lda #intToStringResult + jsr DrawNumber + RESTORE_AXY rts diff --git a/macros.s b/macros.s index f085df1..a81375f 100644 --- a/macros.s +++ b/macros.s @@ -165,6 +165,10 @@ .dbyt (Arg>>16)&$7777,Arg&$00007777 .endmacro +.macro fontword Arg ; Converts 0->A,F->E to match our palette for font rendering + .dbyt (((Arg & $FF00) | $AA00) & $EE00) | (((Arg & $00FF) | $00AA) & $00EE) +.endmacro + .macro BREAK pha lda breakpoint diff --git a/smallNumbers.s b/smallNumbers.s new file mode 100644 index 0000000..15a5360 --- /dev/null +++ b/smallNumbers.s @@ -0,0 +1,160 @@ +; Mini font render dedicated to small numbers. +; Adapted from Dagen Brock's general purpose font +; engine, also in this project +; +; A= ptr to string preceded by length +; X= screen location +; Trashes zero page locations 6,7 +; +F_LEN: .word 0 ;length of string (only one byte currently used) +F_DIGITIDX: .word 0 ;index of current character +F_CURRPOS: .word 0 ;current top left char position +F_NUMPTR = $06 ;pointer to string (including length byte) / DP + + +DrawNumber: + SAVE_AXY + + sta F_NUMPTR + stx F_CURRPOS + stz F_DIGITIDX + lda (F_NUMPTR) + and #$00ff ;strip off first char (len is only one byte) + sta F_LEN ;get our length byte + +nextDigit: + lda F_DIGITIDX + cmp F_LEN + bne moreDigits + + RESTORE_AXY + rts + +moreDigits: + inc F_DIGITIDX + ldy F_DIGITIDX + lda (F_NUMPTR),y ;get next char! + and #$00FF ;mask high byte + sec + sbc #'0' ;our table starts with space ' ' + asl + tay + ldx F_CURRPOS + jsr drawDigit + inc F_CURRPOS + inc F_CURRPOS ;update screen pos (1 word=4 pixels) + bra nextDigit + +;x = TopLeft screen pos +;y = char table offset +drawDigit: + lda DigitTable,y ;get real address of char data + sec + sbc #DigitData ;pivot offset - now a is offset of fontdata + tay ;so we'll index with that + + lda DigitData,y + sta $012000,x + + lda DigitData+2,y + sta $012000+160,x + + lda DigitData+4,y + sta $012000+160*2,x + + lda DigitData+6,y + sta $012000+160*3,x + + lda DigitData+8,y + sta $012000+160*4,x + + rts + + + + + +DigitTable: + .addr s_0 + .addr s_1 + .addr s_2 + .addr s_3 + .addr s_4 + .addr s_5 + .addr s_6 + .addr s_7 + .addr s_8 + .addr s_9 + +DigitData: + +s_0: + fontword $FFF0 + fontword $F0F0 + fontword $F0F0 + fontword $F0F0 + fontword $FFF0 + +s_1: + fontword $0F00 + fontword $FF00 + fontword $0F00 + fontword $0F00 + fontword $0F00 + +s_2: + fontword $FFF0 + fontword $00F0 + fontword $FFF0 + fontword $F000 + fontword $FFF0 + +s_3: + fontword $FFF0 + fontword $00F0 + fontword $FFF0 + fontword $00F0 + fontword $FFF0 + +s_4: + fontword $F0F0 + fontword $F0F0 + fontword $FFF0 + fontword $00F0 + fontword $00F0 + +s_5: + fontword $FFF0 + fontword $F000 + fontword $FFF0 + fontword $00F0 + fontword $FFF0 + +s_6: + fontword $FFF0 + fontword $F000 + fontword $FFF0 + fontword $F0F0 + fontword $FFF0 + +s_7: + fontword $FFF0 + fontword $00F0 + fontword $00F0 + fontword $00F0 + fontword $00F0 + +s_8: + fontword $FFF0 + fontword $F0F0 + fontword $FFF0 + fontword $F0F0 + fontword $FFF0 + +s_9: + fontword $FFF0 + fontword $F0F0 + fontword $FFF0 + fontword $00F0 + fontword $00F0 + diff --git a/spritebank.s b/spritebank.s index 0b51bab..af03737 100644 --- a/spritebank.s +++ b/spritebank.s @@ -2,16 +2,16 @@ DrawSpriteBank : - ASL ; A=Sprite Number ($0000-$0006) + ASL ; A=Sprite Number ($0000-$0007) TAX ; Y=Target Screen Address ($2000-$9D00) LDA SpriteBankNum,X ; Relative Sprite Number Table JMP (SpriteBankBank,X) ; Bank Number Table SpriteBankNum : - .dbyt $0100,$0000,$0500,$0200,$0300,$0600,$0400 + .dbyt $0100,$0000,$0500,$0200,$0300,$0700,$0400,$0600 SpriteBankBank : - .addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00 + .addr SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00,SpriteBankBank00 SpriteBankBank00 : JSL $AA0000