• New Horizons on Maelstrom
    Maelstrom New Horizons


    Visit our website www.piratehorizons.com to quickly find download links for the newest versions of our New Horizons mods Beyond New Horizons and Maelstrom New Horizons!

Fixed Levelling: Cannonball Hits Slow Down Game

Despite my laptop being set to "High Performance" now, I got a pretty bad example of this issue.
I was sailing the cursed Flying Dutchman and fired my starboard cannons on the Kralendijk fort while at the same time firing the port ones on a passing ship.
Very notable slow-down there.

I wrote somewhere in my previous posts: I'm not totally satisfied with the performance in 3D sailing mode, but still, for me, it's better now than in version 3.4 which I was playing until recently. There is no more chopping, but performance could be way better considering that it's a game which has very low system requirements, 256 MB RAM was recommended if I remember well.

Also, I noticed that I get fps drop when in Tortuga port...
 
I wrote somewhere in my previous posts: I'm not totally satisfied with the performance in 3D sailing mode, but still, for me, it's better now than in version 3.4 which I was playing until recently. There is no more chopping, but performance could be way better considering that it's a game which has very low system requirements, 256 MB RAM was recommended if I remember well.
What circumstances while in 3D Sailing Mode?
I know the choppiness was fixed, because I finally did that myself as it kept getting worse and worse with each new update due to sloppy coding.
So that is well and truly done for. The only situation that I know is, as per this thread title, related to cannons.

Also, I noticed that I get fps drop when in Tortuga port...
Ashore, you mean?
Feature Request - Levelling: Improve Performance After Location Load | PiratesAhoy!
 
What circumstances while in 3D Sailing Mode?
I know the choppiness was fixed, because I finally did that myself as it kept getting worse and worse with each new update due to sloppy coding.
So that is well and truly done for. The only situation that I know is, as per this thread title, related to cannons.

When there is a large battle, with a lot of ships.
Also, it seems to me that it's not the same in every part of the day (like in the evening or daytime, or when it's raining), but I cannot confirm this still.

Ashore, you mean?

Yes, when walking through the city of Tortuga.
 
When there is a large battle, with a lot of ships.
Battle. Exactly as I thought.

Yes, when walking through the city of Tortuga.
If you wait for a while, does it get better? If it is what I think it is, it should indeed.
And it should also be better when you return there in the future; it is worst the first time you load the location.
 
Battle. Exactly as I thought.


If you wait for a while, does it get better? If it is what I think it is, it should indeed.
And it should also be better when you return there in the future; it is worst the first time you load the location.

I know what you mean. The experience gaining system? I think it's not that. In other towns, it also used to lag a few seconds after loading (usually 5-7 seconds), but in Tortuga it's different, it's constantly on lowered fps. It's very noticable. In other cities it's smooth. Maybe it's because Tortuga is a large town and has a lot of things going on all the time (duels, pistols firing, skeletons chasing priests etc.).
 
Ok, so I have to return to this post. I can now confirm that performance drops are occuring when firing cannons, especially with large ships that have a lot of cannons. When firing with my 2nd class battle ship which has 70 cannons, it sometimes seems impossible to play.
What I did after that - I tried tweaking some settings to see if it would get better. At the moment, I'm testing this.
It seems to improve performance, but I have yet to see. I also uninstalled ENB. The current ENB was making too much post processing which was killing my eyes. Now everything looks sharper. With the current ENB, I used to see models doubled like a drunk man, which wasn't so pleasant for my eyes :D
Untitled.jpg
 
Ah, indeed if you've already got performance issues, DON'T use ENB!
That is quite heavy on your computer.

I do use it myself, but it hasn't bothered me so far.
 
Ah, indeed if you've already got performance issues, DON'T use ENB!
That is quite heavy on your computer.

I do use it myself, but it hasn't bothered me so far.

Ok, did a lot of testing. I have tested all the compatibility settings. I also did some reading on this issue. ENB is not eating memory and it barely has any impact on performance. Maybe on old graphic cards and older systems with 1GB of RAM or less it might have made the difference. I play Red Orchestra 2 on my PC with constant 50-60 fps. POTC is too old to be making any problems with performance. I think that the problem is not with smoke from the cannons. There must be something with the cannon fire itself. Did you guys retexture the gun firing?]
This is what improved my gameplay in naval battles a lot. It's still not the best, but it clearly makes difference. What I also noticed is that when you receive damage on your ship, it also drops performance (for example: hull parts and barrels falling from the ship, and crew also). When you enable "Run in 640x480 screen resolution, it actually doesn't change the resolution, but my performance is a lot better.

