All posts by cen

DotA v7.04c5


Tree Grab reduced limited number of attacks from 6 to 5 
Ring of Basilius MP regen aura decreased from 1.5 to 0.75

Octarine Core
Recipe changed. Now requires Perseverance (1650), Soul Booster (3000). Total cost decreased from 5050 to 4650 
Now provides +625 HP, +625 Mana, +8 HP Regeneration, 175% MP Regeneration and 25% Cooldown Reduction

Arcane Boots
No longer can be disassembled
Recipe changed. Now requires Boots of Speed (500), Ring of Basilius (425) and Recipe (375). Total cost 1300 
Now provides 45 MS, 1.5 MP Regen Aura and Replenish (Active)

Mana Drain
No longer instantly kills illusions
No longer drains mana if lost primary target 
Now damages enemies for 100% of the mana drained
LVL 25 right talent from Mana Drain Deals Damage to +100% Mana Drain Damage

Improved anti map hack system
Fixed bug on Disperser counting spell blocks on self cast and affecting magic immune enemies
Fixed Winter Course not counting hero as killer while target killed by aliies 
Fixed Reaper's Scythe not providing HP/MP regen stacks on Rubick (if Rubick killed anyone), and no longer provides regens if target is illusion. Also now counts total provided regen instead of killed targets
Fixed The Swarm latching on invisible units
Fixed Finger of Death not providing any charges for Rubick
Fixed Necromastery souls gain exceeding limit
Fixed death not properly registered if Reaper's Scythe e.g. casted during Wraith Form 
Fixed Blink Fragment's cast range now equal to Blink's cast range. If Blink is not learned, Blink Fragment will have 750 (Talent 850) cast range by default
Fixed Ghost Shroud not applying self restoration amplification
Fixed Mana Drain not interrupting caster upon block
Fixed Vengeful Spirit being invulnerable upon taking illusion's position after respawn
Fixed AoE Press the Attack and Surge not providing effect in AoE on selfcast
Added Custom Day/Night model which can be activated by -light 6 command
Arcane Supremacy now provides same cast range for allies as for Rubick (from 25/50/75/100 to 75/150/225/300)
Aghanim's Scepter Assassinate no longer adds 5% bonus damage equal to targets max HP instead now Applies attack damage
Rolling Boulder now applies invulnerable after the effect delay and while rolling
Recoded all force movements so now cyclones can interrupt them properly
Remote Mines now counts spell damage amplification
Supernova now turns night to the day while being sun and its ends if caster dies or spell effect ends, same conditions for Dark Ascension and Eclipse. (thanks to Vordik)
Fountain now deals 25% splash damage in a 250 radius around the target
Corrected day/night time before creep spawn. Now turns from night to day gradually than instantly
Mortal Strike now grants full charges upon killing enemy hero
Cyclones no longer can be applied on Flaming Lasso affected targets but deals damage and purges
Shiva's Guard Restoration Reduction aura increased from 25% to 40%

Top lane big camp now easier to pull
Beggar Todd moved inside fountain area
Towers now invulnerable till creep spawn
Increased hero max level from 25 to 30 
Increased lane creep deny experience for the denied team from 40% to 50%
Increased creep denying gold bounty from 20% to 25%
Increased hero kill bounty from 110 + (KilledHeroLevel × 8) + KillStreakValue to 125 + (KilledHeroLevel × 8) + KillStreakValue
Increased bonus gold percentage for neutrals stacked player from 35% to 50%
Rescaled kill streak gold bonus from 100/135/170/205/240/275/310/345 to 75/150/225/300/375/450/525/600
Increased required total exp for each level from 230/600/1080/1660/2260/2980/3730/4510/5320/6160/7030/7930/9155/10405/11680/12980/14305/15805/17395/18995/20845/22945/25295/27895 
to 240/640/1160/1760/2440/3200/4000/4900/5900/7000/8200/9500/10900/12400/14000/15700/17500/19400/21400/23600/26000/28600/31400/34400/38400/43400/49400/56400/63900
Double Damage Rune renamed to Amplify Damage Rune. Base damage bonus decreased from 100% to 80%. Now also provides +25% Spell Amplification.

Reverted Attribute Bonus to every hero
Permanently grants the hero 2 of all attributes when leveled up
Can be leveled up a total of 11 (5 on Invoker) times

Bounty-Exp for neutrals
Alpha Wolf bounty from 30-36 to 34-36 and experience from 70 to 60
Wolf bounty from 18-21 to 20‒24
Wildkin bounty from 12-16 to 18‒20
Ancient Black Drake bounty from 31-40 to 39‒45 and experience from 49 to 95
Kentaur Khan bounty from 53-62 to 56‒62
Kentaur Outrunner bounty from 16-19 to 18‒20

Divine Rapier
Now also provides +25% Spell Damage

Recipe changed. Now requires Diffusal Blade (2500), Eaglehorn (2800) and a 400g recipe. Total cost unchanged
No longer grants +45 Damage
Agility bonus increased from +20 to +50

Octarine Core
Recipe changed. Now requires Kaya (2050), Soul Booster (3000). Total cost decreased from 5275 to 5050 
Now provides +16 Intelligence, +500 HP, +500 Mana, +12% Spell Damage, 16% Manacost Reduction, +24% Spell Lifesteal Amplification and 25% Cooldown Reduction

