Implementado el cambio de paleta durante el juego

This commit is contained in:
2022-10-25 21:51:30 +02:00
parent bcb56e17f2
commit dc84ed79d6
31 changed files with 297 additions and 164 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -27,6 +27,22 @@ color=yellow
flip=true flip=true
[/enemy] [/enemy]
[enemy]
tileset=wave_v.png
animation=wave_v.ani
width=8
height=8
x=24
y=4
vx=0
vy=0.8
x1=24
y1=2
x2=24
y2=7
color=yellow
[/enemy]
[item] [item]
tileset=items.png tileset=items.png
tile=48 tile=48
@@ -34,3 +50,19 @@ x=7
y=2 y=2
counter=1 counter=1
[/item] [/item]
[item]
tileset=items.png
tile=48
x=1
y=14
counter=2
[/item]
[item]
tileset=items.png
tile=48
x=30
y=9
counter=3
[/item]

View File

@@ -6,18 +6,18 @@
32,32,32,32,0,0,0,0,32,32,67,68,67,68,67,68,67,68,67,68,67,68,67,68,67,68,67,68,67,68,67,68, 32,32,32,32,0,0,0,0,32,32,67,68,67,68,67,68,67,68,67,68,67,68,67,68,67,68,67,68,67,68,67,68,
32,32,0,0,0,0,0,0,0,0,91,92,91,92,91,92,91,92,91,92,91,92,91,92,91,92,91,92,91,92,91,92, 32,32,0,0,0,0,0,0,0,0,91,92,91,92,91,92,91,92,91,92,91,92,91,92,91,92,91,92,91,92,91,92,
93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93, 93,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93,
117,0,0,0,403,403,403,403,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117, 117,0,0,0,426,427,426,427,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,
117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117, 117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,
117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117, 117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,
141,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117, 141,0,0,426,427,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,
32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117, 32,0,0,0,426,427,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,526,403,403,403,403,403,550,0,0,0,117, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,526,403,403,403,403,403,550,0,0,0,117,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,526,426,0,0,0,0,0,427,550,0,0,117, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,526,0,0,0,0,0,0,0,550,0,0,117,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,526,426,0,0,0,0,0,0,0,0,403,403,117, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,526,0,0,0,0,0,0,0,0,0,403,403,117,
32,67,68,67,68,403,403,403,550,0,0,0,0,0,526,403,67,68,67,68,403,550,0,0,0,0,0,0,0,0,140,141, 32,67,68,67,68,403,403,403,403,403,403,0,0,0,526,67,68,67,68,67,68,67,68,0,0,0,0,0,0,0,140,141,
32,91,92,91,92,0,0,0,427,550,0,0,0,526,426,0,91,92,91,92,0,427,550,0,0,0,0,0,0,0,0,32, 32,91,92,91,92,0,0,0,0,0,0,0,0,526,0,91,92,91,92,91,92,91,92,0,0,0,0,0,0,0,0,32,
135,0,0,0,0,0,0,0,0,0,0,0,526,426,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 135,0,0,0,0,0,0,0,0,0,0,0,526,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
135,0,0,0,0,0,0,0,0,0,0,526,426,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 135,0,0,0,0,0,0,0,0,0,0,526,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90 89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90,89,90
</data> </data>
</layer> </layer>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

@@ -291,7 +291,7 @@ void Screen::iniSpectrumFade()
const std::vector<std::string> vColors = {"black", "blue", "red", "magenta", "green", "cyan", "yellow", "bright_white"}; const std::vector<std::string> vColors = {"black", "blue", "red", "magenta", "green", "cyan", "yellow", "bright_white"};
for (auto v : vColors) for (auto v : vColors)
{ {
spectrumColor.push_back(stringToColor(v)); spectrumColor.push_back(stringToColor(options->palette, v));
} }
} }

View File

