Currently Online

Latest Posts

Topic: Some Details in Balancing

GunChleoc
Avatar
Joined: 2013-10-07, 15:56
Posts: 3263
Ranking
One Elder of Players
Location: RenderedRect
Posted at: 2020-10-16, 09:39

Looking just at the Ax costs is too simple. You also have to look at training times, wares consumed by each training step, and the soldier level changed as compared to other soldier levels and the impact of that on the fights. This is why balancing is very difficult.

So, a gut feeling that a weapon used for an advanced stage in training should be more expensive because we expect it to be more expensive to make in the real world can be very misleading for balancing. The sort of argument we need here is: Soldier for tribe x at level y is too cheap/too expensive in comparison to soldier for tribe z at level u, because... <some evidence to back this up>.


Busy indexing nil values

Top Quote
the-x
Avatar
Joined: 2019-01-19, 13:23
Posts: 634
Ranking
One Elder of Players
Posted at: 2020-10-16, 10:41

GunChleoc wrote:

You also have to look at training times, wares consumed by each training step

Of course, very important. I would suggest to higher it by 30% for each step. A nice idea for this might b to also increase the costs in food.

and the soldier level changed as compared to other soldier levels

Yes, this is what ive done for 4 weeks intensivly. A minor change might be to lower for every tribe the costs for the first trainingsstep by 1 iron to " iron coal " instead of " 2 iron coal " or " iron planks coal " which you see for Empire, Atlantean. This will fit it and make it fair for all.

and the impact of that on the fights

So at the moment we see that there is another increase what makes soldiers a lot stronger in later stages and that is healing. For example 220 hitpoints healing is crazy fast, it takes 8 seconds to heal a wounded soldier back to full and this effect relatively is stronger for higher promoted soldiers. This gives an exponential curve. And this exponential curve we do not have for costs atm, which in my opinion is very important.

argument we need here is: Soldier for tribe x at level y is too cheap/too expensive in comparison to soldier for tribe z at level u, because... <some evidence to back this up>.

Soldier for tribe Barbarian at level 1 is too too expensive in comparison to soldier for tribe Atlantean at level 3 or 4, because he gets defeaten by 17,5 times whilst costs are 6 times

Soldier for tribe Barbarian at level 1 is too too expensive in comparison to soldier for tribe Barbarian at level 4 or 5

So we see two major Balancing improvements: Barbarian compared to Atlantean is very weak, if not have a lot of full promoted which is very unreal in less than 2 hours which most multiplyer games take. In my opinion we must look differently on multiplayer games than on singleplayer games. And the other one is level 1 for the last level of each tribe.


Top Quote
the-x
Avatar
Joined: 2019-01-19, 13:23
Posts: 634
Ranking
One Elder of Players
Posted at: 2020-10-16, 10:50

GunChleoc wrote:

You also have to look at training times, wares consumed by each training step, and the soldier level changed as compared to other soldier levels and the impact of that on the fights

