From 04f0a7547234f0b10cca531a37e6f5ec459cd72c Mon Sep 17 00:00:00 2001 From: SlyVTT Date: Thu, 13 Jul 2023 22:23:31 +0200 Subject: [PATCH] added transparency to all mode + working dialogs on all plateforms and for all colorsets (thanks Lephe) --- CMakeLists.txt | 2 +- fxlink-image-2023.07.10-20h57-1.png | Bin 0 -> 7661 bytes fxlink-image-2023.07.10-20h57-2.png | Bin 0 -> 7461 bytes fxlink-image-2023.07.10-20h57-3.png | Bin 0 -> 7461 bytes fxlink-image-2023.07.10-20h57-4.png | Bin 0 -> 7674 bytes src/config.h | 5 ++ src/dialogs.c | 113 +++++++++++++++++++++++++--- src/main.c | 6 +- 8 files changed, 109 insertions(+), 17 deletions(-) create mode 100644 fxlink-image-2023.07.10-20h57-1.png create mode 100644 fxlink-image-2023.07.10-20h57-2.png create mode 100644 fxlink-image-2023.07.10-20h57-3.png create mode 100644 fxlink-image-2023.07.10-20h57-4.png diff --git a/CMakeLists.txt b/CMakeLists.txt index d36cab6..75b29b7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,7 @@ find_package(Gint 2.9 REQUIRED) find_package(LibProf 2.4 REQUIRED) #set the color mode either to 1b or 2b -set(COLORMODE_fx 2b) +set(COLORMODE_fx 1b) #set the color mode either to 2b or EGA64 set(COLORMODE_cg EGA64) diff --git a/fxlink-image-2023.07.10-20h57-1.png b/fxlink-image-2023.07.10-20h57-1.png new file mode 100644 index 0000000000000000000000000000000000000000..eacb860a3ad5d3fa98f330daffc28e225ffb836a GIT binary patch literal 7661 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 G5&r`NZ5(s} literal 0 HcmV?d00001 diff --git a/fxlink-image-2023.07.10-20h57-3.png b/fxlink-image-2023.07.10-20h57-3.png new file mode 100644 index 0000000000000000000000000000000000000000..55567eba860dffca1b2feddc7c0a2b41252e4810 GIT binary patch literal 7461 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 G5&r`NZ5(s} literal 0 HcmV?d00001 diff --git a/fxlink-image-2023.07.10-20h57-4.png b/fxlink-image-2023.07.10-20h57-4.png new file mode 100644 index 0000000000000000000000000000000000000000..cc405225950e255bb8c06f65f0b5ff82816b37bd GIT binary patch literal 7674 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 h^9iQsA@tMuZJ~Bs7*Ld>!{{TDmnhyW~ literal 0 HcmV?d00001 diff --git a/src/config.h b/src/config.h index 87cd453..54bb80c 100644 --- a/src/config.h +++ b/src/config.h @@ -1,6 +1,11 @@ #ifndef CONFIG_H #define CONFIG_H + +#if !defined(FXCG50) && defined(COLOR2BIT) + #define GRAYMODEOK +#endif + #define USB_FEATURE 1 #endif diff --git a/src/dialogs.c b/src/dialogs.c index b4cb299..ed176de 100644 --- a/src/dialogs.c +++ b/src/dialogs.c @@ -3,20 +3,57 @@ #include #include +#include + +#include "config.h" + + #define BOX_HEIGHT (F_HEIGHT/PXSIZE+8) extern font_t fontRPG; +#define FONT_USED fontRPG + +#ifdef GRAYMODEOK + #include + uint32_t *lightVRAMnext, *darkVRAMnext; + uint32_t *lightVRAMcurrent, *darkVRAMcurrent; +#endif //GRAYMODEOK + + +void blit() +{ + dupdate(); + + #ifdef GRAYMODEOK + dgray_getvram( &lightVRAMnext, &darkVRAMnext ); + dgray_getscreen( &lightVRAMcurrent, &darkVRAMcurrent ); + + memcpy( lightVRAMnext, lightVRAMcurrent, 256*sizeof( uint32_t) ); + memcpy( darkVRAMnext, darkVRAMcurrent, 256*sizeof( uint32_t) ); + #endif +} + void showtext(Game *game, bopti_image_t *face, char *text) { - dfont(&fontRPG); - unsigned int i; + + + dfont(&FONT_USED); + unsigned int i, n, y = PXSIZE, l = 0; + int line_max_chars; + unsigned int max_lines_amount = (BOX_HEIGHT-2)*PXSIZE/ + (FONT_USED.line_height+PXSIZE); + const char *c; + /* Run a little fancy animation. */ for(i=0;iframe_duration < 20) sleep(); game->frame_duration = 0; } @@ -24,23 +61,77 @@ void showtext(Game *game, bopti_image_t *face, char *text) { * drawing on the face. */ /* Show a little message that showing text in dialogs is not implemented * yet. */ - dtext(BOX_HEIGHT*PXSIZE, 1, C_BLACK, "Dialogs not implemented"); - dtext(BOX_HEIGHT*PXSIZE, 8*PXSIZE, C_BLACK, "Press any key"); - dupdate(); - getkey(); for(i=0;i0; n--) { + /* If we found a space, we can draw this line and do the same for + * the next line. */ + if(text[i+n] == ' '){ + dtext_opt(BOX_HEIGHT*PXSIZE, y, C_BLACK, C_NONE, DTEXT_LEFT, + DTEXT_TOP, text+i, n); /* Draw everything. */ + /* Increment y by the line height. */ + y += FONT_USED.line_height+PXSIZE; + i += n; /* We drew everything to i+n */ + l++; /* We drew one more line. */ + break; + } + } + if(l>=max_lines_amount-1){ + /* We drew one entire screen, reset everything to draw the next one. + */ + /* Make a little animation :). */ + blit(); + + while(game->frame_duration < 1000) sleep(); + game->frame_duration = 0; + /* Ask the user to press EXE to continue. */ + dtext(BOX_HEIGHT*PXSIZE, y, C_BLACK, "[EXE] to continue ..."); + } + /* Make a little animation :). */ + blit(); + + if(l>=max_lines_amount-1){ + while(getkey().key != KEY_EXE) sleep(); + /* Clear the screen. */ + drect(BOX_HEIGHT*PXSIZE, 0, DWIDTH, (BOX_HEIGHT-1)*PXSIZE-1, + C_WHITE); + /* Reset y and l. */ + y = PXSIZE; + l = 0; + } + else{ + while(game->frame_duration < 1000) sleep(); + game->frame_duration = 0; + } } + if(lframe_duration < 1000) sleep(); + game->frame_duration = 0; + /* Ask the user to press EXE to continue. */ + dtext(1, y, C_BLACK, "[EXE] To continue ..."); + while(getkey().key != KEY_EXE) sleep(); + } + /* Run another little fancy animation. */ for(i=40;i>0;i--){ draw(game); drect(0, 0, DWIDTH, i*PXSIZE, C_WHITE); drect(0, i*PXSIZE, DWIDTH, (i+1)*PXSIZE, C_BLACK); dsubimage(4*PXSIZE, 2*PXSIZE, face, 0, 0, F_WIDTH, (i-8)*PXSIZE, DIMAGE_NONE); - dupdate(); + + blit(); + while(game->frame_duration < 20) sleep(); game->frame_duration = 0; } } - - diff --git a/src/main.c b/src/main.c index f48a53e..bfb9a74 100644 --- a/src/main.c +++ b/src/main.c @@ -12,10 +12,6 @@ #endif //USB_FEATURE -#if !defined(FXCG50) && defined(COLOR2BIT) - #define GRAYMODEOK -#endif - #ifdef GRAYMODEOK #include #endif //GRAYMODEOK @@ -103,7 +99,7 @@ int main(void) { dgray(DGRAY_ON); #endif - showtext(&game, &player_face_img, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit. Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna. Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet."); + showtext(&game, &player_face_img, "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet."); do{ /* clear screen */ dclear(C_WHITE);