Hacking USB Loader GX

  • Thread starter cyrex
  • Start date
  • Views 7,223,466
  • Replies 29,375
  • Likes 48

marinos35

Well-Known Member
Member
Joined
Mar 12, 2006
Messages
352
Trophies
0
XP
314
Country
Italy
0ld8oy said:
Bassetts said:
marinos35 said:
Bassetts said:
I apologise in advance if this has been answered but I have trawled the thread and search various terms but have not found a definite answer. Does USBLoader GX download/update the wiitdb.zip itself or does this always have to be done manually? It looks like it should be automatic if correct WiFi settings are present but I cannot get it to download. I have seen some people saying wiitdb.zip is updated when the update all option is selected but when I try an update I just get told everything is up-to-date.
the update all option updates it, but if there isn't a new rev out I think it doesn't download anything. If you check the downloads section at the site at my sig you will see a guide of how to update it manually with the help of your pc (or just press 2 at the loader to show the info window and read the very tiny letters at the bottom)

Thanks for the clarification, I shall add a request on the bug tracker as it seems common sense to update the wiitdb file even if there is not a new version of USB Loader GX out, people will be adding new games at any time.

This functionality was removed. Probably trying to avoid issues reminiscent of those with djtaz and abusing the privilege of downloading/using up unnecessary bandwidth.

Which functionality was removed? The Update all + wiitdb.zip or the custom link generated only for your Wii?

Or did you mean the full wiitdb.zip file, which wasn't mentioned at all, and I know it was dropped?
 

Chaos Punk

Well-Known Member
Member
Joined
Apr 19, 2009
Messages
224
Trophies
0
Age
32
Location
Bakersfield, CA
Website
Visit site
XP
45
Country
United States
Two bugs to report.

1. Homebrew Loading - When you launch an app such as the Homebrew Browser or Super Mario War (fun game, lol) that pulls resource files from the USB device, the app crashes.

2. Ocarina - For some reason, when I try to go into the ocarina menu for certain games like Smash Bros., I get a code dump. I tried deleting all of my cheat .txts and cheat files, and re-downloading them, but the problem persists.
 

olijack

Active Member
Newcomer
Joined
Oct 26, 2008
Messages
38
Trophies
0
XP
91
Country
SomeGuy2009 said:
Is there any way to autoupdate the loader when it is injected/installed into preloader at wii boot? With these updates all the time its a pane to have to reinstall the loader after updating the binary into preloader.

I came up with a workaround that whilst it isn't automatic helps speed the process up as follows

1. Change the update path in settings to the root of your SD Card (this is a one time thing if you make sure that settings are permanently saved)
2. Launch the update and if there is a new revision update dol it will then download the new boot.dol to the root of the SD Card overwriting a previous one if it exists
3. Once downloaded the wii will ask to restart allow it to and at this point hold down the reset button to bring up preloader menu
4. Install the file as normal in preloader
5. Either Load installed file or reboot wii and you are updated :-)

Of course you could use the forwarder instead and load that into preloader and have it load from that straight from either SD or USB which you could then update normally without the extra step but I have never got this working for myself get only a black screen when I boot (I think it may be something to do with my SDHC card)

Would be cool though if there was a way that USB loader could update the file in preloader itself but can't see it happening but you never know as I bet more and more people are going to be using it this way as a wii menu replacement.
 

Neversoft

Well-Known Member
Member
Joined
Aug 25, 2006
Messages
237
Trophies
1
XP
636
Country
Normally I only read this thread for news and updates and any issues I've had, I have pretty much been able to resolve them all by either reading this thread or cleaning out some rubbish on the SD instead of clutting the thread with my problems but this time I'm struggling:

Is there anything specific I need to do in the loader to get it accept WADS and DOLS via WiiLoad? I know Wiiload is setup ok as I can fire dol files at the Homebrew Channel all day and it's fine. On GX however, it just gets ignored.

Just to clarify what I'm doing in case I'm doing something monumentally stupid and missing it...

- Pretty much launch-day PAL Wii
- I'm on the latest rev that Logan compiled (r695) but I haven't managed to get this working on any revision
- cIOS r14
- SM 4.1

1. Go into the Homebrew section in GX
2. Click the Wifi icon, wait for it to highlight
3. Wiiload a dol... Nothing happens
4. Go into Channels menu
5. Wiiload a wad... Nothing happens

I'm as sure as can be that it's not a PC/Wiiload issue (firewalls etc) as, like I said earlier it's fine in the HBC.

Run from the command prompt so I can see if there's any errors, I get this pretty unhelpful response
smile.gif


Code:
>wiiload boot.dol
wiiload v0.4
coded by dhewg, #wiidev efnet

connecting to 192.168.1.65:4299
error connecting: No error
transfer failed.
Same DOL in HBC (in this instance it's just DoP-IOS as a test but any DOL behaves the same way)

Code:
>wiiload boot.dol
wiiload v0.4
coded by dhewg, #wiidev efnet

connecting to 192.168.1.65:4299
sending upload request
sending file size (365280 bytes)
sending data.....
sending arguments (10 bytes)
done.
Any ideas?
 

Royusmc

Well-Known Member
Member
Joined
May 22, 2009
Messages
223
Trophies
0
XP
111
Country
United States
This is for giantpune, I am trying to add 2 rows of 3 to the gridview. But I have to pick rows==3 and rows==4 and this only works for the rows==3. The rows==4 moves the row over by 4 which dose not work. I have tryed all I know to do to keep my gridview with my rows of 3 straight and your rows of 3 with the bend in them. But I realy want to have someone add my rows of 3 that are straight to the loader but I know you worked realy hard on yours so I did not want to say anything about it till I got both of them working. I can only get 3 rows of 10 for widescreen and 3 rows of 9 for standard. So I would like to share what I have with you so you can work your magic and get them both to work. I just need to know how you would like me to do this. I can post it on google code or here I just don't want to take up a hole page with this. So please help me I know most of us will like the added changes if we can get it working. Thanks.
 

chr0m

Well-Known Member
Member
Joined
Oct 9, 2007
Messages
343
Trophies
1
XP
967
Country
Australia
Is there are way to tell it to only download covers for a specific game?
The only way I know how to download covers is to do it for everything, so it goes checking for every missing cover each time and takes ages for the disc images because there are so many missing.

Also, I updated to to the latest (674) from inside the loader and now I am getting german text in the game list even though I have the option to get titles from xml off.
I never saw german text before this.
 

Bassetts

Member
Newcomer
Joined
Dec 29, 2007
Messages
13
Trophies
0
Age
34
Location
Nottingham
Website
www.dropshock.com
XP
118
Country
chr0m said:
Is there are way to tell it to only download covers for a specific game?
The only way I know how to download covers is to do it for everything, so it goes checking for every missing cover each time and takes ages for the disc images because there are so many missing.

The only option is to download all the missing covers although you could download the cover manually from WiiTDB, just make sure it is saved in SD:/images/ and disc images go in SD:/images/disc/ unless you have custom paths set.
 

Royusmc

Well-Known Member
Member
Joined
May 22, 2009
Messages
223
Trophies
0
XP
111
Country
United States
This is for giantpune, I need help with getting your grid rows==4 to work as it moves
everything by 4. If you need any more info just ask. I would like to thank you for any help.
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:Pre;overflow:auto'>
/****************************************************************************
* libwiigui
*
* gui_gameGrid.cpp
*
* GUI class definitions
***************************************************************************/

#include "gui.h"
#include "../wpad.h"

#include <unistd.h>
#include "gui_gamegrid.h"
#include "../settings/cfg.h"
#include "../prompts/PromptWindows.h"
#include "../language/gettext.h"
#include "../menu.h"
#include "fatmounter.h"

#include <string.h>
#include <math.h>
#include <sstream>

#define SCALE 0.8f
#define DEG_OFFSET 7
#define RADIUS 780
#define IN_SPEED 175
#define SHIFT_SPEED 100
#define SPEED_STEP 4
#define SAFETY 320

#include "../main.h"




extern const int vol;
int mover=0, mover2=0;
u8 goback=0;
int goLeft = 0, goRight=0;
char debugbuffer[100];
int c;
int selectedOld=0;
int wait=0,wait1=0;
bool isover=false;

/**
* Constructor for the GuiGamegrid class.
*/
GuiGameGrid::GuiGameGrid(int w, int h, struct discHdr * l, int count, const char *themePath, const u8 *imagebg, int selected, int offset)
{
width = w;
height = h;
gameCnt = (count < SAFETY) ? count : SAFETY;
gameList = l;
c=count;
listOffset = (offset == 0) ? this->FindMenuItem(-1, 1) : offset;
selectable = true;
selectedItem = selected - offset;
focus = 1; // allow focus
firstPic = 0;
clickedItem = -1;
speed = SHIFT_SPEED;
char imgPath[100];
rows =4;
drawTTs=0;


if ((count<42)&&(rows==4))rows=3;
if ((count<33)&&(rows==3))rows=2;
if ((count<16)&&(rows==2))rows=1;
if (gameCnt<6)gameCnt=6;

if (rows==1)pagesize = 6;
else if (rows==2)pagesize = 16;
else if (rows==3)pagesize = 33;
else if (rows==4)pagesize = 42;

//if (realCnt<pagesize)listOffset=5;//pagesize-(pagesize-realCnt)/2+1;

trigA = new GuiTrigger;
trigA->SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A);
trigL = new GuiTrigger;
trigL->SetButtonOnlyTrigger(-1, WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT, PAD_BUTTON_LEFT);
trigR = new GuiTrigger;
trigR->SetButtonOnlyTrigger(-1, WPAD_BUTTON_RIGHT | WPAD_CLASSIC_BUTTON_RIGHT, PAD_BUTTON_RIGHT);
trig1 = new GuiTrigger;
trig1->SetButtonOnlyTrigger(-1, WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_X, PAD_BUTTON_X);
trig2 = new GuiTrigger;
trig2->SetButtonOnlyTrigger(-1, WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_Y, PAD_BUTTON_Y);
trigPlus = new GuiTrigger;
trigPlus->SetButtonOnlyTrigger(-1, WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS, 0);
trigMinus = new GuiTrigger;
trigMinus->SetButtonOnlyTrigger(-1, WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS, 0);

btnSoundClick = new GuiSound(button_click2_pcm, button_click2_pcm_size, SOUND_PCM, Settings.sfxvolume);
btnSoundOver = new GuiSound(button_over_pcm, button_over_pcm_size, SOUND_PCM, Settings.sfxvolume);

int btnHeight = (int) lround(sqrt(RADIUS*RADIUS - 90000)-RADIUS-50);

btnLeft = new GuiButton(0,0);
btnLeft->SetAlignment(ALIGN_LEFT, ALIGN_MIDDLE);
btnLeft->SetPosition(20, btnHeight);
btnLeft->SetParent(this);
btnLeft->SetSoundOver(btnSoundOver);
btnLeft->SetTrigger(trigL);
btnLeft->SetTrigger(trigMinus);

/*debugTxt = new GuiText("fag", 14, (GXColor){0,0,0, 255});
debugTxt->SetParent(this);
debugTxt->SetAlignment(2,5);
debugTxt->SetPosition(0,180);*/


btnRight = new GuiButton(0,0);
btnRight->SetParent(this);
btnRight->SetAlignment(ALIGN_RIGHT, ALIGN_MIDDLE);
btnRight->SetPosition(-20, btnHeight);
btnRight->SetSoundOver(btnSoundOver);
btnRight->SetTrigger(trigR);
btnRight->SetTrigger(trigPlus);

btnRowUp = new GuiButton(0,0);
btnRowUp->SetParent(this);
btnRowUp->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
btnRowUp->SetPosition(0,0);
btnRowUp->SetTrigger(trig2);

btnRowDown = new GuiButton(0,0);
btnRowDown->SetParent(this);
btnRowDown->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
btnRowDown->SetPosition(0,0);
btnRowDown->SetTrigger(trig1);


// titleTxt = new GuiText("test");

titleTT = new GuiTooltip("test");
titleTT->SetAlignment(ALIGN_LEFT, ALIGN_TOP);
titleTT->SetPosition(-100,0);
titleTT->SetAlpha(THEME.tooltipAlpha);

// if (Settings.wsprompt == yes)
// installBtnTT.SetWidescreen(CFG.widescreen);


//if (count>0){

gameIndex = new int[pagesize];
game = new GuiButton * [pagesize];
bob = new int[pagesize];
coverImg = new GuiImage * [gameCnt];
cover = new GuiImageData * [gameCnt];
//titleTxt = new GuiText * [gameCnt];

for(int i=0; i<pagesize; i++) {
bob=i;
}

char ID[4];
char IDfull[7];
int n = gameCnt>pagesize?gameCnt:Pagesize;
//for(int i=0; i < gameCnt; i++) {
for(int i=0; i < n; i++) {

struct discHdr *header = &gameList;
snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]);
snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);

snprintf(imgPath, sizeof(imgPath), "%s%s.png", Settings.covers_path, IDfull); //Load full id image
cover = new GuiImageData(imgPath,0);
if (!cover->GetImage()) {
delete cover;
snprintf(imgPath, sizeof(imgPath), "%s%s.png", Settings.covers_path, ID); //Load short id image
cover = new GuiImageData(imgPath, 0);
if (!cover->GetImage()) {
delete cover;
snprintf(imgPath, sizeof(imgPath), "%snoimage.png", CFG.theme_path); //Load no image
cover = new GuiImageData(imgPath, nocoverFlat_png);
}
}

coverImg = new GuiImage(cover);
coverImg->SetWidescreen(CFG.widescreen);
if (Settings.gridRows==2)coverImg->SetScale(.6);//these are the numbers for 2 rows
else if (Settings.gridRows==3)coverImg->SetScale(.26);//these are the numbers for 3 rows
else if (Settings.gridRows==4)coverImg->SetScale(.26);//these are the numbers for 4 rows

//titleTxt = new GuiText(get_title(&gameList), 20, (GXColor){0,0,0, 0xff});


}

for(int i=0; i < pagesize; i++) {
game = new GuiButton(160,224);//for 1 row
if (Settings.gridRows==2)game->SetSize(75,133);//these are the numbers for 2 rows
else if (Settings.gridRows==3)game->SetSize(35,68);//these are the numbers for 3 rows
else if (Settings.gridRows==4)game->SetSize(35,68);//these are the numbers for 4 rows
game->SetParent(this);
game->SetAlignment(ALIGN_TOP,ALIGN_LEFT);
game->SetPosition(-200,740);
game->SetImage(coverImg[((listOffset+i) % gameCnt)]);
if (Settings.gridRows==4)coverImg[(listOffset+i) % gameCnt]->SetPosition(0,-80);// only for 4 rows
if (Settings.gridRows==3)coverImg[(listOffset+i) % gameCnt]->SetPosition(0,-80);// only for 3 rows
if (Settings.gridRows==2)coverImg[(listOffset+i) % gameCnt]->SetPosition(0,-50);// only for 2 rows
game->SetRumble(false);
game->SetTrigger(trigA);
game->SetSoundClick(btnSoundClick);
game->SetClickable(true);
game->SetVisible(true);
//coverImg->SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_IN, 50);

}
for (int i=gameCnt-1;i<pagesize;i++){ //hide games if gameCnt is less than the number of onscreen boxes
game->SetVisible(false);
game->SetClickable(false);
game->RemoveSoundOver();}

//if(CFG.widescreen){

rows =Settings.gridRows;
if ((count<42)&&(rows==4))rows=3;
if ((count<33)&&(rows==3))rows=2;
if ((count<16)&&(rows==2))rows=1;
if (gameCnt<6)gameCnt=6;

if (rows==1)pagesize = 6;
else if (rows==2)pagesize = 16;
else if (rows==3)pagesize = 33;
else if (rows==4)pagesize = 42;

Settings.gridRows = rows;
if(isInserted(bootDevice)) {
cfg_save_global();
}