Done

   programs = {
      sleep = {
         -- TRANSLATORS: Completed/Skipped/Did not start sleeping because ...
         descname = _"sleeping",
         actions = {
            "sleep=100",
            "return=skipped",
         }
      },

      upgrade_soldier_attack_0 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("barbarians_building", "upgrading soldier attack from level 0 to level 1"),
         actions = {
            "checksoldier=soldier attack 0", -- Fails when aren't any soldier of level 0 attack
            "return=failed unless site has ax_sharp",
            "sleep=10000",
            "checksoldier=soldier attack 0", -- Because the soldier can be expelled by the player
            "consume=ax_sharp",
            "train=soldier attack 0 1"
         }
      },

      upgrade_soldier_attack_1 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("barbarians_building", "upgrading soldier attack from level 1 to level 2"),
         actions = {
            "checksoldier=soldier attack 1",
            "return=failed unless site has ax_broad",
            "return=failed unless site has barbarians_bread",
            "sleep=15000",
            "checksoldier=soldier attack 1",
            "consume=ax_broad barbarians_bread",
            "train=soldier attack 1 2"
         }
      },
      upgrade_soldier_attack_2 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("barbarians_building", "upgrading soldier attack from level 2 to level 3"),
         actions = {
            "checksoldier=soldier attack 2",
            "return=failed unless site has ax_bronze",
            "return=failed unless site has fish,meat",
            "return=failed unless site has barbarians_bread",
            "sleep=30000",
            "checksoldier=soldier attack 2",
            "consume=ax_bronze fish,meat barbarians_bread",
            "train=soldier attack 2 3"
         }

      },
      upgrade_soldier_attack_3 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("barbarians_building", "upgrading soldier attack from level 3 to level 4"),
         actions = {
            "checksoldier=soldier attack 3",
            "return=failed unless site has ax_battle",
            "return=failed unless site has fish,meat",
            "return=failed unless site has barbarians_bread:3",
            "sleep=60000",
            "checksoldier=soldier attack 3",
            "consume=ax_battle fish,meat barbarians_bread:3",
            "train=soldier attack 3 4"
         }

      },
      upgrade_soldier_attack_4 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("barbarians_building", "upgrading soldier attack from level 4 to level 5"),
         actions = {
            "checksoldier=soldier attack 4",
            "return=failed unless site has ax_warriors",
            "return=failed unless site has fish,meat",
            "return=failed unless site has barbarians_bread:5",
            "sleep=80000",
            "checksoldier=soldier attack 4",
            "consume=ax_warriors fish,meat barbarians_bread:5",
            "train=soldier attack 4 5"
         }

      },
      upgrade_soldier_health_0 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("barbarians_building", "upgrading soldier health from level 0 to level 1"),
         actions = {
            "checksoldier=soldier health 0",
            "return=failed unless site has helmet",
            "return=failed unless site has barbarians_bread,fish,meat",
            "sleep=20000",
            "checksoldier=soldier health 0",
            "consume=helmet barbarians_bread,fish,meat",
            "train=soldier health 0 1"
         }

      },
      upgrade_soldier_health_1 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("barbarians_building", "upgrading soldier health from level 1 to level 2"),
         actions = {
            "checksoldier=soldier health 1",
            "return=failed unless site has helmet_mask",
            "return=failed unless site has barbarians_bread:2",
            "sleep=40000",
            "checksoldier=soldier health 1",
            "consume=helmet_mask barbarians_bread:2",
            "train=soldier health 1 2"
         }

      },
      upgrade_soldier_health_2 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("barbarians_building", "upgrading soldier health from level 2 to level 3"),
         actions = {
            "checksoldier=soldier health 2",
            "return=failed unless site has helmet_warhelm",
            "return=failed unless site has fish,meat",
            "return=failed unless site has barbarians_bread:3",
            "sleep=60000",
            "checksoldier=soldier health 2",
            "consume=helmet_warhelm fish,meat barbarians_bread:3",
            "train=soldier health 2 3"
         }
      },
   },

   soldier_capacity = 8,
   trainer_patience = 5
}

-

For Atlantean

-

   programs = {
      sleep = {
         -- TRANSLATORS: Completed/Skipped/Did not start sleeping because ...
         descname = _"sleeping",
         actions = {
            "sleep=100",
            "return=skipped",
         }

      },
      upgrade_soldier_attack_3 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("atlanteans_building", "upgrading soldier attack from level 3 to level 4"),
         actions = {
            "checksoldier=soldier attack 3",
            "return=failed unless site has trident_heavy_double",
            "return=failed unless site has atlanteans_bread:3",
            "return=failed unless site has smoked_fish,smoked_meat:3",
            "sleep=80000",
            "checksoldier=soldier attack 3",
            "consume=atlanteans_bread:3 smoked_fish,smoked_meat:3 trident_heavy_double",
            "train=soldier attack 3 4"
         }

      },
      upgrade_soldier_attack_2 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("atlanteans_building", "upgrading soldier attack from level 2 to level 3"),
         actions = {
            "checksoldier=soldier attack 2",
            "return=failed unless site has trident_double",
            "return=failed unless site has atlanteans_bread:2",
            "return=failed unless site has smoked_fish,smoked_meat:3",
            "sleep=60000",
            "checksoldier=soldier attack 2",
            "consume=atlanteans_bread:2 smoked_fish,smoked_meat trident_double",
            "train=soldier attack 2 3"
         }

      },
      upgrade_soldier_attack_1 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("atlanteans_building", "upgrading soldier attack from level 1 to level 2"),
         actions = {
            "checksoldier=soldier attack 1",
            "return=failed unless site has trident_steel",
            "return=failed unless site has atlanteans_bread",
            "return=failed unless site has smoked_fish,smoked_meat",
            "sleep=30000",
            "checksoldier=soldier attack 1",
            "consume=atlanteans_bread smoked_fish,smoked_meat trident_steel",
            "train=soldier attack 1 2"
         }
      },

      upgrade_soldier_attack_0 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("atlanteans_building", "upgrading soldier attack from level 0 to level 1"),
         actions = {
            "checksoldier=soldier attack 0",
            "return=failed unless site has trident_long",
            "return=failed unless site has smoked_fish,smoked_meat,atlanteans_bread",
            "sleep=10000",
            "checksoldier=soldier attack 0",
            "consume=atlanteans_bread,smoked_fish,smoked_meat trident_long",
            "train=soldier attack 0 1"
         }
      },

