Skip to content

[MOD] Mod NPC

AbelAbel Member Posts: 785
edited December 2019 in General Modding

TABLE OF CONTENTS


Download
Introduction
Compatibility
Configuration & Installation
Components
Versions
Thanks



Download (click here) [↑]

Introduction [↑]

This mod attempts to fulfill and bring together two of the following longstanding wishes of Baldur's Gate players: to enroll interactive NPCs and to create your own party.

What it does is allow you to modify any recruitable NPC from pregenerated characters (file extension .chr). The scope of the modification is partially customisable. The default configuration modifies everything but what makes each NPC unique, notably: Sex, Race, Portrait, Sounds, Dialogue, Innates, Items.

So, for example, you could turn Jaheira into a Cleric/Ranger with custom ability scores. Or Minsc into a true Berseker.

Compatibility [↑]

The mod only works for BG:EE, BG:SoD and BG2:EE.

Configuration & Installation [↑]

First, download the provided archive and extract its contents to your game folder.
- If you have the Steam version of the game, the relevant folder is: 'C:\Program Files (x86)\Steam\SteamApps\common\Baldur's Gate Enhanced Edition' (BG:EE)
- If you have the Beamdog version of the game, the relevant folder is: 'C:\Program Files (x86)\Baldur's Gate Enhanced Edition\Data\00766' (BG:EE)

The default settings should satisfy most users but you can choose what fields should be copied from the chosen pregenerated character to the jionable NPC. To do that, open the file 'configuration.tph' with a text editor. The file is located in 'abel_modnpc_mod\library' of your game folder.
You'll find instructions inside the file.

Before executing the mod, make sure you have at least one pregenerated character file.
To make one, simply select the 'Pregenerate Character' in the game menu (BG:EE and BG2:EE) and go through all the steps from creating to exporting your character. Sex, Race, Appearance and Name don't matter if you keep the default settings (NPCs will keep their original values).
For BG:SoD, this option doesn't exist (why?) so you need to export a character from a game (in the character record screen, shortcut 'c'). Please note that Level is copied by default!

When all is good, install the mod by double-clicking the 'setup-abel_modnpc_mod.exe' file and just follow the instructions.

Components [↑]

Mod NPC

The main component allows you to modify a given NPC from a chosen .chr file.

You pick a NPC first and then the CHR to modify from. You can remove or overwrite any modification.
Repeat until satisfied and the mod will patch all NPCs to modify.

All modifications are saved which means that if you want to reinstall the mod, you can choose to restore your previous modifications. NPC and CHR resources are kept so you can easily keep track of the changes.

In most cases (non EE NPCs), you need to start a new game to benefit from the changes. That's because NPCs are generated then. There's no way to bypass this unless you create additional copies of the NPCs with the console (I could provide a list of codes if needed).

Remove ability score requirements for NPC items

This second component may be necessary if you want to wear NPC restricted items.
Most of these items have ability score requirements (Strength, etc.). Since by default ability scores are copied from CHR to NPC, it's likely you won't be able to use them after modifying a NPC. This component solves that problem by setting all ability score requirements to 0.

Versions [↑]

v1 – August 30, 2016
Initial release
v1.1 - December, 17, 2019
Updated syntax for dynamic arrays (a WeiDU probably broke them)

Thanks [↑]

Many thanks to @Wisp and his predecessors for the work on WeiDU.
To @argent77 (check out his amazing mods) and his predecessors for the work on Near Infinity.
To @subtledoctor and to my fellow modders for their support.
Post edited by Abel on
JuliusBorisovRavenslightKurona

