Warband Script Enhancer 2 (v1.1.0.5)

正在查看此主题的用户

how do i fix this crash? it appears when i click play online in full invasion osiris mod
F50EE2A85F562034E420845B27B9B7EE40430E15

ps: i can't send the logs here bcs it's too long.
use dropbox or google drive for logs
 
I was surprised to find out there's a 64-bit version of Warband for Linux and Mac, but I'd guess you were aware and that it's not useful/salvageable in any way for developing 64-bit Windows WSE?

No idea how that stuff works, thought I'd mention it on the off chance I guessed wrong. It's a sad waste really, they never fixed all the bugs Linux/Mac Warband has and WSE is better than it in every way (except 32-bit). So everyone on Linux uses WSE.

Thank you a lot for this and your continued work and support on it, by the way. It's given me many hours of joy and let me play Warband again. I gave up on it until I heard of WSE, since Linux Warband is a mess and Windows Warband was giving me other issues like random CTDs, but WSE works flawlessly.
Hey I am loving WSE2 and I'm glad it is created, but I plan on swapping to linux and I saw that people got it to work via bottles but I would like to know how to perform it. And also I was curious if you lose on features compared to normally running it on windows. Thanks a bunch and if you don't want to crowd the thread please pm me.
On Linux, whatever you launch and manage games with, you'll want to run Windows Warband through Proton (Wine fork for gaming). Not familiar with Bottles, if it's like Steam or Lutris, you should be able to add the game to it and configure it to run with Proton if it doesn't automatically. As an example since it's probably a similar idea, with Steam you just right click Warband in your library, go to Properties and Compatibility, check the box, pick a Proton version, then Warband should work. Then you install WSE the same way you would following the Windows instructions.