-

For Empire

-

   programs = {
      sleep = {
         -- TRANSLATORS: Completed/Skipped/Did not start sleeping because ...
         descname = _"sleeping",
         actions = {
            "sleep=1000",
            "return=skipped",
         }

      },
      upgrade_soldier_attack_0 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("empire_building", "upgrading soldier attack from level 0 to level 1"),
         actions = {
            "checksoldier=soldier attack 0", -- Fails when aren't any soldier of level 0 attack
            "return=failed unless site has spear",
            "return=failed unless site has empire_bread",
            "return=failed unless site has fish,meat",
            "sleep=10000",
            "checksoldier=soldier attack 0", -- Because the soldier can be expelled by the player
            "consume=spear empire_bread fish,meat",
            "train=soldier attack 0 1"
         }

      },
      upgrade_soldier_attack_1 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("empire_building", "upgrading soldier attack from level 1 to level 2"),
         actions = {
            "checksoldier=soldier attack 1",
            "return=failed unless site has spear_advanced",
            "return=failed unless site has empire_bread",
            "return=failed unless site has fish,meat",
            "sleep=20000",
            "checksoldier=soldier attack 1",
            "consume=spear_advanced empire_bread fish,meat",
            "train=soldier attack 1 2"
         }

      },
      upgrade_soldier_attack_2 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("empire_building", "upgrading soldier attack from level 2 to level 3"),
         actions = {
            "checksoldier=soldier attack 2",
            "return=failed unless site has spear_heavy",
            "return=failed unless site has empire_bread",
            "return=failed unless site has fish,meat:2",
            "sleep=40000",
            "checksoldier=soldier attack 2",
            "consume=spear_heavy empire_bread fish,meat:2",
            "train=soldier attack 2 3"
         }

      },
      upgrade_soldier_attack_3 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("empire_building", "upgrading soldier attack from level 3 to level 4"),
         actions = {
            "checksoldier=soldier attack 3",
            "return=failed unless site has spear_war",
            "return=failed unless site has empire_bread:2",
            "return=failed unless site has fish,meat",
            "sleep=80000",
            "checksoldier=soldier attack 3",
            "consume=spear_war empire_bread:2 fish,meat",
            "train=soldier attack 3 4"
         }

      },
      upgrade_soldier_health_0 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("empire_building", "upgrading soldier health from level 0 to level 1"),
         actions = {
            "checksoldier=soldier health 0",
            "return=failed unless site has armor_helmet",
            "return=failed unless site has empire_bread,fish,meat",
            "sleep=15000",
            "checksoldier=soldier health 0",
            "consume=armor_helmet empire_bread,fish,meat",
            "train=soldier health 0 1"
         }

      },
      upgrade_soldier_health_1 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("empire_building", "upgrading soldier health from level 1 to level 2"),
         actions = {
            "checksoldier=soldier health 1",
            "return=failed unless site has armor",
            "return=failed unless site has empire_bread",
            "return=failed unless site has fish,meat",
            "sleep=30000",
            "checksoldier=soldier health 1",
            "consume=armor empire_bread fish,meat",
            "train=soldier health 1 2"
         }

      },
      upgrade_soldier_health_2 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("empire_building", "upgrading soldier health from level 2 to level 3"),
         actions = {
            "checksoldier=soldier health 2",
            "return=failed unless site has armor_chain",
            "return=failed unless site has empire_bread:2",
            "return=failed unless site has fish,meat:2",
            "sleep=60000",
            "checksoldier=soldier health 2",
            "consume=armor_chain empire_bread:2 fish,meat:2",
            "train=soldier health 2 3"
         }

      },
      upgrade_soldier_health_3 = {
         -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
         descname = pgettext("empire_building", "upgrading soldier health from level 3 to level 4"),
         actions = {
            "checksoldier=soldier health 3",
            "return=failed unless site has armor_gilded",
            "return=failed unless site has empire_bread:2",
            "return=failed unless site has fish,meat:2",
            "sleep=80000",
            "checksoldier=soldier health 3",
            "consume=armor_gilded empire_bread:2 fish,meat:2",
            "train=soldier health 3 4"
         }
      },
