Warband Script Enhancer 2 (v1.0.9.7)

Users who are viewing this thread


Sergeant Knight at Arms
Warband Script Enhancer 2

What is the Warband Script Enhancer 2?
It is game engine a compatible with any Mount & Blade Warband module, originally written cmpxchg8b for cRPG. Fixed, updated to latest version of Warband and open to support any modules.


- All Warband 1.174 features.
- All WSE features.
- Optimized and more efficient rendering, advanced graphic settings.
- Sound Occlusion.
- Ragdoll soak - blows is beaten on corpses and thus prevents an unintentional teamhits.
- More informative logs for a dedicated server, autorestart feature, new console commands.
- Flexible and convenient multi-tier configs system, all settings in one place. Moved settings from module.ini and many new ones added.
- Custom reassignable keys for modders.
- New operations, triggers and many more.
- Fixed some Warband's bugs.
- Supports WFaS.


WSE2 Launcher source
PHP ogp and rcon classes
C# rcon
Python rcon
WSE Profiler


1. Download WSE2
2. Extract WSE2 files in Warband folder
3. Run wse2_launcher.exe

Dedicated Server
1. Download WSE2
2. Extract WSE2 files in dedicated server folder
3. Edit server_config.ini for server specific options
4. Run bat file. Example: start mb_warband_wse2_dedicated.exe --config-path server_config.ini -r Native.txt --module Native

1. Download WSE2
2. Enhance the Module System with the files in the WSESDK directory (see README.txt for more information)
3. Package WSE2 in your mod download

-Added CTRL+M hotkey for "Restore module data" option.
-Fixed display of symbol <.
-Fixed text color for checkbox.
-Fixed display extra text for parties.
-Fixed texture offset for oceans and rivers animation.
-Fixed combo button bugs.
-Fixed arguments order for game_missile_dives_into_water mapped script.
-Added overlay_enable, overlay_item_set_text operations.
-Extended start_map_conversation operation.

