Skip to content

baldur.ini editing?

JidokwonJidokwon Member Posts: 395
I haven't had any luck finding a full list for the baldur.ini files for the EE versions and what they do. Can anyone point me in the right direction? Thank you.

Comments

  • hoffmonster67hoffmonster67 Member Posts: 3
    same here, I can't find any
  • Sam_Sam_ Member Posts: 172
    I asked that here back in 2012. Got no response.
  • terzaerianterzaerian Member Posts: 232
    I dont think the EE uses a physical INI file - it likely makes a virtual one which it passes to the engine at runtime. Some documentation on how it instead stores the data would be nice.
  • JidokwonJidokwon Member Posts: 395
    Shameless bump for something that people have been asking for for years now. Any devs want to provide some insight here, please?
  • JidokwonJidokwon Member Posts: 395
    CrevsDaak pointed me to this thread, which looks to have the complete list for an older version of BG2. I've copied the list below and will play around with some of these to if they work in the EE versions.

    http://www.shsforums.net/topic/41577-baldurini-keys/#entry459671


    [Alias]
    HD0:


    [Program Options]
    Disable Vertex Padding
    Double Byte Character Support
    First Run
    Install Type
    Drop Capitals
    3D Acceleration
    16Bit Textures
    Full Screen
    Display Frequency
    Resolution
    Screen Position X
    Screen Position Y
    SoftBlt
    SoftBltFast
    SoftMirrorBlt
    SoftSrcKeyBlt
    SoftSrcKeyBltFast
    Use Mirror FX
    Strref On
    Logging On
    Force Local IP
    NT Smooth Sound
    Disable Brighten
    Force 50 Percent Transparent
    Tooltips
    Translucent Shadows
    Gamma Correction
    Brightness Correction
    Backwards Compatible 3d
    String Buffer
    Sprite Mirror
    Volume Movie
    Volume Music
    Volume Voices
    Volume Ambients
    Volume SFX
    First Frame Outline
    Debug Mode
    Disable Movies
    Over Confirm Everything
    Alternate SR Curve
    SR Curve Radius
    BitsPerPixel
    Path Search Nodes
    Maximum Frame Rate
    Display Subtitles
    BitsPerPixel
    Disable Sound
    Use GLSetup
    GLSetup Driver
    Font Name
    F NORMAL [=NORMAL]
    F REALMS [=REALMS]
    F STONEBIG [=STONEBIG]
    F STONESML [=STONESML]
    F TOOLFONT [=TOOLFONT]
    F FLOATTXT [=FLOATTXT]


    [Game Options]
    Current Loading Hint
    Tiles Precache Percent
    Duplicate Floating Text
    Area Effects Density
    Area Effects Refresh Probability
    Low End Machine
    Low End Machine 2
    Extra Combat Info
    Critical Hit Screen Shake
    Disable Casting Glows
    Low Mem Sounds 1
    Low Mem Sounds 2
    Disable VEFVidCells
    Disable Display Text
    Mid Level Brighten
    High Level Brighten
    Enhanced Path Search
    Enhanced Path Finding
    Pausing Map
    Extra Feedback
    Filter Games
    All Learn Spell Info
    Use 3d Animations
    Heal Party on Rest
    Environmental Audio
    Cheats
    Memory Access
    Memory Level
    Footsteps
    Mouse Scroll Speed
    GUI Feedback Level
    Locator Feedback Level
    Bored Timeout
    Always Dither
    Subtitles
    Keyboard Scroll Speed
    Command Sounds Frequency
    Selection Sounds Frequency
    Effect Text Level
    Infravision
    Weather
    Tutorial State
    Attack Sounds
    Auto Pause State
    Auto Pause Center
    Difficulty Level
    Quick Item Mapping
    Terrain Hugging
    HP Over Head
    Force Dialog Pause
    Hotkeys On Tooltips
    Disable Statics During Combat
    Disable Foot Steps During Combat
    Disable Placed Sounds During Combat
    Super Atomic Speed Fighting Action
    Automated Speed Adjustment
    Automated Translucent Shadows
    Automated Very Low Performance
    Automated Low Performance
    Automated Disable Brightest
    Automated Limit Transparency
    Automated Diable Casting Glows [Typo?]
    Automated Disable VEFVidCells
    Automated Mid Level Brighten
    Automated High Level Brighten
    Automated Foot Steps
    Automated Attack Sounds
    Automated 3D Animations
    Automated Disable VVC Sounds
    Automated Faster Blur
    Fully Disable Non Visible During Combat
    Disable VVC Sounds
    Faster Blur
    Filter Games
    One Time Popup
    Never Show Nuisance SOA
    Never Show Nuisance
    WILD SURGE KEYS


    [Config]
    CacheSize [=300]


    [Movies]
    BILOGO
    INFELOGO
    INT16BIT
    INTRO
    OUTRO
    MELISSAN
    ENDCRDIT
    CREDITS


    [GameSpy]
    Enabled
    Port
    Location [=US]


    [Multiplayer]
    Port
    Client Timeout
    Pausing Dialog
    Import Character
    Serial Port
    Serial Baud
    NoPlayerTimeout
    Default Permissions
    AsyncEnumeration [=0]
    Last Protocol Used
    Modem Selected
    Player Name
    Session Password
    Session Name
    TCP/IP Address
    Phone Number


    [RogerWilco]
    Enabled


    If anyone with more (ie: *any*) experience is able to do the same for the EE versions of Baldur's Gate, Baldur's Gate II, and Icewind Dale, I'd *really* appreciate it. I don't mind playing around with trial and error to figure out what some things do, but I really have no idea what I'm doing when I'm trying to get this information from the games myself. It's a real possibility that I'll download tools that I have no idea how to use and end up, not only breaking my games, but breaking my computer. Thank you again for any consideration and assistance.

  • Sam_Sam_ Member Posts: 172
    edited April 2015

    I dont think the EE uses a physical INI file - it likely makes a virtual one which it passes to the engine at runtime. Some documentation on how it instead stores the data would be nice.

    Seems to be loaded into a form of SQL database and then manipulated as such in memory before eventually being written back to disk.

    Poking around in the executable (Icewind Dale v1.3.2058) seems to indicate that some Section>Key sets are loaded in a hard-coded way:

    int __thiscall CBaldurChitin::LoadOptions(int ecx0)
    {
    CScreenWorld *v1; // eax@21
    int result; // eax@25
    signed int v3; // [sp+0h] [bp-18h]@23
    int this; // [sp+Ch] [bp-Ch]@1
    int nTemp; // [sp+10h] [bp-8h]@4
    int nTempa; // [sp+10h] [bp-8h]@7
    CGameOptions *pOptions; // [sp+14h] [bp-4h]@1

    this = ecx0;
    pOptions = CInfGame::GetOptions(*(CInfGame **)(ecx0 + 3024));
    pOptions->m_toolTips = BGGetPrivateProfileInt("Program Options", "Tooltips", 60);
    pOptions->m_graphicsTranslucentShadows = BGGetPrivateProfileInt("Program Options", "Translucent Shadows", 1);
    CVidCell::SetTranslucentShadows(pOptions->m_graphicsTranslucentShadows);
    if ( pOptions->m_toolTips > 0x63 && pOptions->m_toolTips != 2147483647 )
    pOptions->m_toolTips = 60;
    pOptions->m_graphicsFontZoom = BGGetPrivateProfileInt("Fonts", "Zoom", 130);
    nTemp = BGGetPrivateProfileInt("Program Options", "Brightness Correction", 0);
    if ( nTemp < 0 || nTemp > 40 )
    nTemp = 0;
    pOptions->m_graphicsBrightness = nTemp;
    CBaldurMessage::SetInReputationChange(*(CVidMode **)(this + 376), nTemp);
    nTempa = BGGetPrivateProfileInt("Program Options", "String Buffer", 256);
    if ( nTempa < 1 || nTempa > 32767 )
    LOWORD(nTempa) = 256;
    CUIControlTextDisplay::DEFAULT_MAX_ENTRIES = nTempa;
    CGameAnimationType::MIRROR_BAM = BGGetPrivateProfileInt(
    "Program Options",
    "Sprite Mirror",
    CGameAnimationType::MIRROR_BAM);
    pOptions->m_soundMovieVolume = BGGetPrivateProfileInt("Program Options", "Volume Movie", 90);
    if ( pOptions->m_soundMovieVolume > 0x64 )
    pOptions->m_soundMovieVolume = 100;
    pOptions->m_soundMusicVolume = BGGetPrivateProfileInt("Program Options", "Volume Music", 40);
    if ( pOptions->m_soundMusicVolume > 0x64 )
    pOptions->m_soundMusicVolume = 100;
    pOptions->m_soundDialogVolume = BGGetPrivateProfileInt("Program Options", "Volume Voices", 100);
    if ( pOptions->m_soundDialogVolume > 0x64 )
    pOptions->m_soundDialogVolume = 100;
    pOptions->m_nVolumeAmbients = BGGetPrivateProfileInt("Program Options", "Volume Ambients", 40);
    if ( pOptions->m_nVolumeAmbients > 0x64 )
    pOptions->m_nVolumeAmbients = 100;
    pOptions->m_soundFXVolume = BGGetPrivateProfileInt("Program Options", "Volume SFX", 80);
    if ( pOptions->m_soundFXVolume > 0x64 )
    pOptions->m_soundFXVolume = 100;
    CInfGame::ApplyVolumeSliders(*(CInfGame **)(this + 3024));
    *(_DWORD *)(this + 292) = BGGetPrivateProfileInt("Program Options", "First Frame Outline", 0);
    pOptions->m_bDebugMode = BGGetPrivateProfileInt("Program Options", "Debug Mode", 0);
    if ( pOptions->m_bDebugMode )
    {
    v1 = CBaldurChitin::GetEngineWorld((CBaldurChitin *)this);
    CScreenWorld::EnableCheatKeys(v1, 1);
    }
    *(_DWORD *)(this + 4164) = BGGetPrivateProfileInt("Program Options", "Disable Movies", 0);
    *(_BYTE *)(this + 308) = BGGetPrivateProfileInt("Program Options", "Alternate SR Curve", 0);
    *(_DWORD *)(this + 312) = BGGetPrivateProfileInt("Program Options", "SR Curve Radius", 768);
    if ( *(_DWORD *)(this + 312) <= 0x800u )
    v3 = *(_DWORD *)(this + 312);
    else
    v3 = 2048;
    result = this;
    *(_DWORD *)(this + 312) = v3;
    return result;
    }


    void __thiscall CInfGame::LoadOptions(int ecx0)
    {
    int v1; // eax@55
    int v2; // eax@55
    int v3; // eax@55
    CBaldurMessage *v4; // eax@58
    int v5; // eax@59
    int v6; // eax@59
    CBaldurMessage *v7; // eax@59
    int this; // [sp+4h] [bp-4h]@1

    this = ecx0;
    *(_BYTE *)(ecx0 + 18116) = BGGetPrivateProfileInt("Game Options", "Tiles Precache Percent", 100);
    if ( (signed int)*(_BYTE *)(this + 18116) > 100 )
    *(_BYTE *)(this + 18116) = 100;
    *(_DWORD *)(this + 18112) = BGGetPrivateProfileInt("Game Options", "Duplicate Floating Text", 1);
    *(_WORD *)(this + 18108) = BGGetPrivateProfileInt("Game Options", "Area Effects Density", 100);
    if ( (signed int)*(_WORD *)(this + 18108) < 25 || (signed int)*(_WORD *)(this + 18108) > 250 )
    *(_WORD *)(this + 18108) = 100;
    *(_WORD *)(this + 18164) = BGGetPrivateProfileInt("Game Options", "Area Effects Refresh Probability", 100);
    if ( (signed int)*(_WORD *)(this + 18164) < 25 || (signed int)*(_WORD *)(this + 18164) > 250 )
    *(_WORD *)(this + 18164) = 100;
    *(_DWORD *)(this + 18100) = BGGetPrivateProfileInt("Game Options", "Low End Machine 2", 0);
    *(_DWORD *)(this + 18104) = BGGetPrivateProfileInt("Game Options", "Extra Combat Info", 0);
    *(_DWORD *)(this + 18092) = BGGetPrivateProfileInt("Game Options", "Critical Hit Screen Shake", 1);
    *(_DWORD *)(this + 18136) = BGGetPrivateProfileInt("Game Options", "Disable Casting Glows", 0);
    *(_DWORD *)(this + 18140) = BGGetPrivateProfileInt("Game Options", "Low Mem Sounds 1", 0);
    *(_DWORD *)(this + 18144) = BGGetPrivateProfileInt("Game Options", "Low Mem Sounds 2", 0);
    *(_DWORD *)(this + 18148) = BGGetPrivateProfileInt("Game Options", "Disable VEFVidCells", 0);
    *(_DWORD *)(this + 18152) = BGGetPrivateProfileInt("Game Options", "Disable Display Text", 0);
    *(_DWORD *)(this + 18156) = BGGetPrivateProfileInt("Game Options", "Mid Level Brighten", 1);
    *(_DWORD *)(this + 18160) = BGGetPrivateProfileInt("Game Options", "High Level Brighten", 1);
    *(_DWORD *)(this + 18168) = BGGetPrivateProfileInt("Game Options", "Enhanced Path Search", 0);
    *(_DWORD *)(this + 18168) |= BGGetPrivateProfileInt("Game Options", "Enhanced Path Finding", 0);
    *(_DWORD *)(this + 18172) = BGGetPrivateProfileInt("Game Options", "Pausing Map", 0);
    *(_DWORD *)(this + 18176) = BGGetPrivateProfileInt("Game Options", "Extra Feedback", 0);
    *(_DWORD *)(this + 18180) = BGGetPrivateProfileInt("Game Options", "Filter Games", 1);
    *(_DWORD *)(this + 18184) = BGGetPrivateProfileInt("Game Options", "All Learn Spell Info", 0);
    *(_DWORD *)(this + 18088) = 1;
    *(_DWORD *)(this + 18068) = BGGetPrivateProfileInt("Game Options", "Heal Party on Rest", 0);
    *(_DWORD *)(this + 18064) = BGGetPrivateProfileInt("Game Options", "Environmental Audio", 1);
    *(_DWORD *)(this + 18060) = BGGetPrivateProfileInt("Game Options", "Cheats", 0);
    *(_DWORD *)(this + 17920) = BGGetPrivateProfileInt("Game Options", "Memory Access", 1);
    if ( *(_DWORD *)(this + 17920) )
    *(_DWORD *)(this + 17916) = BGGetPrivateProfileInt("Game Options", "Memory Level", 1);
    else
    *(_DWORD *)(this + 17916) = 0;
    *(_DWORD *)(this + 17960) = BGGetPrivateProfileInt("Game Options", "Footsteps", 1);
    *(_DWORD *)(this + 17924) = BGGetPrivateProfileInt("Game Options", "Mouse Scroll Speed", 36);
    if ( *(_DWORD *)(this + 17924) < 6u || *(_DWORD *)(this + 17924) > 0x32u )
    *(_DWORD *)(this + 17924) = 36;
    *(_DWORD *)(this + 17932) = BGGetPrivateProfileInt("Game Options", "GUI Feedback Level", 5);
    if ( *(_DWORD *)(this + 17932) < 1u || *(_DWORD *)(this + 17932) > 6u )
    *(_DWORD *)(this + 17932) = 5;
    *(_DWORD *)(this + 17936) = BGGetPrivateProfileInt("Game Options", "Locator Feedback Level", 3);
    if ( *(_DWORD *)(this + 17936) < 1u || *(_DWORD *)(this + 17936) > 6u )
    *(_DWORD *)(this + 17936) = 3;
    *(_DWORD *)(this + 17992) = BGGetPrivateProfileInt("Game Options", "Bored Timeout", CScreenWorld::BORED_TIME);
    if ( *(_DWORD *)(this + 17992) < 1u )
    *(_DWORD *)(this + 17992) = CScreenWorld::BORED_TIME;
    *(_DWORD *)(this + 18004) = BGGetPrivateProfileInt("Game Options", "Always Dither", 1);
    *(_DWORD *)(this + 17928) = BGGetPrivateProfileInt("Game Options", "Subtitles", 1);
    *(_DWORD *)(this + 18008) = BGGetPrivateProfileInt("Game Options", "Keyboard Scroll Speed", 36);
    if ( *(_DWORD *)(this + 18008) < 0x12u || *(_DWORD *)(this + 18008) > 0x96u )
    *(_DWORD *)(this + 18008) = 36;
    *(_DWORD *)(this + 17996) = BGGetPrivateProfileInt("Game Options", "Command Sounds Frequency", 2);
    if ( *(_DWORD *)(this + 17996) < 1u || *(_DWORD *)(this + 17996) > 3u )
    *(_DWORD *)(this + 17996) = 2;
    *(_DWORD *)(this + 18000) = BGGetPrivateProfileInt("Game Options", "Selection Sounds Frequency", 3);
    if ( *(_DWORD *)(this + 18000) < 1u || *(_DWORD *)(this + 18000) > 3u )
    *(_DWORD *)(this + 18000) = 3;
    *(_DWORD *)(this + 18012) = BGGetPrivateProfileInt("Game Options", "Effect Text Level", 62);
    *(_DWORD *)(this + 18048) = BGGetPrivateProfileInt("Game Options", "Infravision", 0);
    *(_DWORD *)(this + 18056) = BGGetPrivateProfileInt("Game Options", "Weather", 1);
    *(_DWORD *)(this + 18016) = BGGetPrivateProfileInt("Game Options", "Tutorial State", 1);
    if ( *(_DWORD *)(this + 18016) > 1u )
    *(_DWORD *)(this + 18016) = 1;
    *(_DWORD *)(this + 18020) = BGGetPrivateProfileInt("Game Options", "Attack Sounds", 1);
    if ( *(_DWORD *)(this + 18020) > 1u )
    *(_DWORD *)(this + 18020) = 1;
    *(_DWORD *)(this + 18024) = BGGetPrivateProfileInt("Game Options", "Auto Pause State", 0);
    *(_DWORD *)(this + 18028) = BGGetPrivateProfileInt("Game Options", "Auto Pause Center", 1);
    if ( CBaldurChitin::GetEngineMode(g_pBaldurChitin) == 2 )
    *(_DWORD *)(this + 18032) = BGGetPrivateProfileInt("Game Options", "Difficulty Level", 3);
    else
    *(_DWORD *)(this + 18032) = BGGetPrivateProfileInt("Game Options", "Difficulty Level", 2);
    if ( *(_DWORD *)(this + 18032) < 1 || *(_DWORD *)(this + 18032) > 5 )
    *(_DWORD *)(this + 18032) = 2;
    switch ( *(_DWORD *)(this + 18032) )
    {
    case 1:
    *(_DWORD *)(this + 18036) = -50;
    break;
    case 2:
    *(_DWORD *)(this + 18036) = -25;
    break;
    case 3:
    *(_DWORD *)(this + 18036) = 0;
    break;
    case 4:
    *(_DWORD *)(this + 18036) = 50;
    break;
    case 5:
    *(_DWORD *)(this + 18036) = 100;
    break;
    default:
    break;
    }
    if ( BGGetPrivateProfileInt("Game Options", "Suppress Extra Difficulty Damage", 0) )
    *(_DWORD *)(this + 18044) = 0;
    *(_DWORD *)(this + 18040) = *(_DWORD *)(this + 18036);
    *(_DWORD *)(this + 18052) = BGGetPrivateProfileInt("Game Options", "Quick Item Mapping", 1);
    if ( *(_DWORD *)(this + 18052) > 1u )
    *(_DWORD *)(this + 18052) = 1;
    *(_DWORD *)(this + 18072) = BGGetPrivateProfileInt("Game Options", "Terrain Hugging", 0);
    *(_DWORD *)(this + 18076) = BGGetPrivateProfileInt("Game Options", "HP Over Head", 0);
    *(_DWORD *)(this + 18084) = BGGetPrivateProfileInt("Game Options", "Force Dialog Pause", 0);
    *(_DWORD *)(this + 18096) = BGGetPrivateProfileInt("Game Options", "Hotkeys On Tooltips", 1);
    *(_DWORD *)(this + 18188) = BGGetPrivateProfileInt("Game Options", "Disable Statics During Combat", 1);
    *(_DWORD *)(this + 18192) = BGGetPrivateProfileInt("Game Options", "Disable Foot Steps During Combat", 1);
    *(_DWORD *)(this + 18196) = BGGetPrivateProfileInt("Game Options", "Disable Placed Sounds During Combat", 1);
    *(_DWORD *)(this + 18200) = BGGetPrivateProfileInt("Game Options", "Super Atomic Speed Fighting Action", 0);
    *(_DWORD *)(this + 18208) = 1;
    *(_DWORD *)(this + 18212) = 0;
    *(_DWORD *)(this + 18216) = 0;
    *(_DWORD *)(this + 18220) = 0;
    *(_DWORD *)(this + 18224) = 0;
    *(_DWORD *)(this + 18228) = 0;
    *(_DWORD *)(this + 18232) = 0;
    *(_DWORD *)(this + 18236) = 1;
    *(_DWORD *)(this + 18240) = 1;
    *(_DWORD *)(this + 18244) = 1;
    *(_DWORD *)(this + 18248) = 1;
    *(_DWORD *)(this + 18252) = 1;
    *(_DWORD *)(this + 18256) = 0;
    *(_DWORD *)(this + 18260) = 0;
    *(_DWORD *)(this + 18204) = BGGetPrivateProfileInt("Game Options", "Automated Speed Adjustment", 1);
    *(_DWORD *)(this + 18264) = BGGetPrivateProfileInt("Game Options", "Automated Translucent Shadows", 50);
    *(_DWORD *)(this + 18268) = BGGetPrivateProfileInt("Game Options", "Automated Very Low Performance", 30);
    *(_DWORD *)(this + 18272) = BGGetPrivateProfileInt("Game Options", "Automated Low Performance", 60);
    *(_DWORD *)(this + 18276) = BGGetPrivateProfileInt("Game Options", "Automated Disable Brightest", 40);
    *(_DWORD *)(this + 18280) = BGGetPrivateProfileInt("Game Options", "Automated Limit Transparency", 40);
    *(_DWORD *)(this + 18284) = BGGetPrivateProfileInt("Game Options", "Automated Diable Casting Glows", 40);
    *(_DWORD *)(this + 18288) = BGGetPrivateProfileInt("Game Options", "Automated Disable VEFVidCells", 30);
    *(_DWORD *)(this + 18292) = BGGetPrivateProfileInt("Game Options", "Automated Mid Level Brighten", 60);
    *(_DWORD *)(this + 18296) = BGGetPrivateProfileInt("Game Options", "Automated High Level Brighten", 80);
    *(_DWORD *)(this + 18300) = BGGetPrivateProfileInt("Game Options", "Automated Foot Steps", 70);
    *(_DWORD *)(this + 18304) = BGGetPrivateProfileInt("Game Options", "Automated Attack Sounds", 50);
    *(_DWORD *)(this + 18308) = BGGetPrivateProfileInt("Game Options", "Automated 3D Animations", 80);
    *(_DWORD *)(this + 18312) = BGGetPrivateProfileInt("Game Options", "Automated Disable VVC Sounds", 60);
    *(_DWORD *)(this + 18316) = BGGetPrivateProfileInt("Game Options", "Automated Faster Blur", 70);
    *(_DWORD *)(this + 18320) = 1;
    *(_DWORD *)(this + 18324) = BGGetPrivateProfileInt("Game Options", "Fully Disable Non Visible During Combat", 1);
    *(_DWORD *)(this + 18328) = BGGetPrivateProfileInt("Game Options", "Disable VVC Sounds", 0);
    *(_DWORD *)(this + 18332) = BGGetPrivateProfileInt("Game Options", "Faster Blur", 0);
    if ( CChitin::IsTouchUI(g_pChitin) )
    *(_DWORD *)(this + 18336) = BGGetPrivateProfileInt("Game Options", "Smart Radius", 24);
    else
    *(_DWORD *)(this + 18336) = BGGetPrivateProfileInt("Game Options", "Smart Radius", 0);
    *(_DWORD *)(this + 18120) = BGGetPrivateProfileInt("Game Options", "Color Circles", 1);
    *(_DWORD *)(this + 18340) = BGGetPrivateProfileInt("Graphics", "Scale UI", 1);
    *(_DWORD *)(this + 18124) = BGGetPrivateProfileInt("Game Options", "Over Confirm Everything", 0);
    *(_DWORD *)(this + 18128) = BGGetPrivateProfileInt("Game Options", "Show Learnable Spells", 1);
    v1 = CChitin::IsTouchUI(g_pChitin);
    *(_DWORD *)(this + 18344) = BGGetPrivateProfileInt("Game Options", "Render Actions", v1 != 0 ? 2 : 0);
    v2 = CChitin::IsTouchUI(g_pChitin);
    *(_DWORD *)(this + 18132) = BGGetPrivateProfileInt("Game Options", "Show Triggers On Tab", v2 != 0);
    v3 = CChitin::IsTouchUI(g_pChitin);
    *(_DWORD *)(this + 18348) = BGGetPrivateProfileInt("Game Options", "Confirm Dialog", v3 != 0);
    *(_DWORD *)(this + 18356) = BGGetPrivateProfileInt("Game Options", "Maximum HP", 1);
    *(_DWORD *)(this + 18352) = BGGetPrivateProfileInt("Game Options", "Show Character HP", 1);
    if ( CNetwork::GetSessionOpen(&g_pChitin->cNetwork) && CNetwork::GetSessionHosting(&g_pBaldurChitin->cNetwork) != 1 )
    {
    v4 = CBaldurChitin::GetBaldurMessage(g_pBaldurChitin);
    CBaldurMessage::DemandSettingsNightmareMode(v4, 0);
    }
    else
    {
    *(_DWORD *)(this + 18360) = BGGetPrivateProfileInt("Game Options", "Nightmare Mode", 0);
    }
    *(_DWORD *)(this + 18364) = BGGetPrivateProfileInt("Game Options", "3E Thief Sneak Attack", 0);
    *(_DWORD *)(this + 18368) = BGGetPrivateProfileInt("Game Options", "Cleric Ranger Spells", 1);
    v5 = CChitin::IsTouchUI(g_pChitin);
    *(_DWORD *)(this + 18372) = BGGetPrivateProfileInt("Game Options", "Show Date On Pause", v5 != 0);
    *(_DWORD *)(this + 18376) = BGGetPrivateProfileInt("Program Options", "Disable Cosmetic Attacks", 0);
    v6 = CChitin::IsTouchUI(g_pChitin);
    *(_DWORD *)(this + 18380) = BGGetPrivateProfileInt("Game Options", "Render Travel Regions", v6 != 0);
    *(_DWORD *)(this + 18384) = BGGetPrivateProfileInt("Game Options", "Render Search Map", 0);
    *(_DWORD *)(this + 18388) = BGGetPrivateProfileInt("Game Options", "Render Dynamic Search Map", 0);
    *(_DWORD *)(this + 18392) = BGGetPrivateProfileInt("Graphics", "Render Frame Times", 0);
    *(_DWORD *)(this + 18396) = BGGetPrivateProfileInt("Graphics", "Zoom Lock", 0);
    v7 = CBaldurChitin::GetBaldurMessage(g_pBaldurChitin);
    CBaldurMessage::SetSignalDefaultSecondsToTimeout(v7);
    }


    void __thiscall CInfGame::LoadMultiPlayerPermissions(void *ecx0)
    {
    char *v1; // ST0C_4@3
    const char *v2; // eax@3
    int v3; // ST20_4@4
    int v4; // ST1C_4@4
    int v5; // ST24_4@4
    int v6; // ST28_4@4
    int v7; // ST30_4@4
    int v8; // ST2C_4@4
    int v9; // ST18_4@4
    int v10; // ST34_4@4
    CInfGame *v11; // eax@5
    CGameOptions *v12; // eax@5
    CInfGame *this; // [sp+0h] [bp-3Ch]@1
    CMultiplayerSettings *pSettings; // [sp+28h] [bp-14h]@3
    CString sPermissions; // [sp+2Ch] [bp-10h]@3
    int nPausingDialog; // [sp+30h] [bp-Ch]@5
    CString sDefault; // [sp+34h] [bp-8h]@3
    char nImportingBitField; // [sp+3Bh] [bp-1h]@5

    this = (CInfGame *)ecx0;
    if ( CNetwork::GetSessionOpen(&g_pBaldurChitin->cNetwork) && CNetwork::GetSessionHosting(&g_pBaldurChitin->cNetwork) )
    {
    pSettings = CInfGame::GetMultiplayerSettings(this);
    CString::CString(&sPermissions);
    CString::CString(&sDefault, &byte_A76681);
    v1 = CString::GetBuffer(&sPermissions, 10);
    v2 = (const char *)talk_base::scoped_ptr::get((CResHelper *)&sDefault);
    BGGetPrivateProfileString("Multiplayer", "Default Permissions", v2, v1, 10);
    CString::ReleaseBuffer(&sPermissions, -1);
    if ( CString::GetLength(&sPermissions) == 8 )
    {
    v3 = CString::operator__(&sPermissions, 0) == 49;
    v4 = CString::operator__(&sPermissions, 1) == 49;
    v5 = CString::operator__(&sPermissions, 2) == 49;
    v6 = CString::operator__(&sPermissions, 3) == 49;
    v7 = CString::operator__(&sPermissions, 4) == 49;
    v8 = CString::operator__(&sPermissions, 5) == 49;
    v9 = CString::operator__(&sPermissions, 6) == 49;
    v10 = CString::operator__(&sPermissions, 7) == 49;
    CMultiplayerSettings::SetPermission(pSettings, -1, CGamePermission::PURCHASING, v3, 1);
    CMultiplayerSettings::SetPermission(pSettings, -1, CGamePermission::AREA_TRANSITION, v4, 1);
    CMultiplayerSettings::SetPermission(pSettings, -1, CGamePermission::DIALOG, v5, 1);
    CMultiplayerSettings::SetPermission(pSettings, -1, CGamePermission::CHAR_RECORDS, v6, 1);
    CMultiplayerSettings::SetPermission(pSettings, -1, CGamePermission::PAUSING, v7, 1);
    CMultiplayerSettings::SetPermission(pSettings, -1, CGamePermission::GROUP_POOL, v8, 1);
    CMultiplayerSettings::SetPermission(pSettings, -1, CGamePermission::LEADER, v9, 1);
    CMultiplayerSettings::SetPermission(pSettings, -1, CGamePermission::MODIFY_CHARS, v10, 1);
    }
    CMultiplayerSettings::SetRestrictStoreOption(pSettings, 0);
    nPausingDialog = BGGetPrivateProfileInt("Multiplayer", "Pausing Dialog", 0);
    v11 = CBaldurChitin::GetObjectGame(g_pBaldurChitin);
    v12 = CInfGame::GetOptions(v11);
    v12->m_bForceDialogPause = nPausingDialog;
    nImportingBitField = BGGetPrivateProfileInt("Multiplayer", "Import Character", CMultiplayerSettings::IMPORT_ALL);
    CMultiplayerSettings::SetImportingCharacterOption(pSettings, nImportingBitField);
    CString::_CString(&sDefault);
    CString::_CString(&sPermissions);
    }
    }
    While others are not:

    void __thiscall CInfGame::LoadKeymap(void *ecx0)
    {
    const char *v1; // ST20_4@4
    const char *v2; // ST14_4@4
    int v3; // ST1C_4@4
    int v4; // ST18_4@4
    void *this; // [sp+0h] [bp-A4h]@1
    int binding_id; // [sp+4h] [bp-A0h]@3
    CString buffer; // [sp+18h] [bp-8Ch]@1
    int defaultKeymap[32]; // [sp+1Ch] [bp-88h]@1

    this = ecx0;
    defaultKeymap[0] = 105;
    defaultKeymap[1] = 114;
    defaultKeymap[2] = 103;
    defaultKeymap[3] = 106;
    defaultKeymap[4] = 109;
    defaultKeymap[5] = 119;
    defaultKeymap[6] = 112;
    defaultKeymap[7] = 111;
    defaultKeymap[8] = 99;
    defaultKeymap[9] = 0;
    defaultKeymap[10] = 0;
    defaultKeymap[11] = 0;
    defaultKeymap[12] = 0;
    defaultKeymap[13] = 0;
    defaultKeymap[14] = 0;
    defaultKeymap[15] = 0;
    defaultKeymap[16] = 0;
    defaultKeymap[17] = 0;
    defaultKeymap[18] = 0;
    defaultKeymap[19] = 0;
    defaultKeymap[20] = 0;
    defaultKeymap[21] = 0;
    defaultKeymap[22] = 0;
    defaultKeymap[23] = 108;
    defaultKeymap[24] = 104;
    defaultKeymap[25] = 117;
    defaultKeymap[26] = 116;
    defaultKeymap[27] = 120;
    defaultKeymap[28] = 113;
    defaultKeymap[29] = 97;
    defaultKeymap[30] = 121;
    defaultKeymap[31] = 122;
    CString::CString(&buffer);
    memset((char *)this + 18448, 0, 0x7D0u);
    memset((char *)this + 20448, 0, 0x7D0u);
    sql(
    *(sqlInfo_s **)&db,
    "SELECT id, ini_name, keybinding_categories.id[keybinding_category_id]^ini_name, default_binding FROM keybindings;");
    while ( sql(*(sqlInfo_s **)&db, 0) )
    {
    binding_id = sql_columnasint(*(sqlInfo_s **)&db, 0);
    if ( binding_id > 0 )
    {
    v1 = sql_columnastext(*(sqlInfo_s **)&db, 1);
    v2 = sql_columnastext(*(sqlInfo_s **)&db, 2);
    v3 = sql_columnasint(*(sqlInfo_s **)&db, 3);
    v4 = BGGetPrivateProfileInt(v2, v1, v3);
    CInfGame::LoadKey((CInfGame *)this, v4, binding_id - 1);
    }
    }
    CString::_CString(&buffer);
    }


    void *__thiscall CInfGame::LoadKey(void *this, int code, __int16 cnt)
    {
    void *result; // eax@10
    void *thisa; // [sp+0h] [bp-Ch]@1
    unsigned int i; // [sp+4h] [bp-8h]@5
    const char *key_name; // [sp+8h] [bp-4h]@1

    thisa = this;
    key_name = SDL_GetKeyName(code);
    sql(*(sqlInfo_s **)&db, "UPDATE keybindings SET key = '', binding = 0 SEARCH key $1;", key_name);
    while ( sql(*(sqlInfo_s **)&db, 0) )
    ;
    sql(*(sqlInfo_s **)&db, "UPDATE keybindings SET key = $1 SEARCH id ?2;", key_name, cnt + 1);
    while ( sql(*(sqlInfo_s **)&db, 0) )
    ;
    for ( i = 0; i < 0x1F4; ++i )
    {
    if ( *((_DWORD *)thisa + i + 4612) == code )
    *((_DWORD *)thisa + i + 4612) = 0;
    }
    result = thisa;
    *((_DWORD *)thisa + cnt + 4612) = code;
    return result;
    }
    Note: Look for
    BGGetPrivateProfileInt()
    Also, just because this (partial) list of key>value pairs is loaded, doesn't necessarily guarantee they are actually used anywhere...
  • ScottBrooksScottBrooks Member Posts: 687
    If you have any questions about specific INI values you care about, or think look interesting, feel free to ask me.

    There were piles of INI entries that didn't have anything hooked up to the other end of them in BG2, and we haven't really change that too much. There are a lot of ini entries that just set a flag in the engine, but the code that cares about that flag is long gone.
  • JidokwonJidokwon Member Posts: 395
    Thank you for the replies and props to Sam_ again for digging into IWDEE.

    @ScottBrooks: The two that I'm most curious about are Extra Combat Info and Extra Feedback. I've set both of those to one and haven't seen anything extra. Does All Learn Spell Info set to one allow the scribing of spells on any difficulty? Or is that for the new colors that show scribable spells? I know that some of the new ones are a work in progress, but can you tell us how exactly Nightmare Mode will compare to HoF? Thanks again.
  • ScottBrooksScottBrooks Member Posts: 687
    Extra Feedback, when turned on, and the game is paused will show in the console something like
    CHARNAME: is Attacking Goblin

    Extra Combat Info, when turned on, for hit and damage you should see the bonus calculations

    The "All Learn Spell Info" flag makes the copy button always show up, so you can get an error message instead of the button not showing up.

    Nightmare mode is the same as HoF
  • ShinShin Member Posts: 2,345
    @ScottBrooks How about Terrain Hugging and Render Actions?
  • ScottBrooksScottBrooks Member Posts: 687
    Terrain Hugging relates to the pathfinding, and how much it costs to move somewhere. I'm not sure what setting it to 1 will actually do.

    For Render Actions it defaults to 0 on PC, and 2 on touch UI. It shows your weapon icon around the player, and other info for when you do various actions.
    1: Show only when paused and the sprite is an ally
    2: Show when the sprite is an ally
    3: All the time when paused and debug mode is set
    4: All the time when debug mode is set.
  • Sam_Sam_ Member Posts: 172
    edited May 2015

    Terrain Hugging relates to the pathfinding, and how much it costs to move somewhere. I'm not sure what setting it to 1 will actually do.

    So what combination of INI settings will result in the most efficient (by than I mean the minima of shortest distance from A to B AND shortest travel time from A to B ), regardless of CPU load/memory required. For instance, what is the maximum value of 'Path Search Nodes' allowed by the engine, is more 'Path Search Nodes' always better (assuming one's system can handle the processing/memory requirements), is 'Terrain Hugging' likely to be beneficial given the recent complete rewrite of the pathfinding algorithm, and are 'Enhanced Path Search' and 'Enhanced Path Finding' still viable INI settings?
  • ScottBrooksScottBrooks Member Posts: 687
    TL;DR: use the defaults

    enhanced path search and enhanced path finding are actually interpreted as the same thing on the engine side. When you turn it on, and a player is walking towards the destination, as it reaches each point(or place where the player changes directions), it increments a counter. When that counter gets to be > 60, it re-does it's pathfind.

    So in the end, while the player is walking towards a point really far away, the player will re-do it's pathfind periodically along the way. This can cause characters to run off on strange tangents, and then return to the proper path as the calculations get re-done.

    Path Search Nodes will be set to 32000 if it's less then 2000, or greater then 400,000. If you've been setting it to 400,001, then it's actually being set to 32,000.

    There is another check, which then clamps the max number of nodes to 320*320, or 102,400 nodes which is the max resolution of the pathfinding grid(320x320).

    After looking into the terrain hugging flag, it only takes effect on areas with a search map with a 8bit searchmap(256 palette entries). I can only assume that this code is never used since all of the searchmaps use a 4 bit(16 palette entries) search map.

Sign In or Register to comment.