use of net.runelite.cache.definitions.LocationsDefinition in project runelite by runelite.
the class MapDumperTest method loadRegions.
private Map<MapDefinition, LocationsDefinition> loadRegions(Store store) throws IOException {
Map<MapDefinition, LocationsDefinition> mapMap = new HashMap<>();
Storage storage = store.getStorage();
Index index = store.getIndex(IndexType.MAPS);
XteaKeyManager keyManager = new XteaKeyManager();
keyManager.loadKeys();
for (int i = 0; i < MAX_REGIONS; ++i) {
int x = i >> 8;
int y = i & 0xFF;
Archive map = index.findArchiveByName("m" + x + "_" + y);
Archive land = index.findArchiveByName("l" + x + "_" + y);
assert (map == null) == (land == null);
if (map == null || land == null) {
continue;
}
byte[] data = map.decompress(storage.loadArchive(map));
MapDefinition mapDef = new MapLoader().load(x, y, data);
LocationsDefinition locDef = null;
int[] keys = keyManager.getKeys(i);
if (keys != null) {
try {
data = land.decompress(storage.loadArchive(land), keys);
} catch (IOException ex) {
continue;
}
locDef = new LocationsLoader().load(x, y, data);
}
mapMap.put(mapDef, locDef);
}
return mapMap;
}
use of net.runelite.cache.definitions.LocationsDefinition in project runelite by runelite.
the class MapDumperTest method dunpJson.
@Test
@Ignore
public void dunpJson() throws IOException {
File base = StoreLocation.LOCATION, outDir = folder.newFolder();
try (Store store = new Store(base)) {
store.load();
Map<MapDefinition, LocationsDefinition> regions = loadRegions(store);
for (Entry<MapDefinition, LocationsDefinition> entry : regions.entrySet()) {
MapDefinition key = entry.getKey();
LocationsDefinition value = entry.getValue();
int x = key.getRegionX();
int y = key.getRegionY();
Files.write(gson.toJson(key).getBytes(), new File(outDir, "m" + x + "_" + y + ".json"));
if (value != null) {
Files.write(gson.toJson(value).getBytes(), new File(outDir, "l" + x + "_" + y + ".json"));
}
}
}
logger.info("Dumped regions to {}", outDir);
}
use of net.runelite.cache.definitions.LocationsDefinition in project runelite by runelite.
the class RegionLoader method loadRegionFromArchive.
public Region loadRegionFromArchive(int i) throws IOException {
int x = i >> 8;
int y = i & 0xFF;
Storage storage = store.getStorage();
Archive map = index.findArchiveByName("m" + x + "_" + y);
Archive land = index.findArchiveByName("l" + x + "_" + y);
assert (map == null) == (land == null);
if (map == null || land == null) {
return null;
}
byte[] data = map.decompress(storage.loadArchive(map));
MapDefinition mapDef = new MapLoader().load(x, y, data);
Region region = new Region(i);
region.loadTerrain(mapDef);
int[] keys = keyManager.getKeys(i);
if (keys != null) {
try {
data = land.decompress(storage.loadArchive(land), keys);
LocationsDefinition locDef = new LocationsLoader().load(x, y, data);
region.loadLocations(locDef);
} catch (IOException ex) {
logger.debug("Can't decrypt region " + i, ex);
}
}
return region;
}
use of net.runelite.cache.definitions.LocationsDefinition in project runelite by runelite.
the class LocationsLoader method load.
public LocationsDefinition load(int regionX, int regionY, byte[] b) {
LocationsDefinition loc = new LocationsDefinition();
loc.setRegionX(regionX);
loc.setRegionY(regionY);
loadLocations(loc, b);
return loc;
}
use of net.runelite.cache.definitions.LocationsDefinition in project runelite by runelite.
the class ModelViewer method main.
public static void main(String[] args) throws Exception {
Options options = new Options();
options.addOption(null, "npcdir", true, "npc directory");
options.addOption(null, "mapdir", true, "maps directory");
options.addOption(null, "objectdir", true, "objects directory");
options.addOption(null, "npc", true, "npc to render");
options.addOption(null, "object", true, "object to render");
options.addOption(null, "model", true, "model to render");
options.addOption(null, "map", true, "map region to render");
options.addOption(null, "kits", true, "kits to render");
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, args);
String npcdir = cmd.getOptionValue("npcdir");
String mapdir = cmd.getOptionValue("mapdir");
String objectdir = cmd.getOptionValue("objectdir");
NpcDefinition npcdef = null;
ObjectDefinition objdef = null;
List<ModelDefinition> models = new ArrayList<>();
Region region = null;
if (cmd.hasOption("model")) {
// render model
String model = cmd.getOptionValue("model");
ModelDefinition md = ModelManager.getModel(Integer.parseInt(model), null, null);
models.add(md);
}
if (cmd.hasOption("npc")) {
String npc = cmd.getOptionValue("npc");
try (FileInputStream fin = new FileInputStream(npcdir + "/" + npc + ".json")) {
npcdef = new Gson().fromJson(new InputStreamReader(fin), NpcDefinition.class);
}
for (int model : npcdef.models) {
ModelDefinition md = ModelManager.getModel(model, null, null);
models.add(md);
}
}
if (cmd.hasOption("object")) {
String obj = cmd.getOptionValue("object");
try (FileInputStream fin = new FileInputStream(objectdir + "/" + obj + ".json")) {
objdef = new Gson().fromJson(new InputStreamReader(fin), ObjectDefinition.class);
}
for (int model : objdef.getObjectModels()) {
ModelDefinition md = ModelManager.getModel(model, null, null);
models.add(md);
}
}
if (cmd.hasOption("map")) {
String map = cmd.getOptionValue("map");
String[] s = map.split(",");
int x = Integer.parseInt(s[0]), y = Integer.parseInt(s[1]);
region = new Region(x, y);
MapLoader mapLoader = new MapLoader();
LocationsLoader locationsLoader = new LocationsLoader();
try (FileInputStream fin = new FileInputStream(mapdir + "/m" + x + "_" + y + ".dat")) {
byte[] b = IOUtils.toByteArray(fin);
MapDefinition mapDef = mapLoader.load(x, y, b);
region.loadTerrain(mapDef);
}
try (FileInputStream fin = new FileInputStream(mapdir + "/l" + x + "_" + y + ".dat")) {
byte[] b = IOUtils.toByteArray(fin);
LocationsDefinition locDef = locationsLoader.load(x, y, b);
region.loadLocations(locDef);
} catch (FileNotFoundException ex) {
logger.info("No landscape file for {},{}", x, y);
}
loadUnderlays();
loadOverlays();
}
if (cmd.hasOption("kits")) {
String kits = cmd.getOptionValue("kits");
Integer[] kitIds = Arrays.stream(kits.split(",")).map(s -> Integer.parseInt(s)).toArray(Integer[]::new);
for (int kitId : kitIds) {
KitDefinition kit = KitManager.getKit(kitId);
for (int model : kit.modelIds) {
ModelDefinition md = ModelManager.getModel(model, null, null);
models.add(md);
}
}
}
Display.setDisplayMode(new DisplayMode(800, 600));
Display.setTitle("Model Viewer");
Display.setInitialBackground((float) Color.gray.getRed() / 255f, (float) Color.gray.getGreen() / 255f, (float) Color.gray.getBlue() / 255f);
Display.create();
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
double aspect = 1;
// near should be chosen as far into the scene as possible
double near = 1;
double far = 10000;
// 1 gives you a 90° field of view. It's tan(fov_angle)/2.
double fov = 1;
GL11.glFrustum(-aspect * near * fov, aspect * near * fov, -fov, fov, near, far);
GL11.glPopMatrix();
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glCullFace(GL11.GL_BACK);
GL11.glEnable(GL11.GL_CULL_FACE);
long last = 0;
Camera camera = new Camera();
while (!Display.isCloseRequested()) {
// Clear the screen and depth buffer
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
for (ModelDefinition def : models) {
short[] recolourToFind = null, recolourToReplace = null;
if (npcdef != null) {
recolourToFind = npcdef.recolorToFind;
recolourToReplace = npcdef.recolorToReplace;
}
if (objdef != null) {
recolourToFind = objdef.getRecolorToFind();
recolourToReplace = objdef.getRecolorToReplace();
}
drawModel(def, recolourToFind, recolourToReplace);
}
drawRegion(region);
Display.update();
// fps
Display.sync(50);
long delta = System.currentTimeMillis() - last;
last = System.currentTimeMillis();
camera.acceptInput(delta);
camera.apply();
}
Display.destroy();
}
Aggregations