if (rows==1)
{
if(CFG.widescreen){
game[0]->SetPosition(-70,74);
game[1]->SetPosition(88,74);
game[2]->SetPosition(239,74);
game[3]->SetPosition(390,74);
game[4]->SetPosition(550,74);
}else{
game[bob[0]]->SetPosition(-130,74);
game[bob[1]]->SetPosition(60,74);
game[bob[2]]->SetPosition(239,74);
game[bob[3]]->SetPosition(420,74);
game[bob[4]]->SetPosition(612,74);
}
game[0]->SetSkew(-10,-44,10,-26,10,26,-10,44);
game[1]->SetSkew(-6,-22,6,-14,6,14,-6,22);
game[2]->SetSkew(0,-11,0,-11,0,11,0,11);
game[3]->SetSkew(-6,-14,6,-22,6,22,-6,14);
game[4]->SetSkew(-10,-26,10,-44,10,44,-10,26);
}
else if (rows ==2)
{
if(CFG.widescreen){
game[0]->SetPosition(3,50);
game[1]->SetPosition(3,193);
game[2]->SetPosition(97,50);
game[3]->SetPosition(97,193);
game[4]->SetPosition(187,50);
game[5]->SetPosition(187,193);
game[6]->SetPosition(272,50);
game[7]->SetPosition(272,193);
game[8]->SetPosition(358,50);
game[9]->SetPosition(358,193);
game[10]->SetPosition(449,50);
game[11]->SetPosition(449,193);
game[12]->SetPosition(545,50);
game[13]->SetPosition(545,193);
game[14]->SetPosition(700,0);
game[15]->SetPosition(700,0);
}else{
game[0]->SetPosition(-54,50);
game[1]->SetPosition(-54,193);
game[2]->SetPosition(58,50);
game[3]->SetPosition(58,193);
game[4]->SetPosition(166,50);
game[5]->SetPosition(166,193);
game[6]->SetPosition(272,50);
game[7]->SetPosition(272,193);
game[8]->SetPosition(378,50);
game[9]->SetPosition(378,193);
game[10]->SetPosition(487,50);
game[11]->SetPosition(487,193);
game[12]->SetPosition(599,50);
game[13]->SetPosition(599,193);
game[14]->SetPosition(700,0);
game[15]->SetPosition(700,0);
}
game[0]->SetSkew(-4.5,-49,4.5,-27,4.5,0,-4.5,0);
game[1]->SetSkew(-4.5,0,4.5,0,4.5,27,-4.5,49);
game[2]->SetSkew(-4,-22,4,-14,4,0,-4,0);
game[3]->SetSkew(-4,0,4,0,4,14,-4,22);
game[4]->SetSkew(0,-9,0,-5,0,0,0,0);
game[5]->SetSkew(0,0,0,0,0,5,0,9);
game[6]->SetSkew(0,0,0,0,0,0,0,0);
game[7]->SetSkew(0,0,0,0,0,0,0,0);
game[8]->SetSkew(0,-5,0,-9,0,0,0,0);
game[9]->SetSkew(0,0,0,0,0,9,0,5);
game[10]->SetSkew(-4,-14,4,-22,4,0,-4,0);
game[11]->SetSkew(-4,0,4,0,4,22,-4,14);
game[12]->SetSkew(-4.5,-27,4.5,-49,4.5,0,-4.5,0);
game[13]->SetSkew(-4.5,0,4.5,0,4.5,49,-4.5,27);
}

else if (rows==3)
{
if(CFG.widescreen){
game[0]->SetPosition(37,60);
game[1]->SetPosition(37,160);
game[2]->SetPosition(37,260);

game[3]->SetPosition(96,60);
game[4]->SetPosition(96,160);
game[5]->SetPosition(96,260);

game[6]->SetPosition(155,60);
game[7]->SetPosition(155,160);
game[8]->SetPosition(155,260);

game[9]->SetPosition(214,60);
game[10]->SetPosition(214,160);
game[11]->SetPosition(214,260);

game[12]->SetPosition(273,60);
game[13]->SetPosition(273,160);
game[14]->SetPosition(273,260);

game[15]->SetPosition(332,60);
game[16]->SetPosition(332,160);
game[17]->SetPosition(332,260);

game[18]->SetPosition(391,60);
game[19]->SetPosition(391,160);
game[20]->SetPosition(391,260);

game[21]->SetPosition(450,60);
game[22]->SetPosition(450,160);
game[23]->SetPosition(450,260);

game[24]->SetPosition(509,60);
game[25]->SetPosition(509,160);
game[26]->SetPosition(509,260);

game[27]->SetPosition(568,60);
game[28]->SetPosition(568,160);
game[29]->SetPosition(568,260);
}
else{
game[0]->SetPosition(24,60);
game[1]->SetPosition(24,160);
game[2]->SetPosition(24,260);

game[3]->SetPosition(94,60);
game[4]->SetPosition(94,160);
game[5]->SetPosition(94,260);

game[6]->SetPosition(164,60);
game[7]->SetPosition(164,160);
game[8]->SetPosition(164,260);

game[9]->SetPosition(234,60);
game[10]->SetPosition(234,160);
game[11]->SetPosition(234,260);

game[12]->SetPosition(304,60);
game[13]->SetPosition(304,160);
game[14]->SetPosition(304,260);

game[15]->SetPosition(374,60);
game[16]->SetPosition(374,160);
game[17]->SetPosition(374,260);

game[18]->SetPosition(444,60);
game[19]->SetPosition(444,160);
game[20]->SetPosition(444,260);

game[21]->SetPosition(514,60);
game[22]->SetPosition(514,160);
game[23]->SetPosition(514,260);

game[24]->SetPosition(584,60);
game[25]->SetPosition(584,160);
game[26]->SetPosition(584,260);

}
game[0]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[1]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[2]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[3]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[4]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[5]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[6]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[7]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[8]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[9]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[10]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[11]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[12]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[13]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[14]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[15]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[16]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[17]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[18]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[19]->SetSkew(-65,-65,20,-65,20,65,-65,65);//middle
game[20]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[21]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[22]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[23]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[24]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[25]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[26]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[27]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[28]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[29]->SetSkew(-65,-65,20,-65,20,65,-65,65);
}

else if (rows==4)
{
if(CFG.widescreen){
game[0]->SetPosition(13,58);
game[1]->SetPosition(13,153);
game[2]->SetPosition(13,250);

game[3]->SetPosition(68,67);
game[4]->SetPosition(68,153);
game[5]->SetPosition(68,239);

game[6]->SetPosition(120,74);
game[7]->SetPosition(120,153);
game[8]->SetPosition(120,232);

game[9]->SetPosition(170,78);
game[10]->SetPosition(170,153);
game[11]->SetPosition(170,228);

game[12]->SetPosition(214,80);
game[13]->SetPosition(214,153);
game[14]->SetPosition(214,226);

game[15]->SetPosition(258,81);
game[16]->SetPosition(258,153);
game[17]->SetPosition(258,224);

game[18]->SetPosition(302,81);
game[19]->SetPosition(302,153);
game[20]->SetPosition(302,223);

game[21]->SetPosition(346,81);
game[22]->SetPosition(346,153);
game[23]->SetPosition(346,223);

game[24]->SetPosition(390,80);
game[25]->SetPosition(390,153);
game[26]->SetPosition(390,225);

game[27]->SetPosition(434,77);
game[28]->SetPosition(434,153);
game[29]->SetPosition(434,227);

game[30]->SetPosition(484,73);
game[31]->SetPosition(484,153);
game[32]->SetPosition(484,231);

game[33]->SetPosition(537,67);
game[34]->SetPosition(537,153);
game[35]->SetPosition(537,239);

game[36]->SetPosition(591,58);
game[37]->SetPosition(591,153);
game[38]->SetPosition(591,250);
}
else{
game[0]->SetPosition(-29,58);
game[1]->SetPosition(-29,153);
game[2]->SetPosition(-29,250);

game[3]->SetPosition(33,67);
game[4]->SetPosition(33,153);
game[5]->SetPosition(33,239);

game[6]->SetPosition(92,74);
game[7]->SetPosition(92,153);
game[8]->SetPosition(92,232);

game[9]->SetPosition(149,78);
game[10]->SetPosition(149,153);
game[11]->SetPosition(149,228);

game[12]->SetPosition(200,80);
game[13]->SetPosition(200,153);
game[14]->SetPosition(200,226);

game[15]->SetPosition(251,81);
game[16]->SetPosition(251,153);
game[17]->SetPosition(251,224);

game[18]->SetPosition(302,81);
game[19]->SetPosition(302,153);
game[20]->SetPosition(302,223);

game[21]->SetPosition(353,81);
game[22]->SetPosition(353,153);
game[23]->SetPosition(353,223);

game[24]->SetPosition(404,80);
game[25]->SetPosition(404,153);
game[26]->SetPosition(404,225);

game[27]->SetPosition(457,77);
game[28]->SetPosition(457,153);
game[29]->SetPosition(457,227);

game[30]->SetPosition(512,73);
game[31]->SetPosition(512,153);
game[32]->SetPosition(512,231);

game[33]->SetPosition(572,67);
game[34]->SetPosition(572,153);
game[35]->SetPosition(572,239);

game[36]->SetPosition(633,58);
game[37]->SetPosition(633,153);
game[38]->SetPosition(633,250);
}
game[0]->SetSkew(-38,-110,15,-42,15,65,-38,32);
game[1]->SetSkew(-38,-75,15,-48,15,45,-38,72);
game[2]->SetSkew(-38,-52,15,-70,15,27,-38,100);

game[3]->SetSkew(-38,-70,15,-24,15,40,-38,27);
game[4]->SetSkew(-38,-50,15,-35,15,40,-38,50);
game[5]->SetSkew(-38,-34,15,-47,15,24,-38,58);

game[6]->SetSkew(-27,-55,19,-22,19,30,-27,22);
game[7]->SetSkew(-27,-40,19,-30,19,30,-27,40);
game[8]->SetSkew(-27,-20,19,-30,19,20,-27,50);

game[9]->SetSkew(-19,-28,0,-17,0,15,-19,10);
game[10]->SetSkew(-19,-30,0,-20,0,12,-19,30);
game[11]->SetSkew(-19,-15,0,-20,0,10,-19,24);

game[12]->SetSkew(-10,-20,3,-13,3,14,-10,10);
game[13]->SetSkew(-10,-20,3,-18,3,18,-10,20);
game[14]->SetSkew(-10,-10,3,-10,3,0,-10,10);

game[15]->SetSkew(-10,-15,3,-12,3,13,-10,13);
game[16]->SetSkew(-10,-17,3,-10,3,10,-10,17);
game[17]->SetSkew(-10,-10,3,-15,3,10,-10,10);

game[18]->SetSkew(-10,-10,3,-10,3,14,-10,14);
game[19]->SetSkew(-10,-10,3,-10,3,10,-10,10);//middle
game[20]->SetSkew(-10,-10,3,-10,3,10,-10,10);

game[21]->SetSkew(-14,-10,4,-20,3,10,-14,10);
game[22]->SetSkew(-14,-10,4,-17,3,17,-14,10);
game[23]->SetSkew(-14,-10,4,-10,3,10,-14,10);

game[24]->SetSkew(-10,-13,3,-20,3,14,-10,10);
game[25]->SetSkew(-10,-18,3,-20,3,20,-10,18);
game[26]->SetSkew(-10,-10,3,-10,3,20,-10,5);

game[27]->SetSkew(-19,-17,0,-28,0,10,-19,15);
game[28]->SetSkew(-19,-20,0,-30,0,30,-19,12);
game[29]->SetSkew(-19,-20,0,-15,0,30,-19,10);

game[30]->SetSkew(-27,-22,19,-55,19,22,-27,30);
game[31]->SetSkew(-27,-30,19,-40,19,40,-27,30);
game[32]->SetSkew(-27,-30,19,-20,19,55,-27,20);

game[33]->SetSkew(-38,-24,15,-70,15,27,-38,40);
game[34]->SetSkew(-38,-35,15,-50,15,50,-38,40);
game[35]->SetSkew(-38,-47,15,-34,15,58,-38,24);

game[36]->SetSkew(-38,-42,15,-110,15,32,-38,60);
game[37]->SetSkew(-38,-48,15,-75,15,70,-38,45);
game[38]->SetSkew(-38,-70,15,-52,15,100,-38,27);
}




// }
// else
// WindowPrompt("Oops","Your Wii must be in 16:9 mode to see the gamewall.",0, tr("OK"), 0,0);

//}

}


/**
* Destructor for the GuiGameGrid class.
*/
GuiGameGrid::~GuiGameGrid()
{

delete btnRight;
delete btnLeft;
delete btnRowUp;
delete btnRowDown;

delete trigA;
delete trigL;
delete trigR;
delete trigPlus;
delete trigMinus;
delete trig1;
delete trig2;
delete btnSoundClick;
delete btnSoundOver;

for(int i=0; i<pagesize; i++) {
delete game;
}
for(int i=0; i<gameCnt; i++) {
delete coverImg;
delete cover;
}

delete [] gameIndex;
delete [] bob;
delete [] game;
delete [] coverImg;
delete [] cover;
}


void GuiGameGrid::SetFocus(int f)
{
LOCK(this);
focus = f;

for(int i=0; i<pagesize; i++)
game->ResetState();

if(f == 1)
game[bob[selectedItem]]->SetState(STATE_SELECTED);
}


void GuiGameGrid::ResetState()
{
LOCK(this);
if(state != STATE_DISABLED) {
state = STATE_DEFAULT;
stateChan = -1;
}

for(int i=0; i<pagesize; i++) {
game->ResetState();
}
}


int GuiGameGrid::GetOffset()
{
return listOffset;
}


int GuiGameGrid::GetClickedOption()
{
int found = -1;
if (clickedItem>-1){
game[bob[clickedItem]]->SetState(STATE_SELECTED);
found= (clickedItem+listOffset) % gameCnt;
clickedItem=-1;
}
return found;
}


int GuiGameGrid::GetSelectedOption()
{
int found = -1;
for(int i=0; i<pagesize; i++) {
if(game[bob]->GetState() == STATE_SELECTED) {
game[bob]->SetState(STATE_SELECTED);
found = (listOffset+i) % gameCnt;
break;
}
}
return found;
}
/****************************************************************************
* FindMenuItem
*
* Help function to find the next visible menu item on the list
***************************************************************************/

int GuiGameGrid::FindMenuItem(int currentItem, int direction)
{
int nextItem = currentItem + direction;

if(nextItem < 0 || nextItem >= gameCnt)
if(gameCnt <= pagesize)
return -1;
else
nextItem = (nextItem < 0) ? nextItem + gameCnt : nextItem - gameCnt;

if(strlen(get_title(&gameList[nextItem])) > 0)
return nextItem;
else
return FindMenuItem(nextItem, direction);
}


/**
* Draw the button on screen
*/
void GuiGameGrid::Draw()
{
LOCK(this);
if(!this->IsVisible())
return;

if(c>0){

int next = listOffset;

for(int i=0; i<pagesize; i++) {
if(next >= 0) {
game[bob]->Draw();
next = this->FindMenuItem(next, 1);
} else break;
}

if(gameCnt > pagesize) {
btnRight->Draw();
btnLeft->Draw();
}

btnRowUp->Draw();
btnRowDown->Draw();
//debugTxt->Draw();
if ((wait>75)&&(Settings.tooltips == TooltipsOn)&&(drawTTs!=0))
titleTT->Draw();




this->UpdateEffects();
}
}



