Noble Master Games
Noble Master Games
Navigation
Categories:

Search:

Meta:

Archives:
Dev. Blog
Forums
 

Noble Master Developer's Blog

May 1, 2013

Noble Master Games: Sales & Income for 2012

Filed under: Business,Development — noblemaster @ 17:21

I have been asked I few times regarding my income (i.e. game sales) and what I am doing all the time. Basically, as some of you know, “Noble Master Games is a single member company, it’s more or less me doing most of the work. I spend about 10-12h/day including weekends (sometimes I take a day off) developing games, programming, fixing bugs, marketing, talking to customers, keeping up-to-date with latest tech, contributing to open source projects, coordinating with contractors, paying bills, accounting, maintaining servers, posting in forums and so forth. I generally contract out all the artwork, music, translations and modding out if I can. I have a few great artists, musician and modders I work with. I couldn’t do it without them!

So now, how much did I make in 2012 (in US Dollars) based on my taxes filed?

  Gross Income:                    $162'324
  Expenses:                       -$130'755
  Taxes:                           -$15,324
  -----------------------------------------
  Total Income:                     $36,246

Please note the Gross Income refers to all income (about 99.5% game sales) over all games and platforms (see below). I don’t have any other income. The Expenses include to a large part contract payments for art & graphics, music, translations and modding. A large portion of it is used too for hosting fees/internet, marketing, accounting/financial transaction fees, hardware (e.g. devices for testing), software (e.g. Photoshop), developer fees (e.g. Apple), business fees, phone/fax and smaller office expenses (e.g. paper, stamps & the like), personal retirement payments and health insurance. A small portion has been used to fund open source projects or sponsor tournaments (e.g. Age of Conquest).

So basically this leaves me with a total of about $36,246 for personal expenses such as food, rent, utilities, transportation, personal entertainment and such, i.e. my personal income. To be fair, the Expenses includes about 40% of my rent and my utility bill as I am able to deduct it from taxes but the rest has to come off from the $36,246.

Based off my actual income, I can make more money working for a company, for example Google, than working for myself, so why am I doing it? First of all it is to a big part “fun” to have your own company and develop games. Also, there is no boss to report to. Although I spend a lot of time working, I can choose freely when I want to take a break. So no, I am not complaining. I am not poor but I am also not bathing in Champagne. I wish I could afford to hire 1 or 2 people full-time to work together with as things can get lonely at times. Generally, it’s difficult to say if I am able to continue doing this in the future as it the actual income is little bit low to sustain over a longer period of time. Also, it doesn’t look like sales will increase this year unless I am able to complete a new game soon. Demise of Nations is planned for release towards the end of this year.

If you like strategy games and you like to see more of it, please don’t pirate but support the following games.

  • Age of Conquest: a medieval Risk-like turn-based strategy game (PC, Mac, Linux, Android, iOS). Includes ONLINE multiplayer.
  • Tropical/Desert Stormfront: a modern real-time strategy game (PC, Mac, Linux, Android, iOS). Includes multiplayer via LAN/internet
  • Demise of Nations: in the making. Follow my twitter feed @noblemaster for latest updates.

Please note, you are not only supporting me, but you also support all the people I work with (which I prefer to pay decent so they don’t have to starve) including Antony Hager (Artist), Nick Lee (Artist, previous), Sean Beeson (Music) amongst many others. Also, you indirectly support 3rd party companies which products and services I purchase (software, hardware, internet services). You also support Open Source projects, namely libGDX and LWJGL, two excellent projects amongst many others out there.

Feel free to comment or ask questions! Thanks, Christoph, a.k.a noblemaster.

April 26, 2013

May of Conquest – Starting May 1

Filed under: Announcement,Business — Tags: , , , , , — Travis @ 16:32

May of Conquest is here again to celebrate another year of Age of Conquest, a Risk-like turn-based strategy game. Age of Conquest allows players to compete on various maps, including but not limited to Europe, America, Asia and a World Map. May of Conquest is the celebration of Age of Conquest which hosts many tournaments allowing players to compete for fantastic prizes. Age of Conquest supports cross-platform multiplayer on Windows, Macintosh, Linux and Android.

Age of Conquest

Age of Conquest

For this year’s prizes we have a total of 9 Membership Upgrades, 2 Noble Master Apparels and 2 Drinkwares. The tournaments are absolutely free to join and a good opportunity to gain a membership upgrade. Don’t want to join all the tournaments? Unsure which tournaments give which prizes? Check out the full details at our festival’s page.

 
 

SPONSORS

 
This year we have three well known players from Age of Conquest sponsoring the various tournaments including Petraa76, KingHowardII, and Jacob719.

Petra76

KingHoward

Jacob719

In addition, four clans have banded together to offer sponsorships as well:  Rosek, KingSlayers and Excelsior.

Clan Rosek

Clan KingSlayers

Clan Excelsior

