Canviades les paletes dels .gif
Ara es poden carregar paletes desde fitxers .pal Reajustada la pleta general fix: la pantalla de càrrega deixava un pixel per pintar, desde sempre Ajustat el color del borde en el Logo i el Title per a ser igual al fondo amb les paletes de 16 colors (la del Spectrum es de 15)
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 995 B |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.1 KiB |
19
data/palette/island-joy-16.pal
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
JASC-PAL
|
||||||
|
0100
|
||||||
|
16
|
||||||
|
255 255 255
|
||||||
|
109 247 193
|
||||||
|
17 173 193
|
||||||
|
96 108 129
|
||||||
|
57 52 87
|
||||||
|
30 136 117
|
||||||
|
91 179 97
|
||||||
|
161 229 90
|
||||||
|
247 228 118
|
||||||
|
249 146 82
|
||||||
|
203 77 104
|
||||||
|
106 55 113
|
||||||
|
201 36 100
|
||||||
|
244 140 182
|
||||||
|
247 182 158
|
||||||
|
155 156 130
|
||||||
19
data/palette/lost-century.pal
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
JASC-PAL
|
||||||
|
0100
|
||||||
|
16
|
||||||
|
209 177 135
|
||||||
|
199 123 88
|
||||||
|
174 93 64
|
||||||
|
121 68 74
|
||||||
|
75 61 68
|
||||||
|
186 145 88
|
||||||
|
146 116 65
|
||||||
|
77 69 57
|
||||||
|
119 116 59
|
||||||
|
179 165 85
|
||||||
|
210 201 165
|
||||||
|
140 171 161
|
||||||
|
75 114 110
|
||||||
|
87 72 82
|
||||||
|
132 120 117
|
||||||
|
171 155 142
|
||||||
19
data/palette/na16.pal
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
JASC-PAL
|
||||||
|
0100
|
||||||
|
16
|
||||||
|
140 143 174
|
||||||
|
88 69 99
|
||||||
|
62 33 55
|
||||||
|
154 99 72
|
||||||
|
215 155 125
|
||||||
|
245 237 186
|
||||||
|
192 199 65
|
||||||
|
100 125 52
|
||||||
|
228 148 58
|
||||||
|
157 48 59
|
||||||
|
210 100 113
|
||||||
|
112 55 127
|
||||||
|
126 196 193
|
||||||
|
52 133 157
|
||||||
|
23 67 75
|
||||||
|
31 14 28
|
||||||
19
data/palette/pico-8.pal
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
JASC-PAL
|
||||||
|
0100
|
||||||
|
16
|
||||||
|
0 0 0
|
||||||
|
29 43 83
|
||||||
|
126 37 83
|
||||||
|
0 135 81
|
||||||
|
171 82 54
|
||||||
|
95 87 79
|
||||||
|
194 195 199
|
||||||
|
255 241 232
|
||||||
|
255 0 77
|
||||||
|
255 163 0
|
||||||
|
255 236 39
|
||||||
|
0 228 54
|
||||||
|
41 173 255
|
||||||
|
131 118 156
|
||||||
|
255 119 168
|
||||||
|
255 204 170
|
||||||
|
Before Width: | Height: | Size: 379 B |
19
data/palette/ruzx-spectrum-revision-2.pal
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
JASC-PAL
|
||||||
|
0100
|
||||||
|
16
|
||||||
|
17 17 37
|
||||||
|
82 75 109
|
||||||
|
176 201 196
|
||||||
|
255 252 241
|
||||||
|
36 34 114
|
||||||
|
52 112 190
|
||||||
|
159 32 98
|
||||||
|
255 94 57
|
||||||
|
150 58 191
|
||||||
|
255 105 246
|
||||||
|
44 126 75
|
||||||
|
160 195 95
|
||||||
|
67 152 196
|
||||||
|
147 255 229
|
||||||
|
210 133 55
|
||||||
|
254 245 107
|
||||||
|
Before Width: | Height: | Size: 379 B |
19
data/palette/ruzx-spectrum.pal
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
JASC-PAL
|
||||||
|
0100
|
||||||
|
16
|
||||||
|
15 11 56
|
||||||
|
97 106 130
|
||||||
|
173 180 183
|
||||||
|
249 255 236
|
||||||
|
40 19 160
|
||||||
|
74 107 255
|
||||||
|
160 35 17
|
||||||
|
237 23 95
|
||||||
|
115 16 147
|
||||||
|
238 20 181
|
||||||
|
39 139 97
|
||||||
|
157 255 38
|
||||||
|
27 105 167
|
||||||
|
71 233 223
|
||||||
|
122 87 22
|
||||||
|
247 229 77
|
||||||
19
data/palette/steam-lords.pal
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
JASC-PAL
|
||||||
|
0100
|
||||||
|
16
|
||||||
|
33 59 37
|
||||||
|
58 96 74
|
||||||
|
79 119 84
|
||||||
|
161 159 124
|
||||||
|
119 116 79
|
||||||
|
119 92 79
|
||||||
|
96 59 58
|
||||||
|
59 33 55
|
||||||
|
23 14 25
|
||||||
|
47 33 59
|
||||||
|
67 58 96
|
||||||
|
79 82 119
|
||||||
|
101 115 140
|
||||||
|
124 148 161
|
||||||
|
160 185 186
|
||||||
|
192 209 204
|
||||||
19
data/palette/sweetie-16.pal
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
JASC-PAL
|
||||||
|
0100
|
||||||
|
16
|
||||||
|
26 28 44
|
||||||
|
93 39 93
|
||||||
|
177 62 83
|
||||||
|
239 125 87
|
||||||
|
255 205 117
|
||||||
|
167 240 112
|
||||||
|
56 183 100
|
||||||
|
37 113 121
|
||||||
|
41 54 111
|
||||||
|
59 93 201
|
||||||
|
65 166 246
|
||||||
|
115 239 247
|
||||||
|
244 244 244
|
||||||
|
148 176 194
|
||||||
|
86 108 134
|
||||||
|
51 60 87
|
||||||
|
Before Width: | Height: | Size: 379 B |
19
data/palette/zx-spectrum-adjusted.pal
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
JASC-PAL
|
||||||
|
0100
|
||||||
|
16
|
||||||
|
0 0 0
|
||||||
|
0 0 0
|
||||||
|
0 34 199
|
||||||
|
0 43 251
|
||||||
|
214 40 22
|
||||||
|
255 51 28
|
||||||
|
212 51 199
|
||||||
|
255 64 252
|
||||||
|
0 197 37
|
||||||
|
0 249 47
|
||||||
|
0 199 201
|
||||||
|
0 251 254
|
||||||
|
204 200 42
|
||||||
|
255 252 54
|
||||||
|
202 202 202
|
||||||
|
255 255 255
|
||||||
|
Before Width: | Height: | Size: 379 B |
19
data/palette/zx-spectrum.pal
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
JASC-PAL
|
||||||
|
0100
|
||||||
|
16
|
||||||
|
0 0 0
|
||||||
|
0 0 0
|
||||||
|
0 0 216
|
||||||
|
0 0 255
|
||||||
|
216 0 0
|
||||||
|
255 0 0
|
||||||
|
216 0 216
|
||||||
|
255 0 255
|
||||||
|
0 216 0
|
||||||
|
0 255 0
|
||||||
|
0 216 216
|
||||||
|
0 255 255
|
||||||
|
216 216 0
|
||||||
|
255 255 0
|
||||||
|
216 216 216
|
||||||
|
255 255 255
|
||||||
|
Before Width: | Height: | Size: 379 B |
19
data/palette/zxarne-5-2.pal
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
JASC-PAL
|
||||||
|
0100
|
||||||
|
16
|
||||||
|
0 0 0
|
||||||
|
60 53 31
|
||||||
|
49 51 144
|
||||||
|
21 89 219
|
||||||
|
167 50 17
|
||||||
|
216 85 37
|
||||||
|
161 85 137
|
||||||
|
205 122 80
|
||||||
|
98 154 49
|
||||||
|
156 211 60
|
||||||
|
40 164 203
|
||||||
|
101 220 214
|
||||||
|
232 188 80
|
||||||
|
241 231 130
|
||||||
|
191 191 189
|
||||||
|
242 241 237
|
||||||
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.3 KiB |
@@ -26,7 +26,7 @@ Credits::Credits()
|
|||||||
shining_sprite_->setPos({194, 174, 8, 8});
|
shining_sprite_->setPos({194, 174, 8, 8});
|
||||||
|
|
||||||
// Cambia el color del borde
|
// Cambia el color del borde
|
||||||
Screen::get()->setBorderColor(stringToColor("black"));
|
Screen::get()->setBorderColor(static_cast<Uint8>(PaletteColor::BLACK));
|
||||||
|
|
||||||
// Crea la textura para el texto que se escribe en pantalla
|
// Crea la textura para el texto que se escribe en pantalla
|
||||||
text_surface_ = std::make_shared<Surface>(options.game.width, options.game.height);
|
text_surface_ = std::make_shared<Surface>(options.game.width, options.game.height);
|
||||||
@@ -76,62 +76,62 @@ void Credits::iniTexts()
|
|||||||
}
|
}
|
||||||
|
|
||||||
texts_.clear();
|
texts_.clear();
|
||||||
texts_.push_back({"", stringToColor("white")});
|
texts_.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"INSTRUCTIONS:", stringToColor("yellow")});
|
texts_.push_back({"INSTRUCTIONS:", static_cast<Uint8>(PaletteColor::YELLOW)});
|
||||||
texts_.push_back({"", stringToColor("white")});
|
texts_.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"HELP JAILDOC TO GET BACK ALL", stringToColor("white")});
|
texts_.push_back({"HELP JAILDOC TO GET BACK ALL", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"HIS PROJECTS AND GO TO THE", stringToColor("white")});
|
texts_.push_back({"HIS PROJECTS AND GO TO THE", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"JAIL TO FINISH THEM", stringToColor("white")});
|
texts_.push_back({"JAIL TO FINISH THEM", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"", stringToColor("white")});
|
texts_.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"", stringToColor("white")});
|
texts_.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
|
|
||||||
texts_.push_back({"KEYS:", stringToColor("yellow")});
|
texts_.push_back({"KEYS:", static_cast<Uint8>(PaletteColor::YELLOW)});
|
||||||
texts_.push_back({"", stringToColor("white")});
|
texts_.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({keys + " TO MOVE AND JUMP", stringToColor("white")});
|
texts_.push_back({keys + " TO MOVE AND JUMP", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"M TO SWITCH THE MUSIC", stringToColor("white")});
|
texts_.push_back({"M TO SWITCH THE MUSIC", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"H TO PAUSE THE GAME", stringToColor("white")});
|
texts_.push_back({"H TO PAUSE THE GAME", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"F1-F2 TO CHANGE WINDOWS SIZE", stringToColor("white")});
|
texts_.push_back({"F1-F2 TO CHANGE WINDOWS SIZE", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"F3 TO SWITCH TO FULLSCREEN", stringToColor("white")});
|
texts_.push_back({"F3 TO SWITCH TO FULLSCREEN", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"B TO TOOGLE THE BORDER SCREEN", stringToColor("white")});
|
texts_.push_back({"B TO TOOGLE THE BORDER SCREEN", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"", stringToColor("white")});
|
texts_.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"", stringToColor("white")});
|
texts_.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
|
|
||||||
texts_.push_back({"A GAME BY JAILDESIGNER", stringToColor("yellow")});
|
texts_.push_back({"A GAME BY JAILDESIGNER", static_cast<Uint8>(PaletteColor::YELLOW)});
|
||||||
texts_.push_back({"MADE ON SUMMER/FALL 2022", stringToColor("yellow")});
|
texts_.push_back({"MADE ON SUMMER/FALL 2022", static_cast<Uint8>(PaletteColor::YELLOW)});
|
||||||
texts_.push_back({"", stringToColor("white")});
|
texts_.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"", stringToColor("white")});
|
texts_.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
|
|
||||||
texts_.push_back({"I LOVE JAILGAMES! ", stringToColor("white")});
|
texts_.push_back({"I LOVE JAILGAMES! ", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts_.push_back({"", stringToColor("white")});
|
texts_.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
#else
|
#else
|
||||||
texts.clear();
|
texts.clear();
|
||||||
texts.push_back({"", stringToColor("white")});
|
texts.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"INSTRUCTIONS:", stringToColor("yellow")});
|
texts.push_back({"INSTRUCTIONS:", static_cast<Uint8>(PaletteColor::YELLOW)});
|
||||||
texts.push_back({"", stringToColor("white")});
|
texts.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"HELP JAILDOC TO GET BACK ALL", stringToColor("white")});
|
texts.push_back({"HELP JAILDOC TO GET BACK ALL", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"HIS PROJECTS AND GO TO THE", stringToColor("white")});
|
texts.push_back({"HIS PROJECTS AND GO TO THE", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"JAIL TO FINISH THEM", stringToColor("white")});
|
texts.push_back({"JAIL TO FINISH THEM", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"", stringToColor("white")});
|
texts.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"", stringToColor("white")});
|
texts.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
|
|
||||||
texts.push_back({"KEYS:", stringToColor("yellow")});
|
texts.push_back({"KEYS:", static_cast<Uint8>(PaletteColor::YELLOW)});
|
||||||
texts.push_back({"", stringToColor("white")});
|
texts.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"B TO JUMP", stringToColor("white")});
|
texts.push_back({"B TO JUMP", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"R TO SWITCH THE MUSIC", stringToColor("white")});
|
texts.push_back({"R TO SWITCH THE MUSIC", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"L TO SWAP THE COLOR PALETTE", stringToColor("white")});
|
texts.push_back({"L TO SWAP THE COLOR PALETTE", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"START TO PAUSE", stringToColor("white")});
|
texts.push_back({"START TO PAUSE", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"SELECT TO EXIT", stringToColor("white")});
|
texts.push_back({"SELECT TO EXIT", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"", stringToColor("white")});
|
texts.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"", stringToColor("white")});
|
texts.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"", stringToColor("white")});
|
texts.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
|
|
||||||
texts.push_back({"A GAME BY JAILDESIGNER", stringToColor("yellow")});
|
texts.push_back({"A GAME BY JAILDESIGNER", static_cast<Uint8>(PaletteColor::YELLOW)});
|
||||||
texts.push_back({"MADE ON SUMMER/FALL 2022", stringToColor("yellow")});
|
texts.push_back({"MADE ON SUMMER/FALL 2022", static_cast<Uint8>(PaletteColor::YELLOW)});
|
||||||
texts.push_back({"", stringToColor("white")});
|
texts.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"", stringToColor("white")});
|
texts.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
|
|
||||||
texts.push_back({"I LOVE JAILGAMES! ", stringToColor("white")});
|
texts.push_back({"I LOVE JAILGAMES! ", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
texts.push_back({"", stringToColor("white")});
|
texts.push_back({"", static_cast<Uint8>(PaletteColor::WHITE)});
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,7 +144,7 @@ void Credits::fillTexture()
|
|||||||
// Rellena la textura de texto
|
// Rellena la textura de texto
|
||||||
auto previuos_renderer = Screen::get()->getRendererSurface();
|
auto previuos_renderer = Screen::get()->getRendererSurface();
|
||||||
Screen::get()->setRendererSurface(text_surface_);
|
Screen::get()->setRendererSurface(text_surface_);
|
||||||
text_surface_->clear(stringToColor("black"));
|
text_surface_->clear(static_cast<Uint8>(PaletteColor::BLACK));
|
||||||
|
|
||||||
auto text = Resource::get()->getText("smb2");
|
auto text = Resource::get()->getText("smb2");
|
||||||
|
|
||||||
@@ -161,17 +161,17 @@ void Credits::fillTexture()
|
|||||||
// Escribe el corazón
|
// Escribe el corazón
|
||||||
const int TEXT_LENGHT = text->lenght(texts_[22].label, 1) - text->lenght(" ", 1); // Se resta el ultimo caracter que es un espacio
|
const int TEXT_LENGHT = text->lenght(texts_[22].label, 1) - text->lenght(" ", 1); // Se resta el ultimo caracter que es un espacio
|
||||||
const int POS_X = ((PLAY_AREA_WIDTH - TEXT_LENGHT) / 2) + TEXT_LENGHT;
|
const int POS_X = ((PLAY_AREA_WIDTH - TEXT_LENGHT) / 2) + TEXT_LENGHT;
|
||||||
text->writeColored(POS_X, 176, "}", stringToColor("bright_red"));
|
text->writeColored(POS_X, 176, "}", static_cast<Uint8>(PaletteColor::BRIGHT_RED));
|
||||||
|
|
||||||
// Recoloca el sprite del brillo
|
// Recoloca el sprite del brillo
|
||||||
shining_sprite_->setPosX(POS_X + 2);
|
shining_sprite_->setPosX(POS_X + 2);
|
||||||
|
|
||||||
// Rellena la textura que cubre el texto con color transparente
|
// Rellena la textura que cubre el texto con color transparente
|
||||||
text_surface_->clear(stringToColor("transparent"));
|
text_surface_->clear(static_cast<Uint8>(PaletteColor::TRANSPARENT));
|
||||||
|
|
||||||
// Los primeros 8 pixels crea una malla
|
// Los primeros 8 pixels crea una malla
|
||||||
auto surface = Screen::get()->getRendererSurface();
|
auto surface = Screen::get()->getRendererSurface();
|
||||||
auto color = stringToColor("black");
|
auto color = static_cast<Uint8>(PaletteColor::BLACK);
|
||||||
for (int i = 0; i < 256; i += 2)
|
for (int i = 0; i < 256; i += 2)
|
||||||
{
|
{
|
||||||
surface->putPixel(i, 0, color);
|
surface->putPixel(i, 0, color);
|
||||||
|
|||||||
@@ -244,7 +244,8 @@ void Director::initInput()
|
|||||||
Input::get()->bindKey(InputAction::WINDOW_INC_ZOOM, SDL_SCANCODE_F2);
|
Input::get()->bindKey(InputAction::WINDOW_INC_ZOOM, SDL_SCANCODE_F2);
|
||||||
Input::get()->bindKey(InputAction::TOGGLE_VIDEOMODE, SDL_SCANCODE_F3);
|
Input::get()->bindKey(InputAction::TOGGLE_VIDEOMODE, SDL_SCANCODE_F3);
|
||||||
Input::get()->bindKey(InputAction::TOGGLE_SHADERS, SDL_SCANCODE_F4);
|
Input::get()->bindKey(InputAction::TOGGLE_SHADERS, SDL_SCANCODE_F4);
|
||||||
Input::get()->bindKey(InputAction::TOGGLE_PALETTE, SDL_SCANCODE_F5);
|
Input::get()->bindKey(InputAction::NEXT_PALETTE, SDL_SCANCODE_F5);
|
||||||
|
Input::get()->bindKey(InputAction::PREVIOUS_PALETTE, SDL_SCANCODE_F6);
|
||||||
Input::get()->bindKey(InputAction::TOGGLE_MUSIC, SDL_SCANCODE_M);
|
Input::get()->bindKey(InputAction::TOGGLE_MUSIC, SDL_SCANCODE_M);
|
||||||
Input::get()->bindKey(InputAction::TOGGLE_BORDER, SDL_SCANCODE_B);
|
Input::get()->bindKey(InputAction::TOGGLE_BORDER, SDL_SCANCODE_B);
|
||||||
|
|
||||||
@@ -263,7 +264,7 @@ void Director::initInput()
|
|||||||
Input::get()->bindGameControllerButton(InputAction::PAUSE, SDL_CONTROLLER_BUTTON_START);
|
Input::get()->bindGameControllerButton(InputAction::PAUSE, SDL_CONTROLLER_BUTTON_START);
|
||||||
Input::get()->bindGameControllerButton(InputAction::EXIT, SDL_CONTROLLER_BUTTON_BACK);
|
Input::get()->bindGameControllerButton(InputAction::EXIT, SDL_CONTROLLER_BUTTON_BACK);
|
||||||
#endif
|
#endif
|
||||||
Input::get()->bindGameControllerButton(InputAction::TOGGLE_PALETTE, SDL_CONTROLLER_BUTTON_LEFTSHOULDER);
|
Input::get()->bindGameControllerButton(InputAction::NEXT_PALETTE, SDL_CONTROLLER_BUTTON_LEFTSHOULDER);
|
||||||
Input::get()->bindGameControllerButton(InputAction::TOGGLE_MUSIC, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER);
|
Input::get()->bindGameControllerButton(InputAction::TOGGLE_MUSIC, SDL_CONTROLLER_BUTTON_RIGHTSHOULDER);
|
||||||
Input::get()->bindGameControllerButton(InputAction::TOGGLE_BORDER, SDL_CONTROLLER_BUTTON_X);
|
Input::get()->bindGameControllerButton(InputAction::TOGGLE_BORDER, SDL_CONTROLLER_BUTTON_X);
|
||||||
}
|
}
|
||||||
@@ -395,11 +396,17 @@ bool Director::setFileList()
|
|||||||
Asset::get()->add(prefix + "/data/font/8bithud.txt", AssetType::FONT);
|
Asset::get()->add(prefix + "/data/font/8bithud.txt", AssetType::FONT);
|
||||||
|
|
||||||
// Paletas
|
// Paletas
|
||||||
Asset::get()->add(prefix + "/data/palette/zx-spectrum.gif", AssetType::PALETTE);
|
Asset::get()->add(prefix + "/data/palette/zx-spectrum.pal", AssetType::PALETTE);
|
||||||
Asset::get()->add(prefix + "/data/palette/zx-spectrum-adjusted.gif", AssetType::PALETTE);
|
Asset::get()->add(prefix + "/data/palette/zx-spectrum-adjusted.pal", AssetType::PALETTE);
|
||||||
Asset::get()->add(prefix + "/data/palette/ruzx-spectrum.gif", AssetType::PALETTE);
|
Asset::get()->add(prefix + "/data/palette/zxarne-5-2.pal", AssetType::PALETTE);
|
||||||
Asset::get()->add(prefix + "/data/palette/ruzx-spectrum-revision-2.gif", AssetType::PALETTE);
|
Asset::get()->add(prefix + "/data/palette/ruzx-spectrum.pal", AssetType::PALETTE);
|
||||||
Asset::get()->add(prefix + "/data/palette/zxarne-5-2.gif", AssetType::PALETTE);
|
Asset::get()->add(prefix + "/data/palette/ruzx-spectrum-revision-2.pal", AssetType::PALETTE);
|
||||||
|
Asset::get()->add(prefix + "/data/palette/pico-8.pal", AssetType::PALETTE);
|
||||||
|
Asset::get()->add(prefix + "/data/palette/sweetie-16.pal", AssetType::PALETTE);
|
||||||
|
Asset::get()->add(prefix + "/data/palette/island-joy-16.pal", AssetType::PALETTE);
|
||||||
|
Asset::get()->add(prefix + "/data/palette/lost-century.pal", AssetType::PALETTE);
|
||||||
|
Asset::get()->add(prefix + "/data/palette/na16.pal", AssetType::PALETTE);
|
||||||
|
Asset::get()->add(prefix + "/data/palette/steam-lords.pal", AssetType::PALETTE);
|
||||||
|
|
||||||
// Shaders
|
// Shaders
|
||||||
Asset::get()->add(prefix + "/data/shaders/crtpi_192.glsl", AssetType::DATA);
|
Asset::get()->add(prefix + "/data/shaders/crtpi_192.glsl", AssetType::DATA);
|
||||||
|
|||||||
@@ -17,8 +17,7 @@
|
|||||||
#include "s_sprite.h" // for SSprite
|
#include "s_sprite.h" // for SSprite
|
||||||
#include "text.h" // for Text, TEXT_STROKE
|
#include "text.h" // for Text, TEXT_STROKE
|
||||||
#include "surface.h" // for Surface
|
#include "surface.h" // for Surface
|
||||||
#include "utils.h" // for Color, stringToColor, Palette
|
#include "utils.h" // for Color, static_cast<Uint8>,PaletteColor::PALETTE
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Ending::Ending()
|
Ending::Ending()
|
||||||
: counter_(-1),
|
: counter_(-1),
|
||||||
@@ -40,7 +39,7 @@ Ending::Ending()
|
|||||||
iniScenes();
|
iniScenes();
|
||||||
|
|
||||||
// Cambia el color del borde
|
// Cambia el color del borde
|
||||||
Screen::get()->setBorderColor(stringToColor("black"));
|
Screen::get()->setBorderColor(static_cast<Uint8>(PaletteColor::BLACK));
|
||||||
|
|
||||||
// Crea la textura para cubrir el texto
|
// Crea la textura para cubrir el texto
|
||||||
cover_surface_ = std::make_shared<Surface>(options.game.width, options.game.height + 8);
|
cover_surface_ = std::make_shared<Surface>(options.game.width, options.game.height + 8);
|
||||||
@@ -84,7 +83,7 @@ void Ending::render()
|
|||||||
Screen::get()->start();
|
Screen::get()->start();
|
||||||
|
|
||||||
// Limpia la pantalla
|
// Limpia la pantalla
|
||||||
Screen::get()->clearSurface(stringToColor("black"));
|
Screen::get()->clearSurface(static_cast<Uint8>(PaletteColor::BLACK));
|
||||||
|
|
||||||
// Dibuja las imagenes de la escena
|
// Dibuja las imagenes de la escena
|
||||||
sprite_pics_.at(current_scene_).image_sprite->render();
|
sprite_pics_.at(current_scene_).image_sprite->render();
|
||||||
@@ -167,8 +166,8 @@ void Ending::iniTexts()
|
|||||||
|
|
||||||
const int WIDTH = text->lenght(txt.caption, 1) + 2 + 2;
|
const int WIDTH = text->lenght(txt.caption, 1) + 2 + 2;
|
||||||
const int HEIGHT = text->getCharacterSize() + 2 + 2;
|
const int HEIGHT = text->getCharacterSize() + 2 + 2;
|
||||||
auto text_color = stringToColor("white");
|
auto text_color = static_cast<Uint8>(PaletteColor::WHITE);
|
||||||
auto shadow_color = stringToColor("black");
|
auto shadow_color = static_cast<Uint8>(PaletteColor::BLACK);
|
||||||
|
|
||||||
EndingSurface st;
|
EndingSurface st;
|
||||||
|
|
||||||
@@ -187,11 +186,11 @@ void Ending::iniTexts()
|
|||||||
Screen::get()->setRendererSurface(st.cover_surface);
|
Screen::get()->setRendererSurface(st.cover_surface);
|
||||||
|
|
||||||
// Rellena la cover_surface con color transparente
|
// Rellena la cover_surface con color transparente
|
||||||
st.cover_surface->clear(stringToColor("transparent"));
|
st.cover_surface->clear(static_cast<Uint8>(PaletteColor::TRANSPARENT));
|
||||||
|
|
||||||
// Crea una malla de 8 pixels de alto
|
// Crea una malla de 8 pixels de alto
|
||||||
auto surface = Screen::get()->getRendererSurface();
|
auto surface = Screen::get()->getRendererSurface();
|
||||||
auto color = stringToColor("black");
|
auto color = static_cast<Uint8>(PaletteColor::BLACK);
|
||||||
for (int i = 0; i < WIDTH; i += 2)
|
for (int i = 0; i < WIDTH; i += 2)
|
||||||
{
|
{
|
||||||
surface->putPixel(i, 0, color);
|
surface->putPixel(i, 0, color);
|
||||||
@@ -255,11 +254,11 @@ void Ending::iniPics()
|
|||||||
Screen::get()->setRendererSurface(sp.cover_surface);
|
Screen::get()->setRendererSurface(sp.cover_surface);
|
||||||
|
|
||||||
// Rellena la cover_surface con color transparente
|
// Rellena la cover_surface con color transparente
|
||||||
sp.cover_surface->clear(stringToColor("transparent"));
|
sp.cover_surface->clear(static_cast<Uint8>(PaletteColor::TRANSPARENT));
|
||||||
|
|
||||||
// Crea una malla en los primeros 8 pixels
|
// Crea una malla en los primeros 8 pixels
|
||||||
auto surface = Screen::get()->getRendererSurface();
|
auto surface = Screen::get()->getRendererSurface();
|
||||||
auto color = stringToColor("black");
|
auto color = static_cast<Uint8>(PaletteColor::BLACK);
|
||||||
for (int i = 0; i < WIDTH; i += 2)
|
for (int i = 0; i < WIDTH; i += 2)
|
||||||
{
|
{
|
||||||
surface->putPixel(i, 0, color);
|
surface->putPixel(i, 0, color);
|
||||||
@@ -477,10 +476,10 @@ void Ending::fillCoverTexture()
|
|||||||
// Rellena la textura que cubre el texto con color transparente
|
// Rellena la textura que cubre el texto con color transparente
|
||||||
auto previuos_renderer = Screen::get()->getRendererSurface();
|
auto previuos_renderer = Screen::get()->getRendererSurface();
|
||||||
Screen::get()->setRendererSurface(cover_surface_);
|
Screen::get()->setRendererSurface(cover_surface_);
|
||||||
cover_surface_->clear(stringToColor("transparent"));
|
cover_surface_->clear(static_cast<Uint8>(PaletteColor::TRANSPARENT));
|
||||||
|
|
||||||
// Los primeros 8 pixels crea una malla
|
// Los primeros 8 pixels crea una malla
|
||||||
const Uint8 color = stringToColor("black");
|
const Uint8 color = static_cast<Uint8>(PaletteColor::BLACK);
|
||||||
auto surface = Screen::get()->getRendererSurface();
|
auto surface = Screen::get()->getRendererSurface();
|
||||||
for (int i = 0; i < 256; i += 2)
|
for (int i = 0; i < 256; i += 2)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,8 +16,7 @@
|
|||||||
#include "screen.h" // for Screen
|
#include "screen.h" // for Screen
|
||||||
#include "text.h" // for Text
|
#include "text.h" // for Text
|
||||||
#include "surface.h" // for Surface
|
#include "surface.h" // for Surface
|
||||||
#include "utils.h" // for Color, stringToColor
|
#include "utils.h" // for Color, static_cast<Uint8>
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Ending2::Ending2()
|
Ending2::Ending2()
|
||||||
@@ -38,7 +37,7 @@ Ending2::Ending2()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Cambia el color del borde
|
// Cambia el color del borde
|
||||||
Screen::get()->setBorderColor(stringToColor("black"));
|
Screen::get()->setBorderColor(static_cast<Uint8>(PaletteColor::BLACK));
|
||||||
|
|
||||||
// Inicializa la lista de sprites
|
// Inicializa la lista de sprites
|
||||||
iniSpriteList();
|
iniSpriteList();
|
||||||
@@ -101,7 +100,7 @@ void Ending2::render()
|
|||||||
Screen::get()->start();
|
Screen::get()->start();
|
||||||
|
|
||||||
// Limpia la pantalla
|
// Limpia la pantalla
|
||||||
Screen::get()->clearSurface(stringToColor("black"));
|
Screen::get()->clearSurface(static_cast<Uint8>(PaletteColor::BLACK));
|
||||||
|
|
||||||
// Dibuja los sprites
|
// Dibuja los sprites
|
||||||
renderSprites();
|
renderSprites();
|
||||||
@@ -113,7 +112,7 @@ void Ending2::render()
|
|||||||
renderTexts();
|
renderTexts();
|
||||||
|
|
||||||
// Dibuja una trama arriba y abajo
|
// Dibuja una trama arriba y abajo
|
||||||
Uint8 color = stringToColor("black");
|
Uint8 color = static_cast<Uint8>(PaletteColor::BLACK);
|
||||||
auto surface = Screen::get()->getRendererSurface();
|
auto surface = Screen::get()->getRendererSurface();
|
||||||
for (int i = 0; i < 256; i += 2)
|
for (int i = 0; i < 256; i += 2)
|
||||||
{
|
{
|
||||||
@@ -326,7 +325,7 @@ void Ending2::updateTexts()
|
|||||||
// Dibuja los sprites
|
// Dibuja los sprites
|
||||||
void Ending2::renderSprites()
|
void Ending2::renderSprites()
|
||||||
{
|
{
|
||||||
const Uint8 colorA = stringToColor("red");
|
const Uint8 colorA = static_cast<Uint8>(PaletteColor::RED);
|
||||||
for (auto sprite : sprites_)
|
for (auto sprite : sprites_)
|
||||||
{
|
{
|
||||||
const bool A = sprite->getRect().y + sprite->getRect().h > 0;
|
const bool A = sprite->getRect().y + sprite->getRect().h > 0;
|
||||||
@@ -338,14 +337,14 @@ void Ending2::renderSprites()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Pinta el ultimo elemento de otro color
|
// Pinta el ultimo elemento de otro color
|
||||||
const Uint8 colorB = stringToColor("white");
|
const Uint8 colorB = static_cast<Uint8>(PaletteColor::WHITE);
|
||||||
sprites_.back()->render(1, colorB);
|
sprites_.back()->render(1, colorB);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dibuja los sprites con el texto
|
// Dibuja los sprites con el texto
|
||||||
void Ending2::renderSpriteTexts()
|
void Ending2::renderSpriteTexts()
|
||||||
{
|
{
|
||||||
const Uint8 color = stringToColor("white");
|
const Uint8 color = static_cast<Uint8>(PaletteColor::WHITE);
|
||||||
for (auto sprite : sprite_texts_)
|
for (auto sprite : sprite_texts_)
|
||||||
{
|
{
|
||||||
const bool A = sprite->getRect().y + sprite->getRect().h > 0;
|
const bool A = sprite->getRect().y + sprite->getRect().h > 0;
|
||||||
|
|||||||
@@ -263,10 +263,6 @@ void Game::checkDebugEvents(const SDL_Event &event)
|
|||||||
changeRoom(room_->getRoom(BORDER_RIGHT));
|
changeRoom(room_->getRoom(BORDER_RIGHT));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_F6:
|
|
||||||
Notifier::get()->show({"ACHIEVEMENT UNLOCKED!", "I LIKE MY MULTICOLOURED FRIENDS"}, NotificationText::LEFT, 2, false, "F6");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDL_SCANCODE_F7:
|
case SDL_SCANCODE_F7:
|
||||||
Notifier::get()->show({"ACHIEVEMENT UNLOCKED!", "I LIKE MY MULTICOLOURED FRIENDS"}, NotificationText::LEFT, 3, false, "F7");
|
Notifier::get()->show({"ACHIEVEMENT UNLOCKED!", "I LIKE MY MULTICOLOURED FRIENDS"}, NotificationText::LEFT, 3, false, "F7");
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -24,11 +24,6 @@ namespace globalInputs
|
|||||||
Notifier::get()->show({code}, NotificationText::CENTER, -1, true, code);
|
Notifier::get()->show({code}, NotificationText::CENTER, -1, true, code);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Cambia la paleta de colores
|
|
||||||
void switchPalette()
|
|
||||||
{
|
|
||||||
Screen::get()->nextPalette();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cambia de seccion
|
// Cambia de seccion
|
||||||
void skip_section()
|
void skip_section()
|
||||||
@@ -98,9 +93,15 @@ namespace globalInputs
|
|||||||
Notifier::get()->show({"SHADERS " + std::string(options.video.shaders ? "ENABLED" : "DISABLED")}, NotificationText::CENTER);
|
Notifier::get()->show({"SHADERS " + std::string(options.video.shaders ? "ENABLED" : "DISABLED")}, NotificationText::CENTER);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (Input::get()->checkInput(InputAction::TOGGLE_PALETTE, REPEAT_FALSE))
|
else if (Input::get()->checkInput(InputAction::NEXT_PALETTE, REPEAT_FALSE))
|
||||||
{
|
{
|
||||||
switchPalette();
|
Screen::get()->nextPalette();
|
||||||
|
Notifier::get()->show({"PALETTE " + options.video.palette}, NotificationText::CENTER);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (Input::get()->checkInput(InputAction::PREVIOUS_PALETTE, REPEAT_FALSE))
|
||||||
|
{
|
||||||
|
Screen::get()->previousPalette();
|
||||||
Notifier::get()->show({"PALETTE " + options.video.palette}, NotificationText::CENTER);
|
Notifier::get()->show({"PALETTE " + options.video.palette}, NotificationText::CENTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,8 @@ enum class InputAction
|
|||||||
TOGGLE_VIDEOMODE,
|
TOGGLE_VIDEOMODE,
|
||||||
TOGGLE_BORDER,
|
TOGGLE_BORDER,
|
||||||
TOGGLE_MUSIC,
|
TOGGLE_MUSIC,
|
||||||
TOGGLE_PALETTE,
|
NEXT_PALETTE,
|
||||||
|
PREVIOUS_PALETTE,
|
||||||
TOGGLE_SHADERS,
|
TOGGLE_SHADERS,
|
||||||
|
|
||||||
// Input obligatorio
|
// Input obligatorio
|
||||||
|
|||||||
@@ -81,13 +81,13 @@ void LoadingScreen::updateLoad()
|
|||||||
if (loading_first_part_)
|
if (loading_first_part_)
|
||||||
{
|
{
|
||||||
// Cada 5 pasos el load_counter_ se incrementa en uno
|
// Cada 5 pasos el load_counter_ se incrementa en uno
|
||||||
const int numSteps = 5;
|
constexpr int NUM_STEPS = 5;
|
||||||
const int step = 51;
|
constexpr int STEPS = 51;
|
||||||
load_counter_ = counter_ / numSteps;
|
load_counter_ = counter_ / NUM_STEPS;
|
||||||
|
|
||||||
if (load_counter_ < 192)
|
if (load_counter_ < 192)
|
||||||
{
|
{
|
||||||
load_rect_.x = step * (counter_ % numSteps);
|
load_rect_.x = STEPS * (counter_ % NUM_STEPS);
|
||||||
load_rect_.y = line_index_[load_counter_];
|
load_rect_.y = line_index_[load_counter_];
|
||||||
mono_loading_screen_sprite_->setClip(load_rect_);
|
mono_loading_screen_sprite_->setClip(load_rect_);
|
||||||
mono_loading_screen_sprite_->setPosition(load_rect_);
|
mono_loading_screen_sprite_->setPosition(load_rect_);
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ private:
|
|||||||
int load_counter_ = 0; // Contador para controlar las cargas
|
int load_counter_ = 0; // Contador para controlar las cargas
|
||||||
bool loading_first_part_ = true; // Para saber en que parte de la carga se encuentra
|
bool loading_first_part_ = true; // Para saber en que parte de la carga se encuentra
|
||||||
int line_index_[192]; // El orden en el que se procesan las 192 lineas de la pantalla de carga
|
int line_index_[192]; // El orden en el que se procesan las 192 lineas de la pantalla de carga
|
||||||
SDL_Rect load_rect_ = {0, 0, 51, 1}; // Rectangulo para dibujar la pantalla de carga
|
SDL_Rect load_rect_ = {0, 0, 52, 1}; // Rectangulo para dibujar la pantalla de carga
|
||||||
|
|
||||||
// Actualiza las variables
|
// Actualiza las variables
|
||||||
void update();
|
void update();
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ Logo::Logo()
|
|||||||
since_1998_sprite_(std::make_shared<SSprite>(since_1998_surface_, (256 - since_1998_surface_->getWidth()) / 2, 83 + jailgames_surface_->getHeight() + 5, since_1998_surface_->getWidth(), since_1998_surface_->getHeight()))
|
since_1998_sprite_(std::make_shared<SSprite>(since_1998_surface_, (256 - since_1998_surface_->getWidth()) / 2, 83 + jailgames_surface_->getHeight() + 5, since_1998_surface_->getWidth(), since_1998_surface_->getHeight()))
|
||||||
{
|
{
|
||||||
since_1998_sprite_->setClip(0, 0, since_1998_surface_->getWidth(), since_1998_surface_->getHeight());
|
since_1998_sprite_->setClip(0, 0, since_1998_surface_->getWidth(), since_1998_surface_->getHeight());
|
||||||
// since_1998_surface_->setColor(0, 0, 0);
|
since_1998_color_ = stringToColor("black");
|
||||||
|
|
||||||
// Crea los sprites de cada linea
|
// Crea los sprites de cada linea
|
||||||
for (int i = 0; i < jailgames_surface_->getHeight(); ++i)
|
for (int i = 0; i < jailgames_surface_->getHeight(); ++i)
|
||||||
@@ -42,7 +42,7 @@ Logo::Logo()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Cambia el color del borde
|
// Cambia el color del borde
|
||||||
Screen::get()->setBorderColor(stringToColor("black"));
|
Screen::get()->setBorderColor(static_cast<Uint8>(PaletteColor::BRIGHT_BLACK));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba el manejador de eventos
|
// Comprueba el manejador de eventos
|
||||||
@@ -219,8 +219,6 @@ void Logo::render()
|
|||||||
{
|
{
|
||||||
// Prepara para empezar a dibujar en la textura de juego
|
// Prepara para empezar a dibujar en la textura de juego
|
||||||
Screen::get()->start();
|
Screen::get()->start();
|
||||||
|
|
||||||
// Limpia la pantalla
|
|
||||||
Screen::get()->clearSurface();
|
Screen::get()->clearSurface();
|
||||||
|
|
||||||
// Dibuja los objetos
|
// Dibuja los objetos
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ private:
|
|||||||
std::shared_ptr<Surface> since_1998_surface_; // Textura con los graficos "Since 1998"
|
std::shared_ptr<Surface> since_1998_surface_; // Textura con los graficos "Since 1998"
|
||||||
std::vector<std::shared_ptr<SSprite>> jailgames_sprite_; // Vector con los sprites de cada linea que forman el bitmap JAILGAMES
|
std::vector<std::shared_ptr<SSprite>> jailgames_sprite_; // Vector con los sprites de cada linea que forman el bitmap JAILGAMES
|
||||||
std::shared_ptr<SSprite> since_1998_sprite_; // SSprite para manejar la textura2
|
std::shared_ptr<SSprite> since_1998_sprite_; // SSprite para manejar la textura2
|
||||||
|
Uint8 jailgames_color_ = 0; // Color para el sprite de "JAILGAMES"
|
||||||
|
Uint8 since_1998_color_ = 0; // Color para el sprite de "Since 1998"
|
||||||
|
|
||||||
// Variables
|
// Variables
|
||||||
std::vector<Uint8> color_; // Vector con los colores para el fade
|
std::vector<Uint8> color_; // Vector con los colores para el fade
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ bool saveOptionsToFile(const std::string &file_path)
|
|||||||
file << "video.border.width " << options.video.border.width << "\n\n";
|
file << "video.border.width " << options.video.border.width << "\n\n";
|
||||||
file << "# Alto del borde\n";
|
file << "# Alto del borde\n";
|
||||||
file << "video.border.height " << options.video.border.height << "\n\n";
|
file << "video.border.height " << options.video.border.height << "\n\n";
|
||||||
file << "# Paleta:\n";
|
file << "# Paleta\n";
|
||||||
file << "video.palette " << options.video.palette << "\n";
|
file << "video.palette " << options.video.palette << "\n";
|
||||||
|
|
||||||
// Cierra el fichero
|
// Cierra el fichero
|
||||||
@@ -263,15 +263,7 @@ bool setOptions(const std::string &var, const std::string &value)
|
|||||||
}},
|
}},
|
||||||
{"video.palette", [](const std::string &v)
|
{"video.palette", [](const std::string &v)
|
||||||
{
|
{
|
||||||
std::string val = v;
|
options.video.palette = v;
|
||||||
if (val == "arreglar" || val == "esto")
|
|
||||||
{
|
|
||||||
options.video.palette = val;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
options.video.palette = val;
|
|
||||||
}
|
|
||||||
}}};
|
}}};
|
||||||
|
|
||||||
auto it = optionHandlers.find(var);
|
auto it = optionHandlers.find(var);
|
||||||
|
|||||||
@@ -634,15 +634,15 @@ void Player::setColor()
|
|||||||
{
|
{
|
||||||
if (options.cheats.invincible == Cheat::CheatState::ENABLED)
|
if (options.cheats.invincible == Cheat::CheatState::ENABLED)
|
||||||
{
|
{
|
||||||
color_ = stringToColor("cyan");
|
color_ = static_cast<Uint8>(PaletteColor::CYAN);
|
||||||
}
|
}
|
||||||
else if (options.cheats.infinite_lives == Cheat::CheatState::ENABLED)
|
else if (options.cheats.infinite_lives == Cheat::CheatState::ENABLED)
|
||||||
{
|
{
|
||||||
color_ = stringToColor("yellow");
|
color_ = static_cast<Uint8>(PaletteColor::YELLOW);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
color_ = stringToColor("white");
|
color_ = static_cast<Uint8>(PaletteColor::WHITE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -254,6 +254,7 @@ void Resource::loadSurfaces()
|
|||||||
{
|
{
|
||||||
auto name = getFileName(l);
|
auto name = getFileName(l);
|
||||||
surfaces_.emplace_back(ResourceSurface(name, std::make_shared<Surface>(l)));
|
surfaces_.emplace_back(ResourceSurface(name, std::make_shared<Surface>(l)));
|
||||||
|
surfaces_.back().surface->setTransparentColor(0);
|
||||||
updateLoadingProgress();
|
updateLoadingProgress();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -268,7 +269,7 @@ void Resource::loadPalettes()
|
|||||||
for (const auto &l : list)
|
for (const auto &l : list)
|
||||||
{
|
{
|
||||||
auto name = getFileName(l);
|
auto name = getFileName(l);
|
||||||
palettes_.emplace_back(ResourcePalette(name, loadPalette(l)));
|
palettes_.emplace_back(ResourcePalette(name, readPalFile(l)));
|
||||||
updateLoadingProgress();
|
updateLoadingProgress();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,11 +89,11 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer)
|
|||||||
|
|
||||||
// Crea la surface donde se dibujan los graficos del juego
|
// Crea la surface donde se dibujan los graficos del juego
|
||||||
game_surface_ = std::make_shared<Surface>(options.game.width, options.game.height);
|
game_surface_ = std::make_shared<Surface>(options.game.width, options.game.height);
|
||||||
game_surface_->loadPalette(palettes_.at(current_palette_));
|
game_surface_->setPalette(readPalFile(palettes_.at(current_palette_)));
|
||||||
|
|
||||||
// Crea la surface donde se dibujan los graficos del juego
|
// Crea la surface donde se dibujan los graficos del juego
|
||||||
border_surface_ = std::make_shared<Surface>(options.game.width + options.video.border.width * 2, options.game.height + options.video.border.height * 2);
|
border_surface_ = std::make_shared<Surface>(options.game.width + options.video.border.width * 2, options.game.height + options.video.border.height * 2);
|
||||||
border_surface_->loadPalette(palettes_.at(current_palette_));
|
border_surface_->setPalette(readPalFile(palettes_.at(current_palette_)));
|
||||||
|
|
||||||
// Establece la surface que actuará como renderer para recibir las llamadas a render()
|
// Establece la surface que actuará como renderer para recibir las llamadas a render()
|
||||||
renderer_surface_ = std::make_shared<std::shared_ptr<Surface>>(game_surface_);
|
renderer_surface_ = std::make_shared<std::shared_ptr<Surface>>(game_surface_);
|
||||||
@@ -352,13 +352,34 @@ void Screen::nextPalette()
|
|||||||
current_palette_ = 0;
|
current_palette_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setPalete();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cambia la paleta
|
||||||
|
void Screen::previousPalette()
|
||||||
|
{
|
||||||
|
if (current_palette_ > 0)
|
||||||
|
{
|
||||||
|
--current_palette_;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
current_palette_ = static_cast<Uint8>(palettes_.size() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
setPalete();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Establece la paleta
|
||||||
|
void Screen::setPalete()
|
||||||
|
{
|
||||||
game_surface_->loadPalette(Resource::get()->getPalette(palettes_.at(current_palette_)));
|
game_surface_->loadPalette(Resource::get()->getPalette(palettes_.at(current_palette_)));
|
||||||
border_surface_->loadPalette(Resource::get()->getPalette(palettes_.at(current_palette_)));
|
border_surface_->loadPalette(Resource::get()->getPalette(palettes_.at(current_palette_)));
|
||||||
|
|
||||||
options.video.palette = palettes_.at(current_palette_);
|
options.video.palette = palettes_.at(current_palette_);
|
||||||
|
|
||||||
// Eliminar ".gif"
|
// Eliminar ".gif"
|
||||||
size_t pos = options.video.palette.find(".gif");
|
size_t pos = options.video.palette.find(".pal");
|
||||||
if (pos != std::string::npos)
|
if (pos != std::string::npos)
|
||||||
{
|
{
|
||||||
options.video.palette.erase(pos, 4);
|
options.video.palette.erase(pos, 4);
|
||||||
@@ -424,7 +445,7 @@ void Screen::renderOverlays()
|
|||||||
// Localiza la paleta dentro del vector de paletas
|
// Localiza la paleta dentro del vector de paletas
|
||||||
size_t Screen::findPalette(const std::string &name)
|
size_t Screen::findPalette(const std::string &name)
|
||||||
{
|
{
|
||||||
std::string upper_name = toUpper(name + ".gif");
|
std::string upper_name = toUpper(name + ".pal");
|
||||||
|
|
||||||
for (size_t i = 0; i < palettes_.size(); ++i)
|
for (size_t i = 0; i < palettes_.size(); ++i)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -156,6 +156,10 @@ public:
|
|||||||
|
|
||||||
// Cambia la paleta
|
// Cambia la paleta
|
||||||
void nextPalette();
|
void nextPalette();
|
||||||
|
void previousPalette();
|
||||||
|
|
||||||
|
// Establece la paleta
|
||||||
|
void setPalete();
|
||||||
|
|
||||||
// Establece la visibilidad de las notificaciones
|
// Establece la visibilidad de las notificaciones
|
||||||
void setNotificationsEnabled(bool value) { notifications_enabled_ = value; }
|
void setNotificationsEnabled(bool value) { notifications_enabled_ = value; }
|
||||||
|
|||||||
@@ -10,8 +10,14 @@
|
|||||||
#include "asset.h" // for Asset
|
#include "asset.h" // for Asset
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "gif.h" // for LoadGif, LoadPalette
|
#include "gif.h" // for LoadGif, LoadPalette
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <array>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
// Carga una paleta desde un archivo
|
// Carga una paleta desde un archivo .gif
|
||||||
Palette loadPalette(const std::string &file_path)
|
Palette loadPalette(const std::string &file_path)
|
||||||
{
|
{
|
||||||
// Abrir el archivo en modo binario
|
// Abrir el archivo en modo binario
|
||||||
@@ -48,13 +54,61 @@ Palette loadPalette(const std::string &file_path)
|
|||||||
return palette;
|
return palette;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Carga una paleta desde un archivo .pal
|
||||||
|
Palette readPalFile(const std::string& file_path)
|
||||||
|
{
|
||||||
|
Palette palette{};
|
||||||
|
palette.fill(0); // Inicializar todo con 0 (transparente por defecto)
|
||||||
|
|
||||||
|
std::ifstream file(file_path);
|
||||||
|
if (!file.is_open())
|
||||||
|
{
|
||||||
|
throw std::runtime_error("No se pudo abrir el archivo .pal");
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string line;
|
||||||
|
int line_number = 0;
|
||||||
|
int color_index = 0;
|
||||||
|
|
||||||
|
while (std::getline(file, line))
|
||||||
|
{
|
||||||
|
++line_number;
|
||||||
|
|
||||||
|
// Ignorar las tres primeras líneas del archivo
|
||||||
|
if (line_number <= 3)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Procesar las líneas restantes con valores RGB
|
||||||
|
std::istringstream ss(line);
|
||||||
|
int r, g, b;
|
||||||
|
if (ss >> r >> g >> b)
|
||||||
|
{
|
||||||
|
// Construir el color ARGB (A = 255 por defecto)
|
||||||
|
Uint32 color = (255 << 24) | (r << 16) | (g << 8) | b;
|
||||||
|
palette[color_index++] = color;
|
||||||
|
|
||||||
|
// Limitar a un máximo de 256 colores (opcional)
|
||||||
|
if (color_index >= 256)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
return palette;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Surface::Surface(int w, int h)
|
Surface::Surface(int w, int h)
|
||||||
: surface_data_(std::make_shared<SurfaceData>(w, h)),
|
: surface_data_(std::make_shared<SurfaceData>(w, h)),
|
||||||
transparent_color_(0) {}
|
transparent_color_(static_cast<Uint8>(PaletteColor::TRANSPARENT)) {}
|
||||||
|
|
||||||
Surface::Surface(const std::string &file_path)
|
Surface::Surface(const std::string &file_path)
|
||||||
: transparent_color_(0)
|
: transparent_color_(static_cast<Uint8>(PaletteColor::TRANSPARENT))
|
||||||
{
|
{
|
||||||
SurfaceData loadedData = loadSurface(file_path);
|
SurfaceData loadedData = loadSurface(file_path);
|
||||||
surface_data_ = std::make_shared<SurfaceData>(std::move(loadedData));
|
surface_data_ = std::make_shared<SurfaceData>(std::move(loadedData));
|
||||||
|
|||||||
@@ -9,8 +9,12 @@
|
|||||||
// Alias
|
// Alias
|
||||||
using Palette = std::array<Uint32, 256>;
|
using Palette = std::array<Uint32, 256>;
|
||||||
|
|
||||||
|
// Carga una paleta desde un archivo .gif
|
||||||
Palette loadPalette(const std::string &file_path);
|
Palette loadPalette(const std::string &file_path);
|
||||||
|
|
||||||
|
// Carga una paleta desde un archivo .pal
|
||||||
|
Palette readPalFile(const std::string &file_path);
|
||||||
|
|
||||||
struct SurfaceData
|
struct SurfaceData
|
||||||
{
|
{
|
||||||
Uint8 *data; // Listado de indices de la paleta que conforman la imagen almacenada
|
Uint8 *data; // Listado de indices de la paleta que conforman la imagen almacenada
|
||||||
@@ -128,8 +132,8 @@ public:
|
|||||||
int getHeight() const { return surface_data_->height; }
|
int getHeight() const { return surface_data_->height; }
|
||||||
|
|
||||||
// Color transparente
|
// Color transparente
|
||||||
int getTransparentColor() const { return transparent_color_; }
|
Uint8 getTransparentColor() const { return transparent_color_; }
|
||||||
void setTransparentColor(int color) { transparent_color_ = color; }
|
void setTransparentColor(Uint8 color) { transparent_color_ = color; }
|
||||||
|
|
||||||
// Paleta
|
// Paleta
|
||||||
void setPalette(const std::array<Uint32, 256> &palette) { palette_ = palette; }
|
void setPalette(const std::array<Uint32, 256> &palette) { palette_ = palette; }
|
||||||
|
|||||||
@@ -33,8 +33,6 @@ Title::Title()
|
|||||||
pLoadPal(Asset::get()->get("loading_screen_color.gif").c_str());
|
pLoadPal(Asset::get()->get("loading_screen_color.gif").c_str());
|
||||||
pSetSource(loading_screen_);
|
pSetSource(loading_screen_);
|
||||||
|
|
||||||
// title_logo_surface_->setSurfaceDataDestRaw(bg_surface_->getSurfaceData());
|
|
||||||
|
|
||||||
// Inicializa variables
|
// Inicializa variables
|
||||||
state_ = options.section.subsection == Subsection::TITLE_WITH_LOADING_SCREEN ? TitleState::SHOW_LOADING_SCREEN : TitleState::SHOW_MENU;
|
state_ = options.section.subsection == Subsection::TITLE_WITH_LOADING_SCREEN ? TitleState::SHOW_LOADING_SCREEN : TitleState::SHOW_MENU;
|
||||||
options.section.section = Section::TITLE;
|
options.section.section = Section::TITLE;
|
||||||
@@ -45,7 +43,7 @@ Title::Title()
|
|||||||
createCheevosTexture();
|
createCheevosTexture();
|
||||||
|
|
||||||
// Cambia el color del borde
|
// Cambia el color del borde
|
||||||
Screen::get()->setBorderColor(stringToColor("black"));
|
Screen::get()->setBorderColor(static_cast<Uint8>(PaletteColor::BRIGHT_BLACK));
|
||||||
|
|
||||||
// Rellena la textura de fondo con todos los gráficos
|
// Rellena la textura de fondo con todos los gráficos
|
||||||
fillSurface();
|
fillSurface();
|
||||||
|
|||||||
@@ -363,23 +363,31 @@ Uint8 stringToColor(const std::string &str)
|
|||||||
{
|
{
|
||||||
// Mapas de colores para cada paleta
|
// Mapas de colores para cada paleta
|
||||||
static const std::unordered_map<std::string, Uint8> paletteMap = {
|
static const std::unordered_map<std::string, Uint8> paletteMap = {
|
||||||
{"transparent", 0},
|
{"black", 0},
|
||||||
{"black", 1},
|
{"bright_black", 1},
|
||||||
{"bright_black", 2},
|
|
||||||
{"red", 3},
|
{"blue", 2},
|
||||||
{"bright_red", 4},
|
{"bright_blue", 3},
|
||||||
{"green", 5},
|
|
||||||
{"bright_green", 6},
|
{"red", 4},
|
||||||
{"yellow", 7},
|
{"bright_red", 5},
|
||||||
{"bright_yellow", 8},
|
|
||||||
{"blue", 9},
|
{"magenta", 6},
|
||||||
{"bright_blue", 10},
|
{"bright_magenta", 7},
|
||||||
{"magenta", 11},
|
|
||||||
{"bright_magenta", 12},
|
{"green", 8},
|
||||||
{"cyan", 13},
|
{"bright_green", 9},
|
||||||
{"bright_cyan", 14},
|
|
||||||
{"white", 15},
|
{"cyan", 10},
|
||||||
{"bright_white", 16}};
|
{"bright_cyan", 11},
|
||||||
|
|
||||||
|
{"yellow", 12},
|
||||||
|
{"bright_yellow", 13},
|
||||||
|
|
||||||
|
{"white", 14},
|
||||||
|
{"bright_white", 15},
|
||||||
|
|
||||||
|
{"transparent", 255}};
|
||||||
|
|
||||||
// Busca el color en el mapa
|
// Busca el color en el mapa
|
||||||
auto it = paletteMap.find(str);
|
auto it = paletteMap.find(str);
|
||||||
|
|||||||
@@ -6,6 +6,36 @@
|
|||||||
#include <string> // for string
|
#include <string> // for string
|
||||||
#include <vector> // for vector
|
#include <vector> // for vector
|
||||||
|
|
||||||
|
enum class PaletteColor : Uint8
|
||||||
|
{
|
||||||
|
BLACK = 0,
|
||||||
|
BRIGHT_BLACK = 1,
|
||||||
|
|
||||||
|
BLUE = 2,
|
||||||
|
BRIGHT_BLUE = 3,
|
||||||
|
|
||||||
|
RED = 4,
|
||||||
|
BRIGHT_RED = 5,
|
||||||
|
|
||||||
|
MAGENTA = 6,
|
||||||
|
BRIGHT_MAGENTA = 7,
|
||||||
|
|
||||||
|
GREEN = 8,
|
||||||
|
BRIGHT_GREEN = 9,
|
||||||
|
|
||||||
|
CYAN = 10,
|
||||||
|
BRIGHT_CYAN = 11,
|
||||||
|
|
||||||
|
YELLOW = 12,
|
||||||
|
BRIGHT_YELLOW = 13,
|
||||||
|
|
||||||
|
WHITE = 14,
|
||||||
|
BRIGHT_WHITE = 15,
|
||||||
|
|
||||||
|
TRANSPARENT = 255,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// Estructura para definir un circulo
|
// Estructura para definir un circulo
|
||||||
struct Circle
|
struct Circle
|
||||||
{
|
{
|
||||||
@@ -105,10 +135,10 @@ std::string boolToString(bool value);
|
|||||||
bool colorAreEqual(Color color1, Color color2);
|
bool colorAreEqual(Color color1, Color color2);
|
||||||
|
|
||||||
// Convierte una cadena a minusculas
|
// Convierte una cadena a minusculas
|
||||||
std::string toLower(const std::string& str);
|
std::string toLower(const std::string &str);
|
||||||
|
|
||||||
// Convierte una cadena a mayúsculas
|
// Convierte una cadena a mayúsculas
|
||||||
std::string toUpper(const std::string& str);
|
std::string toUpper(const std::string &str);
|
||||||
|
|
||||||
// Obtiene el nombre de un fichero a partir de una ruta
|
// Obtiene el nombre de un fichero a partir de una ruta
|
||||||
std::string getFileName(const std::string &path);
|
std::string getFileName(const std::string &path);
|
||||||
|
|||||||