Beispiel #1
0
        private static void BerzerkMovement(Turn gameLogTurn, int distance, Combatant active,
            int speedNotFiring, int speedFiring, int direction, int enemyPos, int oldPos)
        {
            if (distance > 0)
            {
                // run to enemy!
                gameLogTurn.Movement.Add(new Phase { Actor = active.Template, Message = active.Name + " runs towards the enemy in blind fury!", Relevance = Relevance.Medium, Icon = moveIcon});

                var movement = speedNotFiring*direction;
                int newPos = active.Position + (movement <= distance ? movement : distance);
                if (newPos == enemyPos)
                {
                    gameLogTurn.Movement.Add(new Phase { Actor = active.Template, Message = active.Name + " enters close combat!", Relevance = Relevance.High, Icon = chargeIcon });
                    active.Melee = true;
                }

                if (speedFiring <= Math.Abs(oldPos - newPos))
                    active.CanFire = true;
                else
                    active.CanFire = false;

                active.Position = newPos;
            }
            else
            {
                gameLogTurn.Movement.Add(new Phase { Actor = active.Template, Message = active.Name + " hurls himself into the melee!", Relevance = Relevance.Medium, Icon = chargeIcon });
                active.CanFire = true;
            }
        }
        public static AttributeTableModel Map(Combatant combatant, bool mindsetable = false)
        {
            var table = new AttributeTableModel();
            table.TableColumns = AddCombatantColumns(combatant is Leader, mindsetable);
            table.TableRows.Add(AddCombatantRow(combatant, mindsetable));

            return table;
        }
Beispiel #3
0
        private string RecruitCombatant(Identity identity, Combatant combatant)
        {
            using (var transaction = NhSession.BeginTransaction())
            {
                identity.Gang.AddCombatant(combatant);

                NhSession.Save(combatant);
                NhSession.Save(identity.Gang);
                transaction.Commit();
            }
            return "A " + combatant.CombatantType.ToString().ToLower() + " has been recruited for your gang";
        }
        private static TableRow AddCombatantRow(Combatant combatant, bool mindset)
        {
            var tabletype = TableTypeEnum.Combatant;
            var values = new List<string>() { combatant.Template.CombatantType.ToString(), combatant.Name, combatant.Hp.ToString(), combatant.Template.StartingPower.ToString(), combatant.Template.Speed.ToString(), combatant.Weapon.Name };

            if (mindset)
            {
                values.Add(combatant.Mindset.ToString());
            }
            else if (combatant is Leader)
            {
                var ldr = combatant as Leader;
                tabletype = TableTypeEnum.Leader;
                values.AddRange(new List<String> { ldr.Agi.ToString(), ldr.Str.ToString(), ldr.End.ToString(), ldr.LeaderExp.ToString() });
            }

            return new TableRow() { TableValues = values, Id = combatant.Id, Cost = combatant.Template.Cost, TableType = tabletype};
        }
Beispiel #5
0
        private static void NoMovement(Turn gameLogTurn, int distance, Combatant active)
        {
            if (distance == 0)
            {
                gameLogTurn.Movement.Add(new Phase
                {
                    Actor = active.Template,
                    Message = active.Name + " gets ready to duke it out in close combat.",
                    Icon = chargeIcon,
                    Relevance = Relevance.Medium
                });
            }
            else
            {
                gameLogTurn.Movement.Add(new Phase
                {
                    Actor = active.Template,
                    Message = active.Name + " has the enemy in his sights, and prepares to fire.",
                    Icon = aimIcon,
                    Relevance = Relevance.Medium
                });
            }

            active.CanFire = true;
        }
Beispiel #6
0
        private int retreat(int distance, int enemyPos, int direction, int speedFiring, int speedNotFiring, Combatant fighter, Turn gameLogTurn)
        {
            int newPos = 0;
            if (distance * direction < fighter.Weapon.MinRange)
            {
                //Run back; we are within minrange
                if (distance * direction >= fighter.Weapon.MinRange - speedFiring)
                {
                    gameLogTurn.Movement.Add(new Phase
                    {
                        Actor = fighter.Template,
                        Message = fighter.Name + " backs up in order to bring his weapon to bear.",
                        Icon = moveIcon,
                        Relevance = Relevance.Medium
                    });
                    newPos = fighter.Position - speedFiring * direction;
                    fighter.CanFire = true;
                }
                else
                {
                    gameLogTurn.Movement.Add(new Phase
                    {
                        Actor = fighter.Template,
                        Message = fighter.Name + " retreats quickly to get back in optimal weapon range.",
                        Icon = moveIcon,
                        Relevance = Relevance.Medium
                    });
                    newPos = fighter.Position - speedFiring * direction;

                    if ((int)fighter.Weapon.Speed > 2)
                        fighter.CanFire = true;
                    else
                        fighter.CanFire = false;
                }
            }
            else if (distance * direction < fighter.Weapon.MaxRange)
            {
                //Take a single step back; we are not at to maxrange
                newPos = speedFiring > 0 ? fighter.Position - direction : fighter.Position;
                gameLogTurn.Movement.Add(new Phase
                {
                    Actor = fighter.Template,
                    Message = fighter.Name + " takes a step back to aim his " + fighter.Weapon.Name,
                    Icon = aimIcon,
                    Relevance = Relevance.Medium
                });
                fighter.CanFire = true;
            }

            if (distance == 0)
            {

                gameLogTurn.Movement.Add(new Phase
                {
                    Actor = fighter.Template,
                    Message = fighter.Name + " cannot escape the swirling melee!",
                    Relevance = Relevance.High
                });

                newPos = fighter.Position;
            }

            return newPos;
        }