Thanks as well go to the tournament organizers: KingHowardII, ImLagging, and fodder :-)

 

March 1, 2013

Demise of Nations: Rome – in the Works!

Filed under: Announcement,Business,Development — Travis @ 14:48

After throwing around a few ideas internally last year, Noble Master Games have decided to develop a hexagon turn-based strategy game.  It will take place during the Roman Era on a large map of Europe featuring many factions from that time. The game will include several single player scenarios and campaigns. Demise of Nations: Rome will support a wide array of operating systems including PC, Mac, Linux, Android, and iOS. The game is planned to be released later this year in 2013.

Demise of Nations: Factions

Demise of Nations: Factions

Demise of Nations: Rome will contain over 30 factions, each having their own uniquely created banner to distinguish them from each other, much like the ones shown above. Confirmed factions include, Armenia, Britannia, Carthage, Dacia, Egypt, Gaul, Germania, Greek Cities, House of Brutii, House of Julii, House of Scipii, Macedon, Numidia, Parthia, Pontus, Rebels, Scythia, Seleucid Empire, Senate SPQR, Spain, and Thrace.

In later era scenarios and campaigns, other factions will appear, Alemanni, Berbers, Bergundii, Celts, Eastern Roman Empire, Franks, Goths, Huns, Lombardi, Roxolani, Sarmatians, Sassanids, Saxons, Slavs, Vandals, and Western Roman Empire. Below is an early alpha screenshot of the game.

Demise of Nations: Alpha Screenshot

Demise of Nations: Alpha Screenshot

Please contact us if you would like to be part of the beta-testing team.

November 21, 2012

Tropical + Desert Stormfront released on iPhone and iPad

Filed under: Announcement,Development — noblemaster @ 13:32

As of today, Tropical and Desert Stormfront have finally been released on iOS. The games use the excellent libgdx framework which made porting from Desktop/Android to iOS a breeze.

Tropical Stormfront and Desert Stormfront are the first ever libgdx games to be released on the iOS platform. The games can be played on all iOS touch-screen devices including the iPhone, iPod Touch, iPad and iPad mini. The games work both on retina and non-retina screens.

Store/Download Links:

Special Thanks:

Screenshot 1: Desert Stormfront for iOS

Screenshot 1: Desert Stormfront for iOS

Screenshot 2: Desert Stormfront for iOS

Screenshot 2: Desert Stormfront for iOS

Screenshot 3: Tropical Stormfront for iOS

Screenshot 3: Tropical Stormfront for iOS

Screenshot 4: Tropical Stormfront for iOS

Screenshot 4: Tropical Stormfront for iOS

 

PRESS RELEASE: Retro RTS for iOS: Tropical + Desert Stormfront

Filed under: Announcement,Business — noblemaster @ 13:32

Tropical & Desert Stormfront – Retro RTS For iPhone and iPad

Lewes, Delaware – November 21, 2012 — Noble Master Games releases two retro real-time strategy games on iPhone and iPad. Tropical Stormfront and Desert Stormfront are inspired by the turn-based “Classic Empire” wargame by Walter Bright and the classic Command & Conquer, albeit simplified aiming at a game that is easy to control on touch screen devices.

While Tropical Stormfront is played over tropical archipelagos, Desert Stormfront takes place in a hot desert landscape. The player assumes command and has to complete 25 campaign missions for ultimate victory. Game play modes include Survival, Elimination, Defense, Capture the Flag and Convoy Missions. The game supports cross-platform multiplayer matches against players on Android, PC, Mac and Linux. Networking includes game-play over LAN and internet including co-op multiplayer.

Features of Desert Stormfront:
- Real-Time Strategy (RTS) in the Tropics/Desert
- Single Player and Multiplayer (over the LAN and Internet)
- Support for Cross-Platform Multiplayer
- Team-Play (included in multiplayer as well)
- 25 Campaign Missions incl. Scoring/Rating
- Random Map Generator & Skirmish Maps
- Modes: Attack, Defense, Capture the Flag & Convoy Missions
- Ground Units: Humvees, Tanks, Artillery, Anti-Air Tanks
- Naval Units: Gunboat, Submarine, Cruiser and Carrier
- Air Units: Fighter Planes, Helicopter
- Land Structures: Base Station, Shipyard, Airfield
- High Score and Playing Statistics
- Challenging AI with 4 Difficulty Settings
- Engaging Music and Sound Effects

“The dev. team behind Tropical and Desert Stormfront is a truly global affair with contributors from Europe, Asia and North America.”, said Christoph Aschwanden, owner of Noble Master. “The whole team is looking forward to finally release the game on iOS.”

Tropical Stormfront and Desert Stormfront are available in the English language (other languages in the work). The games are priced at USD 3.99/4.99. A free demo version is available for try out before purchase. For additional information on Tropical Stormfront and Desert Stormfront such as press kit and promo codes contact Christoph Aschwanden via chris@noblemaster.com.

