diff options
author | Juan J. Martinez <jjm@usebox.net> | 2023-06-29 23:12:41 +0100 |
---|---|---|
committer | Juan J. Martinez <jjm@usebox.net> | 2023-06-29 23:12:41 +0100 |
commit | b176d3779cbc3d0d02d6651b082cd5011522f7be (patch) | |
tree | f22495a8d8b1d5dfc5f5f0f87b23b947b5027ce0 | |
parent | 3f7b9d71c75360207dd05b8cb67131b08f2c18ca (diff) | |
download | gold-mine-run-b176d3779cbc3d0d02d6651b082cd5011522f7be.tar.gz gold-mine-run-b176d3779cbc3d0d02d6651b082cd5011522f7be.zip |
Add attract screen
-rw-r--r-- | src/menu.c | 102 |
1 files changed, 96 insertions, 6 deletions
@@ -7,15 +7,20 @@ #include "data.h" #include "game.h" -uint8_t run_menu() +#define CAST_LEN 6 + +static void render_hiscore() { char b[10]; - blit_erase(0); - sprintf(b, "HI %06li", get_hiscore()); put_text(124, 10, b, 5); + put_text(96, 180, "_2023 USEBOX.NET", 1); +} + +static void render_menu() +{ Rect dst = { 80, 45, 160, 38 }; blit(binary_title_start, &dst); @@ -23,11 +28,54 @@ uint8_t run_menu() put_text(64, 140, "CODE, GRAPHICS AND SOUND", 2); put_text(96, 150, "JUAN J. MARTINEZ", 3); +} - put_text(96, 180, "_2023 USEBOX.NET", 1); +/* names of the cast */ +static const char *names[CAST_LEN] = { + "THE MINER", + "SNAKEY", + "BATTY", + "OLD MINER", + "MR BONES", + "TIME MONSTER", +}; + +/* sprites for the cast */ +static const Rect sprites[CAST_LEN] = { + { 0, 0, 144, 144 }, + { 0, 32, 144, 144 }, + { 64, 32, 144, 144 }, + { 0, 80, 144, 144 }, + { 80, 48, 144, 144 }, + { 80, 48, 144, 144 }, +}; + +static void render_cast() +{ + put_text(128, 32, "THE CAST", 1); + + Rect dst = { 104, 50, 16, 16 }; + + /* show the cast line by line */ + for (uint8_t i = 0; i < CAST_LEN; i++) + { + blitrc(binary_sprites_start, &sprites[i], &dst); + put_text(dst.x + 16 + 8, dst.y + 6, names[i], i + 2); - wait_vsync(); - blit_update(); + wait_vsync(); + blit_update(); + + wait_frames(32); + + dst.y += 20; + } +} + +uint8_t run_menu() +{ + uint16_t count = 0; + uint8_t cast = 0; + uint8_t wait; while (1) { @@ -36,5 +84,47 @@ uint8_t run_menu() if (keys[KEY_SPACE]) return 1; + + /* change of screen, requires drawing */ + if (count == 0) + { + blit_erase(0); + + render_hiscore(); + if (cast) + render_cast(); + else + { + wait = 0; + render_menu(); + } + + wait_vsync(); + blit_update(); + } + + /* if is not cast, we do the "blink" effect */ + if (!cast) + { + wait++; + if (wait == 64 || wait == 80) + { + if (wait == 80) + wait = 0; + + put_text(84, 110, "PRESS SPACE TO PLAY", wait ? 0 : 1); + wait_vsync(); + blit_update(); + } + } + + /* frames before changing screen */ + if (count++ == 324) + { + cast ^= 1; + count = 0; + } + + wait_vsync(); } } |