@@ -380,11 +380,9 @@ bool checkCollision(SDL_Point &p, d_line_t &l)
} }
// Devuelve un color_t a partir de un string // Devuelve un color_t a partir de un string
color_t stringToColor(std::string str) color_t stringToColor(palette_e pal, std::string str)
{ {
const std::string palette = "spectrum"; if (pal == p_zxspectrum)
if (palette == "spectrum")
{ {
if (str == "black") if (str == "black")
{ {
@@ -467,7 +465,7 @@ color_t stringToColor(std::string str)
} }
} }
else else if (pal == p_zxarne)
{ // zxarne { // zxarne
if (str == "black") if (str == "black")
{ {

View File

@@ -47,6 +47,13 @@ struct color_t
Uint8 b; Uint8 b;
}; };
// Tipos de paleta
enum palette_e
{
p_zxspectrum,
p_zxarne
};
// Estructura para saber la seccion y subseccion del programa // Estructura para saber la seccion y subseccion del programa
struct section_t struct section_t
{ {
@@ -67,6 +74,7 @@ struct options_t
bool keepAspect; // Indica si se ha de mantener la relación de aspecto al poner el modo a pantalla completa bool keepAspect; // Indica si se ha de mantener la relación de aspecto al poner el modo a pantalla completa
bool borderEnabled; // Indica si ha de mostrar el borde en el modo de ventana bool borderEnabled; // Indica si ha de mostrar el borde en el modo de ventana
float borderSize; // Porcentaje de borde que se añade a lo ventana float borderSize; // Porcentaje de borde que se añade a lo ventana
palette_e palette; // Paleta de colores a usar en el juego
}; };
// Calcula el cuadrado de la distancia entre dos puntos // Calcula el cuadrado de la distancia entre dos puntos
@@ -106,7 +114,7 @@ bool checkCollision(SDL_Point &p, d_line_t &l);
void normalizeLine(d_line_t &l); void normalizeLine(d_line_t &l);
// Devuelve un color_t a partir de un string // Devuelve un color_t a partir de un string
color_t stringToColor(std::string str); color_t stringToColor(palette_e pal, std::string str);
// Convierte una cadena en un valor booleano // Convierte una cadena en un valor booleano
bool stringToBool(std::string str); bool stringToBool(std::string str);

View File

@@ -1,12 +1,13 @@
#include "credits.h" #include "credits.h"
// Constructor // Constructor
Credits::Credits(SDL_Renderer *renderer, Screen *screen, Asset *asset) Credits::Credits(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options)
{ {
// Copia la dirección de los objetos // Copia la dirección de los objetos
this->renderer = renderer; this->renderer = renderer;
this->screen = screen; this->screen = screen;
this->asset = asset; this->asset = asset;
this->options = options;
// Reserva memoria para los punteros // Reserva memoria para los punteros
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
@@ -25,36 +26,36 @@ Credits::Credits(SDL_Renderer *renderer, Screen *screen, Asset *asset)
sprite->setRect({194, 174, 8, 8}); sprite->setRect({194, 174, 8, 8});
// Cambia el color del borde // Cambia el color del borde
screen->setBorderColor(stringToColor("black")); screen->setBorderColor(stringToColor(options->palette, "black"));
// Inicializa los textos // Inicializa los textos
texts.push_back({"", stringToColor("white")}); texts.push_back({"", stringToColor(options->palette, "white")});
texts.push_back({"INSTRUCTIONS:", stringToColor("yellow")}); texts.push_back({"INSTRUCTIONS:", stringToColor(options->palette, "yellow")});
texts.push_back({"", stringToColor("white")}); texts.push_back({"", stringToColor(options->palette, "white")});
texts.push_back({"HELP JAILDOC TO GET BACK ALL HIS", stringToColor("white")}); texts.push_back({"HELP JAILDOC TO GET BACK ALL HIS", stringToColor(options->palette, "white")});
texts.push_back({"PROJECTS AND GO TO THE JAIL TO", stringToColor("white")}); texts.push_back({"PROJECTS AND GO TO THE JAIL TO", stringToColor(options->palette, "white")});
texts.push_back({"FINISH THEM", stringToColor("white")}); texts.push_back({"FINISH THEM", stringToColor(options->palette, "white")});
texts.push_back({"", stringToColor("white")}); texts.push_back({"", stringToColor(options->palette, "white")});
texts.push_back({"", stringToColor("white")}); texts.push_back({"", stringToColor(options->palette, "white")});
texts.push_back({"KEYS:", stringToColor("yellow")}); texts.push_back({"KEYS:", stringToColor(options->palette, "yellow")});
texts.push_back({"", stringToColor("white")}); texts.push_back({"", stringToColor(options->palette, "white")});
texts.push_back({"USE CURSORS TO MOVE AND JUMP", stringToColor("white")}); texts.push_back({"USE CURSORS TO MOVE AND JUMP", stringToColor(options->palette, "white")});
texts.push_back({"F1-F4 TO CHANGE WINDOWS SIZE", stringToColor("white")}); texts.push_back({"F1-F4 TO CHANGE WINDOWS SIZE", stringToColor(options->palette, "white")});
texts.push_back({"F TO SWITCH TO FULLSCREEN", stringToColor("white")}); texts.push_back({"F TO SWITCH TO FULLSCREEN", stringToColor(options->palette, "white")});
texts.push_back({"B TO DE/ACTIVATE THE BORDER SC.", stringToColor("white")}); texts.push_back({"B TO DE/ACTIVATE THE BORDER SC.", stringToColor(options->palette, "white")});
texts.push_back({"M TO TURN ON/OFF THE MUSIC", stringToColor("white")}); texts.push_back({"M TO TURN ON/OFF THE MUSIC", stringToColor(options->palette, "white")});
texts.push_back({"ESC TO EXIT GAME", stringToColor("white")}); texts.push_back({"ESC TO EXIT GAME", stringToColor(options->palette, "white")});
texts.push_back({"", stringToColor("white")}); texts.push_back({"", stringToColor(options->palette, "white")});
texts.push_back({"", stringToColor("white")}); texts.push_back({"", stringToColor(options->palette, "white")});
texts.push_back({"A GAME BY JAILDESIGNER", stringToColor("yellow")}); texts.push_back({"A GAME BY JAILDESIGNER", stringToColor(options->palette, "yellow")});
texts.push_back({"MADE ON SUMMER/FALL 2022", stringToColor("yellow")}); texts.push_back({"MADE ON SUMMER/FALL 2022", stringToColor(options->palette, "yellow")});
texts.push_back({"", stringToColor("white")}); texts.push_back({"", stringToColor(options->palette, "white")});
texts.push_back({"", stringToColor("white")}); texts.push_back({"", stringToColor(options->palette, "white")});
texts.push_back({"I LOVE JAILGAMES!}", stringToColor("white")}); texts.push_back({"I LOVE JAILGAMES!", stringToColor(options->palette, "white")});
texts.push_back({"", stringToColor("white")}); texts.push_back({"", stringToColor(options->palette, "white")});
// Crea la textura para el texto que se escribe en pantalla // Crea la textura para el texto que se escribe en pantalla
textTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT); textTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, GAMECANVAS_WIDTH, GAMECANVAS_HEIGHT);
@@ -124,7 +125,7 @@ void Credits::fillTexture()
{ {
// Rellena la textura de texto // Rellena la textura de texto
SDL_SetRenderTarget(renderer, textTexture); SDL_SetRenderTarget(renderer, textTexture);
const color_t c = stringToColor("black"); const color_t c = stringToColor(options->palette, "black");
SDL_SetRenderDrawColor(renderer, c.r, c.g, c.b, 0x00); SDL_SetRenderDrawColor(renderer, c.r, c.g, c.b, 0x00);
SDL_RenderClear(renderer); SDL_RenderClear(renderer);
@@ -138,6 +139,9 @@ void Credits::fillTexture()
i++; i++;
} }
// Escribe el corazón
text->writeColored(194, 176, "}", stringToColor(options->palette, "bright_red"));
SDL_SetRenderTarget(renderer, nullptr); SDL_SetRenderTarget(renderer, nullptr);
// Rellena la textura que cubre el texto // Rellena la textura que cubre el texto

View File

@@ -34,6 +34,7 @@ private:
SDL_Texture *coverTexture; // Textura para cubrir el texto SDL_Texture *coverTexture; // Textura para cubrir el texto
Texture *texture; // Textura para el sprite de brillo Texture *texture; // Textura para el sprite de brillo
AnimatedSprite *sprite; // Sprite para el brillo del corazón AnimatedSprite *sprite; // Sprite para el brillo del corazón
options_t *options; // Puntero a las opciones del juego
// Variables // Variables
int counter; // Contador int counter; // Contador
@@ -61,7 +62,7 @@ private:
public: public:
// Constructor // Constructor
Credits(SDL_Renderer *renderer, Screen *screen, Asset *asset); Credits(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options);
// Destructor // Destructor
~Credits(); ~Credits();

View File

@@ -1,7 +1,7 @@
#include "demo.h" #include "demo.h"
// Constructor // Constructor
Demo::Demo(SDL_Renderer *renderer, Screen *screen, Asset *asset, Debug *debug) Demo::Demo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, Debug *debug)
{ {
// Inicia algunas variables // Inicia algunas variables
board.iniClock = SDL_GetTicks(); board.iniClock = SDL_GetTicks();
@@ -19,11 +19,12 @@ Demo::Demo(SDL_Renderer *renderer, Screen *screen, Asset *asset, Debug *debug)
this->asset = asset; this->asset = asset;
this->screen = screen; this->screen = screen;
this->debug = debug; this->debug = debug;
this->options = options;
// Crea los objetos // Crea los objetos
itemTracker = new ItemTracker(); itemTracker = new ItemTracker();
scoreboard = new ScoreBoard(renderer, asset, &board); scoreboard = new ScoreBoard(renderer, asset, options, &board);
room = new Room(asset->get(currentRoom), renderer, screen, asset, itemTracker, &board.items, debug); room = new Room(asset->get(currentRoom), renderer, screen, asset, options, itemTracker, &board.items, debug);
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
@@ -35,7 +36,7 @@ Demo::Demo(SDL_Renderer *renderer, Screen *screen, Asset *asset, Debug *debug)
board.items = 0; board.items = 0;
board.rooms = 1; board.rooms = 1;
const color_t c = room->getBorderColor(); const color_t c = room->getBorderColor();
board.color = (c.r + c.g + c.b == 0) ? stringToColor("white") : c; // Si el color es negro lo cambia a blanco board.color = (c.r + c.g + c.b == 0) ? stringToColor(options->palette, "white") : c; // Si el color es negro lo cambia a blanco
board.music = !debug->getEnabled(); board.music = !debug->getEnabled();
@@ -63,7 +64,7 @@ void Demo::checkEventHandler()
if (eventHandler->type == SDL_QUIT) if (eventHandler->type == SDL_QUIT)
{ {
section.name = SECTION_PROG_QUIT; section.name = SECTION_PROG_QUIT;
screen->setBorderColor(stringToColor("black")); screen->setBorderColor(stringToColor(options->palette, "black"));
break; break;
} }
else if ((eventHandler->type == SDL_KEYDOWN) and (eventHandler->key.repeat == 0)) else if ((eventHandler->type == SDL_KEYDOWN) and (eventHandler->key.repeat == 0))
@@ -163,7 +164,7 @@ void Demo::renderRoomName()
{ {
// Texto en el centro de la pantalla // Texto en el centro de la pantalla
SDL_Rect rect = {0, 16 * BLOCK, PLAY_AREA_WIDTH, BLOCK * 2}; SDL_Rect rect = {0, 16 * BLOCK, PLAY_AREA_WIDTH, BLOCK * 2};
color_t color = stringToColor("white"); color_t color = stringToColor(options->palette, "white");
SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 0xFF); SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 0xFF);
SDL_RenderFillRect(renderer, &rect); SDL_RenderFillRect(renderer, &rect);
@@ -191,11 +192,11 @@ bool Demo::changeRoom(std::string file)
room = nullptr; room = nullptr;
// Crea un objeto habitación nuevo a partir del fichero // Crea un objeto habitación nuevo a partir del fichero
room = new Room(asset->get(file), renderer, screen, asset, itemTracker, &board.items, debug); room = new Room(asset->get(file), renderer, screen, asset, options, itemTracker, &board.items, debug);
// Actualiza el marcador // Actualiza el marcador
const color_t c = room->getBorderColor(); // Pone el color del marcador const color_t c = room->getBorderColor(); // Pone el color del marcador
board.color = (c.r + c.g + c.b == 0) ? stringToColor("white") : c; // Si el color es negro lo cambia a blanco board.color = (c.r + c.g + c.b == 0) ? stringToColor(options->palette, "white") : c; // Si el color es negro lo cambia a blanco
return true; return true;
} }

View File

@@ -31,6 +31,7 @@ private:
ScoreBoard *scoreboard; // Objeto encargado de gestionar el marcador ScoreBoard *scoreboard; // Objeto encargado de gestionar el marcador
ItemTracker *itemTracker; // Lleva el control de los objetos recogidos ItemTracker *itemTracker; // Lleva el control de los objetos recogidos
Debug *debug; // Objeto para gestionar la información de debug Debug *debug; // Objeto para gestionar la información de debug
options_t *options; // Puntero a las opciones del juego
// Variables // Variables
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
@@ -65,7 +66,7 @@ private:
public: public:
// Constructor // Constructor
Demo(SDL_Renderer *renderer, Screen *screen, Asset *asset, Debug *debug); Demo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, Debug *debug);
// Destructor // Destructor
~Demo(); ~Demo();

View File

@@ -9,7 +9,7 @@ Director::Director(std::string path)
section.name = SECTION_PROG_LOGO; section.name = SECTION_PROG_LOGO;
section.subsection = SUBSECTION_LOGO_TO_INTRO; section.subsection = SUBSECTION_LOGO_TO_INTRO;
section.name = SECTION_PROG_CREDITS; section.name = SECTION_PROG_LOGO;
// Crea el objeto que controla los ficheros de recursos // Crea el objeto que controla los ficheros de recursos
asset = new Asset(path.substr(0, path.find_last_of("\\/"))); asset = new Asset(path.substr(0, path.find_last_of("\\/")));
@@ -70,6 +70,7 @@ bool Director::loadConfig()
options->keepAspect = true; options->keepAspect = true;
options->borderEnabled = true; options->borderEnabled = true;
options->borderSize = 0.1f; options->borderSize = 0.1f;
options->palette = p_zxspectrum;
// Indicador de éxito en la carga // Indicador de éxito en la carga
bool success = true; bool success = true;
@@ -167,6 +168,7 @@ bool Director::saveConfig()
file << "keepAspect=" + boolToString(options->keepAspect) + "\n"; file << "keepAspect=" + boolToString(options->keepAspect) + "\n";
file << "borderEnabled=" + boolToString(options->borderEnabled) + "\n"; file << "borderEnabled=" + boolToString(options->borderEnabled) + "\n";
file << "borderSize=" + std::to_string(options->borderSize) + "\n"; file << "borderSize=" + std::to_string(options->borderSize) + "\n";
file << "palette=" + std::to_string(options->palette) + "\n";
// Cierra el fichero // Cierra el fichero
file.close(); file.close();
@@ -246,6 +248,21 @@ bool Director::setOptions(options_t *options, std::string var, std::string value
} }
} }
else if (var == "palette")
{
const int pal = std::stoi(value);
if (pal == 0)
{
options->palette = p_zxspectrum;
}
else if (pal == 1)
{
options->palette = p_zxarne;
}
}
else if (var == "") else if (var == "")
{ {
} }
@@ -623,6 +640,8 @@ bool Director::setFileList()
// Intro // Intro
asset->add("/data/title/loading_screen_bn.png", t_bitmap); asset->add("/data/title/loading_screen_bn.png", t_bitmap);
asset->add("/data/title/loading_screen_color.png", t_bitmap); asset->add("/data/title/loading_screen_color.png", t_bitmap);
asset->add("/data/title/loading_screen_bn_zxarne.png", t_bitmap);
asset->add("/data/title/loading_screen_color_zxarne.png", t_bitmap);
// Credits // Credits
asset->add("/data/credits/shine.png", t_bitmap); asset->add("/data/credits/shine.png", t_bitmap);
@@ -652,7 +671,7 @@ void Director::setSection(section_t section)
// Ejecuta la seccion de juego con el logo // Ejecuta la seccion de juego con el logo
void Director::runLogo() void Director::runLogo()
{ {
logo = new Logo(renderer, screen, asset, section.subsection); logo = new Logo(renderer, screen, asset, options, section.subsection);
setSection(logo->run()); setSection(logo->run());
delete logo; delete logo;
} }
@@ -660,7 +679,7 @@ void Director::runLogo()
// Ejecuta la seccion de juego de la introducción // Ejecuta la seccion de juego de la introducción
void Director::runIntro() void Director::runIntro()
{ {
intro = new Intro(renderer, screen, asset); intro = new Intro(renderer, screen, asset, options);
setSection(intro->run()); setSection(intro->run());
delete intro; delete intro;
} }
@@ -672,7 +691,7 @@ void Director::runTitle()
{ {
JA_PlayMusic(music); JA_PlayMusic(music);
} }
title = new Title(renderer, screen, asset); title = new Title(renderer, screen, asset, options);
setSection(title->run()); setSection(title->run());
delete title; delete title;
} }
@@ -680,7 +699,7 @@ void Director::runTitle()
// Ejecuta la seccion de los creditos del juego // Ejecuta la seccion de los creditos del juego
void Director::runCredits() void Director::runCredits()
{ {
credits = new Credits(renderer, screen, asset); credits = new Credits(renderer, screen, asset, options);
setSection(credits->run()); setSection(credits->run());
delete credits; delete credits;
} }
@@ -688,7 +707,7 @@ void Director::runCredits()
// Ejecuta la seccion de la demo, donde se ven pantallas del juego // Ejecuta la seccion de la demo, donde se ven pantallas del juego
void Director::runDemo() void Director::runDemo()
{ {
demo = new Demo(renderer, screen, asset, debug); demo = new Demo(renderer, screen, asset, options, debug);
setSection(demo->run()); setSection(demo->run());
delete demo; delete demo;
} }
@@ -697,7 +716,7 @@ void Director::runDemo()
void Director::runGame() void Director::runGame()
{ {
JA_StopMusic(); JA_StopMusic();
game = new Game(renderer, screen, asset, input, debug); game = new Game(renderer, screen, asset, options, input, debug);
setSection(game->run()); setSection(game->run());
delete game; delete game;
} }
@@ -712,18 +731,23 @@ void Director::run()
case SECTION_PROG_LOGO: case SECTION_PROG_LOGO:
runLogo(); runLogo();
break; break;
case SECTION_PROG_INTRO: case SECTION_PROG_INTRO:
runIntro(); runIntro();
break; break;
case SECTION_PROG_TITLE: case SECTION_PROG_TITLE:
runTitle(); runTitle();
break; break;
case SECTION_PROG_CREDITS: case SECTION_PROG_CREDITS:
runCredits(); runCredits();
break; break;
case SECTION_PROG_DEMO: case SECTION_PROG_DEMO:
runDemo(); runDemo();
break; break;
case SECTION_PROG_GAME: case SECTION_PROG_GAME:
runGame(); runGame();
break; break;

