Carnet de développement n°58 : Du Modding, et un peu d'Optimisation


Bon après-midi, tout le monde. Je suis Magne 'Meneth' Skjæran, le programmeur de CK2. Par le passé, j'ai écrit des carnets de développement sur le modding, l'optimisation, l'ergonomie et celui de la semaine dernière qui expliquait le rôle et les responsabilités des différentes membres de l'équipe de développement.

L'été se poursuit, et les bureaux resteront assez vides jusqu'à fin juillet, y compris en ce qui concerne l'essentiel de l'équipe de CK2. Mais, comme on dit, the show must go on, et pour les quatre semaines à venir, c'est moi qui écrirai tous - ou presque - les carnets de CK2.

Puisque la majeure partie de l'équipe est en vacances, le travail avance peu, ce qui signifie que nos quatre carnets seront assez légers en termes d'infos sur l'extension et le patch à venir, mais j'espère parvenir tout de même à les rendre intéressants en partageant avec vous des réflexions et des informations croustillantes.

Aujourd'hui, je vous parlerai de ce que nous avons fait pour rendre le jeu plus facile à modder dans la 2.8. En tant qu'ancien moddeur, c'est l'un de mes sujets favoris, et j'ai eu le privilège de mettre en place un grand nombre des fonctionnalités dont je vais parler maintenant.

J'évoquerai également brièvement certaines optimisations que nous avons effectuées pour rendre le jeu plus rapide.
A la fin de ce carnet, je partagerai aussi cinq entrées du changelog du patch 2.8 choisies au hasard.

Notre Engagement
Comme je vous le disais dans le carnet consacré aux Mods et à la Télémétrie des Mods, nous considérons que les mods et les moddeurs sont essentiels à CK2. Les mods accroissent la longévité du jeu en permettant aux joueurs de le modifier à l'envi, d'explorer des scénarios alternatifs, des réalités, alternatives. A l'instant où j'écris, un peu moins de la moitié (48%) des joueurs de la veille ont utilisé au moins un mod, alors qu'ils étaient 42% quand j'écrivis le carnet sur les mods et leur télémétrie.
En plus de cela, un nombre significatif de gens chez Paradox Studios sont d'anciens moddeurs.
Sans oublier que la plupart des choses qui réjouissent les moddeurs permettent également de faciliter le travail de nos concepteurs de contenu, quand elles n'offrent pas des possibilités entièrement nouvelles.

De cette façon, la moddabilité nous tient à cœur depuis longtemps, et le patch 2.8 ne fera pas exception à notre dévouement au modding.

Points Particuliers
Le changelog dédié au modding de la 2.8 (à découvrir plus bas) est massif, aussi je voudrais mettre en valeur quelques points qui, je pense, raviront les moddeurs :

- Les effets et les triggers qui font appel à un nombre peuvent désormais utiliser un nom de variable, et la variable sera prise à partir du champ d'application en cours d'utilisation ; par exemple : "wealth = test_variable".

Cela accroît considérablement la flexibilité de l'usage des variables. Alors qu'auparavant il était pratiquement impossible d'utiliser les variables en dehors de la localisation et des comparaisons, il est désormais possible de les utiliser dans tous les effets et les triggers numériques.

- Les commandes de la console suivantes, et qui n'étaient disponibles que pour les développeurs et les bêta-testeurs le sont désormais pour tout le monde : guibounds, noai, join_society, leave_society, society_rank_up/down, society_currency, set_society_grandmaster, get_all_artifacts, activate_artifacts

La première de ces commandes devrait être particulièrement utile, et c'est pourquoi je l'avais mentionnée dans le carnet sur la Télémétrie des mods.

- Les décisions ciblées peuvent désormais avoir un personnage ou un artefact en tierce partie.

