broke everything to remove bmp
This commit is contained in:
parent
d13287996c
commit
a2d95fd15c
231
src/main.c
231
src/main.c
@ -4,10 +4,23 @@
|
||||
#define TABLE_LENGTH 720
|
||||
#define SPEED 5
|
||||
#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;
|
||||
s16 angle = 0;
|
||||
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},
|
||||
@ -89,7 +102,7 @@ void castRay(s16 angle){
|
||||
s16 vx = l.pt1.x << FRAC_BITS;
|
||||
s16 vy = l.pt1.y << FRAC_BITS;
|
||||
s16 nTan = -tan;
|
||||
s16 threshold = (20 << FRAC_BITS);
|
||||
threshold = (20 << FRAC_BITS);
|
||||
if(nTan > threshold){
|
||||
nTan = threshold;
|
||||
}
|
||||
@ -144,128 +157,114 @@ void castRay(s16 angle){
|
||||
|
||||
}
|
||||
|
||||
void mapscan(){
|
||||
|
||||
u8 mapcolor = 12;
|
||||
mapcolor |= mapcolor << 4;
|
||||
int mapscale = 10;
|
||||
|
||||
for(u8 x = 0; x < 10; x++){
|
||||
for(u8 y = 0; y < 10; y++){
|
||||
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}};
|
||||
BMP_drawPolygon(mapverts, 4, mapcolor);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
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 render(){
|
||||
l.pt1.x = x / 10;
|
||||
l.pt1.y = y / 10;
|
||||
//Clear the bitmap
|
||||
BMP_clear();
|
||||
|
||||
//Draw the line defined above (in the background, hidden)
|
||||
|
||||
mapscan();
|
||||
if(angle >= 360) angle = angle - 360;
|
||||
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();
|
||||
|
||||
void uploadTileDataToVRAM(u16 vramTileIndex) {
|
||||
VDP_loadTileData(tileBuffer, vramTileIndex, 1, DMA); // Load 1 tile to VRAM
|
||||
}
|
||||
|
||||
void update(){
|
||||
u16 joy = JOY_readJoypad(JOY_1);
|
||||
if(joy & BUTTON_LEFT) {
|
||||
//l.pt1.x -= SPEED;
|
||||
angle -= 1;
|
||||
}
|
||||
if(joy & BUTTON_RIGHT) {
|
||||
//l.pt1.x += SPEED;
|
||||
angle += 1;
|
||||
}
|
||||
if(joy & BUTTON_UP) {
|
||||
s16 ind = (int)((float)angle/360.0f*1024.0f);
|
||||
fix16 dy = sinFix16(ind);
|
||||
fix16 dx = cosFix16(ind);
|
||||
y += fix16ToInt(fix16Mul(dy, FIX16(SPEED)));
|
||||
x += fix16ToInt(fix16Mul(dx, FIX16(SPEED)));
|
||||
}
|
||||
if(joy & BUTTON_DOWN) {
|
||||
s16 ind = (int)((float)angle/360.0f*1024.0f);
|
||||
fix16 dy = sinFix16(ind);
|
||||
fix16 dx = cosFix16(ind);
|
||||
y -= fix16ToInt(fix16Mul(dy, FIX16(SPEED)));
|
||||
x -= fix16ToInt(fix16Mul(dx, FIX16(SPEED)));
|
||||
}
|
||||
void mapscan() {
|
||||
u8 mapcolor = 12; // map color
|
||||
mapcolor |= mapcolor << 4;
|
||||
|
||||
for (u8 x = 0; x < 10; x++) {
|
||||
for (u8 y = 0; y < 10; y++) {
|
||||
if (map[y][x] == 1) {
|
||||
// Draw a filled tile for the map block
|
||||
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 initVDP(){
|
||||
SYS_disableInts();
|
||||
VDP_setPlaneSize(64,32,TRUE);
|
||||
SYS_enableInts();
|
||||
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);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
x = 150;
|
||||
y = 150;
|
||||
initVDP();
|
||||
|
||||
//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));
|
||||
VDP_setBackgroundColor(13);
|
||||
|
||||
//A line needs a source coordinate x,y and a destination coordinate x,y along with a pallete colour.
|
||||
l.pt1.x = 15;
|
||||
l.pt1.y = 15;
|
||||
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)
|
||||
{
|
||||
render();
|
||||
update();
|
||||
}
|
||||
return 0;
|
||||
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() {
|
||||
clearScreenWithTile(TILE_EMPTY);
|
||||
initTileBuffer(12); // map color
|
||||
uploadTileDataToVRAM(TILE_FILLED);
|
||||
initTileBuffer(0); // background color
|
||||
uploadTileDataToVRAM(TILE_EMPTY);
|
||||
drawMap();
|
||||
VDP_setTextPlane(BG_B);
|
||||
VDP_setTextPalette(2);
|
||||
VDP_showFPS(0);
|
||||
SYS_doVBlankProcess();
|
||||
}
|
||||
|
||||
void update() {
|
||||
u16 joy = JOY_readJoypad(JOY_1);
|
||||
if (joy & BUTTON_LEFT) {
|
||||
angle -= 1;
|
||||
}
|
||||
if (joy & BUTTON_RIGHT) {
|
||||
angle += 1;
|
||||
}
|
||||
if (joy & BUTTON_UP) {
|
||||
s16 ind = (int)((float)angle / 360.0f * 1024.0f);
|
||||
fix16 dy = sinFix16(ind);
|
||||
fix16 dx = cosFix16(ind);
|
||||
y += fix16ToInt(fix16Mul(dy, FIX16(SPEED)));
|
||||
x += fix16ToInt(fix16Mul(dx, FIX16(SPEED)));
|
||||
}
|
||||
if (joy & BUTTON_DOWN) {
|
||||
s16 ind = (int)((float)angle / 360.0f * 1024.0f);
|
||||
fix16 dy = sinFix16(ind);
|
||||
fix16 dx = cosFix16(ind);
|
||||
y -= fix16ToInt(fix16Mul(dy, FIX16(SPEED)));
|
||||
x -= fix16ToInt(fix16Mul(dx, FIX16(SPEED)));
|
||||
}
|
||||
}
|
||||
|
||||
void initVDP() {
|
||||
SYS_disableInts();
|
||||
VDP_setPlaneSize(64, 32, TRUE);
|
||||
SYS_enableInts();
|
||||
}
|
||||
|
||||
int main() {
|
||||
SYS_disableInts();
|
||||
VDP_setPlaneSize(64, 32, TRUE);
|
||||
SYS_enableInts();
|
||||
PAL_setColor(14, RGB24_TO_VDPCOLOR(0x0000ff));
|
||||
PAL_setColor(15, RGB24_TO_VDPCOLOR(0xff0000));
|
||||
VDP_setBackgroundColor(14);
|
||||
|
||||
// Initialize and upload tile data for TILE_EMPTY and TILE_FILLED
|
||||
initTileBuffer(12); // Color for TILE_FILLED
|
||||
VDP_loadTileData(tileBuffer, TILE_FILLED, 1, DMA);
|
||||
|
||||
initTileBuffer(0); // Color for TILE_EMPTY
|
||||
VDP_loadTileData(tileBuffer, TILE_EMPTY, 1, DMA);
|
||||
|
||||
while (TRUE) {
|
||||
render();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user