- [FIX] Els tiles necessiten un uint16_t
- [NEW] Pintat de una room - [NEW] Càrrega de paletes en format JASC
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
#include "images.h"
|
#include "images.h"
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
namespace images
|
namespace images
|
||||||
{
|
{
|
||||||
@@ -14,4 +18,42 @@ namespace images
|
|||||||
images[filename] = image;
|
images[filename] = image;
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int loadPalette(std::string filename)
|
||||||
|
{
|
||||||
|
uint32_t palette[16];
|
||||||
|
|
||||||
|
FILE *file = fopen(filename.c_str(), "r");
|
||||||
|
if (!file) return -1;
|
||||||
|
|
||||||
|
char header[32];
|
||||||
|
int version, count;
|
||||||
|
|
||||||
|
// Read and validate header
|
||||||
|
if (!fgets(header, sizeof(header), file) || strncmp(header, "JASC-PAL", 8) != 0) {
|
||||||
|
fclose(file);
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fscanf(file, "%d\n%d\n", &version, &count) != 2 || count != 16) {
|
||||||
|
fclose(file);
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read 16 RGB triplets
|
||||||
|
for (int i = 0; i < 16; ++i) {
|
||||||
|
int r, g, b;
|
||||||
|
if (fscanf(file, "%d %d %d\n", &r, &g, &b) != 3) {
|
||||||
|
fclose(file);
|
||||||
|
return -4;
|
||||||
|
}
|
||||||
|
palette[i] = (r << 16) | (g << 8) | b;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(file);
|
||||||
|
|
||||||
|
draw::setPalette(palette, 16);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,4 +5,5 @@
|
|||||||
namespace images
|
namespace images
|
||||||
{
|
{
|
||||||
draw::surface *getImage(std::string filename);
|
draw::surface *getImage(std::string filename);
|
||||||
|
int loadPalette(std::string filename);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,22 @@
|
|||||||
#include "rooms.h"
|
#include "rooms.h"
|
||||||
|
#include "japi/draw.h"
|
||||||
|
#include "japi/game.h"
|
||||||
|
#include "images.h"
|
||||||
|
|
||||||
namespace game
|
bool loop();
|
||||||
|
|
||||||
|
void game::init()
|
||||||
{
|
{
|
||||||
int init()
|
draw::init("DILEMMAKER v0.1", 320, 240, 3, false);
|
||||||
{
|
game::setState(loop);
|
||||||
rooms::load();
|
rooms::load();
|
||||||
|
images::loadPalette("./data/palette/zx-spectrum.pal");
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
|
bool loop()
|
||||||
|
{
|
||||||
|
draw::setViewport(32, 24, 256, 128);
|
||||||
|
rooms::draw();
|
||||||
|
draw::render();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
@@ -198,7 +198,7 @@ namespace rooms
|
|||||||
std::string value;
|
std::string value;
|
||||||
while (std::getline(ss, value, ',')) {
|
while (std::getline(ss, value, ',')) {
|
||||||
if (!value.empty()) {
|
if (!value.empty()) {
|
||||||
room.tiles[col][row] = static_cast<uint8_t>(std::stoi(value));
|
room.tiles[col][row] = std::stoi(value);
|
||||||
++col;
|
++col;
|
||||||
if (col == 32) {
|
if (col == 32) {
|
||||||
col = 0;
|
col = 0;
|
||||||
@@ -246,4 +246,20 @@ namespace rooms
|
|||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void draw()
|
||||||
|
{
|
||||||
|
room_t &room = rooms["02"];
|
||||||
|
draw::setSource(room.tileSetFile);
|
||||||
|
|
||||||
|
for (int y=0; y<16; ++y) {
|
||||||
|
for (int x=0; x<32; ++x) {
|
||||||
|
uint16_t tile = room.tiles[x][y];
|
||||||
|
if (tile>0) {
|
||||||
|
tile--;
|
||||||
|
draw::draw(x*8, y*8, 8, 8, (tile%24)*8, (tile/24)*8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,10 +59,11 @@ struct room_t
|
|||||||
uint8_t itemColor2 {0};
|
uint8_t itemColor2 {0};
|
||||||
std::vector<enemy_t> enemies;
|
std::vector<enemy_t> enemies;
|
||||||
std::vector<item_t> items;
|
std::vector<item_t> items;
|
||||||
uint8_t tiles[32][16];
|
uint16_t tiles[32][16];
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace rooms
|
namespace rooms
|
||||||
{
|
{
|
||||||
void load();
|
void load();
|
||||||
|
void draw();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user