taw's blog

The best kittens, technology, and video games blog in the world.

Tuesday, November 24, 2015

Let's Play Civilization 5 on Ravnica as Niv Mizzet of Izzet League

The first time I played Civilization 5 I thought it's OK game, but nothing special. Gradually my attitude changed to something like this:

Yo dawg, I heard you like civ5...

So without waiting for other series to finish getting published, here's another one! Just like my previous series (Poland in Polish, America on Great Plains map, and China on China map) it's just a tiny bit gimmicky: we're playing with all 10 guilds of Ravnica on a large fractal map.

Here's episode one. Episodes will be released one a day at same time.

The playlist where they'll all get published is here. Or you could just follow my channel on youtube.

The goal is to take all 10 guild halls, get voted Supreme Ruler of Ravnica, or build a spaceship to Innistrad or some other plane. Well, technically culture victory is also a possibility, but it never seemed even remotely viable in any of my previous campaigns, so I don't normally give that much thought.

Our guild is Izzet League, led by great dragon Niv-Mizzet. All 10 guilds seem to be extremely powerful, so they're sort of balanced against each other, but would be somewhat overpowered mixed with regular civs.

Our uniques are:

  • All science buildings are upkeep free, give +1 gold, and +2 happiness
  • Izzet Boilerworks - factory replacement which doesn't require coal, and gives +4 science and +50% science
  • Hypersonic Dragon - basically medieval Helicopter Gunship, a Knight replacement with strength 20, movement 5, bonus vs mounted units, and hover. It can't take cities, and doesn't upgrade to anything.
Sounds pretty strong? Just watch the series to see what other guilds get. Their uniques gave me more trouble than I had from uniques in any other campaign (my suffering in America campaign was mostly self-inflicted).

In the campaign I play mostly decently (unlike in that America campaign...). There's a good deal of unwarranted arrogance which sometimes backfires, but I totally blame all that on roleplaying an elder dragon.

The mods for guilds are:
Other mods used:
There were a few issues with these mods:
  • New version of Extended User Interface has some absolutely dreadful default behaviour with dialogs autoclosing, I wanted to roll back to old version but that's extremely unsafe with civ5 mods, and can easily result in corrupted campaign impossible to continue (my Germany campaign was lost this way). Fortunately after the campaign I figured out how to turn off silly behaviour.
  • I have two mods changing religions - Race for Religions, and New Beliefs Pack. I planned to just go for one of them, but somehow I messed it up and it's another campaign with both. It was actually surprisingly good due to some other choices I made, but I'll make sure to pick just one in the future.
  • I used different mod for unit promotions, and I'm still really tempted to just write my own. Unless you know of another I should give a shot first.
  • Units donated by militaristic city states with 0xp feel worthless. Is there any mod that lets them have higher XP? I tried one that was supposed to give units 1xp/turn from just sitting in a citadel (until some maximum based on your tech), but it never worked.
  • Are there any mods which change puppet cities priorities to something more sensible (production focus instead of gold focus would be a good start)?
  • Are there any mods which fix priorities for tile expansions? The algorithm is completely ridiculous choosing featureless ocean tiles and tundra leading nowhere over strategic/luxury resource tiles, which requires a lot of money, but also a lot of tile assignment babysitting, which is not part of the game I enjoy particularly much and prefer to leave automated 90% of the time.
In any case, I had tons of fun, and I'll definitely start another civ5 campaign soon.

Tuesday, November 17, 2015

SQL-based Game of Life from Code Retreat 2015

Maine Coon by George C Slade from flickr (CC-NC-ND)

Last weekend I took part in my second Code Retreat event. The code is supposed to be deleted after the end, but like a good first world anarchist I saved one of them.

So here it is - SQL-based game of life.

Schema and test fixtures

It's all SQLite.

First we need a table to hold our simulations. It will be one table indexed by simulation name, generation number, x, and y listing all live cells.

Grid has no bounds, and can potentially be as big as your database allows.

  simulation string,
  generation int,
  x int,
  y int

To run simulation we feed it initial conditions. Here's some test data. Of course you'll use real data instead:

  ("line", 0, 0, 0),
  ("line", 0, 1, 0),
  ("line", 0, 2, 0);
  ("glider", 0, 1, 0),
  ("glider", 0, 2, 1),
  ("glider", 0, 0, 2),
  ("glider", 0, 1, 2),
  ("glider", 0, 2, 2);

And now we need to code the game.

Counting cell's neighbours

It's tempting to do a double join over x and then y, but it's actually much better to simply create helper table and join that once:

INSERT INTO neighbour_coordinates VALUES (-1,-1), (-1,0), (-1,+1), (0,-1), (0,+1), (+1,-1), (+1,0), (+1, +1);

CREATE VIEW live_neighbours AS
  SELECT simulation, generation, x+dx as xx, y+dy as yy, count(*) as cnt
  FROM life
  JOIN neighbour_coordinates 
  GROUP BY simulation, generation, xx, yy;

Isn't SQL great? We already have neighbour counts for every cell in the simulation with one or more neighbours.


Now it's simple step - for cells which are alive we calculate them as alive if they have 2 or 3 neighbours in previously calculated view - for cells which are dead if they have exactly 3 neighbours. That's a simple JOIN on x and y... Oh wait, we're not joining data, we're joining existence or nonexistence of cell in life table, so we need a special kind of JOIN:

CREATE VIEW current_status AS
    live_neighbours.xx as x,
    live_neighbours.yy as y,
    (life.simulation NOT NULL) as alive
  FROM live_neighbours
    life.x = live_neighbours.xx AND
    life.y = live_neighbours.yy AND
    life.simulation = live_neighbours.simulation AND
    life.generation = live_neighbours.generation;

SQL is friendly and readable, am I right?

What's alive next generation?

Well, that's fairly straightforward:

CREATE VIEW alive_next_generation AS
  SELECT simulation, generation+1 as generation, x, y
  FROM current_status
  WHERE (alive AND (cnt = 2 OR cnt = 3)) OR
        ((NOT alive) AND (cnt = 3));

Where are my stored procedures?

Unfortunately here we ran into a horrible tragedy, as SQLite doesn't support stored procedures, so we needed a tiny Ruby wrapper. Obvious Bobby Tables exploit included as a bonus:

simulation = ARGV[0]
generation = ARGV[1].to_i
sql = "INSERT INTO life SELECT * FROM alive_next_generation WHERE simulation = '%s' AND generation = %d;" % [simulation, generation]
IO.popen("sqlite3 life.db", "w") do |fh|
  fh.puts sql

Querying database

As Ruby code for updating database was ready, Copy&Paste Design Pattern was used to make it also work as data querying, if for some reason you don't want to do so from SQLite console:

simulation = ARGV[0]
generation = ARGV[1].to_i
sql = "SELECT x, y FROM life WHERE simulation = '%s' AND generation = %d;" % [simulation, generation]
IO.popen("sqlite3 life.db", "w") do |fh|
  fh.puts sql

Test driver

Of course everything was driven in a very  TDD way, more or less. Here's test driver Rakefile:

def update(simulation, generations)
  generations.each do |generation|
    system "./update_simulation #{simulation} #{generation}"
def query(simulation, generation)
  `./query_simulation #{simulation} #{generation}`.lines.sort
task "init" do
  system "trash life.db"
  system "sqlite3 life.db <schema.sql
  system "sqlite3 life.db <fixtures.sql
task "test" => ["init"] do
  update("line", 1..2)
  raise "Stayed the same" if query("line", 0) == query("line", 1)
  raise "Not back to original status" if query("line", 0) != query("line", 2)
  update("glider", 1..4)
  glider0 = `echo "select x+1 as x, y+1 as y from life where simulation = 'glider' and generation = 0;" | sqlite3 life.db`.lines.sort
  glider4 = `echo "select x, y from life where simulation = 'glider' and generation = 4;" | sqlite3 life.db`.lines.sort
  raise "Did not glide" unless glider0 == glider4

What's next?

Next step would obviously be ASCII-Artifying output instead of just dumping a list of X/Y coordinates as a table - and possibly similar ASCII-Art reader. Unfortunately 45 minute limit on the round prevented that from happening.

I'd like to thank my coding partner for cooperation in writing this. For understandable reasons I'm not going to do any doxxing.

