|
|
Hello there!
[For a TL;DR of the important stuff - skip to the end. The core of this post explains what I've done/tried so far]
Throughout 2014 I helped work on a Minecraft recreation of RuneScape 2007 that got fairly popular, however because the owner was inexperienced the project slowly died off and he sold it.
I, along with a few friends, want to do it again - but this time, properly. Now, I understand that there is no advertising allowed here, so I'm not going to link to the project itself - I just need some help with the next step.
The goal with this request is this - I want to generate an accurate, to-scale, heightmap of the entire OSRS world (around cache 474) which I can then use to create a Minecraft world.
For those who don't know, [Only registered and activated users can see links. ] of a hightmap.
Once I have the heightmap, I can do the rest on the Minecraft end.
Over the past few months, I've been exploring these forums and others for caches around 474, tools to read/access/extract the cache data, tools that can edit RS map data, and a whole lot more, including (but not limited to):
- [Only registered and activated users can see links. ] by peterbjornx
- [Only registered and activated users can see links. ] by Canownueasy
- [Only registered and activated users can see links. ] by Xaves
- [Only registered and activated users can see links. ] by Defyboy
- [Only registered and activated users can see links. ] by Fabian
- [Only registered and activated users can see links. ] by Hirapuis
- [Only registered and activated users can see links. ] by Paketa
- [Only registered and activated users can see links. ]
Some of these tools have successfully read/extracted data, others have complained on launch (I can provide more specific errors/issues with any of these tools on request, but as this is not the core important thing in this post I'm not mentioning it now) - however, while they have taught me a fair bit about how the RSPS servers and caches work, none have brought me closer to goal in this post.
TL;DR: In essence, I'm looking for an accurate 474 cache (primarily the map) and one of the following:
- Help in creating an application (probably in java, I have a fair amount of experience in it) that can use the 474 map files and generate a [Only registered and activated users can see links. ]
- Help in understanding how the map cache files work so I can make my own [Only registered and activated users can see links. ]generator for this project
- Or, if you want to help significantly, I'm requesting a tool that can read ~474 cache data, find the map, load it, then generate a grayscale [Only registered and activated users can see links. ].
I had zero experience in working with the RS cache before I decided to work on this project, but I am 100% willing to learn whatever more is needed.
Thanks in advance for any help or suggestions!
Also - apologies if this thread is in the wrong area, as mapping is part of the client I felt this was the most accurate spot for it.

While that looks really nice (and the screenshots are clearly from MCEdit), I don't see a download link or anything useful. Willing to share whatever code you had?
To provide more context on my end - the plan is 1 RS tile = 2 MC blocks. I have buildings in Lumbridge, Falador, Burthorpe, Taverly, and more already designed and built, but don't have a to-scale landscape to place them on.
Last edited by wizardcm; 12-29-2014 at 09:12 AM. Reason: Context
In the meantime, I guess I might as well explore how the client calculates heights, and attempt to get that saved to a text file or something. This could get interesting...
We have found some things that have gave us a huge step forward. We have created a heightmap via a 2d map viewer posted within these forums. There are a few things to be worked on still though, so any little bit helps.
For extended detail on this, for anyone who wants to mess with it themselves, we've modified this [Only registered and activated users can see links. ] to display the heights rather than textures, resulting in significantly more useful data. This is done through turning values 0 to -2040 (max RS world height) into 0 to 255 (max MC world height). This was achieved using the cache provided in the [Only registered and activated users can see links. ].
The next step is to have the 2D Map Viewer export the entire map to an image file, or each chunk of tiles to its own file (which can then be stitched together). Images below.
Heightmap (screenshot from client) - only brightness matters, colour is irrelevant.
WorldPainter - by importing the heightmap above into WorldPainter, a world is generated (in this case, at 200% scale - 1 RS tile = 2 MC blocks).
Minecraft - and here is a resulting screenshot ingame.
The snippets above include all the data we've attempted to render in WorldPainter so far - once we've exported the entire map we can then load it all up in one go. We will also need to determine more realistic height parameters, as having land near bedrock with aspects of the world touching Minecraft world height is unrealistic (there are caves and stuff in RS).
If you are interested in helping, respond below and we'll provide the code changes to achieve this.
Update: We're still looking for a 474 heightmap!
We have determined the Enrisep map is from before June 2006, so we still need to try and get a 474 map going. As of right now, any 317loading474 result in a loop of the following two lines.
This eventually causes the Map Viewer to run out of memory.Requesting file CacheFileDescriptor(CacheIndex(id = 4, size = 3536), 617, 8166, 8868)
Requesting file CacheFileDescriptor(CacheIndex(id = 4, size = 3536), 616, 7073, 8861)
So far we've downloaded over 600mb worth of caches (not to mention even more clients, servers and more). Actual 474 caches are in the new format, so our 317+ map viewer can't load it.
cache_474 is loaded below - as you can see, entire chunks are missing. From recent research, I've learned that this has something to do with the encryption added in the 400s.
HOWEVER, onto actual progress. Below you can see examples of the entire RuneScape January-May 2006 map loaded on a Minecraft Dynamic Map. With and without pathing/building outlines.
(black patches are just lighting issues from an editor I used to add the pathing overlay, the dynamic map makes them look worse than they are)
Everything you see is perfectly scaled in both sizing and depth, so going down the hill on tutorial island is realistic. While for paths and stuff we might have to tweak landscape so players can actually walk up it (landscape smoothing is very strong in RuneScape but.. well, blocky in Minecraft) in general this is AWESOME and significantly better than doing the whole landscape from scratch.
Next step is to either try and fix the loops with 317loading474, or to mess around with extracting the maps from 474 and loading them ourselves into a 317 cache.

is that cache_474 from me? - if it is u need to edit the map_index loader to this:
also iirc -400 height is sea level on rs maps.Code:abyte2 = streamLoader.getDataForName("map_index"); Stream stream2 = new Stream(abyte2); totalRegions = stream2.readUnsignedWord(); j1 = totalRegions; mapIndices1 = new int[j1]; mapIndices2 = new int[j1]; mapIndices3 = new int[j1]; for(int i2 = 0; i2 < j1; i2++) { mapIndices1[i2] = stream2.readUnsignedWord(); mapIndices2[i2] = stream2.readUnsignedWord(); mapIndices3[i2] = stream2.readUnsignedWord(); }
Honestly, I've explored hundreds of pages on these forums so I don't know for sure if cache_474 is from you, but I'm willing to try your suggestion anyway.
However, could you provide more context to that code? Here's what the Map Viewer I'm using has at the moment.
I'll be playing around with it myself while waiting for your response. And thanks for the water level information, that'll definitely come in handy!DataBuffer b = config.entry("map_index").buffer();
int count = b.length() / 7;
regionHash = new int[count];
regionObjectMapIndex = new int[count];
regionLandscapeIndex = new int[count];
regionPreload = new int[count];
for (int reg = 0; reg < count; reg++)
{
regionHash[reg] = b.getShortUnsigned();
regionLandscapeIndex[reg] = b.getShortUnsigned();
regionObjectMapIndex[reg] = b.getShortUnsigned();
regionPreload[reg] = b.getUnsigned();
}

try this:
Code:DataBuffer b = config.entry("map_index").buffer(); int count = b.getShortUnsigned(); regionHash = new int[count]; regionObjectMapIndex = new int[count]; regionLandscapeIndex = new int[count]; for (int reg = 0; reg < count; reg++) { regionHash[reg] = b.getShortUnsigned(); regionLandscapeIndex[reg] = b.getShortUnsigned(); regionObjectMapIndex[reg] = b.getShortUnsigned(); }
| « (HELP) Client is super tiny when i run it? | Weird Client Background Glitch » |
| Thread Information |
Users Browsing this ThreadThere are currently 1 users browsing this thread. (0 members and 1 guests) |
| Tags for this Thread |