/**
* Change the number of rows
*/
void GuiGameGrid::ChangeRows(int n)
{

rows=n;
Settings.gridRows = rows;
if(isInserted(bootDevice)) {
cfg_save_global();
}

for(int i=0; i<gameCnt; i++) {
delete coverImg;
// delete cover;
}
for(int i=0; i < gameCnt; i++) {
coverImg = new GuiImage(cover);
coverImg->SetWidescreen(CFG.widescreen);
if (rows==2)coverImg->SetScale(.6);//these are the numbers for 2 rows
else if (rows==3)coverImg->SetScale(.26);//these are the numbers for 3 rows
else if (rows==4)coverImg->SetScale(.26);//these are the numbers for 4 rows

}
//set pagesize
if (n==1)pagesize=6;
else if (n==2)pagesize=16;
else if (n==3)pagesize=33;
else if (n==4)pagesize=42;


firstPic=0;
drawTTs=0;

// create new buttons based on pagesize
for(int i=0; i < pagesize; i++) {
if (n==1)game->SetSize(160,224);//for 1 row
if (n==2)game->SetSize(75,133);//these are the numbers for 2 rows
else if (n==3)game->SetSize(35,68);//these are the numbers for 3 rows
else if (n==4)game->SetSize(35,68);//these are the numbers for 4 rows
game->SetPosition(0,740);//hide unused buttons
game->SetImage(listOffset+i<gameCnt ? coverImg[listOffset+i] : coverImg[listOffset+i-gameCnt]);
if (n==1){listOffset+i<gameCnt ? coverImg[listOffset+i]->SetPosition(0,0):coverImg[listOffset+i-gameCnt]->SetPosition(0,0);}// only for 1 row
if (n==2){listOffset+i<gameCnt ? coverImg[listOffset+i]->SetPosition(0,-50):coverImg[listOffset+i-gameCnt]->SetPosition(0,-50);}// only for 2 row
if (n==3){listOffset+i<gameCnt ? coverImg[listOffset+i]->SetPosition(0,-80):coverImg[listOffset+i-gameCnt]->SetPosition(0,-80);}// only for 3 row
if (n==4){listOffset+i<gameCnt ? coverImg[listOffset+i]->SetPosition(0,-80):coverImg[listOffset+i-gameCnt]->SetPosition(0,-80);}// only for 4 row
bob = i;


}
//if(CFG.widescreen)
//{

if (n==1)
{
if(CFG.widescreen){
game[bob[0]]->SetPosition(-70,74);
game[bob[1]]->SetPosition(88,74);
game[bob[2]]->SetPosition(239,74);
game[bob[3]]->SetPosition(390,74);
game[bob[4]]->SetPosition(550,74);
}
else{
game[bob[0]]->SetPosition(-130,74);
game[bob[1]]->SetPosition(60,74);
game[bob[2]]->SetPosition(239,74);
game[bob[3]]->SetPosition(420,74);
game[bob[4]]->SetPosition(612,74);
}

game[bob[0]]->SetSkew(-10,-44,10,-26,10,26,-10,44);
game[bob[1]]->SetSkew(-6,-22,6,-14,6,14,-6,22);
game[bob[2]]->SetSkew(0,-11,0,-11,0,11,0,11);
game[bob[3]]->SetSkew(-6,-14,6,-22,6,22,-6,14);
game[bob[4]]->SetSkew(-10,-26,10,-44,10,44,-10,26);
}
else if (n == 2)
{
if(CFG.widescreen){
game[bob[0]]->SetPosition(3,50);
game[bob[1]]->SetPosition(3,193);
game[bob[2]]->SetPosition(97,50);
game[bob[3]]->SetPosition(97,193);
game[bob[4]]->SetPosition(187,50);
game[bob[5]]->SetPosition(187,193);
game[bob[6]]->SetPosition(272,50);
game[bob[7]]->SetPosition(272,193);
game[bob[8]]->SetPosition(358,50);
game[bob[9]]->SetPosition(358,193);
game[bob[10]]->SetPosition(449,50);
game[bob[11]]->SetPosition(449,193);
game[bob[12]]->SetPosition(545,50);
game[bob[13]]->SetPosition(545,193);
}
else{
game[bob[0]]->SetPosition(-54,50);
game[bob[1]]->SetPosition(-54,193);
game[bob[2]]->SetPosition(58,50);
game[bob[3]]->SetPosition(58,193);
game[bob[4]]->SetPosition(166,50);
game[bob[5]]->SetPosition(166,193);
game[bob[6]]->SetPosition(272,50);
game[bob[7]]->SetPosition(272,193);
game[bob[8]]->SetPosition(378,50);
game[bob[9]]->SetPosition(378,193);
game[bob[10]]->SetPosition(487,50);
game[bob[11]]->SetPosition(487,193);
game[bob[12]]->SetPosition(599,50);
game[bob[13]]->SetPosition(599,193);
game[bob[14]]->SetPosition(700,0);
game[bob[15]]->SetPosition(700,0);
}
game[bob[0]]->SetSkew(-4.5,-49,4.5,-27,4.5,0,-4.5,0);
game[bob[1]]->SetSkew(-4.5,0,4.5,0,4.5,27,-4.5,49);
game[bob[2]]->SetSkew(-4,-22,4,-14,4,0,-4,0);
game[bob[3]]->SetSkew(-4,0,4,0,4,14,-4,22);
game[bob[4]]->SetSkew(0,-9,0,-5,0,0,0,0);
game[bob[5]]->SetSkew(0,0,0,0,0,5,0,9);
game[bob[6]]->SetSkew(0,0,0,0,0,0,0,0);
game[bob[7]]->SetSkew(0,0,0,0,0,0,0,0);
game[bob[8]]->SetSkew(0,-5,0,-9,0,0,0,0);
game[bob[9]]->SetSkew(0,0,0,0,0,9,0,5);
game[bob[10]]->SetSkew(-4,-14,4,-22,4,0,-4,0);
game[bob[11]]->SetSkew(-4,0,4,0,4,22,-4,14);
game[bob[12]]->SetSkew(-4.5,-27,4.5,-49,4.5,0,-4.5,0);
game[bob[13]]->SetSkew(-4.5,0,4.5,0,4.5,49,-4.5,27);
}
else if (n==3)
{
if(CFG.widescreen){
game[bob[0]]->SetPosition(37,60);
game[bob[1]]->SetPosition(37,160);
game[bob[2]]->SetPosition(37,260);

game[bob[3]]->SetPosition(96,60);
game[bob[4]]->SetPosition(96,160);
game[bob[5]]->SetPosition(96,260);

game[bob[6]]->SetPosition(155,60);
game[bob[7]]->SetPosition(155,160);
game[bob[8]]->SetPosition(155,260);

game[bob[9]]->SetPosition(214,60);
game[bob[10]]->SetPosition(214,160);
game[bob[11]]->SetPosition(214,260);

game[bob[12]]->SetPosition(273,60);
game[bob[13]]->SetPosition(273,160);
game[bob[14]]->SetPosition(273,260);

game[bob[15]]->SetPosition(332,60);
game[bob[16]]->SetPosition(332,160);
game[bob[17]]->SetPosition(332,260);

game[bob[18]]->SetPosition(391,60);
game[bob[19]]->SetPosition(391,160);
game[bob[20]]->SetPosition(391,260);

game[bob[21]]->SetPosition(450,60);
game[bob[22]]->SetPosition(450,160);
game[bob[23]]->SetPosition(450,260);

game[bob[24]]->SetPosition(509,60);
game[bob[25]]->SetPosition(509,160);
game[bob[26]]->SetPosition(509,260);

game[bob[27]]->SetPosition(568,60);
game[bob[28]]->SetPosition(568,160);
game[bob[29]]->SetPosition(568,260);
}
else{
game[bob[0]]->SetPosition(24,60);
game[bob[1]]->SetPosition(24,160);
game[bob[2]]->SetPosition(24,260);

game[bob[3]]->SetPosition(94,60);
game[bob[4]]->SetPosition(94,160);
game[bob[5]]->SetPosition(94,260);

game[bob[6]]->SetPosition(164,60);
game[bob[7]]->SetPosition(164,160);
game[bob[8]]->SetPosition(164,260);

game[bob[9]]->SetPosition(234,60);
game[bob[10]]->SetPosition(234,160);
game[bob[11]]->SetPosition(234,260);

game[bob[12]]->SetPosition(304,60);
game[bob[13]]->SetPosition(304,160);
game[bob[14]]->SetPosition(304,260);

game[bob[15]]->SetPosition(374,60);
game[bob[16]]->SetPosition(374,160);
game[bob[17]]->SetPosition(374,260);

game[bob[18]]->SetPosition(444,60);
game[bob[19]]->SetPosition(444,160);
game[bob[20]]->SetPosition(444,260);

game[bob[21]]->SetPosition(514,60);
game[bob[22]]->SetPosition(514,160);
game[bob[23]]->SetPosition(514,260);

game[bob[24]]->SetPosition(584,60);
game[bob[25]]->SetPosition(584,160);
game[bob[26]]->SetPosition(584,260);

}
game[bob[0]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[1]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[2]]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[bob[3]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[4]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[5]]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[bob[6]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[7]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[8]]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[bob[9]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[10]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[11]]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[bob[12]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[13]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[14]]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[bob[15]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[16]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[17]]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[bob[18]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[19]]->SetSkew(-65,-65,20,-65,20,65,-65,65);//middle
game[bob[20]]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[bob[21]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[22]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[23]]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[bob[24]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[25]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[26]]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[bob[27]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[28]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[bob[29]]->SetSkew(-65,-65,20,-65,20,65,-65,65);
}
else if (n==4)
{
if(CFG.widescreen){
game[bob[0]]->SetPosition(13,58);
game[bob[1]]->SetPosition(13,153);
game[bob[2]]->SetPosition(13,250);

game[bob[3]]->SetPosition(68,67);
game[bob[4]]->SetPosition(68,153);
game[bob[5]]->SetPosition(68,239);

game[bob[6]]->SetPosition(120,74);
game[bob[7]]->SetPosition(120,153);
game[bob[8]]->SetPosition(120,232);

game[bob[9]]->SetPosition(170,78);
game[bob[10]]->SetPosition(170,153);
game[bob[11]]->SetPosition(170,228);

game[bob[12]]->SetPosition(214,80);
game[bob[13]]->SetPosition(214,153);
game[bob[14]]->SetPosition(214,226);

game[bob[15]]->SetPosition(258,81);
game[bob[16]]->SetPosition(258,153);
game[bob[17]]->SetPosition(258,224);

game[bob[18]]->SetPosition(302,81);
game[bob[19]]->SetPosition(302,153);
game[bob[20]]->SetPosition(302,223);

game[bob[21]]->SetPosition(346,81);
game[bob[22]]->SetPosition(346,153);
game[bob[23]]->SetPosition(346,223);

game[bob[24]]->SetPosition(390,80);
game[bob[25]]->SetPosition(390,153);
game[bob[26]]->SetPosition(390,225);

game[bob[27]]->SetPosition(434,77);
game[bob[28]]->SetPosition(434,153);
game[bob[29]]->SetPosition(434,227);

game[bob[30]]->SetPosition(484,73);
game[bob[31]]->SetPosition(484,153);
game[bob[32]]->SetPosition(484,231);

game[bob[33]]->SetPosition(537,67);
game[bob[34]]->SetPosition(537,153);
game[bob[35]]->SetPosition(537,239);

game[bob[36]]->SetPosition(591,58);
game[bob[37]]->SetPosition(591,153);
game[bob[38]]->SetPosition(591,250);
}
else{
game[bob[0]]->SetPosition(-29,58);
game[bob[1]]->SetPosition(-29,153);
game[bob[2]]->SetPosition(-29,250);

game[bob[3]]->SetPosition(33,67);
game[bob[4]]->SetPosition(33,153);
game[bob[5]]->SetPosition(33,239);

game[bob[6]]->SetPosition(92,74);
game[bob[7]]->SetPosition(92,153);
game[bob[8]]->SetPosition(92,232);

game[bob[9]]->SetPosition(149,78);
game[bob[10]]->SetPosition(149,153);
game[bob[11]]->SetPosition(149,228);

game[bob[12]]->SetPosition(200,80);
game[bob[13]]->SetPosition(200,153);
game[bob[14]]->SetPosition(200,226);

game[bob[15]]->SetPosition(251,81);
game[bob[16]]->SetPosition(251,153);//
game[bob[17]]->SetPosition(251,224);

game[bob[18]]->SetPosition(302,81);//
game[bob[19]]->SetPosition(302,153);//
game[bob[20]]->SetPosition(302,223);//

game[bob[21]]->SetPosition(353,81);
game[bob[22]]->SetPosition(353,153);
game[bob[23]]->SetPosition(353,223);

game[bob[24]]->SetPosition(404,80);
game[bob[25]]->SetPosition(404,153);
game[bob[26]]->SetPosition(404,225);

game[bob[27]]->SetPosition(457,77);
game[bob[28]]->SetPosition(457,153);
game[bob[29]]->SetPosition(457,227);

game[bob[30]]->SetPosition(512,73);
game[bob[31]]->SetPosition(512,153);
game[bob[32]]->SetPosition(512,231);

game[bob[33]]->SetPosition(572,67);
game[bob[34]]->SetPosition(572,153);
game[bob[35]]->SetPosition(572,239);

game[bob[36]]->SetPosition(633,58);
game[bob[37]]->SetPosition(633,153);
game[bob[38]]->SetPosition(633,250);
}

game[bob[0]]->SetSkew(-38,-110,15,-42,15,65,-38,32);
game[bob[1]]->SetSkew(-38,-75,15,-48,15,45,-38,72);
game[bob[2]]->SetSkew(-38,-52,15,-70,15,27,-38,100);

game[bob[3]]->SetSkew(-38,-70,15,-24,15,40,-38,27);
game[bob[4]]->SetSkew(-38,-50,15,-35,15,40,-38,50);
game[bob[5]]->SetSkew(-38,-34,15,-47,15,24,-38,58);

game[bob[6]]->SetSkew(-27,-55,19,-22,19,30,-27,22);
game[bob[7]]->SetSkew(-27,-40,19,-30,19,30,-27,40);
game[bob[8]]->SetSkew(-27,-20,19,-30,19,20,-27,50);

game[bob[9]]->SetSkew(-19,-28,0,-17,0,15,-19,10);
game[bob[10]]->SetSkew(-19,-30,0,-20,0,12,-19,30);
game[bob[11]]->SetSkew(-19,-15,0,-20,0,10,-19,24);

game[bob[12]]->SetSkew(-10,-20,3,-13,3,14,-10,10);
game[bob[13]]->SetSkew(-10,-20,3,-18,3,18,-10,20);
game[bob[14]]->SetSkew(-10,-10,3,-10,3,0,-10,10);

game[bob[15]]->SetSkew(-10,-15,3,-12,3,13,-10,13);
game[bob[16]]->SetSkew(-10,-17,3,-10,3,10,-10,17);
game[bob[17]]->SetSkew(-10,-10,3,-15,3,10,-10,10);

game[bob[18]]->SetSkew(-10,-10,3,-10,3,14,-10,14);
game[bob[19]]->SetSkew(-10,-10,3,-10,3,10,-10,10);//middle
game[bob[20]]->SetSkew(-10,-10,3,-10,3,10,-10,10);

game[bob[21]]->SetSkew(-14,-10,4,-20,3,10,-14,10);
game[bob[22]]->SetSkew(-14,-10,4,-17,3,17,-14,10);
game[bob[23]]->SetSkew(-14,-10,4,-10,3,10,-14,10);

game[bob[24]]->SetSkew(-10,-13,3,-20,3,14,-10,10);
game[bob[25]]->SetSkew(-10,-18,3,-20,3,20,-10,18);
game[bob[26]]->SetSkew(-10,-10,3,-10,3,20,-10,5);

game[bob[27]]->SetSkew(-19,-17,0,-28,0,10,-19,15);
game[bob[28]]->SetSkew(-19,-20,0,-30,0,30,-19,12);
game[bob[29]]->SetSkew(-19,-20,0,-15,0,30,-19,10);

game[bob[30]]->SetSkew(-27,-22,19,-55,19,22,-27,30);
game[bob[31]]->SetSkew(-27,-30,19,-40,19,40,-27,30);
game[bob[32]]->SetSkew(-27,-30,19,-20,19,55,-27,20);

game[bob[33]]->SetSkew(-38,-24,15,-70,15,27,-38,40);
game[bob[34]]->SetSkew(-38,-35,15,-50,15,50,-38,40);
game[bob[35]]->SetSkew(-38,-47,15,-34,15,58,-38,24);

game[bob[36]]->SetSkew(-38,-42,15,-110,15,32,-38,60);
game[bob[37]]->SetSkew(-38,-48,15,-75,15,70,-38,45);
game[bob[38]]->SetSkew(-38,-70,15,-52,15,100,-38,27);
}

//}
}


void GuiGameGrid::Update(GuiTrigger * t)
{
LOCK(this);
if(state == STATE_DISABLED || !t)
return;

if(!(game[0]->GetEffect() || game[0]->GetEffectOnOver())) {
for(int i=0; i<pagesize; i++) {
game->SetEffectGrow();
}
}
//if (realCnt!=0)goRight=(12*(pagesize-realCnt)/2);
// for debugging
//snprintf(debugbuffer, sizeof(debugbuffer), "count: %i listOffset: %i", count,listOffset);
//debugTxt->SetText(debugbuffer);
//debugTxt->Draw();

btnRight->Update(t);
btnLeft->Update(t);
btnRowUp->Update(t);
btnRowDown->Update(t);

int next = listOffset;


for(int i=0; i<pagesize; i++) {
if(next >= 0) {
if(game[bob]->GetState() == STATE_DISABLED) {
game[bob]->SetVisible(true);
game[bob]->SetState(STATE_DEFAULT);
}
gameIndex = next;
next = this->FindMenuItem(next, 1);
} else {
game[bob]->SetVisible(false);
game[bob]->SetState(STATE_DISABLED);
}

if(focus) {
if(i != selectedItem && game[bob]->GetState() == STATE_SELECTED)
game[bob]->ResetState();
else if(i == selectedItem && game[bob]->GetState() == STATE_DEFAULT);
game[bob[selectedItem]]->SetState(STATE_SELECTED, t->chan);
}
game[bob]->Update(t);

if(game[bob]->GetState() == STATE_SELECTED) {
selectedItem = i;
}
if(game[bob]->GetState() == STATE_CLICKED) {
clickedItem = i;
}

}

this->SetPosition(this->GetLeft()+mover2,this->GetTop());
if (goback==1)mover2= (mover2<0? mover2+1:mover2-1);
if (mover2==0)goback=0;

/*u16 buttons = ButtonsHold();
if(buttons & WPAD_BUTTON_B) {
int x = t->wpad.ir.x;
int center = this->GetWidth()/2;
if (x<center)goLeft=12;
else if (x>center)goRight=12;
usleep(x<center? x*250:((center*2 - x)*250));
for(int i=0; i<pagesize; i++) {game->Draw();}
//return;
}*/


// navigation
if(!focus || gameCnt < pagesize || (c==0)||(game[bob[0]]->GetEffect() && game[bob[pagesize-1]]->GetEffect()))
return; // skip navigation

if (btnLeft->GetState() == STATE_CLICKED) {
WPAD_ScanPads();
u16 buttons = 0;
for(int i=0; i<4; i++)
buttons |= WPAD_ButtonsHeld(i);
if(!((buttons & WPAD_BUTTON_A) || (buttons & WPAD_BUTTON_MINUS) || t->Left())) {
btnLeft->ResetState();
speed = SHIFT_SPEED;
return;
}

if (Settings.xflip==sysmenu ||Settings.xflip==yes)
goRight=12;
else
goLeft=12;
wait=0;wait1=0;


}
if (goLeft>0){

for (int i=1; i<rows+1; i++){
game[bob[pagesize-i]]->SetImage(coverImg[(listOffset + pagesize-i) % gameCnt]);
if (rows==1)coverImg[(listOffset+i) % gameCnt]->SetPosition(0,0);// only for 1 row
if (rows==4)coverImg[(listOffset + pagesize-i) % gameCnt]->SetPosition(0,-80);// only for 4 rows
if (rows==3)coverImg[(listOffset + pagesize-i) % gameCnt]->SetPosition(0,-80);// only for 3 rows
if (rows==2)coverImg[(listOffset + pagesize-i) % gameCnt]->SetPosition(0,-50);// only for 2 rows

}
if (mover<11){

if (rows==1){
if(CFG.widescreen)
{
game[bob[0]]->SetPosition(-70-(mover * 16),74);
game[bob[1]]->SetPosition(88-(mover * 15.8),74);
game[bob[2]]->SetPosition(239-(mover * 15.1),74);
game[bob[3]]->SetPosition(390-(mover * 15.1),74);
game[bob[4]]->SetPosition(550-(mover * 16),74);
game[bob[5]]->SetPosition(710-(mover * 16),74);
}else{
game[bob[0]]->SetPosition(-130-(mover * 19),74);
game[bob[1]]->SetPosition(60-(mover * 19),74);
game[bob[2]]->SetPosition(239-(mover * 17.9),74);
game[bob[3]]->SetPosition(420-(mover * 18.1),74);
game[bob[4]]->SetPosition(612-(mover * 19.2),74);
game[bob[5]]->SetPosition(772-(mover * 16),74);
}



//if (mover>5)game[bob[0]]->SetSkew(-10,-26,10,-44,10,44,-10,26);
//SetSkew(-10(mover * ),-44(mover * ),10(mover * ),-26(mover * ),
// 10(mover * ),26(mover * ),-10(mover * ),44(mover * ));

game[bob[1]]->SetSkew(-6-(mover * .4),-22-(mover * 2.2),6+(mover * .4),-14-(mover * 1.2),
6+(mover * .4),14+(mover * 1.2),-6-(mover * .4),22+(mover * 2.2));

game[bob[2]]->SetSkew(0-(mover * .6),-11-(mover * 1.1),0+(mover * .6),-11-(mover * .3)
,0+(mover * .6),11+(mover * .3),0-(mover * .6),11+(mover * 1.1));

game[bob[3]]->SetSkew(-6+(mover * .6),-14+(mover * .3),6-(mover * .6),-22+(mover * 1.1),
6-(mover * .6),22-(mover * 1.1),-6+(mover * .6),14-(mover * .3));

game[bob[4]]->SetSkew(-10+(mover * .4),-26+(mover * 1.2),10-(mover * .4),-44+(mover * 2.2),
10-(mover * .4),44-(mover * 2.2),-10+(mover * .4),26-(mover * 1.2));

game[bob[5]]->SetSkew(-14+(mover * .4),-34+(mover * 1.2),14-(mover * .4),-66+(mover * 2.2),
14-(mover * .4),66-(mover * 2.2),-14+(mover * .4),34-(mover * 1.2));
}
else if (rows ==2)
{
if(CFG.widescreen)
{

game[bob[0]]->SetPosition(3-(mover * 9.4),50);
game[bob[1]]->SetPosition(3-(mover * 9.4),193);
game[bob[2]]->SetPosition(97-(mover * 9.4),50);
game[bob[3]]->SetPosition(97-(mover * 9.4),193);
game[bob[4]]->SetPosition(187-(mover * 9),50);
game[bob[5]]->SetPosition(187-(mover * 9),193);
game[bob[6]]->SetPosition(272-(mover * 8.5),50);
game[bob[7]]->SetPosition(272-(mover * 8.5),193);
game[bob[8]]->SetPosition(358-(mover * 8.5),50);
game[bob[9]]->SetPosition(358-(mover * 8.5),193);
game[bob[10]]->SetPosition(449-(mover * 9),50);
game[bob[11]]->SetPosition(449-(mover * 9),193);
game[bob[12]]->SetPosition(545-(mover * 9.6),50);
game[bob[13]]->SetPosition(545-(mover * 9.6),193);
game[bob[14]]->SetPosition(641-(mover * 9.6),50);
game[bob[15]]->SetPosition(641-(mover * 9.6),193);
}else{
game[bob[0]]->SetPosition(-54-(mover * 11.2),50);
game[bob[1]]->SetPosition(-54-(mover * 11.2),193);
game[bob[2]]->SetPosition(58-(mover * 11.2),50);
game[bob[3]]->SetPosition(58-(mover * 11.2),193);
game[bob[4]]->SetPosition(166-(mover * 10.8),50);
game[bob[5]]->SetPosition(166-(mover * 10.8),193);
game[bob[6]]->SetPosition(272-(mover * 10.6),50);
game[bob[7]]->SetPosition(272-(mover * 10.6),193);
game[bob[8]]->SetPosition(378-(mover * 10.6),50);
game[bob[9]]->SetPosition(378-(mover * 10.6),193);
game[bob[10]]->SetPosition(487-(mover * 10.9),50);
game[bob[11]]->SetPosition(487-(mover * 10.9),193);
game[bob[12]]->SetPosition(599-(mover * 11.2),50);
game[bob[13]]->SetPosition(599-(mover * 11.2),193);
game[bob[14]]->SetPosition(700-(mover * 10.1),50);
game[bob[15]]->SetPosition(700-(mover * 10.1),193);
}

game[bob[2]]->SetSkew(-4-(mover * .05),-22-(mover * 2.7),4+(mover * .05),-14-(mover * 1.3),
4+(mover * .05),0,-4-(mover * .05),0);

game[bob[3]]->SetSkew(-4-(mover * .05),0,4+(mover * .05),0,
4+(mover * .05),14+(mover * 1.3),-4-(mover * .05),22+(mover * 2.7));

game[bob[4]]->SetSkew(0-(mover * .4),-9-(mover * 1.3),0+(mover * .4),-5-(mover * .9),
0+(mover * .4),0,0-(mover * .4),0);

game[bob[5]]->SetSkew(0-(mover * .4),0,0+(mover * .4),0,
0+(mover *.4),5+(mover * .9),0-(mover * .4),9+(mover * 1.3));

game[bob[6]]->SetSkew(0,0-(mover * .9),0,0-(mover * .5),
0,0,0,0);

game[bob[7]]->SetSkew(0,0,0,0,
0,0+(mover * .5),0,0+(mover * .9));

game[bob[8]]->SetSkew(0,-5+(mover * .5),0,-9+(mover * .9),
0,0,0,0);

game[bob[9]]->SetSkew(0,0,0,0,
0,9-(mover * .9),0,5-(mover * .5));

game[bob[10]]->SetSkew(-4+(mover * .4),-14+(mover * .9),4-(mover * .4),-22+(mover *1.3),
4-(mover * .4),0,-4+(mover * .4),0);

game[bob[11]]->SetSkew(-4+(mover * .4),0,4-(mover * .4),0,
4-(mover * .4),22-(mover * 1.3),-4+(mover * .4),14-(mover * .9));

game[bob[12]]->SetSkew(-4.5+(mover *.05),-27+(mover *1.3),4.5-(mover *.05),-49+(mover *2.7),
4.5-(mover *.05),0,-4.5+(mover *.05),0);

game[bob[13]]->SetSkew(-4.5+(mover *.05),0,4.5-(mover *.05),0,4.5-(mover *.05),
49-(mover *2.7),-4.5+(mover *.05),27-(mover *1.3));

game[bob[14]]->SetSkew(-4.5,-27,4.5,-49,4.5,0,-4.5,0);
game[bob[15]]->SetSkew(-4.5,0,4.5,0,4.5,49,-4.5,27);
}
else if (rows==3)
{
if (CFG.widescreen){
game[bob[0]]->SetPosition(37-(mover * 16),60);
game[bob[1]]->SetPosition(37-(mover * 16),160);
game[bob[2]]->SetPosition(37-(mover * 16),260);

game[bob[3]]->SetPosition(96-(mover * 6),60);
game[bob[4]]->SetPosition(96-(mover * 6),160);
game[bob[5]]->SetPosition(96-(mover * 6),260);

game[bob[6]]->SetPosition(155-(mover * 6),60);
game[bob[7]]->SetPosition(155-(mover * 6),160);
game[bob[8]]->SetPosition(155-(mover * 6),260);

game[bob[9]]->SetPosition(214-(mover * 6),60);
game[bob[10]]->SetPosition(214-(mover * 6),160);
game[bob[11]]->SetPosition(214-(mover * 6),260);

game[bob[12]]->SetPosition(273-(mover * 6),60);
game[bob[13]]->SetPosition(273-(mover * 6),160);
game[bob[14]]->SetPosition(273-(mover * 6),260);

game[bob[15]]->SetPosition(332-(mover * 6),60);
game[bob[16]]->SetPosition(332-(mover * 6),160);//
game[bob[17]]->SetPosition(332-(mover * 6),260);

game[bob[18]]->SetPosition(391-(mover * 6),60);//
game[bob[19]]->SetPosition(391-(mover * 6),160);//
game[bob[20]]->SetPosition(391-(mover * 6),260);//

game[bob[21]]->SetPosition(450-(mover * 6),60);
game[bob[22]]->SetPosition(450-(mover * 6),160);
game[bob[23]]->SetPosition(450-(mover * 6),260);

game[bob[24]]->SetPosition(509-(mover * 6),60);
game[bob[25]]->SetPosition(509-(mover * 6),160);
game[bob[26]]->SetPosition(509-(mover * 6),260);

game[bob[27]]->SetPosition(568-(mover * 6),60);
game[bob[28]]->SetPosition(568-(mover * 6),160);
game[bob[29]]->SetPosition(568-(mover * 6),260);

game[bob[30]]->SetPosition(627-(mover * 6),60);
game[bob[31]]->SetPosition(627-(mover * 6),160);
game[bob[32]]->SetPosition(627-(mover * 6),260);
}
else{
game[bob[0]]->SetPosition(24-(mover * 17),60);
game[bob[1]]->SetPosition(24-(mover * 17),160);
game[bob[2]]->SetPosition(24-(mover * 17),260);

game[bob[3]]->SetPosition(94-(mover * 7),60);
game[bob[4]]->SetPosition(94-(mover * 7),160);
game[bob[5]]->SetPosition(94-(mover * 7),260);

game[bob[6]]->SetPosition(164-(mover * 7),60);
game[bob[7]]->SetPosition(164-(mover * 7),160);
game[bob[8]]->SetPosition(164-(mover * 7),260);

game[bob[9]]->SetPosition(234-(mover * 7),60);
game[bob[10]]->SetPosition(234-(mover * 7),160);
game[bob[11]]->SetPosition(234-(mover * 7),260);

game[bob[12]]->SetPosition(304-(mover * 7),60);
game[bob[13]]->SetPosition(304-(mover * 7),160);
game[bob[14]]->SetPosition(304-(mover * 7),260);

game[bob[15]]->SetPosition(374-(mover * 7),60);
game[bob[16]]->SetPosition(374-(mover * 7),160);//
game[bob[17]]->SetPosition(374-(mover * 7),260);

game[bob[18]]->SetPosition(444-(mover * 7),60);//
game[bob[19]]->SetPosition(444-(mover * 7),160);//
game[bob[20]]->SetPosition(444-(mover * 7),260);//

game[bob[21]]->SetPosition(514-(mover * 7),60);
game[bob[22]]->SetPosition(514-(mover * 7),160);
game[bob[23]]->SetPosition(514-(mover * 7),260);

game[bob[24]]->SetPosition(584-(mover * 7),60);
game[bob[25]]->SetPosition(584-(mover * 7),160);
game[bob[26]]->SetPosition(584-(mover * 7),260);

game[bob[27]]->SetPosition(654-(mover * 7),60);
game[bob[28]]->SetPosition(654-(mover * 7),160);
game[bob[29]]->SetPosition(654-(mover * 7),260);
}

//game[bob[0]]->SetSkew(-38,-110,15,-42,15,65,-38,32);
//game[bob[1]]->SetSkew(-38,-75,15,-48,15,45,-38,72);
//game[bob[2]]->SetSkew(-38,-52,15,-70,15,27,-38,100);

game[bob[3]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[4]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[5]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[6]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[7]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[8]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[9]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[10]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[11]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[12]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[13]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[14]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[15]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[16]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[17]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[18]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[19]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[20]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[21]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[22]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[23]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[24]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[25]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[26]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[27]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[28]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[29]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[30]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[31]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[32]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
}
else if (rows==4)
{
if (CFG.widescreen){
game[bob[0]]->SetPosition(13-(mover * 5.5),58-(mover * .9));
game[bob[1]]->SetPosition(13-(mover * 5.5),153);
game[bob[2]]->SetPosition(13-(mover * 5.5),250+(mover * 1.1));

game[bob[3]]->SetPosition(68-(mover * 5.5),67-(mover * .9));
game[bob[4]]->SetPosition(68-(mover * 5.5),153);
game[bob[5]]->SetPosition(68-(mover * 5.5),239+(mover * 1.1));

game[bob[6]]->SetPosition(120-(mover * 5.2),74-(mover * .7));
game[bob[7]]->SetPosition(120-(mover * 5.2),153);
game[bob[8]]->SetPosition(120-(mover * 5.2),232+(mover * .7));

game[bob[9]]->SetPosition(170-(mover * 5),78-(mover * .4));
game[bob[10]]->SetPosition(170-(mover * 5),153);
game[bob[11]]->SetPosition(170-(mover * 5),228+(mover * .4));

game[bob[12]]->SetPosition(214-(mover * 4.4),80-(mover * .2));
game[bob[13]]->SetPosition(214-(mover * 4.4),153);
game[bob[14]]->SetPosition(214-(mover * 4.4),226+(mover * .2));

game[bob[15]]->SetPosition(258-(mover * 4.4),81-(mover * .1));
game[bob[16]]->SetPosition(258-(mover * 4.4),153);
game[bob[17]]->SetPosition(258-(mover * 4.4),224+(mover * .2));

game[bob[18]]->SetPosition(302-(mover * 4.4),81);
game[bob[19]]->SetPosition(302-(mover * 4.4),153);
game[bob[20]]->SetPosition(302-(mover * 4.4),223+(mover * .1));

game[bob[21]]->SetPosition(346-(mover * 4.4),81);
game[bob[22]]->SetPosition(346-(mover * 4.4),153);
game[bob[23]]->SetPosition(346-(mover * 4.4),223);

game[bob[24]]->SetPosition(390-(mover * 4.4),80+(mover * .1));
game[bob[25]]->SetPosition(390-(mover * 4.4),153);
game[bob[26]]->SetPosition(390-(mover * 4.4),225-(mover * .2));

game[bob[27]]->SetPosition(434-(mover * 4.4),77+(mover * .3));
game[bob[28]]->SetPosition(434-(mover * 4.4),153);
game[bob[29]]->SetPosition(434-(mover * 4.4),227-(mover * .2));

game[bob[30]]->SetPosition(484-(mover * 5),73+(mover * .4));
game[bob[31]]->SetPosition(484-(mover * 5),153);
game[bob[32]]->SetPosition(484-(mover * 5),231-(mover * .4));

game[bob[33]]->SetPosition(537-(mover * 5.3),67+(mover * .6));
game[bob[34]]->SetPosition(537-(mover * 5.3),153);
game[bob[35]]->SetPosition(537-(mover * 5.3),239-(mover * .8));

game[bob[36]]->SetPosition(591-(mover * 5.4),58+(mover * .9));
game[bob[37]]->SetPosition(591-(mover * 5.4),153);
game[bob[38]]->SetPosition(591-(mover * 5.4),250-(mover * 1.1));

game[bob[39]]->SetPosition(645-(mover * 5.4),58);
game[bob[40]]->SetPosition(645-(mover * 5.4),153);
game[bob[41]]->SetPosition(645-(mover * 5.4),250);
}
else{
game[bob[0]]->SetPosition(-29-(mover * 6.2),58-(mover * .9));
game[bob[1]]->SetPosition(-29-(mover * 6.2),153);
game[bob[2]]->SetPosition(-29-(mover * 6.2),250+(mover * 1.1));

game[bob[3]]->SetPosition(33-(mover * 6.2),67-(mover * .9));
game[bob[4]]->SetPosition(33-(mover * 6.2),153);
game[bob[5]]->SetPosition(33-(mover * 6.2),239+(mover * 1.1));

game[bob[6]]->SetPosition(92-(mover * 5.9),74-(mover * .7));
game[bob[7]]->SetPosition(92-(mover * 5.9),153);
game[bob[8]]->SetPosition(92-(mover * 5.9),232+(mover * .7));

game[bob[9]]->SetPosition(149-(mover * 5.7),78-(mover * .4));
game[bob[10]]->SetPosition(149-(mover * 5.7),153);
game[bob[11]]->SetPosition(149-(mover * 5.7),228+(mover * .4));

game[bob[12]]->SetPosition(200-(mover * 5.1),80-(mover * .2));
game[bob[13]]->SetPosition(200-(mover * 5.1),153);
game[bob[14]]->SetPosition(200-(mover * 5.1),226+(mover * .2));

game[bob[15]]->SetPosition(251-(mover * 5.1),81-(mover * .1));
game[bob[16]]->SetPosition(251-(mover * 5.1),153);//
game[bob[17]]->SetPosition(251-(mover * 5.1),224+(mover * .2));

game[bob[18]]->SetPosition(302-(mover * 5.1),81);//
game[bob[19]]->SetPosition(302-(mover * 5.1),153);//
game[bob[20]]->SetPosition(302-(mover * 5.1),223+(mover * .1));//

game[bob[21]]->SetPosition(353-(mover * 5.1),81);
game[bob[22]]->SetPosition(353-(mover * 5.1),153);
game[bob[23]]->SetPosition(353-(mover * 5.1),223);

game[bob[24]]->SetPosition(404-(mover * 5.1),80+(mover * .1));
game[bob[25]]->SetPosition(404-(mover * 5.1),153);
game[bob[26]]->SetPosition(404-(mover * 5.1),225-(mover * .2));

game[bob[27]]->SetPosition(457-(mover * 5.3),77+(mover * .3));
game[bob[28]]->SetPosition(457-(mover * 5.3),153);
game[bob[29]]->SetPosition(457-(mover * 5.3),227-(mover * .2));

game[bob[30]]->SetPosition(512-(mover * 5.5),73+(mover * .4));
game[bob[31]]->SetPosition(512-(mover * 5.5),153);
game[bob[32]]->SetPosition(512-(mover * 5.5),231-(mover * .4));

game[bob[33]]->SetPosition(572-(mover * 6),67+(mover * .6));
game[bob[34]]->SetPosition(572-(mover * 6),153);
game[bob[35]]->SetPosition(572-(mover * 6),239-(mover * .8));

game[bob[36]]->SetPosition(633-(mover * 6.1),58+(mover * .9));
game[bob[37]]->SetPosition(633-(mover * 6.1),153);
game[bob[38]]->SetPosition(633-(mover * 6.1),250-(mover * 1.1));

game[bob[39]]->SetPosition(687-(mover * 5.4),58);
game[bob[40]]->SetPosition(687-(mover * 5.4),153);
game[bob[41]]->SetPosition(687-(mover * 5.4),250);
}

//game[bob[0]]->SetSkew(-38,-110,15,-42,15,65,-38,32);
//game[bob[1]]->SetSkew(-38,-75,15,-48,15,45,-38,72);
//game[bob[2]]->SetSkew(-38,-52,15,-70,15,27,-38,100);

game[bob[3]]->SetSkew(-38,-70-(mover * 4),15,-24-(mover * 1.8),15,40+(mover * 1.5),-38,27+(mover * .5));
game[bob[4]]->SetSkew(-38,-50-(mover * 2.5),15,-35-(mover * .7),15,40-(mover * .5),-38,50+(mover * 1.2));
game[bob[5]]->SetSkew(-38,-34-(mover * 1.8),15,-47-(mover * 2.3),15,24+(mover * .3),-38,58+(mover * 4.2));

game[bob[6]]->SetSkew(-27-(mover * 1.1),-55-(mover * 1.5),19-(mover * .4),-22-(mover * .2),19-(mover * .4),30+(mover * 1),-27-(mover * 1.1),22+(mover * .5));
game[bob[7]]->SetSkew(-27-(mover * 1.1),-40-(mover * 1),19-(mover * .4),-30-(mover * .5),19-(mover * .4),30-(mover * 1),-27-(mover * 1.1),40+(mover * 1));
game[bob[8]]->SetSkew(-27-(mover * 1.1),-20-(mover * 1.4),19-(mover * .4),-30-(mover * 1.7),19-(mover * .4),20+(mover * .4),-27-(mover * 1.1),50+(mover * .8));

game[bob[9]]->SetSkew(-19-(mover * .8),-28-(mover * 1.7),0+(mover * 1.9),-17-(mover * .5),0+(mover * 1.9),15+(mover * 1.5),-19-(mover * .8),10+(mover * 1.2));
game[bob[10]]->SetSkew(-19-(mover * .8),-30-(mover * 1),0+(mover * 1.9),-20-(mover * 1),0+(mover * 1.9),12+(mover * 1.8),-19-(mover * .8),30+(mover * 1));
game[bob[11]]->SetSkew(-19-(mover * .8),-15-(mover * .5),0+(mover * 1.9),-20-(mover * 1),0+(mover * 1.9),10+(mover * 1),-19-(mover * .8),24+(mover * 2.2));

game[bob[12]]->SetSkew(-10-(mover * .9),-20-(mover * .8),3-(mover * .3),-13-(mover * .4),3-(mover * .3),14+(mover * .1),-10-(mover * .9),10);
game[bob[13]]->SetSkew(-10-(mover * .9),-20-(mover * 1),3-(mover * .3),-18-(mover * .2),3-(mover * .3),18-(mover * .1),-10-(mover * .9),20+(mover * 1));
game[bob[14]]->SetSkew(-10-(mover * .9),-10-(mover * .5),3-(mover * .3),-10-(mover * 1),3-(mover * .3),0+(mover * 1),-10-(mover * .9),10+(mover * 1.4));

game[bob[15]]->SetSkew(-10,-15-(mover * .5),3,-12-(mover * .1),3,13+(mover * .1),-10,13-(mover * .3));
game[bob[16]]->SetSkew(-10,-17-(mover * .3),3,-10-(mover * .8),3,10+(mover * .8),-10,17+(mover * .3));
game[bob[17]]->SetSkew(-10,-10,3,-15+(mover * .5),3,10-(mover * 1),-10,10);

game[bob[18]]->SetSkew(-10,-10-(mover * .5),3,-10-(mover * .2),3,14-(mover * .1),-10,14-(mover * .1));
game[bob[19]]->SetSkew(-10,-10-(mover * .7),3,-10,3,10,-10,10+(mover * .7));//middle
game[bob[20]]->SetSkew(-10,-10,3,-10-(mover * .5),3,10,-10,10);

game[bob[21]]->SetSkew(-14,-10,4-(mover * .1),-20+(mover * 1),3,10+(mover * .4),-14,10);
game[bob[22]]->SetSkew(-14,-10,4-(mover * .1),-17+(mover * .7),3,17-(mover * .7),-14,10);
game[bob[23]]->SetSkew(-14,-10,4-(mover * .1),-10,3,10,-14+(mover * .4),10);

game[bob[24]]->SetSkew(-10-(mover * .4),-13-(mover * .3),3+(mover * .1),-20,3,14-(mover * .4),-10-(mover * .4),10);
game[bob[25]]->SetSkew(-10-(mover * .4),-18-(mover * .8),3+(mover * .1),-20+(mover * .3),3,20-(mover * .3),-10-(mover * .4),18-(mover * .8));
game[bob[26]]->SetSkew(-10-(mover * .4),-10,3+(mover * .1),-10,3,20-(mover * 1),-10-(mover * .4),5+(mover * .5));

game[bob[27]]->SetSkew(-19+(mover * .9),-17+(mover * .4),0+(mover * .3),-28+(mover * .8),0+(mover * .3),10+(mover * .4),-19+(mover * .9),15-(mover * .5));
game[bob[28]]->SetSkew(-19+(mover * .9),-20+(mover * .2),0+(mover * .3),-30+(mover * 1),0+(mover * .3),20-(mover * 1),-19+(mover * .9),12+(mover * .6));
game[bob[29]]->SetSkew(-19+(mover * .9),-20+(mover * 1),0+(mover * .3),-15+(mover * .5),0+(mover * .3),30-(mover * 1),-19+(mover * .9),10);

game[bob[30]]->SetSkew(-27+(mover * .8),-22+(mover * .5),19-(mover * .9),-55+(mover * 1.7),19-(mover * .9),22-(mover * 1.2),-27+(mover * .8),30-(mover * 1.5));
game[bob[31]]->SetSkew(-27+(mover * .8),-30+(mover * 1),19-(mover * .9),-40+(mover * 1),19-(mover * .9),40-(mover * 2),-27+(mover * .8),30-(mover * 1.8));
game[bob[32]]->SetSkew(-27+(mover * .8),-30+(mover * 1),19-(mover * .9),-20+(mover * .5),19-(mover * .9),55-(mover * 1.5),-27+(mover * .8),20-(mover * 1));

game[bob[33]]->SetSkew(-38+(mover * 1.1),-24+(mover * .2),15+(mover * .4),-70+(mover * 1.5),15+(mover * .4),27-(mover * .5),-38+(mover * 1.1),40-(mover * 1));
game[bob[34]]->SetSkew(-38+(mover * 1.1),-35+(mover * .5),15+(mover * .4),-50+(mover * 1),15+(mover * .4),50-(mover * 1),-38+(mover * 1.1),40-(mover * 1));
game[bob[35]]->SetSkew(-38+(mover * 1.1),-47+(mover * 1.7),15+(mover * .4),-34+(mover * 1.4),15+(mover * .4),58-(mover * .3),-38+(mover * 1.1),24-(mover * .4));

game[bob[36]]->SetSkew(-38,-42+(mover * 1.8),15,-110+(mover * 4),15,32-(mover * .5),-38,60-(mover * 2));
game[bob[37]]->SetSkew(-38,-48+(mover * 1.3),15,-75+(mover * 2.5),15,70-(mover * 2),-38,45-(mover * .5));
game[bob[38]]->SetSkew(-38,-70+(mover * 2.3),15,-52+(mover * 1.8),15,100-(mover * 4.2),-38,27-(mover * .3));

game[bob[39]]->SetSkew(-38,-42,15,-110,15,32,-38,60);
game[bob[40]]->SetSkew(-38,-48,15,-75,15,65,-38,45);
game[bob[41]]->SetSkew(-38,-70,15,-52,15,100,-38,27);
}


mover++;
goLeft--;

}
else {goLeft=0;mover=0;
listOffset = (listOffset+rows < gameCnt) ? listOffset+rows : ((listOffset+rows) - gameCnt);
firstPic = (firstPic+rows < pagesize) ? firstPic+rows : 0;

for (int i=0; i<pagesize; i++) {
bob = (firstPic+i)%pagesize;
}

}
}

else if(btnRight->GetState() == STATE_CLICKED) {
WPAD_ScanPads();
u16 buttons = 0;
for(int i=0; i<4; i++)
buttons |= WPAD_ButtonsHeld(i);
if(!((buttons & WPAD_BUTTON_A) || (buttons & WPAD_BUTTON_PLUS) || t->Right()|| t->Left()|| (buttons & WPAD_BUTTON_MINUS))) {
btnRight->ResetState();
speed=SHIFT_SPEED;
return;
}
if (Settings.xflip==sysmenu ||Settings.xflip==yes)
goLeft=12;
else
goRight=12;
wait=0;wait1=0;




}
if (goRight>0){
if (mover<11){



for (int i=1; i<(rows+1); i++){
int tmp = listOffset-i;

if (tmp<0)tmp=(gameCnt-i);

game[bob[pagesize-(i)]]->SetImage(coverImg[tmp]);

if (rows==1)coverImg[tmp]->SetPosition(0,0);// only for 1 row
if (rows==4)coverImg[tmp]->SetPosition(0,-80);// only for 4 rows
if (rows==3)coverImg[tmp]->SetPosition(0,-80);// only for 3 rows
if (rows==2)coverImg[tmp]->SetPosition(0,-50);// only for 2 rows
}
if (rows==1){
if(CFG.widescreen)
{
game[bob[0]]->SetPosition(-70+(mover * 15.8),74);
game[bob[1]]->SetPosition(88+(mover * 15.1),74);
game[bob[2]]->SetPosition(239+(mover * 15.1),74);
game[bob[3]]->SetPosition(390+(mover * 16),74);
game[bob[4]]->SetPosition(550+(mover * 16),74);
game[bob[5]]->SetPosition(-230+(mover * 16),74);
}else{
game[bob[5]]->SetPosition(-290+(mover * 16),74);
game[bob[0]]->SetPosition(-130+(mover * 19),74);
game[bob[1]]->SetPosition(60+(mover * 17.9),74);
game[bob[2]]->SetPosition(239+(mover * 18.1),74);
game[bob[3]]->SetPosition(420+(mover * 19.2),74);
game[bob[4]]->SetPosition(612+(mover * 19.2),74);
}

game[bob[0]]->SetSkew(-10+(mover * .4),-44+(mover * 2.2),10-(mover * .4),-26+(mover * 1.2),
10-(mover * .4),26-(mover * 1.2),-10+(mover * .4),44-(mover * 2.2));

game[bob[1]]->SetSkew(-6+(mover * .6),-22+(mover * 1.1),6-(mover * .6),-14+(mover * .3),
6-(mover * .6),14-(mover * .3),-6+(mover * .6),22-(mover * 1.1));

game[bob[2]]->SetSkew(0-(mover * .6),-11-(mover * .3),0+(mover * .6),-11-(mover * 1.1)
,0+(mover * .6),11+(mover * 1.1),0-(mover * .6),11+(mover * .3));

game[bob[3]]->SetSkew(-6-(mover * .4),-14-(mover * 1.2),6+(mover * .4),-22-(mover * 2.2),
6+(mover * .4),22+(mover * 2.2),-6-(mover * .4),14+(mover * 1.2));

game[bob[4]]->SetSkew(-10-(mover * .4),-26+(mover * 1.2),10+(mover * .4),-44-(mover * 2.2),
10+(mover * .4),44+(mover * 2.2),-10-(mover * .4),26+(mover * 1.2));

game[bob[5]]->SetSkew(-10,-44,10,-26,10,26,-10,44);
}
else if (rows==2)
{
if (CFG.widescreen){
game[bob[0]]->SetPosition(3+(mover * 9.4),50);
game[bob[1]]->SetPosition(3+(mover * 9.4),193);
game[bob[2]]->SetPosition(97+(mover * 9),50);
game[bob[3]]->SetPosition(97+(mover * 9),193);
game[bob[4]]->SetPosition(187+(mover * 8.5),50);
game[bob[5]]->SetPosition(187+(mover * 8.5),193);
game[bob[6]]->SetPosition(272+(mover * 8.5),50);
game[bob[7]]->SetPosition(272+(mover * 8.5),193);
game[bob[8]]->SetPosition(358+(mover * 9),50);
game[bob[9]]->SetPosition(358+(mover * 9),193);
game[bob[10]]->SetPosition(449+(mover * 9.6),50);
game[bob[11]]->SetPosition(449+(mover * 9.6),193);
game[bob[12]]->SetPosition(545+(mover * 9.6),50);
game[bob[13]]->SetPosition(545+(mover * 9.6),193);
game[bob[14]]->SetPosition(-93+(mover * 9.6),50);
game[bob[15]]->SetPosition(-93+(mover * 9.6),193);
}
else{
game[bob[0]]->SetPosition(-54+(mover * 11.2),50);
game[bob[1]]->SetPosition(-54+(mover * 11.2),193);
game[bob[2]]->SetPosition(58+(mover * 10.8),50);
game[bob[3]]->SetPosition(58+(mover * 10.8),193);
game[bob[4]]->SetPosition(166+(mover * 10.6),50);
game[bob[5]]->SetPosition(166+(mover * 10.6),193);
game[bob[6]]->SetPosition(272+(mover * 10.6),50);
game[bob[7]]->SetPosition(272+(mover * 10.6),193);
game[bob[8]]->SetPosition(378+(mover * 10.9),50);
game[bob[9]]->SetPosition(378+(mover * 10.9),193);
game[bob[10]]->SetPosition(487+(mover * 11.2),50);
game[bob[11]]->SetPosition(487+(mover * 11.2),193);
game[bob[12]]->SetPosition(599+(mover * 10.1),50);
game[bob[13]]->SetPosition(599+(mover * 10.1),193);
game[bob[14]]->SetPosition(-155+(mover * 10.1),50);
game[bob[15]]->SetPosition(-155+(mover * 10.1),193);
}


game[bob[0]]->SetSkew(-4.5+(mover * .05),-49+(mover * 2.7),4.5-(mover * .05),-27+(mover * 1.3),
4.5-(mover * .05),0,-4.5+(mover * .05),0);

game[bob[1]]->SetSkew(-4.5+(mover * .05),0,4.5-(mover * .05),0,
4.5-(mover * .05),27-(mover * 1.3),-4.5+(mover * .05),49-(mover * 2.7));

game[bob[2]]->SetSkew(-4+(mover * .4),-22+(mover * 1.3),4-(mover * .4),-14+(mover * .9),
4-(mover * .4),0,-4+(mover * .4),0);

game[bob[3]]->SetSkew(-4+(mover * .4),0,4-(mover * .4),0,
4-(mover * .4),14-(mover * .9),-4+(mover * .4),22-(mover * 1.3));

game[bob[4]]->SetSkew(0,-9+(mover * .9),0,-5+(mover * .5),
0,0,0,0);

game[bob[5]]->SetSkew(0,0,0,0,
0,5-(mover * .5),0,9-(mover * .9));

game[bob[6]]->SetSkew(0,0-(mover * .5),0,0-(mover * .9),
0,0,0,0);

game[bob[7]]->SetSkew(0,0,0,0,
0,0+(mover * .9),0,0+(mover * .5));

game[bob[8]]->SetSkew(0-(mover * .4),-5-(mover * .9),0+(mover * .4),-9-(mover * 1.3),
0+(mover * .4),0,0-(mover * .4),0);

game[bob[9]]->SetSkew(0-(mover * .4),0,0+(mover * .4),0,
0+(mover * .4),9+(mover * 1.3),0-(mover * .4),5+(mover * .9));

game[bob[10]]->SetSkew(-4-(mover * .05),-14-(mover * 1.3),4+(mover * .05),-22-(mover * 2.7),
4+(mover * .05),0,-4-(mover * .05),0);

game[bob[11]]->SetSkew(-4-(mover * .05),0,4+(mover * .05),0,
4+(mover * .05),22+(mover * 2.7),-4-(mover * .05),14+(mover * 1.3));

game[bob[12]]->SetSkew(-4.5,-27,4.5,-49,4.5,0,-4.5,0);

game[bob[13]]->SetSkew(-4.5,0,4.5,0,4.5,49,-4.5,27);
game[bob[14]]->SetSkew(-4.5,-49,4.5,-27,4.5,0,-4.5,0);
game[bob[15]]->SetSkew(-4.5,0,4.5,0,4.5,27,-4.5,49);
}
else if (rows==3)
{
if(CFG.widescreen){
game[bob[0]]->SetPosition(37-(mover * -6),60);
game[bob[1]]->SetPosition(37-(mover * -6),160);
game[bob[2]]->SetPosition(37-(mover * -6),260);

game[bob[3]]->SetPosition(96-(mover * -6),60);
game[bob[4]]->SetPosition(96-(mover * -6),160);
game[bob[5]]->SetPosition(96-(mover * -6),260);

game[bob[6]]->SetPosition(155-(mover * -6),60);
game[bob[7]]->SetPosition(155-(mover * -6),160);
game[bob[8]]->SetPosition(155-(mover * -6),260);

game[bob[9]]->SetPosition(214-(mover * -6),60);
game[bob[10]]->SetPosition(214-(mover * -6),160);
game[bob[11]]->SetPosition(214-(mover * -6),260);

game[bob[12]]->SetPosition(273-(mover * -6),60);
game[bob[13]]->SetPosition(273-(mover * -6),160);
game[bob[14]]->SetPosition(273-(mover * -6),260);

game[bob[15]]->SetPosition(332-(mover * -6),60);
game[bob[16]]->SetPosition(332-(mover * -6),160);//
game[bob[17]]->SetPosition(332-(mover * -6),260);

game[bob[18]]->SetPosition(391-(mover * -6),60);//
game[bob[19]]->SetPosition(391-(mover * -6),160);//
game[bob[20]]->SetPosition(391-(mover * -6),260);//

game[bob[21]]->SetPosition(450-(mover * -6),60);
game[bob[22]]->SetPosition(450-(mover * -6),160);
game[bob[23]]->SetPosition(450-(mover * -6),260);

game[bob[24]]->SetPosition(509-(mover * -6),60);
game[bob[25]]->SetPosition(509-(mover * -6),160);
game[bob[26]]->SetPosition(509-(mover * -6),260);

game[bob[27]]->SetPosition(568-(mover * -16),60);
game[bob[28]]->SetPosition(568-(mover * -16),160);
game[bob[29]]->SetPosition(568-(mover * -16),260);

game[bob[30]]->SetPosition(-24-(mover * -6),60);
game[bob[31]]->SetPosition(-24-(mover * -6),160);
game[bob[32]]->SetPosition(-24-(mover * -6),260);
}
else{

game[bob[0]]->SetPosition(24-(mover * -7),60);
game[bob[1]]->SetPosition(24-(mover * -7),160);
game[bob[2]]->SetPosition(24-(mover * -7),260);

game[bob[3]]->SetPosition(94-(mover * -7),60);
game[bob[4]]->SetPosition(94-(mover * -7),160);
game[bob[5]]->SetPosition(94-(mover * -7),260);

game[bob[6]]->SetPosition(164-(mover * -7),60);
game[bob[7]]->SetPosition(164-(mover * -7),160);
game[bob[8]]->SetPosition(164-(mover * -7),260);

game[bob[9]]->SetPosition(234-(mover * -7),60);
game[bob[10]]->SetPosition(234-(mover * -7),160);
game[bob[11]]->SetPosition(234-(mover * -7),260);

game[bob[12]]->SetPosition(304-(mover * -7),60);
game[bob[13]]->SetPosition(304-(mover * -7),160);
game[bob[14]]->SetPosition(304-(mover * -7),260);

game[bob[15]]->SetPosition(374-(mover * -7),60);
game[bob[16]]->SetPosition(374-(mover * -7),160);//
game[bob[17]]->SetPosition(374-(mover * -7),260);

game[bob[18]]->SetPosition(444-(mover * -7),60);//
game[bob[19]]->SetPosition(444-(mover * -7),160);//
game[bob[20]]->SetPosition(444-(mover * -7),260);//

game[bob[21]]->SetPosition(514-(mover * -7),60);
game[bob[22]]->SetPosition(514-(mover * -7),160);
game[bob[23]]->SetPosition(514-(mover * -7),260);

game[bob[24]]->SetPosition(584-(mover * -17),60);
game[bob[25]]->SetPosition(584-(mover * -17),160);
game[bob[26]]->SetPosition(584-(mover * -17),260);

game[bob[30]]->SetPosition(-48-(mover * -7),60);
game[bob[31]]->SetPosition(-48-(mover * -7),160);
game[bob[32]]->SetPosition(-48-(mover * -7),260);

}

//game[bob[0]]->SetSkew(-38,-110,15,-42,15,65,-38,32);
//game[bob[1]]->SetSkew(-38,-75,15,-48,15,45,-38,72);
//game[bob[2]]->SetSkew(-38,-52,15,-70,15,27,-38,100);

game[bob[3]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[4]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[5]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[6]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[7]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[8]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[9]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[10]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[11]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[12]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[13]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[14]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[15]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[16]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[17]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[18]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[19]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[20]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[21]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[22]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[23]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[24]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[25]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[26]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[27]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[28]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[29]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));

game[bob[30]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[31]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
game[bob[32]]->SetSkew(-65,-65-(mover * 0),20,-65-(mover * 0),20,65+(mover * 0),-65,65+(mover * 0));
}
else if (rows==4)
{
if(CFG.widescreen){
game[bob[39]]->SetPosition(-42+(mover *5.5),58);
game[bob[40]]->SetPosition(-42+(mover *5.5),153);
game[bob[41]]->SetPosition(-42+(mover *5.5),250);

game[bob[0]]->SetPosition(13+(mover *5.5),58+(mover *.9));
game[bob[1]]->SetPosition(13+(mover *5.5),153);
game[bob[2]]->SetPosition(13+(mover *5.5),250-(mover *1.1));

game[bob[3]]->SetPosition(68+(mover *5.2),67+(mover *.7));
game[bob[4]]->SetPosition(68+(mover *5.2),153);
game[bob[5]]->SetPosition(68+(mover *5.2),239-(mover *.7));

game[bob[6]]->SetPosition(120+(mover *5),74+(mover *.4));
game[bob[7]]->SetPosition(120+(mover *5),153);
game[bob[8]]->SetPosition(120+(mover *5),232-(mover *.4));

game[bob[9]]->SetPosition(170+(mover *4.4),78+(mover *.2));
game[bob[10]]->SetPosition(170+(mover *4.4),153);
game[bob[11]]->SetPosition(170+(mover *4.4),228-(mover *.2));

game[bob[12]]->SetPosition(214+(mover *4.4),80+(mover *.1));
game[bob[13]]->SetPosition(214+(mover *4.4),153);
game[bob[14]]->SetPosition(214+(mover *4.4),226-(mover *.2));

game[bob[15]]->SetPosition(258+(mover *4.4),81);
game[bob[16]]->SetPosition(258+(mover *4.4),153);
game[bob[17]]->SetPosition(258+(mover *4.4),224-(mover *.1));

game[bob[18]]->SetPosition(302+(mover *4.4),81);
game[bob[19]]->SetPosition(302+(mover *4.4),153);
game[bob[20]]->SetPosition(302+(mover *4.4),223);

game[bob[21]]->SetPosition(346+(mover *4.4),81-(mover *.1));
game[bob[22]]->SetPosition(346+(mover *4.4),153);
game[bob[23]]->SetPosition(346+(mover *4.4),223+(mover *.2));

game[bob[24]]->SetPosition(390+(mover *4.4),80-(mover *.3));
game[bob[25]]->SetPosition(390+(mover *4.4),153);
game[bob[26]]->SetPosition(390+(mover *4.4),225+(mover *.2));

game[bob[27]]->SetPosition(434+(mover *5),77-(mover *.4));
game[bob[28]]->SetPosition(434+(mover *5),153);
game[bob[29]]->SetPosition(434+(mover *5),227+(mover *.4));

game[bob[30]]->SetPosition(484+(mover *5.3),73-(mover *.6));
game[bob[31]]->SetPosition(484+(mover *5.3),153);
game[bob[32]]->SetPosition(484+(mover *5.3),231+(mover *.8));

game[bob[33]]->SetPosition(537+(mover *5.4),67-(mover *.9));
game[bob[34]]->SetPosition(537+(mover *5.4),153);
game[bob[35]]->SetPosition(537+(mover *5.4),239+(mover *1.1));

game[bob[36]]->SetPosition(591+(mover *5.4),58);
game[bob[37]]->SetPosition(591+(mover *5.4),153);
game[bob[38]]->SetPosition(591+(mover *5.4),250);

}
else{
game[bob[39]]->SetPosition(-84+(mover *5.5),58);
game[bob[40]]->SetPosition(-84+(mover *5.5),153);
game[bob[41]]->SetPosition(-84+(mover *5.5),250);

game[bob[0]]->SetPosition(-29+(mover * 6.2),58+(mover * .9));
game[bob[1]]->SetPosition(-29+(mover * 6.2),153);
game[bob[2]]->SetPosition(-29+(mover * 6.2),250-(mover * 1.1));

game[bob[3]]->SetPosition(33+(mover * 5.9),67+(mover * .7));
game[bob[4]]->SetPosition(33+(mover * 5.9),153);
game[bob[5]]->SetPosition(33+(mover * 5.9),239-(mover * .7));

game[bob[6]]->SetPosition(92+(mover * 5.7),74+(mover * .4));
game[bob[7]]->SetPosition(92+(mover * 5.7),153);
game[bob[8]]->SetPosition(92+(mover * 5.7),232-(mover * .4));

game[bob[9]]->SetPosition(149+(mover * 5.1),78+(mover * .2));
game[bob[10]]->SetPosition(149+(mover * 5.1),153);
game[bob[11]]->SetPosition(149+(mover * 5.1),228-(mover * .2));

game[bob[12]]->SetPosition(200+(mover * 5.1),80+(mover * .1));
game[bob[13]]->SetPosition(200+(mover * 5.1),153);
game[bob[14]]->SetPosition(200+(mover * 5.1),226-(mover * .2));

game[bob[15]]->SetPosition(251+(mover * 5.1),81);
game[bob[16]]->SetPosition(251+(mover * 5.1),153);//
game[bob[17]]->SetPosition(251+(mover * 5.1),224-(mover * .1));

game[bob[18]]->SetPosition(302+(mover * 5.2),81);//
game[bob[19]]->SetPosition(302+(mover * 5.2),153);//
game[bob[20]]->SetPosition(302+(mover * 5.2),223);//

game[bob[21]]->SetPosition(353+(mover * 5.1),81-(mover * .1));
game[bob[22]]->SetPosition(353+(mover * 5.1),153);
game[bob[23]]->SetPosition(353+(mover * 5.1),223+(mover * .2));

game[bob[24]]->SetPosition(404+(mover * 5.3),80-(mover * .3));
game[bob[25]]->SetPosition(404+(mover * 5.3),153);
game[bob[26]]->SetPosition(404+(mover * 5.3),225+(mover * .2));

game[bob[27]]->SetPosition(457+(mover * 5.5),77-(mover * .4));
game[bob[28]]->SetPosition(457+(mover * 5.5),153);
game[bob[29]]->SetPosition(457+(mover * 5.5),227+(mover * .4));

game[bob[30]]->SetPosition(512+(mover * 6),73-(mover * .6));
game[bob[31]]->SetPosition(512+(mover * 6),153);
game[bob[32]]->SetPosition(512+(mover * 6),231+(mover * .8));

game[bob[33]]->SetPosition(572+(mover * 6),67-(mover * .9));
game[bob[34]]->SetPosition(572+(mover * 6),153);
game[bob[35]]->SetPosition(572+(mover * 6),239+(mover * 1.1));

game[bob[36]]->SetPosition(633+(mover * 6),58);
game[bob[37]]->SetPosition(633+(mover * 6),153);
game[bob[38]]->SetPosition(633+(mover * 6),250);
}
game[bob[39]]->SetSkew(-38,-110,15,-42,15,65,-38,32);
game[bob[40]]->SetSkew(-38,-75,15,-48,15,45,-38,72);
game[bob[41]]->SetSkew(-38,-52,15,-70,15,27,-38,100);

game[bob[0]]->SetSkew(-38,-110+(mover * .4),15,-42+(mover * 1.8),15,65-(mover * 2.5),-38,32-(mover * .5));
game[bob[1]]->SetSkew(-38,-75+(mover * 2.5),15,-48+(mover * 1.3),15,45-(mover * .5),-38,72-(mover * 2.2));
game[bob[2]]->SetSkew(-38,-52+(mover * 1.8),15,-70+(mover * 2.3),15,27+(mover * .3),-38,100-(mover * 4.2));

game[bob[3]]->SetSkew(-38+(mover * 1.1),-70+(mover * 1.5),15+(mover * .4),-24-(mover * .2),15+(mover * .4),40-(mover * 1),-38+(mover * 1.1),27-(mover * .5));
game[bob[4]]->SetSkew(-38+(mover * 1.1),-50+(mover * 1),15+(mover * .4),-35-(mover * .5),15+(mover * .4),40-(mover * 1),-38+(mover * 1.1),50-(mover * 1));
game[bob[5]]->SetSkew(-38+(mover * 1.1),-34+(mover * 1.4),15+(mover * .4),-47+(mover * 1.7),15+(mover * .4),24-(mover * .4),-38+(mover * 1.1),58-(mover * .8));

game[bob[6]]->SetSkew(-27+(mover * .8),-55+(mover * 1.7),19-(mover * .9),-22+(mover * .5),19-(mover * .9),30-(mover * 1.5),-27+(mover * .8),22-(mover * 1.2));
game[bob[7]]->SetSkew(-27+(mover * .8),-40+(mover * 1),19-(mover * .9),-30+(mover * 1),19-(mover * .9),30-(mover * 1.8),-27+(mover * .8),40-(mover * 1));
game[bob[8]]->SetSkew(-27+(mover * .8),-20+(mover * .5),19-(mover * .9),-30+(mover * 1),19-(mover * .9),20-(mover * 1),-27+(mover * .8),50-(mover * 2.6));

game[bob[9]]->SetSkew(-19+(mover * .9),-28+(mover * .8),0+(mover * .3),-17-(mover * .4),0+(mover * .3),15-(mover * 1),-19+(mover * .9),10);
game[bob[10]]->SetSkew(-19+(mover * .9),-30+(mover * 1),0+(mover * .3),-20-(mover * .2),0+(mover * .3),12+(mover * .6),-19+(mover * .9),30-(mover * 1));
game[bob[11]]->SetSkew(-19+(mover * .9),-15+(mover * .5),0+(mover * .3),-20+(mover * 1),0+(mover * .3),10,-19+(mover * .9),24-(mover * 1.4));

game[bob[12]]->SetSkew(-10,-20+(mover * .5),3,-13+(mover * .1),3,14-(mover * .1),-10,10+(mover * .3));
game[bob[13]]->SetSkew(-10,-20+(mover * .3),3,-18+(mover * .8),3,18-(mover * .8),-10,20-(mover * .3));
game[bob[14]]->SetSkew(-10,-10,3,-10-(mover * .5),3,0+(mover * 1),-10,10);

game[bob[15]]->SetSkew(-10,-15+(mover * .5),3,-12+(mover * .2),3,13+(mover * .1),-10,13+(mover * .1));
game[bob[16]]->SetSkew(-10,-17+(mover * .7),3,-10,3,10,-10,17-(mover * .7));
game[bob[17]]->SetSkew(-10,-10,3,-15+(mover * .5),3,10,-10,10);

game[bob[18]]->SetSkew(-10,-10,3+(mover * .1),-10-(mover * 1),3,14-(mover * .4),-10-(mover * .4),14-(mover * .4));
game[bob[19]]->SetSkew(-10,-10,3+(mover * .1),-10-(mover * .7),3,10+(mover * .7),-10-(mover * .4),10);//middle
game[bob[20]]->SetSkew(-10,-10,3+(mover * .1),-10,3,10,-10-(mover * .4),10);

game[bob[21]]->SetSkew(-14+(mover * .4),-10-(mover * .3),4-(mover * .1),-20,3,10+(mover * .4),-14,10);
game[bob[22]]->SetSkew(-14+(mover * .4),-10-(mover * .8),4-(mover * .1),-17-(mover * .3),3,17+(mover * .3),-14,10+(mover * .8));
game[bob[23]]->SetSkew(-14+(mover * .4),-10,4-(mover * .1),-10,3,10+(mover * 1),-14,10-(mover * .5));

game[bob[24]]->SetSkew(-10-(mover * .9),-13,3-(mover * .3),-20,3-(mover * .3),14,-10-(mover * .9),10);
game[bob[25]]->SetSkew(-10-(mover * .9),-18,3-(mover * .3),-20,3-(mover * .3),20,-10-(mover * .9),18);
game[bob[26]]->SetSkew(-10-(mover * .9),-10,3-(mover * .3),-10,3-(mover * .3),20,-10-(mover * .9),5);

game[bob[27]]->SetSkew(-19-(mover * .8),-17,0+(mover * 1.9),-28,0+(mover * 1.9),10+(mover * 1.2),-19-(mover * .8),15+(mover * 1.5));
game[bob[28]]->SetSkew(-19-(mover * .8),-20,0+(mover * 1.9),-30,0+(mover * 1.9),30+(mover * 1),-19-(mover * .8),12+(mover * 1.8));
game[bob[29]]->SetSkew(-19-(mover * .8),-20,0+(mover * 1.9),-15,0+(mover * 1.9),30+(mover * 1.5),-19-(mover * .8),10+(mover * 1));

game[bob[30]]->SetSkew(-27-(mover * 1.1),-22-(mover * .2),19-(mover * .4),-55-(mover * 1.5),19-(mover * .4),22+(mover * .5),-27-(mover * 1.1),30+(mover * 1));
game[bob[31]]->SetSkew(-27-(mover * 1.1),-30-(mover * .5),19-(mover * .4),-40-(mover * 1),19-(mover * .4),40+(mover * 1),-27-(mover * 1.1),30+(mover * 1));
game[bob[32]]->SetSkew(-27-(mover * 1.1),-30-(mover * 1.7),19-(mover * .4),-20-(mover * 1.4),19-(mover * .4),55+(mover * .3),-27-(mover * 1.1),20+(mover * .4));

game[bob[33]]->SetSkew(-38,-24-(mover * 1.8),15,-70-(mover * 4),15,27+(mover * .5),-38,40+(mover * .2));
game[bob[34]]->SetSkew(-38,-35-(mover * 1.3),15,-50-(mover * 2.5),15,50+(mover * 2),-38,40+(mover * .5));
game[bob[35]]->SetSkew(-38,-47-(mover * 2.7),15,-34-(mover * 1.8),15,58+(mover * 4.2),-38,24+(mover * .3));

game[bob[36]]->SetSkew(-38,-42+(mover * 1.8),15,-110,15,32,-38,60);
game[bob[37]]->SetSkew(-38,-48+(mover * 1.3),15,-75,15,70,-38,45);
game[bob[38]]->SetSkew(-38,-70+(mover * 2.3),15,-52+(mover * 1.8),15,100,-38,27);
}
mover++;
goRight--;

}
else {goRight=0;mover=0;
listOffset = (listOffset-rows < 0) ? gameCnt-rows : listOffset-rows;
firstPic = (firstPic-rows < 0) ? pagesize-rows : firstPic-rows;

for(int i=0; i<pagesize; i++) {
bob = (firstPic+i)%pagesize;

//snprintf(debugbuffer, sizeof(debugbuffer), "listOffset: %i firstPic: %i 3: %i 2: %i 1: %i", listOffset,firstPic,((listOffset -3) % gameCnt),((listOffset -2) % gameCnt),((listOffset -1) % gameCnt));
//debugTxt->SetText(debugbuffer);

}
}
}


int ttoffset=0;
if (rows==1)ttoffset=70;
if (rows==2)ttoffset=35;
if(!CFG.widescreen){
ttoffset=25;
if (rows==1)ttoffset=150;
if (rows==2)ttoffset=55;
}
char titlebuffer[50];
int selected = this->GetSelectedOption();
//3 different loops here with different alignment for tooltips
//depending on where on the screen the game is
for(int i=0; i < (pagesize/3); i++) {
game->RemoveToolTip();

if (game[bob]->GetState()==STATE_SELECTED)
{

game[bob]->SetToolTip(titleTT,ttoffset,0,0,5);
}
}
for(int i=(pagesize/3); i < (2* pagesize/3); i++) {
game->RemoveToolTip();

if (game[bob]->GetState()==STATE_SELECTED)
{
game[bob]->SetToolTip(titleTT,0,0,2,5);
isover=true;
}
}
for(int i=(2* pagesize/3); i < pagesize; i++) {
game->RemoveToolTip();

if (game[bob]->GetState()==STATE_SELECTED)
{
game[bob]->SetToolTip(titleTT,-ttoffset,0,1,5);
}
}
snprintf(titlebuffer, sizeof(titlebuffer), "%s",get_title(&gameList[this->GetSelectedOption()]));
if (selected!=selectedOld){
drawTTs=1;
delete titleTT;
titleTT = new GuiTooltip(titlebuffer);
titleTT->SetAlpha(THEME.tooltipAlpha);
wait=0;wait1=0;
}
selectedOld=selected;
if (wait1==0){wait++;if(wait>500)wait1=1;}//500 *2 is the time that the tooltips stay on screen
if ((wait1==1)&&(wait>-1)){wait--;}


//snprintf(debugbuffer, sizeof(debugbuffer), "faggot %i %s", GetOverImage(t),get_title(&gameList[this->GetSelectedOption()]));
//debugTxt->SetText(debugbuffer);
if ((btnRowUp->GetState() == STATE_CLICKED)&&(c>0)) {
if ((rows==1)&&(gameCnt>=16))this->ChangeRows(2);
else if ((rows==2)&&(gameCnt>=33))this->ChangeRows(3);
else if ((rows==3)&&(gameCnt>=42))this->ChangeRows(4);
btnRowUp->ResetState();
return;
}

if ((btnRowDown->GetState() == STATE_CLICKED)&&(c>0)) {
if (rows==4)this->ChangeRows(3);
else if (rows==3)this->ChangeRows(2);
else if (rows==2)this->ChangeRows(1);
btnRowDown->ResetState();
return;
}

if(updateCB)
updateCB(this);
}


void GuiGameGrid::Reload(struct discHdr * l, int count)
{
for(int i=0; i<42; i++) {
delete game;
}
for(int i=0; i<gameCnt; i++) {
delete coverImg;
delete cover;
}

//delete [] bob;
delete [] game;
delete [] coverImg;
delete [] cover;

LOCK(this);

gameList = l;
listOffset = 0;
selectable = true;
selectedItem = 0;
focus = 1; // allow focus
firstPic = 0;
clickedItem = -1;
gameCnt=count;
drawTTs=0;
//speed = SHIFT_SPEED;
char imgPath[100];

if (count<42)rows=3;
if (count<33)rows=2;
if (count<16)rows=1;
Settings.gridRows = rows;
if(isInserted(bootDevice)) {
cfg_save_global();
}
//rows=1;
if (rows==1)pagesize = 6;
else if (rows==2)pagesize = 16;
else if (rows==3)pagesize = 33;
else if (rows==4)pagesize = 42;

game = new GuiButton * [pagesize];
//bob = new int[pagesize];
coverImg = new GuiImage * [gameCnt];
cover = new GuiImageData * [gameCnt];

for(int i=0; i<pagesize; i++) {
bob=i;
}

firstPic=0;

char ID[4];
char IDfull[7];

for(int i=0; i < gameCnt; i++) {

struct discHdr *header = &gameList;
snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]);
snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]);

