Skip to content

Commit

Permalink
Fixed IMAGE bug
Browse files Browse the repository at this point in the history
  • Loading branch information
Paul Robson committed Jan 31, 2024
1 parent f07acae commit 046aec4
Show file tree
Hide file tree
Showing 7 changed files with 17 additions and 233 deletions.
Binary file removed basic/graphics.gfx
Binary file not shown.
Binary file removed basic/invaders.bas
Binary file not shown.
230 changes: 3 additions & 227 deletions basic/test.bsc
Original file line number Diff line number Diff line change
@@ -1,229 +1,5 @@
cls:sprite clear
gload "invaders.gfx"

invader_sprite_start = 0
invader_off_x = 24
invader_off_y = 80
invader_cursor = 0
rank_swap = 0
invader_direction = 2
invader_x = 0
invader_y = 0
invader_t = 0
min_rank_x = 10
max_rank_x = 200
tinvaders = 0

'
' Data for alien sprite collision pixel checking
dim invmask(96)
for i = 0 to 95:read invmask(i):next

' Frame 1

data $03,$C0 ' 0000001111000000
data $1F,$F8 ' 0001111111111000
data $3F,$FC ' 0011111111111100
data $39,$9C ' 0011100110011100
data $3F,$FC ' 0011111111111100
data $06,$60 ' 0000011001100000
data $0D,$D0 ' 0000110110110000
data $30,$0C ' 0011000000001100

data $04,$10 ' 0000010000010000
data $12,$24 ' 0001001000100100
data $17,$F4 ' 0001011111110100
data $1D,$DC ' 0001110111011100
data $1F,$FC ' 0001111111111100
data $0F,$F8 ' 0000111111111000
data $04,$10 ' 0000010000010000
data $08,$08 ' 0000100000001000

data $01,$80 ' 0000000110000000
data $04,$C0 ' 0000001111000000
data $07,$E0 ' 0000011111100000
data $0D,$B0 ' 0000110110110000
data $0F,$F0 ' 0000111111110000
data $02,$40 ' 0000001001000000
data $05,$A0 ' 0000010110100000
data $0A,$50 ' 0000101001010000

' Frame 2

data $03,$C0 ' 0000001111000000
data $1F,$F8 ' 0001111111111000
data $3F,$FC ' 0011111111111100
data $39,$9C ' 0011100110011100
data $3F,$FC ' 0011111111111100
data $06,$60 ' 0000011001100000
data $0D,$D0 ' 0000110110110000
data $06,$60 ' 0000011001100000

data $04,$10 ' 0000010000010000
data $02,$20 ' 0000001000100000
data $07,$F0 ' 0000011111110000
data $0D,$D8 ' 0000110111011000
data $1F,$FC ' 0001111111111100
data $1F,$FC ' 0001111111111100
data $14,$14 ' 0001010000010100
data $03,$60 ' 0000001101100000

data $01,$80 ' 0000000110000000
data $04,$C0 ' 0000001111000000
data $07,$E0 ' 0000011111100000
data $0D,$B0 ' 0000110110110000
data $0F,$F0 ' 0000111111110000
data $05,$A0 ' 0000010110100000
data $08,$10 ' 0000100000010000
data $04,$20 ' 0000010000100000


player_sprite = invader_sprite_start + 55
player_shot_sprite = player_sprite + 1
player_x = 35
player_y = 165
player_shot_x = 0
player_shot_y = 0
player_shot_active = 0
tplayer = 0

invaders = alloc(55)

call initInvaders()
call initPlayer()
call drawShields()

repeat
ft = time()
if event(tplayer, 2)
call movePlayer()
call drawPlayer()
call updatePlayerShot()
endif
if event(tinvaders, 2)
repeat
invader_cursor = invader_cursor + 1
if invader_cursor >= 25 then invader_cursor = 0
until peek(invaders + invader_cursor) = 0
call drawInvaders()
endif
ft = time() - ft
print chr$(20);ft
until 0

gload "graphics.gfx"
rect solid ink 2 from 0,0 to 319,230
image $84 frame dim 1 to 120,120
end