Untitled.jpg
 
There must be something with the cannon fire itself. Did you guys retexture the gun firing?]
I suspect some sort of mod-added calculations. There is probably a LOT going on with the whole "tracking every cannonball" thing.
Textures wouldn't cause it.

Anyway, I don't consider it important enough to focus on before the Beta 4 public release.
Maybe later for Beta 4.
 
Have you tried setting up a profile for POTC in your video card control panel? I have been having performance issues and set up a profile just for POTC. It now runs great except when I fire cannons and as long as the smoke is there performance is poor. This is because I have it set to "supersampling" now as there used to be no performance hit.

Anyway, POTC is a different can of worms from other games and does need its own settings.
 
Ok, I guess this one goes on this topic. Constant performance issues in 3D sailing mode after leveling my hero. At the moment I'm level 23. When I first started a new game I didn't have any issues with naval battles. But now, every time I fire cannons on a ship, the game stutters for every hit that I make on another ship. I don't know if that has to do anything with the leveling system, but I'm 100% sure that the stuttering does not occur because of the cannon fire or particles, it's the hit on enemies ship that causes this. Hope someone can help me with this, cause it's making my gameplay impossible and unenjoyable to the point where I don't want to play naval battles, and they make a good part of this game...
 
Got a savegame?
 
Ok, I guess this one goes on this topic. Constant performance issues in 3D sailing mode after leveling my hero. At the moment I'm level 23. When I first started a new game I didn't have any issues with naval battles. But now, every time I fire cannons on a ship, the game stutters for every hit that I make on another ship. I don't know if that has to do anything with the leveling system, but I'm 100% sure that the stuttering does not occur because of the cannon fire or particles, it's the hit on enemies ship that causes this. Hope someone can help me with this, cause it's making my gameplay impossible and unenjoyable to the point where I don't want to play naval battles, and they make a good part of this game...
Sounds like that's the same issue I reported last month, so merged the two threads.
 
