// This file is a modified version of https://raw2.github.com/Baystation12/OldCode-BS12/master/code/TakePicture.dm #define NANOMAP_ICON_SIZE 4 #define NANOMAP_MAX_ICON_DIMENSION 1200 #define NANOMAP_TILES_PER_IMAGE (NANOMAP_MAX_ICON_DIMENSION / NANOMAP_ICON_SIZE) #define NANOMAP_TERMINALERR 5 #define NANOMAP_INPROGRESS 2 #define NANOMAP_BADOUTPUT 2 #define NANOMAP_SUCCESS 1 #define NANOMAP_WATCHDOGSUCCESS 4 #define NANOMAP_WATCHDOGTERMINATE 3 //Call these procs to dump your world to a series of image files (!!) //NOTE: Does not explicitly support non 32x32 icons or stuff with large pixel_* values, so don't blame me if it doesn't work perfectly /client/proc/nanomapgen_DumpImage() set name = "Generate NanoUI Map" set category = "Server" if(holder) nanomapgen_DumpTile(1, 1, text2num(input(usr,"Enter the Z level to generate"))) /client/proc/nanomapgen_DumpTile(var/startX = 1, var/startY = 1, var/currentZ = 1, var/endX = -1, var/endY = -1) if (endX < 0 || endX > world.maxx) endX = world.maxx if (endY < 0 || endY > world.maxy) endY = world.maxy if (currentZ < 0 || currentZ > world.maxz) to_chat(usr, "NanoMapGen: ERROR: currentZ ([currentZ]) must be between 1 and [world.maxz]") sleep(3) return NANOMAP_TERMINALERR if (startX > endX) to_chat(usr, "NanoMapGen: ERROR: startX ([startX]) cannot be greater than endX ([endX])") sleep(3) return NANOMAP_TERMINALERR if (startY > endX) to_chat(usr, "NanoMapGen: ERROR: startY ([startY]) cannot be greater than endY ([endY])") sleep(3) return NANOMAP_TERMINALERR var/icon/Tile = icon(file("nano/mapbase1200.png")) if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) to_world_log("NanoMapGen: ERROR: BASE IMAGE DIMENSIONS ARE NOT [NANOMAP_MAX_ICON_DIMENSION]x[NANOMAP_MAX_ICON_DIMENSION]") sleep(3) return NANOMAP_TERMINALERR Tile.Scale((endX - startX + 1) * NANOMAP_ICON_SIZE, (endY - startY + 1) * NANOMAP_ICON_SIZE) // VOREStation Edit - Scale image to actual size mapped. to_world_log("NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])") to_chat(usr, "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])") var/count = 0; for(var/WorldX = startX, WorldX <= endX, WorldX++) for(var/WorldY = startY, WorldY <= endY, WorldY++) var/atom/Turf = locate(WorldX, WorldY, currentZ) var/icon/TurfIcon = new(Turf.icon, Turf.icon_state) TurfIcon.Scale(NANOMAP_ICON_SIZE, NANOMAP_ICON_SIZE) Tile.Blend(TurfIcon, ICON_OVERLAY, ((WorldX - 1) * NANOMAP_ICON_SIZE), ((WorldY - 1) * NANOMAP_ICON_SIZE)) count++ if (count % 8000 == 0) to_world_log("NanoMapGen: [count] tiles done") sleep(1) var/mapFilename = "nanomap_z[currentZ]-new.png" to_world_log("NanoMapGen: sending [mapFilename] to client") usr << browse(Tile, "window=picture;file=[mapFilename];display=0") to_world_log("NanoMapGen: Done.") to_chat(usr, "NanoMapGen: Done. File [mapFilename] uploaded to your cache.") if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) return NANOMAP_BADOUTPUT return NANOMAP_SUCCESS