static PyObject* osl_syncFrameEx(PyObject *self, PyObject *args, PyObject *kwargs) { int skip, maxskip, vsync; if (!PyArg_ParseTuple(args, "iii:syncFrameEx", &skip, &maxskip, &vsync)) return NULL; oslSyncFrameEx(skip, maxskip, vsync); Py_INCREF(Py_None); return Py_None; }
//<-- STAS: --> int oslDialogDrawAndWait(int dialogType) { int status = OSL_DIALOG_STATUS_INIT; OSL_IMAGE* img = oslCreateImage(480, 272, OSL_IN_RAM, OSL_PF_8888); oslSyncDrawing(); oslCopyImageTo(img, OSL_DEFAULT_BUFFER); // Save the currently drawn image while((status >= 0) && (status != OSL_DIALOG_STATUS_NONE) && !osl_quit) { if (!oslSyncFrameEx(0,0,1)) { oslStartDrawing(); oslCopyImageTo(OSL_DEFAULT_BUFFER, img); // Restore the image drawn by the user app switch (dialogType) { case OSL_DIALOG_MESSAGE: case OSL_DIALOG_ERROR: case OSL_DIALOG_NETCONF: oslDrawDialog(); status = oslGetDialogStatus(); break; case OSL_DIALOG_OSK: oslDrawOsk(); status = oslGetOskStatus(); break; case OSL_DIALOG_SAVELOAD: oslDrawSaveLoad(); status = oslGetLoadSaveStatus(); break; case OSL_DIALOG_BROWSER: oslDrawBrowser(); status = oslGetBrowserStatus(); break; } oslEndDrawing(); } oslEndFrame(); } oslDeleteImage(img); return (status < 0)? status : 0; }
int main(int argc, char *argp[]){ // Init More Stuff... // Initialize Osl oslInit(3); // Based on Onelua xD // Init Crls Functions.. sceCtrlSetSamplingCycle(0); sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); // Init Configs Stuff. InitConfig(); memcpy(menuConfigDefault, &menuConfig, sizeof(menuConfig)); //Sauvegarde pour plus tard // Init Stuff GU "Video" oslInitGfx(OSL_PF_8888, 1);// OSL_PF_5650 Aqui estaba esto.. Cambiado a 8888 oslInitConsole(); oslStartDrawing(); VideoGuScreenClear();// Check If really its vital /* Añadido oslIntraFontInit(INTRAFONT_CACHE_ALL | INTRAFONT_STRING_UTF8); OSL_FONT * oneFont = oslLoadFontFile("flash0:/font/jpn0.pgf"); oslIntraFontSetStyle(oneFont, 0.7, RGB(255,255,255), RGBA(0,0,0,0), INTRAFONT_ALIGN_LEFT); oslSetFont(oneFont); */ //Main screen: in VRAM for speed Screen.scrBuffer = oslGetUncachedPtr(oslVramMgrAllocBlock(SCR_BUFFER_SIZE)); Screen.pal = oslGetUncachedPtr(oslVramMgrAllocBlock(256*2)); //Sub screen: in RAM for mem sparing ScreenTemp.scrBuffer = oslGetUncachedPtr(malloc(SCR_BUFFER_SIZE)); ScreenTemp.pal = NULL; bitmap.data = (unsigned char*)Screen.scrBuffer; /* Term of stuff gu */ // Init More Vars.. u32 nFrame, nDrawnFrames, skip=0, framerate; int nbRenderedFramesPerSec, nbVirtualFramesPerSec = 0, lastVCount = 0; int frameskip = 0; memset(&bitmap, 0, sizeof(bitmap_t)); bitmap.width = 256; bitmap.height = 192; bitmap.depth = menuConfig.video.renderDepth; bitmap.pitch = 256 * menuConfig.video.renderDepth / 8; menuConfig.file.filename[0] = '\0'; sms.save = 1; // Display the menu to load up the ROM // displayMenu(); menuIsInGame = 0; //menuPlusShowMenu(); MenuPlusAction(MA_LOADROM, "ms0:/Poke_Oro.gbc"); //Bidouille pour détecter les choses qui ont changé MenuOptionsConfigure(-1); MenuOptionsConfigure(0); VideoGuScreenClear(); //Système SmsInit(); nFrame = nDrawnFrames = 0; menuConfig.video.turbo = menuConfig.video.pause = 0; nbRenderedFramesPerSec = 0; gblFramerate = gblVirtualFramerate = 0; menuUpdateRender = 0; //Système if (gblMachineType == EM_SMS) system_poweron(); while(1){ // Principal Cycle //Pal support if (menuConfig.video.country == 1) framerate = 50; else framerate = 60; oslSetFramerate(framerate); if (menuUpdateRender) nDrawnFrames = 0, menuUpdateRender = 0; if (gblMachineType == EM_SMS) ControlsUpdate(); else if (gblMachineType == EM_GBC){ gbe_refresh(); gbe_updatePad(); } if (osl_quit) break; //Framerate if (menuConfig.video.cpuTime == 2){ int vcount = osl_vblCount; if (!skip) nbRenderedFramesPerSec++; nbVirtualFramesPerSec++; if (vcount / framerate > lastVCount / framerate) { gblFramerate = nbRenderedFramesPerSec; gblVirtualFramerate = nbVirtualFramesPerSec; nbRenderedFramesPerSec = 0; nbVirtualFramesPerSec = 0; } lastVCount = vcount; } if (!menuConfig.video.pause){ if (gblMachineType == EM_SMS){ system_frame(skip); if (menuConfig.sound.turboSound /*== 2*/ || !menuConfig.video.turbo){ //On peut commencer à jouer le son: tout est initialisé (sinon il faut attendre) soundPause = 0; if (!menuConfig.sound.perfectSynchro){ SoundUpdate(); } } } else if (gblMachineType == EM_GBC){ //Run one GB frame gb_doFrame(skip); soundPause = 0; if (menuConfig.sound.turboSound /*== 2*/ || !menuConfig.video.turbo) { soundPause = 0; if (!menuConfig.sound.perfectSynchro) { snd_render_orig(snd.output, snd.sample_count); SoundUpdate(); } } } } if (!skip && menuConfig.video.syncMode == 0){ //if (gblMachineType == EM_SMS) VideoGuUpdate(nDrawnFrames, menuConfig.video.render); frameReady = 1; nDrawnFrames++; } oslDrawString(10,10,"Mod By Davis"); //vsyncAdd = 0; //redo: if (menuConfig.video.turbo){ if (!skip){ oslEndDrawing(); oslSwapBuffers(); } skip = nFrame % (menuConfig.video.turboSkip + 1); } else{ int vsync = 4 /*+ vsyncAdd*/; if (menuConfig.video.vsync == 2) vsync |= 1; /*else if (menuConfig.video.vsync == 1) vsync |= 8;*/ /*if (autoFskip && !skip) tmp = oslMeanBenchmarkTestEx(OSL_BENCH_END, 0);*/ skip = oslSyncFrameEx(oslMinMax(frameskip+1, menuConfig.video.frameskip, menuConfig.video.frameskipMax), menuConfig.video.frameskipMax, vsync); /*if (autoFskip && !skip) { //Store the CPU usage (in percent) cpuTime = tmp * 6 / 1000; oslBenchmarkTest(OSL_BENCH_START); }*/ } /*if (autoFskip){ if (!skip){ cpuTime = oslMeanBenchmarkTestEx(OSL_BENCH_GET_LAST, 0) * 6 / 1000; oslMeanBenchmarkTestEx(OSL_BENCH_START, 0); targetFrameskip = skippedFrames; skippedFrames = 0; } else{ skippedFrames++; } }*/ if (!skip && menuConfig.video.syncMode == 1) { //if (gblMachineType == EM_SMS) VideoGuUpdate(nDrawnFrames, menuConfig.video.render); frameReady = 1; nDrawnFrames++; } nFrame++; //Pal /*if (menuConfig.video.country == 1 && nFrame % 6 == 0) { if (!skip) vsyncAdd = 16; goto redo; }*/ //In game, menu not currently shown - WARNING: DONT MOVE THIS, THE MESSAGEBOX CODE RELIES ON menuIsInGame == 2 TO KNOW IF THE GAME IS CURRENTLY RUNNING (or menuIsInGame == 1 = menu is shown) menuIsInGame = 2; if (menuDisplaySpecialMessage) MenuSpecialMessageDisplay(); } // End Of While SmsTerm(); //SmsEmulate(); // End Emulate SaveMyPlacesFile(); sceKernelExitGame(); return 0; }
int oslShowSplashScreen2() { OSL_IMAGE *logo, *temp; int skip = 0; float y, vy; int frameNb, phase; float vyList[TABW]; float speeds[TABH][TABW]; int i, j, fade; float positions[TABH][TABW]; temp = oslLoadImageFile("logo/neoflash.png", OSL_IN_RAM, OSL_PF_5650); if (!temp) return 0; logo = oslCreateSwizzledImage(temp, OSL_IN_VRAM); oslDeleteImage(temp); if (!logo) return 0; y = -logo->sizeY; vy = 1.0f; frameNb = 0; phase = 1; fade = 0; for (i=0;i<LARG/TILE;i++) vyList[i] = (rand() % 7500) / 10000.f + 0.25f; for (j=0;j<HAUT/TILE;j++) for (i=0;i<LARG/TILE;i++) { speeds[j][i] = vyList[i] - (HAUT/TILE - j) * ((rand() % 1000) / 10000.0f + 0.04f); positions[j][i] = j * TILE; } while(!osl_quit && fade < 31 && frameNb < 220) { oslReadKeys(); if (phase < 9) { y += vy; if (y + logo->sizeY >= HAUT) { if (vy > 0) vy -= 0.8f; else vy -= 0.4f; if (phase % 2 == 1) phase++; } else if (phase == 1) vy += 0.4f; else { if (vy > 0) vy += 0.4f; else vy += 0.8f; if (phase % 2 == 0) phase++; } } else { y = 0; frameNb++; } if (frameNb > 120) { for (j=0;j<HAUT/TILE;j++) for (i=0;i<LARG/TILE;i++) { speeds[j][i] += 0.15f; if (speeds[j][i] > 0.0f) positions[j][i] += speeds[j][i]; } } if (fade > 0) fade++; if ((osl_keys->pressed.value & (OSL_KEYMASK_START|OSL_KEYMASK_CIRCLE|OSL_KEYMASK_CROSS)) && fade == 0) fade = 1; if (!skip) { oslStartDrawing(); oslClearScreen(0); if (frameNb <= 120) { logo->y = y; if (y < 0) { logo->stretchY = logo->sizeY; logo->stretchX = logo->sizeX; logo->x = 0; } else { logo->stretchY = logo->sizeY - y; logo->stretchX = logo->sizeX + y; logo->x = - y / 2; } oslDrawImage(logo); } else LogoDrawTiles(logo, positions); if (fade > 0) { oslSetAlpha(OSL_FX_RGBA, 0); oslDrawFillRect(0, 0, LARG, HAUT, RGBA(0, 0, 0, fade<<3)); /* oslSetAlpha(OSL_FX_SUB, 0xff); oslDrawFillRect(0, 0, LARG, HAUT, RGB(fade<<3, fade<<3, fade<<3)); oslSetAlpha(OSL_FX_DEFAULT, 0);*/ } oslEndDrawing(); } skip = oslSyncFrameEx(1,4,0); } oslDeleteImage(logo); return 1; }
/* Affiche le logo OSLib Ne cherchez pas à comprendre cette fonction si vous débutez :p */ int oslShowSplashScreen1() { OSL_IMAGE *texte, *etoile; OSL_IMAGE *fond; int skip=0; int x, y; int angle, nFrame, val; float dist; int pousNb; float pousX[100], pousY[100]; int i, imgAngle; float tblVitPous[8] = {0.2, 0.3, 0.15, 0.2, 0.35, 0.2, 0.15, 0.3}; int fade = 0; //Add these files to the list oslAddVirtualFileList((OSL_VIRTUALFILENAME*)__osl_logo_ram_files, oslNumberof(__osl_logo_ram_files)); texte = oslLoadImageFile("ram:/logo/texte.png", OSL_IN_VRAM | OSL_UNSWIZZLED, OSL_PF_8888); if (!texte) return 0; logoDecalePixels(texte); oslStartDrawing(); oslSetDithering(1); oslSetDrawBuffer(texte); oslDrawGradientRect(0,0, WIDTH,HEIGHT, RGB(0,0,0), RGB(0,0,128), RGB(0,0,128), RGB(0,0,0)); oslSetDrawBuffer(OSL_DEFAULT_BUFFER); oslEndDrawing(); oslMoveImageTo(texte, OSL_IN_RAM); oslSwizzleImage(texte); fond = logoCreeImageFond(); if (!fond) { oslDeleteImage(texte); return 0; } oslSetTransparentColor(RGB(255,0,254)); etoile = oslLoadImageFile("ram:/logo/etoile.png", OSL_IN_RAM, OSL_PF_5551); if (!etoile) { oslDeleteImage(texte); oslDeleteImage(fond); return 0; } oslDisableTransparentColor(); texte->centerX = texte->sizeX / 2; texte->centerY = texte->sizeY / 2; angle = 270; dist = 160.0f; nFrame = 0; pousNb=0; imgAngle = 78; while (!osl_quit) { if (!skip) { oslStartDrawing(); logoCreePaletteRotative(fond, 2000-nFrame*8); oslDrawImage(fond); x = WIDTH/2; y = HEIGHT/2; if (dist > 0) { x += oslCos(angle, dist); y -= oslSin(angle, dist); texte->stretchX = texte->sizeX * (1+dist*0.03f); texte->stretchY = texte->sizeY * (1+dist*0.03f); texte->angle = imgAngle; } else { texte->stretchX = texte->sizeX; texte->stretchY = texte->sizeY; texte->angle = 0; } oslSetBilinearFilter(1); //Effet spécial pour le texturage des nuages if (nFrame >= 50) { val = (nFrame - 50) * 6; if (val > 255) val = 255; oslSetAlpha(OSL_FX_ALPHA|OSL_FX_COLOR, RGBA(val,val,val,0xff)); } else oslSetAlpha(OSL_FX_ALPHA|OSL_FX_COLOR, RGBA(0,0,0,0xff)); oslDrawImageXY(texte, x, y); oslSetImageTileSize(etoile, 0,0, 16,16); oslCorrectImageHalfBorder(etoile); oslImageSetRotCenter(etoile); etoile->angle = 360 - ((nFrame * 3) % 360); etoile->stretchX = 16; etoile->stretchY = 16; oslSetAlpha(OSL_FX_ALPHA|OSL_FX_COLOR, RGBA(0xff,0,0,0xff)); oslDrawImageXY(etoile, 480-9, 272-9); //Dessine l'étoile if (nFrame >= 140 && nFrame < 240) { val = nFrame - 140; angle = (val * 5) % 360; i = nFrame - (240 - 256/12); if (val*16 < 255) oslSetAlpha(OSL_FX_ALPHA, val*16); else if (i > 0) oslSetAlpha(OSL_FX_ALPHA, 255-i*12); else oslSetAlpha(OSL_FX_RGBA, 0); etoile->angle = (val * 8) % 360; etoile->x = WIDTH/2 + oslCosi(angle, 120); etoile->y = HEIGHT/2 - oslSini(angle, 50); etoile->stretchX = 16 * 2; etoile->stretchY = 16 * 2; oslDrawImage(etoile); oslResetImageHalfBorder(etoile); } //Restaure l'environnement oslSetBilinearFilter(0); //Dessine les poussières oslSetAlpha(OSL_FX_ADD, 0xff); oslSetImageTileSize(etoile, 0,16, 8,8); oslImageSetRotCenter(etoile); for (i=0;i<pousNb;i++) oslDrawImageSimpleXY(etoile, pousX[i], pousY[i]); oslSetAlpha(OSL_FX_RGBA, 0); // oslSysBenchmarkDisplay(); //Fade if (nFrame < 32) oslDrawFillRect(0,0, WIDTH,HEIGHT, RGBA(0,0,0,255-(nFrame<<3))); if (fade > 0) { if (fade >= 31) fade = 31; oslDrawFillRect(0,0, WIDTH,HEIGHT, RGBA(0,0,0,(fade<<3))); } oslEndDrawing(); } nFrame++; //L'étoile tourne sur le logo if (nFrame >= 140 && nFrame < 240) { val = nFrame - 140; angle = (val * 5) % 360; if (angle >= 200 && angle <= 340) { pousX[pousNb] = WIDTH/2 + oslCos(angle, 120); pousY[pousNb] = HEIGHT/2 - oslSin(angle, 50); pousNb++; } } if (fade > 0) fade++; if (nFrame > 290 && fade == 0) fade = 1; for (i=0;i<pousNb;i++) { pousY[i] += tblVitPous[i%8]; } dist -= 2.0f; angle -= 4; imgAngle -= 1; if (angle < 0) angle += 360; skip = oslSyncFrameEx(1,4,0); //Lecture des touches oslReadKeys(); if ((osl_keys->pressed.value & (OSL_KEYMASK_START|OSL_KEYMASK_CIRCLE|OSL_KEYMASK_CROSS)) && fade == 0) fade = 1; if (fade >= 32) break; } oslSetAlpha(OSL_FX_RGBA, 0); oslDeleteImage(texte); oslDeleteImage(fond); oslDeleteImage(etoile); oslRemoveVirtualFileList((OSL_VIRTUALFILENAME*)__osl_logo_ram_files, oslNumberof(__osl_logo_ram_files)); return 1; }