• 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!

Whi World - Open Source Server with Configurable Features

For the next patch I will fix the lagspikes what are caused by monsters who cant find a way to target (you)

There were 2 possible ways to do it. Refactor getPath() method (custom script I did long ago) or nerf monster AI.
Since I have a plan to remake monster AI and that requires new getPath() anyway I took the harder option.

The new getPath() function has internal drawArea() function, this time I try to do it with the logic of rays (similar to Nonzero-rule)
No idea will I be able to script it all. Spent lot of time on it yesterday and didn't even get to the point where I start coming out of the loops I keep creating xD (function loops that is)

Anyway, I'm going to continue and hope for the best.
 
Yesterday I finished internal drawArea for getPath() (but not perfect)

Today I made it better, but its not 100% perfect. My brain Just couldn't handle solving a problem with very complicated obstaclePath.
But something like this would be very rare to come up in my server anyway

Also created new A-star algorithm for pathfinding. Much much cleaner and WAAAAY better performance. (In some situation it won't take best path though, currently the path solving speed was my goal)
Next patch will see what Linux thinks about my getPath(), hopefully no moar lags!

Tomorrow most likely won't work on server, but on friday I expect to finish up next patch!

Here is picture where I brain storm ideas how to create blocked position list. platnium coins are obstacles, apples are theoretical problem positions, crystal coins just remind me the border of current test area. blue cloth is the starting point where the check path is done. gold coins don't mean anything xD
28in6no.jpg
 
Whi World PATCH 0.1.5.6.7

Spells:
Spark and Death:
Changed minimum damage scaling a little: from (75 + L*5 + mL*20 - sLw*10 - sLs*5) to (75 + L*5 + mL*17 - sLw*7 - sLs*4)
Spark and Death:
Changed maximum damage scaling a little: from (75 + L*15 + mL*30 - sLw*13 - sLs*7) to (75 + L*10 + mL*25 - sLw*11 - sLs*6)

Quests:
Forest Spirits:
Vial of blood no longer crashes server.

Items:
Fur Set:
Increased Fur set Paw drop chance.
Arrows: Reduce break chance from 20% to 10%
Snaipa Helmet: Increases !Volley damage 80% instead of 50%
Snaipa Helmet: Increases arrow break chance 5% instead of making volley arrows break.
Fire Quiver: Arrows deal 12% fire damage instead of 10%
Fire Quiver: Reduces arrow break chance by 7% instead of 12%
Fur Backpack: Reduced weight.
Expedition Backpack: Reduced weight.
Akujaaku: Gives 1 distance skill and gives 1 magic level (instead of 2 magic level). Increased weight.
Demonic Shield: Reduced Weight

NPC's:
Tonka:
Now sells Pick Axe
Peeter: Now sells Saw

Mission:

Bone Flute Mission: Easier to notice now.

Other:
typos
- Fixed bug where boss signs showed the incorrect cost for boss protection.
Stahp da abuse! - Duel no longer heals when its over.
Building - Bridge parts now cost 2 nail and 1 log instead of 4 nails and 2 logs.
Clean that shit up - You can now clear away trough debris by using it (stone rubble caused by cyclops stone throws)
AutoLoot - If you have gem bag you can automatically collect the gems by stepping on them.
AutoLoot2 - If you have herb bag you can automatically collect the herb powder by stepping on them.
I play alot! - You can now see online time in player window
Vanish - Fixed bug when sending stacked items to depot with loot bag deleted rest of the stack.
I'm Sorry I died, plz forgive me - Dieing no longer removes equipped equipment items.

Monsters:
Bandis in Hehemi:
deal more damage with regular attacks.
Skeleton Warrior: Deals more damage with spells and regular attacks.
Ghost: Deals more damage with spells and regular attacks.

getPath() function:
Monsters, spells and who knows what else use getPath() function to generate positions. This function is now improved.
Lets see did I remove the lag or perhaps I added another reason why server should crash x)
 
POST 1 IS UPDATED

Going to delay the patch by a day or so.
I feel like patching up all improvements at once.
Currently tweaked the monster AI even more and would finish up new recipe book, but I also want to improve the teleport runes.
 
Yesterday I finished internal drawArea for getPath() (but not perfect)

Today I made it better, but its not 100% perfect. My brain Just couldn't handle solving a problem with very complicated obstaclePath.
But something like this would be very rare to come up in my server anyway

