|
Thanks for thinking of the project things are going well and I’ll be writing up an update to post soon!
Rune1 was largely a recreation, they were missing a fair bit of original data so they worked with what they had. As Rebecca mentioned, it was a 317 server/client with sprites/data brought in from 194/289/319. They may have even needed to remake some things. I’m not sure if they had any data that wasn’t already out there. Their project was cool, but this is 100% original data and I’m not really missing anything
I may look through their cache one day just to see what data they used/made, I am curious
Hey everyone, I know it's been a couple weeks! The project is still going and I hope to have some new screenshots soon. Just wanted to post a quick update:
I started a discord (DM me here or on Discord Pazaz#0001 for an invite) to post more frequent updates/generate discussions, although I still plan on updating this thread at least every week/every other week so nothing is ephemeral.
Most of my recent changes have been around organizing the cache files and being able to repack edited definitions. I'm able to edit NPCs and items (soon objects) by generating a new npc/obj.dat + idx, and sending the updated files to the client. I've also organized a ton more - even as far as giving autogenerated names to model IDs and letting definitions use those names. This isn't so I can make custom content, but rather to organize data so I can use it in a scripting system.
Pretty much every NPC/Item/Object ID has been mapped to an internal name if they had a display name to reference - then I further renamed some entries manually.
I can also track content changes right in git if I make any fixes. Server-only fields (equipment bonuses, combat stats, wander range, ...) can go into these definitions and not have to be sent to the client, too.
Spoiler for Item definition:
Spoiler for NPC definition:
As for the scripting system, I'm working on figuring out a good solution for that will support delays and queues. I'll go into more detail once I've worked something out. Expect plenty of screenshots then
The current thought is either make an interpreter for a RuneScript-like language (easy to control the flow and pause execution):
Spoiler for RuneScript-like:
Or use something like Lua and handle delays with coroutine.yield()/coroutine.resume()
I can’t interop with Kotlin/Java, my server isn’t in Java/KT, but that’s a good suggestion and something I tried to consider I understand it could take longer but this is just for fun!
I’ve tried to keep it simple; The “language” as it is now is more of a regex parser around keywords and symbols that change the instruction pointer, “stack,” and variables inside the “heap”. I can trigger/delay/cancel functions, conditionally branch, and edit variables. It doesn’t need to do much more than that. It also has very low overhead.
I just needed some way to control the flow basically, and for anything complex (i.e. bitfields) I can bind it to functions in my server so I don’t need to replicate syntax features etc in there, within reason. I don’t want to make it barebones but I also don’t need everything either
It triggers a script instance when a matching packet trigger comes in, and I have a delay “function” exposed that stops interpreting there and waits X ticks before continuing interpreting at the last point. The script/event queue can be cancelled outright depending on the types of other scripts in the queue
Would be nice to see an open source custom scripting language.
loving the progress paz, great work!
JavaScript/NodeJS, which is a big reason for me needing to come up with a solution that lets me control script execution completely. I can't spawn a second thread, so I have to rely on keeping my main thread as free as possible. I'm also trying to avoid callback hell (trying to handle script delays/timers in JavaScript). Having the content separate also makes it easier to change languages if I run into a hard limitation one day, but I think a smart design can go far
Update 1: Scripting progress
The scripting language is coming along nicely I posted this on my discord a few days ago now, but I can completely lock a player (script execution + input) via `p_delay` for N ticks:
Spoiler for Example:
Spoiler for Test script:
It stops all interaction behaviors and doesn't execute any scripts until the time is up. I don't have timers or other types of queues implemented yet so it doesn't handle anything with that.
Update 2: Site registration
Finished templating the registration page + steps! It connects to a database and logging into the world uses the same database.
Spoiler for Video:
I'll update the main post's sections when I get a chance -- plenty to touch on. I've been working on organizing data lately. One interesting finding: the 194 cache has a _lot_ of internal names for objects that I would like to match and use. That'll make a quality map editor possible one day, ideally you should be able to search for "roof_greyslate" or "shiphull_cannonopen" etc. in a window just as Jagex can do. I wrote something to match the different model order between 194 and 225 (we have 204 now so I should repeat the process to get more matches) and from there let me match the object definitions' order, so I'll have that done at some point.
I sent an invite on discord, I am interested in an invite to the main group.
Yep, those names are a really awesome part of the definitions. I remember looking through them all and being like "This is cool".
There are 1587 models used in 204 and 1567 in 194 for objects/locs. Out of those models, there are 1177 that are not identical from when I checked. That was mostly relayed to the triangle/priority information. I think there were 188 remaining left after that which were not "exactly" the same. These are just my notes so those numbers might be slightly off.
« Previous Thread | Next Thread » |
Thread Information |
Users Browsing this ThreadThere are currently 1 users browsing this thread. (0 members and 1 guests) |
Tags for this Thread |