I use the GloriousEggroll Proton fork. Can't post links since I was a lurker who only now registered after your post motivated me to reply, but it's on Github and is usually best for games. It works with Steam and Lutris, should for Bottles too. If WSE doesn't run and gives an error, the Wine prefix it's installed in is probably just missing the required Visual C++ library (can't remember if I had to go out of my way to install it or not). If so, all you need to do to fix it is install the Microsoft Visual C++ 2012 Redistributable Package (x86) using Winetricks or Protontricks.

WSE should work perfectly on Linux, you won't miss out on anything. Didn't PM you in case the above could be helpful to anyone else in a search, but feel free to PM me if you need more help; happy to help someone else get started with Linux.
 
hello k700 i have a question. After the last updates wse2 launcher automatically execute the game from steam library even though i downloaded in non-steam version. I want to keep playing offsteam. Is there a way to make it possible without closing steam?
 
hello k700 i have a question. After the last updates wse2 launcher automatically execute the game from steam library even though i downloaded in non-steam version. I want to keep playing offsteam. Is there a way to make it possible without closing steam?
no, this is not provided, wse2 always checks the running steam to display mods from the workshop
 
when i updated it to 1.0.9.9 the game refuses to launch and just gives the "the procedure entry point steamgameserver_init could not be located" error, please help me, it worked fine before 😭
 
最后编辑:
I did but sadly it seems that putting in the steam_api.dll from WSE2, while it does allow WSE2 to work, causes the vanilla launcher to always crash with the same error. So it's either one or the other. I'm a map maker and I can't get the map editor to work on WSE2 so I regrettably have to choose vanilla over WSE2. A shame because the previous version (1.0.9.6 i believe) worked for both
 
最后编辑:
I did but sadly it seems that putting in the steam_api.dll from WSE2, while it does allow WSE2 to work, causes the vanilla launcher to always crash with the same error. So it's either one or the other. I'm a map maker and I can't get the map editor to work on WSE2 so I regrettably have to choose vanilla over WSE2. A shame because the previous version (1.0.9.6 i believe) worked for both
Try downloading manually instead of updating online.
 
Since others have asked similar engine questions, how is agent movement speed calculated? Curious how agility and encumbrance affect it. Is it also true agility doesn't affect weapon swing speed as it was apparently intended to?
 
1.1.0.0
-Renamed fmodex.dll and steam_api.dll to prevent compatibility issues with vanilla game in same folder.
-Fixed agent_get_bone_position operation.


To update the launcher, install WSE2 from the header of this topic.
 
Since others have asked similar engine questions, how is agent movement speed calculated? Curious how agility and encumbrance affect it. Is it also true agility doesn't affect weapon swing speed as it was apparently intended to?

C++:
rglVector2 mbAgent::calculateMaxSpeed()
{
    float sprintFactor = 1.0f;
    float aiFactor = 1.0f;
    float externalFactor = 1.0f;

    if (m_isSprinting && m_sprintTimer.getElapsedTime() > 0.0f)
        sprintFactor = rglMin(m_sprintTimer.getElapsedTime() * 0.2f, 0.2f) + 1.0f;

    if (m_ai.m_behavior == aisb_run_away)
        aiFactor = 1.1f;

    if (m_position.z < g_mission->m_waterLevel)
        externalFactor = rglMax(1.0f - (g_mission->m_waterLevel - m_position.z) * 0.5f, 0.4f);
    else if (g_mission->m_weather.m_precipitationType == wpr_rain)
        externalFactor = 0.9f;

    float maxExternalFactor = externalFactor * aiFactor * sprintFactor * m_modifiers[am_speed];
    rglVector2 maxSpeed = getBaseMaxSpeed();

    maxSpeed *= aiFactor;
    maxSpeed *= sprintFactor;
    maxSpeed *= m_modifiers[am_speed];

    int actionNo = m_actionChannels[1].m_actionNo;

    if (actionNo == anim_ready_bow && m_actionChannels[1].m_progress > 0.5f)
        maxSpeed.y *= 0.8f;

    mbItem wieldedItem = getWieldedItem(ah_primary);

    if (maxSpeed.y < 0.0f)
    {
        if (wieldedItem.isValid())
        {
            if (wieldedItem.getItemKind()->isRangedWeapon())
            {
                switch (actionNo)
                {
                case anim_ready_bow:
                case anim_ready_crossbow:
                case anim_ready_musket:
                case anim_ready_pistol:
                case anim_crouch_ready_pistol:
                case anim_ready_javelin:
                case anim_ready_throwing_axe:
                case anim_ready_stone:
                case anim_ready_throwing_knife:
                case anim_release_javelin:
                case anim_release_throwing_axe:
                case anim_release_stone:
                case anim_release_throwing_knife:
                    maxSpeed.y *= 0.6f;
                    break;
                }
            }
        }
    }

    rglVector4 direction(maxSpeed.x, maxSpeed.y, 0.0f);

    direction.normalize();
    direction = m_groundQuad->getNormal().cross(m_scaledTransform.transformDirToParent(direction).cross(m_groundQuad->getNormal()));
    direction.normalize();

    float groundFactor = 1.0f;

    if (direction.z <= 0.01f)
    {
        if (direction.z < -0.3f)
        {
            groundFactor = direction.z * 0.5f + 1.0f;

            if (m_groundQuad->getNormal().z < 0.7f && m_groundQuad->m_flags & (bf_ladder|bf_terrain_quad))
                groundFactor *= rglMax(m_groundQuad->getNormal().z - 0.2f, 0.0f) * 2 + 0.05f;
        }
    }
    else
    {
        groundFactor = 1.0f - direction.z * 0.8f;

        if (m_groundQuad->getNormal().z < 0.6f)
        {
            if (m_groundQuad->m_flags & bf_terrain_quad)
                groundFactor *= rglMax(m_groundQuad->getNormal().z - 0.3f, 0.0f) / 0.3f;
            else if (m_groundQuad->m_flags & bf_ladder)
                groundFactor *= rglMax(m_groundQuad->getNormal().z - 0.3f, 0.0f) / 0.3f + 0.05f;
        }
    }

    if (g_networkManager.m_extendedVersion >= 61)
    {
        if (m_friction.z > 0.0001f)
            groundFactor *= rglMax(1.0f - m_friction.z * 0.2f, 0.0f);
        else if (m_friction.z < -0.0001f)
            groundFactor *= rglMax(1.0f + m_friction.z * 0.5f, 0.0f);
    }
    else
    {
        if (m_friction.z > 0.0001f)
            groundFactor *= 1.0f - m_friction.z * 0.2f;
        else if (m_friction.z < -0.0001f)
            groundFactor *= rglMax(m_friction.z * 0.5f + 0.7f, 0.0f);
    }

    float maxGroundFactor = groundFactor * aiFactor * sprintFactor * m_modifiers[am_speed];

    if (maxSpeed.y < -0.1f)
    {
        maxGroundFactor *= 0.9f;
        maxExternalFactor *= 0.9f;
    }

    float maxSpeedFactor = maxSpeed.length();

    if (maxSpeedFactor > 0.0f)
        maxSpeed /= maxSpeedFactor;

    maxSpeedFactor = rglMin(maxSpeedFactor, maxExternalFactor);
    maxSpeedFactor = rglMin(maxSpeedFactor, maxGroundFactor);

    float weightFactor = m_itemWeight;

    if (wieldedItem.isValid())
        weightFactor += wieldedItem.getItemKind()->getWeaponLength() * wieldedItem.getItemKind()->m_weight * 2.5f;

    mbTroop *troop = getTroop();
    int agility = troop->getAttribute(atr_agi);
    int athletics = troop->getSkill(skl_athletics);

    float troopFactor;
    if (rglConfig::Battle::bCanRunFasterWithSkills)
        troopFactor = ((agility + athletics * 6.0f + 25.0f) * 30.0f / (weightFactor + 30.0f) + 90.0f) / 100.0f;
    else
        troopFactor = ((agility * 0.7f + athletics * 3.0f + 25.0f) * 70.0f / (weightFactor + 70.0f) + 90.0f) / 100.0f;

    maxSpeed *= maxSpeedFactor;
    maxSpeed *= 2.5f;
    maxSpeed *= troopFactor;
    maxSpeed.x *= 0.95f;
    return maxSpeed;
}

agility doesn't affect weapon swing speed
 
How to delete a scene prop instance?
like:
ti_on_item_picked_up # Trigger Param 3: scene prop id (will be deleted after this trigger)
 
scene_prop_set_prune_time, but works only with spawned items
for props it is better to practice reuse, for useless props turn off physics and hide them
 
后退
顶部 底部