Noble Master Games
Noble Master Games



Dev. Blog

Noble Master Developer's Blog

July 29, 2010

Age of Conquest: Income & Expenses

Filed under: Development — noblemaster @ 10:38

Due to numerous requests, below is a description of income & expenses in Age of Conquest III. The system is up and running on Android already and will come to PC, Macintosh & Linux soon.

The income and expenses for each turn are calculated as follows:

World world = ... // the world including everything
Entity entity = ... // the empire we are doing the calculations for

// assets
long money = entity.getMoney();

// income: tax
long taxIncome = getTaxIncome(world.getProduction(entity), 
money += taxIncome;

// income: vassals
for (Entity vassal: vassals) {
  long vassalIncome = getTaxIncome(world.getProduction(vassal),
  money += getVassalPay(taxIncome);

// expenses: economy and military spending
money -= getEconomySpending(taxIncome, entity.getSpendingEconomy()));
money -= getMilitarySpending(world.getMilitary(entity), 

// expenses: tributes to vassal masters
for (Entity master: masters) {
  money -= getVassalPay(taxIncome);

Please note, production is a factor of economy x population.

Utility functions to calculate costs as well as economy, population and military increases/decreases depending on the spending settings chosen.

  /** The percent the vassal pays. */
  public static final int VASSAL_PAY_PERCENTAGE = 10;

  /** The standard economy spending in percent [0, 100]. */
  public static final int STANDARD_SPENDING_ECONOMY = 80;
  /** The standard military spending in percent [0, 100]. */
  public static final int STANDARD_SPENDING_MILITARY = 80;

   * Returns the tax for the given number of people.
   * @param production  The production.
   * @param taxRate  The tax rate in percent [0, 100].
   * @param morale  The morale in percent [0, 100].
   * @return  The tax.
  public long getTaxIncome(long production, int taxRate, int morale) {
    return Math.round(Math.pow(production * 0.08d, 0.96d) * taxRate/10*morale/100);

   * Returns the payment a vassal slave has to pay to 
   * his master based on his production.
   * @param taxIncome  The tax income of the vassal slave.
   * @return  The pay a vassal slave has to pay to his master.
  public long getVassalPay(long taxIncome) {
    return taxIncome * VASSAL_PAY_PERCENTAGE / 100;

   * Returns the investment spending for the given tax income.
   * @param taxIncome  The tax income.
   * @param economySpending  The economy spending.
   * @return  The expenses.
  public long getEconomySpending(long taxIncome, int economySpending) {
    return (taxIncome / 10) * economySpending / STANDARD_SPENDING_ECONOMY;

   * Returns the economy increase for the given spending rate.
   * @param economySpending  The spending.
   * @return  The increase factor. Stays stable for 1, decreases 
   * or less than 1 and increases for more than 1.
  public float getEconomyIncrease(int economySpending) {
    return 1.03f + ((economySpending - Market.STANDARD_SPENDING_ECONOMY) * 0.03f / 100);

   * Returns the population increase for the given spending rate.
   * @param economySpending  The spending.
   * @return  The increase factor. Stays stable for 1, decreases 
   * for less than 1 and increases for more than 1.
  public float getPopulationIncrease(int economySpending) {
    return 1.01f + (economySpending * 0.001f);

   * Returns the upkeep cost for the given number of military units.
   * @param military  The military units.
   * @param militarySpending  The military spending.
   * @return  The upkeep cost.
  public long getMilitarySpending(long military, int militarySpending) {
    return (military / 5) * militarySpending / STANDARD_SPENDING_MILITARY;

   * Returns the military increase for the given spending rate.
   * @param militarySpending  The spending.
   * @return  The increase factor. Stays stable for 1, decreases 
   * for less than 1 and increases for more than 1.
  public float getMilitaryIncrease(int militarySpending) {
    return 1.0f + ((militarySpending - Market.STANDARD_SPENDING_MILITARY) * 0.5f / 100);

Age of Conquest: Menu Screen

Filed under: Development — noblemaster @ 09:33

Looks like I am done a lot earlier than anticipated! I uploaded Age of Conquest Lite with iPad support yesterday night to the iTunes store for review. Shouldn’t be long until it is approved (or rejected). I will release “World Conquest” featuring the world map thereafter.

Find below the menu screen layout for the single player version of the game:

Age of Conquest: Menu Screen

July 28, 2010

Latest Screenshots for AoC Version III

Filed under: Development — noblemaster @ 10:01

Age of Conquest III for iPad is close to completion. It should take about one week of development, then one or more weeks to get the application approved in the Apple iTunes store. Age of Conquest Lite (map of Europe) will be upgraded first to give existing users the chance to play the game not only on iPod Touch and iPhone but also on the iPad. The world map will be released thereafter.

See below for current development screenshots for the iPad version (World Conquest). Please note, this is the medium-sized world map. The full-size world map will be available on desktop (PC, Mac, Linux) only due to memory limitations.

Age of Conquest III - Screenshot 1

Age of Conquest III - Screenshot 2

July 20, 2010

Wanted: Concord C1 Quantum Gravity

Filed under: Miscellaneous — noblemaster @ 09:07

I wouldn’t mind getting my hand on that little precious. The price tag of the Concord C1 Quantum Gravity watch is still at $320’000, so I’m going to wait for the moment. I just need a few more customers for Age of Conquest…

More Information:

July 13, 2010

Age of Conquest Progress Report

Filed under: Development — noblemaster @ 13:11


After taking things easy for a few weeks, I am ready to re-start game development for Age of Conquest. I just received another set of graphics from the artist (Sergey). This is the final batch including about 30 icons.

I already started developing the various iPad screens. All that was missing were the graphics. Now, that I received the final batch from Sergey, I should be able to bring iPad development to a close within the next 4-6 weeks. After that, the desktop (PC, Macintosh & Linux) version is up next. I should be able to get the desktop version (single player) ready before December.