Edited: 2020-10-17, 11:50

Top Quote
the-x
Avatar
Joined: 2019-01-19, 13:23
Posts: 634
Ranking
One Elder of Players
Posted at: 2020-10-16, 10:53

the-x wrote:

GunChleoc wrote:

You also have to look at training times, wares consumed by each training step, and the soldier level changed as compared to other soldier levels and the impact of that on the fights

Done

programs = {

  sleep = {

     -- TRANSLATORS: Completed/Skipped/Did not start sleeping because ...

     descname = _"sleeping",

     actions = {

        "sleep=100",

        "return=skipped",
     }
  },

  upgrade_soldier_attack_0 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("barbarians_building", "upgrading soldier attack from level 0 to level 1"),
     actions = {
        "checksoldier=soldier attack 0", -- Fails when aren't any soldier of level 0 attack
        "return=failed unless site has ax_sharp",
        "sleep=10000",
        "checksoldier=soldier attack 0", -- Because the soldier can be expelled by the player
        "consume=ax_sharp",
        "train=soldier attack 0 1"
     }
  },

  upgrade_soldier_attack_1 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("barbarians_building", "upgrading soldier attack from level 1 to level 2"),
     actions = {
        "checksoldier=soldier attack 1",
        "return=failed unless site has ax_broad",
        "return=failed unless site has barbarians_bread",
        "sleep=15000",
        "checksoldier=soldier attack 1",
        "consume=ax_broad barbarians_bread",
        "train=soldier attack 1 2"
     }
  },
  upgrade_soldier_attack_2 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("barbarians_building", "upgrading soldier attack from level 2 to level 3"),
     actions = {
        "checksoldier=soldier attack 2",
        "return=failed unless site has ax_bronze",
        "return=failed unless site has fish,meat",
        "return=failed unless site has barbarians_bread",
        "sleep=30000",
        "checksoldier=soldier attack 2",
        "consume=ax_bronze fish,meat barbarians_bread",
        "train=soldier attack 2 3"
     }

  },
  upgrade_soldier_attack_3 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("barbarians_building", "upgrading soldier attack from level 3 to level 4"),
     actions = {
        "checksoldier=soldier attack 3",
        "return=failed unless site has ax_battle",
        "return=failed unless site has fish,meat",
        "return=failed unless site has barbarians_bread:3",
        "sleep=60000",
        "checksoldier=soldier attack 3",
        "consume=ax_battle fish,meat barbarians_bread:3",
        "train=soldier attack 3 4"
     }

  },
  upgrade_soldier_attack_4 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("barbarians_building", "upgrading soldier attack from level 4 to level 5"),
     actions = {
        "checksoldier=soldier attack 4",
        "return=failed unless site has ax_warriors",
        "return=failed unless site has fish,meat",
        "return=failed unless site has barbarians_bread:5",
        "sleep=80000",
        "checksoldier=soldier attack 4",
        "consume=ax_warriors fish,meat barbarians_bread:5",
        "train=soldier attack 4 5"
     }

  },
  upgrade_soldier_health_0 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("barbarians_building", "upgrading soldier health from level 0 to level 1"),
     actions = {
        "checksoldier=soldier health 0",
        "return=failed unless site has helmet",
        "return=failed unless site has barbarians_bread,fish,meat",
        "sleep=20000",
        "checksoldier=soldier health 0",
        "consume=helmet barbarians_bread,fish,meat",
        "train=soldier health 0 1"
     }

  },
  upgrade_soldier_health_1 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("barbarians_building", "upgrading soldier health from level 1 to level 2"),
     actions = {
        "checksoldier=soldier health 1",
        "return=failed unless site has helmet_mask",
        "return=failed unless site has barbarians_bread:2",
        "sleep=40000",
        "checksoldier=soldier health 1",
        "consume=helmet_mask barbarians_bread:2",
        "train=soldier health 1 2"
     }

  },
  upgrade_soldier_health_2 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("barbarians_building", "upgrading soldier health from level 2 to level 3"),
     actions = {
        "checksoldier=soldier health 2",
        "return=failed unless site has helmet_warhelm",
        "return=failed unless site has fish,meat",
        "return=failed unless site has barbarians_bread:3",
        "sleep=60000",
        "checksoldier=soldier health 2",
        "consume=helmet_warhelm fish,meat barbarians_bread:3",
        "train=soldier health 2 3"
     }
  },

},