snprintf(imgPath, sizeof(imgPath), "%s%s.png", Settings.covers_path, IDfull); //Load full id image
cover = new GuiImageData(imgPath,0);
if (!cover->GetImage()) {
delete cover;
snprintf(imgPath, sizeof(imgPath), "%s%s.png", Settings.covers_path, ID); //Load short id image
cover = new GuiImageData(imgPath, 0);
if (!cover->GetImage()) {
delete cover;
snprintf(imgPath, sizeof(imgPath), "%snoimage.png", Settings.covers_path); //Load no image
cover = new GuiImageData(imgPath, nocoverFlat_png);
}
}

coverImg = new GuiImage(cover);
coverImg->SetWidescreen(CFG.widescreen);
if (rows==2)coverImg->SetScale(.6);//these are the numbers for 2 rows
else if (rows==3)coverImg->SetScale(.26);//these are the numbers for 3 rows
else if (rows==4)coverImg->SetScale(.26);//these are the numbers for 4 rows

}

for(int i=0; i < pagesize; i++) {
game = new GuiButton(160,224);//for 1 row
if (rows==2)game->SetSize(75,133);//these are the numbers for 2 rows
else if (rows==3)game->SetSize(35,68);//these are the numbers for 3 rows
else if (rows==4)game->SetSize(35,68);//these are the numbers for 4 rows
game->SetParent(this);
game->SetAlignment(ALIGN_TOP,ALIGN_LEFT);
game->SetPosition(-200,740);
game->SetImage(coverImg[(listOffset+i) % gameCnt]);
if (rows==4)coverImg[(listOffset+i) % gameCnt]->SetPosition(0,-80);// only for 4 rows
if (rows==3)coverImg[(listOffset+i) % gameCnt]->SetPosition(0,-80);// only for 3 rows
if (rows==2)coverImg[(listOffset+i) % gameCnt]->SetPosition(0,-50);// only for 2 rows
game->SetRumble(false);
game->SetTrigger(trigA);
game->SetSoundClick(btnSoundClick);
game->SetClickable(true);
}
for (int i=gameCnt-1;i<pagesize;i++){ //hide games if gameCnt is less than the number of onscreen boxes
game->SetVisible(false);
game->SetClickable(false);
game->RemoveSoundOver();}

