Source Help Mothanna TOP 2022 DX9 — 120 FPS causes accelerated animations and rendering issues. Which base and approach should I use?

remanuel

Pirate
Registered
LV
0
 
Joined
Sep 4, 2026
Messages
5
Reaction score
3
Points
5
Hi everyone,:BlueSquidCool::BlueSquidLove:

I need advice on how to improve my Tales of Pirates client. I have attached a video showing the problems.

I downloaded Montana’s 2022 DX9 release and have been customizing my server, mainly decorating Argent, editing object placement and collisions, and changing some building textures.

I am not a programmer. I work with AI coding assistants such as Codex and Claude through their apps and terminals. They have helped me make many changes, but my own ability to understand, modify and debug the source code is limited.

The 120 FPS work has turned into repeated patching, compiling and testing. Each attempt takes time and consumes a significant amount of my AI usage allowance, but the underlying problems remain unresolved. I cannot reliably judge whether the suggested changes are appropriate for this engine.

That is why I am asking here: I would appreciate guidance from people familiar with this codebase before continuing with more experimental patches.

What I want to achieve

  • Smooth gameplay at 120 FPS, with normal character movement and correctly timed monster animations, wings, fairies, skills and environmental effects.
  • Better directional shadows for characters, buildings and scenery, giving the impression of sunlight.
  • Preserve my customized Argent, including object placement, collision edits and modified textures.
I am happy to stay on DirectX 9 if these improvements can be implemented reliably. Moving to DirectX 11 is not a goal by itself.

What is going wrong

The FPS counter reaches approximately 120, and some aspects feel smoother. However, many animated elements become visibly too fast: wings, fairies, the rotating GM logo, dropped item bags moving up and down, monster animations, leaves and butterflies.

Across different patch attempts, my character’s apparent movement speed also changed. Some versions introduced considerable stuttering.

Another problem is that almost the entire world sometimes disappears into a solid blue background, while parts of the HUD, names and some effects remain visible. Opening the inventory with the I key temporarily made the world render correctly again.

The inventory’s animated 3D character preview was already unreliable before these experiments. This may be relevant, but I do not know whether the problems share the same cause.

What the patch actually changes

The following is a summary of the source changes made with AI assistance. We are rebuilding Game.exe and MindPower3D_D8R.dll from the 32-bit DX9 source and testing them in a separate client copy.

1. Separating rendering from game updates

In GameAppInterface.cpp, the patch keeps CSteadyFrame driving game updates at a target of 60 Hz and adds a QueryPerformanceCounter timer to schedule rendering at up to 120 FPS.

Additional frames draw the current world state between game updates. No general interpolation system has been implemented.

2. Preventing additional draws from advancing effects again

Some animation and effect updates were found inside rendering functions.

A flag called g_bMPPresentationOnly was added to distinguish additional draws from draws allowed to advance those systems. Guards were added around selected render-side updates, and the effect delta exposed by ResMgr.GetDailTime() is temporarily set to zero during presentation-only draws.

3. Trying a separate update rate for legacy visuals

The initial 60 Hz update / 120 FPS render split still produced accelerated effects.

A later attempt introduced g_bMPLegacyVisualTick, alternating on each game update. The intended rates are now:

  • Gameplay updates: 60 Hz.
  • Selected legacy animations and effects: 30 Hz.
  • Rendering: 120 FPS.
This gates selected updates in SceneFrameMove.cpp, the CCharacterModel::FrameMove() call in Character.cpp, and effect updates in MPResManger.cpp. Character gameplay updates continue at 60 Hz.

The 30 Hz visual rate was an experimental attempt to address the acceleration. We have not established that it is correct for every affected subsystem.

4. Investigating graphics state left behind by the UI

The animated inventory preview and HUD portraits were disabled.

The latest patch also restores the main camera view and world projection before each scheduled draw. This was intended to address additional frames potentially inheriting the UI camera state, especially because opening the inventory temporarily affected the blue rendering problem.

5. Adding timing logs

Earlier logs showed approximately 60 game updates and 120 renders per second. The latest revision also logs the visual update frequency.

However, these counters alone do not establish that movement and animation speeds are correct. The patch compiles, but we do not have a validated solution. The attached video shows the problems encountered during testing; the latest camera-restoration change still needs full in-game validation.

What is the correct implementation approach?

  • Is there a public, tested 120 FPS patch for Montana’s 2022 DX9 source?
  • What are the intended update rates for gameplay, model animations and particles in this version?
  • Which systems advance by frame count, and which already use elapsed time?
  • Is the approach described above incorrect, particularly the separate 30 Hz visual update?
  • Should animation and effect timing be converted to elapsed time instead?
  • Is interpolation required for characters, monsters and effects to look smooth at 120 FPS while their underlying logic updates less frequently?
  • Which source files or functions need to be changed together?
  • Does anyone recognize the blue rendering issue that temporarily disappears when opening the inventory?
I would like to fix the underlying timing and rendering problems rather than continue adjusting update rates without understanding their dependencies.

What about better shadows?

I have seen other TOP clients with directional shadows that follow character and scenery shapes, rather than only dark circles beneath characters.

Can similar shadows be implemented reliably in this 2022 DX9 base? Is there a public implementation, source patch or tutorial you would recommend?

I understand that better shadows have a performance cost. Adjustable quality, shadow distance and an option to disable them on weaker PCs would be ideal.

Did I choose the right release?

Before continuing, I would really appreciate advice on which base to use.