Dans ce type de décision, il était déjà possible de sélectionner un autre personnage pour qu’il soit affecté, maintenant il est possible d'en cibler un troisième. Il est possible d'utiliser les mêmes filtres que pour les décisions ciblées habituelles, où le joueur sélectionne le personnage ou l’artefact de son choix dans une liste composée par tous les personnages/artefacts qui correspondent aux conditions de la tierce partie de la décision. J'ai hâte de voir ce que les moddeurs feront de cette fonctionnalité. Cela permet également d'utiliser un système de score scriptable pour la tierce partie, afin d'organiser la liste, et on peut également référencer cette dernière dans le script avec des variables.

- Il est désormais possible de stocker des variables de la même manière que les cibles d'événements ; toute variable commençant par "local_" fonctionnera de cette manière, ce qui signifie qu'elle persistera aussi longtemps que la chaîne d'événements se poursuit, mais pas au-delà.

Pour toutes les variables qui sont utilisées uniquement dans une seule chaîne d'événements, cela signifie qu'il ne faudra plus nettoyer les variables une fois la chaîne terminée.

- La taille de mise en ligne des mods sur Steam n'est plus limitée à 50MB

C'est sans doute le changement dont l'effet sera le plus immédiat. Pour le moment, la taille maximale des mods de CK2 est sévèrement limitée, mais dans la 2.8 cette limitation appartiendra au passé.

- Les changements de champ d'application des effets et des triggers ont désormais un paramètre optionnel "show_scope_change". S'il est réglé sur "no", le changement du champ d'application ne sera pas visible dans l'infobulle, qui adoptera ce format : "description de l'effet" plutôt que "changement du champ d'application : description de l'effet". Cette fonctionnalité n'est pas disponible pour les champs d'application réglés sur "random" ou "any".

Bien qu'il s'agisse d'un réglage purement visuel, cela peut dans de nombreux cas permettre d'avoir des infobulles plus claires.

- Ajout de "conditional_tooltip" ; qui définit quand une partie spécifique du script du trigger doit être visible. Son contenu n'est passé en revue que si elle est visible.

Si vous avez déjà utilisé un trigger qui change en fonction du rang de quelqu'un, il est probable que vous soyez content de découvrir cette nouvelle fonctionnalité. Grâce à elle, vous pourrez vous assurer que seul le trigger pertinent pour la situation actuelle sera visible, ce qui réduit significativement la taille de nombreuses infobulles. Dans le jeu vanilla, c'est également utile pour les conditions dépendantes de DLCs.

- Toutes les infobulles peuvent maintenant avoir une localisation personnalisée. De manière générale, "Root" sera le joueur.

Cela signifie que la localisation personnalisée qui ne dépend que de celui qui regarde fonctionnera partout, ce qui devrait permettre de limiter ce qu'on veut rendre visible plus facilement.

- Tous les triggers numériques supportent les opérateurs de comparaison (>=, <=, <, >, and ==) à quelques exceptions près : les triggers de rang, among_most_powerful_vassals. Ces exceptions sont dues au fait que les triggers d'opération annulent les comportements existants (par exemple, "tier = duke" n'est pas l'équivalent de "tier >= duke", comme le laissent penser les opérateurs de comparaison).

C'est une chose que je voulais faire depuis que nous avons introduit les opérateurs de comparaison, mais le temps nécessaire pour cette tâche m'avait retenu jusqu'ici. Cela devrait rendre le script bien plus propre, et ouvrir la porte à de nouvelles possibilités. En particulier en combinaison avec la possibilité d'utiliser des variables dans la partie droite.

- Amélioration de "else_if" et "else". Si l'un des deux est placé après un "if" ou un "else_if", il sera exécuté comme si la limite de "if"/"else_if" était fausse. Par exemple :
Code:
    if = { limit = { something = yes } do_something = yes }
    else_if = { limit = { something_else = yes } do_something_else = yes }
    else = { do_another_thing = yes }
Il s'agit d'une autre fonctionnalité qu'il était déjà possible de reproduire dans le script, mais de manière très contournée. Désormais, les horribles vérifications pour lesquelles il fallait comprendre quelles alternatives choisir peuvent être raccourcies significativement.

