diff --git a/desktop_version/src/Graphics.cpp b/desktop_version/src/Graphics.cpp index b04c59a9..85f1ff0e 100644 --- a/desktop_version/src/Graphics.cpp +++ b/desktop_version/src/Graphics.cpp @@ -1049,6 +1049,17 @@ void Graphics::drawgui(void) //blue guy draw_sprite(crew_xp, crew_yp, crew_sprite, 75, 75, 255 - help.glow / 4 - textboxes[i].rand); } + + for (int index = 0; index < (int) textboxes[i].sprites.size(); index++) + { + TextboxSprite* sprite = &textboxes[i].sprites[index]; + draw_sprite( + sprite->x + textboxes[i].xp, + sprite->y + textboxes[i].yp, + sprite->tile, + getcol(sprite->col) + ); + } } } @@ -1428,6 +1439,17 @@ void Graphics::textboxtimer(int t) textboxes[m].timer = t; } +void Graphics::addsprite(int x, int y, int tile, int col) +{ + if (!INBOUNDS_VEC(m, textboxes)) + { + vlog_error("addsprite() out-of-bounds!"); + return; + } + + textboxes[m].addsprite(x, y, tile, col); +} + void Graphics::addline( const std::string& t ) { if (!INBOUNDS_VEC(m, textboxes)) diff --git a/desktop_version/src/Graphics.h b/desktop_version/src/Graphics.h index 5cb7479c..ce748552 100644 --- a/desktop_version/src/Graphics.h +++ b/desktop_version/src/Graphics.h @@ -122,6 +122,8 @@ public: void textboxtimer(int t); + void addsprite(int x, int y, int tile, int col); + void textboxremove(void); void textboxremovefast(void); diff --git a/desktop_version/src/Script.cpp b/desktop_version/src/Script.cpp index c6ebe63e..260144da 100644 --- a/desktop_version/src/Script.cpp +++ b/desktop_version/src/Script.cpp @@ -53,6 +53,7 @@ scriptclass::scriptclass(void) textcase = 1; textbuttons = false; textlarge = false; + textbox_sprites.clear(); } void scriptclass::add_default_colours(void) @@ -528,6 +529,7 @@ void scriptclass::run(void) textpad_right = 0; textpadtowidth = 0; textboxtimer = 0; + textbox_sprites.clear(); translate_dialogue(); } @@ -698,6 +700,15 @@ void scriptclass::run(void) { textboxtimer = ss_toi(words[1]); } + else if (words[0] == "textsprite") + { + TextboxSprite sprite; + sprite.x = ss_toi(words[1]); + sprite.y = ss_toi(words[2]); + sprite.tile = ss_toi(words[3]); + sprite.col = ss_toi(words[4]); + textbox_sprites.push_back(sprite); + } else if (words[0] == "flipme") { textflipme = !textflipme; @@ -729,6 +740,11 @@ void scriptclass::run(void) graphics.textboxtimer(textboxtimer); } + for (size_t i = 0; i < textbox_sprites.size(); i++) + { + graphics.addsprite(textbox_sprites[i].x, textbox_sprites[i].y, textbox_sprites[i].tile, textbox_sprites[i].col); + } + // Some textbox formatting that can be set by translations... if (textcentertext) { diff --git a/desktop_version/src/Script.h b/desktop_version/src/Script.h index 1924fb41..6bc19715 100644 --- a/desktop_version/src/Script.h +++ b/desktop_version/src/Script.h @@ -2,10 +2,11 @@ #define SCRIPT_H #include +#include #include #include -#include +#include "Textbox.h" #define filllines(lines) commands.insert(commands.end(), lines, lines + SDL_arraysize(lines)) @@ -123,6 +124,7 @@ public: bool textbuttons; bool textlarge; int textboxtimer; + std::vector textbox_sprites; //Misc int i, j, k; diff --git a/desktop_version/src/Textbox.cpp b/desktop_version/src/Textbox.cpp index 7978a3da..1546b425 100644 --- a/desktop_version/src/Textbox.cpp +++ b/desktop_version/src/Textbox.cpp @@ -28,6 +28,18 @@ textboxclass::textboxclass(void) print_flags = PR_FONT_LEVEL; fill_buttons = false; + + sprites.clear(); +} + +void textboxclass::addsprite(int x, int y, int tile, int col) +{ + TextboxSprite sprite; + sprite.x = x; + sprite.y = y; + sprite.tile = tile; + sprite.col = col; + sprites.push_back(sprite); } void textboxclass::centerx(void) diff --git a/desktop_version/src/Textbox.h b/desktop_version/src/Textbox.h index 46cf1f1f..92da145d 100644 --- a/desktop_version/src/Textbox.h +++ b/desktop_version/src/Textbox.h @@ -5,11 +5,21 @@ #include #include +struct TextboxSprite +{ + int x; + int y; + int col; + int tile; +}; + class textboxclass { public: textboxclass(void); + void addsprite(int x, int y, int tile, int col); + void centerx(void); void centery(void); @@ -53,6 +63,8 @@ public: uint32_t print_flags; bool fill_buttons; + + std::vector sprites; }; #endif /* TEXTBOX_H */