Example #1
0
		private static int			DoLaserAttack(BasicUnitModel attacker, BasicUnitModel defender)
		{
			var attackBonus  = RNG.GetDiceDiv2();
			var defenseBonus = RNG.GetDiceDiv2();
			var dmg = attacker.Attack  + attackBonus;
			var def = defender.Defense + defenseBonus;
			var rawResultDamage = dmg - def;
			var resultDamage = rawResultDamage > 0 ? dmg - def : 0;
			
			EventLog.PrintPlain(string.Format(Lang["Battle_Laser_Attack"], 
				attacker.IsPlayer ? Player.Name : attacker.Name, 
				Enums.Get_Name((BattleActionSuccess)attackBonus),
				defender.IsPlayer ? Player.Name : defender.Name,
				attackBonus),
				false);
			
			EventLog.PrintPlain(string.Format(Lang["Battle_Laser_Defense"], 
				defender.IsPlayer ? Player.Name : defender.Name,
				Enums.Get_Name((BattleActionSuccess)defenseBonus),
				defenseBonus),
				false);

			EventLog.PrintPlain(string.Format(Lang["Battle_Laser_Result"], 
				attacker.Attack, attackBonus, defender.Defense, defenseBonus, resultDamage, rawResultDamage));

			if (attackBonus == 3  &&  defenseBonus == 1  &&  RNG.GetDice() <= GameConfig.CriticalChanceLaser)
				{
					if (attacker.IsPlayer  &&  !defender.IsImmuneToCrits)
					{
						EventLog.Print("Battle_Laser_CriticalPlayer");
						defender.CurrentHP = 0;
					}
					else
					{
						EventLog.Print("Battle_Laser_CriticalEnemy", Enums.Get_Name(Get_EquipToDamage()));
					}
				}

			return resultDamage;			
		}
Example #2
0
		private static int			DoMissileAttack(BasicUnitModel attacker, BasicUnitModel defender)
		{
			EventLog.Print("Battle_Missile_Fired", attacker.IsPlayer ? Player.Name : attacker.Name,  defender.IsPlayer ? Player.Name : defender.Name, false);

			attacker.CurrentMissiles--;
			var isHit = RNG.GetDice() <= GameConfig.MissileAccuracy;

			if (isHit)
			{
				if (!defender.IsPlayer)
				{
					((NPC_Model) defender).IsRelevealedECM = true;
				}

				if (defender.ECM == EquipmentState.Yes)
				{
					EventLog.Print("Battle_Missile_UseECM", defender.IsPlayer ? Player.Name : defender.Name, false);
					if (RNG.GetDice() <= GameConfig.ECM_Effeciency)
					{
						EventLog.Print("Battle_Missile_Destroyed");
						return 0;
					}
					EventLog.Print("Battle_Missile_ECM_Failed", GameConfig.MissileDamage);									
				}
				else
				{
					EventLog.Print("Battle_Missile_DirectHit", GameConfig.MissileDamage);
				}

				if (RNG.GetDice() <= GameConfig.CriticalChanceMissile)
				{
					if (attacker.IsPlayer  &&  !defender.IsImmuneToCrits)
					{
						EventLog.Print("Battle_Missile_CriticalPlayer");
						defender.CurrentHP = 0;
					}
					else
					{
						EventLog.Print("Battle_Missile_CriticalEnemy", Enums.Get_Name(Get_EquipToDamage()));
					}
				}
				
				return GameConfig.MissileDamage;
			}
			EventLog.Print("Battle_Missile_Missed"); 
			return 0;	
		}
Example #3
0
		private static void			DoAttack(BasicUnitModel attacker, BasicUnitModel defender, NPC_Model enemy, AttackType attackType)
		{
			var resultDamage = 0;
			switch (attackType)
			{
				case AttackType.Laser	:
					resultDamage = DoLaserAttack(attacker, defender);
					break;

				case AttackType.Missile	:
					resultDamage = DoMissileAttack(attacker, defender);
					if (attacker.IsPlayer)
						Player.Statistics.MissilesUsed++;
					break;
			}

			if (attacker.IsPlayer)	Player.Statistics.DamageInflicted	+= resultDamage;
			else					Player.Statistics.DamageTaken		+= resultDamage;

			defender.CurrentHP -= (resultDamage);
			if (defender.IsDead)
			{
				defender.CurrentHP = 0;
				EventLog.Print(defender.IsPlayer ? "Battle_YouAreDead" : "Battle_EnemyIsDead");
				ZIOX.PressAnyKey(defender.IsPlayer);
			}
			
			PlayerStats.Draw_PlayerStats();
			BattleStats.Draw_Player_Stats(Player);
			BattleStats.Draw_NPC_Stats(enemy, Player);
		}