View File

@@ -1,7 +1,7 @@
#include "game.h" #include "game.h"
// Constructor // Constructor
Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Debug *debug) Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, Input *input, Debug *debug)
{ {
// Inicia algunas variables // Inicia algunas variables
board.iniClock = SDL_GetTicks(); board.iniClock = SDL_GetTicks();
@@ -14,6 +14,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, D
this->screen = screen; this->screen = screen;
this->input = input; this->input = input;
this->debug = debug; this->debug = debug;
this->options = options;
// **** // ****
// this->debug->setEnabled(true); // this->debug->setEnabled(true);
@@ -24,11 +25,11 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, D
// **** // ****
// Crea los objetos // Crea los objetos
scoreboard = new ScoreBoard(renderer, asset, &board); scoreboard = new ScoreBoard(renderer, asset, options, &board);
itemTracker = new ItemTracker(); itemTracker = new ItemTracker();
roomTracker = new RoomTracker(); roomTracker = new RoomTracker();
room = new Room(asset->get(currentRoom), renderer, screen, asset, itemTracker, &board.items, debug); room = new Room(asset->get(currentRoom), renderer, screen, asset, options, itemTracker, &board.items, debug);
player = new Player(spawnPoint, asset->get("player.png"), asset->get("player.ani"), renderer, asset, input, room, debug); player = new Player(spawnPoint, asset->get("player.png"), asset->get("player.ani"), renderer, asset, options, input, room, debug);
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
music = JA_LoadMusic(asset->get("game.ogg").c_str()); music = JA_LoadMusic(asset->get("game.ogg").c_str());
@@ -42,7 +43,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, D
board.items = 0; board.items = 0;
board.rooms = 1; board.rooms = 1;
const color_t c = room->getBorderColor(); const color_t c = room->getBorderColor();
board.color = (c.r + c.g + c.b == 0) ? stringToColor("white") : c; // Si el color es negro lo cambia a blanco board.color = (c.r + c.g + c.b == 0) ? stringToColor(options->palette, "white") : c; // Si el color es negro lo cambia a blanco
roomTracker->addRoom(currentRoom); roomTracker->addRoom(currentRoom);
paused = false; paused = false;
blackScreen = false; blackScreen = false;
@@ -82,7 +83,7 @@ void Game::checkEventHandler()
if (eventHandler->type == SDL_QUIT) if (eventHandler->type == SDL_QUIT)
{ {
section.name = SECTION_PROG_QUIT; section.name = SECTION_PROG_QUIT;
screen->setBorderColor(stringToColor("black")); screen->setBorderColor(stringToColor(options->palette, "black"));
break; break;
} }
else if ((eventHandler->type == SDL_KEYDOWN) and (eventHandler->key.repeat == 0)) else if ((eventHandler->type == SDL_KEYDOWN) and (eventHandler->key.repeat == 0))
@@ -152,6 +153,18 @@ void Game::checkEventHandler()
reLoadTextures(); reLoadTextures();
break; break;
case SDL_SCANCODE_F5:
if (options->palette == p_zxspectrum)
{
options->palette = p_zxarne;
}
else
{
options->palette = p_zxspectrum;
}
reLoadTextures();
break;
default: default:
break; break;
} }
@@ -273,7 +286,7 @@ void Game::renderRoomName()
{ {
// Texto en el centro de la pantalla // Texto en el centro de la pantalla
SDL_Rect rect = {0, 16 * BLOCK, PLAY_AREA_WIDTH, BLOCK * 2}; SDL_Rect rect = {0, 16 * BLOCK, PLAY_AREA_WIDTH, BLOCK * 2};
color_t color = stringToColor("white"); color_t color = stringToColor(options->palette, "white");
SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 0xFF); SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 0xFF);
SDL_RenderFillRect(renderer, &rect); SDL_RenderFillRect(renderer, &rect);
@@ -293,11 +306,11 @@ bool Game::changeRoom(std::string file)
room = nullptr; room = nullptr;
// Crea un objeto habitación nuevo a partir del fichero // Crea un objeto habitación nuevo a partir del fichero
room = new Room(asset->get(file), renderer, screen, asset, itemTracker, &board.items, debug); room = new Room(asset->get(file), renderer, screen, asset, options, itemTracker, &board.items, debug);
// Actualiza el marcador // Actualiza el marcador
const color_t c = room->getBorderColor(); // Pone el color del marcador const color_t c = room->getBorderColor(); // Pone el color del marcador
board.color = (c.r + c.g + c.b == 0) ? stringToColor("white") : c; // Si el color es negro lo cambia a blanco board.color = (c.r + c.g + c.b == 0) ? stringToColor(options->palette, "white") : c; // Si el color es negro lo cambia a blanco
if (roomTracker->addRoom(file)) if (roomTracker->addRoom(file))
{ // Incrementa el contador de habitaciones visitadas { // Incrementa el contador de habitaciones visitadas
board.rooms++; board.rooms++;
@@ -382,8 +395,8 @@ void Game::killPlayer()
setBlackScreen(); setBlackScreen();
// Crea la nueva habitación y el nuevo jugador // Crea la nueva habitación y el nuevo jugador
room = new Room(asset->get(currentRoom), renderer, screen, asset, itemTracker, &board.items, debug); room = new Room(asset->get(currentRoom), renderer, screen, asset, options, itemTracker, &board.items, debug);
player = new Player(spawnPoint, asset->get("player.png"), asset->get("player.ani"), renderer, asset, input, room, debug); player = new Player(spawnPoint, asset->get("player.png"), asset->get("player.ani"), renderer, asset, options, input, room, debug);
room->pause(); room->pause();
player->pause(); player->pause();
@@ -428,6 +441,6 @@ void Game::renderBlackScreen()
if (blackScreen) if (blackScreen)
{ {
screen->clean(); screen->clean();
screen->setBorderColor(stringToColor("black")); screen->setBorderColor(stringToColor(options->palette, "black"));
} }
} }