Beispiel #7
0
        private void NormalMovement(Turn gameLogTurn, int distance, int direction, Combatant active,
            int enemyPos, int speedFiring, int speedNotFiring)
        {
            if (distance*direction > ((active.Weapon.MinRange + active.Weapon.MaxRange)/2))
            {
                // run thoughtfully to enemy!

                int newPos = move(distance, enemyPos, direction, speedFiring, speedNotFiring, active, gameLogTurn);

                active.Position = newPos;
            }
            else
            {
                if (distance*direction < ((active.Weapon.MinRange + active.Weapon.MaxRange)/2))
                {
                    active.Position = retreat(distance, enemyPos, direction, speedFiring, speedNotFiring, active,
                        gameLogTurn);
                }
                else
                {
                    NoMovement(gameLogTurn, distance, active);
                }
            }
        }
Beispiel #8
0
        private int move(int distance, int enemyPos, int direction, int speedFiring, int speedNotFiring, Combatant fighter, Turn gameLogTurn)
        {
            var isZombie = (int)fighter.Template.CombatantType > 10 && (int)fighter.Template.CombatantType < 15;
            var moveIconSpec = isZombie ? zombie2Icon : moveIcon;
            int newPos = 0;
            if (distance * direction <= fighter.Weapon.MaxRange + speedFiring)
            {
                if ((int)fighter.Weapon.Speed < 2)
                {
                    if (distance * direction <= fighter.Position + fighter.Weapon.MaxRange)
                    {
                        gameLogTurn.Movement.Add(new Phase
                        {
                            Actor = fighter.Template,
                            Message = fighter.Name + " aims his " + fighter.Weapon.Name +
                                                   " and prepares for the kickback.",
                            Icon = aimIcon,
                            Relevance = Relevance.Medium
                        });
                        fighter.CanFire = true;
                    }
                    else
                    {
                        gameLogTurn.Movement.Add(new Phase
                        {
                            Actor = fighter.Template,
                            Message = fighter.Name + " shoulders his " + fighter.Weapon.Name +
                                                   " and moves to get in range.",
                            Icon = moveIconSpec,
                            Relevance = Relevance.Medium
                        });
                        newPos = fighter.Position + runDistance(distance, speedNotFiring, direction, fighter.Weapon.MinRange);
                        fighter.CanFire = false;
                    }
                }
                else
                {
                    gameLogTurn.Movement.Add(new Phase
                    {
                        Actor = fighter.Template,
                        Message = fighter.Name + " runs towards the enemy and brings up his weapon.",
                        Icon = moveIconSpec,
                        Relevance = Relevance.Medium
                    });
                    newPos = fighter.Position + runDistance(distance, speedFiring, direction, fighter.Weapon.MinRange);
                    fighter.CanFire = true;
                }
            }
            else
            {
                newPos = fighter.Position + speedNotFiring * direction;
                gameLogTurn.Movement.Add(new Phase
                {
                    Actor = fighter.Template,
                    Message = fighter.Name + " hurries towards the enemy in order to get into weapon range",
                    Icon = moveIconSpec,
                    Relevance = Relevance.Medium
                });
                if ((int)fighter.Weapon.Speed > 2)
                    fighter.CanFire = true;
                else
                    fighter.CanFire = false;
            }

            if (newPos == enemyPos)
            {
                gameLogTurn.Movement.Add(new Phase
                {
                    Actor = fighter.Template,
                    Message = fighter.Name + " enters close combat!",
                    Icon = chargeIcon,
                    Relevance = Relevance.High
                });
            }
            return newPos;
        }
Beispiel #9
0
        private void DefensiveMovement(Turn gameLogTurn, int distance, int direction, Combatant active,
            int enemyPos, int speedFiring, int speedNotFiring)
        {
            if (distance*direction > active.Weapon.MaxRange)
            {
                // run *carefully* to enemy!

                int newPos = move(distance, enemyPos, direction, speedFiring, speedNotFiring, active, gameLogTurn);

                active.Position = newPos;
            }
            else
            {
                if (distance*direction < active.Position + active.Weapon.MaxRange)
                {
                    active.Position = retreat(distance, enemyPos, direction, speedFiring, speedNotFiring, active,
                        gameLogTurn);
                }
                else
                {
                    NoMovement(gameLogTurn, distance, active);
                }
            }
        }
Beispiel #10
0
        private void AggresiveMovement(Turn gameLogTurn, int distance, int direction, Combatant active,
            int enemyPos, int speedFiring, int speedNotFiring, int oldPos)
        {
            if (distance*direction > active.Weapon.MinRange)
            {
                // run to enemy!

                int newPos = move(distance, enemyPos, direction, speedFiring, speedNotFiring, active, gameLogTurn);

                active.Position = newPos;
            }
            else
            {
                int newPos = oldPos;
                if (distance*direction < active.Weapon.MinRange)
                {
                    newPos = retreat(distance, enemyPos, direction, speedFiring, speedNotFiring, active, gameLogTurn);
                }
                else
                {
                    NoMovement(gameLogTurn, distance, active);
                }
                active.Position = newPos;
            }
        }