I guess this function is the culprit:
Code:
void Ship_HullHitEvent()
{
    float    fHP;

    int        iBallType = sti(AIBalls.CurrentBallType);

    aref    rShipObject = GetEventData();

    int        iBallCharacterIndex = GetEventData();
    int        iOurCharacterIndex = GetEventData();

    ref        rBallCharacter = GetCharacter(iBallCharacterIndex);
    ref        rOurCharacter = GetCharacter(iOurCharacterIndex);

    rOurCharacter.Ship.LastBallCharacter = iBallCharacterIndex;
    rBallCharacter.Ship.lasttgt = iOurCharacterIndex; // NK 04-09-16 to see who AI is attacking

    int        iCompanion = GetCompanionNumber(rBallCharacter, iOurCharacterIndex);

    float    x = GetEventData();
    float    y = GetEventData();
    float    z = GetEventData();

    int        iFirePlaceIndex = GetEventData();
    float    fFirePlaceDistance = GetEventData();

    bool    bDead = LAi_IsDead(rOurCharacter);

    bool    bSeriousBoom = false;
    bool    bInflame = false;

    // NK 05-04-18 to handle relation change for REAL_CANNONS
    if(iBallCharacterIndex == GetMainCharacterIndex() && USE_REAL_CANNONS && EXTRA_HIT_CHECK && rOurCharacter.ship.type != SHIP_FORT_NAME)
    {
        int currel = SeaAI_GetRelation(iOurCharacterIndex, iBallCharacterIndex) ;
        if(currel != RELATION_ENEMY && !CheckAttribute(rOurCharacter,"surrendered")) // NK surrender 05-04-20
        {
            aref aShips; makearef(aShips, rBallCharacter.SeaAI.Update.Ships);
            int iShipsNum = GetAttributesNum(aShips);
            int s;
            bool enemy = false;
            for (s=0; s<iShipsNum; s++)
            {
                aref aShip = GetAttributeN(aShips, s);
                if (sti(aShip.relation) == RELATION_ENEMY) { enemy = true; break; }
            }
            ref cmdr = Group_GetGroupCommander(GetGroupIDFromCharacter(&rOurCharacter));
            if (!enemy) {
                Event(SHIP_FIRE_ACTION, "iil", &rOurCharacter, &cmdr, currel); // if there's no enemy, then you have no excuse.
            } else {
                if (!CheckAttribute(rOurCharacter, "numhits")) {
                    rOurCharacter.numhits = 1;
                } else {
                    int curhits = sti(rOurCharacter.numhits); // max of cqty / 2 hits.
                    if (curhits > GetCannonMaxQuantity(&rBallCharacter) / 2) {
                        Event(SHIP_FIRE_ACTION, "iil", &rOurCharacter, &cmdr, currel);
                    } else {
                        curhits++;
                        rOurCharacter.numhits = curhits;
                    }
                }
            }
        }
    }
    if(iBallCharacterIndex != GetMainCharacterIndex() && CheckAttribute(rOurCharacter,"surrendered")) return; // NK because AI doesn't respect surrender. 05-04-23
    // NK <--

    // Cannon damage multiply
    ref rCannon = GetCannonByType(sti(rBallCharacter.Ship.Cannons.Type));
    float maxqty, fCannonDamageMultiply;
    // THIS IS NOT NEEDED ANY MORE. But the comment is left and the code commented. NK 04-09-15 to simulate fewer crew manning fewer guns. Hence reload rate will now go back to constant.
    // KNB 05-02-04 changed this a bit: there is no penalty for >60% crew and the minimum damage is 10%
    // now use cannon qty rather than crew mult. 05-04-18
// KK -->
    fCannonDamageMultiply = stf(rCannon.DamageMultiply);
    if(USE_REAL_CANNONS)
    {
        // KNB 04-01-17 distance/aspect based damage multipliers -->
        float fShotDistance = Ship_GetDistance2D(rBallCharacter, rOurCharacter);
        if(fShotDistance < 0) fShotDistance = 500; // NK for when dist < 0 05-04-15
        if (rOurCharacter.Ship.Type != SHIP_FORT_NAME && rBallCharacter.Ship.Type != SHIP_FORT_NAME)
        {
            float fShotSpeed = rCannon.SpeedV0 * stf(Goods[iBallType].SpeedV0);
            float fBallAngle = 0;
            float fOurAngle = 0;

            fCannonDamageMultiply *= 2 * pow(1-1/(2.25*fShotSpeed),fShotDistance); // 2x at point blank, decreasing exponentially with range

            if (iBallType != GOOD_GRAPES)
            {
                if(CheckAttribute(rOurCharacter,"ship.ang.y")) // NK for checking atttributes first before we need CheckAttribute(rBallCharacter,"ship.ang.y") &&  to
                {
                    // NK now get angle from AIBalls, this requires reversing of the B2R.
                    fBallAngle = clampangle(stf(AIBalls.Dir)+PI); fOurAngle = stf(rOurCharacter.Ship.Ang.y);
                    fCannonDamageMultiply *= Bring2Range(0.50, 2.0, 0.0, 1.0, abs(GetDotProduct(fBallAngle,fOurAngle))); //50%-200% depending on angle
                }
            }
        }
    }
    // <-- KNB
// <-- KK

    if (sti(rBallCharacter.TmpPerks.CriticalShoot) && rand(19)==10) { bSeriousBoom = true; }        // +5%
    if (sti(rBallCharacter.TmpPerks.CannonProfessional) && rand(9)==4) { bSeriousBoom = true; }        // +10%

    ref rBall = GetGoodByType(iBallType);
    switch (iBallType)
    {
// TIH --> this section adjusted to be a bit more understandable in setting, and reasonable in graphics Nov13'06
// Removal of "CreateBlastM()" function due to that function causing a CTD in battles Nov12'06
    // NK add USE_PARTICLES switch // TIH changed to own switch SHIPHIT_PARTICLES 7-7-06
    // Ball_impact and splinters by MM
    // By MM, Flames and Critical hits only present on bombs now. // changed to add a rare chance (otherwise what's the POINT of the PERKS?)
        case GOOD_BALLS:
            if (rand(1)) { bSeriousBoom = false; }// pref toggle and 50% chance a possible critical hit is allowed
            if (rand(32) == 1) { bInflame = true; }// pref toggle and 3% chance ship catches on fire from hit
            Play3DSound("ball2bort", x, y, z);
            switch(SHIPHIT_PARTICLES)
            {
                case 0: CreateParticleSystem("blast", x, y, z, 0.0, 0.0, 0.0, 0); break; // one orange puff // stock behavior
                case 1:
                        CreateParticleSystem("ball_impact", x, y, z, 0.0, 0.0, 0.0, 0); // two small gray puffs
                break;
                case 2:
                        CreateParticleSystem("ball_impact_enhanced", x, y, z, 0.0, 0.0, 0.0, 0);  // wood dust
                        CreateParticleSystem("splinters_enhanced", x, y, z, 0.0, 0.0, 0.0, 0);    // twenty-four small splinters
                        CreateParticleSystem("splinters2_enhanced", x, y, z, 0.0, 0.0, 0.0, 0);    // twenty-four medium splinters
                break;
                case 3:
                        CreateBlast(x,y,z); // excessive plume of planks and barrels, causing big water splashes
                        CreateParticleSystem("ball_impact", x, y, z, 0.0, 0.0, 0.0, 0);    // two small gray puffs
                        CreateParticleSystem("splinters2", x, y, z, 0.0, 0.0, 0.0, 0);    // six medium splinters
                        CreateParticleSystem("splinters3", x, y, z, 0.0, 0.0, 0.0, 0);    // five large splinters
                        CreateParticleSystem("flyers", x, y, z, 0.0, 0.0, 0.0, 0);
                        CreateParticleSystem("flyers2", x, y, z, 0.0, 0.0, 0.0, 0);
                break;
            }
        break;
        case GOOD_GRAPES:
            bSeriousBoom = false;
            bInflame = false;
            Play3DSound("grapes2bort", x, y, z);
            switch(SHIPHIT_PARTICLES)
            {
                case 0: CreateParticleSystem("blast", x, y, z, 0.0, 0.0, 0.0, 0); break; // one orange puff // stock behavior
                case 1:
                    CreateParticleSystem("ball_impact", x, y, z, 0.0, 0.0, 0.0, 0);
                break;
                case 2:
                    CreateParticleSystem("ball_impact", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("splinters", x, y, z, 0.0, 0.0, 0.0, 0);
                break;
                case 3:
                    CreateBlast(x,y,z);
                    CreateParticleSystem("ball_impact", x, y, z, 0.0, 0.0, 0.0, 0);
                break;
            }
        break;
        case GOOD_KNIPPELS:
            bSeriousBoom = false;
            bInflame = false;
            Play3DSound("knippel2bort", x, y, z);
            switch(SHIPHIT_PARTICLES)
            {
                case 0: CreateParticleSystem("blast", x, y, z, 0.0, 0.0, 0.0, 0); break; // one orange puff // stock behavior
                case 1:
                    CreateParticleSystem("ball_impact", x, y, z, 0.0, 0.0, 0.0, 0);
                break;
                case 2:
                    CreateParticleSystem("ball_impact", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("splinters", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("splinters2", x, y, z, 0.0, 0.0, 0.0, 0);
                break;
                case 3:
                    CreateBlast(x,y,z);
                    CreateParticleSystem("ball_impact", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("flyers", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("flyers2", x, y, z, 0.0, 0.0, 0.0, 0);
                break;
            }
        break;
        case GOOD_BOMBS:
            if (rand(20) == 10) { bSeriousBoom = true; }
            if (rand(2) == 1) { bInflame = true; }
            Play3DSound("bomb2bort", x, y, z);
            switch(SHIPHIT_PARTICLES)
            {
                case 0: CreateParticleSystem("blast", x, y, z, 0.0, 0.0, 0.0, 0); break; // one orange puff // stock behavior
                case 1:
                    CreateParticleSystem("blast", x, y, z, 0.0, 0.0, 0.0, 0);
                break;
                case 2:
                    CreateBlast(x,y,z);
                    CreateParticleSystem("blast", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("flyers", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("flyers2", x, y, z, 0.0, 0.0, 0.0, 0);
                break;
                case 3:
                    CreateBlast(x,y,z);
                    CreateParticleSystem("blast", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("blast_inv", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("splinters2", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("splinters3", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("flyers", x, y, z, 0.0, 0.0, 0.0, 0);
                    CreateParticleSystem("flyers2", x, y, z, 0.0, 0.0, 0.0, 0);
                break;
            }
        break;
// TIH <-- end adjustment
    }

    // PB: Queen Anne's Revenge -->
    if(sti(GetAttribute(AIBalls, "GreekFire")))
    {
        bInflame = true;
        LogIt("Greek Fire hits the " + rOurCharacter.ship.name + "!")
    }
    // PB: Queen Anne's Revenge <--

    if (sti(rOurCharacter.TmpPerks.ShipDefenceProfessional) && frnd() < PROSHIPDEF_NOCRITCH) { bSeriousBoom = false; }                // no seriouse boom, NK 05-04-19 add setting

    if (!bDead)
    {
        float fCrewDamage;
        if (USE_REAL_CANNONS)
            fCrewDamage = stf(rBall.DamageCrew) * fCannonDamageMultiply * AIShip_isPerksUse(rBallCharacter.TmpPerks.CrewDamageUp, 1.0, 1.10); // 1.15  KNB;
        else
            fCrewDamage = stf(rBall.DamageCrew) * fCannonDamageMultiply * AIShip_isPerksUse(rBallCharacter.TmpPerks.CrewDamageUp, 1.0, 1.15);
// KK -->
//trace("fCrewDamage="+fCrewDamage);
        fCrewDamage = FRAND(fCrewDamage);
        int iRelation = SeaAI_GetRelation(iOurCharacterIndex, GetMainCharacterIndex());
        if (IsMainCharacter(rBallCharacter))
        {
            if (iRelation != RELATION_ENEMY)
            {
                AttackFriendlyShip(rOurCharacter, iRelation, false);                        // PB: General function also used by Ship_FireAction
            }
            // PB: Warning Note -->
            if (iRelation == RELATION_ENEMY && GetFlagRMRelation(sti(rOurCharacter.nation)) != RELATION_ENEMY)
            {
                if (sti(rOurCharacter.nation) != PIRATE && !CheckAttribute(rBallCharacter, "false_flag_note"))
                {
                    LogIt("Captain, we are under a flag friendly to the ship we're attacking. We may be branded a pirate if we don't hoist our true colours!");
                    PlaySound("INTERFACE\notebook.wav");
                    rBallCharacter.false_flag_note = true;
                }
            }
            // PB: Warning Note <--
        }

        if (LAi_IsImmortal(rOurCharacter) || LAi_IsCrewImmortal(rOurCharacter)) fCrewDamage = 0.0; // KK

        rOurCharacter.cannonhit = true; rOurCharacter.cannonhit.x = x; rOurCharacter.cannonhit.y = y; rOurCharacter.cannonhit.z = z; // NK 05-04-20 so cannon losing has pos for FX

        if (bSeriousBoom)
        {
            //fCrewDamage = fCrewDamage * 2.0; // stock
            //fHP = fCannonDamageMultiply * stf(rBall.DamageHull) * (4.0 + frnd() * 2.0); // stock
            //fCrewDamage = fCrewDamage * 5.0; // excessive
            //fHP = fCannonDamageMultiply * stf(rBall.DamageHull) * (80.0 + frnd() * 40.0); // excessive
            fHP = fCannonDamageMultiply * stf(rBall.DamageHull) * (2.0 + frnd());
            rOurCharacter.cannonhit.critchance = true; // NK 05-04-20 higher chance for loss of cannon on crit // TIH attribute renamed to critchance Nov13'06
            if (!LAi_IsImmortal(rOurCharacter)) Ship_ApplyHullHitpoints(rOurCharacter, fHP, KILL_BY_BALL, iBallCharacterIndex); // KK
            if (!LAi_IsImmortal(rOurCharacter) && !LAi_IsCrewImmortal(rOurCharacter)) Ship_ApplyCrewHitpoints(rOurCharacter, fCrewDamage  * (2.0 + frnd()) ); // KK
            //Ship_ApplyCrewHitpoints(rOurCharacter, fCrewDamage * 1.5); // stock
            if (iCompanion == -1)
            {
                if(AUTO_SKILL_SYSTEM)
                {
                    // LDH divide experience between cannons and accuracy - 27Dec08
                    Ship_AddCharacterExpChar(rBallCharacter, "Cannons", 100);
                    Ship_AddCharacterExpChar(rBallCharacter, "Accuracy", 100);
                }
                else
                {
                    Ship_AddCharacterExp(rBallCharacter, 150);
                }
            }

            if (iBallCharacterIndex == GetMainCharacterIndex())
            {
                Log_SetStringToLog(LanguageConvertString(iSeaSectionLang, "Ship_critical"));
            }
            if(AUTO_SKILL_SYSTEM)
            {
                // LDH divide experience between cannons and accuracy - 27Dec08
                Ship_AddCharacterExpChar(GetCharacter(iBallCharacterIndex), "Cannons", 500);
                Ship_AddCharacterExpChar(GetCharacter(iBallCharacterIndex), "Accuracy", 500);
            }
        }
        else
        {
            fHP = fCannonDamageMultiply * stf(rBall.DamageHull);
            if (!LAi_IsImmortal(rOurCharacter))                                            Ship_ApplyHullHitpoints(rOurCharacter, fHP, KILL_BY_BALL, iBallCharacterIndex); // KK 
            if (!LAi_IsImmortal(rOurCharacter) && !LAi_IsCrewImmortal(rOurCharacter))    Ship_ApplyCrewHitpoints(rOurCharacter, fCrewDamage); // moved from below, so not applied twice during crits // KK
            if (iCompanion == - 1)
            {
                if(AUTO_SKILL_SYSTEM)
                {
                    Ship_AddCharacterExpChar(rBallCharacter, "Cannons", 20);
                }
                else
                {
                    Ship_AddCharacterExp(rBallCharacter, 20);
                }
            }
            if(AUTO_SKILL_SYSTEM)
            {
                // LDH divide experience between cannons and accuracy - 27Dec08
                Ship_AddCharacterExpChar(GetCharacter(iBallCharacterIndex), "Cannons", 125);
                Ship_AddCharacterExpChar(GetCharacter(iBallCharacterIndex), "Accuracy", 125);
            }
        }
        DeleteAttribute(&rOurCharacter, "cannonhit"); // NK 05-04-20 cannon lost FX

        //Ship_ApplyCrewHitpoints(rOurCharacter, fCrewDamage); // moved up, so not applied twice during crits
    }

    if (bInflame == true && fFirePlaceDistance < 4.0 && iFirePlaceIndex >= 0)
    {
        int iRandStartTime = rand(1000);
        float fTotalFireTime = Ship_GetTotalFireTime(rOurCharacter);

        PostEvent(SHIP_ACTIVATE_FIRE_PLACE, iRandStartTime, "ialsf", rShipObject, rOurCharacter, iFirePlaceIndex, "ship_onfire", fTotalFireTime);
        PostEvent(SHIP_FIRE_DAMAGE, iRandStartTime, "lllf", iOurCharacterIndex, iBallCharacterIndex, iFirePlaceIndex, fTotalFireTime);
    }

    if (bSeriousBoom == true) //{ Ship_Serious_Boom(x, y, z); } // NK modify coords some 05-04-18 -->
    {
        if(SHIPHIT_PARTICLES==3) { Ship_Detonate(rOurCharacter, false, false); }//{ Ship_Serious_Boom(x-1+frnd()*2, y-1+frnd()*2, z-1+frnd()*2); }
        else { Ship_Serious_Boom(x, y, z); }
    }
}

I'd say best way to find out is just commenting out large pieces of it and seeing if it improves performance or not. then slowly bring stuff back untill you commented out as few as possible while still have the performance gain.
The lines which are still commented must be causing the problem so we need to look at them.
If you for example want to know if the leveling is the problem just comment out all lines concerning XP and test it. But the performance of these functions shouldn't differ if you are level 1 or level 100
 
Would be good if someone could do that "commenting out" test to narrow this one down. Ideally not me. And also not @Levis.

@Mirsaneli: This might be an interesting one for you! Not technically complicated and most definitely worth sorting out!
You don't need to actually fix it. But if you can narrow it down, that will help quite a bit. :doff
 
Yeah, I do have a savegame, please test it and tell me how it behaves on your PC.
On my pc it will behave well no doubt.
All performance issues everybody reported till now didn't show on my pc because it's (custom)made for very heavy calculation jobs because of my work/study XD.

Please try to do what I described above and try to narrow down where the problem lies :).
Thats what I would try to do with the savegame, but I had to add my timer function again to test it and check it in milliseconds to see if it became better or not.
 
Here's the savegame. I'm currently sailing under French flag. You can freely attack those two ships, just hoist the pirate flag and try it out. It super stuttered on my PC :/
 

Attachments

  • savegame.rar
    693.5 KB · Views: 88
Would be good if someone could do that "commenting out" test to narrow this one down. Ideally not me. And also not @Levis.

@Mirsaneli: This might be an interesting one for you! Not technically complicated and most definitely worth sorting out!
You don't need to actually fix it. But if you can narrow it down, that will help quite a bit. :doff

Give me some steps how this works? What should I open and which lines should I edit?
 
Back
Top