View File

@@ -37,6 +37,7 @@ private:
Text *text; // Objeto para los textos del juego Text *text; // Objeto para los textos del juego
ScoreBoard *scoreboard; // Objeto encargado de gestionar el marcador ScoreBoard *scoreboard; // Objeto encargado de gestionar el marcador
Debug *debug; // Objeto para gestionar la información de debug Debug *debug; // Objeto para gestionar la información de debug
options_t *options; // Puntero a las opciones del juego
Test *test; Test *test;
// Variables // Variables
@@ -105,7 +106,7 @@ private:
public: public:
// Constructor // Constructor
Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input, Debug *debug); Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, Input *input, Debug *debug);
// Destructor // Destructor
~Game(); ~Game();

View File

@@ -1,17 +1,26 @@
#include "intro.h" #include "intro.h"
// Constructor // Constructor
Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset) Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options)
{ {
// Copia la dirección de los objetos // Copia la dirección de los objetos
this->renderer = renderer; this->renderer = renderer;
this->screen = screen; this->screen = screen;
this->asset = asset; this->asset = asset;
this->options = options;
// Reserva memoria para los punteros // Reserva memoria para los punteros
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
if (options->palette == p_zxspectrum)
{
loadingScreenTexture1 = new Texture(renderer, asset->get("loading_screen_bn.png")); loadingScreenTexture1 = new Texture(renderer, asset->get("loading_screen_bn.png"));
loadingScreenTexture2 = new Texture(renderer, asset->get("loading_screen_color.png")); loadingScreenTexture2 = new Texture(renderer, asset->get("loading_screen_color.png"));
}
else if (options->palette == p_zxarne)
{
loadingScreenTexture1 = new Texture(renderer, asset->get("loading_screen_bn_zxarne.png"));
loadingScreenTexture2 = new Texture(renderer, asset->get("loading_screen_color_zxarne.png"));
}
sprite1 = new Sprite(0, 0, loadingScreenTexture1->getWidth(), loadingScreenTexture1->getHeight(), loadingScreenTexture1, renderer); sprite1 = new Sprite(0, 0, loadingScreenTexture1->getWidth(), loadingScreenTexture1->getHeight(), loadingScreenTexture1, renderer);
sprite2 = new Sprite(0, 0, loadingScreenTexture2->getWidth(), loadingScreenTexture2->getHeight(), loadingScreenTexture2, renderer); sprite2 = new Sprite(0, 0, loadingScreenTexture2->getWidth(), loadingScreenTexture2->getHeight(), loadingScreenTexture2, renderer);
loadingSound1 = JA_LoadMusic(asset->get("loading_sound1.ogg").c_str()); loadingSound1 = JA_LoadMusic(asset->get("loading_sound1.ogg").c_str());
@@ -57,7 +66,7 @@ Intro::Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset)
} }
// Cambia el color del borde // Cambia el color del borde
screen->setBorderColor(stringToColor("black")); screen->setBorderColor(stringToColor(options->palette, "black"));
} }
// Destructor // Destructor

