• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

OTClient 1.0

Mehah

Excellent OT User
Joined
Jun 25, 2015
Messages
164
Solutions
1
Reaction score
889
Hey guys,

Well, I always wanted to help the community, but I had to choose, life and personal projects or the community, I ended up choosing my life, but things changed with the arrival of COVID and now I have time, so I will be making some corrections and improvements in customer performance, I do not guarantee exorbitant improvements, but enough to keep FPS stable on any machine, even with an I7 4770 + RX 580, I have FPS drops with many interactions.

Ahh, not forgetting, I don't intend to work on this project for a long time, at first, until the end of July, but it will be enough and feel free to report and help.

Follow the repository: mehah/otclient (https://github.com/mehah/otclient)

What has been done so far?
1- Fixed Walk System (Removed Dash, it is no longer accurate.)
2- Support Idle Animation

What will be done?
1- Bug fixes and FPS stability
2- Creation of a component to better manage the modules.
3- Possible True OTML, using HTML and CSS writing. (Maybe I won't have time for this)

OBS: I do not intend to maintain compatibility with old Tibia versions, only 10.98+
 
Last edited:
Nice, Im going to take a look at that on current week and give a feedback if any consideration/idea will be on my mind :)
 
That is great to hear!

OTCv8's sources were partially released , by the way, if any of that existing code helps you in fine-tuning otclient:
 
nice initiative, the more people involved in making improvements for the community the better

That was the first thing I thought.

That is great to hear!

OTCv8's sources were partially released , by the way, if any of that existing code helps you in fine-tuning otclient:

I took a quick look and unfortunately there is nothing that can be used, he removed "core" modifications , left only vestiges to recreate what was done.
 
Last edited:
I took a quick look and unfortunately there is nothing that can be used, he removed the "core" of the modifications, left only vestiges to recreate what was done.
I used Ghidra and Snowman to decompile the original otcv8 client. Due the lack of debug symbols I wasn't able to get much information but by the methods and parameters I could see that even the 'released' source isn't the same as the original compiled client. It looks like the just dumped a very old version of his work, and partially.

Perhaps I could have something more usable using IDA Pro to decompile but the license is 5k USD too hahahaha

By taking a look at the dissambled files though, I managed to get a few information about the structure of some functions like the drawqueue.cpp that is missing, but the work to build them from scratch seems lower than trying to understand and convert assembly code.
 
I used Ghidra and Snowman to decompile the original otcv8 client. Due the lack of debug symbols I wasn't able to get much information but by the methods and parameters I could see that even the 'released' source isn't the same as the original compiled client. It looks like the just dumped a very old version of his work, and partially.

Perhaps I could have something more usable using IDA Pro to decompile but the license is 5k USD too hahahaha

By taking a look at the dissambled files though, I managed to get a few information about the structure of some functions like the drawqueue.cpp that is missing, but the work to build them from scratch seems lower than trying to understand and convert assembly code.

Interesting.

I've been having some ideas to reduce the calls to draw, I'll put them into practice during the week, because this weekend I'll be out.
 
Last edited:
I used Ghidra and Snowman to decompile the original otcv8 client. Due the lack of debug symbols I wasn't able to get much information but by the methods and parameters I could see that even the 'released' source isn't the same as the original compiled client. It looks like the just dumped a very old version of his work, and partially.

Perhaps I could have something more usable using IDA Pro to decompile but the license is 5k USD too hahahaha

By taking a look at the dissambled files though, I managed to get a few information about the structure of some functions like the drawqueue.cpp that is missing, but the work to build them from scratch seems lower than trying to understand and convert assembly code.

You can get IDA Pro Hex-Rays 7.xx for free online (cracked version).
 
I used Ghidra and Snowman to decompile the original otcv8 client. Due the lack of debug symbols I wasn't able to get much information but by the methods and parameters I could see that even the 'released' source isn't the same as the original compiled client. It looks like the just dumped a very old version of his work, and partially.

Perhaps I could have something more usable using IDA Pro to decompile but the license is 5k USD too hahahaha

By taking a look at the dissambled files though, I managed to get a few information about the structure of some functions like the drawqueue.cpp that is missing, but the work to build them from scratch seems lower than trying to understand and convert assembly code.
Could this mean that kondra added something suspicious in recent version and released source files (outdated) to cover that?
 
There's an issue that I think is the most critical in otclient and even otcv8 has it. There's something wrong in the logic if an item should be reachable or not based on if it's covered or not. I'm currently at work right now but I can show you more details later.

If you could a look at this one this would be awesome, and please put a paypal or any kind of place where people could make donations :)
 