proc initInvaders()
for i = 0 to 54
poke invaders + i, 1
next:poke invaders+22,0
' poke invaders + 22, 0
' poke invaders + 12, 0
poke invaders + 54, 1
rank_swap = 0
invader_off_x = 24
invader_off_y = 80
invader_direction = 2
invader_cursor = -1
endproc


proc drawInvaders()
call getInvaderPos(invader_cursor)
if invader_x >= max_rank_x | invader_x <= min_rank_x
rank_swap = 1
endif
sprite invader_cursor image $80 + invader_t to invader_x, invader_y anchor 7
endproc


proc getInvaderPos(index)
invader_x = invader_off_x + ((index % 11) << 4)
local row
row = index \ 11
invader_y = invader_off_y - (row << 4)
invader_t = (row \ 2) << 1 + invader_frame
endproc


proc initPlayer()
player_x = 35
player_y = 165
player_shot_active = 0
endproc


proc movePlayer()
local fire, dx, dy
fire = joypad(dx, dy)
player_x = max(8, min(200, player_x + dx))
if fire <> 0 & player_shot_active = 0
player_shot_x = player_x + 8
player_shot_y = player_y
player_shot_active = 1
endif
endproc


proc drawPlayer()
sprite player_sprite image $86 to player_x, player_y anchor 7
endproc


proc updatePlayerShot()
if player_shot_active = 1
sprite player_shot_sprite image $88 to player_shot_x, player_shot_y anchor 7
player_shot_y = player_shot_y - 4
if player_shot_y < 0
player_shot_active = false
sprite player_shot_sprite image $88 to -16, -16 anchor 7
else
if player_shot_x > invader_off_x & player_shot_x < (invader_off_x + 176)
if player_shot_y < (invader_off_y + 16) & player_shot_y > (invader_off_y - 64)
local inv_hit_row, inv_hit_col, inv_hit
inv_hit_row = ((invader_off_y + 16) - player_shot_y) >> 4
inv_hit_col = (player_shot_x - invader_off_x) >> 4
inv_hit = inv_hit_row * 11 + inv_hit_col
invader_t = inv_hit_row >> 1
if inv_hit_row >= 0 & inv_hit_row < 5 & peek(invaders + inv_hit) = 0
local cpoint_x, cpoint_y
cpoint_x = player_shot_x - (invader_off_x + (inv_hit_col << 4))
cpoint_y = player_shot_y - (invader_off_y - (inv_hit_row << 4))

' Bottom 8 lines of all alien sprites are blank.
if cpoint_y <= 7
local mask_byte, mask_col_index, bit_test, mask_offset
mask_col_index = cpoint_x >> 3
mask_offset = (cpoint_y << 1) + (invader_t << 4) + mask_col_index
mask_byte = invmask(mask_offset) + (invader_frame * 48)
bit_test = $80 >> ((cpoint_x - (8 * mask_col_index)) & $7)
if mask_byte & bit_test
poke invaders + inv_hit, 1
sprite (invader_sprite_start + inv_hit) image $80 to -16, -16 anchor 7
player_shot_active = false
sprite player_shot_sprite to -16, 1-6 anchor 7
endif
endif
endif
endif
endif
endif
endif
endproc


proc drawShields()
local xpos, ypos
xpos = 28
ypos = 132
image $C0 to xpos, ypos
xpos = xpos + (22 + 23)
image $C0 to xpos, ypos
xpos = xpos + (22 + 23)
image $C0 to xpos, ypos
xpos = xpos + (22 + 23)
image $C0 to xpos, ypos
endproc


7 changes: 7 additions & 0 deletions documents/release/Changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,11 @@ Changes
IMP: TURTLE CLEAR is now TURTLE HOME
IMP: Added SPOINT() to read sprite layer.
*** Release 15 ***
BUG: neo6502-games wasn't uploading to firmware properly
*** Release 15a ***

31/01/24: BUG: IMAGE not drawing correctly.
*** Release 15b ***