View File

@@ -27,6 +27,7 @@ private:
SDL_Event *eventHandler; // Manejador de eventos SDL_Event *eventHandler; // Manejador de eventos
Sprite *sprite1; // Sprite para manejar la textura loadingScreenTexture1 Sprite *sprite1; // Sprite para manejar la textura loadingScreenTexture1
Sprite *sprite2; // Sprite para manejar la textura loadingScreenTexture2 Sprite *sprite2; // Sprite para manejar la textura loadingScreenTexture2
options_t *options; // Puntero a las opciones del juego
// Variables // Variables
int preCounter; // Contador previo para realizar una pausa inicial int preCounter; // Contador previo para realizar una pausa inicial
@@ -63,7 +64,7 @@ private:
public: public:
// Constructor // Constructor
Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset); Intro(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options);
// Destructor // Destructor
~Intro(); ~Intro();

View File

@@ -1,12 +1,13 @@
#include "logo.h" #include "logo.h"
// Constructor // Constructor
Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, int subsection) Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, int subsection)
{ {
// Copia la dirección de los objetos // Copia la dirección de los objetos
this->renderer = renderer; this->renderer = renderer;
this->screen = screen; this->screen = screen;
this->asset = asset; this->asset = asset;
this->options = options;
// Reserva memoria para los punteros // Reserva memoria para los punteros
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
@@ -21,13 +22,13 @@ Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, int subsection)
sprite.push_back(new Sprite(0, i, texture->getWidth(), 1, texture, renderer)); sprite.push_back(new Sprite(0, i, texture->getWidth(), 1, texture, renderer));
if (i % 2 == 0) if (i % 2 == 0)
{ {
sprite[i]->setPosX(256 + (i * 3)); sprite.at(i)->setPosX(256 + (i * 3));
} }
else else
{ {
sprite[i]->setPosX(-181 - (i * 3)); sprite.at(i)->setPosX(-181 - (i * 3));
} }
sprite[i]->setPosY(83 + i); sprite.at(i)->setPosY(83 + i);
} }
// Inicializa variables // Inicializa variables
@@ -44,11 +45,11 @@ Logo::Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, int subsection)
const std::vector<std::string> vColors = {"black", "blue", "red", "magenta", "green", "cyan", "yellow", "bright_white"}; const std::vector<std::string> vColors = {"black", "blue", "red", "magenta", "green", "cyan", "yellow", "bright_white"};
for (auto v : vColors) for (auto v : vColors)
{ {
color.push_back(stringToColor(v)); color.push_back(stringToColor(options->palette, v));
} }
// Cambia el color del borde // Cambia el color del borde
screen->setBorderColor(stringToColor("black")); screen->setBorderColor(stringToColor(options->palette, "black"));
} }
// Destructor // Destructor
@@ -97,22 +98,22 @@ void Logo::updateJAILGAMES()
{ {
const int speed = 8; const int speed = 8;
const int dest = 37; const int dest = 37;
if (sprite[i]->getPosX() != 37) if (sprite.at(i)->getPosX() != 37)
{ {
if (i % 2 == 0) if (i % 2 == 0)
{ {
sprite[i]->incPosX(-speed); sprite.at(i)->incPosX(-speed);
if (sprite[i]->getPosX() < dest) if (sprite.at(i)->getPosX() < dest)
{ {
sprite[i]->setPosX(dest); sprite.at(i)->setPosX(dest);
} }
} }
else else
{ {
sprite[i]->incPosX(speed); sprite.at(i)->incPosX(speed);
if (sprite[i]->getPosX() > dest) if (sprite.at(i)->getPosX() > dest)
{ {
sprite[i]->setPosX(dest); sprite.at(i)->setPosX(dest);
} }
} }
} }
@@ -128,72 +129,72 @@ void Logo::updateTextureColors()
if (counter == ini + inc * 0) if (counter == ini + inc * 0)
{ {
texture2->setColor(color[0].r, color[0].g, color[0].b); texture2->setColor(color.at(0).r, color.at(0).g, color.at(0).b);
} }
else if (counter == ini + inc * 1) else if (counter == ini + inc * 1)
{ {
texture2->setColor(color[1].r, color[1].g, color[1].b); texture2->setColor(color.at(1).r, color.at(1).g, color.at(1).b);
} }
else if (counter == ini + inc * 2) else if (counter == ini + inc * 2)
{ {
texture2->setColor(color[2].r, color[2].g, color[2].b); texture2->setColor(color.at(2).r, color.at(2).g, color.at(2).b);
} }
else if (counter == ini + inc * 3) else if (counter == ini + inc * 3)
{ {
texture2->setColor(color[3].r, color[3].g, color[3].b); texture2->setColor(color.at(3).r, color.at(3).g, color.at(3).b);
} }
else if (counter == ini + inc * 4) else if (counter == ini + inc * 4)
{ {
texture2->setColor(color[4].r, color[4].g, color[4].b); texture2->setColor(color.at(4).r, color.at(4).g, color.at(4).b);
} }
else if (counter == ini + inc * 5) else if (counter == ini + inc * 5)
{ {
texture2->setColor(color[5].r, color[5].g, color[5].b); texture2->setColor(color.at(5).r, color.at(5).g, color.at(5).b);
} }
else if (counter == ini + inc * 6) else if (counter == ini + inc * 6)
{ {
texture2->setColor(color[6].r, color[6].g, color[6].b); texture2->setColor(color.at(6).r, color.at(6).g, color.at(6).b);
} }
else if (counter == ini + inc * 7) else if (counter == ini + inc * 7)
{ {
texture2->setColor(color[7].r, color[7].g, color[7].b); texture2->setColor(color.at(7).r, color.at(7).g, color.at(7).b);
} }
else if (counter == initFade + inc * 0) else if (counter == initFade + inc * 0)
{ {
texture->setColor(color[6].r, color[6].g, color[6].b); texture->setColor(color.at(6).r, color.at(6).g, color.at(6).b);
texture2->setColor(color[6].r, color[6].g, color[6].b); texture2->setColor(color.at(6).r, color.at(6).g, color.at(6).b);
} }
else if (counter == initFade + inc * 1) else if (counter == initFade + inc * 1)
{ {
texture->setColor(color[5].r, color[5].g, color[5].b); texture->setColor(color.at(5).r, color.at(5).g, color.at(5).b);
texture2->setColor(color[5].r, color[5].g, color[5].b); texture2->setColor(color.at(5).r, color.at(5).g, color.at(5).b);
} }
else if (counter == initFade + inc * 2) else if (counter == initFade + inc * 2)
{ {
texture->setColor(color[4].r, color[4].g, color[4].b); texture->setColor(color.at(4).r, color.at(4).g, color.at(4).b);
texture2->setColor(color[4].r, color[4].g, color[4].b); texture2->setColor(color.at(4).r, color.at(4).g, color.at(4).b);
} }
else if (counter == initFade + inc * 3) else if (counter == initFade + inc * 3)
{ {
texture->setColor(color[3].r, color[3].g, color[3].b); texture->setColor(color.at(3).r, color.at(3).g, color.at(3).b);
texture2->setColor(color[3].r, color[3].g, color[3].b); texture2->setColor(color.at(3).r, color.at(3).g, color.at(3).b);
} }
else if (counter == initFade + inc * 4) else if (counter == initFade + inc * 4)
{ {
texture->setColor(color[2].r, color[2].g, color[2].b); texture->setColor(color.at(2).r, color.at(2).g, color.at(2).b);
texture2->setColor(color[2].r, color[2].g, color[2].b); texture2->setColor(color.at(2).r, color.at(2).g, color.at(2).b);
} }
else if (counter == initFade + inc * 5) else if (counter == initFade + inc * 5)
{ {
texture->setColor(color[1].r, color[1].g, color[1].b); texture->setColor(color.at(1).r, color.at(1).g, color.at(1).b);
texture2->setColor(color[1].r, color[1].g, color[1].b); texture2->setColor(color.at(1).r, color.at(1).g, color.at(1).b);
} }
else if (counter == initFade + inc * 6) else if (counter == initFade + inc * 6)
{ {
texture->setColor(color[0].r, color[0].g, color[0].b); texture->setColor(color.at(0).r, color.at(0).g, color.at(0).b);
texture2->setColor(color[0].r, color[0].g, color[0].b); texture2->setColor(color.at(0).r, color.at(0).g, color.at(0).b);
} }
} }