soldier_capacity = 8, trainer_patience = 5 }

-

For Atlantean

-

programs = { sleep = { -- TRANSLATORS: Completed/Skipped/Did not start sleeping because ... descname = _"sleeping", actions = { "sleep=100", "return=skipped", }

  },
  upgrade_soldier_attack_3 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("atlanteans_building", "upgrading soldier attack from level 3 to level 4"),
     actions = {
        "checksoldier=soldier attack 3",
        "return=failed unless site has trident_heavy_double",
        "return=failed unless site has atlanteans_bread:3",
        "return=failed unless site has smoked_fish,smoked_meat:3",
        "sleep=80000",
        "checksoldier=soldier attack 3",
        "consume=atlanteans_bread:3 smoked_fish,smoked_meat:3 trident_heavy_double",
        "train=soldier attack 3 4"
     }

  },
  upgrade_soldier_attack_2 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("atlanteans_building", "upgrading soldier attack from level 2 to level 3"),
     actions = {
        "checksoldier=soldier attack 2",
        "return=failed unless site has trident_double",
        "return=failed unless site has atlanteans_bread:2",
        "return=failed unless site has smoked_fish,smoked_meat:3",
        "sleep=60000",
        "checksoldier=soldier attack 2",
        "consume=atlanteans_bread:2 smoked_fish,smoked_meat trident_double",
        "train=soldier attack 2 3"
     }

  },
  upgrade_soldier_attack_1 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("atlanteans_building", "upgrading soldier attack from level 1 to level 2"),
     actions = {
        "checksoldier=soldier attack 1",
        "return=failed unless site has trident_steel",
        "return=failed unless site has atlanteans_bread",
        "return=failed unless site has smoked_fish,smoked_meat",
        "sleep=30000",
        "checksoldier=soldier attack 1",
        "consume=atlanteans_bread smoked_fish,smoked_meat trident_steel",
        "train=soldier attack 1 2"
     }
  },

  upgrade_soldier_attack_0 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("atlanteans_building", "upgrading soldier attack from level 0 to level 1"),
     actions = {
        "checksoldier=soldier attack 0",
        "return=failed unless site has trident_long",
        "return=failed unless site has smoked_fish,smoked_meat,atlanteans_bread",
        "sleep=10000",
        "checksoldier=soldier attack 0",
        "consume=atlanteans_bread,smoked_fish,smoked_meat trident_long",
        "train=soldier attack 0 1"
     }
  },

-

For Empire

-

