Jonathan-Greve / Guild-Wars-Ghidra-files

9 stars 1 forks source link

Private Server Preparations / Conservation #1

Open MeFisto94 opened 8 months ago

MeFisto94 commented 8 months ago

Hey Jonathan! You did a great job with your reverse engineering efforts so far. I've seen a reddit post about trying to work on a private server and I think it's an interesting task, even though (or especially because) ArenaNet is still doing the work of keeping the servers running and even updating the client.

I think while the servers are still running, the most important task that we have is data gathering. You probably know more than me, but I imagine that things like spawn areas for mobs, quest dependencies, maybe even their text, are all stored on the server.

For this, I could imagine using your shared memory library (or potentially Andraste), to a) Dump every packet (except logon challenge and maybe private messages) after decryption, unframing and decompression b) When packet handlers have been implemented, dump the data in a more structured format (e.g. in a sqlite database, for every creature id, every seen position) c) When desired to go the extra mile, a website to share, edit and visualize these datasets, would be awesome. Even if not for the private servers just alone for conservation and as a guidance for players (think: wowhead.com for guild wars1)

With that, one still needs to get a lot of players to run with the collecting tool, but it may be a nice reason for some to play the campaigns again. If we had a website showing some collection progress, they could even direct the gameplay a bit.

I think, getting that data is the most crucial and "time critical" part. Implementing spells and skills in a data driven way is indeed a big chunk of work, but it's presumably easy work and you can get far with only a few spells and then gradually increasing their coverage, provided you have the data you need (e.g. spell id to name mappings, maybe some "damage" packets related to their usage).

The next steps are then interesting, but I'd suggest to not create a binary release as long as we have official servers, because players should indeed focus on the main server as otherwise we'll be having even less players as they split on different servers. That being said, I'd love to test out and maybe when I have the time, work on some of the features so we're prepared on day x.

Greetings

Jonathan-Greve commented 8 months ago

Yeah I agree. We need some way to collect a massive amount of data if we ever want to create a private server than feels like the original. Like loot/drop statistics, mob spawns and their patrol patterns and many more things.

I think the only way to get required amount of data is using bots or having data collection telemetry turned on by default for all GW toolbox users. I'm not involved with GWtoolbox development although I'm on good terms with their developers and think everything they've done is a huge gift to the CW community. I think they'd be against sending data like that to an external server but I don't know. I do know they'd reply with their reasoning if asked on their discord, so I'd ask there.

I also think it'd be cool if the whole community could be involved. And I like your idea about a GW equivalent wowhead where people could upload their logs or have the data collected on other ways.

I'd also say doing all of this is feasible for a single developer. But it would take a lot of work. I'm a bit burnt out on GW stuff atm. so it probably won't be me.

I think the best way to start would to just make as much as possible of a private server with the data we already have and then figure out what else is needed. Once we have a better idea of exactly what data we need it'd be easier to proceed with everything else.

I'm a bit interested in writing a custom client however. We already have Redufs Headquarter project on GitHub which implements a large part of the game as a headless client. Combined with my Guild Wars Map Browser project we have basically everything we need to create a modern GW client with updated graphics (still a huge amount of work but something AI could be extremely helpful with I the future I bet).

I don't have much of a point to my rant but I thought your message required a proper response since I think what you suggested is worth discussing even if it's not something I'm interested in doing at this moment. Hopefully others will. Either now or in the future.

MeFisto94 commented 6 months ago

Hey, sorry for the late response, I kinda forgot about it until I saw guild wars being on sale on steam!

I'm a bit interested in writing a custom client however. [...] we need to create a modern GW client with updated graphics

That really sounds like Sargerust, my modern WoW client, just that you missed out the "make it extra challenging for no reason" part :D It's a big endeavour, though, but then you already have the map rendering and networking. So something working out of the box. Good luck! Looking forward to RTX Guild Wars, will probably become a danger for GW2 players 😛

I think the best way to start would to just make as much as possible of a private server with the data we already have and then figure out what else is needed. Once we have a better idea of exactly what data we need it'd be easier to proceed with everything else.

Actually, I asked a bit around in http://discord.gg/gw1 and it turns out that the wiki is very helpful in regards of questlines already, drop rates are manually collected for common farmed items.

They do not have some automated tracing and they don't have it for any random item/quest, but that maybe also means one could start with mob patrol (sighting) and drop rates, so one can push quests (that may be the most difficult, finding out the prereqs) away for now, given that they seem to be loosely present in the wiki.

Still, I think it's useful outside of the private server scope and we should probably also market it as an enhancement to the wiki rather than anything else. Can you maybe talk to the Toolbox Devs in general, because surely it would require someone developing a plugin, regardless of where that data ends up.