Ethereal Blade
Recipe changed. Now requires Aether Lens (2275), Ghost Scepter (1500) and a 1600g recipe. Total cost increased from 4650 to 5375
No longer provides any of Kaya-based bonuses
Now provides +10 All Attributes, +300 Mana, +150% Mana Regen and +225 Cast Range

Rod of Atos
Recipe cost decreased from 850 to 350
Intelligence bonus decreased from 24 to 15

Recipe cost decreased from 700 to 450
Intelligence bonus decreased from 24 to 15
Strength bonus increased from 14 to 15
Agility bonus increased from 14 to 15

Guardian Greaves
No longer provides +250 Mana
Now provides +1.5 Mana Regen
Guardian Aura now also grants +1.5 Mana Regen to allies and +5 to allies below 25% Health

Gem of True Sight
Added Reveal active ability
Exposes and grants True Sight over units within a targeted area for a short time
Cast range: 300
Radius: 300
Duration: 4
Cooldown: 12
Notes: Creates a temporary aura at the target area that exposes enemies and provides True Sight over them. The aura's modifier lingers for 0.5 seconds

Rot Aghanim Upgraded now also reduces enemy heal restoration by 25%

Meat Hook
Now treat illusions as creeps
Now hero countrol disabled untill backdragging

Corrected Blink Fragment illusion damage dealt/taken: 75%/200%
Reduced Mana Void mana cost from 100/200/300 to 100/150/200
LVL 15 right talent +0.6% Mana Break max mana burned per hit increased to +1%
LVL 20 right talent +0.15 Mana Void damage per missing mana increased to +0.2

Counterspell Ally Talent
Now shell similarly creates an illusion of Anti-Mage upon reflecting an enemy spell, illusion damage dealt/taken: 75%/100%
Increased shield duration from 1.2s to 3s and reduced illusion duration from 7 to 4

Tree Grab 
Now has limited number of attacks: 6
Building Attack Damage Bonus: from 40% to 40%/55%/70%/85%
Attack Damage Bonus: from 40% to 40%/60%/80%/100%
Cleave distance from 600 to 700

LVL 15 right talent from +400 Health to +30% Tree Grab Damage Bonus
LVL 20 right talent from +15% Status Resistance to Infinite Tree Grab charges

Corrected lvl 25 right talent +30(was +10) Lunar Blessing Stats
Increased Lunar Blessing Nighttime radius from 1200 to Global

LVL 15 left talent from -20s Eclipse Cooldown to -30s Eclipse Cooldown
LVL 20 right talent from Global Lunar Blessing to +4 Eclipse number of beams

Legion Commander
LVL 10 left talent from +200 Duel Cast Range to +8 Duel Bonus Damage 
LVL 20 right talent from +30 Movement Speed to 250 AoE Press the Attack
LVL 25 left talent from 400 AoE Press the Attack to Press the Attack grants 1.5s Spell Immunity
LVL 25 right talent from +30 Duel Damage Bonus to +50% Moment of Courage Lifesteal

Grants a 15-second 3/6/9/12 stacks of 6 flat attack damage bonus buff upon teleporting to the targeted location
Every attack reduces a stack of attack damage, then grants a stack of 1 armor bonus
Increased mana cost from 50 on each level to 50/60/70/80
Increased cooldown from 62/48/34/20 to 65/55/45/35

LVL 15 left talent from +30 Attack Speed to +5 Teleportation Max Stacks
LVL 20 right talent Sprout Roots no longer pierces spell immunity and can be dispelled. Now roots on cast instead 0.5-second intervals

Arc Warden
Agility from 20 to 25 and gain from 2.5 to 3
Tempest Double
CHANGED clone spawned health from HeroCurrentHP to HeroMaxHP
CHANGED clone spawned mana from HeroCurrentMP to HeroMaxMP
CHANGED ability targeting type from non-targeted to a 700-cast range point-targeted ability

Increased turn rate from 0.5 to 0.6

Cast range from 575 to 650
Radius from 125 to 140
Increased damage from 80/140/200/260 to 105/170/235/300
Reduced cooldown from 12 to 11
Increased projectile speed from 1600 to 2000
Reduced stun duration from 1.4/1.8/2.2/2.6 to 1.3/1.6/1.9/2.2
Rescaled mana cost from 70/100/130/160 to 90/110/130/150

Increased cast range from 500 on each level to 550/575/600/625
Reduced duration from 2.5/3/3.5/4 to 2/2.4/2.8/3.2
Reduced cooldown from 30/24/18/12 to 24/20/16/12

Mana Drain
Increased cooldown from 16/12/8/4 to 15/12/9/6
ADDED ally unit-targeting functionality
Ally Mana Restore Multiplier: 0.5
Now restores 10/20/30/60 mana per second on allies
Grants 10%/13%/15%/18% ally movement speed bonus while channeling
Reduced mana cost from 10 to 0
Now grants True Sight over the affected target

