mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
original xrick code by 'BigOrno' at: http://www.bigorno.net/xrick/ Rockbox port, plus bugfixes at: https://github.com/pierluigi-vicinanza/xrick Further changes: * Additonal fixes from g#3026 * Port to modern plugin API * Add Pluginlib keymap fallback * Support all >1bpp screens * Fix build warnings in miniz * Better error message when resources are missing Change-Id: Id83928bc2539901b0221692f65cbca41389c58e7
200 lines
5.1 KiB
C
200 lines
5.1 KiB
C
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
* $Id$
|
|
*
|
|
* Port of xrick, a Rick Dangerous clone, to Rockbox.
|
|
* See http://www.bigorno.net/xrick/
|
|
*
|
|
* Copyright (C) 2008-2014 Pierluigi Vicinanza
|
|
*
|
|
* 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 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#include "xrick/system/sysmenu_rockbox.h"
|
|
|
|
#include "xrick/config.h"
|
|
#include "xrick/control.h"
|
|
#include "xrick/draw.h"
|
|
#include "xrick/game.h"
|
|
#include "xrick/system/system.h"
|
|
#include "xrick/system/syssnd_rockbox.h"
|
|
|
|
#include "plugin.h"
|
|
#ifndef HAVE_LCD_COLOR
|
|
#include "lib/grey.h"
|
|
#endif
|
|
|
|
#ifdef HAVE_LCD_COLOR
|
|
static fb_data *lcd_fb=NULL;
|
|
#endif
|
|
|
|
#ifdef ENABLE_CHEATS
|
|
/*
|
|
* Cheat settings menu
|
|
*/
|
|
static char * sysmenu_cheatItemText(int selected_item, void *data, char *buffer, size_t buffer_len)
|
|
{
|
|
(void)selected_item;
|
|
cheat_t cheat = (cheat_t)data;
|
|
(void)buffer;
|
|
(void)buffer_len;
|
|
char * messages[] =
|
|
{
|
|
"Disable Unlimited Lives/Ammo Mode",
|
|
"Enable Unlimited Lives/Ammo Mode",
|
|
"Disable Never Die Mode",
|
|
"Enable Never Die Mode",
|
|
"Disable Expose Mode",
|
|
"Enable Expose Mode"
|
|
};
|
|
|
|
switch (cheat)
|
|
{
|
|
case Cheat_UNLIMITED_ALL:
|
|
{
|
|
return game_cheat1? messages[0] : messages[1];
|
|
}
|
|
case Cheat_NEVER_DIE:
|
|
{
|
|
return game_cheat2? messages[2] : messages[3];
|
|
}
|
|
case Cheat_EXPOSE:
|
|
{
|
|
return game_cheat3? messages[4] : messages[5];
|
|
}
|
|
default: break;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
/*
|
|
* Callback invoked by cheat menu item
|
|
*/
|
|
static int sysmenu_doToggleCheat(void *param)
|
|
{
|
|
cheat_t cheat = (cheat_t)param;
|
|
game_toggleCheat(cheat);
|
|
return 0;
|
|
}
|
|
|
|
MENUITEM_FUNCTION_DYNTEXT(sysmenu_unlimitedAllItem, MENU_FUNC_USEPARAM, sysmenu_doToggleCheat,
|
|
sysmenu_cheatItemText, NULL, (void *)Cheat_UNLIMITED_ALL,
|
|
NULL, Icon_NOICON);
|
|
|
|
MENUITEM_FUNCTION_DYNTEXT(sysmenu_neverDieItem, MENU_FUNC_USEPARAM, sysmenu_doToggleCheat,
|
|
sysmenu_cheatItemText, NULL, (void *)Cheat_NEVER_DIE,
|
|
NULL, Icon_NOICON);
|
|
|
|
MENUITEM_FUNCTION_DYNTEXT(sysmenu_exposeItem, MENU_FUNC_USEPARAM, sysmenu_doToggleCheat,
|
|
sysmenu_cheatItemText, NULL, (void *)Cheat_EXPOSE,
|
|
NULL, Icon_NOICON);
|
|
|
|
MAKE_MENU(sysmenu_cheatItems, "Cheat Settings", NULL, Icon_NOICON,
|
|
&sysmenu_unlimitedAllItem, &sysmenu_neverDieItem, &sysmenu_exposeItem);
|
|
|
|
#endif /* ENABLE_CHEATS */
|
|
|
|
/*
|
|
* Display main menu
|
|
*/
|
|
void sysmenu_exec(void)
|
|
{
|
|
int result;
|
|
bool done;
|
|
|
|
enum
|
|
{
|
|
Menu_RESUME,
|
|
Menu_RESTART,
|
|
#ifdef ENABLE_CHEATS
|
|
Menu_CHEAT_SETTINGS,
|
|
#endif
|
|
Menu_QUIT
|
|
};
|
|
|
|
MENUITEM_STRINGLIST(sysmenu_mainItems, "xrick Menu", NULL,
|
|
"Resume Game",
|
|
"Restart Game",
|
|
#ifdef ENABLE_CHEATS
|
|
"Cheat Settings",
|
|
#endif
|
|
ID2P(LANG_MENU_QUIT));
|
|
|
|
#ifdef ENABLE_SOUND
|
|
syssnd_pauseAll(true);
|
|
#endif
|
|
|
|
#ifndef HAVE_LCD_COLOR
|
|
grey_show(false);
|
|
#endif
|
|
|
|
done = false;
|
|
do
|
|
{
|
|
rb->button_clear_queue();
|
|
|
|
result = rb->do_menu(&sysmenu_mainItems, NULL, NULL, false);
|
|
switch(result)
|
|
{
|
|
case Menu_RESUME:
|
|
{
|
|
done = true;
|
|
break;
|
|
}
|
|
case Menu_RESTART:
|
|
{
|
|
control_set(Control_END);
|
|
done = true;
|
|
break;
|
|
}
|
|
#ifdef ENABLE_CHEATS
|
|
case Menu_CHEAT_SETTINGS:
|
|
{
|
|
rb->do_menu(&sysmenu_cheatItems, NULL, NULL, false);
|
|
break;
|
|
}
|
|
#endif
|
|
case Menu_QUIT:
|
|
{
|
|
control_set(Control_EXIT);
|
|
done = true;
|
|
break;
|
|
}
|
|
default: break;
|
|
}
|
|
} while (!done);
|
|
|
|
#ifdef HAVE_LCD_COLOR
|
|
if (!(control_test(Control_EXIT)))
|
|
{
|
|
if(!lcd_fb)
|
|
{
|
|
struct viewport *vp_main = rb->lcd_set_viewport(NULL);
|
|
lcd_fb = vp_main->buffer->fb_ptr;
|
|
}
|
|
rb->memset(lcd_fb, 0, sizeof(fb_data) * LCD_WIDTH * LCD_HEIGHT);
|
|
sysvid_update(&draw_SCREENRECT);
|
|
rb->lcd_update();
|
|
}
|
|
#else
|
|
grey_show(true);
|
|
#endif
|
|
|
|
#ifdef ENABLE_SOUND
|
|
syssnd_pauseAll(false);
|
|
#endif
|
|
}
|
|
|
|
/* eof */
|