Also created new A-star algorithm for pathfinding. Much much cleaner and WAAAAY better performance. (In some situation it won't take best path though, currently the path solving speed was my goal)
Next patch will see what Linux thinks about my getPath(), hopefully no moar lags!

Tomorrow most likely won't work on server, but on friday I expect to finish up next patch!

Here is picture where I brain storm ideas how to create blocked position list. platnium coins are obstacles, apples are theoretical problem positions, crystal coins just remind me the border of current test area. blue cloth is the starting point where the check path is done. gold coins don't mean anything xD

So you are having issues having a monster check if he can path to a target in a short amount of time?

If yes, I have a bit of a customized getPathMatching I made so my creatures can find, follow, and attack targets 50sqm away up/down stairs.

The most important thing is just to limit how many nodes you'll allow.
If you know it'll cause lag if it checks 1000 Nodes, then limit it to 500 nodes.

If it cannot reach the target within 500 tries you simply tell it "Could not find Path".
 
So you are having issues having a monster check if he can path to a target in a short amount of time?

If yes, I have a bit of a customized getPathMatching I made so my creatures can find, follow, and attack targets 50sqm away up/down stairs.

The most important thing is just to limit how many nodes you'll allow.
If you know it'll cause lag if it checks 1000 Nodes, then limit it to 500 nodes.

If it cannot reach the target within 500 tries you simply tell it "Could not find Path".
All good now. Previously it was set to 125 nodes and still lagged.
Not sure was it because of my host connection or hardware or something else entirely.
On my local host (windows 7 on my computer didn't have any problems)

My host has:
Linux Jessie
900MHz quad-core ARM Cortex-A7 CPU
1gb ram
5 mb download speed
1 mb upload speed

Next patch I improved it even more, which may not give the best solutions but gets to that result much faster and or not backtrack the map if certain parameters given.
Also gave a lot more escape values. Found out that some times my monsters don't return to idle state and still try execute their spells. Which is just extra power used every sec.
 
What I did to decrease the number of Nodes used, was have it check closer nodes first.

Might be useful if you wanted to use the same idea.
Code:
AStarNode* AStarNodes::getBestNode(const Position& targetPos)
{
if(!curNode)
return NULL;

int32_t bestNodeF = 1000000;
uint32_t bestNode = 0;
int32_t diffNode = 0;
bool found = false;
for(uint32_t i = 0; i < curNode; ++i)
{
int32_t SdiffX = std::abs(targetPos.x - nodes[0].destx);
int32_t SdiffY = std::abs(targetPos.y - nodes[0].desty);
int32_t NdiffX = std::abs(targetPos.x - nodes[i].destx);
int32_t NdiffY = std::abs(targetPos.y - nodes[i].desty);
int32_t TdiffZ = (std::abs(targetPos.z - nodes[i].destz)+1);
//g_game.addAnimatedText(bestPos, 78, std::to_string(nodes[i].f));
diffNode = ((nodes[i].f+(((NdiffX-SdiffX)*5)+((NdiffY-SdiffY)*5)))+(std::max(NdiffX, NdiffY)*5)+(TdiffZ*20));
if(diffNode < bestNodeF && openNodes[i] == 1)
{
found = true;
bestNodeF = diffNode;
bestNode = i;
}
}

if(found)
return &nodes[bestNode];

return NULL;
}


This way, instead of checking every Node in a square.
(Start at 3, 2 is target position, 1 is the nodes it checks)
Current TFS Nodes to reach 2 tiles away:
Code:
{0, 0, 0, 0, 0, 0, 0}
{0, 0, 0, 0, 0, 0, 0}
{0, 0, 1, 2, 1, 0, 0}
{0, 1, 1, 1, 1, 1, 0}
{0, 1, 1, 1, 1, 1, 0}
{0, 1, 1, 3, 1, 1, 0}
{0, 1, 1, 1, 1, 1, 0}
{0, 1, 1, 1, 1, 1, 0}

Updated TFS Nodes to reach 2 tiles away:
Code:
{0, 0, 0, 0, 0, 0, 0}
{0, 0, 0, 0, 0, 0, 0}
{0, 0, 1, 2, 1, 0, 0}
{0, 0, 1, 1, 1, 0, 0}
{0, 0, 1, 1, 1, 0, 0}
{0, 0, 1, 3, 1, 0, 0}
{0, 0, 0, 0, 0, 0, 0}
{0, 0, 0, 0, 0, 0, 0}

(It isn't really necessary unless you are going to have monsters that can target players from long distances, but either way it will reduce CPU Usage during pathing)
 
I create the map first and set heuristics for each positions.
Then simply following trough closest paths.

Expect that all my codes are in Lua not in source. (I think that would help A LOT) xD
I'm pretty sure the function itself is very good.
Problem is that each monster executes getPath() about 2-4 times per second haha.
And the more players on screen the bigger it gets.

My monster AI is trying to handle everything, but its combined with both old and new features. Instead of making one nice script, over time I have kinda hacked in these new features.
 
I create the map first and set heuristics for each positions.
Then simply following trough closest paths.

Expect that all my codes are in Lua not in source. (I think that would help A LOT) xD
I'm pretty sure the function itself is very good.
Problem is that each monster executes getPath() about 2-4 times per second haha.
And the more players on screen the bigger it gets.

My monster AI is trying to handle everything, but its combined with both old and new features. Instead of making one nice script, over time I have kinda hacked in these new features.

Your monsters getPath() to every monster/player on the screen before choosing a target?
 
Your monsters getPath() to every monster/player on the screen before choosing a target?
Only if "real target" is unreachable or somehow forces himself out of targetlist (fakedeath spell)

EDIT: Actually the monster AI is not much of a problem itself.
Its linked to spellCreating system. (I don't have spell codes in my game, they are generated on the cast)
That system sometimes uses getPath() on same position several times. Which not even a major problem, but I'm sure there are other things what are doing things what could be done in much better way.

The plan is to update spellCreating system before I make lore boss(almost unkillable boss, not because unbalanced damage, but because he doesn't fail to dodge or hit), right now I'm just improving individual functions and improving game flow up the point where players are ready to meet that boss.

I created the spellCreating system ~8+ months ago, back then I didn't rly do clean codes.
This 3000+ line mess I spent over month to write is barely readable.
That's why I haven't bothered to try to fix or improve the lag issues from there.
 
Last edited:
Whi World PATCH 0.1.5.6.8

Cooking and Brewing:
cook book:
If you choose a recipe it will tell what bonuses the product would give.

Spells:
Death, Spark, Mend:
Amount of damage or healing done is now shown again in spellBook.

Items:
Loot Bag:
As a default description you will see the size of loot bag. Previously only if you had "extra Info" turned in player panel.
Teleport Rune: removed from game

Mission:
Bone Flute Mission: Improved the mission. Previously it was possible to fail it which would obviously confuse xD, no moar!

Other:
Uff the lag! -
tweaked monster AI, I hope this is bareable now in intense monster areas (hehemi quest and skeleton ruins)
kek - If you look other player information, You will see how much he has been online.
Omg I'm Stuckerino - Skeleton warrior room has now tiles which you can use to teleport out of the maze.
Challenge is real - challenge extra time no longer increases beyond wave 10, but the creature count does :3

death penalty:
Also removed item soulbounding.
I just cant bare the though I might have to start grinding back my OP items again xD
Too scary.
I increased the gem upgrades loosing though. It will do right. RIIIGHT!
When more players play which would increase the amount of items exist in game, I might start thinking of bringing that death Penalty back.
However its Beta so, hmm. Should I even?

Teleportation panel:

Instead of rune I brought the charges and useability to modal window.
If you have teleportation charges (gained from hardcore room)
You will see option to teleport home in your player panel.

 
Today did some mapping for the new early game quest in forest.
It will be called Cursed Bear quest, instead of Sacred Temple (or wutever the the teaser tile said, when you accidentally found the quest)

Since its quite hard to find someone to map or quite costly I decided to download some maps from OTLand and see if I can find anything interesting or suitable for my game.

The first OTLand map I looked into was Azeroth.
I found few areas, what I will be using one day (I think)

For next patch going to be using one of the areas already.
Obviously I just dint copy paste it. I changed some things and scripted the area.
 
POST 1 IS UPDATED

This week new patch will come out which will bring new quest and area.
I moved the new mission to patch after that, because already with these few days, over 30 bugs or improvements has been reported xD

Whi World has currently two very active players: Magma/Ice and Hager
Ty for playing and testing the server.

Then, by all means, if you happen to need a map use the one I released some time ago!
https://otland.net/threads/abyssal-shores.222018/

It may not be mind blowing, but anyways, it's 90% finished, still needing some details in the coast!
I downloaded that map and added to list.
However I might not look into that map any time soon (will take months before I even open the map)

There is still lot of technical scripts to be done before I start adding new content frequently.
 
Good server!

Why aren't you on skype anymore Whitevo? i kinda miss the interaction.
 
I'm on skype all the time.
Literally, I don't log off like ever from skype xD

Meanwhile in Whi World.
Quest is almost completed.
Already started working on boss spells.
Today I will finish the boss.
Then I add some hints to NPC (incase you don't catch my drift)
At that is pretty much it.

If it goes smoothly, I start working on the bugs and improvements. Now there is 45 reported of them Oo, Wtf, like rly, wtf.

EDIT:
Testing Boss
 
Last edited:
Yesterday and today been hacking down these reported improvements and bugs.

Suddenly a small bug: cant use high tier herbs to create potions
turned into 7 hours long scripting process xD
I refactored practically all the herb related scripts.
This fixed all the reported bugs and made handling herbs more comfortable for both me and players.

Not sure did I mention that cursed bear quest uses new quest system?
Well funny about that is: the herb configuration adapted the quest system registration scripts. Which allows me to control all the herb related scripts on same place instead who knows where in entire data folder.

Today going take a break early.
15 bugs/improvements left to do (with last 2 days, 7 new things got added xD )
 
New patch is ready, I won't be making patch notes this week.
Weekend rather starts early this time.

I will update the live server as soon as I get home (in a hour or 2) and that's about it.
When you log in Whi World and get the message: "Patch 0.1.5.6.9"
Then you know it has been updated (there will some more info what changed, but not in detail)
I won't be writing patch notes right now because it would take about 1-2 hours and I don't have that time right now.
 
Back
Top