Noble Master is an one-man indie game company with focus on real-time and turn-based strategy games for desktop and mobile devices.

 

November 1, 2012

ISO 4217 Currency List (Currency.java)

Filed under: Development — noblemaster @ 13:27

I wasn’t able to find a good currency implementation over enums in Java, so here is my own. The table contains all the currencies of ISO 4217 as of November 1, 2012. The currencies are mapped to their corresponding countries. And yes, this is Public Domain. Feel free to steal the code and modify it in any ways you please.

For the countries, please use the excellent implementation of all the country codes by Takahiko Kawasaki. You need to do a rename from “Country” to “CountryCode” if you use Takahiko’s implementation :)

/** 
 * The currencies (ISO 4217). Reference: Wikipedia ISO 4217.
 * 

* TODO (last update: 2012-11-01): *

    *
  • need to add "Kosovo" to EURO list (no ISO Country code yet!) *
* This class/code is Public Domain (2012). Feel free to do anything you please. Consider visiting our website * at Noble Master. * * @author noblemaster (Christoph Aschwanden) */ public enum Currency { AED(784, Digits.DIGITS_2, "United Arab Emirates dirham", new Country[] { Country.AE }), AFN(971, Digits.DIGITS_2, "Afghan afghani", new Country[] { Country.AF }), ALL(8, Digits.DIGITS_2, "Albanian lek", new Country[] { Country.AL }), AMD(51, Digits.DIGITS_2, "Armenian dram", new Country[] { Country.AM }), ANG(532, Digits.DIGITS_2, "Netherlands Antillean guilder", new Country[] { Country.CW, Country.SX }), AOA(973, Digits.DIGITS_2, "Angolan kwanza", new Country[] { Country.AO }), ARS(32, Digits.DIGITS_2, "Argentine peso", new Country[] { Country.AR }), AUD(36, Digits.DIGITS_2, "Australian dollar", new Country[] { Country.AU, Country.CX, Country.CC, Country.HM, Country.KI, Country.NR, Country.NF, Country.TV }), AWG(533, Digits.DIGITS_2, "Aruban florin", new Country[] { Country.AW }), AZN(944, Digits.DIGITS_2, "Azerbaijani manat", new Country[] { Country.AZ }), BAM(977, Digits.DIGITS_2, "Bosnia and Herzegovina convertible mark", new Country[] { Country.BA }), BBD(52, Digits.DIGITS_2, "Barbados dollar", new Country[] { Country.BB }), BDT(50, Digits.DIGITS_2, "Bangladeshi taka", new Country[] { Country.BD }), BGN(975, Digits.DIGITS_2, "Bulgarian lev", new Country[] { Country.BG }), BHD(48, Digits.DIGITS_3, "Bahraini dinar", new Country[] { Country.BH }), BIF(108, Digits.DIGITS_0, "Burundian franc", new Country[] { Country.BI }), BMD(60, Digits.DIGITS_2, "Bermudian dollar", new Country[] { Country.BM }), BND(96, Digits.DIGITS_2, "Brunei dollar", new Country[] { Country.BN, Country.SG }), BOB(68, Digits.DIGITS_2, "Boliviano", new Country[] { Country.BO }), BOV(984, Digits.DIGITS_2, "Bolivian Mvdol (funds code)", new Country[] { Country.BO }), BRL(986, Digits.DIGITS_2, "Brazilian real", new Country[] { Country.BR }), BSD(44, Digits.DIGITS_2, "Bahamian dollar", new Country[] { Country.BS }), BTN(64, Digits.DIGITS_2, "Bhutanese ngultrum", new Country[] { Country.BT }), BWP(72, Digits.DIGITS_2, "Botswana pula", new Country[] { Country.BW }), BYR(974, Digits.DIGITS_0, "Belarusian ruble", new Country[] { Country.BY }), BZD(84, Digits.DIGITS_2, "Belize dollar", new Country[] { Country.BZ }), CAD(124, Digits.DIGITS_2, "Canadian dollar", new Country[] { Country.CA }), CDF(976, Digits.DIGITS_2, "Congolese franc", new Country[] { Country.CD }), CHE(947, Digits.DIGITS_2, "WIR Euro (complementary currency)", new Country[] { Country.CH }), CHF(756, Digits.DIGITS_2, "Swiss franc", new Country[] { Country.CH, Country.LI }), CHW(948, Digits.DIGITS_2, "WIR Franc (complementary currency)", new Country[] { Country.CH }), CLF(990, Digits.DIGITS_0, "Unidad de Fomento (funds code)", new Country[] { Country.CL }), CLP(152, Digits.DIGITS_0, "Chilean peso", new Country[] { Country.CL }), CNY(156, Digits.DIGITS_2, "Chinese yuan", new Country[] { Country.CN }), COP(170, Digits.DIGITS_2, "Colombian peso", new Country[] { Country.CO }), COU(970, Digits.DIGITS_2, "Unidad de Valor Real", new Country[] { Country.CO }), CRC(188, Digits.DIGITS_2, "Costa Rican colon", new Country[] { Country.CR }), CUC(931, Digits.DIGITS_2, "Cuban convertible peso", new Country[] { Country.CU }), CUP(192, Digits.DIGITS_2, "Cuban peso", new Country[] { Country.CU }), CVE(132, Digits.DIGITS_0, "Cape Verde escudo", new Country[] { Country.CV }), CZK(203, Digits.DIGITS_2, "Czech koruna", new Country[] { Country.CZ }), DJF(262, Digits.DIGITS_0, "Djiboutian franc", new Country[] { Country.DJ }), DKK(208, Digits.DIGITS_2, "Danish krone", new Country[] { Country.DK, Country.FO, Country.GL }), DOP(214, Digits.DIGITS_2, "Dominican peso", new Country[] { Country.DO }), DZD(12, Digits.DIGITS_2, "Algerian dinar", new Country[] { Country.DZ }), EGP(818, Digits.DIGITS_2, "Egyptian pound", new Country[] { Country.EG }), ERN(232, Digits.DIGITS_2, "Eritrean nakfa", new Country[] { Country.ER }), ETB(230, Digits.DIGITS_2, "Ethiopian birr", new Country[] { Country.ET }), EUR(978, Digits.DIGITS_2, "Euro", new Country[] { Country.AD, Country.AT, Country.BE, Country.CY, Country.EE, Country.FI, Country.FR, Country.DE, Country.GR, Country.IE, Country.IT, Country.LU, Country.MT, Country.MC, Country.ME, Country.NL, Country.PT, Country.SM, Country.SK, Country.SI, Country.ES, Country.VA }), FJD(242, Digits.DIGITS_2, "Fiji dollar", new Country[] { Country.FJ }), FKP(238, Digits.DIGITS_2, "Falkland Islands pound", new Country[] { Country.FK }), GBP(826, Digits.DIGITS_2, "Pound sterling", new Country[] { Country.GB, Country.IM, Country.GS, Country.IO }), GEL(981, Digits.DIGITS_2, "Georgian lari", new Country[] { Country.GE }), GHS(936, Digits.DIGITS_2, "Ghanaian cedi", new Country[] { Country.GH }), GIP(292, Digits.DIGITS_2, "Gibraltar pound", new Country[] { Country.GI }), GMD(270, Digits.DIGITS_2, "Gambian dalasi", new Country[] { Country.GM }), GNF(324, Digits.DIGITS_0, "Guinean franc", new Country[] { Country.GN }), GTQ(320, Digits.DIGITS_2, "Guatemalan quetzal", new Country[] { Country.GT }), GYD(328, Digits.DIGITS_2, "Guyanese dollar", new Country[] { Country.GY }), HKD(344, Digits.DIGITS_2, "Hong Kong dollar", new Country[] { Country.HK, Country.MO }), HNL(340, Digits.DIGITS_2, "Honduran lempira", new Country[] { Country.HN }), HRK(191, Digits.DIGITS_2, "Croatian kuna", new Country[] { Country.HR }), HTG(332, Digits.DIGITS_2, "Haitian gourde", new Country[] { Country.HT }), HUF(348, Digits.DIGITS_2, "Hungarian forint", new Country[] { Country.HU }), IDR(360, Digits.DIGITS_2, "Indonesian rupiah", new Country[] { Country.ID }), ILS(376, Digits.DIGITS_2, "Israeli new shekel", new Country[] { Country.IL, Country.PS }), INR(356, Digits.DIGITS_2, "Indian rupee", new Country[] { Country.IN }), IQD(368, Digits.DIGITS_3, "Iraqi dinar", new Country[] { Country.IQ }), IRR(364, Digits.DIGITS_0, "Iranian rial", new Country[] { Country.IR }), ISK(352, Digits.DIGITS_0, "Icelandic króna", new Country[] { Country.IS }), JMD(388, Digits.DIGITS_2, "Jamaican dollar", new Country[] { Country.JM }), JOD(400, Digits.DIGITS_3, "Jordanian dinar", new Country[] { Country.JO }), JPY(392, Digits.DIGITS_0, "Japanese yen", new Country[] { Country.JP }), KES(404, Digits.DIGITS_2, "Kenyan shilling", new Country[] { Country.KE }), KGS(417, Digits.DIGITS_2, "Kyrgyzstani som", new Country[] { Country.KG }), KHR(116, Digits.DIGITS_2, "Cambodian riel", new Country[] { Country.KH }), KMF(174, Digits.DIGITS_0, "Comoro franc", new Country[] { Country.KM }), KPW(408, Digits.DIGITS_0, "North Korean won", new Country[] { Country.KP }), KRW(410, Digits.DIGITS_0, "South Korean won", new Country[] { Country.KR }), KWD(414, Digits.DIGITS_3, "Kuwaiti dinar", new Country[] { Country.KW }), KYD(136, Digits.DIGITS_2, "Cayman Islands dollar", new Country[] { Country.KY }), KZT(398, Digits.DIGITS_2, "Kazakhstani tenge", new Country[] { Country.KZ }), LAK(418, Digits.DIGITS_0, "Lao kip", new Country[] { Country.LA }), LBP(422, Digits.DIGITS_0, "Lebanese pound", new Country[] { Country.LB }), LKR(144, Digits.DIGITS_2, "Sri Lankan rupee", new Country[] { Country.LK }), LRD(430, Digits.DIGITS_2, "Liberian dollar", new Country[] { Country.LR }), LSL(426, Digits.DIGITS_2, "Lesotho loti", new Country[] { Country.LS }), LTL(440, Digits.DIGITS_2, "Lithuanian litas", new Country[] { Country.LT }), LVL(428, Digits.DIGITS_2, "Latvian lats", new Country[] { Country.LV }), LYD(434, Digits.DIGITS_3, "Libyan dinar", new Country[] { Country.LY }), MAD(504, Digits.DIGITS_2, "Moroccan dirham", new Country[] { Country.MA }), MDL(498, Digits.DIGITS_2, "Moldovan leu", new Country[] { Country.MD }), MGA(969, Digits.DIGITS_07, "Malagasy ariary", new Country[] { Country.MG }), MKD(807, Digits.DIGITS_0, "Macedonian denar", new Country[] { Country.MK }), MMK(104, Digits.DIGITS_0, "Myanma kyat", new Country[] { Country.MM }), MNT(496, Digits.DIGITS_2, "Mongolian tugrik", new Country[] { Country.MN }), MOP(446, Digits.DIGITS_2, "Macanese pataca", new Country[] { Country.MO }), MRO(478, Digits.DIGITS_07, "Mauritanian ouguiya", new Country[] { Country.MR }), MUR(480, Digits.DIGITS_2, "Mauritian rupee", new Country[] { Country.MU }), MVR(462, Digits.DIGITS_2, "Maldivian rufiyaa", new Country[] { Country.MV }), MWK(454, Digits.DIGITS_2, "Malawian kwacha", new Country[] { Country.MW }), MXN(484, Digits.DIGITS_2, "Mexican peso", new Country[] { Country.MX }), MXV(979, Digits.DIGITS_2, "Mexican Unidad de Inversion (UDI) (funds code)", new Country[] { Country.MX }), MYR(458, Digits.DIGITS_2, "Malaysian ringgit", new Country[] { Country.MY }), MZN(943, Digits.DIGITS_2, "Mozambican metical", new Country[] { Country.MZ }), NAD(516, Digits.DIGITS_2, "Namibian dollar", new Country[] { Country.NA }), NGN(566, Digits.DIGITS_2, "Nigerian naira", new Country[] { Country.NG }), NIO(558, Digits.DIGITS_2, "Nicaraguan córdoba", new Country[] { Country.NI }), NOK(578, Digits.DIGITS_2, "Norwegian krone", new Country[] { Country.NO, Country.SJ, Country.BV }), NPR(524, Digits.DIGITS_2, "Nepalese rupee", new Country[] { Country.NP }), NZD(554, Digits.DIGITS_2, "New Zealand dollar", new Country[] { Country.CK, Country.NZ, Country.NU, Country.PN, Country.TK }), OMR(512, Digits.DIGITS_3, "Omani rial", new Country[] { Country.OM }), PAB(590, Digits.DIGITS_2, "Panamanian balboa", new Country[] { Country.PA }), PEN(604, Digits.DIGITS_2, "Peruvian nuevo sol", new Country[] { Country.PE }), PGK(598, Digits.DIGITS_2, "Papua New Guinean kina", new Country[] { Country.PG }), PHP(608, Digits.DIGITS_2, "Philippine peso", new Country[] { Country.PH }), PKR(586, Digits.DIGITS_2, "Pakistani rupee", new Country[] { Country.PK }), PLN(985, Digits.DIGITS_2, "Polish złoty", new Country[] { Country.PL }), PYG(600, Digits.DIGITS_0, "Paraguayan guaraní", new Country[] { Country.PY }), QAR(634, Digits.DIGITS_2, "Qatari riyal", new Country[] { Country.QA }), RON(946, Digits.DIGITS_2, "Romanian new leu", new Country[] { Country.RO }), RSD(941, Digits.DIGITS_2, "Serbian dinar", new Country[] { Country.RS }), RUB(643, Digits.DIGITS_2, "Russian rouble", new Country[] { Country.RU }), RWF(646, Digits.DIGITS_0, "Rwandan franc", new Country[] { Country.RW }), SAR(682, Digits.DIGITS_2, "Saudi riyal", new Country[] { Country.SA }), SBD(90, Digits.DIGITS_2, "Solomon Islands dollar", new Country[] { Country.SB }), SCR(690, Digits.DIGITS_2, "Seychelles rupee", new Country[] { Country.SC }), SDG(938, Digits.DIGITS_2, "Sudanese pound", new Country[] { Country.SD }), SEK(752, Digits.DIGITS_2, "Swedish krona/kronor", new Country[] { Country.SE }), SGD(702, Digits.DIGITS_2, "Singapore dollar", new Country[] { Country.SG, Country.BN }), SHP(654, Digits.DIGITS_2, "Saint Helena pound", new Country[] { Country.SH }), SLL(694, Digits.DIGITS_0, "Sierra Leonean leone", new Country[] { Country.SL }), SOS(706, Digits.DIGITS_2, "Somali shilling", new Country[] { Country.SO }), SRD(968, Digits.DIGITS_2, "Surinamese dollar", new Country[] { Country.SR }), SSP(728, Digits.DIGITS_2, "South Sudanese pound", new Country[] { Country.SS }), STD(678, Digits.DIGITS_0, "São Tomé and Príncipe dobra", new Country[] { Country.ST }), SYP(760, Digits.DIGITS_2, "Syrian pound", new Country[] { Country.SY }), SZL(748, Digits.DIGITS_2, "Swazi lilangeni", new Country[] { Country.SZ }), THB(764, Digits.DIGITS_2, "Thai baht", new Country[] { Country.TH }), TJS(972, Digits.DIGITS_2, "Tajikistani somoni", new Country[] { Country.TJ }), TMT(934, Digits.DIGITS_2, "Turkmenistani manat", new Country[] { Country.TM }), TND(788, Digits.DIGITS_3, "Tunisian dinar", new Country[] { Country.TN }), TOP(776, Digits.DIGITS_2, "Tongan paʻanga", new Country[] { Country.TO }), TRY(949, Digits.DIGITS_2, "Turkish lira", new Country[] { Country.TR }), TTD(780, Digits.DIGITS_2, "Trinidad and Tobago dollar", new Country[] { Country.TT }), TWD(901, Digits.DIGITS_2, "New Taiwan dollar", new Country[] { Country.TW }), TZS(834, Digits.DIGITS_2, "Tanzanian shilling", new Country[] { Country.TZ }), UAH(980, Digits.DIGITS_2, "Ukrainian hryvnia", new Country[] { Country.UA }), UGX(800, Digits.DIGITS_2, "Ugandan shilling", new Country[] { Country.UG }), USD(840, Digits.DIGITS_2, "United States dollar", new Country[] { Country.AS, Country.BB, Country.BM, Country.IO, Country.VG, Country.BQ, Country.EC, Country.SV, Country.GU, Country.HT, Country.MH, Country.FM, Country.MP, Country.PW, Country.PA, Country.PR, Country.TL, Country.TC, Country.US, Country.VI, Country.ZW }), USN(997, Digits.DIGITS_2, "United States dollar (next day) (funds code)", new Country[] { Country.US }), USS(998, Digits.DIGITS_2, "United States dollar (same day) (funds code)", new Country[] { Country.US }), UYI(940, Digits.DIGITS_0, "Uruguay Peso en Unidades Indexadas (URUIURUI) (funds code)", new Country[] { Country.UY }), UYU(858, Digits.DIGITS_2, "Uruguayan peso", new Country[] { Country.UY }), UZS(860, Digits.DIGITS_2, "Uzbekistan som", new Country[] { Country.UZ }), VEF(937, Digits.DIGITS_2, "Venezuelan bolívar fuerte", new Country[] { Country.VE }), VND(704, Digits.DIGITS_0, "Vietnamese dong", new Country[] { Country.VN }), VUV(548, Digits.DIGITS_0, "Vanuatu vatu", new Country[] { Country.VU }), WST(882, Digits.DIGITS_2, "Samoan tala", new Country[] { Country.WS }), XAF(950, Digits.DIGITS_0, "CFA franc BEAC", new Country[] { Country.CM, Country.CF, Country.CD, Country.TD, Country.GQ, Country.GA }), XAG(961, Digits.DIGITS_NO, "Silver (one troy ounce)", new Country[] { }), XAU(959, Digits.DIGITS_NO, "Gold (one troy ounce)", new Country[] { }), XBA(955, Digits.DIGITS_NO, "European Composite Unit (EURCO) (bond market unit)", new Country[] { }), XBB(956, Digits.DIGITS_NO, "European Monetary Unit (E.M.U.-6) (bond market unit)", new Country[] { }), XBC(957, Digits.DIGITS_NO, "European Unit of Account 9 (E.U.A.-9) (bond market unit)", new Country[] { }), XBD(958, Digits.DIGITS_NO, "European Unit of Account 17 (E.U.A.-17) (bond market unit)", new Country[] { }), XCD(951, Digits.DIGITS_2, "East Caribbean dollar", new Country[] { Country.AI, Country.AG, Country.DM, Country.GD, Country.MS, Country.KN, Country.LC, Country.VC }), XDR(960, Digits.DIGITS_NO, "Special drawing rights International Monetary Fund", new Country[] { }), XFU(-1, Digits.DIGITS_NO, "UIC franc (special settlement currency)", new Country[] { }), XOF(952, Digits.DIGITS_0, "CFA franc BCEAO", new Country[] { Country.BJ, Country.BF, Country.CI, Country.GW, Country.ML, Country.NE, Country.SN, Country.TG }), XPD(964, Digits.DIGITS_NO, "Palladium (one troy ounce)", new Country[] { }), XPF(953, Digits.DIGITS_0, "CFP franc", new Country[] { Country.PF, Country.NC, Country.WF }), XPT(962, Digits.DIGITS_NO, "Platinum (one troy ounce)", new Country[] { }), XTS(963, Digits.DIGITS_NO, "Code reserved for testing purposes", new Country[] { }), XXX(999, Digits.DIGITS_NO, "No currency", new Country[] { }), YER(886, Digits.DIGITS_2, "Yemeni rial", new Country[] { Country.YE }), ZAR(710, Digits.DIGITS_2, "South African rand", new Country[] { Country.ZA }), ZMK(894, Digits.DIGITS_2, "Zambian kwacha", new Country[] { Country.ZM }); private final String code; private final String name; private final int numeric; private final Digits digits; private final Country[] countries; private enum Digits { DIGITS_0, DIGITS_2, DIGITS_3, DIGITS_07, DIGITS_NO }; private Currency(int numeric, Digits digits, String name, Country[] countries) { this.code = name().toUpperCase(); this.name = name; this.numeric = numeric; this.digits = digits; this.countries = countries; } /** * Returns the currency code. * * @return The code, e.g. "USD", "EUR", etc. */ public String getCode() { return code; } /** * Returns the currency name in English. * * @return The English currency name, e.g. "United States dollar". */ public String getName() { return name; } /** * Returns a list of countries that use the currency. * * @return The countries that use the currency. */ public Country[] getCountries() { return countries; } /** * Formats and outputs the amount for the given currency. * * @param amount The amount. * @return The formatted amount, e.g. "USD 10.38". */ public String format(long amount) { String formatted; switch (digits) { case DIGITS_0: { // e.g. "10" formatted = String.valueOf(amount); break; } case DIGITS_2: { // e.g. "10.99" String a = String.valueOf(amount / 100); String b = String.valueOf(amount % 100); while (b.length() < 2) { b = "0" + b; } formatted = a + "." + b; break; } case DIGITS_3: { // e.g. "10.999" String a = String.valueOf(amount / 1000); String b = String.valueOf(amount % 1000); while (b.length() < 3) { b = "0" + b; } formatted = a + "." + b; break; } case DIGITS_07: { // e.g. "10" ==> NOTE: http://en.wikipedia.org/wiki/Malagasy_ariary (some special rules apply!?) formatted = String.valueOf(amount); break; } case DIGITS_NO: { formatted = String.valueOf(amount); break; } default: Log.error("Digits not implemented: " + digits); formatted = String.valueOf(amount); } return getCode() + " " + formatted; } /** * Returns the currency for the given code. * * @param code The code, e.g. "USD", "EUR", etc. * @return The corresponding currency or null if it doesn't exist. */ public static Currency find(String code) { for (int i = 0; i < values().length; i++) { if (values()[i].getCode().equals(code)) { return values()[i]; } } // not found return null; } /** * Returns the currency for the inputed country. * * @param country The country. * @return The currency or null if multiply currencies or no currencies exist. */ public static Currency find(Country country) { // use some default rules for countries with multiple currencies (should go into Country.java!) switch (country) { case BO: { return Currency.BOB; } case CH: { return Currency.CHF; } case CL: { return Currency.CLP; } case MX: { return Currency.MXN; } case US: { return Currency.USD; } case UY: { return Currency.UYU; } default: { // if default rules don't apply, let's see if we can resolve otherwise! Currency currency = null; for (int i = 0; i < values().length; i++) { Country[] countries = values()[i].getCountries(); for (int k = 0; k < countries.length; k++) { if (countries[k] == country) { if (currency != null) { // more than one currency! return null; } else { currency = values()[i]; } } } } // return the currency return currency; } } } /** * Returns the currency for the inputed country. * * @param country The country. * @param defaultCurrency The default currency to use if more than 1 currency exists or no currency exists. * @return The currency or default currency if multiply currencies or no currencies exist. */ public static Currency find(Country country, Currency defaultCurrency) { Currency currency = find(country); if (currency == null) { return defaultCurrency; } else { return currency; } } // ------------------------------------------------------------------------------------------------------------------- public String getISOCodeAlpha() { return name(); } public int getISOCodeNumeric() { return numeric; } @Override public String toString() { return code; } }

September 26, 2012

Desert Stormfront released on PC, Mac, Linux & Android

Filed under: Announcement,Development — noblemaster @ 12:40

Desert Stormfront is finally released! Desert Stormfront is a real-time strategy game inspired by the turn-based “Classic Empire” wargame by Walter Bright. Units and structures are modeled after the original following a rock-paper-scissors system. Unit movement is in real-time similar to the classic “Command & Conquer” albeit simplified aiming at a game that is easy to learn but difficult to master.

Desert Stormfront takes place in present-time Middle East. The player assumes command of the Western coalition and fights real-time battles for control of cities and oil fields in Iran, Iraq, Saudia Arabia and Afghanistan. Maps are based on real-world locations in the Middle East. The story is fictional (as of this writing). The game supports cross-platform multiplayer matches over LAN and internet including co-op multiplayer.

Key Features:

  • Real-Time Strategy (RTS) in the Middle East
  • Single Player and Multiplayer (over the LAN and Internet)
  • 30 Campaign Missions incl. Scoring/Rating
  • Random Map Generator + Skirmish Maps
  • Modes: Attack, Defense, Capture the Flag & Convoy Missions

Release Date: Sept. 26, 2012
Platforms: PC, Mac, Linux, Android
Available: via game’s website (PC, Mac, Linux) and Google Play (Android)

Desert Stormfront Screenshot 1

Desert Stormfront Screenshot 2

Desert Stormfront Screenshot 3

PRESS RELEASE: Desert Stormfront – a Real-Time Adaption of the “Classic Empire” Game

Filed under: Announcement,Business — noblemaster @ 10:33

Desert Stormfront – a Real-Time Adaption of the “Classic Empire” Game (for PC, Mac, Linux and Android)

Tokyo, Japan – September 26, 2012 — Noble Master releases “Desert Stormfront”, a real-time strategy game inspired by the turn-based “Classic Empire” wargame by Walter Bright. Units and structures are modeled after the original following a rock-paper-scissors system. Unit movement is in real-time similar to the classic “Command & Conquer” albeit simplified aiming at a game that is easy to learn but difficult to master.

Desert Stormfront takes place in present-time Middle East. The player assumes command of the Western coalition and fights real-time battles for control of cities and oil fields in Iran, Iraq, Saudia Arabia and Afghanistan. Game play modes include Survival, Elimination, Defense, Capture the Flag and Convoy Missions. The game is available for PC, Mac, Linux as well as Android and supports cross-platform multiplayer matches over LAN and internet including co-op multiplayer.

Features of Desert Stormfront:
- Real-Time Strategy (RTS) in the Middle East
- Single Player and Multiplayer (over the LAN and Internet)
- 30 Campaign Missions incl. Scoring/Rating
- Random Map Generator + Skirmish Maps
- Modes: Attack, Defense, Capture the Flag & Convoy Missions
- Ground Units: Humvees, Tanks, Artillery, 4×4, Mechanic
- Naval Units: Gunboat, Submarine, Cruiser and Carrier
- Air Units: Fighter Planes, Chinook, Apache Helicopter
- Special Unit: Super-Hovercraft
- Land Structures: Base Station, Shipyard, Airfield and Oil Field
- Nations: USA, England, France, Iraq, Iran, Saudi Arabia, Afghanistan
- Team-Play (included in multiplayer)
- High Score and Playing Statistics
- Challenging AI with 4 Difficulty Settings
- Engaging Music and Sound Effects

“The dev. team behind Desert Stormfront is a truly global affair with contributors from Europe, Asia and North America.”, said Christoph Aschwanden, owner of Noble Master. “The whole team is looking forward to finally release the game.”

Desert Stormfront is available in the English, Japanese, Korean and Russian language. The game is priced at USD 9.99/EUR 7.99 for PC, Mac, Linux (via game’s website) and USD 4.99/EUR 3.99 for Android (on GooglePlay). A free demo version is available for try out before purchase. For additional information on “Desert Stormfront” such as press kit and review copy contact Christoph Aschwanden via chris@noblemaster.com.

Noble Master is an indie game company with focus on real-time and turn-based strategy games for desktop and mobile devices.

# # #

Press Kit (logo, screenshots, trailers, links, platforms, features etc.):
http://www.noblemaster.com/press/sheet.php?p=desert_stormfront

 

September 17, 2012

tiicoon – Multiplayer City Simulation – Narrated Demo

Filed under: Development — noblemaster @ 01:25

Although tiicoon (pronounced: /taɪˈkuːn/) is currently abandoned, I figured it would be nice to create a trailer. Arvid Wessman (Arvid Wessman Productions) did all the art. I did all the programming. Both art & programming are about 50% done.

August 28, 2012

Desert Stormfront: Official Game Trailer

Filed under: Announcement,Business — noblemaster @ 20:10

Desert Stormfront is now in beta-testing stage. If everything goes as planned, it is scheduled for release next month (September 2012) on PC, Mac, Linux & Android. The iOS version will be available once the libgdx backend supports porting to iOS.

Older Posts »