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

Thursday, October 30, 2025

Using AI for French Reading Comprehension Practice

French cat by Grok AI

For family reasons, it would be helpful for me to learn some French. There are all the boring ways like textbooks, audiobooks, flashcards, and apps (Duolingo and its clones got really enshittified and focus more on pushing ads than language learning these days, another reason not to use them).

But we live in the LLM era, and language is one thing LLMs excel at, so it would be silly not to try that.

Written French

Languages differ quite a lot, and French is a bit of an outlier. For most "normal" languages like German, Spanish, or Polish, the written and spoken forms are very similar - the correspondence is never quite 1-to-1, but it's close enough you don't need to think about it much.

French is absolutely not like that. Written French is closer to the language people spoke back in the 1100s than to the French they speak now. In many ways, written French sits halfway between Vulgar Latin and Modern French.

The most egregious examples are verb conjugations: written French preserves all the 1100s endings, but in speech they've merged into just a few forms. So in writing there's "chante", "chantes", "chantent" (all pronounced /ʃɑ̃t/), "chanter", "chanté", "chantez" (all pronounced /ʃɑ̃ˈte/), and so on.

Fortunately this spelling isn't arbitrary way, it mostly just reflects a much older form of the language, so you can mostly figure out how a word is pronounced based on its spelling. It doesn't work the other way, a single spoken word can correspond to a lot of different written forms.

English suffers from a similar issue, but it's only about half as bad in terms of time passed and degree of sound change.

How to even learn French

Normally when spoken and written languages are far apart, it's easier to learn the spoken language. This is not the case at all here. If you know English, or any Romance language, you'll have fairly easy time recognizing a lot of words in written French, but when spoken you might just as well be hearing Korean.

And there's input hypothesis - the idea that the only meaningful language learning is by consuming a lot of input just above your current level, and output is pretty much a distraction.

Regardless of how accurate this is, reading comprehension is the easiest thing to practice with AI.

The Prompt

After a lot of experimentation, here's the prompt I settled on, followed by detailed explanations.

Do the following:

  • write a short text in French of about 500 words total
  • the text will be split into 10 paragraphs of about 50 words each
  • the story needs to be at B1 level, only using grammar and vocabulary appropriate for that level
  • write the first paragraph, then I translate it to English, then you let me know if it's correct or if I made any mistakes
  • then continue with next paragraph until the story ends. Do not ask for confirmation before continuing.
  • then print the scorecard
  • do not nitpick English translation by suggesting a more natural one, as long as it translates French text correctly
  • number each paragraphs
  • use sidebar for French text

Topic for today: ...

Prompt explanations

Do the following:

  • write a short text in French of about 500 words total
  • the text will be split into 10 paragraphs of about 50 words each

First, we tell AI what we'll be doing. Translating a short 500 word French text to English is a good test that you understood the input.

A short text gives a lot more natural context than translating disconnected sentences, and is closer to natural input.

Dividing it into pieces makes it much easier to translate, and avoids having to scroll back and forth you'd need to with a single block of text. It has an additional advantage that if you encounter a difficult word early in the text that's repeated later, you'll get feedback on that word early.

  • the story needs to be at B1 level, only using grammar and vocabulary appropriate for that level

It's good to give the AI some idea what level you're aiming for, but this is going to be very vibes based. The AIs don't really understand what's appropriate for each level, and you will see rare words - sometimes because they make sense for given topic, but often AI will throw a rare word even if a much more common word with similar meaning would work just as well.

I tried many variants of this instruction, and at least it generally sticks to appropriate grammar if you request a low level, without using rare tenses and such.

  • write the first paragraph, then I translate it to English, then you let me know if it's correct or if I made any mistakes

This is the core idea. Technically "comprehensible input" doesn't require you to translate it, but translation ensures that you actually understand it, and gives instant feedback on any words or phrases you got wrong.

Another thing I tried was reading comprehension multiple choice test, but that's somehow more time consuming that translation (mostly due to scrolling required), and you can often answer multiple choice questions correctly even if you don't quite understand the text, so it wasn't all that useful.

  • then continue with next paragraph until the story ends. Do not ask for confirmation before continuing.

Without this, AIs would sometimes proceed to the next paragraph, but sometimes they'd force you to say "continue" 10 times per story, which got really annoying. This solves the problem.

  • then print the scorecard