There's an issue that I think is the most critical in otclient and even otcv8 has it. There's something wrong in the logic if an item should be reachable or not based on if it's covered or not. I'm currently at work right now but I can show you more details later.

If you could a look at this one this would be awesome, and please put a paypal or any kind of place where people could make donations :)

I will take a look.

About paypal, honestly, I started the project without thinking about return, just thanks, but I also see no reason not to put my paypal, to take advantage that the dollar is $5.23. 😁

PAYPAL - DONATE
 
Last edited:
Hello, I have just tried your changes - in walking - I did not notice any improvement unfortunately ;/ Also there is a bug in:
C++:
ThingPtr Tile::getTopUseThing() {
    if (!m_commonItems.empty()) return m_commonItems[0];

    for (auto it = m_bottomItems.rbegin(); it != m_bottomItems.rend(); ++it) {
        const ItemPtr& item = *it;
        if (item->isForceUse()) return item;
    }

    for (auto it = m_grounds.rbegin(); it != m_grounds.rend(); ++it) {
        const ItemPtr& item = *it;
        if (item->isForceUse()) return item;
    }

    return nullptr;
}
It is not possible to target a monster using right click on top creature. After applaying e40d8347a071bb91e31fda1fcdf97df7f25edca7 I was able to notice ~9% better FPS ratio. I'm going to check the resto of the changes and give a feedback. Thank You for publishing the improvements.

Edit:
After applaying "viewport optimized up to ~32%" commit on my client I got ~47% better FPS ratio.
 
Last edited:
Hello, I have just tried your changes - in walking - I did not notice any improvement unfortunately ;/ Also there is a bug in:
C++:
ThingPtr Tile::getTopUseThing() {
    if (!m_commonItems.empty()) return m_commonItems[0];

    for (auto it = m_bottomItems.rbegin(); it != m_bottomItems.rend(); ++it) {
        const ItemPtr& item = *it;
        if (item->isForceUse()) return item;
    }

    for (auto it = m_grounds.rbegin(); it != m_grounds.rend(); ++it) {
        const ItemPtr& item = *it;
        if (item->isForceUse()) return item;
    }

    return nullptr;
}
It is not possible to target a monster using right click on top creature. After applaying e40d8347a071bb91e31fda1fcdf97df7f25edca7 I was able to notice ~9% better FPS ratio. I'm going to check the resto of the changes and give a feedback. Thank You for publishing the improvements.

Edit:
After applaying "viewport optimized up to ~32%" commit on my client I got ~47% better FPS ratio.

Fixed, thx
Post automatically merged:

Guys, I have great news, I just made a change to take advantage of the rendering cache, the tiles and lights will only be recalculated if there is a change in the screen, there was an increase of more than 400% of fps depending on the situation, of course it still needs to be improved , if put too many monsters on the screen, doing too many actions, the fps will drop a lot.

It is still far from good, but it is a start.

Alone: (3826 fps)
teste1.png

With monster fighting (1498 fps)
teste2.png

Light Monster Fix
teste3.png
 
Last edited:
Very nice, keep it up.

Btw, this my friend would make my day: 3- Possible True OTML, using HTML and CSS writing. (Maybe I won't have time for this)

Also I really like initiative,
 
Back
Top