Sunday, November 15, 2015

Let's Play Civilization 5 as Wu Zetian of China

My first Immortal difficulty campaign as America went to hell fast for self-inflicted reasons.

I thought I can do a lot better so I started another campaign just as I was done with America - their publication will overlap as I want to keep all my series to one episode per day, and I don't particularly want to delay this one.

So here's the new campaign as Wu Zetian of China. We're playing on China map, and I hand-picked three opponents - Sejong of Korea, Oda Nobunaga of Japan, Genghis Khan as Mongolia. Other four opponents are Casimir III of Poland, Montezuma of the Aztecs, Napoleon of France, and Nebuchadnezzar II of Babylon.

That's my second campaign on immortal difficulty, and I'd say it went a lot better than the first one. There were some challenges and minor mistakes, but nothing on the scale of America campaign.

If you want to follow the series, here's the playlist to which episodes will be published, or simply follow my channel.

Mods used are nearly the same:
As for modding changes:
  • This time More Luxuries is working, as it was incompatible with Great Plains Plus map used in America campaign.
  • I wasn't totally convinced about Reform and Rule mod, but I didn't find a good replacement. I'm open to suggestions, but I don't want to go back to vanilla.
  • It turns out Race for Religions massively nerfs religions by moving all the good stuff to reformation beliefs, so religions are pointless if you don't take whole piety tree. I didn't realize that in my America campaign when I had no shot at religion game anyway, but I'm pretty sure I won't be using this mod in the future. Religions are already very weak, they don't deserve more nerfing. And it already overlaps with New Beliefs Pack (which adds more options without nerfing religions), so there's no reason to use both.
  • Promotions Pack - it has really good promotions for mounted units (+1 movement per level), and decent promotions for archers (they can get up to +2 range on very high levels, so by the time Archers become Gatling Guns they remain useful) and siege units (similar to archers, except they rarely get very far with levels), but it's really miserable for all other unit types, especially to Swordsmen-line units who never get anything good, and Pikemen and Tanks who both get far worse upgrades than mounted units. I'm seriously considering writing my own mod here.
Another minor thing - during America campaign I figured out how to make custom thumbnails for youtube videos. So now depending on game I might use that feature a lot. Civ5 really needs it, otherwise youtube just chooses diplomacy pics, which is fairly poor idea.

Wednesday, November 11, 2015

Victoria 2: Victorian America AAR

Post 1 - Originally published on Google+ on 2015-11-09 13:59:24 UTC

Victorian America: Part 01: 1836-1844: Manifest Destiny

So I decided to learn how to Victoria 2, going with very easy mode - playing America, and pre-modding the game to remove all infamy and jingoism restrictions on adding wargoals.

I still remember infamy minimization minigame from EU3 and what pain in the ass it was before I figured out how to sidestep it with proper technique (declaring 5 wars with Remove Kebab CB same day, then get some forward provinces to border as many different kinds of kebab as possible).

If I end up liking this game (and my computer likes running it), I'll probably try playing with infamy and jingoism systems enabled, but first let's have an easy campaign.

Oh and I'm going to use console for everything I don't like.


• resolve any technical issues
• figure out how to mod Victoria 2, because what's the point of playing unmodded games?
• don't lose horribly
• become #1 great power
• annex Canada, and control in one way or another the whole Western hemisphere, and possibly Japan and parts of Africa
• pass social and political reforms including obviously abolition of slavery
• figure out how to industry

So let's start by turning off the music, and getting something nicer on youtube instead. The main downside of recording video games is that I can't play any Christina Perri or Nightcore or anything else good or I'd get the video b& for copyright reasons, fortunately this campaign is not on the video, so I can play something good.

Group armies and navies near Texas, send some settlers, influence random countries we're at good relations with, call new elections, research education tech, encourage clergy, nothing special.

First thing I discovered is that watching Victoria 2 videos and playing a few other Paradox games did not prepare me for figuring out how attrition works in this one. Ships take attrition while docked because they're underfunded? Army "supply weight" is not equal to number of soldiers? What is this all even?

Next question was what the fuck religious policy does? Game doesn't provide any information whatsoever, and wiki is just as worthless.

I had to intervene with Mexico-Texas war on Texas side, admitting it afterwards as free state. Apparently unlike with Europa Universalis, I can't burn colonies in progress of countries I'm at war with, unless that option is somehow hidden somewhere.

