Since the last status update we've been pretty busy!
We've updated the client to be on par with USKO 2.171, we've rewritten the King system, we've added Castellan Capes and the Castellan Dungeon, we've fixed a plethora of general bugs (present in the official client and otherwise), implemented Darkness item proc/effect behaviour (most notably the Dark Knight Mace, which behaves uniquely in that it allows players to heal enemies to deal damage), improved speedhack detection, and much, much more.
Firstly though, our Halloween event!
As of today's patch, the Halloween event will be over. It's definitely been a fun week. For the most part, I'd say the Halloween event went pretty well. The start was rocky as there was a ton of new behaviour that was implemented for this event (Darkness weapon procs/effects, new exchange behaviour, etc), as well as some issues with our updated speedhack detection, but we worked through it pretty quickly.
Darkness weapons were a bit of a game-changer with PvP, but for merely a week of use (give or take some minor carry-over after the event), it definitely mixed things up a bit. Things should go back to normal soon, as these event items expire.
The Halloween event also, however, made a fundamental problem with Knight Online's behaviour very clear. With the increased spawns in and around the CZ bowl, players with lower-end PCs / connections were struggling with warping (e.g. Descent and other teleports, like mage Blinks).
Which is where our major gameplay optimisations come in.
Knight Online has many problems. It's not the most efficient game, by far. Stuttering and lag is just expected of it at this point, unless your PC is reasonably high-end and you have a very good connection to the server (i.e. low ping).
This isn't really true for a lot of people who play the game though. Especially with private servers, having a decent ping to the server can be very hit or miss.
So when the server isn't at all efficient about its communications with the player (which it isn't!), it can result in sending a considerable amount more data to the client and forcing it to perform a lot of unnecessary work, which results in stutters and lag while the client slowly processes its requests.
This week, such an issue was highlighted pretty clearly. With the increased spawns in and around the CZ bowl, players were finding increased stutter and lag -- particularly when using warps like Descent.
The reason for this is actually pretty silly, but I need to explain how things work first to properly understand it.
In Knight Online, maps are divided up into regions. Something like:
Players can only see the contents of adjacent regions, like so:
In the above, player A can only see player B, player C, player D, and player E because they can see regions (1,1), (1,2), (1,3), (2,1), (2,2), (2,3), (3,1), (3,2), and (3,3).
They cannot see our perfectly accurate depiction of a worm over in region (4,4), because it is not in an adjacent region.
So when player A crosses into region (3,3)...:
As you can see, they can no longer see player B, player C or player D. We can still see player E in (2,3), and we can also now see the worm over in (4,4).
This should all be pretty straightforward.
Realistically, you'd expect it to despawn players/NPCs/monsters from the regions we can no longer see (those greyed out in the above image), and insert those in the regions we can now see (the darker yellow regions in the above image).
That is, simply make the minor changes to what we know. The problem with its official behaviour is that it doesn't do this at all.
Instead, it officially despawns everything and re-requests everything in its adjacent regions.
Obviously this is extremely inefficient. In the example above, we already knew where player E was. Unfortunately, because everything was reloaded, it had to remove them and we had to be made aware of them... again. In addition to the worm which we previously couldn't see.
This behaviour is pretty bad, but it's worse still for warps and respawning. Both of these not only fully reload when you move to an adjacent region, but every single time. For example: if you Descent to someone right next to you (for the purposes of this example, in the same region), it will still request a full reload of all players (+ merchant stalls), NPCs and monsters for all adjacent regions.
Every single time.
So, we were able to optimise this pretty heavily. We now specifically tell the client only what it needs to know.
For adjacent region changes, that means who we no longer can see, and who we can now see. In the example above, this means telling player A that we can no longer see player B, player C or player D, i.e. all players/monsters/NPCs from regions (1,1), (1,2), (1,3), (2,1), (3,1). We also tell player A that we can now see worm over in (4,4).
Anyone else still in our adjacent regions, for example, player E over in (2,3) remains unchanged. We have no need to update them whatsoever, so they no longer get despawned.
For same region changes (e.g. warps), this means we no longer tell it anything -- because it just doesn't need to know. Player A can already see everyone in the region they were at and adjacent regions. They didn't change regions; there's no reason to look for anyone new.
Sadly, requesting all data is entirely official behaviour. This was never purely a problem with ApexKO, or purely the server -- to fix it, we even had to patch the client to let us make these changes.
But why are they so major? This all seems pretty trivial.
It's so major because it's a ton of data the client was always processing, to the point where it having to unload and reload spawns (particularly when there's a lot of them!) causes very noticeable lag/stutter. Again, this is particularly evident with warps like Descent and mage's Blink, especially in highly populated areas (e.g. CZ bowl, especially with our pumpkins from the Halloween event!), but also of course when it's forced to do so from simply moving into another region.
This also inadvertently fixes some other things.
For example, since things aren't being fully reloaded on same-region or adjacent-region warps, or when they move into adjacent regions, nor finally when players are resurrected, loot boxes will also no longer despawn in these cases.
Since loot boxes aren't actually game objects, and only exist when you're nearby to see it drop, full reloads previously removed them. But since there's no reason to reload, they're not actually removed anymore, so you can still see and loot them.
I'm sure there's other behaviour related to this which it will clean up, but for now this will have to do.
These optimisations should greatly improve gameplay from what you'd expect from even an official server like USKO. Completely removing that lag/stutter from most typical behaviour should be very noticeable and make the game that much smoother.
Thanks again to those who reported the stutter with Descent. These reports are what allowed for some pretty nice improvements to overall game behaviour!
How's the client source project going?
Truthfully, with all the work on ApexKO in regards to its Halloween event and stream of bug fixes for surrounding patches, I haven't been as busy with it as I'd like. That should change though as things begin to stabilise again.
Changes we've made since the last status update include:
Cleaning up mouse input behaviour, to behave consistently and cleanly (this also deals with UI focus issues, so you can now, for example, click the chat UI/scrollbar and use the mousewheel to scroll the chat bar, or click back out into the game and return mousewheel behaviour to zoom in/out pretty seamlessly).
Implementing UI clickthrough behaviour, for things like the chat bar.
Cleaned up UI event behaviour for consistency. There was often cases where this inconsistent behaviour lead to various bugs.
Finished implementing all of the King system.
Implemented the friends list.
Reimplemented chat behaviour.
Implemented the chat bar buttons.
Implemented chat filters.
Item names are used consistently/correctly where needed. There were often cases officially, typically in messages in the info box where the wrong item name is used (specifically the name of the item's base), rather than the item's actual name.
Updated the trade UI to behave as per 1.298 (with the confirmations, etc).
Updated the vendor UI to behave as per 1.298 (with the confirmations, etc).
Updated loading behaviour to more closely match official (where the load % is tracked, rather than updated at intervals).
Implemented support for stealth / visibility (e.g. Lupine) skills.
Fixes alpha blending issues with text and models (these existed in the official 1.298 client, but were fixed in later official versions).
Clan symbols on capes now only show if the clan is allowed to use them.
Purchase prices are now correctly coloured by price (as with newer clients).
Fixed various UI input bug issues.
Fixed double-click logic to behave on a per-control level, rather than per-click (i.e. making 2 clicks on 2 different things shouldn't trigger a double-click on the 2nd, e.g. with lists -- clicking one list entry then another rapidly shouldn't fire a double click event).
Updates login screen error behaviour to behave as per 1.298.
Fixes some issues with rivers / ponds not rendering.
... and more.
In regards to major updates that are left, we still need to implement transformation support (and hence siege weapons), the rental system (although less important), Power-Up Store/in-game browser, quest tracking, etc.
Hopefully when things are more stable with ApexKO, I can start to knock some more of those major features off the list and push it ever closer to a more complete state.
Honestly, we still have a lot of our previously mentioned future goals from our last update left. Most likely the next thing we tackle will be implementing UTC, but we'll see what happens. With that game feature (finally!!) in, a lot of our secondary priorities can be looked at (in addition to getting more work done with the client source where possible!).
Until next time.
[Hotfixed live] Temporarily disabled server-side optimisations on movements, as it appears we're optimising out at least 1 case where we should be relaying movement updates. This has been causing players to appear as if they're speed hacking.
Using potions during stealth skill casts (Hide, Stealth) will no longer interrupt the cast.
When compounding accessories, the client will no longer visually remove your scroll twice. It should also no longer visually bug out the accessories you're compounding, although this was a much rarer occurrence.
Fixed a bug causing monsters on the outskirts of the Forgotten Temple to be unattackable.
Players with little to no resistances are now affected more by stuns/slows. Previously, there was a very small gap in rates between players with (some) resistances and those without -- this gap has been raised. For everyone else, the rate remains about the same.
Removed the Specters that spawned in Forgotten Temple on wave 60 of 61.
Added Garges items & Abyss Fire to the buying merchant list.
Removed Roneth's AoE and reduced its melee damage.
[Hotfixed live] Added Golden Earring to Knight's Medal, Royal Knight's Medal & King's Medal exchanges.
Change Ronark Land Felankor's nova effect to act like Volcanic Rock's (1 nova effect instead of 1 per target). This should help with FPS drop issues. Also reduced its AoE damage.
Fixed a bug with skill timing checks. As a result, these should be a lot tighter now.
Fixes to bound items:
When repurchasing deleted bound items, they will once again become bound.
We now correctly detect which items should be bound, so these items now must be bound to equip.
We also now enforce the correct quantity of "Sealed Items" required to unbind them.
Renamed the inn host(ess)'s menu button for bound items, to make it clearer. It now reads "Bind item / Unbind item" (was "Seal / Cancel", which caused some confusion with the similarly named button for actual sealed items).
Expiration items that don't otherwise prohibit it can now be deleted & repurchased. Their times will now also be restored correctly. It should be noted that if these expire before the 3 day repurchase period elapses, they will not be recoverable.
Power-Up Store items (specifically items that state they can be traded after 72 hours) can now be deleted.
Fixed a bug with the server not enforcing certain items to be deleted.
Items expiring while in cospre slots will no longer visually remove items from equipped slots.
Consumable expiration items are now fully removed upon expiry, instead of just consuming 1 use.
The "Take the secret documents" quest now offers you the potion after accepting the quest (instead of requiring you to buy it first), and also when returning to the NPC without a potion while the quest is still in progress. This means if you logout and return to the quest later without a potion, or you fail it the first time and waste your potion, you don't have to abandon the quest.
Quests now reset their progress upon loss of their required items when they're in the "before compensation" state to prevent them from getting bugged.
"Finding the lost soul" quest will no longer remove [sealed Soul] upon death. The quest will also no longer reset on logout while it's in the "before compensation" state, so you can disconnect/relog and still turn it in after obtaining the [sealed Soul].
Items considered expensive (100K or above from NPCs) are now added to the repurchase list.
Added [sealed Items] to Sundries at a cost of 1mil coins per. Also reduced their prices in the Power-Up Store.
Renamed [sealed Items] to [unbind Items] for clarity.
Removed rewards from some Moradon achievements, which were being used to farm Monster Stones at a rate much faster than intended.
Fixed a bug with clan rollback logic (when a player who's contributed a significant amount of National Points left the clan), which caused clans to not lose their cape correctly on restart.
Is it honestly that broken? 2-3 warriors pk using leonars, and changing this just for your own selfish interest wouldn't decrease the overall price of the item, but I'm sure it would get them to quit the game (seeing how they paid a lot for an item they can't use anymore). Not to mention that officially this is how it works.
stop talking about mages, they are fine . Btw when you complain about a class, just try to play it one day.
There's one thing people often say: "when i play warrior i never scream any1 but when i play rogue i got screamed alot and blah blah, same for stun and other " .
About the rate, for example it's 10% doesn't mean if someone hit u 10 times you get exactly stunt 1 time. Sometimes it will be 2 times even 3 times, sometimes 10 hit and no stun at all.
this is realy awful idea.if they added that pots to PUS,they had to add Undy SCs too.Otherwise, mage teams will surely leave from this server and pk takes very short time. 3-4 assassins already fuck up whole mage party without red pots and all other mage teams have left cos of melees' aoe/power.
Rogues' sustain is reliant on a stable source of healing. The higher the damage taken, the harder to survive. When you factor in how your most devastating burst combo is reliant on RNG (and has a cooldown of 50 seconds), you'll begin to realize how much more warriors benefit from this suggestion. They already spam your spike damage, bro.
Not to mention, mages are already in life support, and red potion does nothing for them. Not even blue potion could help them not get 2 shot by every single class in the game.
You do realize theres fraps of your garbage clan getting wiped in 3 seconds (literally) whilst having 3 priests. You should stop calling people randoms while you can, friendly advice.
EDIT: Also if you think you're witty or funny in your trolling attempts, no you're not, you're just being retarded. Pretty sure you totally misunderstood the concept of trolling. But i guess, one could say, that your ability to troll people is just as "good" as your ability to play a priest.
Let me guess, your full 30 days of fun in either a new USKO server or a trash Turkish server is already over and now you want to come back to Apex with everything reseted for you, correct? Yes.
Apex is different, stable and long lasting unlike every other garbage you and your friends have ever played so far. Not made for your temporary amusement to be then thrown away again. Get this inside your head once and for all.