diff --git a/include/draw.h b/include/draw.h
index 000a0b4..b7d9919 100644
--- a/include/draw.h
+++ b/include/draw.h
@@ -50,12 +50,13 @@ typedef enum {
#define BUTTONS_START_Y 130
#define BUTTONS_STEP 22
+#define BUTTONS_INFO_LINES 4
+#define BUTTONS_INFO_COLUNMNS 2
enum {
+ BUTTONS_Y_INFO = BUTTONS_START_Y+5,
+
BUTTONS_Y_LINE_1 = BUTTONS_START_Y + BUTTONS_STEP*1,
-
- BUTTONS_Y_INFO = BUTTONS_Y_LINE_1+5,
-
BUTTONS_Y_LINE_2 = BUTTONS_START_Y + BUTTONS_STEP*2,
BUTTONS_Y_LINE_3 = BUTTONS_START_Y + BUTTONS_STEP*3,
BUTTONS_Y_LINE_4 = BUTTONS_START_Y + BUTTONS_STEP*4,
@@ -64,6 +65,11 @@ enum {
BUTTONS_X_RIGHT = 200,
} ButtonPos;
+typedef struct {
+ const wchar_t * info_line;
+ const wchar_t * instructions[BUTTONS_INFO_LINES][BUTTONS_INFO_COLUNMNS];
+} Instructions_s;
+
void init_screens(void);
void exit_screens(void);
@@ -74,6 +80,7 @@ void draw_preview(int preview_offset);
void draw_install(InstallType type);
-void draw_interface(Entry_List_s* list, EntryMode current_mode, bool install_mode);
+void draw_instructions(Instructions_s instructions);
+void draw_interface(Entry_List_s* list, EntryMode current_mode);
#endif
\ No newline at end of file
diff --git a/include/instructions.h b/include/instructions.h
new file mode 100644
index 0000000..37876c2
--- /dev/null
+++ b/include/instructions.h
@@ -0,0 +1,99 @@
+/*
+* This file is part of Anemone3DS
+* Copyright (C) 2016-2017 Alex Taber ("astronautlevel"), Dawid Eckert ("daedreth")
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+*
+* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
+* * Requiring preservation of specified reasonable legal notices or
+* author attributions in that material or in the Appropriate Legal
+* Notices displayed by works containing it.
+* * Prohibiting misrepresentation of the origin of that material,
+* or requiring that modified versions of such material be marked in
+* reasonable ways as different from the original version.
+*/
+
+#ifndef INSTRUCTIONS_H
+#define INSTRUCTIONS_H
+
+#include "draw.h"
+
+Instructions_s normal_instructions[MODE_AMOUNT] = {
+ {
+ .info_line = NULL,
+ .instructions = {
+ {
+ L"\uE000 Hold to install",
+ L"\uE001 Queue shuffle theme"
+ },
+ {
+ NULL,
+ L"\uE003 Preview theme"
+ },
+ {
+ L"\uE004 Switch to splashes",
+ L"\uE005 Scan QR code"
+ },
+ {
+ L"Exit",
+ L"Delete from SD"
+ }
+ }
+ },
+ {
+ .info_line = NULL,
+ .instructions = {
+ {
+ L"\uE000 Install splash",
+ L"\uE001 Delete installed splash"
+ },
+ {
+ NULL,
+ L"\uE003 Preview splash"
+ },
+ {
+ L"\uE004 Switch to themes",
+ L"\uE005 Scan QR code"
+ },
+ {
+ L"Exit",
+ L"Delete from SD"
+ }
+ }
+ }
+};
+
+Instructions_s install_instructions = {
+ .info_line = L"Release \uE000 to cancel or hold \uE006 and release \uE000 to install",
+ .instructions = {
+ {
+ L"\uE079 Normal install",
+ L"\uE07A Shuffle install"
+ },
+ {
+ L"\uE07B BGM-only install",
+ L"\uE07C No-BGM install"
+ },
+ {
+ NULL,
+ NULL
+ },
+ {
+ L"Exit",
+ NULL
+ }
+ }
+};
+
+#endif
\ No newline at end of file
diff --git a/source/draw.c b/source/draw.c
index 914ae02..ce95425 100644
--- a/source/draw.c
+++ b/source/draw.c
@@ -196,7 +196,43 @@ void draw_install(InstallType type)
pp2d_end_draw();
}
-void draw_interface(Entry_List_s* list, EntryMode current_mode, bool install_mode)
+void draw_instructions(Instructions_s instructions)
+{
+ pp2d_draw_on(GFX_TOP, GFX_LEFT);
+
+ if(instructions.info_line != NULL)
+ pp2d_draw_wtext_center(GFX_TOP, BUTTONS_Y_INFO, 0.55, 0.55, COLOR_WHITE, instructions.info_line);
+
+ const int y_lines[BUTTONS_INFO_LINES-1] = {
+ BUTTONS_Y_LINE_1,
+ BUTTONS_Y_LINE_2,
+ BUTTONS_Y_LINE_3,
+ };
+
+ for(int i = 0; i < BUTTONS_INFO_LINES-1; i++)
+ {
+ if(instructions.instructions[i][0] != NULL)
+ pp2d_draw_wtext(BUTTONS_X_LEFT, y_lines[i], 0.6, 0.6, COLOR_WHITE, instructions.instructions[i][0]);
+ if(instructions.instructions[i][1] != NULL)
+ pp2d_draw_wtext(BUTTONS_X_RIGHT, y_lines[i], 0.6, 0.6, COLOR_WHITE, instructions.instructions[i][1]);
+ }
+
+ const wchar_t * start_line = instructions.instructions[BUTTONS_INFO_LINES-1][0];
+ if(start_line != NULL)
+ {
+ pp2d_draw_texture(TEXTURE_START_BUTTON, BUTTONS_X_LEFT-10, BUTTONS_Y_LINE_4 + 3);
+ pp2d_draw_wtext(BUTTONS_X_LEFT+26, BUTTONS_Y_LINE_4, 0.6, 0.6, COLOR_WHITE, start_line);
+ }
+
+ const wchar_t * select_line = instructions.instructions[BUTTONS_INFO_LINES-1][1];
+ if(select_line != NULL)
+ {
+ pp2d_draw_texture(TEXTURE_SELECT_BUTTON, BUTTONS_X_RIGHT-10, BUTTONS_Y_LINE_4 + 3);
+ pp2d_draw_wtext(BUTTONS_X_RIGHT+26, BUTTONS_Y_LINE_4, 0.6, 0.6, COLOR_WHITE, select_line);
+ }
+}
+
+void draw_interface(Entry_List_s* list, EntryMode current_mode)
{
draw_base_interface();
@@ -240,48 +276,6 @@ void draw_interface(Entry_List_s* list, EntryMode current_mode, bool install_mod
utf16_to_utf32((u32*)description, current_entry.desc, 0x80);
pp2d_draw_wtext_wrap(20, 65, 0.5, 0.5, COLOR_WHITE, 363, description);
- if(install_mode)
- {
- pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_2, 0.6, 0.6, COLOR_WHITE, L"\uE079 Normal install");
- pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_2, 0.6, 0.6, COLOR_WHITE, L"\uE07A Shuffle install");
-
- pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE07B BGM-only install");
- pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE07C No-BGM install");
-
- pp2d_draw_text_center(GFX_TOP, BUTTONS_Y_LINE_1, 0.55, 0.55, COLOR_WHITE, "Release \uE000 to cancel or hold \uE006 and release \uE000 to install");
- }
- else
- {
- switch(current_mode)
- {
- case MODE_THEMES:
- pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_1, 0.6, 0.6, COLOR_WHITE, L"\uE000 Hold to install");
- pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_1, 0.6, 0.6, COLOR_WHITE, L"\uE001 Queue shuffle theme");
-
- pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_2, 0.6, 0.6, COLOR_WHITE, L"\uE003 Preview theme");
-
- pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE004 Switch to splashes");
- pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE005 Scan QR code");
- break;
- case MODE_SPLASHES:
- pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_1, 0.6, 0.6, COLOR_WHITE, L"\uE000 Install splash");
- pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_1, 0.6, 0.6, COLOR_WHITE, L"\uE001 Delete installed splash");
-
- pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_2, 0.6, 0.6, COLOR_WHITE, L"\uE003 Preview splash");
-
- pp2d_draw_wtext(BUTTONS_X_LEFT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE004 Switch to themes");
- pp2d_draw_wtext(BUTTONS_X_RIGHT, BUTTONS_Y_LINE_3, 0.6, 0.6, COLOR_WHITE, L"\uE005 Scan QR code");
- break;
- default:
- break;
- }
- pp2d_draw_texture(TEXTURE_SELECT_BUTTON, BUTTONS_X_RIGHT-10, BUTTONS_Y_LINE_4 + 3);
- pp2d_draw_wtext(BUTTONS_X_RIGHT+26, BUTTONS_Y_LINE_4, 0.6, 0.6, COLOR_WHITE, L"Delete from SD");
- }
-
- pp2d_draw_texture(TEXTURE_START_BUTTON, BUTTONS_X_LEFT-10, BUTTONS_Y_LINE_4 + 3);
- pp2d_draw_wtext(BUTTONS_X_LEFT+26, BUTTONS_Y_LINE_4, 0.6, 0.6, COLOR_WHITE, L"Exit");
-
pp2d_draw_on(GFX_BOTTOM, GFX_LEFT);
switch(current_mode)
diff --git a/source/main.c b/source/main.c
index ce54639..15c9606 100644
--- a/source/main.c
+++ b/source/main.c
@@ -30,6 +30,7 @@
#include "splashes.h"
#include "draw.h"
#include "camera.h"
+#include "instructions.h"
#include "pp2d/pp2d/pp2d.h"
#include
@@ -157,7 +158,14 @@ int main(void)
if(qr_mode) take_picture();
else if(preview_mode) draw_preview(preview_offset);
- else draw_interface(current_list, current_mode, install_mode);
+ else {
+ draw_interface(current_list, current_mode);
+ if(install_mode)
+ draw_instructions(install_instructions);
+ else
+ draw_instructions(normal_instructions[current_mode]);
+ }
+
pp2d_end_draw();
if(kDown & KEY_START) break;