View File

@@ -24,6 +24,7 @@ private:
SDL_Event *eventHandler; // Manejador de eventos SDL_Event *eventHandler; // Manejador de eventos
std::vector<Sprite *> sprite; // Vector con los sprites de cada linea que forman el bitmap JAILGAMES std::vector<Sprite *> sprite; // Vector con los sprites de cada linea que forman el bitmap JAILGAMES
Sprite *sprite2; // Sprite para manejar la textura2 Sprite *sprite2; // Sprite para manejar la textura2
options_t *options; // Puntero a las opciones del juego
// Variables // Variables
std::vector<color_t> color; // Vector con los colores para el fade std::vector<color_t> color; // Vector con los colores para el fade
@@ -52,7 +53,7 @@ private:
public: public:
// Constructor // Constructor
Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, int subsection); Logo(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, int subsection);
// Destructor // Destructor
~Logo(); ~Logo();

View File

@@ -3,7 +3,7 @@
#include <sstream> #include <sstream>
// Constructor // Constructor
Player::Player(player_t ini, std::string tileset, std::string animation, SDL_Renderer *renderer, Asset *asset, Input *input, Room *room, Debug *debug) Player::Player(player_t ini, std::string tileset, std::string animation, SDL_Renderer *renderer, Asset *asset, options_t *options, Input *input, Room *room, Debug *debug)
{ {
// Obten punteros a objetos // Obten punteros a objetos
this->asset = asset; this->asset = asset;
@@ -11,13 +11,14 @@ Player::Player(player_t ini, std::string tileset, std::string animation, SDL_Ren
this->input = input; this->input = input;
this->room = room; this->room = room;
this->debug = debug; this->debug = debug;
this->options = options;
// Crea objetos // Crea objetos
texture = new Texture(renderer, asset->get(tileset)); texture = new Texture(renderer, asset->get(tileset));
sprite = new AnimatedSprite(texture, renderer, animation); sprite = new AnimatedSprite(texture, renderer, animation);
// Inicializa variables // Inicializa variables
color = stringToColor("white"); color = stringToColor(options->palette, "white");
onBorder = false; onBorder = false;
border = BORDER_TOP; border = BORDER_TOP;
invincible = false; invincible = false;

View File

@@ -43,6 +43,7 @@ public:
Texture *texture; // Textura con los graficos del enemigo Texture *texture; // Textura con los graficos del enemigo
AnimatedSprite *sprite; // Sprite del enemigo AnimatedSprite *sprite; // Sprite del enemigo
Debug *debug; // Objeto para gestionar la información de debug Debug *debug; // Objeto para gestionar la información de debug
options_t *options; // Puntero a las opciones del juego
// Variables // Variables
float x; // Posición del jugador en el eje X float x; // Posición del jugador en el eje X
@@ -127,7 +128,7 @@ public:
public: public:
// Constructor // Constructor
Player(player_t ini, std::string tileset, std::string animation, SDL_Renderer *renderer, Asset *asset, Input *input, Room *room, Debug *debug); Player(player_t ini, std::string tileset, std::string animation, SDL_Renderer *renderer, Asset *asset, options_t *options, Input *input, Room *room, Debug *debug);
// Destructor // Destructor
~Player(); ~Player();

View File

@@ -4,18 +4,8 @@
#include <sstream> #include <sstream>
// Constructor // Constructor
Room::Room(std::string file, SDL_Renderer *renderer, Screen *screen, Asset *asset, ItemTracker *itemTracker, int *items, Debug *debug) Room::Room(std::string file, SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, ItemTracker *itemTracker, int *items, Debug *debug)
{ {
// Inicializa variables
tileSize = 8;
mapWidth = 32;
mapHeight = 16;
paused = false;
itemColor1 = stringToColor("magenta");
itemColor2 = stringToColor("yellow");
autoSurfaceDirection = 1;
counter = 0;
// Copia los punteros a objetos // Copia los punteros a objetos
this->renderer = renderer; this->renderer = renderer;
this->asset = asset; this->asset = asset;
@@ -23,6 +13,17 @@ Room::Room(std::string file, SDL_Renderer *renderer, Screen *screen, Asset *asse
this->itemTracker = itemTracker; this->itemTracker = itemTracker;
this->itemsPicked = items; this->itemsPicked = items;
this->debug = debug; this->debug = debug;
this->options = options;
// Inicializa variables
tileSize = 8;
mapWidth = 32;
mapHeight = 16;
paused = false;
itemColor1 = stringToColor(options->palette, "magenta");
itemColor2 = stringToColor(options->palette, "yellow");
autoSurfaceDirection = 1;
counter = 0;
// Crea los objetos // Crea los objetos
loadMapFile(file); loadMapFile(file);
@@ -297,27 +298,35 @@ bool Room::setVars(std::string var, std::string value)
else if (var == "bgColor") else if (var == "bgColor")
{ {
bgColor = stringToColor(value); bgColor = stringToColor(options->palette, value);
} }
else if (var == "border") else if (var == "border")
{ {
borderColor = stringToColor(value); borderColor = stringToColor(options->palette, value);
} }
else if (var == "itemColor1") else if (var == "itemColor1")
{ {
itemColor1 = stringToColor(value); itemColor1 = stringToColor(options->palette, value);
} }
else if (var == "itemColor2") else if (var == "itemColor2")
{ {
itemColor2 = stringToColor(value); itemColor2 = stringToColor(options->palette, value);
} }
else if (var == "tileset") else if (var == "tileset")
{ {
tileset = value; tileset = value;
if (options->palette == p_zxspectrum)
{
tileset = "standard.png";
}
else if (options->palette == p_zxarne)
{
tileset = "standard_zxarne.png";
}
} }
else if (var == "roomUp") else if (var == "roomUp")
@@ -437,7 +446,7 @@ bool Room::setEnemy(enemy_t *enemy, std::string var, std::string value)
else if (var == "color") else if (var == "color")
{ {
enemy->color = stringToColor(value); enemy->color = stringToColor(options->palette, value);
} }
else if (var == "[/enemy]") else if (var == "[/enemy]")
@@ -810,7 +819,15 @@ bool Room::itemCollision(SDL_Rect &rect)
// Recarga la textura // Recarga la textura
void Room::reLoadTexture() void Room::reLoadTexture()
{ {
texture->reLoad(); if (options->palette == p_zxspectrum)
{
texture->loadFromFile(asset->get("standard.png"), renderer);
}
else if (options->palette == p_zxarne)
{
texture->loadFromFile(asset->get("standard_zxarne.png"), renderer);
}
// texture->reLoad();
fillMapTexture(); fillMapTexture();
for (auto enemy : enemies) for (auto enemy : enemies)
{ {

View File

@@ -48,6 +48,7 @@ private:
SDL_Texture *mapTexture; // Textura para dibujar el mapa de la habitación SDL_Texture *mapTexture; // Textura para dibujar el mapa de la habitación
int *itemsPicked; // Puntero a la cantidad de items recogidos que lleva el juego int *itemsPicked; // Puntero a la cantidad de items recogidos que lleva el juego
Debug *debug; // Objeto para gestionar la información de debug Debug *debug; // Objeto para gestionar la información de debug
options_t *options; // Puntero a las opciones del juego
// Variables // Variables
std::string name; // Nombre de la habitación std::string name; // Nombre de la habitación
@@ -132,7 +133,7 @@ private:
public: public:
// Constructor // Constructor
Room(std::string file, SDL_Renderer *renderer, Screen *screen, Asset *asset, ItemTracker *item_tracker, int *items, Debug *debug); Room(std::string file, SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options, ItemTracker *item_tracker, int *items, Debug *debug);
// Destructor // Destructor
~Room(); ~Room();

View File

@@ -3,12 +3,13 @@
#include <sstream> #include <sstream>
// Constructor // Constructor
ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, board_t *board) ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, options_t *options, board_t *board)
{ {
// Obten punteros a objetos // Obten punteros a objetos
this->asset = asset; this->asset = asset;
this->renderer = renderer; this->renderer = renderer;
this->board = board; this->board = board;
this->options = options;
// Reserva memoria para los objetos // Reserva memoria para los objetos
playerTexture = new Texture(renderer, asset->get("player.png")); playerTexture = new Texture(renderer, asset->get("player.png"));
@@ -28,7 +29,7 @@ ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, board_t *board)
const std::vector<std::string> vColors = {"blue", "magenta", "green", "cyan", "yellow", "white", "bright_blue", "bright_magenta", "bright_green", "bright_cyan", "bright_yellow", "bright_white"}; const std::vector<std::string> vColors = {"blue", "magenta", "green", "cyan", "yellow", "white", "bright_blue", "bright_magenta", "bright_green", "bright_cyan", "bright_yellow", "bright_white"};
for (auto v : vColors) for (auto v : vColors)
{ {
color.push_back(stringToColor(v)); color.push_back(stringToColor(options->palette, v));
} }
} }
@@ -53,7 +54,6 @@ void ScoreBoard::render()
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderFillRect(renderer, &rect); SDL_RenderFillRect(renderer, &rect);
// Dibuja las vidas // Dibuja las vidas
const int desp = (counter / 40) % 8; const int desp = (counter / 40) % 8;
const int frame = desp % 4; const int frame = desp % 4;
@@ -80,13 +80,13 @@ void ScoreBoard::render()
const std::string timeTxt = std::to_string((clock.minutes % 60) / 10) + std::to_string(clock.minutes % 10) + clock.separator + std::to_string((clock.seconds % 60) / 10) + std::to_string(clock.seconds % 10); const std::string timeTxt = std::to_string((clock.minutes % 60) / 10) + std::to_string(clock.minutes % 10) + clock.separator + std::to_string((clock.seconds % 60) / 10) + std::to_string(clock.seconds % 10);
const std::string itemsTxt = std::to_string(board->items / 100) + std::to_string((board->items % 100) / 10) + std::to_string(board->items % 10); const std::string itemsTxt = std::to_string(board->items / 100) + std::to_string((board->items % 100) / 10) + std::to_string(board->items % 10);
this->text->writeColored(BLOCK, line1, "Items collected ", board->color); this->text->writeColored(BLOCK, line1, "Items collected ", board->color);
this->text->writeColored(17 * BLOCK, line1, itemsTxt, stringToColor("white")); this->text->writeColored(17 * BLOCK, line1, itemsTxt, stringToColor(options->palette, "white"));
this->text->writeColored(20 * BLOCK, line1, " Time ", board->color); this->text->writeColored(20 * BLOCK, line1, " Time ", board->color);
this->text->writeColored(26 * BLOCK, line1, timeTxt, stringToColor("white")); this->text->writeColored(26 * BLOCK, line1, timeTxt, stringToColor(options->palette, "white"));
const std::string roomsTxt = std::to_string(board->rooms / 100) + std::to_string((board->rooms % 100) / 10) + std::to_string(board->rooms % 10); const std::string roomsTxt = std::to_string(board->rooms / 100) + std::to_string((board->rooms % 100) / 10) + std::to_string(board->rooms % 10);
this->text->writeColored(22 * BLOCK, line2, "Rooms", stringToColor("white")); this->text->writeColored(22 * BLOCK, line2, "Rooms", stringToColor(options->palette, "white"));
this->text->writeColored(28 * BLOCK, line2, roomsTxt, stringToColor("white")); this->text->writeColored(28 * BLOCK, line2, roomsTxt, stringToColor(options->palette, "white"));
} }
// Actualiza las variables del objeto // Actualiza las variables del objeto
@@ -121,6 +121,14 @@ void ScoreBoard::reLoadTexture()
playerTexture->reLoad(); playerTexture->reLoad();
itemTexture->reLoad(); itemTexture->reLoad();
text->reLoadTexture(); text->reLoadTexture();
// Reinicia el vector de colores
const std::vector<std::string> vColors = {"blue", "magenta", "green", "cyan", "yellow", "white", "bright_blue", "bright_magenta", "bright_green", "bright_cyan", "bright_yellow", "bright_white"};
color.clear();
for (auto v : vColors)
{
color.push_back(stringToColor(options->palette, v));
}
} }
// Pone el marcador en modo pausa // Pone el marcador en modo pausa

View File

@@ -40,6 +40,7 @@ private:
Text *text; // Objeto para escribir texto Text *text; // Objeto para escribir texto
Texture *itemTexture; // Textura con los graficos para las vidas Texture *itemTexture; // Textura con los graficos para las vidas
board_t *board; // Contiene las variables a mostrar en el marcador board_t *board; // Contiene las variables a mostrar en el marcador
options_t *options; // Puntero a las opciones del juego
// Variables // Variables
std::vector<color_t> color; // Vector con los colores del objeto std::vector<color_t> color; // Vector con los colores del objeto
@@ -55,7 +56,7 @@ private:
public: public:
// Constructor // Constructor
ScoreBoard(SDL_Renderer *renderer, Asset *asset, board_t *board); ScoreBoard(SDL_Renderer *renderer, Asset *asset, options_t *options, board_t *board);
// Destructor // Destructor
~ScoreBoard(); ~ScoreBoard();

View File

@@ -1,16 +1,24 @@
#include "title.h" #include "title.h"
// Constructor // Constructor
Title::Title(SDL_Renderer *renderer, Screen *screen, Asset *asset) Title::Title(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options)
{ {
// Copia la dirección de los objetos // Copia la dirección de los objetos
this->renderer = renderer; this->renderer = renderer;
this->screen = screen; this->screen = screen;
this->asset = asset; this->asset = asset;
this->options = options;
// Reserva memoria para los punteros // Reserva memoria para los punteros
eventHandler = new SDL_Event(); eventHandler = new SDL_Event();
if (options->palette == p_zxspectrum)
{
texture = new Texture(renderer, asset->get("loading_screen_color.png")); texture = new Texture(renderer, asset->get("loading_screen_color.png"));
}
else if (options->palette == p_zxarne)
{
texture = new Texture(renderer, asset->get("loading_screen_color_zxarne.png"));
}
sprite = new Sprite(0, 0, texture->getWidth(), texture->getHeight(), texture, renderer); sprite = new Sprite(0, 0, texture->getWidth(), texture->getHeight(), texture, renderer);
text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer);
@@ -33,7 +41,7 @@ Title::Title(SDL_Renderer *renderer, Screen *screen, Asset *asset)
letters[0].enabled = true; letters[0].enabled = true;
// Cambia el color del borde // Cambia el color del borde
screen->setBorderColor(stringToColor("bright_blue")); screen->setBorderColor(stringToColor(options->palette, "bright_blue"));
} }
// Destructor // Destructor
@@ -134,8 +142,7 @@ void Title::renderMarquee()
{ {
if (l.enabled) if (l.enabled)
{ {
// text->writeColored(l.x, 176, l.letter, {0, 0, 0}); text->writeColored(l.x, 184, l.letter, stringToColor(options->palette, "white"));
text->write(l.x, 184, l.letter);
} }
} }
} }
@@ -188,10 +195,11 @@ void Title::render()
// text->writeCentered(256 / 2, 192 / 5 * 4, "PRESS ENTER TO PLAY"); // text->writeCentered(256 / 2, 192 / 5 * 4, "PRESS ENTER TO PLAY");
//} //}
// Dibuja el texto de PRESS ENTER TO PLAY
if (counter % 80 < 60) if (counter % 80 < 60)
{ {
const color_t textColor = stringToColor("white"); const color_t textColor = stringToColor(options->palette, "white");
const color_t strokeColor = stringToColor("bright_blue"); const color_t strokeColor = stringToColor(options->palette, "bright_blue");
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_STROKE, 256 / 2, 192 / 5 * 4, "PRESS ENTER TO PLAY", 1, textColor, 1, strokeColor); text->writeDX(TXT_CENTER | TXT_COLOR | TXT_STROKE, 256 / 2, 192 / 5 * 4, "PRESS ENTER TO PLAY", 1, textColor, 1, strokeColor);
} }

View File

@@ -31,6 +31,7 @@ private:
Texture *texture; // Textura con los graficos Texture *texture; // Textura con los graficos
Sprite *sprite; // Sprite para manejar la textura Sprite *sprite; // Sprite para manejar la textura
Text *text; // Objeto para escribir texto en pantalla Text *text; // Objeto para escribir texto en pantalla
options_t *options; // Puntero a las opciones del juego
// Variables // Variables
int counter; // Contador int counter; // Contador
@@ -57,7 +58,7 @@ private:
public: public:
// Constructor // Constructor
Title(SDL_Renderer *renderer, Screen *screen, Asset *asset); Title(SDL_Renderer *renderer, Screen *screen, Asset *asset, options_t *options);
// Destructor // Destructor
~Title(); ~Title();