broke everything to remove bmp

This commit is contained in:
Cuptain 2024-09-01 12:10:10 +10:00
parent d13287996c
commit a2d95fd15c

View File

@ -4,10 +4,23 @@
#define TABLE_LENGTH 720 #define TABLE_LENGTH 720
#define SPEED 5 #define SPEED 5
#define FRAC_BITS 8 #define FRAC_BITS 8
#define TILE_WIDTH 8
#define TILE_HEIGHT 8
#define TILE_SIZE (TILE_WIDTH * TILE_HEIGHT / 2)
#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 224
#define SCREEN_TILES_X 40
#define SCREEN_TILES_Y 28
#define TILE_EMPTY 0
#define TILE_FILLED 1
#define MAP_WIDTH 10
#define MAP_HEIGHT 10
Line l; Line l;
s16 angle = 0; s16 angle = 0;
s16 x, y; s16 x, y;
u8 tileBuffer[TILE_SIZE];
u16 tileIndex = 0;
const u8 map[10][10] = {{1,1,1,1,1,1,1,1,1,1}, const u8 map[10][10] = {{1,1,1,1,1,1,1,1,1,1},
@ -89,7 +102,7 @@ void castRay(s16 angle){
s16 vx = l.pt1.x << FRAC_BITS; s16 vx = l.pt1.x << FRAC_BITS;
s16 vy = l.pt1.y << FRAC_BITS; s16 vy = l.pt1.y << FRAC_BITS;
s16 nTan = -tan; s16 nTan = -tan;
s16 threshold = (20 << FRAC_BITS); threshold = (20 << FRAC_BITS);
if(nTan > threshold){ if(nTan > threshold){
nTan = threshold; nTan = threshold;
} }
@ -144,74 +157,72 @@ void castRay(s16 angle){
} }
void mapscan(){
u8 mapcolor = 12; void initTileBuffer(u8 color) {
u8 colorValue = (color << 4) | color; // Color for both nibbles
for (int i = 0; i < TILE_SIZE; i++) {
tileBuffer[i] = colorValue;
}
}
void uploadTileDataToVRAM(u16 vramTileIndex) {
VDP_loadTileData(tileBuffer, vramTileIndex, 1, DMA); // Load 1 tile to VRAM
}
void mapscan() {
u8 mapcolor = 12; // map color
mapcolor |= mapcolor << 4; mapcolor |= mapcolor << 4;
int mapscale = 10;
for (u8 x = 0; x < 10; x++) { for (u8 x = 0; x < 10; x++) {
for (u8 y = 0; y < 10; y++) { for (u8 y = 0; y < 10; y++) {
if (map[y][x] == 1) { if (map[y][x] == 1) {
Vect2D_s16 mapverts[4] = {{x*mapscale,y*mapscale},{(x+1)*mapscale,y*mapscale},{(x+1)*mapscale,(y+1)*mapscale},{x*mapscale,(y+1)*mapscale}}; // Draw a filled tile for the map block
BMP_drawPolygon(mapverts, 4, mapcolor); for (u8 px = 0; px < TILE_WIDTH; px++) {
for (u8 py = 0; py < TILE_HEIGHT; py++) {
setPixelInBuffer(px, py, mapcolor);
}
}
// Upload the filled tile to VRAM
uploadTileDataToVRAM(tileIndex);
VDP_setTileMapXY(VDP_BG_A, tileIndex, x, y);
}
}
} }
} }
} void clearScreenWithTile(u16 tileIndex) {
// Fill the entire screen with the background tile
VDP_fillTileMapRect(BG_A, TILE_ATTR_FULL(PAL1, 0, FALSE, FALSE, tileIndex), 0, 0, SCREEN_TILES_X, SCREEN_TILES_Y);
} }
void drawMap() {
for (u16 y = 0; y < MAP_HEIGHT; y++) {
for (u16 x = 0; x < MAP_WIDTH; x++) {
u8 tileType = map[y][x] ? TILE_FILLED : TILE_EMPTY;
VDP_setTileMapXY(BG_A, TILE_ATTR_FULL(PAL1, 0, FALSE, FALSE, tileType), x, y);
}
}
}
void render() { void render() {
l.pt1.x = x / 10; clearScreenWithTile(TILE_EMPTY);
l.pt1.y = y / 10; initTileBuffer(12); // map color
//Clear the bitmap uploadTileDataToVRAM(TILE_FILLED);
BMP_clear(); initTileBuffer(0); // background color
uploadTileDataToVRAM(TILE_EMPTY);
//Draw the line defined above (in the background, hidden) drawMap();
VDP_setTextPlane(BG_B);
mapscan(); VDP_setTextPalette(2);
if(angle >= 360) angle = angle - 360; VDP_showFPS(0);
if(angle < 0) angle = 360 + angle;
castRay(angle-20);
BMP_drawLine(&l);
castRay(angle-10);
BMP_drawLine(&l);
for (int i = 0; i < 16; i++){
castRay(angle);
BMP_drawLine(&l);
}
castRay(angle+10);
BMP_drawLine(&l);
castRay(angle+20);
BMP_drawLine(&l);
BMP_showFPS(0);
//Flip the data to the screen - i.e. actually draw the complete image on screen
BMP_flip(1);
//Increment the destination y coordinate
//l.pt2.y = l.pt2.y + 2;
//Reset the destination y coordinate if it hits 160
//if (l.pt2.y == 160)
//{
//l.pt2.y = 0;
//}
SYS_doVBlankProcess(); SYS_doVBlankProcess();
} }
void update() { void update() {
u16 joy = JOY_readJoypad(JOY_1); u16 joy = JOY_readJoypad(JOY_1);
if (joy & BUTTON_LEFT) { if (joy & BUTTON_LEFT) {
//l.pt1.x -= SPEED;
angle -= 1; angle -= 1;
} }
if (joy & BUTTON_RIGHT) { if (joy & BUTTON_RIGHT) {
//l.pt1.x += SPEED;
angle += 1; angle += 1;
} }
if (joy & BUTTON_UP) { if (joy & BUTTON_UP) {
@ -236,36 +247,24 @@ void initVDP(){
SYS_enableInts(); SYS_enableInts();
} }
int main() int main() {
{ SYS_disableInts();
x = 150; VDP_setPlaneSize(64, 32, TRUE);
y = 150; SYS_enableInts();
initVDP(); PAL_setColor(14, RGB24_TO_VDPCOLOR(0x0000ff));
//Initialise the bitmap engine
BMP_init(FALSE, BG_A, PAL0, FALSE);
//Set the colour of the line. We are using pallete 0 for the bitmap, so we have 0->15. 15 is used for white text, so we set an unused pallet colour, 14 to blue - RGB 0000FF.
u16 colour_blue = RGB24_TO_VDPCOLOR(0x0000ff);
u16 colour_red = RGB24_TO_VDPCOLOR(0x756a4a);
PAL_setColor(14, colour_blue);
PAL_setColor(13, colour_red);
PAL_setColor(12, RGB24_TO_VDPCOLOR(0x00ff00));
PAL_setColor(15, RGB24_TO_VDPCOLOR(0xff0000)); PAL_setColor(15, RGB24_TO_VDPCOLOR(0xff0000));
VDP_setBackgroundColor(13); VDP_setBackgroundColor(14);
//A line needs a source coordinate x,y and a destination coordinate x,y along with a pallete colour. // Initialize and upload tile data for TILE_EMPTY and TILE_FILLED
l.pt1.x = 15; initTileBuffer(12); // Color for TILE_FILLED
l.pt1.y = 15; VDP_loadTileData(tileBuffer, TILE_FILLED, 1, DMA);
l.pt2.x = 255;
l.pt2.y = 0;
l.col = 14;
l.col |= l.col << 4; // if we do not left shift the colour, we get gaps in the line
while(TRUE) initTileBuffer(0); // Color for TILE_EMPTY
{ VDP_loadTileData(tileBuffer, TILE_EMPTY, 1, DMA);
while (TRUE) {
render(); render();
update();
} }
return 0; return 0;
} }