static void Main(string[] args)
        {
            TraceSourceSingleton.Ts().Listeners.Add(new ConsoleTraceListener());
            TraceSourceSingleton.Ts().Listeners.Add(new TextWriterTraceListener(new StreamWriter("Tracing.txt")));
            TraceSourceSingleton.Ts().Listeners.Add(new DefaultTraceListener());
            TraceSourceSingleton.Ts().Listeners.Add(new XmlWriterTraceListener("XMLTracing.xml"));
            World    newWorld = new World(new WorldObjectManager());
            Creature human    = (new HumanoidConcreteFactory(1, "Man")).MakeCreature();

            newWorld.AddWorldObjectToWorld(human);
            WorldObject obj = newWorld.WorldObjectsManager.GetWorldObjects().WorldObjects.First();

            if (TypeComparer.IsSameOrVariant(typeof(Creature), obj.GetType()).SuccessValue)
            {
                ((Creature)obj).ItemManager.AddItems(new ItemsResponse("Adding item", "GOD", new [] { new Sword(new[] { new PhysicalDamageType() }, 5) }));
                ((Creature)obj).ItemManager.EquipGear((IAttackItem)((Creature)obj).ItemManager.GetItems().Value.First());
                while (true)
                {
                    IResponse response = ((Creature)obj).ReceiveHit(((Creature)obj).Hit());
                    if (response.SuccessValue == false && TypeComparer
                        .IsSameOrVariant(typeof(WorldObjectResponse), response.GetType()).SuccessValue)
                    {
                        Console.WriteLine("woops");
                        break;
                    }
                    if (response.SuccessValue)
                    {
                        Console.WriteLine("BONK");
                    }
                    Console.ReadLine();
                }
                Thread.Sleep(3000);
                ItemsResponse itemsLoot     = ((Creature)obj).Loot();
                string        collectedLoot = "";
                itemsLoot.Value.ToList().ForEach(a => collectedLoot += a.Name + " ");
                Console.WriteLine("WAUW you've looted : " + collectedLoot);
                Console.ReadLine();
                Console.WriteLine("now new dude with armor, and bigg sword vs small dude");

                Creature bigGuyCreature = (new HumanoidConcreteFactory(5, "BIGG GUY")).MakeCreature();
                Creature smoll          = (new HumanoidConcreteFactory(1)).MakeCreature();

                bigGuyCreature.ItemManager.Inventory.AddItems(new ItemsResponse("Adding startup items", "GOD",
                                                                                new IItem[]
                {
                    new BreastArmor(10, new[] { new PhysicalDamageType(), }),
                    new HeadArmor(5, new[] { new PhysicalDamageType(), }),
                    new Sword(new IDamageType[] { new PhysicalDamageType(), new FireDamageType(2) }, 10)
                }));
                bigGuyCreature.ItemManager.Inventory.GetItems().Value.Where(a => TypeComparer.IsSameOrVariant(typeof(IWearable), a.GetType()).SuccessValue).ToList().ForEach(a =>
                {
                    bigGuyCreature.ItemManager.GearLoadOut.EquipItem((IWearable)a);
                });

                smoll.ItemManager.AddItems(new ItemsResponse("Adding startup items", "GOD",
                                                             new IItem[]
                {
                    new BreastArmor(13, new IDamageType[] { new PhysicalDamageType(), new FireDamageType(), }),
                    new HeadArmor(15, new IDamageType[] { new PhysicalDamageType(), new FireDamageType() }),
                    new Sword(new IDamageType[] { new PhysicalDamageType() }, 5),
                }));


                smoll.ItemManager.Inventory.GetItems().Value.Where(a => TypeComparer.IsSameOrVariant(typeof(IWearable), a.GetType()).SuccessValue).ToList().ForEach(a =>
                {
                    smoll.ItemManager.GearLoadOut.EquipItem((IWearable)a);
                });

                Console.WriteLine("AIT FIGHT BOIS");
                bool oneAlive = true;
                while (oneAlive)
                {
                    oneAlive = smoll.ReceiveHit(bigGuyCreature.Hit()).SuccessValue&& oneAlive;
                    if (oneAlive)
                    {
                        oneAlive = bigGuyCreature.ReceiveHit(smoll.Hit()).SuccessValue&& oneAlive;
                    }
                }

                if (smoll.Hitpoints > 0)
                {
                    smoll.ItemManager.AddItems(bigGuyCreature.Loot());
                }
                else
                {
                    bigGuyCreature.ItemManager.AddItems(smoll.Loot());
                }
            }
        }