programs = { sleep = { -- TRANSLATORS: Completed/Skipped/Did not start sleeping because ... descname = _"sleeping", actions = { "sleep=1000", "return=skipped", }

  },
  upgrade_soldier_attack_0 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("empire_building", "upgrading soldier attack from level 0 to level 1"),
     actions = {
        "checksoldier=soldier attack 0", -- Fails when aren't any soldier of level 0 attack
        "return=failed unless site has spear",
        "return=failed unless site has empire_bread",
        "return=failed unless site has fish,meat",
        "sleep=10000",
        "checksoldier=soldier attack 0", -- Because the soldier can be expelled by the player
        "consume=spear empire_bread fish,meat",
        "train=soldier attack 0 1"
     }

  },
  upgrade_soldier_attack_1 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("empire_building", "upgrading soldier attack from level 1 to level 2"),
     actions = {
        "checksoldier=soldier attack 1",
        "return=failed unless site has spear_advanced",
        "return=failed unless site has empire_bread",
        "return=failed unless site has fish,meat",
        "sleep=20000",
        "checksoldier=soldier attack 1",
        "consume=spear_advanced empire_bread fish,meat",
        "train=soldier attack 1 2"
     }

  },
  upgrade_soldier_attack_2 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("empire_building", "upgrading soldier attack from level 2 to level 3"),
     actions = {
        "checksoldier=soldier attack 2",
        "return=failed unless site has spear_heavy",
        "return=failed unless site has empire_bread",
        "return=failed unless site has fish,meat:2",
        "sleep=40000",
        "checksoldier=soldier attack 2",
        "consume=spear_heavy empire_bread fish,meat:2",
        "train=soldier attack 2 3"
     }

  },
  upgrade_soldier_attack_3 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("empire_building", "upgrading soldier attack from level 3 to level 4"),
     actions = {
        "checksoldier=soldier attack 3",
        "return=failed unless site has spear_war",
        "return=failed unless site has empire_bread:2",
        "return=failed unless site has fish,meat",
        "sleep=80000",
        "checksoldier=soldier attack 3",
        "consume=spear_war empire_bread:2 fish,meat",
        "train=soldier attack 3 4"
     }

  },
  upgrade_soldier_health_0 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("empire_building", "upgrading soldier health from level 0 to level 1"),
     actions = {
        "checksoldier=soldier health 0",
        "return=failed unless site has armor_helmet",
        "return=failed unless site has empire_bread,fish,meat",
        "sleep=15000",
        "checksoldier=soldier health 0",
        "consume=armor_helmet empire_bread,fish,meat",
        "train=soldier health 0 1"
     }

  },
  upgrade_soldier_health_1 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("empire_building", "upgrading soldier health from level 1 to level 2"),
     actions = {
        "checksoldier=soldier health 1",
        "return=failed unless site has armor",
        "return=failed unless site has empire_bread",
        "return=failed unless site has fish,meat",
        "sleep=30000",
        "checksoldier=soldier health 1",
        "consume=armor empire_bread fish,meat",
        "train=soldier health 1 2"
     }

  },
  upgrade_soldier_health_2 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("empire_building", "upgrading soldier health from level 2 to level 3"),
     actions = {
        "checksoldier=soldier health 2",
        "return=failed unless site has armor_chain",
        "return=failed unless site has empire_bread:2",
        "return=failed unless site has fish,meat:2",
        "sleep=60000",
        "checksoldier=soldier health 2",
        "consume=armor_chain empire_bread:2 fish,meat:2",
        "train=soldier health 2 3"
     }

  },
  upgrade_soldier_health_3 = {
     -- TRANSLATORS: Completed/Skipped/Did not start upgrading ... because ...
     descname = pgettext("empire_building", "upgrading soldier health from level 3 to level 4"),
     actions = {
        "checksoldier=soldier health 3",
        "return=failed unless site has armor_gilded",
        "return=failed unless site has empire_bread:2",
        "return=failed unless site has fish,meat:2",
        "sleep=80000",
        "checksoldier=soldier health 3",
        "consume=armor_gilded empire_bread:2 fish,meat:2",
        "train=soldier health 3 4"
     }
  },
Edited: 2020-10-16, 10:54

Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 23:16
Posts: 1540
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2020-10-16, 10:57

the-x wrote:

GunChleoc wrote:

argument we need here is: Soldier for tribe x at level y is too cheap/too expensive in comparison to soldier for tribe z at level u, because... <some evidence to back this up>.

Soldier for tribe Barbarian at level 1 is too too expensive in comparison to soldier for tribe Atlantean at level 3 or 4, because he gets defeaten by 17,5 times whilst costs are 6 times

