Jump to content
Sign in to follow this  

Update log 17/05/2019 - Achievement diaries, Fight Caves & Dwarf multicannon

Recommended Posts



Hello everyone.

As I said in the previous post, I'm going to be posting all the previous updates from last year until now before the launch of the server to get back up to date with everything.
Note: The update log is rather unspecific - I will not be putting enormous detail into these update logs from forever ago, as I'd then be writing massive walls of text every week. Instead, I will only write down updates that are worth mentioning.

This update log covers my updates between 22.09.2018-31.12.2018

Content additions

  • Implemented achievement diaries | Diaries written by Tommeh(also explained in past update logs; Core system written by me.
  • All crabs(rock, sand, swamp etc) implemented to function exactly like RS.
  • All six barrows brothers now have proper combat scripts, making them use different kinds of attacks if applicable, and in general making the fights more enjoyable and more extensible.
  • Minigames tab teleportation system.
  • Fight Caves finally implemented all the way through.
    • Combat scripts updated.
    • Instance safety improved upon; Joining/leaving/logging out inside the instance doesn't break it in any way.
    • Monster spawns are now automatically calculated instead of being hard-coded.
  • Barbarian firemaking implemented - light fires using bows.
  • Dwarf multicannon hit palette: The cannon will now hit on the tiles marked on this picture(if not blocked by walls or elements of sorts); The dark red spots mark tiles at which the cannon will hit twice.
  • Item retrieval service implemented for Zulrah, Vorkath and other locations.
  • Pitfall hunter method implemented.
  • Monster combat information updated; Wandered across RuneScape collecting monster combat information through the lunar spell.
  • Implemented all edibles and drinks found in the RS cache. Collected a list of all the items with "Eat", "Drink" or other similar options and implemented every single one of those - including quest items. You will no longer run into a scenario where you get an interesting drop that might end up saving your life, and not be able to eat or drink that for that extra bit of health.
  • Implemented over 250 shops from all around Gielinor with the same contents and prices as you would find in RuneScape.
  • Players can now purchase candles from the candle seller in Lumbridge swamp.
  • World map updater tool written along with Tommeh; The tool is very flexible in terms of allowing us change any section of world maps - define new sections in the drop-down menu, crop/expand existing areas. It is also very easy to use, as it repacks the world map based on the actual game map file(s).
  • Implemented local player filtering to only display the 255 players closest to you through a very efficient algorithm that also made the game process information quicker overall(as opposed to processing and displaying all 2000 players to each-other.





  • Players can now sail from Rellekka to Waterbirth Island, Neitiznot, Jatizso & Miscellania.
  • Journal will now save on logout/login to what you had it previously set.
  • Projectile clipping rewritten to use Runelite's line of sight calculations instead. Previous projectile calculations generated a much more restricted pathway than it should've been. Runelite's LoS seems to identically determine the path as RS does, which also grants us a much, much less restricted version of line of sight.
  • Players will no longer run more tiles than what is necessary to start attacking the target. This covers the scenario of being 5 tiles away from your target while having run enabled and wielding a weapon that has a 4-tile attack radius. Previously it would run you 2 tiles towards the target. This is no longer the case, and player will only walk one tile closer to then attack the target.
  • Monster death sequences upgraded to a more flexible system that ensures there will not be near as many desynchronizations in the long run, with more and more content being added/updated.
  • Zulrah combat script slightly improved; Zulrah combat script will now also perform sound effects.
  • Dark Core & Corporeal Beast behaviors improved.
  • Clans improved to reflect changes better, as well as add more security to prevent them from glitching in any way.
  • A spade global item spawn added to Barrows'.
  • Experience-boosting equipment sets now actually do provide the experience boosts.
  • Rogue set now provides the double-loot effect.
  • Items when dropped - unless defined to break or behave differently - will now keep their charges when hitting the ground, instead of degrading to nothing straight away.
  • Dragonfire in general rewritten to function better with the protections; Protections will properly stack up now, providing more and more protection. The messages received will also reflect on this change, informing the player of the protections used to block the attack.
  • Woodcutting guild is now functional(objects and all the contents).
  • World map can now be closed by pressing the escape key.
  • Monsters cache their combat information during transformations(e.g. Zulrah transforming between its three forms) - the monster will create a new instance of the combat information if one does not exist, otherwise it will go back to the old one that it was previously on. Information is reset on death.
  • Projectiles updated to support a "step" variable which defines how a projectile scales across distances. RS defines projectiles by some sort of similar value. Magic projectiles always follow a step of 10 client cycles per tile - which equals to 300ms; Meaning for each tile distance added, a projectile will last for 300ms longer. For ranged, the same variable is 5 cycles; However some elements seem to have the variable as low as 3.
  • Cows, ducks and other animal talk less frequently.
  • Godwars monsters behavior improved; Properly classed all monsters found in the godwars dungeon as either of the 4 gods; Previously there were some faction-less monsters who were straight up slaughtered by all faction monsters(not being in the faction means you're against them). Also fixed some problems with not gaining killcount when slaying a monster.
  • Aggression checks improved.
  • Multiple entities inside single zones can now attack a target if said target is inside a multi area.
  • Fixed a problem with being able to click an object that did not actually exist there anymore.
  • 1-tick Karambwan cooking implemented
  • Skill dialogues improved to support changing the right-click option from say "Make" to "Cook".
  • You can now cook things on a range by left-clicking a range, which will prompt the player with all the cookable elements they are currently carrying.
  • Kraken and King Black Dragon instances converted to a newer, safer implementation. The old instances system has been eradicated completely to ensure no developer abuses it by accident.
  • Player movement type mask fixes to ensure the character does not perform different activities on different clients.
  • Barrows rewritten once again to fully function on the safer area system, rather than on the controller system it previously ran on.
  • Farming storage rewritten to support the new interface and all its other updates.
  • Fixed nulled display names on characters.
  • Fixed multiple Player Info masks which occasionally caused the clients to crash.
  • Improved player following.



Miscellaneous | Behind the scenes

  • Component information is now pulled from within the cache; This means interfaces will break less frequently during cache updates. Components rely on each-other when pulling from the cache, based off of the resizable values which are defined by us, it obtains the respective values for fixed, fullscreen, side panels and other interface types.
  • Area system upgraded to support hierarchy.
    • All in-game defined areas that overlap each-other(through polygonal boundaries) must either extend or supersede another area that it overlaps with. This is due to areas owning plugins bound to them; e.g. an area can implement plugins related to deaths, to make deaths in the area safe or in other ways conditioned. Because of this, we cannot just have a list of areas in which the player exists, as it would produce unpredictable behavior in determining which area's plugin will be executed, and as such, inheritance solves the issue.
    • All in-game defined areas that overlap each-other(through polygonal boundaries) must either extend or supersede another area that it overlaps with. This is due to areas owning plugins bound to them; e.g. an area can implement plugins related to deaths, to make deaths in the area safe or in other ways conditioned. Because of this, we cannot just have a list of areas in which the player exists, as it would produce unpredictable behavior in determining which area's plugin will be executed, and as such, inheritance solves the issue.
  • Entity collision system was upgraded to be flag-based(per tile) rather than iterate through all the entities nearby and check if they collide.
  • Upon death, monsters will no longer be removed from the world. They will instead be hidden from it until their death delay has ran up, after which they're simply made visible again. Removing/re-adding monsters to the world was a rather expensive and unnecessary task.
  • A fair amount of drops updated.
  • Interface system rewritten.
    • All interfaces are now enumerated.
    • Interface plugins require us to name every component that is used by the interface plugin.
    • With the naming of the components, I was then able to create a tool that compares components to components in another cache, and updates them to the new ones if they were changed. From my tests, this seemed to have very high accuracy as generally only the components that were completely removed or had drastic changes made to them couldn't be relocated.
    • Interfaces now also possess #open & #close interfaces which allow us to open the interfaces properly(all information updated on the interface) through commands just by naming them, as well as define behavior that occurs when the interface is closed or replaced by another of the same type.
  • Rewrote the map printer tool to produce higher quality map images.
  • Multi-way areas updated to execute more efficiently. Since we use polygons for just about anything area-related on Zenyte, it is no secret that this can get rather expensive if not properly implemented. As such, we now map the list of polygons and bind them by region ids - so to get a list of polygons to iterate, we get them by accessing the map with the region id of the location we're trying to access. This is a lot more efficient as it generally gives us anywhere from 0 to just a couple polygons to check, instead of having to go through hundreds for every call(which was not too bad either truth be told - it handled that perfectly fine too!)
  • Players and NPCs were migrated to a chunk based system instead of region based system. 
  • Scene/viewport refreshing rewritten to match RS. By default, the player will be kept up to date with the 7x7 chunks surrounding the player. All of the methods that related to the scene were also converted to properly reflect upon this, keeping all of the data perfectly in synchronization, ensuring there are no problems with for example items appearing that cannot be clicked or anything of sorts.
  • Implemented a packet that allows much more efficient scene-refreshing by grouping all events occurring within a chunk together and then sending it as a single packet, instead of sending a packet per event as it previously did. The bandwidth difference between them isn't too drastical, however the client as we know isn't written very efficiently and so finding the code to execute for a packet is neither - which is also where the massive improvement comes from.
  • Map regions are now being repacked with [0, 0, 0, 0] xteas if the map file is "corrupt"; By default, in the cache Jagex uses there are regions that cannot be read by neither the server nor the client. Instead of wrapping the client in multiple try/catch blocks and enduring the massive lag spikes and memory consumption that comes with it, we now just repack the regions as an empty file, causing it to load without any problems on all ends.
  • Implemented a method to find the first occurrence of a NPC that matches a specific predicate; Efficient look-up method based on chunk system.
  • Viewport is now fully dynamic in terms of how far we render things. Administrators are able to exceed all limitations and render players, npcs, items and all kinds of other things up to as far as the currently loaded map goes.(covering an area of 104x104 tiles as opposed to the normal 16x16).
  • Items that possess attributes can no longer be traded automatically, unless the item also possesses an attribute of "tradable": true; which will allow passing on the item with all its current attributes to someone else. The variable is currently unused, but I suspect it will be necessary in raids due to the shared potion system that grants extra points when drinking a potion made by a team-mate.
  • Animations are now being verified before played by an entity. This ensures that players/administrators cannot play animations that glitch their character up. The same applies for monsters - if an animation is incorrect and doesn't suit a monster, it will not be able to play the said animation and will instead just sit there waiting in its default state(instead of glitching out and flying across your client).
  • Started on a drop processor system which was later(read:within the month of April 2019) put to use to provide accurate information of NPCs through the drop viewer interface.
  • Logins now react one tick quicker than before and will not desynchronize your character under rare circumstances(due to synchronization issues in code).
  • Removed all I/O operations off of the main game thread. This includes small things such as File#exists which also does a system call - which is slow. I/O is now only permitted during server launch and off of other threads.
  • Drops are now removed from drop tables if a drop plugin already contains said item - prevents duplicates.
  • Cache enums rewritten to a much safer implementation; Enums are now fully reliant on the Optional class from java-8 to ensure no NPEs will occur from random updates proposed by Jagex or anything of sorts. In addition to this, Enums are read in the expected format on server launch - so if an enum was removed, or is in a different format than expected(e.g. string enum instead of an integer enum), the launch process is halted.
  • Implemented a custom mask for NPC Info packet that allows me to change the right-click options of monsters on a per-player basis. The current use for this is to hide right-click options that do not do anything, making the game feel more alive and functional overall. 
  • Improved area intersection verification on server launch to ensure no areas really overlap(as previously mentioned, area overlapping creates unexpected behavior and can be deadly-ish).
  • Any exceptions caught during login process are now properly handled and the player will be informed that something went wrong in the process of that, to further contact the staff.
  • Implemented a launch mode of "spawn" that allows me to change all NPC right click options to spawn-related events, such as teleport the monster to me, remove the monster spawn, change its radius etc. This allows me to easily correct broken monster spawns. NPCs are frozen on their original location when the game launches in this mode.
  • Updated pathfinding code to function more efficiently; In addition to this, removed a hefty section of masks completely unrelated and unused in OSRS.
  • Fixed problems with writing one buffer to another, causing packets to sometimes glitch up and write no information(due to reader index being already moved to the end of the buffer).
  • Appearance mask in Player Info packet now caches the information. Instead of reconstructing the information 2000 times (for every player in the case of a full world), it only constructs it once now and passes the same buffer on to then be copied by other buffers instead, which is a much less CPU-expensive operation.
  • Improved login code by removing conditional duplicate file loading.
  • Implemented a bitbuffer class to handle all bitwise operations on a separate class, means it will no longer have to check whether or not it is in bit or byte mode as well. 
  • Numerous memory and CPU fixes through updated Player Information packet.









  • Like 4

Share this post

Link to post
Share on other sites

WOAH! Another amazing update, can't wait for june 6th!

Share this post

Link to post
Share on other sites

That's one long list of additions. Good job!

Share this post

Link to post
Share on other sites

This is an awesome list of client additions, bug fixes and content updates. Love it, keep up the amazing work and roll on June 7th! 

Share this post

Link to post
Share on other sites

A plethora of good quality updates. Good job.

Share this post

Link to post
Share on other sites
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Create New...