I started with Montana’s 2022 DX9 release, but I have also seen alexxstst’s 2026 x64 DX9 version:

Please, Log in or Register to view URLs content!


I do not know whether I downloaded the wrong files for my goals or whether the 2022 release is a suitable base that simply needs the correct implementation.

  • Can Montana’s 2022 version reliably support smooth 120 FPS and improved directional shadows?
  • Should I keep this base and apply a known patch?
  • Would you recommend alexxstst’s 2026 x64 version or another release instead?
  • Does the 2026 version already address these timing and shadow features, or would they still require additional development?
  • Is moving to DirectX 11 actually necessary, or can both goals be achieved with DirectX 9?
  • Which option would be easier to maintain and troubleshoot, considering stability, compatibility, documentation and community support?
My priority is a stable, manageable client. I do not need the newest release simply because it is newer, especially if it would be harder for someone with my limited technical knowledge to maintain.

If switching bases is the recommended path, the work I need to preserve is my customized Argent: its decoration, object placement, collision edits and custom textures. I do not mind starting over with accounts, characters or the interface.

Given these goals and the changes described above, which path would you recommend? Links to the exact release, patch, tutorial or relevant source code would be very helpful.

I can provide the modified source files or a diff if needed. Thank you for taking the time to help.
 

Attachments

Too my understanding, the Mindpower3D engine might be the cause, the way it was written wasn't expecting players even running at 6fps, it measure time differently. i would like to see what others think, but in todays era with AI its not crazy anymore to rewrite the engine with small team.
 
damn that too long post is it written with ai too?
short answer of everything is
ye this released source was base for everything you see everywhere so u can do whatever you want as far as you know what are you doing

for alex project seems still leftover no update on it , and its totally rewrite of source so if you don't know f# and rather write code in one source language like c++ sto stick to released source

does dx11 fix your fps issues? ofc no matter you do dx8 dx9 dx50 that won't change the fact alot of fps render handled manually in many places and one of core issues is network packet updates >specially for multi client fps would drop like crazy"
ai mostly won't help to fix fps issues easily it need to be split into many phases as small target todo parts
you have to fix few things first
refresh rate , with modern c++ rates
uv scroll animation ,
mindpower lwpose
chracter palypose ^ linked to lwpose as well but some few difference

fps took from me before aorund 10-15 big commits on dx8 to get stability
and 5-6 with bgfx
also alex client fps not stable and have huge drop for multi clients
i have full audits of my fps rework but it can't be uploaded here forum don't support md
 
  • Like
Reactions: remanuel
Thanks, :)(y)that gives me a much clearer direction. I will stay on the public 2022 DX9 source and work in small phases.

I am not asking for your source or paid work. I only need the correct public starting points, because my previous 120 FPS tests made character poses, mobs, wings, UV effects and particles run too fast.

In the released source I can see:

  • <span>CSteadyFrame</span> still uses the old 30/60 FPS logic.
  • <span>CharacterModel::PlayPose</span> uses <span>30.0f / fps</span>, plus the <span>IsGlitched</span> multiplier.
  • <span>lwPoseCtrl</span> advances poses by <span>velocity</span> every update.
Could you please clarify these points?
  1. For the first phase, should I replace/rework <span>CSteadyFrame</span> so rendering can run at 120 while the original game update stays fixed, or should the whole client use delta time? Which update rate do you recommend for game logic?
  2. For <span>lwPose</span> and <span>Character::PlayPose</span>, what should the expected pose velocity be at 120 FPS? Should the 83-frame tree workaround remain isolated from the normal FPS logic?
  3. Which files/functions handle UV scroll, particles, dropped-item bobbing and similar visual effects in your audit? I want to fix those after poses, without changing their intended speed.
  4. Before testing multiple clients, which network/update path should be decoupled from rendering first?
A simple recommended order of public files/functions is enough. I will test each phase in a separate local copy and only report visible results: smoothness, acceleration, stutters or crashes.

The patches I make don't work, and I waste a lot of time and tokens.

For shadows later: does the public source’s <span>MPShadeMap</span> provide any useful base for directional shadows, or would proper shadows for terrain, buildings, trees and characters require a separate shadow-mapping implementation from scratch?
 
Alexxst has an excellent commit on this topic that will help you.
Please, Log in or Register to view URLs content!
Take two files from it SteadyFrameSync.cpp\.h
Also, take a look at how speed is determined depending on the fps, for example:

CreateChaScene.cpp
old - _arrow->PlayDefaultAnimation(!g_stUISystem.m_sysProp.m_gameOption.bFramerate);
new - _arrow->PlayDefaultAnimation(1.0f / Corsairs::Client::Frame::SteadyFrameSync::Instance().GetAnimMultiplier());

STAttack.cpp
old - _nSkillSpeed, CGameApp::GetFrameFPS());
new - _nSkillSpeed, Corsairs::Client::Frame::SteadyFrameSync::Instance().GetFps());
 
  • Like
Reactions: remanuel
1790024768161.webp

well files too big to be written in forum's but these images to know which files u may need to edit
i wouldn't bother doing shadows in your case, in dx9 shadows too heavy and consume too much of gpu
i only applied shadows after migration to bgfx


1790024805350.webp


1790024839800.webp
1790024882473.webp
 
  • Like
Reactions: remanuel
I love you all, thank you so much. I'm going to see what I can do with all this information. ty ty :BlueSquidLove: :BlueSquidLove: "