Jump to content

Release date: June 7, 2019

Kris

Developer
  • Content Count

    55
  • Avg. Content Per Day

    0.11
  • Joined

  • Last visited

  • Days Won

    11
  • Time Online

    13h 26m 17s

Kris last won the day on May 4

Kris had the most liked content!

Community Reputation

71 Void

About Kris

  • Birthday 12/26/1997

Recent Profile Visitors

484 profile views
  1. 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. Bugfixes 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. Media
  2. Maybe you're right. I'll see what media I can accumulate. Edit: Added some media.
  3. I won't be posting any media for the large updates, mainly because they were from a long time ago.. but also because I wrote these a long time ago. The smaller update logs that I intend on posting at least a few times every week will contain some media though.
  4. 😎So much work ahead for all of us developers.
  5. Hello everyone. I'm aware I haven't posted a single update log in almost a year now, which is why I am here right now too. For every week until the release, I will be posting update logs from the past year that I did not post previously. 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 06.06.2018-21.09.2018 Content additions Item wield requirements implemented, all items have been manually given requirements, to ensure nothing is missed. Grand exchange offer processing implemented. Plugins are now loaded up using the ClassGraph library, helps contain code. Dynamic area system implemented - an addition to the existing area system. Allows us to manage areas safely and without the chance of someone smuggling something in or out of the areas. Pest Control minigame: All three landers Player prioritization Activity system All NPCs implemented with their respective abilities - brawlers block players and npcs, nothing can pass them, not even projectiles; splatters hop around and occasionally explode near destroyable objects, ravagers seek to destroy the gates and barricades etc.. Shooting from the watchtowers increases your shooting range All rewards implemented Improved the spells system to properly check for the user for runes, meaning you can now use combination runes, a combination of runes from multiple resources(inventory, rune pouch, held staff) if you're short of them. In addition to this, all staves have been properly defined as seen in the CS2 of the spellbook interface - so all the staves that light up the runes on the interface now do the same behind-the-scenes Teleportation system rewritten: The new system requires for teleports to override a specific interface, making teleportation safe. Previously you could create new teleportations without relying on old code which meant there could've been accidental missing checks to teleport to or from certain limited locations All missing spells were implementing, most of which were the reanimation spells in the Arceuus spellbook, but also tele-other spells, lunar teleports incl. group teleports and many others. Method-based plugins w/ the support of custom compile-time(and shown by the IDE) errors to ensure we don't mess up the parameters. NPC spawns dumped from OSRS. We've accumulated a total of 15,000 legitimate NPC spawns to populate Zenyte, a massive increase from the previous ~6,000. Special thanks to @Mtarik for helping me dump these and &Substance for allowing me to use his account to access some high-requirement areas. In addition to dumping NPC spawns, we also dumped music simultaneously in the background. With that being said, a whopping total of 359 music tracks(out of 581) can now be unlocked by entering a certain area. A lot of the remaining music tracks are unlocked by completing or during quests, and a load are unlocked by default. We will be implementing ways to unlock the remaining music tracks eventually down the road, special thanks to @Mtarik for helping me obtain the tracks, and for mapping down the ways to unlock the unmapped music tracks. The music tracks that are currently impossible to unlock will be unlocked for all players by default, as we implement methods to unlock them, they will be locked for players automatically. Slayer skill: All slayer masters All slayer tasks, including boss tasks, the ability to switch your TzHaar assignment out for a TzTok-Jad or even a TzKal-Zuk task. Every slayer reward implemented exactly as they should be. Can spend your points on one of the many (40+, if not more - haven't counted) rewards, or even items such as herb sack, or even the newly added rune pouch. Slayer monsters have their respective requirements to be slain(for example a rock hammer is needed to finish off a gargoyle; the unlock from the shop will also work!) The ability to make the slayer tasks scale according to your current combat level option; players can disable this at their own will - however it means they can be assigned any task from the master's task table at any level. Players can reset their tasks exactly as on OSRS - either by spending points to preserve their streaks, or by talking to turael to get an easier task if applicable. Slayer partner system; You can have a partner to make slayer more fun overall. Each assignment has its own weight, minimum and maximum assignable amounts, meaning you will receive some tasks more frequently than others, and that you will receive more of lower level monsters, and only a few of very high level ones - such as rune dragons, which always come in quantities of less than 10. All of the monsters are also available in the game, so you will not be facing issues of being unable to complete your task or anything of sorts. We've also ensured that you can reach all of them. Dynamic areas altered furthermore; it is now impossible for two dynamic areas to collide or even be closer than 16 tiles distance from eachother, meaning you will not be seeing issues with someone elses instanced area colliding with yours, e.g. a random toktz-jad appearing in your instance. Additionally, dynamic regions in general now have much higher requirements and verifications to be used - they're also far more efficient now in terms of seeking the next available empty mapspace. Login system reworked to a more stable version. Logins are now executed on a separate threadpool, meaning none of the I/O tasks will be ran on the main game thread. I've also implemented many different login messages on an unsuccessful login attempt, so the player will get a clearer picture of what exactly went wrong. If the game fails to load a character file(corrupt perhaps?), they will be notified to contact customer support. Dwarf multicannon secured up; if you lose your cannon, you can now retrieve it from Nulodion. In addition to this, I've implemented a proper hit pattern for the cannon to mimic RS. The cannon has also had its target checking updated to ensure nothing invalid is being attacked. The only thing not included in the cannon as of right now is area checks - right now, you are able to plant the cannon anywhere in the game you want, granted there's enough room to do so. The area checks will be implemented before the launch of course. Planting cannon is also much easier now than it used to be - the action will function similarly to osrs, where if you try to run away, it will walk you back as soon as you stop - granted you're within a specific proximity of it - and continue setting the cannon up. It also means that the setting up process is not interrupted by combat or anything of sorts. It will also locate a valid position for the cannon in close proximity when you attempt to plant it, as long as the original position - underneath you - cannot be planted at. The cannon's hit palette can be seen here. The carpets system in the desert has been started on. As of right now, you can only carpet between the Shantay pass & Bedabin camp. All of the item plugins have been reworked to a far more reliable system, which will also automatically inform us when the plugins stop functioning(e.g. OSRS changes the right-click options on an item), keeping the game more in-tact in general. Dark areas implemented - any area in RS that would generally require a light source will actually now hold the effect. In addition to this, the gas bubbles and wind in the Lumbridge swamp caves will occasionally put out your open-flame light sources. Light sources also stack up in brightness. Ape Atoll implemented. Players can now transform themselves into various monkeys through the use of Monkey GreeGrees. These actions are perfectly secure, if the player leaves the island as a monkey, they will be transformed back into the human form. Players cannot use the GreeGrees outside of the island. Being transformed into a monkey has its own benefits - the nearby monsters will not become aggressive towards you for starters. Additionally, I've secured the actions you can perform while in the monkey form. Any animation that doesn't fit your current form will be skipped, thus avoiding the possibility of character playing an odd glitched out animation. You can now recolour and clean your abyssal whips and dark bows. You can now mix barbarian potions through the Herblore skill. Chaptered books implemented - a better form of cooks as it allows you to skip to the chapter you wish to read. Stronghold of Security in all of its glory. Contains all of the monsters you'd normally find in it. To pass through the doors, you must answer the security questions proposed, or have set up the two-factor authenticator. Players can loot the rewards from each floor, giving them small loot & unlocking emotes. Players can also create the skull sceptre, used to teleport quickly to barbarian village. Implemented a neat and efficient method of finding nearby entities in a specified radius. This is now used all across the game, and will ensure that anything relying upon it will function. Prior to this, we had duplicate code written everywhere that needed to collect a list of entities; this obviously lead to issues as each piece of code could be different from one another, or contain blatantly obvious bugs. Implemented the means to acquire all valid animations per character type. This feature ensures that we do not allow playing incorrect animations on players or monsters - or players transformed into monsters. This has also been implemented for administrators, so they cannot play invalid animations to glitch their character to look odd or anything like that. It also allows us to automatically - and efficiently acquire typos and other issues in code, as exceptions are thrown when incorrect animations are attempted to be played, allowing us to patch up the issues seamlessly. It also allows us to write combat scripts more efficiently, as finding animations is really not an issue anymore - this also extends graphics, objects etc. All-in-all, it helps us write code more efficiently. Bugfixes You can no longer attack other players' animated armours. Logs are replaced with ashes once again after a fire goes out. Graphics added when getting hit by a snake in the creature keeper room, in the Chambers of Xeric. Melee combat is no longer permitted diagonally. You can now use the Fairy Ring between the Lumbridge shed & Zanaris. Fountain of Rune effect implemented - players will not require runes in the presence of the fountain, nor will they receive experience for casting spells there. In addition to this, the fountain showers the players around it with runes. You can now use the gate between Lumbridge and Al-Kharid, requiring 10 gold pieces to pass through. You can now enter the Mining guild with a Mining level of at least 60. Automatic NPC spawning of the implemented type - it ensures we don't make mistakes which break the NPC. Cleaned up projectile code by manually fixing every single projectile object created across the server. The duration variable was off on all of the projectiles making it difficult and confusing to create projectiles of very slow speeds. Wilderness resource area can now be accessed by paying Mandrith 7,500 gold pieces. Players will no longer lose ammunition whilst in duel arena. Tutorial island no longer crashes players when entering. Route event(finding path to an entity - a player, npc, object, tile) rewritten to a more efficient and less glitchy version. Autocast interface properly secured. We've implemented all measured to prevent spoofing this otherwise potentially very vulnerable feature; You can only autocast the spells visible to you on the autocast interface. A lot of bosses have had the tolerance feature disabled to prevent making them go unaggressive after certain amount of time. Bosses also no longer get "stuck" behind other monsters; they will no longer check for entity collisions, and thus will walk straight through anything in-front of them. Granite maul will now resume combat when you use the special attack as long as the requirements for it are met - this must be done quickly after ending combat. The main idea is that you switch from a weapon to granite maul - which cancels out combat, and then only need to click the special attack bar - which however needs to be done fairly quickly - which will resume combat and unload your special attack(s) on your target, as it is on OSRS. Clan chat secured furthermore; it is no longer possible for the same user to appear twice in the clan channel under any circumstances - an odd issue many servers, including ours(somehow..) had. Never found out what exactly caused it, but after reworking some parts it has disappeared fully. You can now redeem the code 'osrsrf2014' at Diango to unlock the cow teleport animation. A lot of ladders implemented in the lunar isle. You can now release many types of animals, such as chinchompas - it is the equivalent of dropping them, except they will vanish on release. You can now create a scarecrow. Many of the characters were previously rendered incorrectly in chat; this is no longer the case and you can now use the same special characters as in OSRS. Rune pouch will no longer function when not within your inventory. Players can now create nature amulets as well as sinew. Patched up item switching in containers. My attempts at writing an automated system to update the item in the container whenever its attributes changed hasn't succeeded all so well, as it created rare opportunities for items to completely mess up. I couldn't find out the reasoning behind it, so therefore I had to revert the system and stick to a manual-type refreshing. It's not as neat but at least it is secure. Fishing has received a proper delay system in-between the catches. Actions will now be interrupted by level up popup messages - upon closing, the action will continue as normal. Media
  6. Apologies for not posting any update logs for over two months. I took a break after the last update log; after the break I thought I'd finish up raids - figured there wasn't much left - and after that, post another update log. Finishing raids took longer than expected however, as I quickly lost motivation to continue it and took up a lot of other things. Well anyways.. Here are the updates by me from the past ~two months. Updated our server-side data(definitions), reparsed from wikia. Item definitions recompiled, includes all of the newer items. NPC combat definitions recompiled, containing all the newer NPCs as well as fixes for many of the older ones. Added requirements to wield items. Changed special attacks around so the energy amount required is now pulled from within the cache, as opposed to being hardcoded and prune to being invalid upon changes by OSRS. Item tradability is now being loaded from within the definitions in cache, as the variable "can be searched on grand exchange" - most items will match w/ the grand exchange search box; however if we wish to override that, we can easily do so by defining tradability through server-side definitions. NPCs death delays are now calculated from the duration of their death emote, so they don't freeze up remaining invisible for too long, nor disappear too soon. Tasks system has been changed to a functional interface, rather than an abstract class as it was before. This allows us to schedule tasks while having to write much less boiler-plate code. Implemented a bunch of dismantleable items, such as armadyl godsword w/ the ornament kit etc. Wrote a generic system for them. Re-spoofed all of the examines from OSRS - meaning they're exactly the same as in OSRS, not dumped from wikia which provides incorrect ones. Item examines. NPC examines. Object examines. Modified Zulrah's melee attack to strike from the correct side of the NPC, as opposed to always striking from one and the same side. Removed all Math#random references, replaced them w/ server-side respective method to prevent recreating the Random object. Modified object handler packet to handle the clicked object as the one that's displayed, not as the one that was requested by the server. The two can differ under the effects of varbits. Previously we only obtained the option that was clicked from the displayed object, now we also obtain the name, as our scripts system uses names. Implemented model loading from within our source; fully renamed. Rewrote wilderness ditch methods as a lot of the code was boilerplate and vulnerable. Rewrote interface handler into a bi-directional map as opposed to previous regular map. We referenced methods such as isVisible(interfaceId) very often, and since containsValue() is o(n) within hashmaps, it was better to switch to bimap. Converted the project to use gradle. Implemented 2-factor authenticator; fully supported, including misc features such as "remember for 30 days" and whatever else. Modified our regions to hold actual player/npc objects, as opposed to indexes of these entities. TL;DR: Less processing for the server. Additionally added support for lambdas-type looping for both NPCs and Players, as opposed to old version which contained a lot of boilerplate code. Additional memory optimizations. Changed a lot of existing collections to use FastUtils library, mainly to prevent autoboxing and unboxing. Modified the location class to only contain position hash, as opposed to three integers(x, y, z). Location objects are constructed quite often and it consumed a fair bit of memory altogether. Modified object class the same way as I did with location; as opposed to having 6 integers(3 from location) and a long, it now only contains 2 integers (1 from location hash). Modified our definition classes to use arrays as opposed to concurrent maps; with that being said, definitions are all now being loaded on server launch; previously they were loaded from multiple threads on-demand. Many other concurrent collections have now been switched out for the non-concurrent versions, as most of our game thread logic is single threaded, eliminating the need for concurrency protection. Implemented the orb of oculus and all its functionality. Began writing the inferno. Defined all the spawn locations within inferno. Wrote the instance system for inferno. Wrote all the dialogues for inferno. Wrote the shortcuts base, based off of the regular obstacles. Made adjustments to obstacles. Implemented all the configurations behind achievement diary interfaces. The system itself is yet to be written however though. Implemented the royal seed pod. Implemented the ability to delay object clicks for a tick after reaching them; this is to prevent interacting with them from "afar"(technically, as far as server is concerned you'd be standing right next to the object, however since some animations block movement, you could be interacting with the objects from as far as two tiles away. This is no longer a thing though, and it is delayed just as in OSRS). Implemented entity interactions as they are in OSRS - once you start interacting with a NPC, they will face you and keep facing you(unless someone else comes along) until you either finish talking to them(close dialogue) or if you leave their presence. This is capped at one minute though, to prevent people from being able to freeze NPCs to stand on one spot and pickpocket - or perform any other actions - indefinitely. Added support for "check materials" in the construction skill guide interface - clicking on a constructable object will now inform the player what they need to build the object. Access masks system rewritten. Defined the remaining access masks. Converted every single access mask packet reference to use access mask objects themselves, as opposed to magic bitpacked values. This allows me to better understand how a component behaves simply by looking at what information we transmit to the client; because of this change I've been able to implement many "new" features which I wasn't aware of before, as I didn't know what the magic value represented. Implemented a bunch of basic dialogues for NPCs across lumbridge - Thanks to our beta tester Phippzy for writing them for me. Patched up NPC directions(and spawn directions). When a NPC is being added to your viewport now, it will face the same exact direction as it would for players who've had the NPC in their viewport for longer periods of time; meaning there's no desynchronization between these. Small QoL optimization most won't ever even notice. Rewrote movement mask the way OSRS has intended. Previously we flagged the movement mask every single step the player took. This obviously isn't optimal, and meant we wouldn't ever need to use the other movement mask. I've changed this to function the way intended, thus greatly reducing bandwidth usage(not only does it not have to flag movement mask as often now, but because of that, it won't have to send any mask data at all because there's nothing that's 100% sent now as it was previously - meaning this one small change actually changed much more than that. Patched up an issue with being able to spam click dialogues and occasionally glitch out and close them mid-way through by doing so. Rewrote our container system. The new container system is much more efficient and less prone to bugs as the old one. Container will automatically get its maximum size from within the cache. Contains a treeset of free slots, therefore meaning to locate the first empty slot available - which was referenced very often - we no longer have to loop over all of the items within the container. Container system uses an Int2ObjectLinkedOpenHashMap as opposed to being backed by an array; The reason I chose a map is because of our character saving method - we use json, and saving an array of nulls(such as bank - 816 slots of nulls) would greatly - unnecessarily - impact character sizes. Additionally, since it's linked, looping over it will be very quick, although at a cost of memory which I've calculated out to be still worth it. The container supports three different containment types - never stack, normal(stack if stackable) and always stack; all of these are already used in the game as well, despite seeming unnecessary. Properly supports item attributes as well - 'always stack' will not stack items with attributes, as that'd cause loss of information - this is never needed in the first place to begin with anyways. Container updating is now much easier than before - we do not have to manually track the slots that were changed or anything like that; the container system will automatically flag the slots that have been changed, and at the end of that tick - if update is requested - it will update all of those slots(or the whole container if the amount of modified slots exceeds 75% of the entire container size, since that's approximately when it becomes less efficient to use partial update packet - because it has to first write the id of the slot to update. The container system contains new methods for withdrawing and depositing from one container to another - all done internally. To move an item from inventory to bank would only require us to write one line of code, as the rest would automatically be handled by the methods themselves. Added support for 'result' object in containers - every action, such as add, remove, deposit, withdraw etc will return a result object which contains information about the transaction - what was requested, the type of the transaction, how many succeeded etc. Additionally supports a lambdas expression for failure, to handle the remaining amount of items; so for instance we can simply do player.getInventory().addItem(new Item(11802)).onFailure(item -> World.spawnFloorItem(player, item)); Implemented Rune Date system, the same exact system RS uses for to keep track of daily events etc. Thanks to @Polar for sharing. Wrote item on npc plugin system. Added the click option string to interface plugins, so we can now identify a lot of components simply by checking the string; meaning it's less likely the interfaces will break when components shift. Implemented a polygon system, as well as an area system. Able to define any shape of area, even circular shapes w/ center cut out etc using the polygon system. Very fast and efficient - to my surprise actually. I expected polygons to be quite slow due to the structure of them, but they're very efficient for their nature. Due to the areas system, I no longer have to write controllers so often; the areas also support processing, which means I can implement area-effects, such as desert heat within the areas themselves, meaning less-scattered code. Areas also support dynamic regions - therefore I'm able to duplicate the static area of - for instance corporeal beast - the entire lair into where the dynamic region of that area is. Rewrote bank for the last time. Uses my new container system. Overall, a lot more efficient than the previous version of the bank. Supports proper item switching once again; able to insert items(from one tab to another, from within tabs), able to rearrange items however you wish. And something I didn't know of before, nor did I have implemented - able to rearrange the tabs themselves; you can actually just drag a tab and reposition it as you wish. Tab creation, collapsing etc fully functional. Placeholders functioning perfectly. Item incinerating functions exactly as in OSRS. Bank fillers properly functional - these were out of date since OSRS modified the fillers some months ago - after I initially wrote bank. This was another reason for the long awaited bank rework. Whatever else is in bank, is fully functional. I had numerous people test bank very thoroughly, some issues were found which have now been patched. No new issues have since then popped up. Dialogues code will now check if the given dialogue interface is even open before continuing with it - this was potentially harmful for the server. Unsure how I missed this one, as I have prevented all of the other similar cases. Changed hitpoints and prayer points to be read as normal skill levels, as opposed to unique variables. Unaware as to why we separated these in the first place - the way they are currently is actually much easier to process. Rewrote all input dialogues. Previous code was very verbose and potentially vulnerable in places. Additionally implemented a lot of safety precautions for input dialogues - if any interface is closed while input dialogue is open, the input closes as well. Input also closes when dragging items etc, fairly safe from issues now. Implemented the name-tag mask for players. I was previously unaware of the true reason behind this mask - I knew it was only used in games room before. However now I've found out that it's used to display icons next to players' names, for instance ironman icons, deadman mode keys # etc, admin rank etc. Rewrote all our spells to pull information from within the cache. The spell level and the runes required will be pulled from within the cache. The spells are located based off of the name associated to each component(component id is what's sent from the client to the server when working with spells). Our spell scripts all have identical names to the spells in the cache, therefore it's very easy for us to format the name of the classes and pull them from a map. The above point basically means we no longer have to worry about OSRS adding new spells and completely messing up all of the other spells(as spells always get shifted when they add new ones - esp. like surge spells, since it shifted 3 spellbooks once it was added - had to manually fix all of the component ids). Slightly rewrote our music system. The previous formula I used for associating songs to the slot ids clicked was actually completely wrong to my surprise. I've patched that now and optimized the music system further since it allows me to do so now. Instead of saving a list of all of the music tracks that the player has unlocked, I now just save varp values - therefore just 20 ints, as opposed to potentially hundreds. The 'hint' option on tracks will also inform the player about where the track will be unlocked. Tom & I changed our cache library to OpenRS; all cache definitions since then are now rewritten. Rewrote price checker completely; also changed the container to use my new container system. Split the login sequence into two chunks - things sent immediately on login, and things sent after the lobby has closed. This actually patched several graphical issues. Defined numerous areas, regardless of whether they may actually be needed or not as of right now. Potentially going to write a custom system using these areas in the near future; additionally, the more areas we define, the less the server has to process upon player movement - weird how it works, isn't it? Rewrote doors code from some autistic 317-like bullshit code we had before. Overall length of the code lowered from roughly 150 lines down to just ~10. Supports diagonal doors etc. Also associated open doors to closed ones, so doors will now actually change the right click option depending on their state. Implemented global item spawns. As of right now, we have roughly 400 global items spawns. Special thanks to all of our beta testers who participated in collecting these spawns for us! Slightly rewrote barrows to function on-top of an area system, as opposed to controller system which was quite vulnerable, especially when dealing with administrators. Barrows system will now initiate regardless of how you enter the area, unlike before where it only functioned if the player entered it the correct way - from the very top. Rewrote our combat system, as it has long been needing a completely cleanup due to messy and unoptimized code. Ranged Separated all of the unique combat methods for ranged in their respective classes, to prevent cluttering the main class. Fixed problems with ammunition dropping; old methods were quite unstable and messy. Added a ton of missing special bows/weapons. Magic Separated fire spells, built-in staff spells and god spells from the generic spells code, to prevent cluttering the main class. Code in general is now much more efficient than it was before - magic was the most unoptimized class out of all. Patched an issue with player running instead of walking when only needing to move 1 tile closer to the target. Melee Separated barrows sets, granite maul and dinh's bulwark from the main class, since they all required some special code, it was cluttering the main class. Player will no longer always run to the south-eastern corner of the NPC when trying to attack a NPC while being under them. The location to which the player moves is now calculated, and the player will move to the location which is the closest to them, from which they may resume combat. In general, all of the combat classes are much more efficient and easier to understand now. In NPC combat, I also fixed the same issue as explained above regarding being under the target. Large NPCs will no longer walk back and forth when trying to attack you, while you stand under them. They will find the closest possible exit and walk there, after which they resume combat. This issue in general has been on every server I've seen so far, therefore I'm quite happy that I've got it patched. It was also the last issue I knew of we had in our combat. If you go into populated areas such as godwars, you'll notice no walking back and forth or anything similar, NPCs fight eachother properly, exactly as they should. Since some of our block animations with certain items were quite glitched, I've now written an anti-system for it. If the animation that's about to be played off as block animation by the player doesn't match the player's skeleton, the animation played will be replaced with the default unarmed block animation. This prevents characters glitching up, as they did so quite often with unique weaponry. Rewrote projectiles for the last time. I've finally figured out exactly how the projectiles work, therefore I've been able to patch a fairly big issue all servers - including Zenyte - have. Projectile delay until impact. This issue consisted of two parts; With the help of client, I've managed to figure out the exact formula behind calculating projectile duration. We're now using that formula - old one was off by quite a lot; wasn't as visible with normal-distance projectiles though. The second part of the impact delays was tick lag. Since projectile duration is defined in client cycles(frames), which are 20 milliseconds each, it was very possible for us to send projectiles with for instance 3.5 ticks duration. This would mean that - since the game engine itself runs on a tick-based system - there would be either a delay in the hit(before it lands), or it landed too soon - by half a tick. It was quite a small issue in general, but it bugged the hell out of me, as I was so close to perfect projectiles. Therefore I looked into the packet and figured out how to readjust the projectile so it finishes in synchronization with the tick system, as well as our getTime() method which returns the duration of the projectile in ticks. I've never seen this smooth projectiles on a RSPS before. Besides the changes above, I also looked into the offset variable and figured that one out as well. Turns out my previous methods - made to calculate the start position of the projectile based on the direction and size of the entity were completely unnecessary. After properly implementing the offset variable, the projectiles system will now automatically calculate the offset position of the projectile, without having to actually go through complex calculations or manually defining it, although the latter is still an option for those special projectiles. Since we do not have all ladders currently defined, I wrote an anti-method that prevents the player from being able to use an undefined ladder - which would've otherwise taken them to either an unwalkable location, or walkable "second level" of for instance dungeons - which shouldn't be accessible, which also would've allowed them to walk anywhere they wanted. Rewrote all of our tick variables to use a queue, instead of manually defining all of the variables. The new queue system is much easier to use, and requires the game to actually do less processing than before, as the queue would only process the variables that have a value, as opposed to processing all of them as before. Chambers of Xeric Since I'm practically done with the chambers of Xeric, I've decided to make a conclusive update log on these. I wanted to do it after I finished the entire thing 100%, however I've lost motivation to work on it again and I'd rather not push the post off for some more weeks. Going to explain here everything that our raids contain, in depth. I'll mark features unfinished as red or yellow, depending on their state. The rest of the features will be kept green, as they're complete. Map generation Uses the same patterns for boss formation as OSRS. Uses the same layout for rooms as OSRS, including the exceptions provided here. Challenge mode contains every single room provided in raids, in the same exact formations as OSRS; additionally, challenge mode consists of 3 floors of 8, as opposed to 2 floors of 7/8 as in normal raids. With the exception of challenge mode which contains fixed-format maps to keep everything fair(since it has a scoreboard), the flow of the map is completely random and generated by our algorithms. The map can flow in any of the four directions from the start - usually on other servers the map only flows x++ -> or y++ ->, not vice versa. 100% success rate for calculating maps. Tested this by generating thousands of random maps, with fail-safes all across the code. Initially it occasionally collided or glitched up, however that has since then been fixed and is no longer a possibility. Additionally, if by any miracle something were to go wrong in map generation, the given map would just be discarded and a new one would be generated in place of that map, until a successful map is created. The empty chunks all across the floors are wrapped with what I call 'wrapper chunks', which prevent players from being able to see the bottom floors, which would otherwise be possible. Skills Farming Rake-able patches can be raked for up to 5 seeds per "raking session" - to prevent AFKing. These patches never deplete, and give random seed out of the three possible options. Soil patches are public farming patches in which everyone can patch to -and harvest from at the same time. Takes 30 seconds for each stage; all patches have four stages. Therefore it only takes two minutes for the plants to fully grow. Miscellaneous activities - such as clearing the patch, inspecting it etc have properly also been implemented. Fishing Players will automatically catch the best fish they can catch with their fishing level. Occasionally, a sea snake will pop out of the fishing spot, striking the player for some damage. The reason for this is because the fishing spots are objects - they never deplete. Requires cave worms - which can be found by killing scavengers - to catch the fish. Herblore Players will be able to brew the strongest type potions for their level. All potions are available. All three herbs can be cleaned. The potions will carry attributes regarding the creator of the potion. This is used in the point system, to grant extra points for the brewer of the potion, if the person drinking their potions is someone else, other than the brewer themself. Woodcutting Players can chop saplings found within raids for kindling, which can then be lit to make a fire. Storage units Shared storage unit Can be accessed only within raids itself. All players can access shared storage, adds items into it, take from it - completely public. The sizes of storages are 250, 500 & 1000 - depending on which unit was built. Players get a warning message upon opening the shared storage for the very first time, informing them about its functionality. Players can only deposit roughly 140 items into the shared storage, most of which are just items found within raids, but there are also some exceptions such as tools. Private storage unit Can be accessed inside and outside of raids, however items cannot be deposited inside the storage while outside of raids, only withdrawn. This type of storage is per-player only. No one else within the raid can access this type of storage. Players can deposit any items, including the ones found within raids. Items found within raids, if deposited in the storage will be removed from it when leaving the raid. If the player leaves the raid without picking their rewards at the end of the raid, the items will be deposited within the private storage if it has any space in it, or sent to bank otherwise - if both containers are full, the items are lost. Books All of the books can be read and contain the same information as in OSRS. A total of 7 books from raids have been implemented - which as of right now, is all of them. Rooms Crab puzzle room Contains four crabs, four crystals and one light focus. Objective is to let the light focus bounce against the crabs, after which the light focus turns into that specific colour; the second part of the objective is to get the light focus to move towards the respective crystal. After all four crystals have been transformed w/ the respective colour focus, the puzzle is considered complete. Players standing in the way of the focus will be hit for quite a lot of damage. The focus is constantly moving; explodes if it hits a wall; turns to another direction if it hits a crab. Players can freeze the crabs by using the "Smash" option on them, which requires the player to have a hammer(warhammers function as well). The crab will remain on that specific spot for up to 20 seconds. After all four crystals have been solved, the crystal blocking the exit to the next room will be shattered, allowing players to move foward. Creature keeper(AKA corrupted scavenger) room Contains a large number of thievable chests, along with a hungry corrupted scavenger, blocking the exit. Objective is to feed the scavenger, so it will move out of the way and fall asleep, allowing the players to pass. All of the chests will have the same thieving level to thieve from them; the level is determined based off of the party, therefore not everyone can participate in this room. Players have to feed the scavenger consistently. If the scavenger has been fed some grubs, and the food trough becomes empty - the scavenger will over time become hungry again, slowly resetting the progress. While thieving, the players can get hit by snakes rarely popping out of the chests. Additionally, the players may come across some edible bats, to heal themselves. Dark altar(AKA mystic mages) room Contains a random number of skeletal mystics; amount of them depends on the size of the party. Objective is to kill all of the mystic mages, after which the mark of power - blocking the exit - is dispelled. Deathly(AKA agility) room Contains two rangers and two magers. Objective is to retrieve the keystone crystal which is found at the other end of the tightrope, which is being guarded by the magers and rangers. By default, the archers and magers are non-aggressive. However if anyone attempts to walk across the tightrope, they will all bombard that specific person, hitting very hard and accurately. The crystal is used to dispel a magical barrier blocking the exit to the next room. Guardians room Contains two guardians - crafted from ancient rocks - who block the exit to the next room. Objective is to kill these guardians - however to do so, players will need to smash them with pickaxes, as any other weapon renders useless against them. Attempting to pass through to the next room will result in the guardians pushing the said player backwards, dealing them some damage. Ice demon room Contains an ice demon, and up to four icefiends. Objective is to defreeze the ice demon - as it's blocking the exit - and kill it afterwards, since you still can't exist after it defreezes due to an ongoing ice-storm infront of the exit. Players have to light kindling in the braziers found infront of the demon; keeping them lit for long enough results in the ice demon defreezing. If the braziers all extinguish before the demon becomes unfrozen, the demon will start freezing up again. The demon attacks players according to what they're praying Scavenger rooms Two different scavenger rooms - large beasts, and small runts; large ones drop 3 drops at a time, small ones 2. Scavengers respawn almost immediately, drop a large variety of supplies needed for the chambers. This room is optional, only used to get supplies. Lizardman shaman room Contains a fixed number of lizardman shamans, depending on the size of the party. Objective is to defeat the lizardmen, after which the spawns blocking the exit will explode. Lizardmen have their full combat script - including jumping, purple spawns etc, all functional just as should be. Muttadile room Contains two muttadiles - a small and a large one(large is by default under water), and a meat tree. Objective is to defeat both of the muttadiles, after which the crystal blocking the exit vanishes. Muttadiles will occasionally try to go to the meat tree to eat some meat, healing them in the process. This can be prevented by freezing the muttadiles, or creating a barricade of players infront of the meat tree - NPCs cannot walk on tiles occupied by players, therefore blocking the muttadile from being able to eat. The large muttadile comes out of the water after the small one dies. Before that, the large one will send fire waves to all players within the room. Both muttadiles are extremely powerful close-up, therefore it's suggested to avoid making melee-contact with them, as it can result in being 1-hit even in small teams. The muttadiles will occasionally move towards their target, so players have to beware and move out of the way every now and again. Tekton room Contains just one NPC - Tekton. Objective is to defeat tekton, after which the crystal blocking the exit vanishes. Tekton will be using his massive anvil throughout the fight. When players first approach tekton, he will be smithing at his anvil. Once the players enter the required proximity, Tekton will retreat from the anvil, pick a target and fight against them. Once tekton takes in his fight stance, he will slowly start fighting the players. Players can avoid tekton's attacks by running away from infront of them. If there are no players in melee proximity of tekton when he lands a hit, tekton will retreat back to the anvil. While smithing at the anvil, sparks will fly from across the room towards tekton, dealing massive damage if hit. Tekton will enter enraged form after retreating from the anvil, which means his stats will be higher during that brief time, and it will be harder to hit him. Vanguard room Contains three vanguards - of each combat style. Objective is to defeat all vanguards, after which the crystal blocking the exit vanishes. Vanguards will move in synchronization across the room every 20 seconds, shifting their positions. Players must keep all vanguards' health at approximately same levels, since if the vanguards health difference is more than 33%(of full health), vanguards will reset their health when they shift positions the next time. Vasa Nistirio room Contains the boss itself - Vasa Nistirio, and four crystals(which appear as objects). Objective is to defeat Vasa Nistirio, after which the two small crystals blocking the exit vanish. Vasa will move from one crystal to another, charging an attack at the crystals after reaching them. If the crystal isn't defeated before Vasa finishes charging the attack, the whole team will be punished when Vasa moves to the center of the room, as all players are teleported, and half of them will be hit for high damage. Vespula room Contains Vespula, four lux grubs and a portal at the center of the room. Objective is to defeat the portal at the center of the room, after which the boils blocking the exit vanish. Players must feed the lux grubs to prevent them from transforming into vespine soldiers - after which both the portal and vespula heal to full as well. The portal can only be attacked properly for brief periods after vespula stops flying - which occurs when vespula's health drops down to 20% - after the period ends, vespula will heal back to full, as Vespula cannot be defeated before the portal. Attacking the portal while vespula is flying will result in Vespula entering enrage mode, during which all players within melee distance of Vespula will receive heavy damage. Great olm room Contains the great olm. Objective is to defeat the olm, however to do so, players will first have to go through many phases of it and take care of its hands. Olm will face the players whenever they change position, during this position-changing time, it skips an attack. Olm's left hand will display different signs before an attack occurs, showing what type the next attack will be. During the first phases, olm's head cannot be damaged as he re-heals every few ticks. Instead, the phase is considered finishes after both its arms die. During the final phase, both hands must be defeated within a 30-second window, otherwise olm will regain control of his hands and heal back to full. After the death of Great Olm, the crystal blocking the exit vanishes, and rewards are generated for the players still in the raid. Olm has 14 different unique attack styles. Acid drip attack: Olm smothers one randomly picked player in acid; after being done so, the player will be covered in acid and will drip of acid - the tiles the player stands - or moves - on will be filled with acid. Standing ontop of which, the player will be dealt constant poison damage. The dripping effect lasts for 12.5 seconds, the pools remain on the ground for 30 seconds. Acid spray attack: Similar to the drip attack, however instead of targeting one player, Olm shoots a bunch of poison-pools at random tiles in the room. These pools will remain on the ground for 30 seconds, just like the ones above, and act exactly the same way. Crystal bomb attack: Olm shoots two - or three, depending on size - crystal bombs on the ground. These bombs will deal heavy damage if they hit any of the players. They explode after 5-6 seconds of being planted. Crystal burst attack: Olm shoots small crystals under all players in the chambers. After a short period of time, these crystals will burst into large crystals, damaging anyone standing ontop of these crystals. Deep burn attack: Olm will pick a random target in theh room, and attack that player with a burning attack. The said player will then be dealt constant damage over five cycles. If any players are found standing next to the infected player while they get burnt, the cycles will reset, starting from 0 again, and the other player will also be infected. This will carry on until the attack has successfully finished 5 cycles without infecting anyone else during this time. Specific falling crystal attack: Olm will pick a random target out of the players in the room, and start dropping crystals ontop of the targeted player. The said player will then have to move out of the way of the crystal, or otherwise get hit for a fair bit of damage, as well as frozen on spot, after which they're guaranteed to get a few more consecutive hits. Fire wall attack: Olm picks a random player in the room, and shoots from lines of fire around that player. The players caught in the fire will then have to escape the attack by extinguishing a fire - creating a small escape window - or otherwise be damaged for a lot. Players can extinguish any of the fires by shooting a water spell at it. Life siphon attack: Olm sends two projectiles at random tiles in the room. These projectiles will create blue pools on the ground for a brief period of time. Any players not standing on the tiles will be hit when it disappears, and the Olm will be healed by however much the players were hit for. Lightning attack: Olm sends lightning spirals across the room; any players caught in them will be electrocuted for some damage, and frozen on-spot. Their overhead prayers will also be disabled. Sphere attack: This attack has three elements - melee, magic and ranged. Olm will shoot a random orb at random players in the room, which slowly fly towards the said players. On impact, if the player isn't protecting against the given type, they will be hit for heavy damage. Swap attack: Olm pairs up up to four players in the room; after awhile, if the paired players aren't both standing on the same tile, their positions will be swapped, and they will receive damage, depending on their distance. Falling crystals during phase transition: Olm will cause the ceiling of the room to collapse and shoot down loads of crystals; any players caught in them will be damaged. Ranged attack: Olm shoots a ranged orb at random players in the area its head is turned to at the given moment. This is the default, regular attack. Magic attack: Olm shoots a magic orb at random players in the area its head is turned to at the given moment. This is the default, regular attack. Party system The clan chat owner posesses the ability to create a raiding party. Able to configure the party requirements; means you can set the levels required, maximum party size etc. The owner of the clan - and any players eligible for kicking others - can kick other players from the party at any given time. Players can advertise their raiding parties, after which it appears on the raiding board - anyone can then view the party, and of course - join it. When a player eligible for kicking leaves the party - the party system will check for if there are any players eligible to kick remaining in the party. If none can be found, the party dissolved, since no one is eligible for kicking. Players can log out and back in and appear in the same raid, as long as the raid isn't finished. Scoreboard Contains results of challenge mode raids - different party sizes categorized in there. Challenge mode Players can select the challenge mode when creating a raiding party. Challenge mode consists of 3 floors, as opposed to 2. Players have a time limit for challenge mode raids - if this is exceeded, they will not be eligible for challenge mode rewards. The structure of the floors within challenge mode never changes. Rewards After the Great olm falls, players will be eligible for rewards. The more points the players have, the more likely they are to receive a rare drop. If no rare drop is received, the player receives supplies instead, the amount of those is dependant on their points. The rare reward roll chance is capped at 80% - if the team has more points than the cap suggests, the team will get an additional roll w/ the remainder percentage at a rare drop. Up to three rare drop rolls are given per raid, if the team achieves high enough points count. Current rewards formula is exact OSRS replica, with the exact same weights attached to the rewards. This may or may not change in the future, depending on feedback from players. Media!
  7. We've updated our client to revision #167! As of right now, it's the current OSRS revision. Updated client from revision 156(cache was at 161) to both 167. Alongside updating all of the packets that we previously had, me & Tommeh have implemented every single client -> server packet that exists in this revision. We've also taken care of most of server -> client packets, with under 10 remaining which I'll identify in the near future. By identifying many of these packets, I've now got a better understanding how RS deals with bots; meaning I'll hopefully be able to write a bot detection system for Zenyte. Rewrote our packet decoder to use ByteToMessage decoder instead of the old ReplayingDecoder. Previously had issues with how slow the replaying decoder was, this was specifically visible with the interface close packet, where it'd hang on for over a second before actually sending the packet. After changing the decoder, this delay is now completely gone and the packet is received instantly. Implemented a few hundred more drop tables. ~400-500 drop tables left to implement before all attackable currently spawned NPCs will have drops. We're lacking some spawns though, so we'll definitely have to implement some more of those as well as the drops in the future. Fixed a small issue with NPC movement collision detection. Was using a few incorrect variables thus resulting in NPCs being able to simultaneously collide on the same tile. That's no longer possible. Fixed the hit delay on spells without projectile, such as blitz spells. The delay was previously too short; it's now possible to stack magic and melee hits together with blitz and other spells. Added support for processing outgoing hits - this is from both ends, whether it's the player or NPC sending a strike; there's now a method to override the hit and modify its attributes before it reaches the target. Rewrote our mask builder to a nicer format; included a bunch of other previously undefined masks. Patched up the twisted bow accuracy and damage formula; I was previously not adding all the percentage multipliers up, leading to both formulas generating slightly higher numbers than they should've. This is no longer the deal and the max hit is now equivalent to OSRS. Hits dealt by other players/npcs around you, for the damage of 0 will now appear. Since OSRS changed their hits mask to RS3-style some time ago, I thought they'd take advantage of hiding non-relative 0 hits; I was wrong there and I've now reverted this. Rewrote our server -> client packet structure to make updating revision easier. Cleaned our GPI code a little further, fixed a few small appearance issues while doing so. Changed our smithing code to pull information straight from the cache. Rewrote the structure of ground items/packets; changed it to plugin system. Additionally implemented two other floor item packets, one of which is completely unused by RS. Added proper support for combination foods/drinks. Cleaned up firemaking code, added support for gnomish firelighters and coloured logs. Implemented overload potions and a bunch of ales. Implemented a chunk-based system alongside our regional system. Each entity will now keep track of the chunks that surround them, as well as the chunk they're on; Effectively tracking 9 chunks. With the implementation of the chunk system, I've rewritten our NPC collision checking code to use chunk-based system over regional system. This effectively means the code will now have to check for an area 64 times smaller than before. (Previously 9*64*64 tiles, now 9*8*8 tiles) Added a new hit type for the server that neglects all prayers and still triggers effects such as vengeance, recoil etc. Implemented the option to add favourites to fairy rings; A player can have up to four favourite destinations selected at a time. Added the option to cure toxins by clicking the health orb; After clicking the orb, depending on the state of your toxins - if you're venomed, the game will try to find a potion to cure your venom, the exact same goes with poison and disease. Rewrote our item equipping/unequipping code as it was a huge mess before; added the missing features to it. With the item equipping/unequipping rework, I've written a plugin system to handle these calls. Implemented the polls system. Each poll contains information about the start & end date, the state of the poll and other necessary information, such as the questions etc. All poll answers are saved per-player as well as globally on the poll itself. Implemented appearance caching. Effectively what this does is reduce bandwidth usage when adding new players to your local viewport; If the player had previously been in the local viewport and their appearance information hasn't changed since then, this given player's appearance information will not be sent to the client as it's already cached there as well. Added support for basic dialogues that have no 'continue' option. Added support for true splashing. Previously, a splash would occur whenever the hit's damage was zero. In OSRS that's not the case, as a hit is set to splash when the method that rolls accuracy returns as false(meaning the hit is a complete miss). However if that's not the case, OSRS rolls the damage from 0 to your max hit, meaning that yet again, the hit can be zero. When it's a zero in this case, the hit will not be a splash and all of the effects will also apply on the target(such as freezing effect on ice spells). This is now the same in Zenyte. Fixed prayer buttons while being in a locked state; Client predicts the click and highlights the buttons whenever you click them to keep the overall feel of it smoother; however when you're in a locked state, the server doesn't accept that; previously the prayer would remain highlighter regardless - this no longer happens and the prayers will remain in the state they should be while locked. Rewrote the system behind showing right-click options on familiars. OSRS apparently has a varp that hides the right-click options on your current familiar. We previously simply showed a different npc for clients other than the one who owns the familiar - without options. Fixed the deposit/withdraw option for last deposited number. Wasn't sending the respective varp to set the value before. Rewrote our farming system updating process. Previously, we'd update the state of the patches whenever the player entered the region that the patch was in. Turns out this will not work as there are far too many exceptions that'd have to be written, therefore I've rewritten the system to update the state of the patches whenever the player enters a certain radius of the patch, meaning they no longer collide as previously. Implemented the woodcutting guild shrine - players can now sacrifice their bird eggs there to receive prayer experience, seeds and potentially the evil chicken costume. Added semi-support for forums & in-game integration. There's a long way to go there still. Improved the granite maul special attack. You can now quick-spec with it by switching from another weapon - like a godsword to the maul, without having to yet again click on the target - it will now attack your previous target. Rewrote our clans system. Added proper restrictions, cleaned up the code as it was an actual shitfest before. New system allows us to better handle the clans system by having the ability to override certain methods whenever in a certain area, without directly affecting the clans code itself and making it nasty. Only have one piece of media to show as most of these updates were more back-end non-graphical changes, but nonetheless, I'll demonstrate the poll system below.
  8. Kris

    Staking clan

    Wouldn't it be better & easier just to merge the two together into one, than to manage two simultaneously? Good luck.
  9. We haven't settled. There will be many community polls prior to release in which the community (for the most parts at least) will decide the fate and direction of the server.
  10. This is correct. All of the gamemodes will share the same experience rate. There won't be any unique XP rate modes in the economy world. We've already settled on this, gamemodes just overcomplicate everything and often times take the joy and feel of accomplishment out of the game.
  11. Fairly good guide, I've definitely done some of these things on my own PC in the past. Another, fairly nice option to speed up your computer is a program called TuneUp Utilities. The program manages your background tasks - shuts them down if they're not running, helps clean up your computer from trash, fixes registry errors, shortcuts etc.., a lot of small tools combined in one. I use that program whenever playing high quality games, such as assassin's creed origins - allows me to get more FPS out of the game. Good job though.
  12. Kris

    Zulrah

    Looks good. Noticed an issue with pathfinding at the end of the video, kept running you towards Zulrah. Not 100% sure if it's an issue but I'll have a look at it, if it is I'll be sure to patch it. Also fixed up your defence icon size, appeared massive.