Esempio n. 1
0
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;
}
Esempio n. 2
0
//<-- 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;
}
Esempio n. 3
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;
}
Esempio n. 4
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;
}
Esempio n. 5
0
/*
	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;
}