Finger of Death
Reduced ooldown from 160/100/40 to 140/90/40
Reduced mana cost from 200/420/650 to 200/400/600
Aghanim's Scepter upgrade:
Reduced cooldown from 100/60/20 to 80/50/20
Reduced damage from 725/875/1025 to 700/825/950

LVL 25 right talent from +1000 Impale Range to Mana Drain Deals Damage
LVL 20 left talent from +2 Mana Drain Multi Target to Mana Drain Spell Immune and +2 Multi Target (+400 break range)
LVL 20 right talent from +500 Health to +20 Finger of Death Damage Per Kill 
LVL 15 left talent from -2s Voodoo Cooldown to +125 Impale Damage
LVL 15 right talent from +200 Finger of Death Damage to +70 Max Health Per Finger of Death Kill
LVL 10 left talent from +90 Damage to -2s Voodoo Cooldown
LVL 10 right talent from +100 Cast Range to +10%/+5% Mana Drain Slow/Speed
TALENT NOTES Both the max health bonus and damage bonus increasing talents are retroactive and update all already acquired stacks

Reduced attack point from 0.4 to 0.3 
Increased attack projectile speed from 900 to 1200
Increased turn rate from 0.5 to 0.6

Heartstopper aura
Now affects on ancients and Spirit Bear and no longer affects on Roshan
Radius from 700 to 800

REWORKED Aghanim's Scepter upgrade:
OLD Ghost Shroud
Reduces cooldown by 6
Heartstopper Aura has a damage multiplier of 2 while Ghost Shroud active
NEW Heartstopper Aura now deals 0.5 * SelfCurrentHealthRegen as health loss bonus per second

LVL 25 right talent from +0.8 Heartstopper Aura to +0.5 Heartstopper Aura
LVL 20 left talent from +70 Attack Speed to +30% Heartstopper Restoration Reduction
LVL 20 right talent from +20% Magic Resistance to +15% Ghost Shroud Self Restoration
LVL 15 right talent from +30% Ghost Shroud Slow to +20% Ghost Shroud Slow
LVL 10 left talent from +10 Strength to +2s Heartstopper Aura Stack Duration
LVL 10 right talent from +30 Damage to +100 Reaper's Scythe Cast Range

LVL 20 left talent from -5s Illusory Orb Cooldown to +150 Initial/Break Dream Coil Damage
LVL 15 right talent from +15% Spell Amplification to -20s Dream Coil Cooldown
LVL 10 right talent from +30 Damage to +50 Illusory Orb Damage

Storm Surge is now affected by cooldown manipulation
LVL 25 left talent from Storm Surge no Cooldown to 25% Cooldown reduction

Phantom Lancer
Increased attack range from 150 to 225
Reduced Agility attribute symbol agility gain from 3.2 to 2.8
Reduced base movement speed from 290 to 285
Reduced Phantom Rush cooldown from 16/12/8/4 to 13/10/7/4

Spirit Lance 
Increased cast range from 525/600/675/750 to 600/650/700/750
Increased movement speed slow from 10%/18%/26%/34% to 14%/21%/28%/35% 
Increased Spirit Lance slow duration from 3.25 to 3.75
Reduced damage from 100/160/220/280 to 70/140/210/280
Aghanim Upgrade: 
AOE from 400 to 750
Increased created illusion damage from 20% to 50%

LVL 20 left talent from +5% Juxtapose Damage to +10% Juxtapose Damage
LVL 15 right talent from 16% Evasion to +2.5s Phantom Rush Bonus Agility Duration
LVL 10 left talent from +15 Attack Speed to +10 Strength
LVL 10 right talent from +150 Health to +40 Spirit Lance Damage

Improved Base Model
Increased Agility gain from 2.4 to 2.6

LVL 25 right talent from +1% Feast Damage/Lifesteal to +2% Feast Damage/Lifesteal 
LVL 20 right talent from 20% Evasion to Infest cannot be silenced
LVL 15 left talent from +25 Movement Speed to Feast x2 Damage/Lifesteal vs illusions
LVL 15 right talent from +30 Damage to 15% Evasion
LVL 10 right talent from +200 Health to +15% Cleave

Reduced Strength gain from 3.4 to 2.8
Reduced Agility gain from 2.2 to 1.7

Berserker's Call 
Increased radius from 300 to 315
Reduced duration from 2/2.4/2.8/3.2 to 1.8/2.2/2.6/3
Reduced armor bonus from 30 to 25

Counter Helix 
Damage from 60/100/140/180 to 95/120/145/170
Now uses the regular cooldown system, instead of an internal cooldown. Means is now affected by cooldown manipulation
CHANGED from a 17%/18%/19%/20% proc chance to an ensured proc on every 7th/6th/5th/4th attack
Increased radius from 275 to 300

Culling Blade
CHANGED damage type from Magical to Pure
Now grants 2 permanent armor bonus for successfully killing an enemy
The ability damage and the kill health threshold now use the same value, instead of being separate
Now also counts as a successful kill if the target dies even if their current health is higher than the threshold. Means damage amplification can increase current health kill threshold
Reduced movement speed bonus from 30% on each level to 20%/25%/30%
Rescaled attack speed bonus from 30 on each level to 20/30/40
Rescaled mana cost from 60/120/180 to 100/125/150
Increased cooldown from 75/65/55 to 100/85/70
Increased damage from 150/250/300 to 275/375/475
Increased current health kill threshold from 250/350/450 to 275/375/475
Increased cast range from 150 to 175