The scorecard is not essential, and every time it will be in a different format anyway. If it was possible to do fine-grained adjustments to difficulty level, it would make sense to develop consistent scoring system, and then tweaks difficulty by +5% or -5% whenever it gets too easy or too hard, but you will get pretty wide range of difficulites with the same prompt, so there's not much point in doing this.

  • do not nitpick English translation by suggesting a more natural one, as long as it translates French text correctly

Here's another big problem with current AIs. This is meant to be a reading comprehension practice, not translation practice. So ideally we'd like AI to pick up every error in our understanding, while not nitpicking about trying the most natural sounding translation.

Trying to fine tune the English text to sound great takes longer than just getting the meaning across, and it's a wasted time.

I tried many variants of this instruction, and this one causes mistakes both ways. Sometimes it ignores errors in understanding if I picked a vaguelly similar meaning (like translating "broderies" as "decorations"), and sometimes it nitpicks (nitpicking example: “small city” → better as “small town” (more natural for petite ville)), but it's balanced enough.

AIs also really love to say "good job translating this sentence: ...", which is basically noise, and perhaps it would be worth tweaking this prompt to reduce the noise.

  • number each paragraphs

Most AIs do it anyway, but sometimes they don't. It's a bit more convenient to have paragraph numbers.

  • use sidebar for French text

This is helpful to include for AIs like Claude that have sidebar interface. Don't include this instruction for other AIs, they'll either ignore it, or just make up some "sidebar" tags like <mui:sidebar> that don't actually do anything.

Topic for today: ...

And finally a really essential part - you need to give it a new topic every day, otherwise you'll see very similar stories about how a random textbook French person spent their day over and over. The topic can be one word like "cats", a phrase like "Bridezilla's wedding", or a short sentence like "competition to make the most ridiculous pizza", and it doesn't really matter what you put there, as long as it's different from the previous ones.

You could also ask AI to pick an interesting topic as well, which increases your odds of getting a non-textbooky text.

Which AIs to use

I tried it with a lot of AIs, free tiers only.

  • ChatGPT - consistently best, but quite prone to going into censorship mode if it doesn't like your topic (especially on anything related to current events), something I never saw with any other AI with the topics I tried
  • Claude - consistently very good, and sidebar interface for French text is very convenient
  • Mistral Chat - somehow really good at it, biased towards slightly higher difficulty
  • Grok - very good if you have access to it, but fairly slow message limit in free tier
  • Qwen AI - I only tried it a few times, seems to be fine, but I'll pass judgement for now.
  • Gemini - I have no idea why, but Gemini consistently disappoints me no matter what I try, not really suitable for this
  • Meta AI - completely unsuitable for this
  • Deepseek AI - completely unsuitable for this

All these AIs get regular upgardes, so your experience might be different from mine.

If you do this repeatedly (I aim at 2 stories per day), you can reuse existing chat and just say "next topic: ..." or even "pick a new topic". Some AIs have tendency to make the new text overly similar to the one it just did, so starting fresh conversation be better.

I don't think it's a good idea to use any kind of automated "memory" feature, as that will just cross-contaminate conversations.

What else didn't work

The prompt here is a result of a lot of experimenting. One notable thing all AIs are absolutely terrible at is IPA. Asking for IPA you'll get total vibe garbage - like IPA of completely unrelated words.

How you should treat the results

This is a reading comprehension exercise, not translation exercise, so don't worry if your score isn't perfect. It's not even supposed to be.

  • typos - try to get better at typing, but you'll likely make a few typos here and there. AI will point them out, but they don't matter, just ignore them (if they were legitimate typos not mistakes).
  • English text not sounding natural - it would be waste of time to try to polish it, so don't worry too much about it.
  • comprehension errors - if you miss some words or gramatical structures, and they feel rare, that's totally fine. In real life you'll encounter small percentage of more difficult words too. If you miss common words, you're just getting very effective spaced repetition here, in proper context.

5 comprehension mistakes per 500 word text (so excluding typos and nitpicking) is a 99% understandig, and that's what you should be aiming at. If you make a lot more mistakes, adjust the vibe level. If standard CEFR levels are not enough, you can make up your own levels like "A2+", "B1.5", or whatever you want. Just remember the level you give the AI is not really CEFR level, and some AIs (notably Mistral Chat) have a notably different idea what each level means.