Previous versions
-Added bLocalVariablesZeroInitialization config option (default true).
-Fixed overlay_button_set_type, send_post_message_to_url_advanced operations.
-Added agent_kick and party_stack_set_num_upgradeable operations.
-Fixed troop_ensure_inventory_space, item_get_shield_height, item_get_horse_scale operations.
-Added bUseBorderedShadowSampler config option.
-fMissileDamageSpeedPower and fMeleeDamageSpeedPower config options limited to range 1.0-2.0.
-Added "Create Language Template" to Edit Mode options.
-Fixed incorrect default value for iMaxNumTreeInstances and iMaxNumFloraInstances.
-Added "Edit Mode" tab to Options window.
-Added "Set lod quality" option.
-Fixed character window crash, if it is called from menu window.
-Fixed quests title.
-Fixed incorrect default value for bDontLoadRegularTroopInventories.
-Fixed lua bugs.
-Fixed possible "Too many vertices" crashes for particles and combining meshes.
-Fixed an agents spawning bug which caused the operation mission_tpl_are_all_agents_spawned to work incorrectly.
-Fixed transparency for displayed messages.
-Fixed the display of scripting errors for operations performed from lua.
-Fixed lua constants loading.
-Fixed crashes for modules with incorrect item carry flags.
-Fixed prop_instance_intersects_with_prop_instance, set_party_creation_random_limits operations.
-Fixed memory leak for arrays operations.
-Added get_mouse_map_coordinates operation.
-Fixed array_copy operation.
-Fixed overlay_set_size operation for game button.
-Operations set_physics_delta_time, set_ally_collision_threshold, set_prop_collision_threshold, set_horse_friendly_fire no longer change the global settings in rgl_config.ini.
-Fixed first person view for armors with itp_covers_hair flag.
-MB_MAX_NUM_STATEMENT_OPERANDS and MB_MAX_NUM_STATEMENT_BLOCK_PARAMS increased from 16 to 32. Useful for call_script with more parameters.
-Added get_campaign_time and set_campaign_time operations.
-Added savegame slot to wse_game_saved and wse_savegame_loaded scripts.
-Removed 32 num samples cap for sounds.
-Added player_get_wse2_version operation.
-Refixed sf_always_send_via_network sound flag.
-Fixed cursor visibility for mbYesNoWindow.
-Added WSE version to xml server info.
-Added joined player's WSE2 version to dedicated server logs.
-Fixed map crash.
-Fixed iMultiplayerKills config option.
-Added fMouseScrollTime config option.
-Added "Player deaths" value for Kill Messages config option (iMultiplayerKills).
-Refixed shadowmap rendering bug.
-Fixed ai weapon selection.
-Fixed party pathfinging.
-Fixed click sound.
-Fixed agent's pathfinding bug.
-Fixed try_for_dict_keys, play_sound operations.
-Added mission debug window.
-Removes the engine limit of 16 skins.
-Fixed troop_set_age operation.
-Fixed wse_savegame_loaded trigger - triggered only with savegame loaded.
-Fixed ti_on_scene_prop_hit, ti_on_agent_blocked, ti_on_shield_hit, ti_on_shield_penetrated triggers.
-Extended ti_on_item_wielded, ti_on_item_unwielded triggers (param 3: item slot), ti_on_shield_hit trigger (param 6: item modifier, param 7: missile item modifier).
-Fixed proficiency improvement when dealing damage in singleplayer.
-Fixed failure_callback_script_no for send_message_to_url_advanced and send_post_message_to_url_advanced operations.
-Fixed knockdown chance.
-Fixed crash with remove invalid parties when saving the game.
-Fixed ai_mesh_face_group_show_hide, party_quick_attach_to_current_battle operations.
-Fixed sokf_type_barrier3d and sokf_type_ai_limiter3d.
-Fixed headshot ui message.
-Fixed + sign in party window with companion level up.
-Added cast_ray_agents operation.
-Added bServerLockFov, iMultiplayerEventForAnnounce config options.
-bRagdollSoakApplyForce works for multiplayer without enabled bBreakWarbandCompatibility (with latest WSE2 on server and client both).
-Added bRagdollSoak and bRagdollSoakApplyForce to client options menu.
-Added "announce" console command for dedicated server.
-Fixed distribute_party_among_party_group, hero_can_join, hero_can_join_as_prisoner, rest_for_hours, rest_for_hours_interactive operations.
-Fixed crash with sounds channelCallback.
-Fixed Warband bug - rare crash with autogenerated degradable flora.
-Fixed crash with enabled profiling when the recursion limit is reached.
-Max num nested loops reduced to default 128, which should reduce freezes in badly written scripts with lots of nested loops and recursion.
-Fixed stack overflow for local variables.
-Fixed wound treatment - works for the main party, even if main party is disabled.
-Fixed music switch bug.
-Fixed store_free_inventory_capacity operation.
-Fixed crash with invalid string in rglFormat.
-Fixed change_screen_equip_other and change_screen_loot operations.
-Fixed ti_on_presentation_run trigger.
-Fixed clear mission after exiting.
-Fixed stopAllSounds bug.
-Fixed module resource loading if this file already loaded as core resource.
-Fixed prisoners count for party_count_members_of_type, party_count_prisoners_of_type, store_troop_count_prisoners, party_add_prisoners operations.
-Fixed a bug with non-attacking melee bots.
-Fixed store_num_parties_destroyed, store_num_parties_destroyed_by_player operations.
-Restored Warband compatibility for options_get_damage_to_player, options_set_damage_to_player, options_get_damage_to_friends, options_set_damage_to_friends operations.
-Fixed fDamageToFriends config option for game difficulty formula.
-Fixed bAiDecideDirectionAccordingToDamage config option.
-Fixed itp_covers_hair_partially item flag.
-Fixed agent_set_attack_action, agent_set_defend_action operations.
-Fixed instancing.
-Fixed shadowmap rendering bug.
-Fixed game_missile_launch mapped script.
-Fixed prop_instance_remove_light operation.
-Fixed combo button text size.
-Added wse2 launcher.
-Restored shader compatibility.
-Restored hair materials.
-Added bLoadModuleIniOptions, bLimitHairColors config options.
-Warning messages requires enabled edit mode.
-Head deformation applied to all helmet's meshes, not just for the first.
-Updated Music manager.
-Fixed overlay_set_size operation for combo button and slider.
-Added bSyncBlockDirections config option.
-Fixed fWeaponPointsPerLevel, fSkillPointsPerLevel, fAttributePointsPerLevel config options.
-Fixed icons for items on inventory screen.
-Fixed ti_on_agent_spawn trigger - missing trigger_param_2 (entry_no).
-Updated FMOD Ex library.
-Fixed VSync.
-Fixed crash with agent fade out.
-Added missing game variables.
-Refixed set_shader_param_... operations with threaded renderer.
-Fixed itp_cant_use_on_horseback item flag.
-Fixed ti_on_init_map_icon trigger.
-Fixed vertex animation speed for map icon.
-Improving loading time for client. Especially on an SSD.
-Fixed crash in Viking Conquest.
-arf_stick_item_to_left_hand animation flag works better with cycled animations.
-Fixed iMinNumAgentsForNavMeshReuse config option.
-Fixed default value for bTakeAttackersSpeedForRangedSpeedBonus and iIndexBufferSizeStatic config options.
-Small bugfixes.
-Added agent_set_time_speed_multiplier, agent_get_time_speed_multiplier operations.
-Added missile hit sounds for dynamic props.
-Fixed deform head for itp_covers_head flag.
-Fixed invalid values processing for hair color gradiant in module skins.
-Added iNumPlayersLimit config option.
-Added multiplayer_connect_to_server operation.
-Fixed server_set_max_num_players operation.
-Fixed beards and accessories.
-Fixed overlay_set_tooltip operation.
-Increased max number local variables to 1024.
-Added bAllowDuplicateMeshes config option.
-Fixed particle system degrade distance.
-Fixed singleplayer bug with the player spawning after allies.
-Added iAttributeLimit, iMinBattleAdvantage, iMaxBattleAdvantage config options.
-Fixed bug with battle advantage.
-Added bHorseFriendlyFire config option.
-Added set_horse_friendly_fire operation.
-Implemented facecode viewer for edit mod. (Ctrl + E)
-Added bMainMenuScene config option.
-Added wse_initial_window_start mapped script.
-Fixed spectator camera bug with lock to team members view.
-"Enable edit mode" added to ingame configs menu.
-Debug menu on initial screen shows only with enabled edit mode.
-Added "Restore module data" to debug menu.
-Added bDoNotMakeHandsParallelToGround config option.
-Fixed reloading bug - only one projectile was loaded, regardless of weapons max ammo.
-Fixed make_screenshot operation.
-Implemented troop viewer for edit mode.
-Added warband_compatibility.ini support.
-Fixed brace rotation.
-Minor bugfixes.
-Added WFaS build.
-Added bMoreProficiencyEffectForMovingSpeedWhileReloading config option.
-Added sf_use_next_for_far sound flag.
-Fixed sf_always_send_via_network sound flag.
-Fixed sound bugs.
-Fixed backpedal speed.
-Fixed shot difficulty message.
-Fixed damage type for itcf_overswing_spear.
-Fixed bug with troops upgrade to trp_player.
-Fixed store_random_party_of_template operation.
-Fixed try_for_players operation.
-Implemented Stats window and character import/export.
-Fixed troop_set_proficiency operation.
-Fixed bug with crossbow reloading.
-Implemented WSE Profiler (Profiling config options).
-Added bEditMode config option (currently only displays messages in rgl_log.txt).
-Fixed sModuleDownloadUrl config option.
-Added bAllowKickDuringMeleeAttacks config option.
-Fixed itp_cant_reload_while_moving and itp_cant_reload_while_moving_mounted item flags.
-Added some Carribean operations - set_random_seed, store_application_time, is_party_skill, agent_get_horse_rotation_velocity, agent_get_current_vertical_speed, agent_set_current_vertical_speed, agent_get_position_in_group, agent_get_current_ai_mesh_face_group, prop_instance_remove_particle_system, prop_instance_remove_light, prop_instance_get_sound_progress, cur_item_mesh_set_color, cur_item_add_mesh_with_material, party_switch_stacks, party_stack_upgrade, position_get_length, get_dot_product_of_positions, get_cross_product_of_positions, str_store_skill_desc, overlay_button_set_type, overlay_get_scroll_pos, overlay_set_scroll_pos.
-Extended add_point_light and add_point_light_to_entity operations - range parameter.
-Operations that are performed in lua now get context (trigger).
-Fixed particle_system_remove and cur_item_add_mesh operations.
-Fixed reloading bug.
-Fixed agent_equip_item, face_keys operations.
-Added undocumented store_main_party_wounded, str_store_agent_face_keys Warband's operations.
-Fixed ai weapon usage orders.
-Fixed agent_ai_set_simple_behavior operation.
-Fixed cooldown for horse charging and weapon alternative usage.
-Fixed bUseAdvancedFormation config option.
-Fixed bug with division's leader assignment.
-Added fLancePikeEffectMinLength, fLancePikeEffectMinDamage, bAdjustedAttackHoldFactor, bAdjustedCrushthrough, bAdjustedTwoHandedAndPolearmPenalties, bAdjustedShieldSkillDamage, bAdjustedStagger, bAdjustedKnockdown, bNerfHorseManeuver, bItemSpeedAffectSpeedBonusForDamage, bTakeAttackersSpeedForRangedSpeedBonus, bTweakCrushthroughDamageReduction, bRandomTroopEquipping, bReduceDamageRandomness, bParry, bCouchedLanceChambered, fKickRange, fHorseBumpMinSpeed, fMaxSlowMotionDeltaTimeStep config options.
-Fixed bRagdollHeadshots config option.
-Added bAdvancedLogFormat config option.
-Fixed chamber and sweetspot for itp_has_upper_stab item flag.
-Added bAdjustedSweetSpot, bPolearmStagger config options.
-Unicode support for strings operations.
-Fixed troops_can_join, troops_can_join_as_prisoner, remove_troops_from_companions, remove_troops_from_prisoners operations.
-Fixed party_can_join, party_can_join_as_prisoner, party_can_join_party operations.
-Fixed party_force_add_members and party_force_add_prisoners operations.
-Fixed bug with rain sound when it snows.
-Fixed set_shader_param_... operations with threaded renderer.
-Fixed position_rotate_x_floating, position_rotate_y_floating, team_get_order_position operations.
-Fixed singleplayer's saving/loading for fDamageToSelf and fDamageToFriends config options (for warband's compatibility only 25%, 50% and 100%).
-Fixed mission_cam_animate_to_position and mission_cam_animate_to_position_and_aperture operations.
-Fixed Warband's savegame compatibility.
-Added skin_set_blood_color, item_set_horse_blood_color operations.
-Fixed mission_tpl_entry_clear_override_items, mission_tpl_entry_add_override_item operations.
-Added cheat mode.
-Added bCheatMode, iMaxNumNotificationMessages, bHasOneHanded, bHasTwoHanded, bHasPolearms, bHasArchery, bHasCrossbows, bHasThrowing config options.
-Fixed ingame console.
-Fixed agent_set_max_hit_points operation.
-Added Lua support.
-Added agent_set_footstep_sound operation.
-Added ti_on_scene_prop_is_deforming trigger.
-Added itp_covers_hands item flag.
-Added all scene prop triggers support for add_point_light, particle_system_add_new, particle_system_remove, set_forced_lod, play_sound, add_point_light_to_entity, particle_system_emit operations.
-Fixed prop_instance_add_particle_system operation.
-Module music loading without obsolete mtf_module_track music flag.
-Fixed crash with game_missile_launch mapped script.
-Fixed ui_cant_reload_this_weapon_on_horseback message spam.
-Added TexturesHD folder support.
-Added bAdvancedTurnRateFormulaForMelee config option.
-Fixed bRestrictAttacksMoreInMultiplayer config option.
-Fixed Windows version detect.
-Added acf_lock_rotation animation flag.
-Added bRagdollSoak and bRagdollSoakApplyForce config options.
-Fixed fKickCooldown config option for multiplayer client.
-Continued work on sound system, fixed crash.
-Fixed reloading sound for muskets.
-Added agent_body_meta_mesh_deform_in_range, agent_body_meta_mesh_deform_in_cycle_loop, agent_body_meta_mesh_get_current_deform_progress, agent_body_meta_mesh_get_current_deform_frame operations.
-Rewrited sound system for full sf_stream_from_hd support.
-Disabled frequency variation for sf_stream_from_hd sound flag.
-Fixed store_last_sound_channel operation.
-Removed cap for number of music tracks.
-Fixed weapon hud for bUseCrossbowAsFirearm config option.
-Fixed camera height while crouching.
-Updated custom game keys. Increased to 20. Custom keys saved separately for each module. You can map default keys to custom game keys with module_controls_template.ini (check WSE2 SDK).
-Added bLogIPs config option.
-Updated game_key_get_key operation.
-Added dummy for options_get_cheat_mode operation.
-Added bApplySkillForCouchingDamage config option.
-Fixed display_message operation.
-Fixed set_show_messages operation.
-Fixed crash with joining on server.
-Fixed server_map_rotation_get_map, position_get_vector_to_position, set_spawn_effector_scene_prop_id, agent_set_attached_scene_prop operations.
-Fixed sf_always_send_via_network sound flag.
-Fixed bSyncRagdollEffects, ItemRequirement config options.
-Fixed http response handling.
-Fixed dedicated server's schedule commands.
-Minor bugfixes.
-Fixed blocking while kick.
-Fixed couching bug on servers with iLanceControl=0.
-Fixed str_store_join operation.
-Fixed http server queries.
-Added bTurnAgentAsMultiplayer config option.
-Fixed bugs with sticked missiles to agents and shields.
-Fixed agent_set_item_slot_modifier operation.
-Extended agent_set_animation_progress operation.
-Fixed change_screen_give_members operation.
-Fixed change_screen_exchange_members operation.
-Fixed party_add_xp operation.
-Fixed experience bug.
-Added iBattleSizeMin, iBattleSizeMax config options.
-Increased battle size limit.
-Fixed bugs with character screen, date change and display message.