LVL 20 left talent from +20 Health Regen to +150 Culling Blade Damage and threshold
LVL 20 right talent from Attacking procs Counter Helix to Counter Helix no cooldown and procs on Attack
LVL 15 right talent from +25 Movement Speed to +12% Battle Hunger Speed/Slow
LVL 10 right talent from +2 Mana Regen to +10 Berserker's Call Armor

Hogwarts Legacy quick review

I would never expect a game such as this to be anything nearly as good as it actually is.

I would put it in a category of games such as Witcher, Mass Effect and Skyrim, but  one level below these legendary games overall. Being a fan of Harry Potter universe helps a lot to enjoy this game..



Potentially heavy spoilers below.

The good:

  • Great graphics overall.
  • Cloth graphics and physics look great, relic robes look incredible.
  • Hogwarts is a 1:1 replica of the movie set, you can see the effort put into it.
  • The map overall is well designed and true open world.
  • The plot overall is interesting enough.
  • Soundtrack is good, not Skyrim or Witcher level good but I could recall at least 2 themes and that's an achievement.
  • Combat is balanced and at times challenging.
  • Niamh trial quest.
  • Having a completely open world game and allowing you to fly almost anywhere is daring and it just works.
  • Not really a fan of puzzles but accio trials are decent enough.

The meh:

  • The whole southern coast seems unnecessary. Also, giving you a powerful mount just before the game ends is kind of pointless.
  • Merlin trials and gear slots are a complete bore fest and grind. Am I supposed to be enjoying that? Reduce the trials in half and I could accept it.
  • Demiguise Statue quest.. ugh.
  • Natsai quest line is uninspiring and fades in comparison with the Sebastian quest line.
  • Anne story line is unresolved even though there are two big directions we could end up going. The relic plot line is completely derailed without being able to do anything about it and the option to use ancient magic is never explored even though it is hinted at heavily through the Isidora story. That could be a major decision left on the player but we are never given the opportunity. There is even a third way when we discover that Rookwood was responsible but nothing happens with his death.. the curse does not go away. You could be given a choice to not kill him or to torture him to release the curse etc.. I am just making things up in the heat of the moment but there are many options left on the table.
  • Ancient magic trials are quite boring.
  • About 10 hours too long.
  • The whole room of requirement is quite an achievement but unless you are a die hard fan of the game the whole thing could be easily cut without much loss, perhaps a step too far.
  • Rookwood and Harlow are not really built up as villains properly. They are impersonal and in some of the early missions we don't even encounter them (castle escape for example). Rookwood has a possibility of a redemption but we are never given the choice.
  • Black does nothing all game except for being the designated  idiot.

The bad:

  • Alohomora mini game is a complete waste of time. At least lockpicking in Skyrim requires some skill.
  • Player's character has no backstory. All we know is that we are a very talented student and that's about it, we just drop out of the sky. No family background, no prior event recalls, nothing. In Mass Effect for example, you could pick your background and it would be recalled in conversation from time to time, making the character more real.
  • Player's character has no personality, mostly because our dialog choices do not really matter and most choices are between neutral good to neutral evil. It would benefit from some Mass Effect level of choices and commander Shepard's sass level.
  • No romance options. Movies and books are quite heavy on relationships and this is missing. It would only take a few extra dialog options and scenes.

2023 DotA season ends

On December 1st, DotA ladder has been reset. The top 5 have received a custom skin as a gift from d1stats. All top players have received VIP status and icons. Congrats to all!

