diff --git a/Art/Box_002.xcf b/Art/Box_002.xcf index 2816797..e1d1696 100644 Binary files a/Art/Box_002.xcf and b/Art/Box_002.xcf differ diff --git a/Art/Tab_007.xcf b/Art/Tab_007.xcf new file mode 100644 index 0000000..79c2e44 Binary files /dev/null and b/Art/Tab_007.xcf differ diff --git a/Art/box_002.gif b/Art/box_002.gif index 6113ec6..0b225a4 100644 Binary files a/Art/box_002.gif and b/Art/box_002.gif differ diff --git a/Art/tab_007.gif b/Art/tab_007.gif new file mode 100644 index 0000000..a7d8130 Binary files /dev/null and b/Art/tab_007.gif differ diff --git a/GSCats.xcodeproj/project.pbxproj b/GSCats.xcodeproj/project.pbxproj index 923f376..047beaf 100644 --- a/GSCats.xcodeproj/project.pbxproj +++ b/GSCats.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXFileReference section */ + 7002647320CD78C40015B184 /* smallNumbers.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = smallNumbers.s; sourceTree = ""; }; 700B5E6F2069831000B31C00 /* inventory.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = inventory.s; sourceTree = ""; }; 700C39C51F2E5CA800C24F9C /* tables.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = tables.s; sourceTree = ""; }; 700F21DE1F43E31300D7007D /* input.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = input.s; sourceTree = ""; }; @@ -48,6 +49,7 @@ 7099E3841F41022100182A82 /* gameobject.s */, 706DF1641F2D39F700AA6680 /* loader.s */, 700FFAFB1F40F3BF00A442DE /* font.s */, + 7002647320CD78C40015B184 /* smallNumbers.s */, 706DF1651F2D4A8100AA6680 /* terrain.s */, 705AAFA920040B0D001BB0ED /* terrain_e1.s */, 70C073091F5BAA3E009844A9 /* collision.s */, diff --git a/Makefile b/Makefile index 42c2c35..0c3b9b6 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ ADDR=800 PGM=gscats MRSPRITE=../MrSprite/mrsprite CHROMA=a4dffb -PALETTE=a4dffb a4dffb 008800 886611 cc9933 eebb44 dd6666 ff99aa 00ff00 ff0000 b7b7b7 dddddd 0077bb ffff00 000000 ffffff +PALETTE=a4dffb a4dffb 008800 886611 cc9933 eebb44 dd6666 ff99aa 777777 ff0000 b7b7b7 dddddd 0077bb ffff00 000000 ffffff SPRITES=SpriteBank REMOTESYMBOLS=-Wl $(shell ./ParseMapFile.py *.map) diff --git a/SpriteBank00.bin b/SpriteBank00.bin index f4454c4..c6d840f 100644 Binary files a/SpriteBank00.bin and b/SpriteBank00.bin differ 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 d31b176..1d167bd 100644 Binary files a/gscats.2mg and b/gscats.2mg differ 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