How do I know the executable is not a virus?
You don't. :smile:
Scan it, sandbox it, run it in virtual machine, whatever. If you don't want to run it then don't.

Isn't modifying/cracking game files illegal?
Warband executable file is not modified. WSE2 is a separate application.

Does this allow people who don't own Warband to play?
You have to buy a Warband key to use WSE2.

When I try to run it, it says that a .dll file is missing.
Try installing the Microsoft Visual C++ 2012 Redistributable Package (x86).

My game crashes/shows weird errors.
Post here and paste the contents of rgl_log.txt file in your game directory.

How can I switch to DirectX 7 mode?
You can't. The WSE2 client does not support DirectX 7.

I can run any mod for Warband with WSE2 without any adjustment?
Yes! Exception - module contains its own postFX.fx module. In this case, you need to edit this file and add to the end this strings
#if WSE2
#include "postFX_WSE2.fx"

I run my mod in WSE2 and get a black screen with FXAA or Post Processing Filter enabled.
You need to edit postFX.fx file from your module and add to the end this strings
#if WSE2
#include "postFX_WSE2.fx"

I want to add WSE2 to my mod. What do I do?
Add the required WSE2 files to your mod download. Check WSESDK for more info.

Is vanilla and WSE2 server and client compatible?
Yes, you can play from vanilla client on wse2 servers and play from wse2 client on vanilla servers. However, there are some features that work only if both the server and the client use WSE2, Drop Shield button for example.

