Esempio n. 1
0
void use_skill(int keypress)
{
	/* this function is entered with a keypress from ac_fight0 and so on*/
	/* the keypress is used to determine what attack is used */

	/* 1. the player already chose the attack (int keypress), now it's time for the enemy */
	// TODO enemy always uses skill 0

	/* 2. calculate damage */
	/* player does damage */
	/* Wu Xing cycles:
	   Wood causes +FIRE, -EARTH
	   Fire causes +EARTH, -METAL
	   Earth causes +METAL, -WATER
	   Metal causes +WATER, -WOOD
	   Water causes +WOOD, -FIRE
	   */

	if (keypress <= 4 && strcmp(player.skill[keypress]->name,"Unused") != 0)
	{
		// Player attacks
		skill_effect(&player, &enemy, player.skill[keypress]);
		// Enemy attack
		skill_effect(&enemy, &player, enemy.skill[0]);

		/* 3. check for dead player/enemy */
		int enemy_dead = fight_check_dead();

		/* 4. update stats and display them IF THE ENEMY DIDN'T DIE */
		if (!enemy_dead) {
			ncurs_fightinfo(&player, 0);
			ncurs_fightinfo(&enemy, 3);
		}
		wrefresh(game_win);
	}
	else
	{
		ncurs_log_sysmsg(_("You dont have a skill in slot %d"), keypress+1);
	}
}
Esempio n. 2
0
void combat_seeifready()
{
// loop through all the players in combat
int allready = 1;


//if (is_online(partymember1.id) || is_online(partymember2.id))	// it's multiplayer combat
if (combat_ismulti())	// it's multiplayer combat
	{
	// loop through all the effects of all party members taking part in the fight
	for (int i = 0; i <= 2; i++)
		if (player_party.characters[i]->incombat)
			{
			if (player_party.characters[i]->turnready < 0)
				{
				ncurs_log_sysmsg("still waiting for: %s",player_party.characters[i]->name);
				allready = 0;	// still waiting for a keypress
				}
			}
	}
else	// it's single player combat
	{
	allready = 1;
	}

// COMBAT EFFECTS START HERE
if (allready) // if everyone is ready, do combat stuff
	{
	ncurs_log_sysmsg(_("all players have committed turns, calculating effects"));
	ncurs_log_sysmsg(_("Combat resolution============================"));
	// combat stuff begins here

	// players attack enemies
	for (int i = 0; i <= 2; i++)
		if (player_party.characters[i]->incombat)
			skill_effect(player_party.characters[i], enemy_party.characters[player_party.characters[i]->combattarget],player_party.characters[i]->skill[player_party.characters[i]->turnready]);

	// enemies attack players
	// choose which player to attack
	int dest = 0;
	int players = 0;
	for (int i = 0; i <= 2; i++)
		if (player_party.characters[i]->incombat)
			players++;
	// players now holds the number of players in combat, randomize one of them
	int i = 0;

	// enemies attack here
	for (int j = 0; j <= 2; j++)
	{
		if (enemy_party.characters[j]->incombat)	// only enemies who are in combat attack
		{
			while (i == 0)	// loop until you find an acceptable target, then attack
			{		
				dest = rand() % players;
				// dest holds a number from 0..players in combat
				if (player_party.characters[dest]->incombat) // this player is in combat -> acceptable target
					i = 1;
			}

			// TODO: random enemy skill (enemies should have more than one skill..
			skill_effect(enemy_party.characters[j], player_party.characters[dest], enemy_party.characters[j]->skill[0]);
		}
	}


	ncurs_log_sysmsg(_("============================================="));
	// combat stuff ends here

	// reset turnready
	for (int i = 0; i <= 2; i++)
		if (player_party.characters[i]->incombat)
			player_party.characters[i]->turnready = -1;	

	/* 3. check for dead player/enemy */
	int all_enemies_dead = fight_check_dead();
	/* 4. update stats and display them IF THE ENEMY DIDN'T DIE */
	if (!all_enemies_dead)
		ac_update_fightscreen();
	else
		{
		ncurs_clear_fightwindows();
		ncurs_modal_msg(_("All enemies are slain! The battle is over"));
		// ac_dungeons makes the player go up a dungeon level
		// -> to stay at the same level, decrease the level here
		player.dungeon_lvl--;
		ac_dungeons();
		}
	}
}