Saturday, September 27, 2025

How to configure OSX 26.0 Tahoe for software development

Image by Leonardo AI

With every new Macbook, I'm updating the guide, previous version is here.

When you start installation, one of the questions is about FileVault, so just enable it before we even start. Software updates moved to a new location in Settings > General > Software Update, I recommend just applying all updates before we get started.

During the installation you'll be spammed by stupid popups like "Do you want to allow <app> to <do something>" or "Turn on Accessibility for <app>". You just need to accept them all. Apple tries to apply phone security model to laptops, and it's doesn't match how things are used at all.

Basics

  • Install some sensible browser like Chrome, Firefox, or Brave. Chrome used to be the universal default, but with all the anti-adblocker drama, other browsers are worth considering too. You'll get some popups asking to make whichever one you choose your default browser, do it.
  • Afterwards either sign up into your account on which you hopefully have your ad blocker setup, or install some. For Chrome best you can do now is uBlock Origin Lite, which is less powerful than manifest v2 uBlock Origin used to be, but for now it seems to work well enough. If anti-adblock technology manages to break adblocking, just switch to another browser.
  • Install a sensible terminal emulator. There is only one sensible choices - iTerm2ghostty tries to be an alternative with some extra features, but lack of ⌘-F style functionality makes it simply unusable. If you start iTerm2 for the first time, it will also prompt you to install XCode Command Line Tools, which you'll definitely need, so just do it now.
  • Install whichever cloud sync service you're using like Dropbox etc. And start syncing your stuff. Unfortunately even the most expensive Macbook laptops still have tiny disks (starting at 512GB, in 2025!!!), so you might have to do selective sync only
  • Clean up all crap from dock. Other than Apps (previously Launchpad) and System Settings, everything else should be gone. Add iTerm2, your browser, and your text editor, and any application you wish to install there instead of stock Apple crap. Apps you use only occasionally shouldn't be there.
  • Remove crap from your desktop, they recently started adding widgets .

Editor

Install some sensible text editor. These days most people use Visual Studio Code. If you do, go to Options, search "Telemetry" and disable it all.

If that's your choice, run it, open Command Palette, and choose: "Shell Command: Install 'code' command in PATH".

Settings