Where are WSE2 settings?
...\Documents\Mount&Blade Warband WSE2

I can use saves from Warband in WSE2?
Yes. Copy savegames from ...\Documents\Mount&Blade Warband to ...\Documents\Mount&Blade Warband WSE2

I am modder. How in my mod to determine that WSE2 is used?
For WSE2 store_wse_version return 5 for major version, modern WSE return 4.

How can I improve the performance of the mod?
Enable edit mode, run mod and check rgl_log.txt. You need to fix PERFORMANCE WARNING. Meshes with rigging requires material with skinning shader. Meshes without rigging requires material without skinning shader. This will increase performance for both WSE2 and Warband since the CPU is the bottleneck.


- cmpxchg8b, initial WSE2 developer
- Useful_Lesbian, WSE2 launcher developer


- Sir John Hawkwood
- DoDoCat
- Azremen
- SupaNinjaMan
- Vetrogor
- TweT_Anoki
- Gibby Jr
- DetektivAro
- Useful_Lesbian
- OrientSea

External software:

- muParser
- Open Game Protocol
- Source RCON Protocol
- JsonCpp



You can support developing by
Last edited:


Sergeant Knight at Arms
Ready documentation for config options. You can use it to tune the game, port and change modules.

Command line options
  • --module <value> runs this module
  • --config-path <value> sets config-path