if (rows==1)
{
if(CFG.widescreen){
game[bob[0]]->SetPosition(-70,74);
game[bob[1]]->SetPosition(88,74);
game[bob[2]]->SetPosition(239,74);
game[bob[3]]->SetPosition(390,74);
game[bob[4]]->SetPosition(550,74);
}
else{
game[bob[0]]->SetPosition(-130,74);
game[bob[1]]->SetPosition(60,74);
game[bob[2]]->SetPosition(239,74);
game[bob[3]]->SetPosition(420,74);
game[bob[4]]->SetPosition(612,74);
}

game[bob[0]]->SetSkew(-10,-44,10,-26,10,26,-10,44);
game[bob[1]]->SetSkew(-6,-22,6,-14,6,14,-6,22);
game[bob[2]]->SetSkew(0,-11,0,-11,0,11,0,11);
game[bob[3]]->SetSkew(-6,-14,6,-22,6,22,-6,14);
game[bob[4]]->SetSkew(-10,-26,10,-44,10,44,-10,26);
}
else if (rows == 2)
{
if(CFG.widescreen){
game[bob[0]]->SetPosition(3,50);
game[bob[1]]->SetPosition(3,193);
game[bob[2]]->SetPosition(97,50);
game[bob[3]]->SetPosition(97,193);
game[bob[4]]->SetPosition(187,50);
game[bob[5]]->SetPosition(187,193);
game[bob[6]]->SetPosition(272,50);
game[bob[7]]->SetPosition(272,193);
game[bob[8]]->SetPosition(358,50);
game[bob[9]]->SetPosition(358,193);
game[bob[10]]->SetPosition(449,50);
game[bob[11]]->SetPosition(449,193);
game[bob[12]]->SetPosition(545,50);
game[bob[13]]->SetPosition(545,193);
}
else{
game[bob[0]]->SetPosition(-54,50);
game[bob[1]]->SetPosition(-54,193);
game[bob[2]]->SetPosition(58,50);
game[bob[3]]->SetPosition(58,193);
game[bob[4]]->SetPosition(166,50);
game[bob[5]]->SetPosition(166,193);
game[bob[6]]->SetPosition(272,50);
game[bob[7]]->SetPosition(272,193);
game[bob[8]]->SetPosition(378,50);
game[bob[9]]->SetPosition(378,193);
game[bob[10]]->SetPosition(487,50);
game[bob[11]]->SetPosition(487,193);
game[bob[12]]->SetPosition(599,50);
game[bob[13]]->SetPosition(599,193);
game[bob[14]]->SetPosition(700,0);
game[bob[15]]->SetPosition(700,0);
}
game[bob[0]]->SetSkew(-4.5,-49,4.5,-27,4.5,0,-4.5,0);
game[bob[1]]->SetSkew(-4.5,0,4.5,0,4.5,27,-4.5,49);
game[bob[2]]->SetSkew(-4,-22,4,-14,4,0,-4,0);
game[bob[3]]->SetSkew(-4,0,4,0,4,14,-4,22);
game[bob[4]]->SetSkew(0,-9,0,-5,0,0,0,0);
game[bob[5]]->SetSkew(0,0,0,0,0,5,0,9);
game[bob[6]]->SetSkew(0,0,0,0,0,0,0,0);
game[bob[7]]->SetSkew(0,0,0,0,0,0,0,0);
game[bob[8]]->SetSkew(0,-5,0,-9,0,0,0,0);
game[bob[9]]->SetSkew(0,0,0,0,0,9,0,5);
game[bob[10]]->SetSkew(-4,-14,4,-22,4,0,-4,0);
game[bob[11]]->SetSkew(-4,0,4,0,4,22,-4,14);
game[bob[12]]->SetSkew(-4.5,-27,4.5,-49,4.5,0,-4.5,0);
game[bob[13]]->SetSkew(-4.5,0,4.5,0,4.5,49,-4.5,27);
}
else if (rows==3)
{
if(CFG.widescreen){
game[0]->SetPosition(37,60);
game[1]->SetPosition(37,160);
game[2]->SetPosition(37,260);

game[3]->SetPosition(96,60);
game[4]->SetPosition(96,160);
game[5]->SetPosition(96,260);

game[6]->SetPosition(155,60);
game[7]->SetPosition(155,160);
game[8]->SetPosition(155,260);

game[9]->SetPosition(214,60);
game[10]->SetPosition(214,160);
game[11]->SetPosition(214,260);

game[12]->SetPosition(273,60);
game[13]->SetPosition(273,160);
game[14]->SetPosition(273,260);

game[15]->SetPosition(332,60);
game[16]->SetPosition(332,160);
game[17]->SetPosition(332,260);

game[18]->SetPosition(391,60);
game[19]->SetPosition(391,160);
game[20]->SetPosition(391,260);

game[21]->SetPosition(450,60);
game[22]->SetPosition(450,160);
game[23]->SetPosition(450,260);

game[24]->SetPosition(509,60);
game[25]->SetPosition(509,160);
game[26]->SetPosition(509,260);

game[27]->SetPosition(568,60);
game[28]->SetPosition(568,160);
game[29]->SetPosition(568,260);
}
else{
game[0]->SetPosition(24,60);
game[1]->SetPosition(24,160);
game[2]->SetPosition(24,260);

game[3]->SetPosition(94,60);
game[4]->SetPosition(94,160);
game[5]->SetPosition(94,260);

game[6]->SetPosition(164,60);
game[7]->SetPosition(164,160);
game[8]->SetPosition(164,260);

game[9]->SetPosition(234,60);
game[10]->SetPosition(234,160);
game[11]->SetPosition(234,260);

game[12]->SetPosition(304,60);
game[13]->SetPosition(304,160);
game[14]->SetPosition(304,260);

game[15]->SetPosition(374,60);
game[16]->SetPosition(374,160);
game[17]->SetPosition(374,260);

game[18]->SetPosition(444,60);
game[19]->SetPosition(444,160);
game[20]->SetPosition(444,260);

game[21]->SetPosition(514,60);
game[22]->SetPosition(514,160);
game[23]->SetPosition(514,260);

game[24]->SetPosition(584,60);
game[25]->SetPosition(584,160);
game[26]->SetPosition(584,260);

}
game[0]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[1]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[2]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[3]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[4]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[5]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[6]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[7]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[8]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[9]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[10]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[11]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[12]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[13]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[14]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[15]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[16]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[17]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[18]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[19]->SetSkew(-65,-65,20,-65,20,65,-65,65);//middle
game[20]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[21]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[22]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[23]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[24]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[25]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[26]->SetSkew(-65,-65,20,-65,20,65,-65,65);

game[27]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[28]->SetSkew(-65,-65,20,-65,20,65,-65,65);
game[29]->SetSkew(-65,-65,20,-65,20,65,-65,65);
}
else if (rows==4)
{
if(CFG.widescreen){
game[bob[0]]->SetPosition(13,58);
game[bob[1]]->SetPosition(13,153);
game[bob[2]]->SetPosition(13,250);

game[bob[3]]->SetPosition(68,67);
game[bob[4]]->SetPosition(68,153);
game[bob[5]]->SetPosition(68,239);

game[bob[6]]->SetPosition(120,74);
game[bob[7]]->SetPosition(120,153);
game[bob[8]]->SetPosition(120,232);

game[bob[9]]->SetPosition(170,78);
game[bob[10]]->SetPosition(170,153);
game[bob[11]]->SetPosition(170,228);

game[bob[12]]->SetPosition(214,80);
game[bob[13]]->SetPosition(214,153);
game[bob[14]]->SetPosition(214,226);

game[bob[15]]->SetPosition(258,81);
game[bob[16]]->SetPosition(258,153);
game[bob[17]]->SetPosition(258,224);

game[bob[18]]->SetPosition(302,81);
game[bob[19]]->SetPosition(302,153);
game[bob[20]]->SetPosition(302,223);

game[bob[21]]->SetPosition(346,81);
game[bob[22]]->SetPosition(346,153);
game[bob[23]]->SetPosition(346,223);

game[bob[24]]->SetPosition(390,80);
game[bob[25]]->SetPosition(390,153);
game[bob[26]]->SetPosition(390,225);

game[bob[27]]->SetPosition(434,77);
game[bob[28]]->SetPosition(434,153);
game[bob[29]]->SetPosition(434,227);

game[bob[30]]->SetPosition(484,73);
game[bob[31]]->SetPosition(484,153);
game[bob[32]]->SetPosition(484,231);

game[bob[33]]->SetPosition(537,67);
game[bob[34]]->SetPosition(537,153);
game[bob[35]]->SetPosition(537,239);

game[bob[36]]->SetPosition(591,58);
game[bob[37]]->SetPosition(591,153);
game[bob[38]]->SetPosition(591,250);
}
else{
game[bob[0]]->SetPosition(-29,58);
game[bob[1]]->SetPosition(-29,153);
game[bob[2]]->SetPosition(-29,250);

game[bob[3]]->SetPosition(33,67);
game[bob[4]]->SetPosition(33,153);
game[bob[5]]->SetPosition(33,239);

game[bob[6]]->SetPosition(92,74);
game[bob[7]]->SetPosition(92,153);
game[bob[8]]->SetPosition(92,232);

game[bob[9]]->SetPosition(149,78);
game[bob[10]]->SetPosition(149,153);
game[bob[11]]->SetPosition(149,228);

game[bob[12]]->SetPosition(200,80);
game[bob[13]]->SetPosition(200,153);
game[bob[14]]->SetPosition(200,226);

game[bob[15]]->SetPosition(251,81);
game[bob[16]]->SetPosition(251,153);//
game[bob[17]]->SetPosition(251,224);

game[bob[18]]->SetPosition(302,81);//
game[bob[19]]->SetPosition(302,153);//
game[bob[20]]->SetPosition(302,223);//

game[bob[21]]->SetPosition(353,81);
game[bob[22]]->SetPosition(353,153);
game[bob[23]]->SetPosition(353,223);

game[bob[24]]->SetPosition(404,80);
game[bob[25]]->SetPosition(404,153);
game[bob[26]]->SetPosition(404,225);

game[bob[27]]->SetPosition(457,77);
game[bob[28]]->SetPosition(457,153);
game[bob[29]]->SetPosition(457,227);

game[bob[30]]->SetPosition(512,73);
game[bob[31]]->SetPosition(512,153);
game[bob[32]]->SetPosition(512,231);

game[bob[33]]->SetPosition(572,67);
game[bob[34]]->SetPosition(572,153);
game[bob[35]]->SetPosition(572,239);

game[bob[36]]->SetPosition(633,58);
game[bob[37]]->SetPosition(633,153);
game[bob[38]]->SetPosition(633,250);
}

game[bob[0]]->SetSkew(-38,-110,15,-42,15,65,-38,32);
game[bob[1]]->SetSkew(-38,-75,15,-48,15,45,-38,72);
game[bob[2]]->SetSkew(-38,-52,15,-70,15,27,-38,100);

game[bob[3]]->SetSkew(-38,-70,15,-24,15,40,-38,27);
game[bob[4]]->SetSkew(-38,-50,15,-35,15,40,-38,50);
game[bob[5]]->SetSkew(-38,-34,15,-47,15,24,-38,58);

game[bob[6]]->SetSkew(-27,-55,19,-22,19,30,-27,22);
game[bob[7]]->SetSkew(-27,-40,19,-30,19,30,-27,40);
game[bob[8]]->SetSkew(-27,-20,19,-30,19,20,-27,50);

game[bob[9]]->SetSkew(-19,-28,0,-17,0,15,-19,10);
game[bob[10]]->SetSkew(-19,-30,0,-20,0,12,-19,30);
game[bob[11]]->SetSkew(-19,-15,0,-20,0,10,-19,24);

game[bob[12]]->SetSkew(-10,-20,3,-13,3,14,-10,10);
game[bob[13]]->SetSkew(-10,-20,3,-18,3,18,-10,20);
game[bob[14]]->SetSkew(-10,-10,3,-10,3,0,-10,10);

game[bob[15]]->SetSkew(-10,-15,3,-12,3,13,-10,13);
game[bob[16]]->SetSkew(-10,-17,3,-10,3,10,-10,17);
game[bob[17]]->SetSkew(-10,-10,3,-15,3,10,-10,10);

game[bob[18]]->SetSkew(-10,-10,3,-10,3,14,-10,14);
game[bob[19]]->SetSkew(-10,-10,3,-10,3,10,-10,10);//middle
game[bob[20]]->SetSkew(-10,-10,3,-10,3,10,-10,10);

game[bob[21]]->SetSkew(-14,-10,4,-20,3,10,-14,10);
game[bob[22]]->SetSkew(-14,-10,4,-17,3,17,-14,10);
game[bob[23]]->SetSkew(-14,-10,4,-10,3,10,-14,10);

game[bob[24]]->SetSkew(-10,-13,3,-20,3,14,-10,10);
game[bob[25]]->SetSkew(-10,-18,3,-20,3,20,-10,18);
game[bob[26]]->SetSkew(-10,-10,3,-10,3,20,-10,5);

game[bob[27]]->SetSkew(-19,-17,0,-28,0,10,-19,15);
game[bob[28]]->SetSkew(-19,-20,0,-30,0,30,-19,12);
game[bob[29]]->SetSkew(-19,-20,0,-15,0,30,-19,10);

game[bob[30]]->SetSkew(-27,-22,19,-55,19,22,-27,30);
game[bob[31]]->SetSkew(-27,-30,19,-40,19,40,-27,30);
game[bob[32]]->SetSkew(-27,-30,19,-20,19,55,-27,20);

game[bob[33]]->SetSkew(-38,-24,15,-70,15,27,-38,40);
game[bob[34]]->SetSkew(-38,-35,15,-50,15,50,-38,40);
game[bob[35]]->SetSkew(-38,-47,15,-34,15,58,-38,24);

game[bob[36]]->SetSkew(-38,-42,15,-110,15,32,-38,60);
game[bob[37]]->SetSkew(-38,-48,15,-75,15,70,-38,45);
game[bob[38]]->SetSkew(-38,-70,15,-52,15,100,-38,27);
}


}

