bool dng_orientation::FlipV () const { if (fAdobeOrientation & 4) return FlipD () == FlipH (); else return FlipD () != FlipH (); }
void DropShadowTest() { char msg[50]; int done = 0, x = dW/2, y = dH/2, invert = 0, frame = 0, text = 0, selback = 0, sprite = 0; int oldvmode = vmode, i = 0, currentsonic = 0, currentframe = 0; u32 pressed, held, reload = 0; ImagePtr back[4], sonicback[4], ssprite, shadow, buzz, buzzshadow, overlay; sonicback[0] = LoadImage(SONICBACK1IMG, 0); if(!sonicback[0]) return; sonicback[1] = LoadImage(SONICBACK2IMG, 0); if(!sonicback[1]) return; sonicback[2] = LoadImage(SONICBACK3IMG, 0); if(!sonicback[2]) return; sonicback[3] = LoadImage(SONICBACK4IMG, 0); if(!sonicback[3]) return; for(i = 0; i < 4; i++) back[i] = NULL; back[1] = sonicback[0]; if(!back[1]) return; overlay = LoadImage(SONICFLOORIMG, 0); if(!overlay) return; reload = 1; ssprite = LoadImage(SHADOWIMG, 0); if(!ssprite) return; buzz = LoadImage(BUZZBOMBERIMG, 0); if(!buzz) return; buzzshadow = LoadImage(BUZZBOMBERSHADOWIMG, 0); if(!buzzshadow) return; srand((int)(time(0))); sprite = rand() % 2; if(sprite == 0) shadow = ssprite; else shadow = buzzshadow; while(!done && !EndProgram) { if(reload || oldvmode != vmode) { FreeImage(&back[0]); FreeImage(&back[2]); FreeImage(&back[3]); back[2] = LoadImage(CHECKPOSIMG, 1); if(!back[2]) return; back[3] = LoadImage(STRIPESPOSIMG, 1); if(!back[3]) return; if(vmode != VIDEO_480P && vmode != VIDEO_480I && vmode != VIDEO_576I) { back[0] = LoadImage(MOTOKOIMG, 0); if(!back[0]) return; for(i = 0; i < 4; i++) sonicback[i]->scale = 1; back[0]->scale = 1; overlay->scale = 1; for(i = 0; i < 4; i++) sonicback[i]->y = 0; overlay->y = 0; } else { back[0] = LoadImage(MOTOKO480IMG, 0); if(!back[0]) return; back[0]->scale = 0; overlay->scale = 0; for(i = 0; i < 4; i++) { sonicback[i]->scale = 0; sonicback[i]->y = (dH - 240)/2; } overlay->y = (dH - 240)/2; if(offsetY) // center in PAL modes { for(i = 0; i < 4; i++) sonicback[i]->y -= offsetY; overlay->y -= offsetY; } } reload = 0; oldvmode = vmode; } if(selback == 1) { CalculateUV(x, 0, dW, 240, back[selback]); CalculateUV(x*2, 0, dW, 240, overlay); } StartScene(); DrawImage(back[selback]); if(selback == 1) DrawImage(overlay); if(text) { if(vmode != VIDEO_480P) DrawStringB(140, 30, 0, 0xff, 0, msg); else DrawStringB(450, 40, 0, 0xff, 0, msg); text --; } if(frame == invert) { shadow->x = x; shadow->y = y; DrawImage(shadow); frame = !frame; } else frame = !frame; if(sprite == 1) { buzz->x = x - 20; buzz->y = y - 20; DrawImage(buzz); } EndScene(); ControllerScan(); held = Controller_ButtonsHeld(0); if (held & PAD_BUTTON_UP) y --; if (held & PAD_BUTTON_DOWN) y ++; if (held & PAD_BUTTON_LEFT) { x --; FlipH(buzz, 0); FlipH(buzzshadow, 0); } if (held & PAD_BUTTON_RIGHT) { x ++; FlipH(buzz, 1); FlipH(buzzshadow, 1); } pressed = Controller_ButtonsDown(0); if (pressed & PAD_BUTTON_B) done = 1; if (pressed & PAD_BUTTON_X) { invert = !invert; if(invert) sprintf(msg, "Shadow on odd frames"); else sprintf(msg, "Shadow on even frames"); text = 60; } if (pressed & PAD_BUTTON_A) { if(selback < 3) selback ++; else selback = 0; } if (pressed & PAD_BUTTON_Y) { if(sprite == 0) { shadow = buzzshadow; sprite = 1; } else { shadow = ssprite; sprite = 0; } } if ( pressed & PAD_BUTTON_START ) { DrawMenu = 1; HelpData = DROPSHADOW; } if(x < back[selback]->x) x = back[selback]->x; if(y < back[selback]->y) y = back[selback]->y; if(x > back[selback]->w + back[selback]->x - shadow->w) x = back[selback]->w + back[selback]->x - shadow->w; if(y > back[selback]->h + back[selback]->y - shadow->h) y = back[selback]->h + back[selback]->y - shadow->h; currentframe ++; if(currentframe > 10) { currentsonic++; if(currentsonic > 3) currentsonic = 0; currentframe = 0; back[1] = sonicback[currentsonic]; } } FreeImage(&back[0]); for(i = 0; i < 4; i++) FreeImage(&sonicback[i]); FreeImage(&back[2]); FreeImage(&back[3]); FreeImage(&overlay); FreeImage(&ssprite); FreeImage(&buzz); FreeImage(&buzzshadow); }