For client
  • --no-intro skips intro videos
  • --address try connects to server
  • --password sets password for this connection
For dedicated server
  • --auto-restart sets num auto restarts
  • -r <value> or -R <value> sets command file
New dedicated servers console commands
  • get_version returns WSE2 version
  • get_module returns current module
  • set_module <value> changes module and restarts server
  • schedule_exit returns scheduled exit or restart
  • schedule_restart returns scheduled exit or restart
  • schedule_exit <minutes> schedules exit, if <minutes> <= 0, cancels scheduled exit or restart
  • schedule_restart <minutes> schedules restart, if <minutes> <= 0, cancels scheduled exit or restart
  • schedule_exit <minutes> <seconds> schedules exit, if <minutes> and <seconds> <= 0, cancels scheduled exit or restart
  • schedule_restart <minutes> <seconds> schedules restart, if <minutes> and <seconds> <= 0, cancels scheduled exit or restart
  • set_server_fps_limit <value> sets max fps (10-1000)
  • get_server_fps_limit returns max fps
  • set_broadcast_chat <0 or 1> sets if chat messages broadcasted to console window
  • get_broadcast_chat returns if broadcast chat is enabled or not
  • shuffle_maps shuffles maps rotation
  • set_auto_shuffle_maps <0 or 1> sets if maps auto shuffle
  • get_auto_shuffle_maps returns if auto shuffle maps is enabled or not
  • stats list returns players list
  • stats <value> returns info about player. Value can be player name or player no
  • kick_player <value> kicks player from server. Value can be player name or player no
  • announce <string> send message to all players. iMultiplayerEventForAnnounce should be correct event for used module