2 changes: 1 addition & 1 deletion firmware/common/include/data/prompt.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//
// This file is automatically generated
//
#define PROMPT "(Build 2584 31-Jan-24)\r"
#define PROMPT "(Build 2587 31-Jan-24)\r"
6 changes: 3 additions & 3 deletions firmware/common/include/data/sfxdata.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,13 @@ static const uint16_t sfxData18[] = {
740,75,0,50,740,75,0,50,740,75,0,50,740,75,0,50,65535 };
// 19 expl100
static const uint16_t sfxData19[] = {
596,1,296,1,589,1,603,1,671,1,231,1,536,1,443,1,497,1,479,1,236,1,699,1,660,1,349,1,465,1,445,1,666,1,247,1,363,1,213,1,545,1,389,1,203,1,534,1,423,1,498,1,632,1,297,1,526,1,670,1,407,1,591,1,490,1,690,1,573,1,487,1,326,1,276,1,484,1,464,1,533,1,544,1,345,1,650,1,658,1,229,1,413,1,570,1,200,1,638,1,65535 };
661,1,353,1,213,1,312,1,356,1,662,1,634,1,689,1,440,1,229,1,363,1,376,1,675,1,279,1,390,1,423,1,658,1,473,1,690,1,670,1,616,1,287,1,495,1,679,1,603,1,434,1,501,1,491,1,685,1,361,1,441,1,671,1,352,1,476,1,461,1,305,1,235,1,648,1,690,1,616,1,457,1,465,1,540,1,205,1,453,1,412,1,219,1,405,1,332,1,666,1,65535 };
// 20 expl50
static const uint16_t sfxData20[] = {
261,1,696,1,329,1,336,1,298,1,334,1,528,1,695,1,376,1,338,1,338,1,338,1,421,1,295,1,623,1,559,1,249,1,259,1,336,1,684,1,622,1,217,1,366,1,370,1,445,1,65535 };
325,1,498,1,526,1,210,1,360,1,422,1,203,1,348,1,283,1,279,1,665,1,385,1,247,1,339,1,671,1,570,1,546,1,470,1,224,1,250,1,547,1,359,1,616,1,519,1,522,1,65535 };
// 21 expl20
static const uint16_t sfxData21[] = {
634,1,350,1,311,1,628,1,349,1,639,1,264,1,366,1,507,1,521,1,65535 };
340,1,489,1,415,1,569,1,554,1,613,1,229,1,283,1,371,1,397,1,65535 };
// 22 las30
static const uint16_t sfxData22[] = {
600,1,574,1,547,1,520,1,494,1,467,1,440,1,414,1,387,1,360,1,334,1,307,1,280,1,254,1,227,1,65535 };
Expand Down
5 changes: 3 additions & 2 deletions firmware/common/sources/interface/gfxcommands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,8 @@ void GFXDrawImage(struct GraphicsMode *gMode,int x,int y,int id,int scale,int fl
for (int xc = 0;xc < size;xc++) { // For each pixel
for (int yc = 0;yc < size;yc++) {
int pixel = gfxMemory[address+xc/2+(yc * size / 2)]; // Access the pixel pair.
if (pixel != 0 || type == 0 || solidFill) {
pixel = (xc & 1) ? pixel & 0x0F : pixel >> 4; // Extract the half pixel to draw.
pixel = (xc & 1) ? pixel & 0x0F : pixel >> 4; // Extract the half pixel to draw.
if (pixel != 0 || type == 0 || solidFill) { // If non-zero, or tile, or solid then draw it.
pixelXor = pixel;
pixelAnd = 0;
int x1 = x + (xc ^ xFlip) * scale;
Expand Down Expand Up @@ -291,5 +291,6 @@ void GFXGraphicsCommand(uint8_t cmd,uint8_t *data) {
// 19/01/24 Added SOLID option to TEXT and IMAGE
// 28/01/24 Line parameters are now signed integers
// 30/01/24 Added SPOINT to read sprite pixel (36)
// 31/01/24 Fixed pixel leakage on IMAGE.
//
// ***************************************************************************************

0 comments on commit 046aec4

Please sign in to comment.