Comments

  • ThelsThels Member Posts: 1,416
    So, what does this do, exactly? Your explanation ain't exactly clear.

    Does it allow me to make Imoen a Dwarf Fighter/Cleric, and then when I run into Imoen, she's a Dwarf Fighter/Cleric, but still talks like she's Imoen?
    Abel
  • AbelAbel Member Posts: 785
    @Thels, I'm really sorry to hear it isn't clear. Let's try to sum it up.
    But first, to answer your questions: yes, that's basically what it does.

    So:
    1) Create a pregenerated character (.chr extension) or export a character from one of your game, in your case a Dwarf Fighter/Cleric
    2) Run the mod executable
    3) You select a NPC via the menu, in your case Imoen
    4) You select your CHR, the Fighter/Cleric
    5) Imoen becomes a Fighter/Cleric in new games

    By default, Race isn't copied from CHR to NPC, so if you want Imoen to become a Dwarf, you need to modify the settings I provided (abel_modnpc_mod\lib\configuration.tph).

    I try my best to make it easy for the user to understand and use my mods so I hope things seem clearer. I'll rework my original post if it's still obscure.
    Ravenslight
  • ThelsThels Member Posts: 1,416
    Ok, so it doesn't use the .chr file, but imports data from it? What does and doesn't it import?

    - Race?
    - Class?
    - Experience?
    - Level?
    - Alignment?
    - Ability scores?
    - Weapon pips?
    - Thief skill points?
    - Bard/Mage/Shaman/Sorcerer spells known?
    - Bard/Mage/Cleric/Druid/Paladin/Ranger spells prepared?
    - Special abilities other than those derived from class?
    - Equipment?
    - Portrait?
    - Voice set?
    - Colors?
    - Biography?
    - Script?
    - Anything else?
    Ravenslight
  • AbelAbel Member Posts: 785
    @Thels Yes, it copies selected data from the .chr file.
    By default, it copies everything but what makes NPCs unique.
    So it doesn't copy what's related to appearance or personal attributes:
    - Name
    - Sex
    - Race
    - Colors
    - Portrait
    - Sounds
    - Dialogue
    - Items
    Everything else is copied.

    But these are the default settings. You can change them.
    If you want to know the details, you'll find the content of the configuration.tph below. A 0 means the data isn't copied; a 1 that it's copied.
    /* USER CONFIGURATION ---------------------------------------------------------------------------------- Here you can define which fields you want to be copied from character to creature. There are two options: - 0 : do not copy (keep creature values) - 1 : copy (overwrite creature values with character values) You can change the number at the right end of each line. For spells, effects and items, you can't edit each parameter. For those, you either copy everything or nothing. Have fun moddi(fyi)ng! */ //OTHER ARRAYS OUTER_SET copy_spells = 1 OUTER_SET copy_effects = 1 OUTER_SET copy_items = 0 //HEADER OUTER_SET copy_signature = 0 OUTER_SET copy_version = 0 OUTER_SET copy_name = 0 OUTER_SET copy_tooltip = 0 OUTER_SET copy_flags = 0 OUTER_SET copy_xp_value = 0 OUTER_SET copy_xp_power_level = 1 OUTER_SET copy_gold = 0 OUTER_SET copy_status = 0 OUTER_SET copy_current_hp = 1 OUTER_SET copy_maximum_hp = 1 OUTER_SET copy_animation = 0 OUTER_SET copy_metal_color = 0 OUTER_SET copy_minor_color = 0 OUTER_SET copy_major_color = 0 OUTER_SET copy_skin_color = 0 OUTER_SET copy_leather_color = 0 OUTER_SET copy_armor_color = 0 OUTER_SET copy_hair_color = 0 OUTER_SET copy_effect_version = 0 OUTER_SET copy_small_portrait = 0 OUTER_SET copy_large_portrait = 0 OUTER_SET copy_reputation = 0 OUTER_SET copy_hide_in_shadows = 1 OUTER_SET copy_natural_ac = 1 OUTER_SET copy_effective_ac = 1 OUTER_SET copy_crushing_ac_modifier = 1 OUTER_SET copy_missile_ac_modifier = 1 OUTER_SET copy_piercing_ac_modifier = 1 OUTER_SET copy_slashing_ac_modifier = 1 OUTER_SET copy_thac0 = 1 OUTER_SET copy_#_attacks_round = 1 OUTER_SET copy_save_vs_death = 1 OUTER_SET copy_save_vs_wand = 1 OUTER_SET copy_save_vs_polymorph = 1 OUTER_SET copy_save_vs_breath = 1 OUTER_SET copy_save_vs_spell = 1 OUTER_SET copy_fire_resistance = 1 OUTER_SET copy_cold_resistance = 1 OUTER_SET copy_electricity_resistance = 1 OUTER_SET copy_acid_resistance = 1 OUTER_SET copy_magic_resistance = 1 OUTER_SET copy_magic_fire_resistance = 1 OUTER_SET copy_magic_cold_resistance = 1 OUTER_SET copy_slashing_resistance = 1 OUTER_SET copy_crushing_resistance = 1 OUTER_SET copy_piercing_resistance = 1 OUTER_SET copy_missile_resistance = 1 OUTER_SET copy_detect_illusion = 1 OUTER_SET copy_set_traps = 1 OUTER_SET copy_lore = 1 OUTER_SET copy_open_locks = 1 OUTER_SET copy_move_silently = 1 OUTER_SET copy_find_traps = 1 OUTER_SET copy_pick_pockets = 1 OUTER_SET copy_fatigue = 1 OUTER_SET copy_intoxication = 1 OUTER_SET copy_luck = 1 OUTER_SET copy_large_sword_proficiency = 1 OUTER_SET copy_small_sword_proficiency = 1 OUTER_SET copy_bow_proficiency = 1 OUTER_SET copy_spear_proficiency = 1 OUTER_SET copy_blunt_proficiency = 1 OUTER_SET copy_spiked_proficiency = 1 OUTER_SET copy_axe_proficiency = 1 OUTER_SET copy_missile_proficiency = 1 OUTER_SET copy_unknown = 1 OUTER_SET copy_unknown = 1 OUTER_SET copy_unknown = 1 OUTER_SET copy_unknown = 1 OUTER_SET copy_unknown = 1 OUTER_SET copy_unknown = 1 OUTER_SET copy_unknown = 1 OUTER_SET copy_nightmare_mode = 1 OUTER_SET copy_translucency = 1 OUTER_SET copy_reputation_gain_loss_when_killed = 1 OUTER_SET copy_reputation_gain_loss_when_joining_party = 1 OUTER_SET copy_reputation_gain_loss_when_leaving_party = 1 OUTER_SET copy_undead_level = 1 OUTER_SET copy_tracking = 1 OUTER_SET copy_target = 0 OUTER_SET copy_sound_initial_meeting = 0 OUTER_SET copy_sound_morale = 0 OUTER_SET copy_sound_happy = 0 OUTER_SET copy_sound_unhappy_annoyed = 0 OUTER_SET copy_sound_unhappy_serious = 0 OUTER_SET copy_sound_unhappy_breaking_point = 0 OUTER_SET copy_sound_leader = 0 OUTER_SET copy_sound_tired = 0 OUTER_SET copy_sound_bored = 0 OUTER_SET copy_sound_battle_cry1 = 0 OUTER_SET copy_sound_battle_cry2 = 0 OUTER_SET copy_sound_battle_cry3 = 0 OUTER_SET copy_sound_battle_cry4 = 0 OUTER_SET copy_sound_battle_cry5 = 0 OUTER_SET copy_sound_attack1 = 0 OUTER_SET copy_sound_attack2 = 0 OUTER_SET copy_sound_attack3 = 0 OUTER_SET copy_sound_attack4 = 0 OUTER_SET copy_sound_damage = 0 OUTER_SET copy_sound_dying = 0 OUTER_SET copy_sound_hurt = 0 OUTER_SET copy_sound_area_forest = 0 OUTER_SET copy_sound_area_city = 0 OUTER_SET copy_sound_area_dungeon = 0 OUTER_SET copy_sound_area_day = 0 OUTER_SET copy_sound_area_night = 0 OUTER_SET copy_sound_select_common1 = 0 OUTER_SET copy_sound_select_common2 = 0 OUTER_SET copy_sound_select_common3 = 0 OUTER_SET copy_sound_select_common4 = 0 OUTER_SET copy_sound_select_common5 = 0 OUTER_SET copy_sound_select_common6 = 0 OUTER_SET copy_sound_select_action1 = 0 OUTER_SET copy_sound_select_action2 = 0 OUTER_SET copy_sound_select_action3 = 0 OUTER_SET copy_sound_select_action4 = 0 OUTER_SET copy_sound_select_action5 = 0 OUTER_SET copy_sound_select_action6 = 0 OUTER_SET copy_sound_select_action7 = 0 OUTER_SET copy_sound_interaction1 = 0 OUTER_SET copy_sound_interaction2 = 0 OUTER_SET copy_sound_interaction3 = 0 OUTER_SET copy_sound_interaction4 = 0 OUTER_SET copy_sound_interaction5 = 0 OUTER_SET copy_sound_insult1 = 0 OUTER_SET copy_sound_insult2 = 0 OUTER_SET copy_sound_insult3 = 0 OUTER_SET copy_sound_compliment1 = 0 OUTER_SET copy_sound_compliment2 = 0 OUTER_SET copy_sound_compliment3 = 0 OUTER_SET copy_sound_special1 = 0 OUTER_SET copy_sound_special2 = 0 OUTER_SET copy_sound_special3 = 0 OUTER_SET copy_sound_react_to_die_general = 0 OUTER_SET copy_sound_react_to_die_specific = 0 OUTER_SET copy_sound_miscellaneous = 0 OUTER_SET copy_sound_response_to_compliment2 = 0 OUTER_SET copy_sound_response_to_compliment3 = 0 OUTER_SET copy_sound_response_to_insult1 = 0 OUTER_SET copy_sound_response_to_insult2 = 0 OUTER_SET copy_sound_response_to_insult3 = 0 OUTER_SET copy_sound_dialog_hostile = 0 OUTER_SET copy_sound_dialog_default = 0 OUTER_SET copy_sound_select_rare1 = 0 OUTER_SET copy_sound_select_rare2 = 0 OUTER_SET copy_sound_critical_hit = 0 OUTER_SET copy_sound_critical_miss = 0 OUTER_SET copy_sound_target_immune = 0 OUTER_SET copy_sound_inventory_full = 0 OUTER_SET copy_sound_picked_pocket = 0 OUTER_SET copy_sound_existance1 = 0 OUTER_SET copy_sound_existance2 = 0 OUTER_SET copy_sound_existance3 = 0 OUTER_SET copy_sound_existance4 = 0 OUTER_SET copy_sound_existance5 = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_sound_unknown = 0 OUTER_SET copy_level_first_class = 1 OUTER_SET copy_level_second_class = 1 OUTER_SET copy_level_third_class = 1 OUTER_SET copy_sex = 0 OUTER_SET copy_strength = 1 OUTER_SET copy_strength_bonus = 1 OUTER_SET copy_intelligence = 1 OUTER_SET copy_wisdom = 1 OUTER_SET copy_dexterity = 1 OUTER_SET copy_constitution = 1 OUTER_SET copy_charisma = 1 OUTER_SET copy_morale = 1 OUTER_SET copy_morale_break = 1 OUTER_SET copy_racial_enemy = 1 OUTER_SET copy_morale_recovery = 1 OUTER_SET copy_kit = 1 OUTER_SET copy_override_script = 0 OUTER_SET copy_class_script = 0 OUTER_SET copy_race_script = 0 OUTER_SET copy_general_script = 0 OUTER_SET copy_default_script = 0 OUTER_SET copy_allegiance = 0 OUTER_SET copy_general = 0 OUTER_SET copy_race = 0 OUTER_SET copy_class = 1 OUTER_SET copy_specifics = 0 OUTER_SET copy_gender = 0 OUTER_SET copy_object_spec_1 = 0 OUTER_SET copy_object_spec_2 = 0 OUTER_SET copy_object_spec_3 = 0 OUTER_SET copy_object_spec_4 = 0 OUTER_SET copy_object_spec_5 = 0 OUTER_SET copy_alignment = 1 OUTER_SET copy_global_identifier = 0 OUTER_SET copy_local_identifier = 0 OUTER_SET copy_script_name = 0 //DO NOT MODIFY THOSE/////////////////////////////////////// //OUTER_SET copy_known_spells_offset = 1 //OUTER_SET copy_#_known_spells = 1 //OUTER_SET copy_memorization_info_offset = 1 //OUTER_SET copy_#_memorization_info = 1 //OUTER_SET copy_memorized_spells_offset = 1 //OUTER_SET copy_#_memorized_spells = 1 //OUTER_SET copy_item_slots_offset = 0 //OUTER_SET copy_items_offset = 0 //OUTER_SET copy_#_items = 0 //OUTER_SET copy_effects_offset = 1 //OUTER_SET copy_#_effects = 1 //DO NOT MODIFY THOSE/////////////////////////////////////// OUTER_SET copy_dialogue = 0
    Ravenslight
  • ThelsThels Member Posts: 1,416
    Ok, thanks, that makes sense!
    Abel
  • AbelAbel Member Posts: 785
    @Thels I'm glad, thanks for your input :) !
  • RavenslightRavenslight Member Posts: 1,609
    This sounds like a neat idea. I can see trying it out in the future. For instance, it sounds like it would save me from trying to use EE Keeper to change Rasaad’s class. Thank you for posting. :)
    Abel
  • The user and all related content has been deleted.
    Abel
  • RavenslightRavenslight Member Posts: 1,609

    Out of curiosity @Ravenslight what class do you change Rasaad to?

    This is a very interesting approach to the "Level One NPCs Replacement" genre of mods. How did you ever think to use .CHR files?

    Cleric

    Of the base game classes, it’s the only one that sort of fits for me. I really dislike the monk class. But I’ve never really gotten it exactly right. Seems I end up with left over bits from the monk. Still, it works better for me then leaving him a monk.

    This mod seems like a great solution. :)
    Abel
  • AbelAbel Member Posts: 785
    @Ravenslight Yes, it does what we would before do with EEKeeper. You can still use it to customize your CHR and, for example, give kits to multi-classed characters.
    The benefit of this mod is that you can use your collection of CHR to modify any NPC in a go.

    @subtledoctor I use .chr files a lot for my games. CHR are basically creature, or creature templates if we want so the idea to do CHR => NPC came pretty naturally.
    Ravenslight
  • AbelAbel Member Posts: 785
    I uploaded a new version with revised syntax for dynamic array constructs. The mod wouldn't work for recent WeiDU versions otherwise. Hopefully, the syntax won't change again because I spent several hours debugging the mod from the beginning to try and find out what was was wrong when it used to work perfectly.
    Ravenslight
  • GuboGubo Member Posts: 75
    Anyone know anywhere npc chr files I can download? Don't have any saves with the characters I want.
    I could look up and make them in EEKeeper but thought I would ask first.
  • AbelAbel Member Posts: 785
    Hey, @Gubo! Sorry for the (very) late answer...
    If you don't have any existing character file, I suggest generating a new one and then possibly edit the character as you see fit before exporting it. It should be a straightforward and quick enough process. Good luck!
  • beeroismbeeroism Member Posts: 1
    Hey, not sure if anyone is still watching this thread, but quick question:

    Starting a BG2 multiplayer game with some friends - we'd like to mod the story npcs so when we meet them, each of us can take control of one and not miss out on the plot, as opposed to importing our own characters.

    Is it possible to use this mod in online multiplayer, and are there any special considerations to get it working?
  • EndarireEndarire Member Posts: 1,512
    @Abel
    I too am curious about your progress on this mod.

    Thankee!
  • AbelAbel Member Posts: 785
    @beeroism @Endarire
    Hello, friends!
    Sorry for the late answer but I rarely ever come on the forums anymore.
    Have you tried the mod? It should still work as it used to.
    I hope it does because it's unlikely I will be updating it.
  • EinzenauerEinzenauer Member Posts: 3
    Hello, I tried to install the mod and followed all steps.
    Premade a kensai/conjurer.
    Run the mod and chose an NPC to assign it .
    Not sure what went wrong.
    Could anyone help me in there?
    Thanks in advance for any possible hep.



    Choose one of the following actions:
    - Select a NPC to modify (type number and press Enter)
    - Do nothing and continue (type [24] and press Enter)
    - See and manage current modifications (type [25] and press Enter)
    24
    Copying and patching 1 file ...
    Copying and patching 1 file ...
    ERROR: cannot convert target or %target% to an integer
    ERROR: [SAREVOK.CRE] -> [override/SAREVOK.CRE] Patching Failed (COPY) (Not_found)
    Stopping installation because of error.
    Stopping installation because of error.
    Stopping installation because of error.
    Stopping installation because of error.
    Stopping installation because of error.
    Stopping installation because of error.

    ERROR Installing [Mod NPC], rolling back to previous state
    Will uninstall 2 files for [ABEL_MODNPC_MOD/ABEL_MODNPC_MOD.TP2] component 1.
    Uninstalled 2 files for [ABEL_MODNPC_MOD/ABEL_MODNPC_MOD.TP2] component 1.
    ERROR: Not_found
    Please make a backup of the file: SETUP-ABEL_MODNPC_MOD.DEBUG and look for support at: Abel, http://forum.baldursgate.com/messages/add/Abel




Sign In or Register to comment.