Like every other operating system, OSX has a lot of bad default settings. Here are some obvious fixes:
    • If you have multiple monitor setup, go to Settings > Display > Arrangement and drag and drop them into correct arrangement so mouse can move between them correctly. To make Spaces work correctly, you'll also need to set your external monitor to be the main one by drag and dropping menu bar to it.
    • You might need to do it twice - with laptop screen open, and with laptop screen closed.
    • Also set up which will be your main monitor by dragging that white bar on top of the display icon to it. This looks like Menu placement, but it really mostly controls Dock placement.
    • Settings > Appearance > Dark. If you're setting up a new laptop, this will be asked during installation.
    • Settings > Keyboard > Key Repeat > Fast (max is correct)
    • Settings > Keyboard > Delay Until Repeat > Short (max is correct)
    • Settings > Keyboard > Disable keyboard brightness completely. Defaults (slow keyboard, highlight keys) are meant for people who are bad at typing. If this somehow applies to you, get some typing lessons, you can save huge amount of time by getting better at typing.
    • Settings > Keyboard > Text Input > Edit ... > Disable "Add period with double-space" - this one really messes up coding
    • Settings > Trackpad > Scroll & Zoom > Disable "Natural scrolling". This will also apply to the mouse, restoring correct direction.
    • Settings > Sound output > Disable "Play sound on startup"
    • Settings > Sound output > Disable "Play user interface sound effects"
    • Settings > Sound output > Alert volume > 0% (for Terminal ping)
    • Settings > Desktop & Dock > enable "Automatically hide and show the Dock"
    • Settings > Desktop & Dock > disable "Automatically rearrange Spaces based on most recent use"
    • Settings > Displays > Max out brightness
    • Settings > Displays > Turn off "Automatically adjust brightness"
    • Settings > Displays > Turn off "True Tone"
    • Settings > Menu Bar > Battery > Enable "Show Percentage"
    • Settings > Menu Bar > Clock > Clock Options > Use a 24-hour clock. This might be already on based on your regional choices during installation.
    • Settings > Mouse > increase scrolling speed and tracking speed a bit
    • Settings > Lock Screen > Turn display off on power adapter when inactive > Never. You should generally be doing it yourself, and you often need to leave the laptop running upgrades or unit tests or such, and you want to be able to see the status without constantly poking it.
    • Settings > Lock Screen > Require password after screen saver begins or display is turned off > After 5 minutes. You can move it down to 1 minute if you use your laptop in public. I don't recommend Immediately, as that causes endless annoyance with connecting and disconnecting external monitors and just moving laptop around requiring new password.
    • Settings > Sharing > Remote Login > Turn on
    • Settings > Sharing > Remote Login > (i icon) > All Users
    • Settings > Sharing > Remote Login > (i icon) > Allow full disk access for remote users (this seems to be default now)
    • iTerm > Preferences... > Profiles > Terminal > Unlimited Scrollback
    Press Ctrl-Up arrow, add a few desktops (or "spaces" as they were used to know), then go to Settings > Keyboard > Keyboard Shortcuts > Mission Control - and enable their keyboard shortcuts Ctrl-1 to Ctrl-6 or however many you have there. Sometimes I've seen shortcuts for extra desktops not being there, and in such case I just restarted, and the problem fixed itself.

    Open Screenshot app, choose options, then:
    • disable "Show Floating Thumbnail"
    • Save to > Other Location... choose "Downloads" folder

    Drivers

    OSX already includes drivers for laptop itself, but you might need some for peripheral hardware.

    In particular, external PC keyboard need a tweak to work properly, as left and left Windows keys are in reverse order from Mac keyboard.

    Go to Settings, Keyboard, Modifier Keys..., choose the right keyboard from the dropdown (strangely I had ordinary wireless mouse selected by default), and swap positions of Option and Command keys. Feel free to change functionality of Caps Lock key as well, it's a huge easily accessible key with no useful function people love to remap, usually to extra Control.

    New Macbooks now come with Fn/Globe key. You probably don't need i to change your keyboard layout so feel free to use it for emoji keyboard or something like that.

    If you need any special keyboard layouts, get them too.

    Another thing - when you plug in external keyboard, you'll get choose keyboard type dialog. It will likely choose the wrong type. Just pick ANSI, whatever it claims to detect. Otherwise the backtick key will be wrong.

    Home/End keys on OSX are also broken. Use this as a fix. You'll need to log out and log back in for it to take effect.

    Development tools

    You'll need a package manager, and the only one anyone uses is homebrew, MacPorts and the rest died long time ago. You need to tell homebrew to not spy on you with brew analytics off command.

    You'll need Xcode. Fortunately iTerm does it for you automatically, and if not homebrew will. If you need to do it manually for some reason, you can install Xcode manually by running xcode-select --install from command line.

    Deal with stupid access popups

    Since Big Sur, the first time you access some folders from terminal, you get a stupid popup asking you to confirm that you're indeed fine with terminal accessing various folders. So run:

      find .

    and confirm all those stupid popups to be done with it once and for all. Well, except you'll still have them when accessing USB drives and such. 

    And just to be extra sure, go to Settings > Privacy & Security > Full Disk Access, and add iTerm there.

    Create new SSH key pair

    Before you do that, name your computer something memorable with sudo scutil --set HostName your_host_name command. You probably go through a lot of laptops, so names like "Name's Macbook" are completely useless to you. Just pick a theme like cats or dinosaurs or whatnot, and give every computer a distinct name.

    Open Terminal and run ssh-keygen to create ~/.ssh/id_ed25519 and ~/.ssh/id_ed25519.pub then upload the generated public key to any place that needs to know about it like githubbitbucket, or whatever else you use. Don't upload your private key by accident. These used to be called id_rsa a while ago.

    Alternatively you could copy your keys from your old laptop, but it's generally more secure to have separate fresh keys for each machine.

    Checkout your dotfiles

    Hopefully you're storing your dotfiles somewhere. If it's a git repository, or your Dropbox account, get them now and symlink them all properly.

    If there are any other repositories you might need, checkout them too.

    Standard paths

    OSX renames a lot of directories. The most annoying of those is that instead of /home it has /Users. It used to be very easy to add a symlink, but this kept getting more and more complicated, so I stopped doing this.

    Install homebrew packages

    Your list might vary. Here's a few obvious suggestions:

    brew install rbenv ruby-build mc wget p7zip trash git htop bash zsh yt-dlp jq imagemagick coreutils bash-completion zsh-completion nodenv pcre

    Then enable all services you installed, unless you want to start them manually:

      ln -sfv /usr/local/opt/*/*.plist ~/Library/LaunchAgents/

    And install non-system ruby, so you can install gems without sudo. Currently I use 3.3 as quite a bit of software did not get updated to 3.4 yet:

      rbenv install 3.3.9
      rbenv global 3.3.9

    To make that actually work, you need to make sure ~/.rbenv/shims is in your $PATH. If you type rbenv init, it will tell you what to do.

    There's also asdf that offers this kind of service for all languages, if you want to use it instead of rubenv/nodenv/etc. I don't recommend rvm, I've seen it cause too many issues in the past.

    Due to OSX limitations you'll need to run sudo htop if you want to use htop.

    Install gems

    Again, your list my vary. These days most of the software will have its own Gemfile so long list of gems are generally unnecessary. But some global utilities are still useful:

    gem install bundler rak pry pry-rescue

    Different Shell

    OSX switched from ridiculously outdated bash to up to date zsh, so it's no longer a mandatory step.

    If you want to use system zsh, it's fine.

    If you want to install something else, like proper bash (or brew version of zsh; or something else), first brew install bash.

    You'll need to edit /etc/shells as admin and add the following lines at the end of it to enable your newly installed shell:
    /usr/local/bin/bash
    /usr/local/bin/zsh

    Then set it as your shell, with whichever one you prefer:
      chsh -s /usr/local/bin/bash $USER
      chsh -s /usr/local/bin/zsh $USER

    Hushlogin

    For some reason OSX prints worthless annoying messages on every open terminal tab. Run to touch ~/.hushlogin to prevent that.

    Coreutils

    This is optional step. OSX coreutils are generally a lot worse than GNU versions you might be used to from Linux. However switching means occasional minor incompatibilities, so it's up to you if you want to do it or not.

    If you want to do so, brew install coreutils, then add GNU coreutils to your PATH:

      export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
      export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

    OSX coreutils are not as bad as they used to (for example cp -a now works), so this step can be skipped.

    Better window manager controls

    Sadly OSX window manager is extremely dubious for keyboard use. Fortunately programs to make it usable exist. Unfortunately there's a lot of churn among those programs, and every couple of years the ones I use become unmaintained and need to be replaced by something else.

    Currently I recommend:
    • Rectangle - for moving windows around on big screens - I don't really like the default keybindings, so I delete them all, then setup Cmd-Control-Option with 1,2,3,4 for corners, with arrows for halves, and with M for maximize. Also set Repeated commands to "cycle through displays". You can install it with brew install --cask rectangle
    • AltTabfor switching between windows - it's baffling that OSX completely lacks this function - and Cmd-Tab to switch between applications is absolutely inadequate for any application that has more than one window, which is most of them (browsers, editors, terminals etc.) if you're developing software. Turn off "Show apps with no open widows" in settings, as it really messes up things. You can install it with brew install --cask alt-tab
    You'll need to give them necessary access. To do so:
    • Settings > Security & Privacy > Privacy > Allow the apps below to control your computer > enable AltTab and Rectangle
    Rectangle also doesn't start at login by default, so turn that on in settings.

    Open files limit

    For some insane reason OSX has default open file limit of only 256, and that breaks a lot of software like databases.

    You can do it for processes in terminal by putting ulimit -n 100000 in your .zshrc, which might be adequate, but not every process runs from the terminal. 

    Enabling it globally gets more and more complicated with every OSX version. Instructions for Ventura are here.

    Lower security settings

    Unix used to have very simple model where root user could do anything, and that was great for development. OSX keeps adding more and more security restrictions. They are absolutely detrimental to developing software, and of questionable value to regular users - primarily they're Apple's way of slowly turning computer world into something more like iOS world where they can decide who can run what and take 30% tax on everything.

    You'll need to disable some of them. Most important such setting is this:
    sudo spctl --master-disable
    It will tell you you need to confirm it in settings, so go to System Settings > Privacy & Security > Allow applications from > Anywhere. This has nothing to do with security, it's just Apple attempt at turning OSX into iOS step by step.

    WiFi settings

    This setting wasn't there before. If you want your laptop to have fixed IP on your local network, you need to go to WiFi settings for your local network, and disable "Limit IP address tracking". This confusingly named setting is MAC randomization, and with it enabled, your router has no way to assign fixed IP to your devices.

    You can leave it on for public networks. Or just don't touch it if you don't need fixed local IPs.

    Android File Transfer

    It's honestly embarrassing to both OSX and Android that there's no out-of-the-box way to move files between them either over WiFi or USB cable.

    There's official Android File Transfer program but it's just awful. OpenMTP is somewhat less awful, but still not great. If you know of any program that's actually good, definitely let me know.

    On Linux and Windows it's possible to mount MTP devices, which is very slow, but still beats OpenMTP. I don't know if it's possible on OSX.

    All other software

    There's a lot of other software you might want. The most obvious one is the VLC media player.

    You might also want some kind of Git UI program, like GitUp (brew install homebrew/cask/gitup).

    If you want to use SSHFS, the one in homebrew (macfuse and sshfs packages) don't seem to work, so you might want to try downloadable versions. First time you try to use it, OSX will block it, so you'll need to go to Settings > Privacy & Security, allow it there, and restart (you'll get popup for that).

    Docker

    There's a lot of software that just plain won't run on Apple Silicon, so you'll need Docker. You can either use Docker Desktop, or if you have licensing issues with that Rancher Desktop. If you use Rancher, set it to Docker compatibility mode.

    Enjoy

    Once you go through this list, and successfully get everything going, I'd recommend modifying it to your liking and reposting your version on your blog. Everybody's needs are different, so guide like this is just a starting point.

    Monday, September 08, 2025

    Empire Total War Campaign difficulty levels explained

    image generated by Grok 3 AI

    This isn't explained anywhere else online, so here goes.

    The data is based on data files from the latest patch. All of it comes from campaign_difficulty_handicap_effects_tables db table, so mods can adjust it.

    Player Bonuses and Penalties

    Difficulty levels rely mostly on buffing AI, so player penalties on hard and very hard are fairly small, and bonuses on easy aren't that big either.

    BonusEasyNormalHardVery Hard
    clamour for reform all classes-1
    cost - buildings - all-10%
    cost - recruitment - land-30%-25%-10%
    cost - town watch-10%+15%+30%
    cost - upkeep - land-20%-15%
    cost - upkeep - naval-30%-15%
    counterspying+2
    max population+10%
    max repression - government type+1
    personal security+2
    research rate+15%-5%-12%

    AI Bonuses and Penalties

    AI bonuses on the other hand are very extensive.

    BonusEasyNormalHardVery Hard
    agent cap - eastern scholar+1+2+2
    agent cap - gentleman+1+2+2
    agent cap - missionary+1+2+2
    cost - buildings - farms-8%-20%-30%
    cost - buildings - happiness-8%-20%-30%
    cost - buildings - industry-8%-20%-30%
    cost - buildings - mines-8%-20%-30%
    cost - buildings - plantations-8%-20%-30%
    cost - recruitment - land-10%-20%-30%
    cost - recruitment - naval-8%-15%-23%
    cost - town watch-20%-50%-90%
    cost - upkeep - land-30%-40%-50%
    cost - upkeep - naval-25%-40%-50%
    counterspying+1+2
    GDP+10%+20%+40%
    max population+10%
    max repression - characters+1+2+3
    movement points+10+15+20
    personal security-1+1+2
    recruitment cap - land+1+3
    recruitment cap - naval+1+4
    research rate+10%+35%+50%

    Diplomacy

    Diplomacy is definitely affected by campaign difficulty, but the logic is hardcoded, and not exposed anywhere. On harder difficulties AI has a massive and very obvious anti-player bias.

    What is not affected by difficulty

    And that's all. A lot of things difficulty affects in other games (including other Total War games) are not affected by difficulty level. This means all of these are the same regardless of difficulty levels:

    • starting armies
    • starting buildings
    • starting research
    • starting diplomacy
    • starting income
    • fixed income per turn

    How to overcome difficulty bonuses

    Campaign difficulty modifies just a few areas, and in each of them, there are very strong counters available.

    Research rate - AI on very hard has +50% while the player gets -12%. However AI typically only has 1 school, while you should build 4-6. If you have enough patience, you can also trade techs, something AI doesn't seem to do much. You will outtech all AIs with ease. AI's extra diplomats and scholars also come nowhere near matching the advantage you have by just having a few more schools.

    For diplomacy bias, giving away military access to everyone on the map (at least everyone you border, plus countries like Britain and France who love to drop surprise naval invasions on you) really tones AI aggressiveness down to more reasonable level.

    AI gets a lot of different bonuses which are basically money cheats. The best way around it is by being better at economy game. If you can, spam trade ships. And never have a big expensive army just sit there doing nothing, something that AIs routinely do. Your main army should go on an offensive. If you need long term garrison, just recruit some cheap crap instead, or units with garrison bonus.

    You can also use AI bonus cheat against itself. Especially all the one province minors have nothing to spend their money on, so they upgrade all their buildings as soon as possible. And then you can conquer them. A maximally cheesy version of this strategy is to sell AI minors farm and industry techs they need to unlock the upgrades, and maybe even sell them your worst provinces that need a lot of money to turn around. Then conquer them once they're fully upgraded, and all you'll need to pay is the repair bill.

    AI gets some happiness bonuses you don't, but it doesn't really affect you, as you're not trying to out-happiness the AI. You should definitely get better at happiness game, which for absolute monarchies means stacking your cabinet with ministers with as many lower class happiness bonuses as you can. But you should do so regardless of how happy AI provinces are.

    AI's extra movement points can take you by surprise - sometimes enemy army is just barely out of your reach, so you think they can't reach you either, then you get surprise attacked when you press end turn. As long as you're aware of it, it isn't usually a big deal. And AI movement cheats have nothing on daisy chaining ships to transport your stacks from one end of the theater to the other in one turn.

    And this just leaves AI's huge +3 recruitment cap bonus on very hard (+1 on hard it's no big deal). It can outspam your units with ease. The trick is that while recruiting new units is capped, replenishment is unlimited and just costs money and two turns. So if you have a lot of badly battered units after a big battle, as long as none of them got wiped out, you can get your whole stack back really quickly - something that wasn't possible in earlier Total War games.

    Another useful trick is just recruiting a lot of new units in far away lands, and using ship daisy chaining to transport them to where you need them to be.

    Naval recruitment cap is technically even bigger, but AI doesn't really spam ships anyway.

    Autoresolve

    Empire's autoresolve is a black box. There are some difficulty-related settings in campaign_variables_tables, but what they do exactly is anyone's guess:

    • autoresolve_easy_campaign_AI_percent_reduction - 0.05
    • autoresolve_easy_difficulty_human_advantage - 0.1
    • (no settings for normal)
    • autoresolve_hard_campaign_AI_percent_increase - 0.2
    • autoresolve_hard_difficulty_AI_advantage - 0.08
    • autoresolve_very_hard_campaign_AI_percent_increase - 0.35
    • autoresolve_very_hard_difficulty_AI_advantage - 0.2

    As far as I can tell, autoresolve bonuses are controlled by battle difficulty, not campaign difficulty.

    You can mod these to -0.99 if you want free autoresolve wins for some testing. Or if you really hate naval combat so much, and plan to only use it for naval combat.

    Battle difficulty

    I wanted to provide similar data for battle difficulty, but I couldn't find any game files controlling it. This likely means that the battle difficulty is implemented as part of game logic, and possibly in a way more complicated than just simple stat boosts.

    We have some idea what is affected the most. AI troops on hard and very hard get a huge morale bonus, which is a huge nerf to player's melee units, especially melee cavalry, which normally relies on breaking enemy units' morale, and has poor staying power in prolonged battle. Bonuses to accuracy and reload speed are more modest, and for artillery difficulty levels seem to matter the least.

    However, it's difficult to put any numbers on these qualitative statements.

    And that's all we know about Empire Total War difficulty. If you find out any additional numbers (by reversing executable file?), let me know.