# Player PSR
1 rob_real 1873
2 real_rob 1869
3 myragegaming 1833
4 alexsundar 1803
5 ^venom^ 1801
6 chzn 1779
7 flame- 1758
8 wakakaka 1756
9 -thelegend- 1751
10 dotamafia 1751
11 smaaaraaac 1745
12 ghe 1742
13 nesisiryevil 1741
14 tihulu 1741
15 sympa 1740
16 viperlanevermez 1739
17 no_lifer_xd 1738
18 ]iamgroot[ 1735
19 agent.of.shield 1735
20 hanna^ 1733
21 bedel 1732
22 robertocarlos61 1732
23 dzuk1ll 1731
24 lovec_kokotov 1730
25 justify 1727
26 bozee_sacuvaj 1727
27 exxile 1726
28 hercelllam 1724
29 baholovetayyip 1723
30 ebemhaped 1723




Protecting your vBulletin 4 registration against spambots with email domain whitelist

If you are still hosting a vBulletin 4 forum for whatever the reason may be, you are probably experiencing the spambot hell. Captcha plugins are out of date or simply bypassed and protections like human verification questions just do not seem to work. You could throw Cloudflare in front for some bot detection and that is probably a good idea.

I observed that the major hole in arresting the bots from even registering is the use of various random domains and subdomains in their emails. You do have an email banlist option in Admin CP but that really does not cut it because there is no support for regex and there are infinite domains to block. An email whitelist would be much better because you then force the spammers to create email accounts at major email providers like gmail and outlook which slows them down.

That will block legitimate users who use personal email domains but that is usually a small minority that can be handled on case by case basis. It depends on your use case if you can accept that.

There are no email whitelist plugins out there so I decided to just dig into the vBulletin code and hardcode it.. how hard can it be? Turns out it's easy.

The function that handles the email ban list can be found under the name is_banned_email in a includes/functions_user.php.

Right before the return statement, we can hardcode our email domain whitelist as an additional protection:

// custom addition: email whitelist
$email_domain_whitelist = [
    /* Default domains included */
    "", "", "", "", "", "",
    "", "", "", "", "", "", "",
    "", "", "",

    /* Other global domains */
    "", "" /* AOL */, "", "", "", "",
    "", "" /* AOL */, "", "", "" /* Yahoo */,
    "", "" /* AOL */, "" /* AOL */, "" /* Yahoo */, "", "",

    /* United States ISP domains */
    "", "", "", "", "", "",

    /* British ISP domains */
    "", "", "", "", "",
    "", "", "", "", "", "",
    "", "", "",

    /* Domains used in Asia */
    "", "", "", "", "", "",

    /* French ISP domains */
    "", "", "", "", "", "", "", "", "",

    /* German ISP domains */
    "", "", "", "", "" /* T-Mobile */, "",

    /* Russian ISP domains */
    "", "", "", "", "",

    /* Domains used in Brazil */
    "", "", "", "", "", "", 
    "", "", "", "", "", "",
    /* personal domains */

$emailParts = explode('@', $email);

if (count($emailParts) === 2) {
    $domain = $emailParts[1];
    if (!in_array($domain, $email_domain_whitelist)) {
        return 1;


DotA v7.04c3

New DotA map was pushed to download queue and will be upgraded on bots shortly. Download manually at

Changelog v7.04c3

Fixed -tip command text showing to all players while no charges are left 
Fixed Rip Tide now damage source of all Rip Tides is the unit that performed the triggering attack, meaning on-damage effects react on the unit that triggered it (e.g. Blade Mail)
Fixed Ball Lightning could be used while rolling without reaching cast point
Fixed heroes could attack upon respawning until they receive any order
Fixed disassembling of Arcane Boots, again
Corrected Static Link's duration
Corrected Radiance's damage
Radiance now also incurs bonus 10% damage equal to hero's primary attribute. Also now can be disassembled
Reduced Exorcism (Agha) debuff duration from 3 seconds to 1.5 seconds
Waveform's fear (Agha) now dispellable with basic dispel

Turn rate increased from 0.6 to 0.9
Attack range increased from 600 to 650
Reduced base attack time from 1.7 to 1.5

Force of Nature
Cooldown from 37s to 37/35/33/31
Manacost from 130/140/150/160 to 120

LVL 20 left talent from 75% Miss chance for Sprouted units to 100% Miss chance for Sprouted units
LVL 20 right talent from +8 Armor to Sprout Leashes
LVL 15 right talent from +25 Attack Speed to +30 Attack Speed
LVL 10 right talent from +20 Damage to -10s Force of Nature Cooldown

Storm Spirit
Reverted lvl 20 right talent "Ball Lightning no cast time and no turn required" to 0.4s Electric Vortex (due to some bugs)
LVL 15 left talent from 0.4s Electric Vortex to +30 Attack Speed

Waveform cooldown increased from 17/15/13/11 to 21/18/15/12

LVL 25 right talent from 2 Waveform Charges to -5s Waveform Cooldown
LVL 20 right talent from 20% Cooldown Reduction to +35 Strength
LVL 15 left talent from +30 Attack Speed to +15 Agility
LVL 10 left talent from +10 Agility to +15% Magic Resistance

Automatically resize cloud VM filesystem when disk size increases on Linux

One of the good things that cloud brings is that you can easily increase size of your VM disks as they fill up. Unfortunately the process is a bit manual because you also need to resize your filesystem in order to see the change. GCP has this process documented.

We can automate this with a udev rule. This was tested on GCP and Ubuntu 20.04 with ext4.

Add a new rule, for example in



SUBSYSTEM=="block", ENV{RESIZE}=="1", ACTION=="change", RUN+="/bin/sh -c 'resize2fs /dev/$name'"

Followed by

udevadm control --reload-rules

This rule listens for change events in block device subsystem and filters by the RESIZE property. If conditions are met, it will adjust your filesystem to use the rest of the free space.

You can make the udev rule more specific to target only sdb or sdc for example. I could not find a good documentation on udev rules that would explain exactly which event properties need to use the == selector (for example SUBSYSTEM), which are considered ENV (supposedly these are any custom properties) and which should use an ATTRS filter.

The property could possibly differ depending on OS and cloud provider, so before adding the rule, you can listen for the events and see the full event output while you change the disk size with

udevadm monitor --udev --property --subsystem-match=block
Bnetdocs client update 1.4

  • updated to Qt6 framework and MSVC 2022
  • removed support for 32-bit Windows OS, only 64bit Windows is supported
  • added News tab
  • added option to download a specific game version from inside the client
  • fixed broken updater
  • fixed a bug with lobby overlay UI which randomly stopped working
  • various bugfixes

Using extra mouse buttons to quickly switch to a task in KDE

I had a bright idea to use my extra 2 mouse buttons to quickly switch to a task in Debian KDE, for example to terminal or browser. Since the mouse is in the palm of your hand most of the time this is quite a bit faster than actually clicking on a task or hitting a key combo on your keyboard.

I started by pinning Konsole and Firefox to taskbar positions 1 and 2 and then went to

System Settings -> Shortcuts -> Plasma -> Activate Task Manager entry 1

Shortcuts like Meta+1, Meta+2 etc already exists so I thought I can simply add an alternative shortcut. Unfortunately, this configurator does not detect the mouse buttons (nothing happens if you click and key is not recorded).

Fortunately, KDE also has a nice feature in your Mouse settings to remap the extra buttons to anything you like in

System Settings -> Input devices -> Mouse -> Re-Bind Additional Mouse Buttons

In there, I simply assigned one button to Meta+1 and the other button to Meta+2. I can see plenty of other useful possibilities like mapping the button to shift through different windows of a task etc.

The mouse I use is Roccat KONE Aimo which also has a third button labeled T3 (and a plus/minus buttons which are bound for DPI sensitivity by default) but T3 does not get picked up by the configurator even after disabling EasyShift (which basically remaps the whole mouse when pressed so all the buttons can have a different function temporarily). The surprising thing is that if I map that button to some functionality like Browser Home (in Windows Roccat driver) it does actually work in a Linux Browser, so I am not sure why KDE Mouse configuratior does not detect this button.


Update: I found an alternative way of doing this which also enables T3. On Windows, using the Roccat driver software, assign each mouse button a shortcut. Try to find something that is not used by anything. I ended up with something like alt+ctrl+Page Up/Down/End.

Then in KDE shortcuts, assign an alternative to Meta+1 by clicking the button. This time, the button is recorded as the assigned shortcut.


Divide and Conquer, Medieval II: Total War mod (DaC) experience

Divide and Conquer is a Medieval II: Total War Kingdoms mod in Lord of the Rings setting. Technically a "sub" mod of Third Age: Total War, but at this point it is fair to say it is a mod on it's own since it greatly imroves and expands almost every aspect of TaTW.

I have finished TaTW campaign 3 times before so when the nostalgia kicked in again I decided to give DAC a try.


Version: 4.6.7
Difficulty: hard (I personally find the "very hard" setting just a grind with no added value in this case, hard is plenty of a challenge)
Faction: Rohan
Style of play: try to follow the lore

Rohan Campaign playthrough – the beginning

I chose Rohan since I've already done High Elves, Dwarves and Gondor in TaTW. Events described here are as they unfolded in my playthrough but there can be major differences depending on faction politics.

You begin with a handful of known generals such as Theoden, Theodred, Eomer, Hama, Gamling and others. Your initial campaign will revolve entirely around defending and defeating Isengard which will attack almost immediatelly. You need to send all your available armies to Westfold (Foldburg) and defend it at all cost. Losing the region will set you back tens of turns so try to hold out. Place two general units since they are overpowered. You can do a bit of research on the side but most of your spending will go to replenishing the armies to defend wave after wave of attacks. Eventually Saruman himself may lead a siege and by killing Saruman the whole Isengard will fold into rebel territory.

In every captured settlement, the number one building you should always upgrade first is culture and then masonry. You need to convert non-native culture to your own and that takes tens of turns so you want to speed that up as much as possible.

You then proceed to expand further west and defeat the Dunlendings.

You should probably forge an alliance with Clans of Enedwaith to get some help here and secure your west border for the rest of the campaign. Create trade agreements with all the neighbouring nations, even some of the dark forces are acceptable in the beginning when you need to build up your income.

The next natural progression is to go further into the Misty Mountains and defeat the goblins there. At this point Moria will probably be divided so you can gift West Moria back to Dwarves of Khazad Dum and forge an alliance.

Building up your income

Depending on how other factions are progressing, you will probably have the whole west border secured with Enedwaith, Dunedain and High Elves at your borders (forge alliances if possible). This is still not big enough region for sufficient income so you can skip over High Elves and continue your conquest on Remnants of Angmar. Another possibility is to take Dol Guldur which is relatively easy to take but has a slightly negative position. First, if you retake any settlement which belonged to Woodland Realm you should gift it back or they might think about reclaiming it by declaring war on you. The second negative is that you get a likely border with Easterlings. If you take Dol Guldur, take the 2-3 cities inside the safety of forests and do not expand further east, except maybe for one single stronghold (with ballista towers). Having a major war with Easterlings is the absolute number one mistake as it drains a lot of your resources and you will make almost no advances into their vast no-choke point territories.

To War!!!

This far into the game Gondor can start having trouble defending itself so with sufficient income from your expansion you should be able to finance war against Mordor. You still have expansion options on the north to Snow Orcs or Ered Luin (which choose the dark side in an early Blue Wizard event) but if Gondor is getting in trouble you should not wait any longer.

I personally was a bit late and Minas Tirith already fell so I had to re-conquer it which is an unnecessary delay.

You won't be able to resist the urge to recreate the scene

War against Mordor is pretty much the same with whatever faction you are playing, except maybe Dale and Dwarves of Erebor (which can backdoor into Mordor from the east). It is all about creating choke points and progressing eastwards settlement by settlement.

I happened to get some Gondor AI reinforcements which felt nice. Allied forces will join you if they are nearby or call you to help mid-turn

Let's focus on the campaign map around Minas Tirith for a bit.

It is all about the choke points

As you arrive to the east, you should take Galebrin (not seen on the picture, region north of Cair Andros) which is a small useless village in the The Dead Marshes and give it to an ally or a neutral faction as a gift. This will block Easterlings or Mordor advancing on your native land across Anduin which is a total waste of time and a distraction so it is an utmost priority to seal that off.

You should also take Calenhad because you want as many cities as possible on the east to develop your armies closer to the war front. Training armies in Rohan and moving them to Gondor takes many turns and is inefficient. If Calenhad is still owned by Gondor when you arrive you can easily swap it with any region you recapture or just buy it off if finance allows it.

Next one is Cair Andros which you also do not really want to own because it creates a secondary target to Osgiliath. Once you take whole Osgiliath, Cair Andros can probably be owned by Gondor since Mordor will have full focus on you and not even attack there. If it is still attacked and falls when owned by Gondor, gift it to a neutral party.

Leave Minas Tirith to Gondor. It does not make much sense tactically but if you are into lore it makes sense to do that. It also leaves them some good income to fight their own wars.

Osgiliath is your primary choke point for quite a lot of turns but is relatively easy to defend because the battle map is hard to navigate and has narrow paths.

A single bridge leads to East Osgiliath

This setup makes Osgiliath the only route you need to defend. Once Osgiliath gets army production, you can continue on Minas Morgul. You continue this step by step progression, waiting for conquered cities to be able to produce army and then take the next one.

How insanely good modding is that?? Siege of Minas Morgul
Glitching up the mountain for an epic view of Minas Morgul

At some point after Minas Morgul and Cirith Ungol you can capture the two cities to the south for extra production. You can gift the settlement below Ostithil to Gondor or neutral party to avoid a second front with Haradrim.

When Gondor is safe from Mordor they will start thriving and go into big expansion into Harad and Rhun. You don't really need to worry about those two factions unless you arrive late and they already progress deep into south Gondor regions.

With Rohan taking the brunt of the Mordor forces, Gondor is free to take care of their southern borders and go on a war path

Once you have Minas Morgul (and Cirith Ungol) you might feel a bit exposed because you will also get attacked from the Black gate, usually on Osgiliath. You can take a bit of a rest by gifting Cirith Ungol to a neutral party but that might not last long since Mordor tends to attack them anyway and this can last just a few turns. Depending on diplomatic relations you could buy yourself quite a bit of time like this though.

The question of taking Barad Dur is just a matter of time then. Being this close has an annoying effect that each defeated Nazgul commander respawns in Barad Dur and is ready for another siege in a very short time, so you are almost constantly defending against 10 star commanders. You should defend with equally strong commanders to avoid any unnecessary fleeing troops.

You may also encounter Sauron as a commander. As a unit almost impossible to kill, unless you get a catapult kill, but defeating his army will send him fleeing and weaken the faction.

Sauron Encounter

Once you start taking cities inside Mordor it gets increasingly easier to finish it off.

Final Assault
Siege of Barad Dur, get those catapults!

Once a faction is on their last stand, the capital will be filled up with army and can be pretty hard to conquer, especially if it is not an open type terrain like dwarven caves. Barad Dur is basically one small tunnel with only two access points. Bringing catapults to fire directly into the tunnel slope is a must or you will simply run out of time even with enough units in battle. You simply can't kill 3700+ units, a lot of them of heavy type, encamped in such a small area before the clock runs out.

Incredible views

What could go wrong?

Gifting regions to neutral parties works for some time but eventually everyone is at war with Mordor. These can buy you a lot of turns of peace or Mordor might just attack them immediatelly. Depending on your luck, you could start getting attacked by Mordor or Easterlings through Dead Marshes on your core territory where you have your main production and mostly undefended cities.

Another possible drain is attacking Snow Orcs or Ered Luin when you are already neck deep into eastern war. Your northern production takes quite some time to get up to speed and these two factions are holed up in dwarven caves which are hard to capture.

Beautiful dwarven battle maps

You essentially need full armies and catapults to have any chances to break through heavy units in time.

These are a PITA to capture

Rohan in itself is not a particularly powerful faction when it comes to units. You have almost no heavy infantry except Guards of Meduseld which can only be produced in Edoras. Your heavy cavalry is good but not much better than any other heavy cavalry and your archers are poor. In these cave scenarios, you have no advantages. The whole unit production of DAC is very slow, you need many fully upgraded settlements just to be able to retrain damaged armies every turn. A lot of times you won't be able to retrain due to lack of unit availability and you need to send units to far away settlements.

Gondor inflicting maximum pain

Finally, the biggest problem is how to avoid a major war with Easterlings. If you expand into Dol Guldur you get a border sooner or later (Dale tends to be pushed back). You can usually defend there with fully upgraded walls (ballista towers). You can potentially conquer one of their strongholds nearby and have it as a gravity point. Ballista towers can generally clear their armies a lot before they even break through the walls so defending is quite easy but it is problematic to replenish the defending army in the period when settlement can not yet produce units. You should absolutely not push deeper into their territory while you are fighting Mordor, they will push you back and probably crush you. By staying in close proximity you drain a bit of their resources and help Dale not getting eradicated this way.

Easterlings are basically an overpowered version of Rohan. Their cavalry is on par, archers are better and they have more heavy units so you have no particular advantages over them in battles.

After end

You can have some more fun after bringing down Barad Dur. I personally finished up on the east and then defeated Ered Luin for a good measure.

Ered Luin Resolve

Weird things can also happen with other factions. In my case, Dwarves of Khazad Dum went on a war path and completely eradicated Lothlorien and the Vale, leaving dozens of armies on my borders. If you don't watch your relationships (like trespassing without Military Access) you get yourself an enemy you can't handle.

Dwarves overpowered Lothlorien and Vale of Anduin, leaving dozens of armies

Game event dialogs

Throughout the campaign you get events and commander traits as you conquer important settlements. Your commander will receive a title of the last big conquest or generic title such as Aggressive or Defender, depending if they are conquering regions or defending a lot. This attention to detail is incredible.

Theodred conquers Dol Guldur

These events with very nice descriptions make the campaign feel alive.

Morannon broken

As factions are near destruction or completely destroyed you also get these.

For Frodo!!!
Ered Luin Dwindles

Trait Descriptions

Trait descriptions are LOTR based and absolutely brilliant. Some samples below.

Eomer Command
Glorfindel Renown
Eomer Loyalty
Theoden Acumen


Soundtrack is absolutely brilliant. It includes LOTR movies soundtrack, The Hobbit trilogy soundtrack, LOTR Online, Battle of Middle Earth and many more for different factions. The best of all, almost all of the picked themes work nicely with the battle scenarios and campaign map, as if they were custom made just for this mod and they really give you that Middle Earth feeling while playing.

Someone made a playlist on YouTube.


All we have to decide is what to do with the time that is given us..

DAC is one of the best mods I played in my life and is everything a Total War and a LOTR fan could wish for. The soundtrack, attention to detail, city models and the campaign maps, everything just screams of incredible effort to make this mod as good as it is. If you haven't yet, give it a try.


Building Qt 5.15 on Windows with OpenSSL

I have written about the many problems of building Qt 5 with OpenSSL in the past. Several years later, it is time to upgrade to latest Qt 5.15 which is presumably the last in the Qt 5 series. This time I decided to drop the Windows XP support since it is just too much work to get working and XP market share is much lower today than it was 5 years ago.

Since the Qt build documentation is still lacking here is the latest text of the ordeal.

First thing first, install Strawberry Perl and Python 2 (yeah.. really).

For speedier builds, also install jom. We will also need vcpkg to get the OpenSSL binaries. Needless to say, all these tools need to be in your system PATH.

Now get the code:

git clone git://
cd qt5
git checkout v5.15
perl init-repository

I think you can tell the init-repository script to not download some of the modules you don't need (it pulls 12GB of data!) but I couldn't be bothered to find the flags for that. You can probably avoid it by downloading the source archive instead of doing it via git.

Today we finally have the C/C++ package managers available to not bother bulding the dependencies anymore. Vcpkg and conan are both great tools that do the job. So forget about building OpenSSL, just install the binaries with vcpkg:

./vcpkg.exe install openssl

In your user env, add

OPENSSL_LIBS=-llibssl -llibcrypto

Now we can run the configure script inside the qt5 folder. First we do a release build and we link to openssl (run in Visual Studio cmd):

.\configure.bat -v -release -opensource -nomake examples -opengl desktop -platform win32-msvc2015 -openssl -openssl-linked -I C:/Users/me/git/vcpkg/installed/x86-windows/include -L C:/Users/me/git/vcpkg/installed/x86-windows/lib

Change the location of OpenSSL include and lib folders to whatever your vcpkg installation directory is. I am still targeting msvc2015 for now but I plan to transition to 2019 eventually.

If you change around the configure parameters, make sure to delete config.cache file since in my experience it likes to save unwanted information from previous runs.

Build it with jom:

jom install

Now you have a release build and you can add it in Qt Creator under Tools->Options->Qt Versions by giving it the path to C:\Qt\Qt-5.15.1\bin\qmake.exe.

If you also need debug build of Qt, you can repeat the configure and build step by replacing -release flag with -debug (remember to delete config.cache first).

An there you have it.. Qt built from source with OpenSSL support. Once you build your program you will also have to copy all the relavant .dll files into the .exe build directory (Qt5Core.dll, Qt5Gui.dll, Qt5Network.dll…). The amount of libraries you need to copy depends on what you are actually using in your code. You will also need to copy libcrypto-1_1.dll and libssl-1_1.dll from the vcpkg install directory.

For debug builds you need to copy the debug libraries (Qt5Cored.dll) instead.

The future appears to be even brighter now that bincrafters have packaged Qt as a conan recipe. Which means the next time I need to depend on Qt, I will run a single conan command and get the proper build automagically delivered to my PC along with all the transitive dependencies. The future is now.