Mod (Scripter) & Programmer (C++)

Paradox Interactive Mod

Mod (Scripter)

Paradox Interactive Mod

I taught myself Paradox’s PROPRIETARY SCRIPTING LANGUAGE in a day and scripted historical events for Europa Universalis IV and Crusader Kings II.

  • EVENTS in these games are UI POP UPS and can be TRIGGERED by a variety of factors.

  • These events give extra historical background and cause the player to make decisions that IMPACT THE GAME.

Europa Universalis IV Mod

  • WROTE and SCRIPTED historical FLAVOR TEXT, based on Mary of Guise and Mary, Queen of Scots.

  • RESEARCHED historical facts and DETERMINED how political implications could IMPACT PLAYERS.

Crusader Kings II Mods

Crusader Kings is a strategy game that deals with social elements of society during Medieval times.


In this game, the player may choose marriage arrangements as a strategy for gaining political power and bestow titles upon others while attempting assassinations.


Characters inherit traits and skills, though other traits may inflict characters at given points throughout the game, such as paranoia or leprosy. Some game text may change due to the player’s current trait.


Crusader Kings II Mod - Dancing Mania Event

I thought it would be fun to write events based upon historical phenomenons in the Middle Ages, since event texts are written in such a creative style in Crusader Kings.

  • One of the events I wrote and SCRIPTED was Dancing Mania, a strange occurrence between the 14th and 17th centuries where people danced, seemingly uncontrollably.

  • I added VARIETY to the event by WRITING 6 pieces of TEXT BASED ON THE PLAYER'S CURRENT AFFLICTION – paranoia, drunkenness, possession by Jesus, possession by Satan, leprosy, or no current trait.

  • I SCRIPTED THE PROBABILITY a player would become inflicted with Dancing Mania, INCREASING THE LIKELIHOOD if the player was, for example, stressed or ill.

  • I also scripted the event so it would negatively AFFECT PLAYER STATS.

Crusader Kings II Mod - Witchcraft Event

Another common occurrence in the Middle Ages was the belief that people could be inflicted by witchcraft.

  • I wrote 4 different texts depending on the PLAYER'S CURRENT TRAIT, such as paranoia, depression, lunacy, or no specific trait.

  • Since I wanted the witchcraft event to be separate from other religious attributes, I scripted the event so it WOULDN'T TRIGGER if the player’s character is RELIGIOUS or ALREADY POSSESSED by Jesus or Satan.

  • I SCRIPTED it so the player would MORE LIKELY BE AFFLICTED upon being, for example, more of a MYSTIC or STRESSED.


While serving as AI & Game Designer/Scripter at Avalanche Studios in Stockholm, Sweden, I made small games in C++ during my free time.

My main objective was to improve my programming skills.


Programmer (C++)



  • stdafx.h: I kept global enums and includes in the stdafx.h file, since I knew I would need to use items like strings across my .cpp files. I also knew I would need to access general settings in all files, such as the player’s chosen language, word category, and difficulty level.

In addition to the Main.cpp file, I included 4 additional files:

  • Gameboard.h: Resets gameboard. Draws gameboard. Sets current word. Checks if letters in word are correct.

  • PlayerSettings.h: Data structure to store all information pertaining to player settings.

  • Hangman.h: Handles the core game loop.

  • Library.h: Reads the stringtable file with the library of localized words. Creates an array for each word category. Stores words into their category array based on string ID. Selects random string in given category (for specified language).



​Since I worked at a game localization company previously (LAI Global Game Services) and enjoy learning languages (and know English, French, Spanish and Swedish), I wanted to incorporate localized strings into my Hangman game.


This cpp file provides the framework for the hangman game loop:

What I Would Change Next Time

  • I would create a more dynamic way of reading this file so new languages could easily be added, mirroring the dynamic system for reading different categories.

    • Currently, adding new languages requires updating the Language enum values in the stdafx.h file, as well as the switch case statement in Library.cpp.

  • I would also include all strings into the localization file, such as user input questions and feedback statements (i.e. “Hey, you there. Stop trying to break my game!”).