Next big problem was my textile factories unable to purchase any dyes - I failed to find them in game. Apparently the only production is in India (not that one), Dutch Moluccas (can I sphere them or something), and Mexico (let's wait for truces to expire first).

I kept calling for new elections every 6 months, but not much actually changes - electoral events affect just one county, not even whole duchy.

After colonization race with Mexico ended I disbanded all my wooden ships as waste of money, and built some steamer transports and commerce raiders instead.

I passed decisions to get cores on Cuba and Western USA under Mexican occupation.

Well, 5 year truce was up (imagine Victoria 3 with 15 year truces...), so it was time to get my cores back - and USCA provided surprisingly much help. By the way, game giving me +5 attack general and +5 attack admiral out of nowhere, what's up with that?

I got 4/5 cores from Mexico. Of cores, I still need Arizona, in addition to Cuba, that one county in New England Canada holds.

My sphere is expanding nicely, with Britain trying to compete for Venezuela, but leaving the rest of Americas to me unopposed. As for industry, capitalists are happily building it, but there never seems to be enough workers (I have interventionism, so I can't build factories, but I can subsidize them).

I admitted all newly acquired states as free states, and there were a lot of them (by colonization, by war, by evolution of existing territories). This resulted in max consciousness of everybody in the South (including African slaves), and zero consciousness of everybody in the North.

I guess it's time to have some fun in Africa while I wait for truce with Mexico to expire?

Still one core, and they're making dyes there on the other side of Rio Grande, so it's like I plan to stop

Way too much Mexico in this start

Sphering a bit

Post 2 - Originally published on Google+ on 2015-11-09 16:41:20 UTC

Victorian America: Part 02: 1844-1852: Warscore nonsense is back

About 1/3 of my armies were Dixie, so I sent them all to Africa, but I had to add some Yankee brigades as well. Since we're playing without silliness like infamy, it was time to bring liberty to everybody in Africa. Once I got some land I packed my army home and recruited some locals to fight future wars.

Meanwhile I discovered some silly things:

• reassigning commanders to different units while at war costs prestige, like WTF?
• I accidentally had a rally point for ships in a county next to one with naval base, not one with naval base. That meant that tons of docked ships just sunk.
• Every elections I get spammed by tons of messages about political issues, the choice is approximately irrelevant.
• Without elections I still get spammed by tons of messages about political issues, the choice is approximately irrelevant.
• Pop consciousness doesn't seem to be doing anything whatsoever
• My population is supposedly huge, but max number of brigades I can support is consistently tiny

Anyway, second Mexican war. I justified war for Chihuahua (as it had dyes and gold), then I wanted my core in Arizona and state of Durango (also with dyes and gold), but that was too much warscore, so I've chosen Sonora instead, which is fairly useless but would at least mean nice borders. Total warscore 98%.

And somehow during the war it increased to 102%. All the horrible memories from EU3 are coming back... EU4 had that happen occasionally, but much less frequently. Well, I can skip Arizona, as it's a fairly worthless land, but it's a fairly bullshit way to lose 10% of my prestige and fall from #2 to #3 greatest power - the only thing holding me there is prestige anyway, my military is mediocre as my pops dislike being soldiers, and my industry is mediocre as my pops dislike being craftsmen.

I'm not sure how I can convince my pops - I could use national focuses, but I'm trying to use them to make people read better.

By the way, this only cost me some prestige, how annoying would it be if it cost me 10 years' worth of infamy as well...

My impressions of the game so far are not amazing. It feels like they had a fun idea, but never polished it properly.

That Arizona-sized hole cost me 10% of my prestige

That Spanish Ethiopia should go if I want to do proper colonization, but my pops don't want to soldier, and Europeans don't want to ally me.

Post 3 - Originally published on Google+ on 2015-11-09 18:11:35 UTC

Victorian America: Part 03: 1852: Debugging Interlude

I wanted to figure out why I'm not getting any soldiers - and the answer is game being stupid. I have 81.89k soldier pops, and that could be tons of brigades - unfortunately instead of using national manpower pool, or even duchy manpower pool, brigades come from individual counties.

Even worse - soldier population in each county is divided into multiple nationality/religion combinations, every one of them having separate manpower pool. So county of Kano has Sunni Hausa, Protestant Hausa, Animist Hausa, and Sunni Fube - all of them to small to support even one brigade.

Spain has 89.03k soldiers, just a bit more than me, but can support 31 vs my 14 brigades because they're in fewer counties and less diverse. Panjab has 77.40k and support for 27 brigades.

This isn't gamebreaking for USA, as they get enough immigration coming, and enough assimilation of weird nationality/religion combination immigrant pops, that eventually their low density countries will be able to support brigades, but it's another example of "game came out without any QA" problem, and causes a lot of brigades not reinforcing or disappearing because their tiny pop base couldn't reinforce them, while most of my soldier pops take wages but don't contribute to anything because they're in manpower pools to tiny to do anything with.

On the other hand, sailors don't use any kind of manpower, so it's much easier to be competitive on the sea.

I'm not sure what would be a good mod fix - it's possible to relocate pops from one county to another by event (Trail of Tears decision relocated all my Cherokees this way), so maybe we should just move all soldier pops from various counties to duchy capital? I'm not sure how much that would mess with promotion/demotion system.

By the way, I'm not sure if I'll ever have civil war at all. It needs John Brown's Raid (prerequisites - high consciousness in free state), Dred Scott Decision (prerequisites - high consciousness in slave state; and it already happened), and 40% liberals in upper house.

As I'm adding free states only, free staters don't give a shit about slavery, so they shouldn't be any raid. As far as I can tell, taking either side consistently will avoid civil war. Unless it can trigger off consciousness in some colonial state, or in New Mexico where there's some unrelated silliness involving natives, or something like that.

Not to mention I don't know why of 4 parties (conservative Democrats, reactionary Southern Democrats, liberal Whigs, recent liberal Free Soil Party), liberals should ever get 40%. I haven't been consistent in values I promote. Whenever there's a popup I try to go:

• Protectionism (which Southern Democrats and Free Soil Party share)
• State capitalism (Southern Democrats only)
• Secularism (none of them)
• Full Citizenship (which both liberal parties share).
• Jingoism (which Democrats and Southern Democrats share)

And yet conservative Democratic Party keeps winning huge majorities regardless of my choices, in spite of universal voting, secret ballots, free press etc. Presumably if someone actually wanted to avoid civil war, it would have been fairly easy.

Not like there's much reason to avoid it - unless CSA somehow suddenly gets allies, it would have same problems I have except a third of my size, not even counting Africans, and no navy. It would probably only be a problem if it happened during some other war or serious crisis.

Another thing - so far I'm not sure game has enough happening for someone located outside Europe.
• I can't seem to be able to affect my country's politics in any way whatsoever in spite of trying my best.
• I can't do any diplomacy as nobody bothers competing for my sphere (even Britain decided it's not worth it), and Europeans won't ally me because I'm too far.
• Industry does what it wants on its own.
• Research is mostly just tied to specific dates, so there don't seem to be any tricky choices here.
• Major events so far were driven by scripted decisions and events.

I guess I could try invading China or something?

Maybe it's a lot more interesting as some minor power or as someone in Europe where the action seems to be.

Post 4 - Originally published on Google+ on 2015-11-10 03:32:19 UTC

Victorian America: Part 04: 1852-1858: Spanish-American War

So I was actually wrong and election events operate on duchy not county level.

I changed Panama / Suez canal decisions to make requirements visible in-game.

I got correct tech to get Establish Protectorate CB, planning to use it against Morocco - turns out requirements were phrased in a dumb way Paradox titles use, as it "has less that 5 states" - key number being 5. Real criterion with sensible wording is "4 or less states".

I need naval bases, so I attacked Oman. That got Egypt into war, which means I can add Sinai as wargoal (assuming I can peace them out separately, otherwise that's over 100%). And that somehow made Spain take over the war? No idea how. They're friendly with Egypt, but Egypt wasn't war target or even war leader (I think...). Oh and they were also allied with Abu Dhabi, but who cares about that.

Of couse game did not consider it reasonable to inform me of it in any way.

OK, I'll just call my sphere allies, they wanted to join my original war, but I didn't call them as it seemed pointless. Oh wait, everyone is at impossible. Why? Nobody knows. For fuck's sake, that's like worst parts of EU3 all over again.

And they even landed in Florida without any kind of hint from the game. Fine, let's see what this mobilize button does and start blockade of Cuba.

Then they landed in Hawaii, but I couldn't reall do much about it. So much for my naval base I'm building there.

I assigned some general to peasant mobs, and cleared Florida invasion, then embarked them on ships and landed on small stack in Cuba. Why are they fighting like shit? Oh, when I said embark, 18/19 peasant brigades decided to embark ships as that's how much space there was, but general stayed with the last one. For fuck's sake game, how much crap like that is there going to be!

Now for some weird reasons I can't separate peace Egypt, but I can separate peace Oman (but that wolud be 85% warscore). So I guess I need to attack Oman first to get them out of the war? Well, Yemen allied with them mid-war, but didn't join the war, and neither Yemen nor Nejd want to let my troops through. I guess I need to attack Yemen so it lets me through? That's going to be a big war.

I sent all the peasants to Arabia, where I annexed Yemen, Oman (including its African ports which were what the war was really about), Abu Dhabi (just because screw them), I got Sinai from Egypt.

During wars I changed research to some army techs - I have tech group which gives bonuses to culture/industry/commerce research and penalties to army/navy research, so I'm mostly prioritizing those, especially since some techs outside army tree also give army bonuses (mostly chemistry group), but that was sort of needed.

Spain was sort of anemic, they mobilized like twice the army I could get even with peasants, but they mostly tried to send 1-2 transports all over the world. That actually worked with Hawaii (and it was not worth trying to recover it without Panama canal - peasants had much shorted way to Egypt), but nowhere else. Their navies were too small, so I could just do whatever I wanted. Well, whatever naval attrition allowed me to do.

Now I have tons of places to build naval bases, which was the point of all this, but I got rather deep in debt with all this.

To build canals I need two more techs - one in industry tree I'm going to do anyway, the other is Iron Steamers which unlock in 1860, so I guess these are going to be the only techs.

So far no signs of John Brown's Raid, so Civil War might very well not trigger (in 1866 slavery debate modifier goes away and I can ban slavery by reform if I understand correctly).

By the way what I did would have cost me:
• up to 10 infamy for Oman (depending on when I'd get caught)
• up to 10 infamy for Yemen (depending on when I'd get caught)
• guarantees 10 infamy for Abu Dhabi
• guaranteed 5 infamy for Sinai
• 0 infamy for Cuba

Which added together is Literally Hitler range, just for this one war.

I can't say I feel this is reasonable. I've been somewhat aggressive, but nothing crazy. The game has this very strict infamy system, and then gives scripted infamy-free CBs, to get very rapid expansion, but only of the approved kind.

For example Prussia into North German Federation into Germany is crazy fast expansion, and it would cost like 10 Hitlers worth of infamy if it didn't have supporting events. Same amount if you tried to get yourself colonial empire by conquest instead of by getting Sokoto/Ethiopia early and rushing colonization spree on the clock in 1870.

Infamy feels like punishment for going off scripted path instead of punishment for rapidly expanding. I can't say I'm fond of this design. Even EU3 did it better.

Post 5 - Originally published on Google+ on 2015-11-10 07:02:44 UTC

Victorian America: Part 05: 1858-1863: Civil War after all

Events that give everybody extra consciousness kept coming and coming at much faster rate, until I actually got John Brown's Raid. Also they're super annoying and spammy as hell. Just ask once, I'm going to answer the same way in every county, probably.

No matter, I have unfinished business with Sokoto and Mexico. I called all my allies to my war with Mexico, all were "very likely" to accept, and not one of them showed up, which presumably means it's another one of those tooltip bugs.

And I got civil war after all - with my stack liberating Mexico fighting each other, unfortunately CSA got teleporting +3 general and somehow they were defenders with +2 terrain and +1 dig-in bonus. And they start at same tech at me. Not that it helped them much in that battle, total stackwipe once my reinforcements from neighbouring province showed up.

This is exactly the situation where civil war is most dangerous - they are big (as Cuba was admitted as slave territory, I can only make it free when it becomes slave, so they got Cuba), I'm in 2 other wars, with 1/3 of my army in Africa, and all my allies are lost because of game bug. Lovely.

Time to press mobilize button for the second time. And after I blockaded their ports there's a decision that gives them a bit of monthly war exhaustion.

In good news, my pacific fleet was blockading all of Mexico's fleets, and they attacked me, 15 on 30. Like I don't know something maybe? Turns out Mexico had reactionary rebels who sieged down just the province where their fleet was hiding.

After Sokoto war ended, my spherelings decided to really me and some were willing to join war against Mexico - turns out allies can't join civil wars, but I could move all my troops to carpet siege CSA - as they would not take a hint otherwise.

During civil war I passed Emancipation Proclamation abolishing slavery, Homestead Act adding +50% immigrant attraction (and again, game stuck prerequisite in wrong block, so I have no idea what the fuck enabled it), and built both Suez and Panama canals.

After finishing war with Mexico in which I got two of their states, but not my Arizona, I disbanded all armies backed by understrength pops, recruited new armies (immigration is crazy fast), and paid Russia 72k for Alaska.

So here's the question - how the hell can I get Canada? I'm #3 in the world, but that's really just prestige, my industry is 6th, military 12th, and probably seriously underteched compared with Europeans. Numbers #1 and #2 are Britain and Germany, and they're best buddies - everybody else in Europe is getting wrecked by their coalition.

Spain and Portugal are allied to Britain, Netherlands are allied to Spain (so by chain to Britain) and France - so I can't really challenge any of them for colonies by force. I guess Ottomans aren't allied with anybody strong.

I think I ran out of scripted content. The only decisions still on potential list are sign Geneva Convention (which seems awful), and restore the academia (which removes my bonuses to culture/industry/commerce techs and penalties to army/navy techs - I might do that late game if I need to catch up and once most techs are unlocked, right now it seems pointless). It's still possible that there's some scripted stuff which will come out of nowhere.

So far I have all political reforms and zero social reforms except trinket minimum wage I started with. Sadly dreadful parties like Republicans (Laissez Faire) and Socialists (Anti Military) seem to have nearly half of the vote.


First battle of the Civil War was fought in Mexico. After that CSA only had peasants.

Arizona-shaped hole in warscore system

Post 6 - Originally published on Google+ on 2015-11-10 15:19:10 UTC

Victorian America: Part 06: 1863-1865: First Chinese War

Weirdly non-military technologies are not in the ledger (unless they're somewhere I can't find them), only army tech, but I was curious how we do compared with other great powers.

Here's in power order, army/navy/commerce/culture/industry:

• Britain - 8/10/13/9/14 - total 54
• Germany - 14/7/7/12/13 - total 53
• USA - 8/8/11/16/12 - total 55
• France - 10/9/12/11/13 - total 55
• Russia - 8/5/8/11/6 - total 38
• Belgium - 8/9/11/10/10 - total 48
• Austria - 9/5/11/9/8 - total 42
• Ottomans -  8/3/5/6/7 - total 29

So unfortunately we don't have any kind of advantage over other top powers.

By the way, I'd say Victoria 2's tech system is by far its best part. It's a gem of amazing game design - just a bit of extra complexity, but it's so transparent and offering so many meaningful player choices without bullshit like EU4's "I need extra military access, I guess my ships will suck now" mana-based research. I don't think I've seen a better tech system in any game.

Oh and since no I have some kind of sensible army pools, it's time to get sensible army composition, which is supposedly 30k stack (operating in pairs if necessary) of:

• 4 infantry + 1 hussar in front
• 4 artillery + 1 engineer in the back

So I got 4 such stacks, and 4 stacks of 10 steam transports + 10 commerce raiders to transport them around. Well, approximately. The game makes it unreasonably hard to figure out what's good army composition, and even harder to balance armies, with every brigade having separate one-pop manpower pool.

Anyway, we can't really overcome European great powers with them with armies, research, or industry. We can win in prestige, that's what keeping us that high in the ranking, immigrant attraction, and thanks to zero infamy mod in rampant expansionism.

Every independent country in Americas other than Mexico is already sphered. They barely put any effort to stop us.

Najd was in Ottoman sphere, but Ottomans were just borderline great power, fell out, so I sphered them instead.

Most of prime colonial lands are already taken. So pack 60k stack, get Brunei and Atjeh on the way, and on to fight Korea - protected by China. We need so much clay for naval bases, and if they make some of the stuff we're currently importing, so much better. With Panama and Suez canals, Asia looks so much closer than before.

Now, war with China without researching much military tech was going to be hard. So step one is to find good generals to lead my armies - and oh god, this is the worst interface they ever made for any game. Well, not really, there's a lot of competition in this category, but it's fucking dreadful.

Of course that's not the end of it - if you reinforce the army, another shittier generals can take over losing you all your defense bonuses because fuck you (fuck that shit, reload, try again etc.).

And you lose prestige if you reassign generals at war, which would be a really fucking dumb idea if interface was actually working, and with this fucking UI mess, quit, mod that fucking shit out of the game, continue.

OK, now that I got this silliness sorted out, and Korea is annexed, I need to figure out how to defeat China. I need to queue at least a few military techs, penalty be damned. After a few experiments it became clear that the best way is to get my +5 attack general (who's somehow still alive), make doomstack, ignore 5% monthly attrition, and wreck them for +10 warscore per battle. It seems battle warscore is scaled by just number of people who died, not relative to their army size - destroying all of CSA armies was like 5 warscore total, and here I get 10 for a battle that doesn't even reduce Chinese manpower by 10%.

Chinese and Korean people just rushed to join my army. I'm actually quite competitive now in terms of manpower. Oh, and I have massive silk shortage - and there's a Chinese state just next to my borders which could help...

So the plan right now is to wreck Mexico and China a few more times while they're still defenseless, sphere a few more countries nobody competes at like Dai Nam, and Persia, and then maybe sphere 4 Northern China substates? It would be helpful if Russia wasn't great power, as it currently sphered some of them, and it's not exactly that high on the list, so if I wrecked them a bit they'd lose their sphere - and even if they regained it later it would be too late.

In terms of industry Britain, Germany, and France are in league of their own at 317-437 range, next are Belgium, Two Sicilies, and me at 98-108, then nobody else has more than 35. Without ability to manually setup what I want to build, I'm at mercy of capitalist AI, so I probably won't have much chance of breaking into top three anytime soon.

In terms of military, if I did another round of Chinese expansion and got a few techs, I'd probably be able to match Britain alone on land, or block Germans from showing up thanks to naval superiority, but they're allied, so they'd dominate on land and sea.

My population is now:

• 40% Beifaren Chinese, 13% Korean, only 17% Yankee
• 53% Mahayana Buddhist, 10% Sunni, only 32% Protestant

Yeah, it just doubled in two years. Every soldier who died fighting in China meant ten new Chinese recruits.

Oh by the way I'm not sphering Japan. Japan gets faster westernization speed if sphered, and when they westernize they'd become great power right away, so sphering them is basically pointless. Maybe I could invade them for some clay instead? It's not like it's far from Korea.

Of course pretty much none of this gameplay would be possible with infamy enabled, even if I reduced infamy to a somewhat more reasonable levels from what base game wants.

For some infamy calculations:

• Prusssia has 15 spherelings
• It needs Saxony, Baden, Wurtemberg, Holstein, at one state each
• It needs Hannover, Bavaria, at two states each
• It needs Alsace from France

To form Germany without game help would take 21 conquests (22 infamy), and 3 acquire state (11 infamy), total of 495. As these CBs take 400 days to fabricate, expected number is something like 80% of that, so let's say 400. During entire game if you're at peace, you'd lose 0.1 infamy a month or 120 per game if you were always at peace.

It's not even close to reasonable to get historical expansion without scripted stuff.

China would actually be dangerous if they were allowed to westernize at full size

Post 7 - Originally published on Google+ on 2015-11-10 19:32:00 UTC

Victorian America: Part 07: 1865-1869: I'll just wait for Victoria 3

I got a bit more clay from Mexico, zero trouble except I ran into even more bugs.

I'm sitting on ridiculous amount of income and manpower. Colonization is starting next year, but getting two states from China is basically already winning the game and I feel it's pointless to continue.

I can support 109 brigades, and this number keeps increasing very rapidly. If I went to second war with China that would be like 160. Germany with all its scripted blobbing gets 64. They have better tech, but not by much, and I could stop bothering with industry/commerce techs and just go for military ones - even setting poor/middle class taxes at half and spamming all infrastructure I can I'm just flooded with money.

As for navies, I'd need to research fancier bases and ships, but once I get there I can afford bigger fleet than all other powers put together. My naval supply limit is now 482, only half of British 954, but it's really just a matter of time to match it, as I have no idea what else to spend all my money on.

So, some conclusions:

• Game feels like I'm playing some early access title. It's supposedly patch 3.03 and I'm not trying to exploit anything, and yet I keep running into new bugs all the time.
• It has some promising aspects. Technology system is just amazingly well designed. Why didn't other Paradox games copy that, I have no idea. CK2 and EU4 could both use something like this.
• There were loads of point systems like research, diplomacy, leadership, influence etc. but none of them felt bad like EU4 mana invariably does. Their inputs were logical, and outputs limited.
• Interface is awful, worse than EU3 somehow, and EU3's interface was pretty bad.
• Gameplay is just dubious. So many parts of the game that don't do anything. Like endless popups that can't be turned off (another province got +50% mining because we have proper tech - you're literally going to pop this up for every single county with a mine? and that's not the only one spam popup).
• It's so infuriating that aspects of the game which could be most interesting like setting up your country's industry are locked out. It's like, who came up with this? This is the kind of area where player could make a difference and come up with some interesting plans (even simple like - I'll build this luxury clothes factory because I'm working on sphering a country producing silk - already way beyond AI capitalists), but nope, you can't do anything. If they want to lock out stuff, they should lockout boring stuff - like a party that prevents me from getting dumb popups. All strategy games have trouble coming up with engaging gameplay during peacetime, and they found something here, and decided to lock it out. I don't even.
• So many bugs... Like generals tooltips showing wrong generals. Or artillery in battle not getting assigned anywhere so only infantry is fighting unsupported, somehow, sometimes. Sadly every single Paradox title has massive failures in design of their battles - they're always overcomplicated for no gain, and as a result have ton of poor interactions between mechanics, and usually tons of bugs as well.
• Fog of war display indeed annoyed me. A bit less than I thought, but it was getting in a way a lot. Why do they fog of war when I'm trying to view what province produces or state borders.
• There's this whole political system, but player's influence is so minimal. I put serious effort into influencing it, but it did absolutely nothing. Same party whole campaign, and they didn't even have majority of voters supporting them.
• I know POP system is the big thing here, but I'm not really convinced it's worth it and if something simpler couldn't work just fine. So many things like soldier manpower pools, elections, weird national focuses etc. don't work well because they're tied to pops, and they'd probably get much better mechanics (national focus - encourage literacy) without pops.
• There are so many unit types, I'm pretty sure game would be better off with half as many. Like why have 4 different cavalry types, just make cavalry upgrade to different cavalry when you unlock some tech or something if that's really needed for flavor reasons. Units change how they look and what their stats are based on tech anyway. Just inf/cav/art system would be fine, with cavalry upgrading to tanks at some tech, and uncivs having irregulars instead of infantry.

I think I'll just wait for Victoria 3, even if the wait is long. Of course there's no guarantee that it will be any good, considering direction EU4 is taking.

This font size really should be bigger

One bug too many. Tooltip based interface, and tooltip displays information for wrong general...

Monday, November 09, 2015

Writing replacement for magiccards.info - syntax improvements

my adorable cat by pinkiwinkitinki from flickr (CC-SA)
A couple years ago I started bitching about how magiccards.info could be improved. Unfortunately that on its own rarely leads anywhere, so a couple of weeks ago I decided to write a replacement for magiccards.info. Since then it turns out that magiccards.info got sort of reactivated, so my project became a lot less urgent, but I got so much cool stuff implemented that I decided to come back and finish it.

All the code is available on github. It has somewhat unpolished Ruby on Rails-based frontend (without any card pictures) as well as command line interface and ruby API.

You can run it locally on just about any OSX machine if you know how to run Rails (git clone, bundle install,  rails s), and it should works on Windows and Linux even somehow if you can run Rails there.

I obviously need to look for some hosting solution so it's usable for average person. It would be relatively easy to add images to it, it's really mostly hosting issue. Frontend links to Gatherer (as well as magiccards.info), so except for a few weirdo cards in mtgjson database but not on Gatherer like International Collector Edition picture is one click away, so I guess I could enable hotlinking for local use, but let's not give WotC's paradoid lawyers any more reasons to go after this.

If anybody has hosting recommendations, I'd love to hear them. Oh and it should probably be called something more unique than magic-search-engine.

The search engine is backwards compatibly with about 90% of magiccards.info syntax, so you won't need to break your habits. Here I'm documenting just major additions and fixes.

Weirdly even some completely undocumented syntax from magiccards.info works the same - like is:reserved and loyalty>=6 work identically on both search engines, even thought I had no idea magiccards.info had that when I added them to my search engine (it's in mtgjson data we both use, so it's not entirely accidental).

Full documentation for all the syntax is available in the frontend.

Automatic data cleanup

Real data is full of silly inconsistencies and it's search engine's job to try to clean them up. The most important such cleanup is completely stripping out reminder text from o: queries, so it's finally possible to search for flying green creatures with straightforward o:flying c:g t:creature - or to correctly have Transguild Courier and Dryad Arbor match is:vanilla for your sweet Muraganda Petroglyphs deck.

Another thing that's not matched because it shouldn't be is foreign names in default mode, so you don't get unrequested silliness like this.

These are the biggest cleanups, but there are some weird things I ran into which I told the search engine to fix as well.  For example would you like to search for planeswalkers with -3 loyalty ability? That would be t:planeswalker o:-3, right? Well, that won't work because on planeswalkers it's a Unicode minus sign (U+2212), not ASCII symbol which your keyboard and all other cards have. Except on DFC's Garruk flip side, where it's ASCII again.

Much better spelling suggestion system

If you try to search for "kolagan command" on magiccards.info, it will helpfully ask if you meant "Kolaghan's Command", which with one more click you can get to. But that works only for full card names - searching "kolagan" will return no cards and no suggestions.

Here it's much better, if search engine can't find precisely what you were looking for, it extends all names which were not in any title of real Magic card to all misspellings. So you can search "kolagan", "purphuros", "tezeret seeker", "joira of githu" and so on.

The engine is smart enough to know not to do that if something is a real magic card, so if you search for "mox f:standard", it will not try to autocorrect it to "ox" and return Standard-legar "Yoked Ox".

Sensible sorting

You can specify how to sort the results as part of the query with  sort:new,  sort:old, sort:name etc.

sort:new / sort:old sensibly treat all supplemental sets as lower priority than every Standard set, so random duel deck reprints won't pollute your results when you're trying to search by actually newest.

Use sort:newall and sort:oldall if you want to treat all sets equally.

Robust handling of multipart cards

This is probably the most complex additional syntax.

On base level search engine operates on individual parts of cards, so "Tear" or "Chandra, Roaring Flame" are what it cares about, not "Wear // Tear" or "Chandra, Fire of Kaladesh // Chandra, Roaring Flame" together. The only exception is color identity (ci:), which is defined by rules to apply on cardboard level (and which is currently broken on magiccards.info).

Of course sometimes you actually care about whole cards, so there's new syntax for that.

A // B will return any card with one part matching A, and the other part matching B. It can be used for title matches like Wear // Tear or Gideon // Kytheon, but queries can be anything like t:human // t:insect, or mana=1r // mana=w.

You don't even need to specify the other side if what you've got is specific enough. c:r t:werewolf // will return all multipart cards which have red Werewolf on one of their parts.

I'd guess this is most useful syntax, but if you want to be more specific you can use other:condition to specify what goes on the other (not returned) side of the card, like with c:w t:creature other:(c:b) returning just Cloistered Youth and Loyal Cathar (but not their black sides).

There's also part:condition syntax for specifying that either side matches, so for example part:t:enchantment matches cards which are either enchantments, or their other sides are.

For vast majority of queries I expect people to just use A // B syntax - which for that matter expands to part:(A other:B) behind the scenes.

To simply query particular type of multipart card you can use is:flip, is:split, is:dfc or particular kinds of them, or is:multipart to get them all.

Searching for multiple card versions

As analogue of part: system you can also query other printings of same card with alt:.

For example to find a card which was printed by both Rebecca Guay and someone who's not Rebecca Guay, ask a:"rebecca guay" alt:(-a:"rebecca guay"). Or to find all cards which stood test of time and were printed in both 1993 and 2015 ask year=1993 alt:year=2015.

Block queries

You want to get all equipment from Mirrodin block? That would be t:equipment (e:A or e:B or e:C) kind of query, if only you could remember set symbols for all its sets - and it doesn't help that Gatherer, magiccards.info, and mtgjson often use different symbols for same sets (for example Alpha can be 1ED, LEA, or AL in different sources).

That has trivial fix in t:equipment b:mirrodin syntax, which matches all equipment in a block. For that matter if you remember symbol of first set in the block, you can use it as a shortcut, so b:rtr t:angel returns you all Angels from Return to Ravnica block. Some sensible logic is used to prevent matches for overlapping blocks, so b:ravnica matches only original Ravnica.

For that matter you have third alternative of using syntax like f:"mirrodin block" t:land for individual block formats, but that's more wordy, and excludes banned cards.

Time travel

You can time travel and search Magic cards as they used to be. So to search Standard as it was during New Phyrexia just ask for time:nph f:standard.

If you time travel it obviously won't show you any printing from the future, and formats will be as they were at that point, with set legality and banned and restricted list.

Historical banned and restricted list should be fully accurate from September 2004 Legacy/Vintage split onwards. Earlier than that best available data is often not fully consistent, so it's only going to be mostly correct. Quite often there's unbanning announcement, but original banning is lost somewhere in depths of rec.games.deckmaster Usenet group. If anybody has better data than what I managed to find (spending far more time on this than is reasonable), I'd love to hear about it.

Search engine doesn't plan to do anything as extreme as getting old version of Oracle text, then again it would be kinda fun.

time: currently moves the entire query to a certain point in the past, so you can't mix multiple times in same query.

Reprint search

Database supports queries like e:ktk firstprint<ktk which would return all cards from Khans of Tarkir which are reprints. You can use either set code or specific date (year or day) and any comparison operator, like let's say print>wwk t:jace (Jaces printed after Worldwake), firstprint=1993 r:mythic (all cards first printed in 1993 which ended up as mythic rares), or lastprint=8e (cards for which last printing was 8th edition) is supported.

Unfortunately technically prerelease promos count as prior printing as prerelease cards are "released" one week before actual set. That might need some changing.

Support for nonstandard card types

By default only "normal" card types are included, but you can explicitly request other kinds by type, like with t:conspiracyt:scheme or even t:dominaria.

You can also request all cards with t:*, presumably followed by more specific criteria.

This is implemented as a special filter - any reference to type of non-standard cards anywhere in the query will switch query from regular mode to everything mode, so for example if you ask for -t:scheme it will expand the query to match Planes, Conspiracies etc.

Tokens are currently not included, but since they're in mtgjson database I might change that.

English only

If English was good enough for Jesus, it ought to be good enough for Jace. Search results are not polluted by fake matches from foreign language cards like they are on magiccards.info.

Foreign card names are still in the database, so it's possible to add a mode to search for it, but it's going to be strictly English only by default.

Really minor improvements

Various information about card frame like layout:leveler (for card layout), w:gruul (for watermarks) is supported in addition to already existing queries like is:black-bordered, is:future etc.

You can use either f:edh or f:commander - they both work.

All is: queries can be negated with not: like not:reserved.

Unhinged fractional power, toughness, and cmc queries like pow=0.5 or cmc=0.5 work, at least mostly.

Split card system supports 5-part cards too, all one of them.

mana= queries check actual mana, not converted mana cost, so mana=0 will nor returns lands and manaless suspend cards, only cards with actual mana cost equal to 0.

mana= queries treat hybrid etc. mana as their own kind, because I couldn't come up with any consistent logic to do otherwise which would fit all special mana types. So Bioshift is mana={u/g}, not mana=g anything like it.

Everything is documented on help page in the application.

Sunday, November 08, 2015

Modern Times mod for Crusader Kings 2 - Congress of Vienna release

Cowboy cat by Infomastern from flickr (CC-SA)

Here's new release of Modern Times mod for Crusader Kings 2 (Steam WorkshopDirect download).

There are two major and a lot of minor features.

Congress of Vienna 1815 bookmark

One big feature is expanding timeline by a few years to Congress of Vienna, which doesn't change much in Europe, but moves India back to times when it was divided between Mughals, Marathas, and British Empire - all marked as interesting characters in the bookmark.

This new date also subtly hints at what might be coming to the mod in the future.

There are no special colonial mechanics yet. In real history Britain got half of India in one quick war, but actually giving them this ability feels ridiculously overpowered. For that matter India was never really part of Britain, it was a patchwork of local rulers under something between tributary and vassal relationship, mixed with some lands directly administered by appointed viceroys.

So for interest of gameplay, whoever wins India will probably need to take a slower route - unless you're able to find some creative exploits to speed things up. Or if you just want your name all over India, a few tributary wars will do that as well.

Peace of Westphalia

The second major feature is properly setting up religious conflict in Western Europe. You already know Catholics from vanilla, so let's introduce the other two branches.

Protestants are now a Catholic heresy with separate religious head for each national church. Priests can marry obviously, but due to game limitations we can't have women priests late game without also allowing them in 19th century where they would be just too silly. As Protestant ruler, you can establish Ecumenical Primate in Rome as global religious head in addition to national primates if you happen to capture Rome and you're pious enough.

Reformed are another Catholic heresy, and don't get any religious head, but get +4 stewardship bonus which you might find quite tempting.

Protestant and Reformed have access to regular holy wars, but not to crusades.

In spite of being heresies, all three religions are in state of truce since Peace of Westphalia, so they can't declare holy wars or crusades against each other and are forced to fight using lesser CBs. However, as an independent ruler of any of these three religions, if you have very high prestige, and your branch's moral authority is at 100%, you can officially and irreversibly renounce Peace of Westphalia and the silly concept of "cuius regio, eius religio", plunging Europe into new era of religious warfare.

It shouldn't be overly difficult to get 100% moral authority as good Catholic, especially if you help the pope win a crusade against Ottomans or two. On Protestant side, the easiest way is establishing pious enough Ecumenical Primate in Rome in addition to taking Jerusalem in a holy war. On Reformed side, it's most difficult, as you start with no holy sites under your control, and no possible religious head, but I'm sure you can think of something.

Not to mention that you can renounce peace of Westphalia, and then change sides...

AI can also use this feature, but I would be surprised if it managed to fulfil the requirements without player's help.

Because Protestant and Reformed are marked as Catholic heresies, a lot of Sons of Abraham and Way of Life decisions and events will create tensions between these branches and lead to characters changing sides. Don't be surprised if your heir turns out a heretic, or returns to Catholicism, complicating your plans.

Historical start changes

Historical start will never be perfect, but here's some improvements in the new release:
  • Ottoman start at ever increasing decadence as bookmarks go, it will take urgent effort to deal with it, especially in late bookmarks.
  • 1945-1991 West Germany downgraded from empire to kingdom. If you want to be empire, you need to unity with the other part of Germany.
  • Mediatized rulers of Bavaria, Saxony, Mecklenburg, Baden, and Wurttemberg in German Empire (1871-1918) get historical monarchs.
  • A lot more historical rulers and various fixes to the database. There's still a large number of countries with automatically generated rulers, but they're a shrinking minority, and mostly less important countries.
  • All historical rulers should now have accurate birth and death times, except for a few where even wikipedia doesn't know
  • Finland and Poland under Russia are vassal kings with local culture and religion for gameplay reasons (with automatically generated rulers)
  • A few tiny border tweaks in partitioned Poland - Prussia loses one county to Russia, and one to Austria-Hungary, so they're under 50% de jure Poland (historical border cut through both counties)
  • Minor culture/religion tweaks in Ukraine area. The mod probably should just introduce a few extra cultures like it did with extra religions (Protestant/Reformed). Especially Ukrainian and Tartar.
  • A few minor tweaks to which provinces should have cities vs castles as capital holding - that means a few extra merchant republics to play as, and Tuscany being a feudal duchy not a pointless inland republic.

Other changes

  • Indian characters have 80% chance of belonging to the right caste, and 10% of belonging to each of two other cards.
  • Automatically generated vassals ages and terms randomized instead of everybody starting at age of 35 and ruling for exactly 15 years
One more note - for Europe we generally have good historical data, and we know which of 5 gavelkinded Anhalts had which villages and on which day it changed hands in a peace deal - the problem is mostly mismatch between historical borders and CK2 province shapes.

For India, available information is of much lower quality, with multiple sources drawing borders differently, and various rulers gradually becoming British vassals often without clear dates in the process. So expanding mod to the past beyond 1818's British victory in Third Maratha War quite inevitably results in a lot of rather dubious historical setup.

On the other hand, how much does it matter if borders are off by a duchy here and there if ten years into the game it will be a total border gore either way? :-p But seriously, bad borders should be reported as bugs.

Thursday, November 05, 2015

Let's Play Civilization 5 as America (in American)

After successful conclusion of my Polish campaign in Polish, I decided to continue the theme and I'm now starting American campaign in American, on America's home map of Great Planes Plus.

Here's campaign playlist, and here's first episode. New episodes of about 25-30 minutes each are going to be published one a day, at same time (11:00 London time).

Oh and quick warning - there's a lot of swearing for like two episodes when shit hits the fan :-p

Campaign difficulty is now on immortal difficulty level, plus some extra difficulty level introduced by a truly spectacular early game mistake. Just joking, America does not make mistakes, everything went just as planned all along.

The campaign uses mostly the same mods as before, with a few changes, mostly Reform and Rule (instead of Policy+) and Promotions Pack (which is really amazing).

Let's Play Civilization 5 as Poland in Polish - series conclusions

And so, in 45 episodes, the let's play series ended in great Polish victory.

The conclusions are mostly:

  • Playing in Polish and using mods are incompatible - I expected that extra stuff added by mods would have English names, but I didn't expect that for stuff that mods changed like social policies, game would display Polish vanilla text over English modded text, so it was totally incorrect, and I needed to have laptop opened next to the game on some forum post explaining how things work in the mod. It was horrible mess.
  • If I even get the idea of doing this again, it shouldn't be too hard to write a script to at least detect this kind of conflicts. There's still be the issue of stuff added by mods having English names, but I can live with that.
  • It was rather straightforward starting fairly early, so I could bump it one difficulty level for next campaign
  • Next Civilization 5 campaign (which just so happens to be starting today) is going to be in English, but I'll record some of the content in Polish in the future.
  • Fractal map was pretty cool. It's probably the best "default" map.

Saturday, October 31, 2015

Music scrobbling and regular expression bias

May 22, 2012 - Music of the Spheres by guidedbycthulhu from flickr (CC-NC)
Once upon a time I used iPod, and I even wrote last.fm scrobbler for it. Of course no hardware lasts forever, and I much prefer Sansa Clip, which unfortunately doesn't record enough date to write similar scrobbler.

Anyway, physical devices are really mostly for outdoor use, and I got most of my music from Streamus before it shared the fate of most music services from as far back as AudioGalaxy of being outright destroyed because of copyright fascism. The only good site that wasn't outright shut down so far was Pandora Radio, which was instead locked to US IP addresses and requires far too much messing with VPNs - from London it's a fate not much different.

So now I'm mostly using youtube as music site. It has this mix feature which initially was dreadful, but after some training it got to be fairly decent. And apparently there's even Chrome extension which records what I listen to on last.fm. Except of course youtube doesn't have ID3 tags, so it just uses a regular expression - apparently very simple regular expression.

I'm mildly annoyed by this. It's fun to record this kind of personal data, and it's fine it's in a random sample and some is missing, but this just has massive bias. Most common title format for youtube music videos is "artist - title", and those get recorded, but some use "artist: title" or "title - artist" or "title by artist" or some other format, and currently they all don't get recorded or get misrecorded.

For example during last hour I apparently listened to song titled "Taylor Davis" by such diverse artists as:
  • Circle of Life on Violin (The Lion King)
  • Let It Go (Disney's Frozen)
  • Doctor Who Theme (Violins)
  • Bolero of Fire (From Zelda OoT) — Violin
  • Duel Of The Fates (From Star Wars) Violin
This unfortunately can't really be solved by a better regexp, but last.fm has crazy big database of artists and songs, so it could just detect that and flip them back to right order maybe? It really just needs API for unstructured titles, in addition to its existing artist/title API, as client can't really do that.

There's also a function to enter artist/album when scrobbler can't guess, but it should seriously at least remember what I entered if I listen to same music again (or even better have some database so if some other person corrected music title, just use that). And seriously, it needs to support Cmd-V to paste the title, it's totally silly that the mini-dialog closes instead of pasting if I press Cmd-V.

And of course there's a lot of other music which doesn't get detected as music at all. So far I haven't seen any cases of non-music getting registered as music - which is probably the wrong direction to err, as it's much easier to correct extra data with delete button than to add data manually.

Well, it seems they released it relatively recently so they might fix it at some point. For now I'm going to be mildly annoyed that data it records about myself is biased (probably in pro-mainstream way, as happens with most bias).

On an off chance this interests anybody else, here's the list.

By the way,  should something like "Taking the Hobbits to Isengard - 10 HOURS" count as one song in the date? I'd think it should count as a lot of separate songs, based on how much one listened to it. This is somewhat niche, but it's just another example how data recording process has pro-mainstream bias.

Thursday, October 29, 2015

CK2 Modern Times: Holy Roman Speedrun AAR

Post 1 - Originally published on Google+ on 2015-10-28 15:16:49 UTC

Holy Roman Speedrun: Part 01: 1837-1840: Removing Kebab from premises

Here's campaign plan - start as Austria-Hungary, crush any attempts Prussia or Italians might have of unifying their nations, and take over all historical HRE territory in Germany, North Italy, South Italy, or Netherlands. It should be very easy and rather short campaign.

First two months:
• I have unmarried ruler, 2 unmarried adult sons, 1 9-year old, and 2 baby daughters far too young to marry away
• ask my vassals to pass free investiture (so I'll be stuck on low crown authority for current ruler)
• diplovassilize Baden, Saxony, and Bavaria (in quick test Bavaria wasn't quite as willing as this time)
• invide strong claimants to Protestant Mecklenburg and Wurttemberg, get them to go Catholic
• turn all nearby counts (3 German Protestant, 1 German Reformed, 1 Polish Catholic) into my tributaries to farm prestige. Send missionaries there to maybe get them peacefully
• use that 500 prestige (only British Empire, Hitler, and Stalin start with prestige, but it's so easy to farm anyway) to setup antipope
• improve relations with 18 year old Victoria, I got her to arrange marriage (matrilineal, but what I want is alliance) with my 9 year old son
• use minimod's "accept invite" / "bribe invite" trait to find best martial skill characters anywhere and invite them to my court, turns out "bribe invite" calculations are incorrect, and only one out of three bribes worked. Oh well, it was worth a try.
• Use all my starting gold to setup full knight retinue
• seduction focus, try to seduce all duchesses in my realm to get easy vassal opinion bonuses (it mostly didn't work)
• guess what I did with the Jews?

And of course it was time to attack pope. Unfortunately I can't take advantagce of my vassal pope until I find some way to farm piety.

Well, no matter, first I'll just do some casual tributary wars. Oh, this is neat - my new pope called for a crusade for Greece. Ottomans are about twice as strong as me, but at least I'll be getting some piety, which I can use to claim duchy of Sicily.

The whole affair is sort of a detour from my primary plan, but it's not the worst detour. That was really fucking close. And I don't mean the Ottomans, I had 30% contribution, Spain had 24%.

All that is somewhat irrelevant to my campaign goal, but it got me about 500 piety (which means 5 duchy claims, one of which I already got), crusader trait, and tons of land to distribute to vassals who are going to be much more loyal to me than assortment of Hungarians, Italians, Croatians, Bohemians, and who knows what else I'm currently ruling over.

How quickly can I get the rest of HRE? Am I going to outrun next crusade? (about 1870 presumably)

Oh and I masaged to convert people of county of Nassau, but its ruler is still stubborn old heretic, his chaplain is currently trying to convert it back.



Post 2 - Originally published on Google+ on 2015-10-28 21:19:19 UTC

Holy Roman Speedrun: Part 02: 1840-1850: Imperial Italy.

I gave away new lands in Greece mostly to existing vassals, as this is best way to spread technology faster, and to be more flexible in terms of troop raising. It's going to be border gore sooner or later anyway, I might just as well accept it.

I wondered about counterattack, but Ottoman Caliph declared jihad on one duchy in Arabia held by Ethiopia, so that's one problem I won't have to deal with anytime soon. I guess they were successful at least, so it counts for something.

I also tried some educational policy to try to turn Hungarians into Germans ("duchy heir" trait, not my culture - those minimods are amazing). This is a thing that sort of should work, but in practice it's so much micromanagement to get RNG dice roll I rarely bother.

I got a bunch of duchy level tributaries in Poland/Ukraine region - Russian empire fell apart this time, and decided to press my pope-approved claim to duchy Sicily, and my vassal's claim to Mecklenburg, trying to rely on tributary armies, but they didn't really do much.

Otto Wittelsbach, Orthodox king of Greece, was rather annoying as I was clearly ruling over Greece, so I made sure he had an accident, then I helped his distant Bavarian cousin defend from infidel attacks by Egypt, then I usurped kingdom of Greece. That incorporated his lands into my realm, but left Orthodox Achaia independent. Oh well, we'll fix it later.

So Sicily and Mecklenburg done, now pope tells me that I should be in charge of Tuscany, which I just crushed anyway helping king of Piedmont-Sardinia get his claim on Pisa. After that I usurped that title (renamed it North Italy to be less silly), diplovassalized countess of Parma, leaving just 3 counties of North Italy independent and 1 French. Close enough - and one of my vassals pressed claim on county of Modena, and my chancellor and spymaster managed to convince the rest.

Now that Wurttemberg-Italy-Prussia alliance is no longer much of a problem, time to press my vassals' claims to Wurttemberg and Prussia, as well as some minor wars.

Oh and finally my younger son came of age and married empress Victoria, so I potentially had a lot of backup, assuming she find some time between constant rebellions - one unfortunate rebellion she lost is one that made Britain elective, but India stays primo, so they'll probably go their separate ways soon.

Anyway, unfortunately getting title of Prussia did close to nothing, as king of Prussia had a second kingdom of Poland, and in such cases his demesne stays with him, so:

• he kept everything he had in Poland, Germany, and Netherlands
• he kept duchies of Prussia and Brandenburg as personal demesne
• I already had Mecklenburg
• so I only got 2 counties in Pomerania, and 1 of Rugen

In the meantime I found an heir to throne of Denmark, so I gave him a barony as well as titular "kingdom of Cyprus", so if anything was to happen to his older brother, Denmark would join the empire. And it did.

Unfortunately the plot thickens:

• my vassal king of Prussia died, leaving Prussia to weak baby who's king of Denmark and titular Cyprus
• king of Poland is now next in line to all 3 titles
• did I mention that he's actually my son, and not in any way related to Hohenzollerns? if Danish princess was a bit more honest, I'd have just legitimized him and wouldn't be having any of these problems
• I arranged his marriage to my daughter, because no campaign is proper without at least some incest

Well, no matter. I got Malta (it revolted from under Britain presumably), managed to get king of Sicily killed, and it meant another duchy-level war. Then he had an accident, and civil war, so I attacked both sides, then usurped Sicily, and finally sent remaining dukes some gold as gesture of good will, and they swore fealty to me. Excluding French Corsica, 100% of Italy is in the empire, as it ought to.

Hannover is ruled by a little girl, so I can help with that at least, and with Hannover under imperial control I can now crown myself king of Germany. Unfortunately I'm pretty far from controlling all of it, and if my bastard son Liudolf dies I'm going to lose a lot of it.

Post 3 - Originally published on Google+ on 2015-10-29 02:55:45 UTC

Holy Roman Speedrun: Part 03: 1850-1856: If anybody unites Italy or Germany, it will be Habsburgs!

Poland (formerly Prussia) was allied with France, and both were in civil war, so I attacked both:

• Poland for some claimant I found - I'm not entirely sure how he even got it, he was a son of claimant to kingdom of Piedmont-Sardinia I landed before I noticed I can usurp it outright myself, and somehow he got a claim to Poland as well. I'm not complaining or anything - the whole business with inviting claimants speculatively has a lot of RNG involved.
• de jure France for Corsica (just to have 100% of Italy) - it's fairly pointless, but since they're allied with Poland I'm going to fight them anyway, and choice of CB (one county or tributary) isn't terribly important
• de jure claim on one of counties in Greece
• a bunch of tributary wars just to keep my sphere of influence expanding as I'm going to integrate tributaries in Germany soon. So Belgium, Netherlands, Latvia, Kiev, countries like that

I also had to help Victoria deal with endless rebellions - I could send someone to Britain to clean up rebels there, but I wasn't planning to go as far as send troops all the way to India.

War against France ended miserably, I lost 25k vs 20k battle, and then duke whose de jure claim I've been pushing died, making all this inconclusive. Oh well.

My wife tried to kill me. I barely escaped alive, I threw one of her co-conspirators in oubliette and took away his duchy (playing without free banishment of traitors, it was a bit too easy), the rest of the plotters agreed to end their silliness.

Well, with all that out of the way, last remaining thing was de jure wars on 8 heretic counts in Germany. Some were my tributaries, so it cost a bit of prestige, but really -50 for attacking a tributary but +200 for making someone tributary first, it's not even close.

And that's it. I got everything I wanted plus Denmark and Greece, in about 19 years under first ruler (who was almost killed by his wife). It would take some time to ensure empire's religious and national unity, but it was pretty damn quick without using any exploits.

Pretty much the only techniques which could be considered even borderline tricks were:

• using my 3rd son as a daughter and non-dynastically marrying him to empress Victoria (not like that did anything, she was too busy fighting rebels to help me)
• sending missionaries to tributaries in Nassau and Thuringia - I converted peasants in Nassau, and some people, but neither ruler switched, so basically it did nothing whatsoever. It sounded like such a cool feature, maybe it makes too little difference after all?
• giving that kid titular kingdom of Cyprus so when he inherited Denmark he'd stay in the realm - that was much safer than giving him landed kingdom
• giving every inland duke one coastal county so I could raise all troops in one location and ship them wherever I wanted

And really, are they even particularly unusual?

Other empires:

• When I let game run for 200 years from same start date, Russia was extremely strong. And this time, just look at the screenshot.
• Victoria is doing OKish, and I helped her a bit, but really not to any huge degree.
• Ottomans are doing extremely well - they even managed to survive independence revolt which was 2/3 of their vassals including Egypt, somehow, and expanded a bit into Persia. Obviously they lost Greece to crusade, but that's pretty much to be expected
• France, Spain, Sweden/Norway, Portugal, Persia, Ethiopia etc. - they seemed to have almost no stability problems

Some campaign conclusions:

• Generally I'm quite happy with stability range of blobs - in old versions of the mod they collapsed almost right away, now some are very stable, some still collapse, there's a wide range of possible performances. If I let game run for a few more generations things would definitely get a lot less stable
• Vassals caused almost no issues. They were a bit grumpy initially, but then they got land from Ottomans, and even for ones who got nothing I got +20 from prestige, +10 from free investiture, no penalty from usual medium crown authority, bonus from long reign, all together they generally liked me. I still used chancellor, spymaster, titles etc. to manage them, but nothing crazy was needed.
• The only vassal problem was with my (completely unnecessary) seduction spree - my wife wanted to kill me and various husbands of women I seduced were happy to join, plus a few random grumps
• It was a quick fun campaign. Not every campaign needs to take a whole month. Next time I'll try some more challenging start (as it doesn't get any easier)

Holy Roman Empire reunited after brief Napoleonic interlude

All other empires are so stable, probably because everybody who wanted to rebel came to Russia. Something like half of emperor-tier characters are Russian rebels.