예제 #1
0
파일: editor.c 프로젝트: Almamu/portalDS
void initEditor(void)
{
	lcdMainOnBottom();
	videoSetMode(MODE_5_3D);
	videoSetModeSub(MODE_5_2D | DISPLAY_BG3_ACTIVE);
	
	vramSetPrimaryBanks(VRAM_A_TEXTURE,VRAM_B_TEXTURE,VRAM_C_SUB_BG,VRAM_D_TEXTURE);	
	
	glInit();
	
	glEnable(GL_TEXTURE_2D);
	// glEnable(GL_ANTIALIAS);
	glEnable(GL_BLEND);
	glEnable(GL_OUTLINE);
	
	glClearPolyID(63);
	glClearDepth(0x7FFF);
	glViewport(0,0,255,191);
	
	initVramBanks(1);
	initTextures();
	
	initRoomEdition();
	NOGBA("START mem free : %dko (%do)",getMemFree()/1024,getMemFree());

	fadeIn();
}
예제 #2
0
파일: game.c 프로젝트: dibas/portalDS
void killGame(void)
{
	fadeOut();
	NOGBA("KILLING IT");
	freePlayer();
	freeEnergyBalls();
	freeBigButtons();
	freeCubes();
	freeDoors();
	freeElevators();
	freeEmancipation();
	freePlatforms();
	freeTimedButtons();
	freeTurrets();
	freeWallDoors();
	freeSludge();
	freeRoom(&gameRoom);
	freePortals();
	freeState(NULL);
	freeSound();
	freePause();

	resetAllPI();

	NOGBA("END mem free : %dko (%do)",getMemFree()/1024,getMemFree());
}
예제 #3
0
파일: menu.c 프로젝트: Almamu/portalDS
void initMenu(void)
{
	lcdMainOnTop();
	videoSetMode(MODE_5_3D);
	videoSetModeSub(MODE_5_2D);
	
	vramSetPrimaryBanks(VRAM_A_TEXTURE,VRAM_B_TEXTURE,VRAM_C_SUB_BG,VRAM_D_TEXTURE);	
	
	initD3D();

	glInit();
	
	glEnable(GL_TEXTURE_2D);
	glEnable(GL_ANTIALIAS);
	glEnable(GL_BLEND);
	glEnable(GL_OUTLINE);
	
	glClearPolyID(63);
	glClearDepth(0x7FFF);
	glViewport(0,0,255,191);
	
	initVramBanks(2);
	initTextures();

	initMenuScene();

	initMenuButtons();

	//TEMP
	glLight(0, RGB15(31,31,31), cosLerp(4096), 0, sinLerp(4096));

	glMaterialf(GL_AMBIENT, RGB15(8,8,8));
	glMaterialf(GL_DIFFUSE, RGB15(24,24,24));
	glMaterialf(GL_SPECULAR, RGB15(0,0,0));
	glMaterialf(GL_EMISSION, RGB15(0,0,0));

	glSetToonTableRange(0, 15, RGB15(8,8,8)); //TEMP?
	glSetToonTableRange(16, 31, RGB15(24,24,24)); //TEMP?

	applyCameraState(&menuCamera,&cameraStates[4]);
	tempState=cameraStates[4];
	testTransition=startCameraTransition(&cameraStates[1],&cameraStates[4],64);

	setupMenuPage(startMenuPage, startMenuPageLength);

	logoMain=createTexture("logo.pcx", "menu");
	logoRotate=createTexture("rotate_logo.pcx", "menu");
	logoAlpha=31;

	glSetOutlineColor(0,RGB15(0,0,0)); //TEMP?
	glSetOutlineColor(1,RGB15(0,0,0)); //TEMP?
	glSetOutlineColor(7,RGB15(0,0,0)); //TEMP?

	NOGBA("END mem free : %dko (%do)",getMemFree()/1024,getMemFree());
	fadeIn();
}
예제 #4
0
void ds_global_breakpoint(char *where, int X) {
char error[255];
char memused[100];

	sprintf(memused,"U: %d / F: %d   ", getMemUsed(), getMemFree());       				
	sprintf(error,"<Breakpoint> \n %s \n %s",where,memused);
	
	
	// Prepare JSOB
	//PA_Reset3DSprites2Banks();
	//PA_3DProcess();
	ds_global_fillScreen(0,ds_global_getScreen1(),PA_RGB(0,0,16));
	ds_global_fillScreen(1,ds_global_getScreen0(),PA_RGB(0,0,16));
	
	// Fill JSOB
	PA_SmartText16bBuf_DS(ds_global_getScreen(0), 
										80, 48,  // base
										255 - 32, 191, // max
										"          -- Breakpoint!!!\n         /\n    MMMM\n   MMMMMM\n  MMMMMMM\n MDMM===M\n MDM=X=X\n MDM====M\n MDMM===M\n MNNM-MM\n  MNM-M\n  MM--M",
										PA_RGB(31,31,31), 1, 1, 255); // Features
	PA_CenterSmartText16bBuf_DS(ds_global_getScreen(1), 
										0, 0,  // base
										255, 64, // max
										"KSDS Breakpoint",PA_RGB(31,31,31), 3, 1); // Features
   PA_CenterSmartText16bBuf_DS(ds_global_getScreen(1), 
										0, 0,  // base
										255, 191, // max
										error,PA_RGB(31,31,31), 2, 1); // Features
  	if (X) {
		PA_CenterSmartText16bBuf_DS(ds_global_getScreen(1), 
										0, 191 - 32,  // base
										255, 191, // max
										"Please press X...",PA_RGB(31,31,31), 1, 1); // Features	
	} else {
		PA_CenterSmartText16bBuf_DS(ds_global_getScreen(1), 
										0, 191 - 32,  // base
										255, 191, // max
										"Please press Y...",PA_RGB(31,31,31), 1, 1); // Features	
	}   	

	// Show JSOB
   ds_global_paintScreen(1,ds_global_getScreen1(),0,0);
   ds_global_paintScreen(0,ds_global_getScreen0(),0,0);
   
	// Wait...
   PA_DisableSpecialFx(0);
  	PA_DisableSpecialFx(1);
  	if (X) {
	   while (!Pad.Newpress.X) {
	      PA_WaitForVBL();
		}
	} else {
	   while (!Pad.Newpress.Y) {
	      PA_WaitForVBL();
		}
	}   	
}
예제 #5
0
파일: turrets.c 프로젝트: Almamu/portalDS
void initTurrets(void)
{
	int i;
	for(i=0;i<NUMTURRETS;i++)
	{
		turrets[i].used=false;
		turrets[i].OBB=NULL;
	}
	
	loadMd2Model("models/turret.md2","turret.pcx",&turretModel);
	NOGBA("turret1 mem free : %dko (%do)",getMemFree()/1024,getMemFree());
	// generateModelDisplayLists(&turretModel, true, 1);
	generateModelDisplayLists(&turretModel, false, 1);
	NOGBA("turret2 mem free : %dko (%do)",getMemFree()/1024,getMemFree());
	turretShotTexture=createTexture("turret_shot.pcx", "textures");
	turretFireSFX=createSFX("turret_fire.raw", SoundFormat_16Bit);
	turretDeploySFX=createSFX("turret_deploy.raw", SoundFormat_16Bit);
	turretRetractSFX=createSFX("turret_retract.raw", SoundFormat_16Bit);
}
예제 #6
0
파일: game.c 프로젝트: dibas/portalDS
void gameFrame(void)
{
	int lala;
	switch(currentBuffer)
	{
		case false:
			#ifdef DEBUG_GAME
				iprintf("\x1b[0;0H");
				iprintf("%d FPS   \n", FPS);
				iprintf("%d (debug)   \n", debugVal);
				iprintf("%d (free ram)   \n", getMemFree()/1024);
				iprintf("%p (portal)   \n", portal1.displayList);
				iprintf("%p (portal)   \n", portal2.displayList);
			#endif
			cpuEndSlice();
			postProcess1();
			// iprintf("postproc : %d  \n",cpuEndSlice());
			render1();

			// if(keysDown()&KEY_SELECT)testStepByStep^=1; //TEMP
			#ifdef DEBUG_GAME
				iprintf("full : %d (%d)  \n",cpuEndTiming(),testStepByStep);
			#endif
			swiWaitForVBlank();
			cpuStartTiming(0);
			prevTiming=0;
			if(previousPortal)dmaCopy(VRAM_C, previousPortal->viewPoint, 256*192*2);			
			setRegCapture(true, 0, 15, 2, 0, 3, 1, 0);
			frmCNT++;
			break;
		case true:
			// cpuStartTiming(0);
			postProcess2();
			// iprintf("frm 2 : %d  \n",cpuGetTiming());
			render2();
			listenPI9();
			updateOBBs();
			// iprintf("frm 2 : %d  \n",cpuEndTiming());
			#ifdef DEBUG_GAME
				iprintf("fake frame : %d   \n",cpuEndTiming());
			#endif
			swiWaitForVBlank();
			cpuStartTiming(0);
			prevTiming=0;
			dmaCopy(VRAM_C, mainScreen, 256*192*2);			
			setRegCapture(true, 0, 15, 2, 0, 3, 1, 0);
			break;
	}
	
	// if(testStepByStep){int i=0;while(!(keysUp()&KEY_TOUCH)){scanKeys();listenPI9();swiWaitForVBlank();}NOGBA("WAITED");scanKeys();scanKeys();if(keysHeld()&KEY_SELECT)testStepByStep=false;}
	// else if(keysDown()&KEY_SELECT)testStepByStep=true;
	
	currentBuffer^=1;
}
예제 #7
0
파일: game.c 프로젝트: dibas/portalDS
void initGame(void)
{
	lcdMainOnTop();
	int oldv=getMemFree();
	NOGBA("mem free : %dko (%do)",getMemFree()/1024,getMemFree());
	NOGBA("initializing...");
	videoSetMode(MODE_5_3D | DISPLAY_BG3_ACTIVE);
	videoSetModeSub(MODE_5_2D | DISPLAY_BG3_ACTIVE);
	
	glInit();
	
	vramSetPrimaryBanks(VRAM_A_TEXTURE,VRAM_B_TEXTURE,VRAM_C_LCD,VRAM_D_MAIN_BG_0x06000000);
	vramSetBankH(VRAM_H_SUB_BG);
	vramSetBankI(VRAM_I_SUB_BG_0x06208000);
	
	glEnable(GL_TEXTURE_2D);
	// glEnable(GL_ANTIALIAS);
	glDisable(GL_ANTIALIAS);
	glEnable(GL_BLEND);
	glEnable(GL_OUTLINE);
	
	glSetOutlineColor(0,RGB15(0,0,0)); //TEMP?
	glSetOutlineColor(1,RGB15(0,0,0)); //TEMP?
	glSetOutlineColor(7,RGB15(31,0,0)); //TEMP?
	glSetToonTableRange(0, 15, RGB15(8,8,8)); //TEMP?
	glSetToonTableRange(16, 31, RGB15(24,24,24)); //TEMP?
	
	glClearColor(31,31,0,31);
	glClearPolyID(63);
	glClearDepth(0x7FFF);

	glViewport(0,0,255,191);
	
	// initVramBanks(1);
	initVramBanks(2);
	initTextures();
	initSound();
	
	initCamera(NULL);
	
	initPlayer(NULL);
	
	initLights();
	initParticles();
	
	initMaterials();
	
	loadMaterialSlices("slices.ini");
	loadMaterials("materials.ini");
	loadControlConfiguration("config.ini");
	
	initElevators();
	initWallDoors();
	initTurrets();
	initBigButtons();
	initTimedButtons();
	initEnergyBalls();
	initPlatforms();
	initCubes();
	initEmancipation();
	initDoors();
	initSludge();
	initPause();

	initText();

	NOGBA("lalala");

	getPlayer()->currentRoom=&gameRoom;
	
	currentBuffer=false;
	
	getVramStatus();
	fadeIn();
	
	mainBG=bgInit(3, BgType_Bmp16, BgSize_B16_256x256, 0, 0);
	bgSetPriority(mainBG, 0);
	REG_BG0CNT=BG_PRIORITY(3);
	
	#ifdef DEBUG_GAME
		consoleInit(&bottomScreen, 3, BgType_Text4bpp, BgSize_T_256x256, 16, 0, false, true);
		consoleSelect(&bottomScreen);
	#endif
	
	// glSetToonTableRange(0, 14, RGB15(16,16,16));
	// glSetToonTableRange(15, 31, RGB15(26,26,26));
	
	initPortals();
	
	//PHYSICS
	initPI9();

	strcpy(&mapFilePath[strlen(mapFilePath)-3], "map");
	newReadMap(mapFilePath, NULL, 255);
	
	transferRectangles(&gameRoom);
	makeGrid();
	generateRoomGrid(&gameRoom);
	gameRoom.displayList=generateRoomDisplayList(&gameRoom, vect(0,0,0), vect(0,0,0), false);
	
	getVramStatus();
	
	startPI();

	NOGBA("START mem free : %dko (%do)",getMemFree()/1024,getMemFree());
	NOGBA("vs mem free : %dko (%do)",oldv/1024,oldv);

	levelInfoCounter=60;
}
예제 #8
0
void Server::spawn(char *cmdline, void *p, ...) {
	Client *client = reinterpret_cast<Client *>(p);
	if (client->m_spawned) {
		printf("Spawn not valid -- allready spawned\n");
		return;
	}

	if (m_loadgame) {
		m_paused = false;
	} else {
		edict_t *ent = client->m_edict;
		memset(&ent->v, 0, m_progs->m_programs.entityfields * 4);
		ent->v.colormap = m_progs->NUM_FOR_EDICT(ent);
		ent->v.team = (client->m_colors & 15) + 1;
		ent->v.netname = client->m_name - m_progs->m_strings;

		// copy spawn parms out of the client_t

		for (int i = 0; i< NUM_SPAWN_PARMS; i++)
			(&m_progs->m_global_struct->parm1)[i] = client->m_spawn_parms[i];

		// call the spawn function

		m_progs->m_global_struct->time = m_time;
		m_progs->m_global_struct->self = m_progs->edict_to_prog(ent);
		m_progs->program_execute(m_progs->m_global_struct->ClientConnect);

		if ((sys.seconds() - client->m_netconnection->m_connecttime) <= m_time)
			printf("%s entered the game\n", client->m_name);

		m_progs->program_execute(m_progs->m_global_struct->PutClientInServer);
	}

	NetBuffer *msg = &client->m_msg;
	msg->clear();

	// send time of update
	msg->write_byte(svc_time);
	msg->write_float(m_time);

	for (int i = 0; i<m_maxclients; i++)
	{
		Client *client2 = &m_clients[i];
		msg->write_byte(svc_updatename);
		msg->write_byte(i);
		msg->write_string(client2->m_name);
		msg->write_byte(svc_updatefrags);
		msg->write_byte(i);
		msg->write_short(client2->m_old_frags);
		msg->write_byte(svc_updatecolors);
		msg->write_byte(i);
		msg->write_byte(client2->m_colors);
	}

	// send all current light styles
	for (int i = 0; i<MAX_LIGHTSTYLES; i++)
	{
		msg->write_byte(svc_lightstyle);
		msg->write_byte((char)i);
		msg->write_string(m_progs->m_lightstyles[i]);
	}

	//
	// send some stats
	//
	msg->write_byte(svc_updatestat);
	msg->write_byte(STAT_TOTALSECRETS);
	msg->write_long((int)m_progs->m_global_struct->total_secrets);

	msg->write_byte(svc_updatestat);
	msg->write_byte(STAT_TOTALMONSTERS);
	msg->write_long((int)m_progs->m_global_struct->total_monsters);

	msg->write_byte(svc_updatestat);
	msg->write_byte(STAT_SECRETS);
	msg->write_long((int)m_progs->m_global_struct->found_secrets);

	msg->write_byte(svc_updatestat);
	msg->write_byte(STAT_MONSTERS);
	msg->write_long((int)m_progs->m_global_struct->killed_monsters);


	//
	// send a fixangle
	// Never send a roll angle, because savegames can catch the server
	// in a state where it is expecting the client to correct the angle
	// and it won't happen if the game was just loaded, so you wind up
	// with a permanent head tilt
	edict_t *ent = m_progs->EDICT_NUM(1 + (client - m_clients));
	msg->write_byte(svc_setangle);
	for (int i = 0; i < 2; i++) {
		msg->write_angle(ent->v.angles[i]);
	}
	msg->write_angle(0);

	write_client_data_to_message(ent, msg);

	//SV_WriteClientdataToMessage(sv_player, &host_client->message);

	msg->write_byte(svc_signonnum);
	msg->write_byte(3);
	client->m_sendsignon = true;

	host.printf("pool  : %d used: %d free: %d\n", pool.size(), pool.used(), pool.size() - pool.used());
	host.printf("linear: %d used: %d free: %d\n", linear.size(), linear.used(), linear.size() - linear.used());
	host.printf("LINEAR  free: %dKB\n", (int)linearSpaceFree() / 1024);
	host.printf("REGULAR free: %dKB\n", (int)getMemFree() / 1024);
	host.printf("vbo_cb   : %d\n", vbo_cb);
	host.printf("vbo_tx   : %d\n", vbo_tx);
	host.printf("vbo_ls   : %d\n", vbo_ls);
	host.printf("mdl_cb   : %d\n", mdl_cb);
	host.printf("mdl_tx   : %d\n", mdl_tx);

}
예제 #9
0
파일: debug.c 프로젝트: Almamu/portalDS
size_t DS_FreeMem(void)
{
	return getMemFree();
}
예제 #10
0
void ds_global_errorHalt(char *where) {
char error[255];
char memused[100];

	sprintf(memused,"U: %d / F: %d   ", getMemUsed(), getMemFree());       				

	// Write Error String   
   switch (ds_global_error) {
      case DS_C_ERR_: 
         sprintf(error,"[E00] Unknown Error \n %s \n %s",where,memused);
         break;
      case DS_C_ERR_NOTILESET: 
         sprintf(error,"[E01] Tileset not found \n %s \n %s",where,memused);
         break;
      case DS_C_ERR_NOMAPBIN: 
         sprintf(error,"[E02] File Map.bin not found \n %s \n %s",where,memused);
         break;
      case DS_C_ERR_NOMEMORY: 
         sprintf(error,"[E03] Not enough memory \n %s \n %s",where,memused);
         break;
      case DS_C_ERR_NOMOREOBJECTS:
         sprintf(error,"[E04] This room has too many objects \n %s \n %s",where,memused);
         break;         
      case DS_C_ERR_NOWORLDINI: 
         sprintf(error,"[E05] No World.ini \n %s \n %s",where,memused);
         break;
      case DS_C_ERR_NOSAVEINI:
         sprintf(error,"[E06] No Savegame.ini \n %s \n %s",where,memused);
         break;   
		case DS_C_ERR_ZIPFAST:
		   sprintf(error,"[E07] Incompatible Map.bin (idx)\n %s \n %s",where,memused);
		   break;      
		case DS_C_ERR_NOHDD:
		   sprintf(error,"[E08] Not enough disk space \n %s \n %s",where,memused);
		   break;
		case DS_C_ERR_NOFOUND:
		   sprintf(error,"[E09] Not Found \n %s \n %s",where,memused);
		   break;
		case DS_C_ERR_BIGIMA:
		   sprintf(error,"[E10] Image too big\nSorry, you can't play this story\n%s \n %s",where,memused);
		   break;
	}
	
	// Prepare JSOD
	PA_Reset3DSprites2Banks();
	PA_3DProcess();
	ds_global_fillScreen(1,ds_global_getScreen1(),PA_RGB(16,0,0));
	ds_global_fillScreen(0,ds_global_getScreen0(),PA_RGB(16,0,0));
	
	// Fill JSOD
	PA_SmartText16bBuf_DS(ds_global_getScreen(1), 
										80, 48,  // base
										255 - 32, 191, // max
										"          -- Ouch! Sorry!!!\n         /\n    MMMM\n   MMMMMM\n  MMMMMMM\n MDMM===M\n MDM=X=X\n MDM====M\n MDMM===M\n MNNM-MM\n  MNM-M\n  MM--M",
										PA_RGB(31,31,31), 1, 1, 255); // Features
	PA_CenterSmartText16bBuf_DS(ds_global_getScreen(0), 
										0, 0,  // base
										255, 64, // max
										"KSDS Internal Error",PA_RGB(31,31,31), 3, 1); // Features
   PA_CenterSmartText16bBuf_DS(ds_global_getScreen(0), 
										0, 0,  // base
										255, 191, // max
										error,PA_RGB(31,31,31), 2, 1); // Features
	PA_CenterSmartText16bBuf_DS(ds_global_getScreen(0), 
										0, 191 - 32,  // base
										255, 191, // max
										"Please reboot your DS",PA_RGB(31,31,31), 1, 1); // Features	
	// Show JSOD
   ds_global_paintScreen(1,ds_global_getScreen1(),0,0);
   ds_global_paintScreen(0,ds_global_getScreen0(),0,0);
   
	// End...
   PA_DisableSpecialFx(0);
  	PA_DisableSpecialFx(1);
   while(1) {
	   PA_WaitForVBL();
	}
}
예제 #11
0
int ds_global_safeguardMem(int minmem) {
	return (getMemFree() < minmem);
}