</div>
 

Logan

Well-Known Member
Member
Joined
Nov 21, 2003
Messages
609
Trophies
0
Age
43
Location
Northampton, UK
Website
Visit site
XP
455
Country
Hrugnir said:
Yes, I am also getting German names for games from WiiTDB now, and I would assume that it will do the same for cover downloads...

Could someone answer my question on Channel loading and the 002 error, though?

I had this. I was getting German titles and German synopsis. It's easily fixed. With the recent revisions 692+, go to the language settings. Download the language files when prompted. Just download them all. Select your language file. In my case, I selected English.lang. Applied the settings and all is good.
 

Bassetts

Member
Newcomer
Joined
Dec 29, 2007
Messages
13
Trophies
0
Age
34
Location
Nottingham
Website
www.dropshock.com
XP
118
Country
Logan said:
Hrugnir said:
Yes, I am also getting German names for games from WiiTDB now, and I would assume that it will do the same for cover downloads...

Could someone answer my question on Channel loading and the 002 error, though?

I had this. I was getting German titles and German synopsis. It's easily fixed. With the recent revisions 692+, go to the language settings. Download the language files when prompted. Just download them all. Select your language file. In my case, I selected English.lang. Applied the settings and all is good.


Are you able to get r696 to compile?

QUOTE(Connorlucas18 @ Aug 2 2009, 02:31 AM)
What does the SD Card button next to the Options button do? I've clicked it many times but I don't think anything happens O.o