Config system

WSE2 used new configs system.
If bLoadModuleIniOptions enabled, then WSE2 loads Warband's setting from module.ini and they have priority. Otherwise module.ini used only for resource loading and version.
Base config file - Documents\Mount&Blade Warband WSE2\rgl_config.ini.
Module options instead module.ini specified in Modules\module\module_config_template.ini. Every time when you run mod, it is copied to Documents\Mount&Blade Warband WSE2\module_name\module_config.ini and overwrite settings in rgl_config.ini.
Also for server used --config-path server_config.ini for server specific options.
Analogues of settings from module.ini can usually be found in documentation.

Custom Keys

Modules\module\module_controls_template.ini - default binds for Custom Controls inside Options Menu.
In order for custom keys to be active, they need to be assigned a name.


ui_custom_key_1|Clan chat
ui_custom_key_2|Admin chat
ui_custom_key_3|Admin team chat

1)WSE2 use new multi-tier configs system. module.ini used only for resource loading and version. Other Warband's options not used.
Main settings stored in Documents\Mount&Blade Warband WSE2\rgl_config.ini.
Module specific settings stored in YourModule\module_config_template.ini and have priority over main.
Also --config-path command line option used for load additional config and have priority over main and module both. This is mainly used for dedicated server configuration.

First of all, we want to transfer the settings of our module from module.ini to module_config_template.ini.
Check WSE2 settings documentation https://docs.google.com/spreadsheets/d/1IFM5v5maZpIH98H6HYcn8rt55V_wzhYDj0vJGZrBRRE/edit#gid=0
Check your module.ini and for all settings that differ from the default, find an analogue in the documentation and put in module_config_template.ini.