- Ajout d'un champ fail_trigger_effect pour les événements. Cet effet est déclenché si le script tente de démarrer un événement, mais les conditions de trigger ne sont pas remplies. C'est utile pour des choses telles que la mort d'un personnage pour des raisons extérieures à l'événement pendant qu'une chaîne est en cours.

J'ai ajouté cela le jour même où j'écrit ce carnet sur la requête de Matthew Clohessy (un moddeur de AGOT qui travaille en tant que concepteur de contenu sur CK2 pour l'été), cela devrait faciliter le travail sur les chaînes d'événements qui se dérèglent à cause d'éléments extérieurs.

Optimisation
Après avoir couvert les principaux points de nos améliorations du modding, parlons un peu de l'optimisation.

Bien que l’augmentation de la vitesse ne sera pas aussi importante que lors de l'amélioration qui est venue avec le patch 2.6, nous avons passé plusieurs jours à rendre le jeu plus rapide. En partie, nous avons fait cela pour compenser l'ajout du Tibet, mais nous ne nous sommes pas simplement arrêtés lorsque le jeu a été une fois de plus aussi rapide que la 2.7.1.

Globalement, dans mes tests le jeu est environ 8 % plus rapide que lors de la 2.7.1, bien que les progrès exacts varient d'ordinateur à ordinateur.

Voici une liste de différents procédés que nous avons fait pour parvenir à ce résultat :
  • Portage de l'optimisation de la GUI d'HoI4 mentionné six mois plus tôt.
  • Un certain nombre d'autres optimisations de la GUI, particulièrement remarquables dans la vitesse de l'outliner.
  • Déplacement de plusieurs éléments de l'évaluation en série à l'évaluation parallèle.
  • Éviter certaines mises-à-jours inutiles des modificateurs des provinces et des personnages. Par exemple, acquérir un artefact sans effet ne causera plus désormais l'actualisation des modificateurs du personnage.
  • Rendre les vérifications des événements des courtiers moins fréquentes (Tout en gardant la même chance globalement de les obtenir).
  • Élimination de plusieurs variables inutilisées qui étaient conservées inutilement.
  • Faire vérifier à l'IA un large nombre de décisions moins souvent quand elle a peu de chance des les obtenir. Par exemple, si elle 1 % de chance d’obtenir une décision chaque mois, elle aura désormais de façon général, 10 % de chance de l'obtenir chaque année à la place.
  • Davantage de réduction du nombre inutile de personnages générés. Par exemple, lorsque l'IA veut se débarrasser d'une baronnie, elle cherchera désormais quelqu'un d'approprié à qui la remettre, et seulement si elle échoue à le trouver générera-t-elle un personnage aléatoire.
  • Des changements variés de la structure du code pour le rendre plus performant.
Dans l'ensemble, cela devrait conduire à une petite, mais notable, amélioration de la vitesse de jeu.

Résumé
Le modding et la vitesse de jeu nous sont très chers au sein de l'équipe de CK2, et ainsi il s'agit d'éléments sur lesquels nous avons passé du temps à améliorer pour la 2.8.

Maintenant, comme promit, voici le changelog pour la 2.8. Notez que certaines entrées, qui concernent des fonctionnalités qui n'ont pas encore été révélées, ont été retirées de la liste. Cette liste n'est pas finale ; davantage sera certainement ajouté avant la sortie de la 2.8.

Code:
- Split the defines CONTESTED_TITLE_OCCUPIED_WARSCORE_BONUS and CONTESTED_TITLE_OCCUPIED_WARSCORE_BONUS_INDEP into attacker and defender version
- Split the 'ticking_war_score_multiplier' in Casus Belli scripts into 'att_ticking_war_score_multiplier' and 'def_ticking_war_score_multiplier'
- Added a new define for the effect of Fort Level on defender morale in sieges: FORT_LEVEL_MORALE_LOSS_REDUCTION_MULT
- Fixed a number of scopes not getting localised as effects, only as triggers
- error.log will now usually tell you if you've saved a map file in the wrong format
- The game will now crash slightly earlier if the province map is the wrong size (not a multiple of 64), making the issue easier to identify
- Cultures can now have "dynasty_name_first = yes" which puts the dynasty name before the personal name
- Added a "holding_types" folder in common. This can be used to define additional triggers for building each holding type
- The scaled_wealth trigger now supports "min" and "max" just like the scaled_wealth effect
- Fixed "effect" in history not being seeded, meaning that all effects with a random component would always produce the exact same result. Now the result will be properly randomized
- Build cost and build time modifiers now apply to forts, trade posts, and hospitals too. Note that there are still no type-specific modifiers for these three holdings
- on_heresy_takeover no longer creates a dummy character for the religion scope, but instead uses an actual religion scope
- "Religion" in loc while already in a religion will just return the same religion, to ensure that any loc written based on some on-actions using characters as makeshift religion scopes continue to work. The same has been done for "Culture" in culture scopes
- Most effects and triggers that take a number can now take a variable name instead, and will grab the variable from the current scope. E.G., "wealth = test_variable"
- gain_effect now fires in all cases (except history and death) for job titles and minor titles, including when added through script
- lose_effect or retire_effect now fires in all cases (except history and death) for job titles and minor titles. Being given a new job title will fire retire_effect on the old title, and gain_effect on the new title
- Fixed resigning as a commander firing lose_effect rather than retire_effect
- Added death_effect for job titles and minor titles, which fires when a character dies while holding the job/minor title
- Made the following console commands that before were only available to devs and beta testers available to everyone: guibounds, noai, join_society, leave_society, society_rank_up/down, society_currency, set_society_grandmaster, get_all_artifacts, activate_artifacts
- Added the console command "province_religion" or ("prov_rel") to change the religion of a province. Syntax is: "province_religion <province> <religion>"
- Targeted decisions now support having a 3rd party character or artifact
- Now possible to store variables in the same manner as event targets; any variable starting with "local_" will work this way, meaning it'll persist as long as the event chain does, but not be accessible outside it
- Uploading mods to Steam is no longer limited to 50MB
- Added the following targeted decision filters: court_including_me, home_court_including_me, dynasty_including_me, all_including_me, society_including_me, realm_including_me, sub_realm_including_me
- The regular versions of the above now consistently exclude the character themselves; in some cases before this restriction only applied if the AI was taking the decision
- Added max_defender_occupation_score and max_attacker_occupation_score modifiers for casus belli types
- Added documentation for the "aggression" parameter for governments
- Added a become_secret_heretic effect
- Added TRADE_ROUTE_SIEGE_MULTIPLIER and TRADE_ROUTE_OCCUPATION_MULTIPLIER defines
- Made the tributary system moddable and modular. You can now add new tributary types defining:
    - when and if the tributary relation breaks
    - what CBs the tributaries can use against their suzerain
    - The allowed_to_target_suzerains CB parameter no longer has any effect, as the above replaces it
    - if tributaries can unite together against their suzerain
    - if tributaries can fight against each other
    - if the suzerain can call their tributaries to arms, and if the tributaries are forced to join
    - if the tributaries can call their suzerain to their defense, and if the suzerain is forced to join
    - how much of what is paid by the tributary to the suzerain
    - What icon to use for the diplomatic relation
    - What modifiers to give the tributary
- You can now use the is_tributary trigger to check for a specific type, and a specific suzerain
- You can now use custom loc in the is_tributary trigger
- The set_tribute_suzerain now takes a "type" parameter, specifying the type. If none is specified, "default" is used
- Added set_trade_route_base_value and set_trade_route_value_multiplier effects
- Provinces with several trade routes will now show the presence and effect of all of them in their tooltip
- Effect and trigger scope changes now have an optional "show_scope_change" parameter. If set to "no", the scope change won't be shown in the tooltip. It'll be shown as just "effect description" rather than "scope change: effect description". This functionality isn't supported by any/random scopes.
- Added hostages_block_cb parameter for CBs
- Variables that haven't been set yet now work in localisation; they'll show "0" rather than simply being blank. "GetName" works as well. So [global_test.GetName] will return 0 for GetValue, and the "global_test" localisation for GetName
- Fixed the is_interested_in_society trigger not localising properly if negated, and not ending with a linebreak
- Added interested_in_society_of_character trigger
- Fixed empty "OR" triggers in some cases crashing the game on launch
- show_as_title = yes for minor titles now works even if the character has no titles
- Fixed a crash that could happen when a selectable object overlapped with an impassable province
- Fixed setting someone's employer on the same date that employer becomes landed not working properly
- Fixed capital changes in some cases failing if the county holder became holder on the same day as the capital change
- Added as_if_allied_to parameter for gain_settlements_under_title, vassalize_or_take_under_title, subjugate_or_take_under_title, and vassalize_or_take_under_title_destroy_duchies. This ensures that land occupied by people in that character's war against the title's holder can be taken
- Castes can now be enabled for individual religions rather than being hardcoded to the Indian group. This is done using the "castes" parameter
- Removed various hardcoding associated with the Hindu religion. This is now connected to the "caste_opinions" parameter instead
- The subjugation opinion is no longer applied when using vassalize_or_take_under_title, just subjugate_or_take_under_title
- Added event pretrigger for Game Book
- Decisions can now have a "_desc_extra" localisation key defined. This will be shown after the Requirements section in its tooltip
- Added "conditional_tooltip"; defines when a given piece of trigger script should be displayed. Its contents are only evaluated if it is displayed
- Added government parameters gets_religion_opinion_penalties, gives_religion_opinion_penalties, and vassal_government_opinion_penalties. See _governments.info for documentation
- Added title parameters can_be_claimed and can_be_usurped. See 00_landed_titles.info for documentation
- You can now use "extended" (bracket-based) localization in Artifact scopes:
    - [GetName] will display the name
    - [Owner] will rescope to the current owner of the artifact
    - [OriginalOwner] will rescope to the original owner of the artifact
- There is now an AI exclusion pretrigger in decision "ai = no" that can be used to avoid decisions being considered by the AI at all
- Removed the "coalition_threat" CB parameter as it had nothing to do with coalitions
- Fixed rulers in some cases being considered to have no primary holding on the day of their death when going backwards in history
- Added console commands "print_global_flags" (aka "pgf") and "print_global_variables" (aka "print_global_vars" and "pgv"). They print whatever they're named after
- "character_info" aliased to "debug_mode" since it is used by more than just character to display debug info
- Added "attrition" character modifier. This will reduce/increase the attrition suffered by the army they command. It is capped at -99%
- Added "army_reinforce_rate" character modifier. This will make the army the character commands reinforce faster. Affects retinues and horde units as well, not just levies. Does not affect the reinforcement of the settlement itself. Cannot go below 0
- Added "days_of_supply" character modifier. This modifies the number of days of supply of the army the character commands by an absolute number of days. Days of supply cannot go below 1
- Added command modifiers phase_skirmish_attack, phase_pursue_attack, phase_melee_attack, phase_skirmish_defense, phase_pursue_defense, and phase_melee_defense
- Added scopes any_neighbor_independent_ruler and random_neighbor_independent_ruler. A "neighbor independent ruler" is a ruler that neighbors the realm you're in (E.G., the HRE if you're a count in the HRE)
- Added "demesne_size_compared_to_limit" trigger. For example, "demesne_size_compared_to_limit < 0.5" will check if someone is below 50% of their demesne limit
- Added "multiplicative_trade_post_income_modifier" holding modifier
- Added "can_create_empires" government parameter (can_create_kingdoms already exists)
- Added "extra_ai_eval_troops" title parameter. See 00_landed_titles.info for documentation
- Added "relative_realm_size" trigger. For example, relative_realm_size = { who = liege size > 0.2 } checks that your realm size is at least 20% of your liege's
- Strings that are too long (above 1023 characters) will no longer crash the game, though they should still be avoided as they simply don't work beyond 1023 characters. This should also solve crashes involving mismatched quote signs
- Strings that are too long now get logged in error.log
- The game will no longer crash if more than 32767 flags (E.G., set_character_flag) are used. New limit is 2^32, which you will run out of memory long before reaching
- Using export_to_variable on a dead character will no longer crash the game
- has_coa_on_barony_only can now be set to yes/no on individual religions rather than just groups. This will override whatever has been set for the group
- The "give_title" console command now gives more feedback if something is wrong with the parameters
- Absolutely all tooltips now support custom loc. Generally, "Root" will be the player
- Most text directly related to religion (E.G., religion name, description, holy war name) now provide the religion itself for custom loc purposes
- Added a "RelHead" promotion for religion loc, meaning you can now for example name a religion "Cult of [RelHead.GetFirstName]"
- Added optional generate_tooltip parameter for hidden effects. If set to "no", the game won't generate the tooltip at all. Note that if event targets are set in the hidden effect, this will break them in tooltips. It may also break randomization, so only ever use it if you have a really compelling reason to do so
- Added 'add_modifier' and 'remove_modifier' console commands (for Character Modifiers.)
- Added 'decision' console command, which ignores the trigger conditions
- Stewardship no longer applies a debuff when below 5; 0 is its baseline now like all the other stats
- Added 'realm_levies_plus_allies' as an exportable value for the 'export_to_variable' effect.
- Added a Define for Looter army maintenance cost (LOOTER_ARMY_MAINT_MULT)
- random_list chances below 1% but above 0% will now use 2 decimals rather than 0
- The game will now log invalid tributary relationships in history (E.G., someone being a tributary of a title with no holder)
- Fixed looting for raiding adventurers not of a religion/culture/government that allows raiding not working
- If the flag "always_show_in_marriage_selection" is set on a character, they will bypass most conditions to be shown in the marriage selection view. Note that this does *not* allow otherwise illegal marriages, just ensures they show up in the listing
- Fixed observing unplayable characters instantly booting you back to regular observe mode
- Fixed the "completely_controls" trigger not considering empty non-wasteland provinces
- Fixed scoping to event targets in effects not being properly localised, thus showing just a colon with no name before it
- Added "ai_check_interval" parameter for decisions. This determines how rarely the AI checks a given decision, and can be useful for performance-heavy decisions that don't need to be checked often. See 00_decisions.info for documentation
- Added a "shares_realm_border_with" trigger. Checks if any province in your realm (everything under your titles) borders any province in their realm
- Added COALITION_THREAT_MAX_DISTANCE define. Independent AIs will consider independent rulers within this range to be threats if they're strong enough (COALITION_SCARY_TROOP_STRENGTH_THREAT_RATIO)
- "Added COURTIER_EVENT_PROCESS_OFFSET define, which determines how often courtiers check MTTH events. Set to 50, as compared to 20 for rulers". This changelog entry from 2.7 now actually has an effect
- Added num_of_society_members trigger. Scope must be a character or society. Returns true if the society has at least this many members. Also supports <, <=, ==, and >=
- A lot of error messages that previously only showed in the internal beta .exe now get logged at all times
- Added "hire_range" parameter for mercenary titles. If set, this overrides the MERCENARY_HIRE_DISTANCE_THRESHOLD define for that specific mercenary
- Added "can_demand_religious_conversion" government parameter. Decides whether people with the government can use the Demand Religious Conversion interaction. Defaults to yes
- create_character now supports "dynasty = actually_culture" which picks a random dynasty name from the culture if there's no unused static dynasty to use, rather than just resorting to a random holding in the world (what "dynasty = culture" does)
- Now possible to scope to timed modifiers in localisation. For example, if ROOT is a character, [Root.modifier_name.GetExpiryDate] would show the expiry date of the modifier. If no such modifier is present, nothing gets shown. Also supports "GetName"
- random_direct_de_jure_vassal_title now exists. Works like any_direct_de_jure_vassal_title, except picks one at random
- Fixed start_date and current_date checking that the days are equal rather than equal or greater
- All numerical triggers now support comparison operators (>=, <=, <, >, and ==) with a few exceptions: tier triggers, among_most_powerful_vassals. These exceptions are due to operation triggers breaking existing behavior (E.G., "tier = duke" isn't equivalent to "tier >= duke", which the comparison operators assume)
- Added "unsafe_destroy_artifact" effect, which can destroy indestructible artifacts
- Artifact localisation (E.G., name and desc) now provides the artifact as From
- The artifact activation and gift triggers now provide the artifact as From
- Added support for "else_if" and "else". If one of these is placed after an "if" or "else_if", it will be executed if the "if"/"else_if" limit returns false. Example:
    if = { limit = { something = yes } do_something = yes }
    else_if = { limit = { something_else = yes } do_something_else = yes }
    else = { do_another_thing = yes }
- Added trigger "artifact_can_be_gifted_to = ROOT", which checks if the artifact currently scoped to can be gifted to the target character
- Now possible to specify "sound = no" for death reasons, which will prevent killing someone with that reason causing a death sound
- Fixed FROMFROM (the holding title) not always being available in the building trigger
- Fixed whatever character is FROM getting included in event option portrait lists if you scope to something that isn't a character
- Improved the error messages for the reload_texture command, and made it more forgiving when it comes to "/" vs. "\\" and ".dds" vs. ".tga". Also fixed it in some cases crashing. Generally, simply copying the path specified in the .gfx file should work
- Added COST_COMBAT_RATING define for specifying the cost of combat rating in the ruler designer
- Added unsafe_impregnate and unsafe_impregnate_cuckoo effects. These can impregnate someone who is already pregnant, while the two old effects are no longer able to do so
- Added a fail_trigger_effect field for events. This effect is triggered if script attempts to trigger an event, but the trigger isn't fulfilled. Useful for handling things like one character in a chain dying for unrelated reasons partway through the chain
- Fixed not all parts of the society rank tooltip having the appropriate scopes set
- spawn_unit can now take "province = closest_to_capital", which will spawn as close to the character's capital as possible
- The "debug_mode" console command (AKA "charinfo") will now also show extra information about titles
J'espère que vous avez apprécié ce que nous avons fait pour les moddeurs dans la 2.8.

Et comme promis, voici cinq entrées du changelog de la 2.8
- L'IA est désormais consciente que si elle est l'attaquant dans une guerre, ça pourrait être une bonne idée d'attaquer le défenseur, même si la cible de la guerre est un territoire entier plutôt qu'un titre spécifique, et même si ce territoire se trouve loin.
- L'icône de lieu saint pour les hérésies est désormais visible dans la vue de propriété si la religion mère n'a pas les mêmes lieux saints (par exemple, les lieux saints Ibadi et Manichéens).
- Correction de l'écran des levées montrant l'icône des archers montés même si vos levées comportaient une autre unité spéciale
- Les armées utilisent désormais le chef de flanc qui a le meilleur modificateur de siège pour déterminer le bonus lors des sièges, et le chef de flanc ayant le même modificateur de mouvement pour déterminer la vitesse de déplacement
- Les aventuriers faisant des raids comprennent qu'une fois qu'ils ont obtenu un territoire, ce serait peut-être une bonne idée que de considérer celui-ci comme la base de leurs opérations, et y renverront leurs armées lorsqu'ils ne seront pas occupés à conquérir ou à piller.

C'est tout pour cette semaine. La semaine prochaine, je laisserai la place à Gustav “Gruffa” Groth, le Responsable Produit de CK2, qui nous en dira plus sur le travail de publication de CK2.


Auteur : Meneth
Traduction : Foeurdr & Spectator_Errans