mario-kart-casio/src/tilemap.c

87 lines
2.1 KiB
C

#include "./tilemap.h"
#include "./main.h"
#include "./data.h"
// #include "../data-headers/track.h"
#define tileSize 8
#define trackImageWidth 256 * tileSize
#define trackImageHeight 256 * tileSize
unsigned char getTileID(short xPos, short yPos) {
// __builtin_expect(xPos < 0 || xPos >= trackImageWidth || yPos < 0 || yPos >= trackImageHeight, 0);
if((unsigned short) xPos >= trackImageWidth || (unsigned short) yPos >= trackImageHeight) {
return 0; // Grass
} else {
// Divide by 8
int xPixel = xPos >> 3;
int yPixel = yPos >> 3;
return /*track.*/tilemap[((yPixel * (trackImageWidth / tileSize)) + xPixel)];
}
}
// unsigned char getTileID(short l0, short l1) {
// unsigned int si0, si1, si2;
// si0 = l0;
// si1 = l1;
// si0 |= si1;
// si1 = 2047u;
// si0 = si0 <= si1;
// if (si0) {
// si0 = l1;
// si1 = 65528u;
// si0 &= si1;
// si1 = 5u;
// si0 <<= (si1 & 31);
// si1 = l0;
// si2 = 65528u;
// si1 &= si2;
// si2 = 3u;
// si1 >>= (si2 & 31);
// si0 += si1;
// // si1 = 1024u;
// // si0 += si1;
// // si0 = load(si0);
// si0 = tilemap[si0];
// } else {
// si0 = 0u;
// }
// return si0;
// }
enum TileType getTileType(int tileID) {
return (enum TileType) track.tileTypes[tileID];
}
unsigned short samplePixel(short xPos, short yPos) {
xPos += xOffset;
yPos += yOffset;
// Divide by 4
xPos = xPos >> 2;
yPos = yPos >> 2;
// Get the position of the pixel in the tile
int xPixelInTile = xPos & (tileSize - 1);
int yPixelInTile = yPos & (tileSize - 1);
// Get the colour of the pixel in the tile
unsigned char index = /*track.*/tileset[getTileID(xPos, yPos)][(yPixelInTile * tileSize) + xPixelInTile];
return /*track.*/palette[index];
// return index;
}
// unsigned short samplePixelFast(short xPos, short yPos) {
// xPos += xOffset;
// yPos += yOffset;
// // Divide by 4
// xPos = xPos >> 2;
// yPos = yPos >> 2;
// // Get the colour of the middle pixel of the tile
// return *track.tileImageData[getTileID(xPos, yPos)][(4 * tileSize) + 4];
// }