As far as I know that button just reloads the SD card so produces no visible result.
 

D34DL1N3R

Nephilim
Member
Joined
Dec 6, 2008
Messages
3,670
Trophies
1
XP
3,220
Country
United States
Anyone able to get Monster Hunter 3 (Tri) working with the loader? Crashes after the first selection option with cIOS38 rev14 installed as 249. Doesn't load at all with Hermes 222, or 223. Tried all combinations of options I could think of.
 

Logan

Well-Known Member
Member
Joined
Nov 21, 2003
Messages
609
Trophies
0
Age
43
Location
Northampton, UK
Website
Visit site
XP
455
Country
USB Loader GX r696 - Click HERE to download

Changes (copied from Google project page):
  • *Fixed the Format Menu which was not working at all before lol
  • *Added auto create subfolders to GCT creation.
  • *Some minor fixes

Both DOL and ELF versions included in archive

!DOWNLOAD AND USE AT YOUR OWN RISK!

Note: If you are going to 'test' these revisions and you're having some issues, first please start from scratch. Backup your SD card, wipe your SD card, and start again. If you're not at least prepared to try this first, please don't download and test these revisions, stick to the released stable versions. Thank you.
 

Logan

Well-Known Member
Member
Joined
Nov 21, 2003
Messages
609
Trophies
0
Age
43
Location
Northampton, UK
Website
Visit site
XP
455
Country
Bassetts said:
Are you able to get r696 to compile?

