Example #1
0
void bloodSplatter(int x, int y, float intensity) {
	drawCharBackEx(getLevelConsole(), x, y, TCOD_color_RGB(200, 15, 15), TCOD_BKGND_ALPHA(intensity));
}
Example #2
0
void Gui::render(){
	//clear the off-screen consoles
	con->setDefaultBackground(TCODColor::black);
	con->clear();
	sidebar->setDefaultBackground(TCODColor::black);
	sidebar->clear();
	
	sidebar->setDefaultForeground(TCODColor(100,180,250));
	sidebar->printFrame(0,0,MSG_X,engine.screenHeight - con->getHeight(),
		true, TCOD_BKGND_ALPHA(50),"CHARACTER INFO");
	
	if (engine.player->destructible->shield) {
		//draw the shield bar, if it is there
		renderBar(1,5,BAR_WIDTH,"SHIELD",engine.player->destructible->shield,
			engine.player->destructible->maxShield,
			TCODColor::green,TCODColor::darkerGreen);
	} else {
		//draw the health bar
		renderBar(1,5,BAR_WIDTH,"HP",engine.player->destructible->hp,
			engine.player->destructible->maxHp,
			TCODColor::lightRed,TCODColor::darkerRed);
	}
	
	//draw the palyer's mana bar, if they have one
	if (engine.player->caster) {
		renderBar(1,7,BAR_WIDTH,"MANA",engine.player->caster->mana,
			engine.player->caster->maxMana,
			TCODColor::lightBlue,TCODColor::darkerBlue);
	}


	//draw the XP bar
	char xpTxt[128];
	sprintf(xpTxt,"XP(%d)",engine.player->xpLevel);
	renderBar(1,9,BAR_WIDTH,xpTxt,engine.player->destructible->xp,
		((PlayerAi*)engine.player->ai)->getNextLevelXp(engine.player),TCODColor::lightViolet,TCODColor::darkerViolet);
	
	//draw the last target's hp bar
	if ((engine.player->attacker->lastTarget != NULL)&&(engine.player->attacker->lastTarget!=engine.player)&&(!engine.player->attacker->lastTarget->destructible->isDead())) {

		if (engine.player->attacker->lastTarget->destructible->shield){
			renderBar(1,13,BAR_WIDTH, "target's Shield",engine.player->attacker->lastTarget->destructible->shield,
				engine.player->attacker->lastTarget->destructible->maxShield,TCODColor::green, TCODColor::darkerGreen);
		} else {
			renderBar(1,13,BAR_WIDTH, "target's HP",engine.player->attacker->lastTarget->destructible->hp,
				engine.player->attacker->lastTarget->destructible->maxHp,TCODColor::lightRed, TCODColor::darkerRed);
		}
    }
	
	//draw the message log
	int y=0;
	float colorCoef = 0.4f;
	for (Message **it = log.begin(); it != log.end(); it++){
		Message *message = *it;
		con->setDefaultForeground(message->col * colorCoef);
		con->print(0,y,message->text);
		y++;
		if (colorCoef < 1.0f) {
			colorCoef+=0.3f;
		}
	}
	
	//dungeon level
	sidebar->setDefaultForeground(TCODColor::white);
	sidebar->print(3,11,"Dungeon level %d", engine.level);
	
	//character name
	sidebar->print(3,3,"Name: %s",engine.player->getName(true));

	if (engine.player->caster && engine.player->caster->hasCantus()) {
		sidebar->setDefaultForeground(engine.player->caster->cantusColor());
		sidebar->print(1,17,"Current Cantus: %s",engine.player->caster->getCantus());
		sidebar->print(1,19,"%d",engine.player->caster->cantusValue);
	}
	
	//blit the GUI  consoles on the root console
	TCODConsole::blit(con,0,0,engine.screenWidth,PANEL_HEIGHT,
		TCODConsole::root,0,engine.screenHeight-PANEL_HEIGHT);
	TCODConsole::blit(sidebar,0,0,MSG_X,engine.screenHeight-PANEL_HEIGHT,
		TCODConsole::root,0,0);
}
Example #3
0
void drawLights() {
	int x, y, x1, y1, highest, distMod, changed = 1;
	light *ptr = LIGHTS;
	TCOD_console_t lightConsole = getLightConsole();
	lightMap = malloc(sizeof(double[255][255]));
	
	for (y = 0; y <= WINDOW_HEIGHT; y++) {
		for (x = 0; x <= WINDOW_WIDTH; x++) {
			lightMap[x][y] = 0;
		}
	}

	while (ptr != NULL) {
		_drawLight(ptr);

		ptr = ptr->next;
	}
	
	while (changed) {
		changed = 0;
		
		for (y = 0; y <= WINDOW_HEIGHT; y++) {
			for (x = 0; x <= WINDOW_WIDTH; x++) {
				if (!isPositionWalkable(x, y)) {
					continue;
				}
				
				highest = -1;
				
				if (lightMap[x][y]) {
					continue;
				}
				
				for (y1 = -1; y1 <= 1; y1++) {
					for (x1 = -1; x1 <= 1; x1++) {
						if (!isPositionWalkable(x + x1, y + y1)) {
							continue;
						}
						
						distMod = lightMap[x + x1][y + y1];
						
						if (lightMap[x + x1][y + y1] > highest) {
							highest = lightMap[x + x1][y + y1];
						}
						
						//drawCharBackEx(lightConsole, x + x1, y + y1, TCOD_color_RGB(250 - distMod, 200 - distMod, 0), TCOD_BKGND_ALPHA(1.f));
					}
				}
				
				
				if (highest > 14) {
					highest -= 14;
					
					if (highest < 0) {
						continue;
					}
					
					lightMap[x][y] = highest;
					changed = 1;
				}
			}
		}
	}
	
	for (y = 0; y <= WINDOW_HEIGHT; y++) {
		for (x = 0; x <= WINDOW_WIDTH; x++) {
			if (lightMap[x][y]) {
				distMod = lightMap[x][y];
				drawCharBackEx(lightConsole, x, y, TCOD_color_RGB(65, 65, 65), TCOD_BKGND_ALPHA(distMod / 64.f));
				TCOD_map_set_properties(LIGHT_MAP, x, y, 1, 1);
			}
			
		}
	}
}
Example #4
0
Menu::MenuItemCode Menu::pick(DisplayMode mode) {
	//the image stuff is supposed to be here
	//no image off the website, so ignore the image stuff for now
	
	int selectedItem = 0;
	int menux,menuy;
	
	if (mode == PAUSE) {
		menux = engine.screenWidth/2 - PAUSE_MENU_WIDTH/2;
		menuy = engine.screenHeight/2 - PAUSE_MENU_HEIGHT/2;
		TCODConsole::root->setDefaultForeground(TCODColor(200,180,50));
		TCODConsole::root->printFrame(menux,menuy,PAUSE_MENU_WIDTH,PAUSE_MENU_HEIGHT,true,
			TCOD_BKGND_ALPHA(70),"PAUSE");
		menux += 2;
		menuy += 3;
	} else {
		//static TCODImage img("harold.png");
		//img.blit2x(TCODConsole::root,0,0);
		menux = 65;
		TCODConsole::root->setDefaultForeground(TCODColor::black);
		TCODConsole::root->print(18,2,"HAROLD THE SORCEROR");
		menuy = TCODConsole::root->getHeight()/3;
		TCODConsole::root->setDefaultBackground(TCODColor::black);
	}
	while(!TCODConsole::isWindowClosed()) {
		
		int currentItem = 0;
		for (MenuItem **it = items.begin(); it != items.end(); it++) {
			if (currentItem == selectedItem) {
				TCODConsole::root->setDefaultForeground(TCODColor::lighterOrange);
			} else {
				TCODConsole::root->setDefaultForeground(TCODColor::blue);
			}
			TCODConsole::root->print(menux,menuy+currentItem*3,(*it)->label);
			currentItem++;
		}
		TCODConsole::flush();
		
		//check key presess
		TCOD_key_t key;
		TCODSystem::checkForEvent(TCOD_EVENT_KEY_PRESS,&key,NULL);
		switch(key.vk) {
			case TCODK_UP:
				selectedItem--;
				if (selectedItem < 0) {
					selectedItem = items.size()-1;
				}
			break;
			case TCODK_DOWN:
				selectedItem = (selectedItem + 1) % items.size();
			break;
			case TCODK_ENTER: return items.get(selectedItem)->code;
			case TCODK_ESCAPE: 
				if (mode == PAUSE) {
					return RESUME;
				}
			break;
			default: break;
		}
		
	}
	return NONE;
}