Also check game_variables.txt. There is musket_left_hand setting that is used, for example, in NW.

If the module uses meshes with the same names and this is not a mistake, you may need to set bAllowDuplicateMeshes=true for load and merge duplicates.

After checking the module for errors, you may want to hide warnings for players with bSuppressWarnings=true.

If your module didn't add or change shaders, you can skip to step 5.

2)WSE2 uses its own rendering and shader brf format, so if you use your own shaders in your module, you need to edit and recompile fx, edit postfx and package resource_shaders to brf.
Let's start with edit postFX.fx if your module has it. If not - go to the next step.

WSE2 used FXAA and some postprocess effects. If you get a black screen when you run the module, this step is the problem.

Check WSE2 SDK, open postFX.fx and copy code beginning with #if defined PS_3 until the end. Paste it to the end of your module's postFX.fx.

3)Next brf files with shaders.
If you get a crash with string ERROR: Number of alternatives exceeds 3 for shader, this step is the problem. If not - go to the next step.

Shaders format incompactible in Warband and WSE2 due to WSE2 skinning optimisation. Our task is to remove all warband shaders from the module brf files and compile the brf file with these shaders in the WSE2 format. We have two options.
If the shaders in the module are stored in one brf file mixed with other resources - we can add this shaders to the WSE2 core_shaders.brf and put this core_shaders.brf in module resource folder. Then remove the shaders from the original files.
If shaders stored in a separate brf, then we compile them into a separate WSE2 shader brf file and replace it.

Obenbrf does not support the new shader format, so we use WSE2 SDK for compiling shaders brf.
Check WSE2 SDK\Shaders folder.
resource_shaders.py - shader list, by default contains all shaders from core_shaders.brf
- shaders flags
build_shaders.bat - run this bat for compile brf

Shader format:
technique name
technique name with skin
requirement flags
alternatives (fallback in openbrf)

If setled flag shf_uses_skinning, then technique name and technique name with skin swapped.
shf_uses_hlsl flag added automatically and does not require manual set.
Texture access field in openbrf not used in WSE2.

4)Last and hardest - edit and recompile fx files. This is requires fx sources. If they are not in the public domain, ask the author of the module.
If there are no mb.fx, mb_2a.fxo, mb_2b.fxo files in the module, go to the next step.

WSE2 added some shaders for skinning and remove vMaterialColor2 for hair. If you get a lack of hairs on agents, this step is the problem.

You will need any compare tool, for example WinMerge.
Download Warband shaders https://download2.taleworlds.com/mb_warband_shaders.zip and compare with mbsrc.fx from WSE2 SDK.
You need to transfer all found changes to your module shader sources file.
After run compile_fx.bat.
If your module is using mb_2a.fxo and mb_2b.fxo, replace them with compiled. If using mb.fx, then rename compiled mb_2b.fxo to mb.fx and replace.

5)Bat file for client
mb_warband_wse2.exe --module YourModule --no-intro

Bat file for server
start mb_warband_wse2_dedicated.exe --config-path server_config.ini -r config.txt --module YourModule

Test if the module works correctly.
If you find bugs in WSE2 that are not in Warband, please report to me.
If everything is fine, please post the files in the WSE2 topic. Include bat files, module_config_template.ini, any edited brf, fx and fxo.
Last edited:


Sergeant Knight at Arms
It is now possible to support WSE2 development on patreon or boosty. With financial support, I will be able to devote more time to development.

  • Scene editor, more convenient and functional than warband.
  • Changing physics engine (required for x64, the latest open havok version is obsolete and does not support x64).
  • x64 build for huge modules.
  • DX11/DX12/Vulkan support.
  • Plugin system.