No, and then yes after asking Pune why it weren't generating the DOL only the ELF.

The problem file is the german.lang file. Just delete it from the 696 source and replace it with the one from the 695 source. That worked for me
wink.gif
 

Bassetts

Member
Newcomer
Joined
Dec 29, 2007
Messages
13
Trophies
0
Age
34
Location
Nottingham
Website
www.dropshock.com
XP
118
Country
Logan said:
Bassetts said:
Are you able to get r696 to compile?

No, and then yes after asking Pune why it weren't generating the DOL only the ELF.

The problem file is the german.lang file. Just delete it from the 696 source and replace it with the one from the 695 source. That worked for me
wink.gif

Thanks, had seen that file was causing the problem but could not see where, I ended up doing what you said to get it to compile for now
smile.gif
 

Logan

Well-Known Member
Member
Joined
Nov 21, 2003
Messages
609
Trophies
0
Age
43
Location
Northampton, UK
Website
Visit site
XP
455
Country
Bassetts said:
Logan said:
Bassetts said:
Are you able to get r696 to compile?

No, and then yes after asking Pune why it weren't generating the DOL only the ELF.

The problem file is the german.lang file. Just delete it from the 696 source and replace it with the one from the 695 source. That worked for me
wink.gif

Thanks, had seen that file was causing the problem but could not see where, I ended up doing what you said to get it to compile for now
smile.gif

697 fixes it. Compiling now.
 

Logan

Well-Known Member
Member
Joined
Nov 21, 2003
Messages
609
Trophies
0
Age
43
Location
Northampton, UK
Website
Visit site
XP
455
Country
USB Loader GX r697 - Click HERE to download

Changes (copied from Google project page):
  • Corrected german.lang, because it caused an error on compliling r696.
  • Add 'Homebrew Channel" in translation files

Both DOL and ELF versions included in archive

!DOWNLOAD AND USE AT YOUR OWN RISK!

Note: If you are going to 'test' these revisions and you're having some issues, first please start from scratch. Backup your SD card, wipe your SD card, and start again. If you're not at least prepared to try this first, please don't download and test these revisions, stick to the released stable versions. Thank you.
 

D34DL1N3R

Nephilim
Member
Joined
Dec 6, 2008
Messages
3,670
Trophies
1
XP
3,220
Country
United States
Is it possible to replace all of the png files in the source with the ones from my favorite theme & compile it along with the config settings for it?

I tried, but I just got errors.
 

Logan

Well-Known Member
Member
Joined
Nov 21, 2003
Messages
609
Trophies
0
Age
43
Location
Northampton, UK
Website
Visit site
XP
455
Country
I certainly know people do compile their own with their own custom theme. I have no idea how its done though. I would have tried what you have, replacing the images in the source.
 

retKHAAAN

Well-Known Member
Member
Joined
Mar 14, 2009
Messages
3,840
Trophies
1
XP
1,603
Country
United States
i've compiled custom revs before. you just replace the png files and adjust the config file as far as locations and such go. I gave up on it though since revisions come out so often and I got tired of going through it.

P.S. you can also add your custom background music and global settings directly to the dol file. be careful not to make it too big though or else you won't be able to boot it.
 

giantpune

Well-Known Member
Member
Joined
Apr 10, 2009
Messages
2,860
Trophies
0
XP
213
Country
United States
Royusmc said:
This is for giantpune, I need help with getting your grid rows==4 to work as it moves
everything by 4. If you need any more info just ask. I would like to thank you for any help.
CODE
shitload of code....


You can't just say rows=4. the file doesn't know what to do with 4 rows. you can see all over that file there are coords and skew values for each box when rows==1 2 or 3. the way i did it when i wrote this mess was first made a image on photoshop of what it will need to look like when it is sitting still. then compile with that image as the background.

next do some basic math and figure about where the boxes need to be and code them there and put it on your tv. then you sit there for a week and use the x/y along with the setskew function to line up each stupid corner of each stupid box with the one you have set as the background. then you go back and repeat all that for 4/3 TVs.

once you know where the positions of all the boxes are and the amount to stretch each corner, you have to code the animation for 4 rows. for this you take the x,y, and skew values for each damn corner of each damn box (plus 1 col of games offscreen) and add the difference of it and the next position divided by the number of frames between positions (im using 10). then you do that for every stupid corner of every stupid box going the other direction. then you do both directions for 4/3 tvs.

then you copy and paste your positions and all from the constructor to the reload function too. there are a couple more things needed, but if you get all this done, ill finish it up.
rolleyes.gif
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    The Real Jdbye @ The Real Jdbye: don't mind me, just liking all of SDIO's posts, they deserve it for...