From 06ece565e236e2734f524de144323249bbb0b59a Mon Sep 17 00:00:00 2001 From: monster860 Date: Fri, 22 Nov 2019 00:39:53 -0500 Subject: [PATCH 1/2] Adds a map of the station to players' boxes --- code/controllers/subsystem/mapping.dm | 11 +- code/game/area/Space_Station_13_areas.dm | 60 ++++++++ code/game/area/areas.dm | 11 ++ code/game/objects/items/storage/boxes.dm | 8 +- code/modules/mapping/minimap.dm | 177 +++++++++++++++++++++++ html/blank.png | Bin 0 -> 579 bytes yogstation.dme | 1 + yogstation/icons/obj/bureaucracy.dmi | Bin 15397 -> 16125 bytes 8 files changed, 264 insertions(+), 4 deletions(-) create mode 100644 code/modules/mapping/minimap.dm create mode 100644 html/blank.png diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 41ef2a6d6c75..41dce6e4e4fd 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -20,6 +20,8 @@ SUBSYSTEM_DEF(mapping) var/list/shuttle_templates = list() var/list/shelter_templates = list() + var/list/station_minimaps = list() + var/list/areas_in_z = list() var/loading_ruins = FALSE @@ -102,6 +104,8 @@ SUBSYSTEM_DEF(mapping) setup_map_transitions() generate_station_area_list() initialize_reserved_level() + // Build minimaps + build_minimaps() return ..() /datum/controller/subsystem/mapping/proc/wipe_reservations(wipe_safety_delay = 100) @@ -280,7 +284,7 @@ GLOBAL_LIST_EMPTY(the_station_areas) if(map_voted) map_voted = FALSE return - + var/players = GLOB.clients.len var/list/mapvotes = list() //count votes @@ -519,7 +523,10 @@ GLOBAL_LIST_EMPTY(the_station_areas) used_turfs.Cut() reserve_turfs(clearing) - +/datum/controller/subsystem/mapping/proc/build_minimaps() + to_chat(world, "Building minimaps...") + for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION)) + station_minimaps += new /datum/minimap(z) /datum/controller/subsystem/mapping/proc/reg_in_areas_in_z(list/areas) for(var/B in areas) diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index b39ab9e5c150..c555656e038b 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -78,6 +78,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/maintenance ambientsounds = MAINTENANCE valid_territory = FALSE + minimap_color = "#4f4e3a" //Departments @@ -237,6 +238,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station //Hallway +/area/hallway + minimap_color = "#8d8c68" + /area/hallway/primary/aft name = "Aft Primary Hallway" icon_state = "hallA" @@ -287,6 +291,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Bridge" icon_state = "bridge" ambientsounds = list('sound/ambience/signal.ogg') + minimap_color = "#0400a2" /area/bridge/meeting_room name = "Heads of Staff Meeting Room" @@ -303,6 +308,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/crew_quarters/heads/captain name = "Captain's Office" icon_state = "captain" + minimap_color = "#2900d8" /area/crew_quarters/heads/captain/private name = "Captain's Quarters" @@ -311,22 +317,27 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/crew_quarters/heads/chief name = "Chief Engineer's Office" icon_state = "ce_office" + minimap_color = "#a5a000" /area/crew_quarters/heads/cmo name = "Chief Medical Officer's Office" icon_state = "cmo_office" + minimap_color = "#00fff0" /area/crew_quarters/heads/hop name = "Head of Personnel's Office" icon_state = "hop_office" + minimap_color = "#070094" /area/crew_quarters/heads/hos name = "Head of Security's Office" icon_state = "hos_office" + minimap_color = "#ff6868" /area/crew_quarters/heads/hor name = "Research Director's Office" icon_state = "rd_office" + minimap_color = "#9257a6" /area/comms name = "Communications Relay" @@ -338,14 +349,19 @@ NOTE: there are two lists of areas in the end of this file: centcom and station //Crew +/area/crew_quarters + minimap_color = "#b0e1ff" + /area/crew_quarters/dorms name = "Dormitories" icon_state = "Sleep" safe = TRUE + minimap_color = "#b0e1ff" /area/crew_quarters/toilet name = "Dormitory Toilets" icon_state = "toilet" + minimap_color = "#b0e1ff" /area/crew_quarters/toilet/auxiliary name = "Auxiliary Restrooms" @@ -354,6 +370,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/crew_quarters/toilet/locker name = "Locker Toilets" icon_state = "toilet" + minimap_color = "#766e97" /area/crew_quarters/toilet/restrooms name = "Restrooms" @@ -362,6 +379,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/crew_quarters/locker name = "Locker Room" icon_state = "locker" + minimap_color = "#766e97" /area/crew_quarters/lounge name = "Lounge" @@ -382,10 +400,12 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/crew_quarters/cafeteria name = "Cafeteria" icon_state = "cafeteria" + minimap_color = "#5ac866" /area/crew_quarters/kitchen name = "Kitchen" icon_state = "kitchen" + minimap_color = "#5ac866" /area/crew_quarters/kitchen/coldroom name = "Kitchen Cold Room" @@ -394,6 +414,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/crew_quarters/bar name = "Bar" icon_state = "bar" + minimap_color = "#5ac866" /area/crew_quarters/bar/atrium name = "Atrium" @@ -413,6 +434,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/crew_quarters/theatre name = "Theatre" icon_state = "Theatre" + minimap_color = "#5ac866" /area/crew_quarters/theatre/abandoned name = "Abandoned Theatre" @@ -422,6 +444,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Library" icon_state = "library" flags_1 = NONE + minimap_color = "#5ac866" /area/library/lounge name = "Library Lounge" @@ -438,6 +461,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station flags_1 = NONE clockwork_warp_allowed = FALSE clockwork_warp_fail = "The consecration here prevents you from warping in." + minimap_color = "#5ac866" /area/chapel/main name = "Chapel" @@ -463,12 +487,14 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/lawoffice name = "Law Office" icon_state = "law" + minimap_color = "#b12527" //Engineering /area/engine ambientsounds = ENGINEERING + minimap_color = "#edea00" /area/engine/engine_smes name = "Engineering SMES" @@ -482,15 +508,18 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Atmospherics" icon_state = "atmos" flags_1 = NONE + minimap_color = "#85ff02" /area/engine/atmos_distro //yogstation specific name = "Atmospherics Distribution" icon_state = "atmos" flags_1 = NONE + minimap_color = "#85ff02" /area/engine/atmospherics_engine name = "Atmospherics Engine" icon_state = "atmos_engine" + minimap_color = "#85ff02" /area/engine/engine_room //donut station specific name = "Engine Room" @@ -536,6 +565,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station blob_allowed = FALSE flags_1 = NONE ambientsounds = ENGINEERING + minimap_color = "#6b6b6b" /area/solar/fore name = "Fore Solar Array" @@ -614,11 +644,13 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Teleporter Room" icon_state = "teleporter" ambientsounds = ENGINEERING + minimap_color = "#6b6b6b" /area/gateway name = "Gateway" icon_state = "gateway" ambientsounds = ENGINEERING + minimap_color = "#5d57a5" //MedBay @@ -626,6 +658,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Medical" icon_state = "medbay3" ambientsounds = MEDICAL + minimap_color = "#5d57a5" /area/medical/abandoned name = "Abandoned Medbay" @@ -670,6 +703,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Virology" icon_state = "virology" flags_1 = NONE + minimap_color = "#01f5b3" /area/medical/morgue name = "Morgue" @@ -695,6 +729,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/medical/genetics name = "Genetics Lab" icon_state = "genetics" + minimap_color = "#006384" /area/medical/genetics/cloning name = "Cloning Lab" @@ -711,6 +746,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Security" icon_state = "security" ambientsounds = HIGHSEC + minimap_color = "#b12527" /area/security/main name = "Security Office" @@ -727,6 +763,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/security/prison name = "Prison Wing" icon_state = "sec_prison" + minimap_color = "#530505" /area/security/processing name = "Labor Shuttle Dock" @@ -755,6 +792,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/security/execution icon_state = "execution_room" + minimap_color = "#530505" /area/security/execution/transfer name = "Transfer Centre" @@ -765,10 +803,12 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/security/nuke_storage name = "Vault" icon_state = "nuke_storage" + minimap_color = "#a2a2a2" /area/ai_monitored/nuke_storage name = "Vault" icon_state = "nuke_storage" + minimap_color = "#a2a2a2" /area/security/checkpoint name = "Security Checkpoint" @@ -813,6 +853,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/quartermaster name = "Quartermasters" icon_state = "quart" + minimap_color = "#936f3c" /area/quartermaster/sorting name = "Delivery Office" @@ -825,6 +866,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/quartermaster/office name = "Cargo Office" icon_state = "quartoffice" + minimap_color = "#936f3c" /area/quartermaster/storage name = "Cargo Bay" @@ -846,6 +888,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Custodial Closet" icon_state = "janitor" flags_1 = NONE + minimap_color = "#cc00ff" /area/janitor/a //yogs start added two new areas name = "Custodial Closet A" @@ -860,10 +903,12 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/hydroponics name = "Hydroponics" icon_state = "hydro" + minimap_color = "#5ac866" /area/hydroponics/garden name = "Garden" icon_state = "garden" + minimap_color = "#70ff38" /area/hydroponics/garden/abandoned name = "Abandoned Garden" @@ -879,6 +924,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/science name = "Science Division" icon_state = "toxlab" + minimap_color = "#75009b" /area/science/lab name = "Research and Development" @@ -948,6 +994,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station //Storage +/area/storage + minimap_color = "#f8ff83" + /area/storage/tools name = "Auxiliary Tool Storage" icon_state = "storage" @@ -969,6 +1018,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "EVA Storage" icon_state = "eva" clockwork_warp_allowed = FALSE + minimap_color = "#c8c0ff" /area/storage/emergency/starboard name = "Starboard Emergency Storage" @@ -981,6 +1031,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/storage/tech name = "Technical Storage" icon_state = "auxstorage" + minimap_color = "#9ccf00" //Construction @@ -988,6 +1039,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Construction Area" icon_state = "yellow" ambientsounds = ENGINEERING + minimap_color = "#4f4e3a" /area/construction/mining/aux_base name = "Auxiliary Base Construction" @@ -1003,6 +1055,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon_state = "yellow" ambientsounds = MAINTENANCE icon_state = "vacant_room" + minimap_color = "#4f4e3a" /area/vacant_room/office name = "Vacant Office" @@ -1018,25 +1071,30 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Armory" icon_state = "armory" ambientsounds = HIGHSEC + minimap_color = "#b12527" /area/ai_monitored/storage/eva name = "EVA Storage" icon_state = "eva" ambientsounds = HIGHSEC + minimap_color = "#c8c0ff" /area/ai_monitored/storage/satellite name = "AI Satellite Maint" icon_state = "storage" ambientsounds = HIGHSEC + minimap_color = "#4f4e3a" //Turret_protected /area/ai_monitored/turret_protected ambientsounds = list('sound/ambience/ambimalf.ogg', 'sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg') + minimap_color = "#00fff6" /area/ai_monitored/turret_protected/ai_upload name = "AI Upload Chamber" icon_state = "ai_upload" + minimap_color = "#4f4e3a" /area/ai_monitored/turret_protected/ai_upload_foyer name = "AI Upload Access" @@ -1069,6 +1127,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/aisat name = "AI Satellite Exterior" icon_state = "yellow" + minimap_color = "#00fff6" /area/ai_monitored/turret_protected/aisat_interior name = "AI Satellite Antechamber" @@ -1090,6 +1149,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station clockwork_warp_fail = "For safety reasons, warping here is disallowed; the radio and bluespace noise could cause catastrophic results." ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg', 'sound/ambience/ambitech.ogg',\ 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg', 'sound/ambience/ambimystery.ogg') + minimap_color = "#00fff6" /area/tcommsat/computer name = "Telecomms Control Room" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 00a72db4acf8..212604a261d0 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -64,6 +64,8 @@ var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default? var/list/canSmoothWithAreas //typecache to limit the areas that atoms in this area can smooth with + var/minimap_color = null // if null, chooses random one + /*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ GLOBAL_LIST_EMPTY(teleportlocs) @@ -86,6 +88,15 @@ GLOBAL_LIST_EMPTY(teleportlocs) // === /area/New() + if(!minimap_color) // goes in New() because otherwise it doesn't fucking work + // generate one using the icon_state + if(icon_state && icon_state != "unknown") + var/icon/I = new(icon, icon_state, dir) + I.Scale(1,1) + minimap_color = I.GetPixel(1,1) + else // no icon state? use random. + minimap_color = rgb(rand(50,70),rand(50,70),rand(50,70)) + // This interacts with the map loader, so it needs to be set immediately // rather than waiting for atoms to initialize. if (unique) diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 40d6a8c2e444..7944420fc91c 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -126,6 +126,7 @@ new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/reagent_containers/hypospray/medipen(src) + new /obj/item/map/station(src) /obj/item/storage/box/survival/radio/PopulateContents() ..() // we want the survival stuff too. @@ -136,6 +137,7 @@ new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/crowbar/red(src) new /obj/item/reagent_containers/hypospray/medipen(src) + new /obj/item/map/station(src) // Engineer survival box @@ -143,6 +145,7 @@ new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/emergency_oxygen/engi(src) new /obj/item/reagent_containers/hypospray/medipen(src) + new /obj/item/map/station(src) /obj/item/storage/box/engineer/radio/PopulateContents() ..() // we want the regular items too. @@ -158,6 +161,7 @@ new /obj/item/clothing/mask/gas/sechailer(src) new /obj/item/tank/internals/emergency_oxygen(src) new /obj/item/reagent_containers/hypospray/medipen(src) + new /obj/item/map/station(src) /obj/item/storage/box/security/radio/PopulateContents() ..() // we want the regular stuff too @@ -464,7 +468,7 @@ /obj/item/storage/box/gorillacubes/PopulateContents() for(var/i in 1 to 3) new /obj/item/reagent_containers/food/snacks/monkeycube/gorilla(src) - + /obj/item/storage/box/mixedcubes name = "mixed farm animal cube box" desc = "Farm Town's new cubes to make your farming dreams come true. Just add water!" @@ -1022,7 +1026,7 @@ new /obj/item/reagent_containers/food/snacks/grown/soybeans(src) new /obj/item/reagent_containers/food/snacks/grown/cabbage(src) new /obj/item/reagent_containers/food/snacks/grown/chili(src) - + /obj/item/storage/box/cheese name = "box of advanced cheese bacteria" diff --git a/code/modules/mapping/minimap.dm b/code/modules/mapping/minimap.dm new file mode 100644 index 000000000000..f21d4b58ec1a --- /dev/null +++ b/code/modules/mapping/minimap.dm @@ -0,0 +1,177 @@ +/datum/minimap + var/icon/map_icon + var/icon/meta_icon + var/icon/overlay_icon + var/list/color_area_names = list() + var/minx + var/maxx + var/miny + var/maxy + var/z_level + var/id = 0 + +/datum/minimap/proc/send(mob/user) + register_asset("minimap-[id].png", map_icon) + register_asset("minimap-[id]-meta.png", meta_icon) + send_asset_list(user, list("minimap-[id].png" = map_icon, "minimap-[id]-meta.png" = meta_icon), verify=FALSE) + +/datum/minimap/New(z, x1 = 1, y1 = 1, x2 = world.maxx, y2 = world.maxy) + var/static/id_counter = 1 + id = id_counter++ + z_level = z + + var/crop_x1 = x2 + var/crop_x2 = x1 + var/crop_y1 = y2 + var/crop_y2 = y1 + + // do the generating + map_icon = new('html/blank.png') + meta_icon = new('html/blank.png') + map_icon.Scale(x2-x1+1, y2-y1+1) // arrays start at 1 + meta_icon.Scale(x2-x1+1, y2-y1+1) + var/list/area_to_color = list() + for(var/turf/T in block(locate(x1,y1,z),locate(x2,y2,z))) + var/area/A = T.loc + var/img_x = T.x - x1 + 1 // arrays start at 1 + var/img_y = T.y - y1 + 1 + if(!istype(A, /area/space) || istype(T, /turf/closed/wall)) + crop_x1 = min(crop_x1, T.x) + crop_x2 = max(crop_x2, T.x) + crop_y1 = min(crop_y1, T.y) + crop_y2 = max(crop_y2, T.y) + var/meta_color = area_to_color[A] + if(!meta_color) + meta_color = rgb(rand(0,255),rand(0,255),rand(0,255)) // technically conflicts could happen but it's like very unlikely and it's not that big of a deal if one happens + area_to_color[A] = meta_color + color_area_names[meta_color] = A.name + meta_icon.DrawBox(meta_color, img_x, img_y) + if(istype(T, /turf/closed/wall)) + map_icon.DrawBox("#000000", img_x, img_y) + else if(!istype(A, /area/space)) + var/color = A.minimap_color || "#FF00FF" + if(locate(/obj/machinery/power/solar) in T) + color = "#02026a" + if((locate(/obj/effect/spawner/structure/window) in T) || (locate(/obj/structure/grill) in T)) + color = BlendRGB(color, "#000000", 0.5) + map_icon.DrawBox(color, img_x, img_y) + map_icon.Crop(crop_x1, crop_y1, crop_x2, crop_y2) + meta_icon.Crop(crop_x1, crop_y1, crop_x2, crop_y2) + minx = crop_x1 + maxx = crop_x2 + miny = crop_y1 + maxy = crop_y2 + overlay_icon = new(map_icon) + overlay_icon.Scale(16, 16) + +/obj/item/map + name = "map" + gender = NEUTER + icon = 'yogstation/icons/obj/bureaucracy.dmi' + icon_state = "map" + item_state = "paper" + throwforce = 0 + w_class = WEIGHT_CLASS_TINY + throw_range = 1 + throw_speed = 1 + resistance_flags = FLAMMABLE + max_integrity = 50 + var/list/minimaps = list() + +/obj/item/map/station + name = "station map" + desc = "A handy map showing the locations of all the departments on the station so you don't get lost" + +/obj/item/map/station/Initialize() + ..() + minimaps += SSmapping.station_minimaps + update_icon() + +/obj/item/map/update_icon() + cut_overlays() + var/datum/minimap/map = minimaps[1] + if(!map) return + var/image/I = image(map.overlay_icon) + I.pixel_x = 8 + I.pixel_y = 8 + add_overlay(I) + +/obj/item/map/interact(mob/user) + if(!in_range(user, src) && !isobserver(user)) + to_chat(user, "You're too far away to read it!") + return + if(!minimaps || !minimaps.len) + to_chat(user, "This map is blank!") + return + var/datum/minimap/first_map = minimaps[1] + var/info = "" + var/datas = list(); + for(var/I in 1 to minimaps.len) + var/datum/minimap/map = minimaps[I] + map.send(user) + info += "
" + datas += json_encode(map.color_area_names); + user << browse({" + + + + + + +[name] + +[info] +"}, "window=minimap;size=768x[round(768 / first_map.map_icon.Width() * first_map.map_icon.Height() + 50)]") + onclose(user, "minimap") diff --git a/html/blank.png b/html/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..86c96304851e938245b5208cc2eccaee3e28550f GIT binary patch literal 579 zcmV-J0=)f+P)EX>4Tx04R}tkv&MmP!xqvQ$^8A5eteqWT;LSL`58>ibb$c+6t{Yn7s54nlvOS zE{=k0!NH%!s)LKOt`4q(Aov5~;_9U6A|>9J6k5di;PO7sd*^W9eSlCeGu7;v094H~ zlCh|m$*ziBujoY(gH-(zGxd0CF%8f4bq^ok?;g44N3P2*zi}=&Ebz>bkxtGNhls^O8_R9XiiS!&O&nHKjq-(z z%L?Z$&T6^Jntk#Y26Ea;itAJ(h+zqFBp^aY6(y8mAws)GiisqhM?L(*jz2*znOr3> zax9<%6_Voz|AXJNHS<%GZc-o$biUa3$0*RX3p8rB{e5iPjT6BC3|wg~f29u0ev)2m zY2hOvxD8xfw={VVxZDATo^;8O9LY~5mH^9Lm zFjk=Kb&q#y{D4^000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2jdGC12zEF{MGUR000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0000QNklU@uWm>{0RR91?*$Cs> literal 0 HcmV?d00001 diff --git a/yogstation.dme b/yogstation.dme index efd4a1737688..46da5f11844c 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -1905,6 +1905,7 @@ #include "code\modules\lighting\lighting_turf.dm" #include "code\modules\mapping\map_template.dm" #include "code\modules\mapping\mapping_helpers.dm" +#include "code\modules\mapping\minimap.dm" #include "code\modules\mapping\preloader.dm" #include "code\modules\mapping\reader.dm" #include "code\modules\mapping\ruins.dm" diff --git a/yogstation/icons/obj/bureaucracy.dmi b/yogstation/icons/obj/bureaucracy.dmi index b829cae20d93b9705773bf735b5396ddaf28d509..2ece0ba9e10a5407b41d9ad164feb163d6929645 100644 GIT binary patch literal 16125 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 Date: Fri, 22 Nov 2019 00:53:09 -0500 Subject: [PATCH 2/2] fuck --- code/modules/mapping/minimap.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mapping/minimap.dm b/code/modules/mapping/minimap.dm index f21d4b58ec1a..1321962e8769 100644 --- a/code/modules/mapping/minimap.dm +++ b/code/modules/mapping/minimap.dm @@ -52,7 +52,7 @@ var/color = A.minimap_color || "#FF00FF" if(locate(/obj/machinery/power/solar) in T) color = "#02026a" - if((locate(/obj/effect/spawner/structure/window) in T) || (locate(/obj/structure/grill) in T)) + if((locate(/obj/effect/spawner/structure/window) in T) || (locate(/obj/structure/grille) in T)) color = BlendRGB(color, "#000000", 0.5) map_icon.DrawBox(color, img_x, img_y) map_icon.Crop(crop_x1, crop_y1, crop_x2, crop_y2)