Last edited:


Master Knight
You know, now when I think about it I might actually get convinced to use WSE2 :thinking:
Let's see how the development goes. Good luck!


Is the source on github or somewhere else in version control? The old WSE was if I remember correctly.
Great stuff you did there  :fruity:


Interesting. Did you get the source from cmp, or did you figure it out from the built files provided with cRPG? In either case, this is impressive. Solid work, yo.

Interesting, it encompasses more than the new graphics library. Here are the new addon operations I could find using a diff tool:

  • break_loop                                  = 8 #(break_loop), #Break out of a loop, no matter how deeply nested in try_begin blocks (requires allow_wse_execute_statement_blocks = 1 in wse_settings.ini)
  • continue_loop                              = 9 #(continue_loop), #Continue to the next iteration of a loop, no matter how deeply nested in try_begin blocks (requires allow_wse_execute_statement_blocks  = 1 in wse_settings.ini)
  • try_for_dict_keys                          = 18 #(try_for_dict_keys, <cur_key_string_register>, <dict>), #Loops through keys of <2> (requires allow_wse_execute_statement_blocks = 1 in wse_settings.ini)
  • agent_get_ranged_damage_modifier = 3323 #(agent_get_ranged_damage_modifier, <destination>, <agent_no>), #Stores <agent_no>'s ranged damage modifier into <destination>
  • agent_add_stun                          = 3324 #(agent_add_stun, <agent_no>, <duration>), #Adds stun to <agent_no> for <duration> milliseconds
  • multiplayer_cur_profile_get_skin      = 3414 #(multiplayer_cur_profile_get_skin, <destination>), #Stores current profile's skin into <destination>
  • get_camera_position                    = 3615 #(get_camera_position, <position_register_no>), #Stores camera position and rotation into <position_register_no>
  • item_set_horse_blood_particles      = 3809 #(item_set_horse_blood_particles, <item_kind_no>, <particle_1_no>, <particle_2_no>), #Sets <item_kind_no>'s horse blood <particle_1_no> and <particle_2_no>

New Trigger:

ti_on_shield_penetrated = -107.0 #can only be used in module_mission_templates triggers
# Trigger Param 1: receiver agent no
# Trigger Param 2: dealer agent no
# Trigger Param 3: inflicted damage
# Trigger Param 4: raw damage (before being soaked by armor)
# Trigger Param 5: item kind no
# Trigger Param 6: item modifier
# Trigger Param 7: missile item kind no
# Trigger Param 8: missile item modifier

# Trigger Result: if set, do not penetrate shield



This is super exciting! I'm very keen to get into the arrays and dicts. Btw, with those having save to and load from file options, is that necessary for them to persist if the player quits and restarts the game? Or is it just for the potential to load values into a different save?


Really cool stuff. I can't say I'm a WSE man myself, but I will give it a try, now. Thanks for your efforts!


Awesome! But few things I've noticed;

Characters tab is not accessible from the map, C key is not working and manually clicking doesn't work either. (Tested with Native)

Mods with custom ingame banner creators have transperant banners on world map, thus not showing the banner created by the player, it was working with WSE 1.174. If its something that I can solve can anyone show me what to look for?





Khamukkamu said:
Is there another way to enable Cheat Mode (e.g Ctrl+ Mouse Click for teleport)? Thanks!

options_set_cheat_mode in header_operations_addon.py

EDIT: Actually now that I'm testing it I see what you were asking, there's no option to enable it in launcher, which makes things a bit difficult. Outside of modding it in, it looks like it's impossible to enable cheats...


Master Knight
Do WSEs by any chance solve the infantry clash lag (caused by too many loads) or any of ctds issues?


Trying to run with NeoGK and I am receiving the following error:
ERROR: Number of alternatives exceeds 3 for shader agent_shader

After some googling, this forum thread from cmp seems to be related, but that config file no longer exists with WSE2: http://forum.melee.org/crpg-client-beta/number-of-alternatives-exceeds-3-for-shader-def_shader/

Any thoughts on this one?
Top Bottom