What is the definition of level 1 and level 3 and level 4. Only level 0 and level 10 are unambigously defined. how was the value of defeat calculated? How were the costs calculated?

Soldier for tribe Barbarian at level 1 is too too expensive in comparison to soldier for tribe Barbarian at level 4 or 5

Why? please provide some numbers.


Top Quote
the-x
Avatar
Joined: 2019-01-19, 13:23
Posts: 634
Ranking
One Elder of Players
Posted at: 2020-10-16, 11:08

hessenfarmer wrote:

the-x wrote:

GunChleoc wrote:

argument we need here is: Soldier for tribe x at level y is too cheap/too expensive in comparison to soldier for tribe z at level u, because... <some evidence to back this up>.

Soldier for tribe Barbarian at level 1 is too too expensive in comparison to soldier for tribe Atlantean at level 3 or 4, because he gets defeaten by 17,5 times whilst costs are 6 times

What is the definition of level 1 and level 3 and level 4

Here only the attack value is counted, that means the level of promotion by swords or axes or tridents

Soldier for tribe Barbarian at level 1 is too too expensive in comparison to soldier for tribe Barbarian at level 4 or 5

Why? please provide some numbers.

These values are only experiments when a soldier fought against another one. Of course i can do some calculation of it if needed.

Playtesting was excellent and worked very balanced for each tribe. I was testing it in around 50 games and changed somthing when i wasnt happy about the result. Atm we definitely have the practical result, that this soldier gets defeaten 17 times by the Altantean promoted which is quite a very high number and leads to many problems in practical multiplayer games, especially in ones that last shorter than 2 hours. My suggestion is to just try it or have both modes available. Bevieve me ; ) i wouldnt support this idea so much if it wouldnt be that good.


Top Quote
the-x
Avatar
Joined: 2019-01-19, 13:23
Posts: 634
Ranking
One Elder of Players
Posted at: 2020-10-16, 11:08

Another interesting gimmick thereby is that now economies tend to be swtitching from a status of where you go fishing & hunting to a stage where you need more bakerys. It looks amazing in playtesting: First you start with one fisher hut like in acient times and when your finished your food production highly depends on farms and therefore on bread.


Top Quote
hessenfarmer
Avatar
Joined: 2014-12-11, 23:16
Posts: 1540
Ranking
One Elder of Players
Location: Bavaria
Posted at: 2020-10-16, 11:21

the-x wrote:

These values are only experiments when a soldier fought against another one. Of course i can do some calculation of it if needed.

Yes please. I think that was what GunChleoc meant by < provide some evidence >


Top Quote
the-x
Avatar
Joined: 2019-01-19, 13:23
Posts: 634
Ranking
One Elder of Players
Posted at: 2020-10-16, 11:33

Ive done a working version now: See topic https://www.widelands.org/forum/topic/4981/?page=1#post-35071 or direct download of the tribes folder: https://fil.email/6cir8mcW


Top Quote
the-x
Avatar
Joined: 2019-01-19, 13:23
Posts: 634
Ranking
One Elder of Players
Posted at: 2020-10-17, 12:09

Here is a 8 min Pitch Talk which aims at Explaining the most relevant Advantages

https://www.youtube.com/watch?v=ygALK7PJ8W8

Top 3:

  • In Multiplayer Games the first contact before was only rookies, i am fighting with 8 rookies vs 8 rookies

  • Now i have two 3:2:0:0 soldiers whilst my enemy has an 4:0:0:0 and three 1:1:0:0 soldiers, how are my strategies wo win, very exciting gameplay

  • Increasing costs of swords or axes leads to so much more decisions of how i will plan my economy and how i will build up. At the same time beginner friendly whilst the first 2-3 stages are very easily to achieve

Many issues have been added to Trainingssite aiming at improving the gameplay face-smile.png

[img]https://www.widelands.org/forum/attachment/d91e965210c690290d3a61ea3238f92bab6b500c[/img]

[img]https://fil.email/dTEIVlPV[/img]

The added picture shows the overworked Trainingssite for Barbarians

Edited: 2020-10-17, 12:44

Attachment: aubild.png (554.2 KB)

Top Quote