From 151df41d1c68bfddaad11f7d234ea11e723fcaa0 Mon Sep 17 00:00:00 2001 From: Letter N <24603524+LetterN@users.noreply.github.com> Date: Sun, 31 May 2020 16:15:09 +0800 Subject: [PATCH 1/8] asset cache + better minimaps --- code/__HELPERS/_logging.dm | 5 +- code/_globalvars/logging.dm | 2 + code/controllers/subsystem/assets.dm | 12 +- code/controllers/subsystem/minimaps.dm | 6 +- code/datums/browser.dm | 16 +- code/game/world.dm | 1 + code/modules/asset_cache/asset_cache.dm | 100 ++++ .../modules/asset_cache/asset_cache_client.dm | 58 ++ code/modules/asset_cache/asset_cache_item.dm | 21 + code/modules/asset_cache/asset_list.dm | 228 ++++++++ .../asset_list_items.dm} | 550 ++++-------------- code/modules/asset_cache/validate_assets.html | 28 + code/modules/client/client_procs.dm | 53 +- code/modules/client/verbs/minimap.dm | 4 +- code/modules/mapping/minimaps.dm | 145 +++-- code/modules/oracle_ui/assets.dm | 13 +- html/admin/view_variables.css | 2 +- tgstation.dme | 6 +- 18 files changed, 701 insertions(+), 549 deletions(-) create mode 100644 code/modules/asset_cache/asset_cache.dm create mode 100644 code/modules/asset_cache/asset_cache_client.dm create mode 100644 code/modules/asset_cache/asset_cache_item.dm create mode 100644 code/modules/asset_cache/asset_list.dm rename code/modules/{client/asset_cache.dm => asset_cache/asset_list_items.dm} (54%) create mode 100644 code/modules/asset_cache/validate_assets.html diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 48f54fd60f..1935dcc8a5 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -55,7 +55,7 @@ WRITE_LOG(GLOB.world_game_log, "ADMIN: DSAY: [text]") /proc/log_consent(text) - WRITE_LOG(GLOB.world_game_log,"CONSENT: [text]") + WRITE_LOG(GLOB.world_game_log, "CONSENT: [text]") /* All other items are public. */ /proc/log_game(text) @@ -66,6 +66,9 @@ if (CONFIG_GET(flag/log_virus)) WRITE_LOG(GLOB.world_virus_log, "VIRUS: [text]") +/proc/log_asset(text) + WRITE_LOG(GLOB.world_asset_log, "ASSET: [text]") + /proc/log_access(text) if (CONFIG_GET(flag/log_access)) WRITE_LOG(GLOB.world_game_log, "ACCESS: [text]") diff --git a/code/_globalvars/logging.dm b/code/_globalvars/logging.dm index 65fd772dfe..3bce9c560a 100644 --- a/code/_globalvars/logging.dm +++ b/code/_globalvars/logging.dm @@ -28,6 +28,8 @@ GLOBAL_VAR(world_job_debug_log) GLOBAL_PROTECT(world_job_debug_log) GLOBAL_VAR(world_virus_log) GLOBAL_PROTECT(world_virus_log) +GLOBAL_VAR(world_asset_log) +GLOBAL_PROTECT(world_asset_log) GLOBAL_VAR(world_map_error_log) GLOBAL_PROTECT(world_map_error_log) GLOBAL_VAR(subsystem_log) diff --git a/code/controllers/subsystem/assets.dm b/code/controllers/subsystem/assets.dm index 7b6554bd3f..7285298283 100644 --- a/code/controllers/subsystem/assets.dm +++ b/code/controllers/subsystem/assets.dm @@ -6,17 +6,7 @@ SUBSYSTEM_DEF(assets) var/list/preload = list() /datum/controller/subsystem/assets/Initialize(timeofday) - - var/list/priority_assets = list( - /datum/asset/simple/oui_theme_nano, - /datum/asset/simple/goonchat - ) - - for(var/type in priority_assets) - var/datum/asset/A = new type() - A.register() - - for(var/type in typesof(/datum/asset) - (priority_assets | list(/datum/asset, /datum/asset/simple))) + for(var/type in typesof(/datum/asset)) var/datum/asset/A = type if (type != initial(A._abstract)) get_asset_datum(type) diff --git a/code/controllers/subsystem/minimaps.dm b/code/controllers/subsystem/minimaps.dm index 75de71ca96..c25036a47d 100644 --- a/code/controllers/subsystem/minimaps.dm +++ b/code/controllers/subsystem/minimaps.dm @@ -1,8 +1,8 @@ SUBSYSTEM_DEF(minimaps) name = "Minimaps" flags = SS_NO_FIRE - var/list/station_minimaps - var/datum/minimap_group/station_minimap + var/list/station_minimaps = list() + var/datum/minimap_group/station_minimap = null /datum/controller/subsystem/minimaps/Initialize() if(!CONFIG_GET(flag/minimaps_enabled)) @@ -12,9 +12,9 @@ SUBSYSTEM_DEF(minimaps) return ..() /datum/controller/subsystem/minimaps/proc/build_minimaps() - station_minimaps = list() for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION)) var/datum/space_level/SL = SSmapping.get_level(z) var/name = (SL.name == initial(SL.name))? "[z] - Station" : "[z] - [SL.name]" station_minimaps += new /datum/minimap(z, name = name) + station_minimap = new(station_minimaps, "Station") diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 5b1df6cb68..96b2a2a294 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -97,20 +97,20 @@ [get_footer()] "} -/datum/browser/proc/open(use_onclose = 1) +/datum/browser/proc/open(use_onclose = TRUE) if(isnull(window_id)) //null check because this can potentially nuke goonchat WARNING("Browser [title] tried to open with a null ID") to_chat(user, "The [title] browser you tried to open failed a sanity check! Please report this on github!") return var/window_size = "" - if (width && height) + if(width && height) window_size = "size=[width]x[height];" - if (stylesheets.len) - send_asset_list(user, stylesheets, verify=FALSE) - if (scripts.len) - send_asset_list(user, scripts, verify=FALSE) + if(stylesheets.len) + send_asset_list(user, stylesheets) + if(scripts.len) + send_asset_list(user, scripts) user << browse(get_content(), "window=[window_id];[window_size][window_options]") - if (use_onclose) + if(use_onclose) setup_onclose() /datum/browser/proc/setup_onclose() @@ -157,7 +157,7 @@ close() //designed as a drop in replacement for alert(); functions the same. (outside of needing User specified) -/proc/tgalert(var/mob/User, Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1, Timeout = 6000) +/proc/tgalert(mob/User, Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1, Timeout = 6000) if (!User) User = usr switch(askuser(User, Message, Title, Button1, Button2, Button3, StealFocus, Timeout)) diff --git a/code/game/world.dm b/code/game/world.dm index 1c6f3bceba..82384e9da6 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -121,6 +121,7 @@ GLOBAL_LIST(topic_status_cache) GLOB.world_game_log = "[GLOB.log_directory]/game.log" GLOB.world_virus_log = "[GLOB.log_directory]/virus.log" + GLOB.world_asset_log = "[GLOB.log_directory]/asset.log" GLOB.world_attack_log = "[GLOB.log_directory]/attack.log" GLOB.world_pda_log = "[GLOB.log_directory]/pda.log" GLOB.world_telecomms_log = "[GLOB.log_directory]/telecomms.log" diff --git a/code/modules/asset_cache/asset_cache.dm b/code/modules/asset_cache/asset_cache.dm new file mode 100644 index 0000000000..7a12e5e9f6 --- /dev/null +++ b/code/modules/asset_cache/asset_cache.dm @@ -0,0 +1,100 @@ +/* +Asset cache quick users guide: +Make a datum in asset_list_items.dm with your assets for your thing. +Checkout asset_list.dm for the helper subclasses +The simple subclass will most like be of use for most cases. +Then call get_asset_datum() with the type of the datum you created and store the return +Then call .send(client) on that stored return value. +Note: If your code uses output() with assets you will need to call asset_flush on the client and wait for it to return before calling output(). You only need do this if .send(client) returned TRUE +*/ + +//When sending mutiple assets, how many before we give the client a quaint little sending resources message +#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 + +//This proc sends the asset to the client, but only if it needs it. +//This proc blocks(sleeps) unless verify is set to false +/proc/send_asset(client/client, asset_name) + return send_asset_list(client, list(asset_name)) + +/// Sends a list of assets to a client +/// This proc will no longer block, use client.asset_flush() if you to need know when the client has all assets (such as for output()). (This is not required for browse() calls as they use the same message queue as asset sends) +/// client - a client or mob +/// asset_list - A list of asset filenames to be sent to the client. +/// Returns TRUE if any assets were sent. +/proc/send_asset_list(client/client, list/asset_list) + if(!istype(client)) + if(ismob(client)) + var/mob/M = client + if(M.client) + client = M.client + else + return + else + return + + var/list/unreceived = list() + + for (var/asset_name in asset_list) + var/datum/asset_cache_item/asset = SSassets.cache[asset_name] + if (!asset) + continue + var/asset_file = asset.resource + if (!asset_file) + continue + + var/asset_md5 = asset.md5 + if (client.sent_assets[asset_name] == asset_md5) + continue + unreceived[asset_name] = asset_md5 + + if (unreceived.len) + if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) + to_chat(client, "Sending Resources...") + + for(var/asset in unreceived) + var/datum/asset_cache_item/ACI + if ((ACI = SSassets.cache[asset])) + log_asset("Sending asset [asset] to client [client]") + client << browse_rsc(ACI.resource, asset) + + client.sent_assets |= unreceived + addtimer(CALLBACK(client, /client/proc/asset_cache_update_json), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) + return TRUE + return FALSE + +//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. +//The proc calls procs that sleep for long times. +/proc/getFilesSlow(client/client, list/files, register_asset = TRUE, filerate = 3) + var/startingfilerate = filerate + for(var/file in files) + if (!client) + break + if (register_asset) + register_asset(file, files[file]) + + if (send_asset(client, file)) + if (!(--filerate)) + filerate = startingfilerate + client.asset_flush() + stoplag(0) //queuing calls like this too quickly can cause issues in some client versions + +//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. +//icons and virtual assets get copied to the dyn rsc before use +/proc/register_asset(asset_name, asset) + var/datum/asset_cache_item/ACI = new(asset_name, asset) + + //this is technically never something that was supported and i want metrics on how often it happens if at all. + if (SSassets.cache[asset_name]) + var/datum/asset_cache_item/OACI = SSassets.cache[asset_name] + if (OACI.md5 != ACI.md5) + stack_trace("ERROR: new asset added to the asset cache with the same name as another asset: [asset_name] existing asset md5: [OACI.md5] new asset md5:[ACI.md5]") + else + var/list/stacktrace = gib_stack_trace() + log_asset("WARNING: dupe asset added to the asset cache: [asset_name] existing asset md5: [OACI.md5] new asset md5:[ACI.md5]\n[stacktrace.Join("\n")]") + SSassets.cache[asset_name] = ACI + +//Generated names do not include file extention. +//Used mainly for code that deals with assets in a generic way +//The same asset will always lead to the same asset name +/proc/generate_asset_name(file) + return "asset.[md5(fcopy_rsc(file))]" diff --git a/code/modules/asset_cache/asset_cache_client.dm b/code/modules/asset_cache/asset_cache_client.dm new file mode 100644 index 0000000000..50a5685ded --- /dev/null +++ b/code/modules/asset_cache/asset_cache_client.dm @@ -0,0 +1,58 @@ + +/client + var/list/sent_assets = list() // List of all asset filenames sent to this client by the asset cache, along with their assoicated md5s + var/list/completed_asset_jobs = list() /// List of all completed blocking send jobs awaiting acknowledgement by send_asset + + var/last_asset_job = 0 /// Last asset send job id. + var/last_completed_asset_job = 0 + +/// Process asset cache client topic calls for "asset_cache_confirm_arrival=[INT]" +/client/proc/asset_cache_confirm_arrival(job_id) + var/asset_cache_job = round(text2num(job_id)) + //because we skip the limiter, we have to make sure this is a valid arrival and not somebody tricking us into letting them append to a list without limit. + if (asset_cache_job > 0 && asset_cache_job <= last_asset_job && !(completed_asset_jobs["[asset_cache_job]"])) + completed_asset_jobs["[asset_cache_job]"] = TRUE + last_completed_asset_job = max(last_completed_asset_job, asset_cache_job) + else + return asset_cache_job || TRUE + + +/// Process asset cache client topic calls for "asset_cache_preload_data=[HTML+JSON_STRING] +/client/proc/asset_cache_preload_data(data) + /*var/jsonend = findtextEx(data, "{{{ENDJSONDATA}}}") + if (!jsonend) + CRASH("invalid asset_cache_preload_data, no jsonendmarker")*/ + //var/json = html_decode(copytext(data, 1, jsonend)) + var/json = data + var/list/preloaded_assets = json_decode(json) + + for (var/preloaded_asset in preloaded_assets) + if (copytext(preloaded_asset, findlasttext(preloaded_asset, ".")+1) in list("js", "jsm", "htm", "html")) + preloaded_assets -= preloaded_asset + continue + sent_assets |= preloaded_assets + + +/// Updates the client side stored html/json combo file used to keep track of what assets the client has between restarts/reconnects. +/client/proc/asset_cache_update_json(verify = FALSE, list/new_assets = list()) + if (world.time - connection_time < 10 SECONDS) //don't override the existing data file on a new connection + return + if (!islist(new_assets)) + new_assets = list("[new_assets]" = md5(SSassets.cache[new_assets])) + + src << browse(json_encode(new_assets|sent_assets), "file=asset_data.json&display=0") + +/// Blocks until all currently sending browser assets have been sent. +/// Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends. +/// This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away. +/client/proc/asset_flush(timeout = 50) + var/job = ++last_asset_job + var/t = 0 + var/timeout_time = timeout + src << browse({""}, "window=asset_cache_browser&file=asset_cache_send_verify.htm") + + while(!completed_asset_jobs["[job]"] && t < timeout_time) // Reception is handled in Topic() + stoplag(1) // Lock up the caller until this is received. + t++ + if (t < timeout_time) + return TRUE diff --git a/code/modules/asset_cache/asset_cache_item.dm b/code/modules/asset_cache/asset_cache_item.dm new file mode 100644 index 0000000000..0e7d44a7ac --- /dev/null +++ b/code/modules/asset_cache/asset_cache_item.dm @@ -0,0 +1,21 @@ +/** + * # asset_cache_item + * + * An internal datum containing info on items in the asset cache. Mainly used to cache md5 info for speed. +**/ +/datum/asset_cache_item + var/name + var/md5 + var/resource + +/datum/asset_cache_item/New(name, file) + if (!isfile(file)) + file = fcopy_rsc(file) + md5 = md5(file) + if (!md5) + md5 = md5(fcopy_rsc(file)) + if (!md5) + CRASH("invalid asset sent to asset cache") + debug_world_log("asset cache unexpected success of second fcopy_rsc") + src.name = name + resource = file diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm new file mode 100644 index 0000000000..fe9859f238 --- /dev/null +++ b/code/modules/asset_cache/asset_list.dm @@ -0,0 +1,228 @@ + +//These datums are used to populate the asset cache, the proc "register()" does this. +//Place any asset datums you create in asset_list_items.dm + +//all of our asset datums, used for referring to these later +GLOBAL_LIST_EMPTY(asset_datums) + +//get an assetdatum or make a new one +/proc/get_asset_datum(type) + return GLOB.asset_datums[type] || new type() + +/datum/asset + var/_abstract = /datum/asset + +/datum/asset/New() + GLOB.asset_datums[type] = src + register() + +/datum/asset/proc/register() + return + +/datum/asset/proc/send(client) + return + + +//If you don't need anything complicated. +/datum/asset/simple + _abstract = /datum/asset/simple + var/assets = list() + +/datum/asset/simple/register() + for(var/asset_name in assets) + register_asset(asset_name, assets[asset_name]) + +/datum/asset/simple/send(client) + . = send_asset_list(client, assets) + + +// For registering or sending multiple others at once +/datum/asset/group + _abstract = /datum/asset/group + var/list/children + +/datum/asset/group/register() + for(var/type in children) + get_asset_datum(type) + +/datum/asset/group/send(client/C) + for(var/type in children) + var/datum/asset/A = get_asset_datum(type) + . = A.send(C) || . + + +// spritesheet implementation - coalesces various icons into a single .png file +// and uses CSS to select icons out of that file - saves on transferring some +// 1400-odd individual PNG files +#define SPR_SIZE 1 +#define SPR_IDX 2 +#define SPRSZ_COUNT 1 +#define SPRSZ_ICON 2 +#define SPRSZ_STRIPPED 3 + +/datum/asset/spritesheet + _abstract = /datum/asset/spritesheet + var/name + var/list/sizes = list() // "32x32" -> list(10, icon/normal, icon/stripped) + var/list/sprites = list() // "foo_bar" -> list("32x32", 5) + +/datum/asset/spritesheet/register() + if (!name) + CRASH("spritesheet [type] cannot register without a name") + ensure_stripped() + + var/res_name = "spritesheet_[name].css" + var/fname = "data/spritesheets/[res_name]" + fdel(fname) + text2file(generate_css(), fname) + register_asset(res_name, fcopy_rsc(fname)) + fdel(fname) + + for(var/size_id in sizes) + var/size = sizes[size_id] + register_asset("[name]_[size_id].png", size[SPRSZ_STRIPPED]) + +/datum/asset/spritesheet/send(client/C) + if (!name) + return + var/all = list("spritesheet_[name].css") + for(var/size_id in sizes) + all += "[name]_[size_id].png" + . = send_asset_list(C, all) + +/datum/asset/spritesheet/proc/ensure_stripped(sizes_to_strip = sizes) + for(var/size_id in sizes_to_strip) + var/size = sizes[size_id] + if (size[SPRSZ_STRIPPED]) + continue + + // save flattened version + var/fname = "data/spritesheets/[name]_[size_id].png" + fcopy(size[SPRSZ_ICON], fname) + var/error = rustg_dmi_strip_metadata(fname) + if(length(error)) + stack_trace("Failed to strip [name]_[size_id].png: [error]") + size[SPRSZ_STRIPPED] = icon(fname) + fdel(fname) + +/datum/asset/spritesheet/proc/generate_css() + var/list/out = list() + + for (var/size_id in sizes) + var/size = sizes[size_id] + var/icon/tiny = size[SPRSZ_ICON] + out += ".[name][size_id]{display:inline-block;width:[tiny.Width()]px;height:[tiny.Height()]px;background:url('[name]_[size_id].png') no-repeat;}" + + for (var/sprite_id in sprites) + var/sprite = sprites[sprite_id] + var/size_id = sprite[SPR_SIZE] + var/idx = sprite[SPR_IDX] + var/size = sizes[size_id] + + var/icon/tiny = size[SPRSZ_ICON] + var/icon/big = size[SPRSZ_STRIPPED] + var/per_line = big.Width() / tiny.Width() + var/x = (idx % per_line) * tiny.Width() + var/y = round(idx / per_line) * tiny.Height() + + out += ".[name][size_id].[sprite_id]{background-position:-[x]px -[y]px;}" + + return out.Join("\n") + +/datum/asset/spritesheet/proc/Insert(sprite_name, icon/I, icon_state="", dir=SOUTH, frame=1, moving=FALSE) + I = icon(I, icon_state=icon_state, dir=dir, frame=frame, moving=moving) + if (!I || !length(icon_states(I))) // that direction or state doesn't exist + return + var/size_id = "[I.Width()]x[I.Height()]" + var/size = sizes[size_id] + + if (sprites[sprite_name]) + CRASH("duplicate sprite \"[sprite_name]\" in sheet [name] ([type])") + + if (size) + var/position = size[SPRSZ_COUNT]++ + var/icon/sheet = size[SPRSZ_ICON] + size[SPRSZ_STRIPPED] = null + sheet.Insert(I, icon_state=sprite_name) + sprites[sprite_name] = list(size_id, position) + else + sizes[size_id] = size = list(1, I, null) + sprites[sprite_name] = list(size_id, 0) + +/datum/asset/spritesheet/proc/InsertAll(prefix, icon/I, list/directions) + if (length(prefix)) + prefix = "[prefix]-" + + if (!directions) + directions = list(SOUTH) + + for (var/icon_state_name in icon_states(I)) + for (var/direction in directions) + var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]-" : "" + Insert("[prefix][prefix2][icon_state_name]", I, icon_state=icon_state_name, dir=direction) + +/datum/asset/spritesheet/proc/css_tag() + return {""} + +/datum/asset/spritesheet/proc/icon_tag(sprite_name) + var/sprite = sprites[sprite_name] + if (!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return {""} + +/datum/asset/spritesheet/proc/icon_class_name(sprite_name) + var/sprite = sprites[sprite_name] + if (!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return {"[name][size_id] [sprite_name]"} + +#undef SPR_SIZE +#undef SPR_IDX +#undef SPRSZ_COUNT +#undef SPRSZ_ICON +#undef SPRSZ_STRIPPED + + +/datum/asset/spritesheet/simple + _abstract = /datum/asset/spritesheet/simple + var/list/assets + +/datum/asset/spritesheet/simple/register() + for (var/key in assets) + Insert(key, assets[key]) + ..() + +//Generates assets based on iconstates of a single icon +/datum/asset/simple/icon_states + _abstract = /datum/asset/simple/icon_states + var/icon + var/list/directions = list(SOUTH) + var/frame = 1 + var/movement_states = FALSE + + var/prefix = "default" //asset_name = "[prefix].[icon_state_name].png" + var/generic_icon_names = FALSE //generate icon filenames using generate_asset_name() instead the above format + +/datum/asset/simple/icon_states/register(_icon = icon) + for(var/icon_state_name in icon_states(_icon)) + for(var/direction in directions) + var/asset = icon(_icon, icon_state_name, direction, frame, movement_states) + if (!asset) + continue + asset = fcopy_rsc(asset) //dedupe + var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]." : "" + var/asset_name = sanitize_filename("[prefix].[prefix2][icon_state_name].png") + if (generic_icon_names) + asset_name = "[generate_asset_name(asset)].png" + + register_asset(asset_name, asset) + +/datum/asset/simple/icon_states/multiple_icons + _abstract = /datum/asset/simple/icon_states/multiple_icons + var/list/icons + +/datum/asset/simple/icon_states/multiple_icons/register() + for(var/i in icons) + ..(i) diff --git a/code/modules/client/asset_cache.dm b/code/modules/asset_cache/asset_list_items.dm similarity index 54% rename from code/modules/client/asset_cache.dm rename to code/modules/asset_cache/asset_list_items.dm index de7cd1696f..13a1803188 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -1,399 +1,22 @@ -/* -Asset cache quick users guide: - -Make a datum at the bottom of this file with your assets for your thing. -The simple subsystem will most like be of use for most cases. -Then call get_asset_datum() with the type of the datum you created and store the return -Then call .send(client) on that stored return value. - -You can set verify to TRUE if you want send() to sleep until the client has the assets. -*/ - - -// Amount of time(ds) MAX to send per asset, if this get exceeded we cancel the sleeping. -// This is doubled for the first asset, then added per asset after -#define ASSET_CACHE_SEND_TIMEOUT 7 - -//When sending mutiple assets, how many before we give the client a quaint little sending resources message -#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 - -//When passively preloading assets, how many to send at once? Too high creates noticable lag where as too low can flood the client's cache with "verify" files -#define ASSET_CACHE_PRELOAD_CONCURRENT 3 - -/client - var/list/cache = list() // List of all assets sent to this client by the asset cache. - var/list/completed_asset_jobs = list() // List of all completed jobs, awaiting acknowledgement. - var/list/sending = list() - var/last_asset_job = 0 // Last job done. - -//This proc sends the asset to the client, but only if it needs it. -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset(client/client, asset_name, verify = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - if(client.cache.Find(asset_name) || client.sending.Find(asset_name)) - return 0 - - client << browse_rsc(SSassets.cache[asset_name], asset_name) - if(!verify) - client.cache += asset_name - return 1 - - client.sending |= asset_name - var/job = ++client.last_asset_job - - client << browse({" - - "}, "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = (ASSET_CACHE_SEND_TIMEOUT * client.sending.len) + ASSET_CACHE_SEND_TIMEOUT - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - stoplag(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= asset_name - client.cache |= asset_name - client.completed_asset_jobs -= job - - return 1 - -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset_list(client/client, list/asset_list, verify = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - var/list/unreceived = asset_list - (client.cache + client.sending) - if(!unreceived || !unreceived.len) - return 0 - if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) - to_chat(client, "Sending Resources...") - for(var/asset in unreceived) - if (asset in SSassets.cache) - client << browse_rsc(SSassets.cache[asset], asset) - - if(!verify) // Can't access the asset cache browser, rip. - client.cache += unreceived - return 1 - - client.sending |= unreceived - var/job = ++client.last_asset_job - - client << browse({" - - "}, "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = ASSET_CACHE_SEND_TIMEOUT * client.sending.len - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - stoplag(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= unreceived - client.cache |= unreceived - client.completed_asset_jobs -= job - - return 1 - -//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. -//The proc calls procs that sleep for long times. -/proc/getFilesSlow(client/client, list/files, register_asset = TRUE) - var/concurrent_tracker = 1 - for(var/file in files) - if (!client) - break - if (register_asset) - register_asset(file, files[file]) - if (concurrent_tracker >= ASSET_CACHE_PRELOAD_CONCURRENT) - concurrent_tracker = 1 - send_asset(client, file) - else - concurrent_tracker++ - send_asset(client, file, verify=FALSE) - - stoplag(0) //queuing calls like this too quickly can cause issues in some client versions - -//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. -//if it's an icon or something be careful, you'll have to copy it before further use. -/proc/register_asset(asset_name, asset) - SSassets.cache[asset_name] = asset - -//Generated names do not include file extention. -//Used mainly for code that deals with assets in a generic way -//The same asset will always lead to the same asset name -/proc/generate_asset_name(file) - return "asset.[md5(fcopy_rsc(file))]" - - -//These datums are used to populate the asset cache, the proc "register()" does this. - -//all of our asset datums, used for referring to these later -GLOBAL_LIST_EMPTY(asset_datums) - -//get an assetdatum or make a new one -/proc/get_asset_datum(type) - return GLOB.asset_datums[type] || new type() - -/datum/asset - var/_abstract = /datum/asset - -/datum/asset/New() - GLOB.asset_datums[type] = src - register() - -/datum/asset/proc/register() - return - -/datum/asset/proc/send(client) - return - - -//If you don't need anything complicated. -/datum/asset/simple - _abstract = /datum/asset/simple - var/assets = list() - var/verify = FALSE - -/datum/asset/simple/register() - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) - -/datum/asset/simple/send(client) - send_asset_list(client,assets,verify) - - -// For registering or sending multiple others at once -/datum/asset/group - _abstract = /datum/asset/group - var/list/children - -/datum/asset/group/register() - for(var/type in children) - get_asset_datum(type) - -/datum/asset/group/send(client/C) - for(var/type in children) - var/datum/asset/A = get_asset_datum(type) - A.send(C) - - -// spritesheet implementation - coalesces various icons into a single .png file -// and uses CSS to select icons out of that file - saves on transferring some -// 1400-odd individual PNG files -#define SPR_SIZE 1 -#define SPR_IDX 2 -#define SPRSZ_COUNT 1 -#define SPRSZ_ICON 2 -#define SPRSZ_STRIPPED 3 - -/datum/asset/spritesheet - _abstract = /datum/asset/spritesheet - var/name - var/list/sizes = list() // "32x32" -> list(10, icon/normal, icon/stripped) - var/list/sprites = list() // "foo_bar" -> list("32x32", 5) - var/verify = FALSE - -/datum/asset/spritesheet/register() - if (!name) - CRASH("spritesheet [type] cannot register without a name") - ensure_stripped() - - var/res_name = "spritesheet_[name].css" - var/fname = "data/spritesheets/[res_name]" - fdel(fname) - text2file(generate_css(), fname) - register_asset(res_name, fcopy_rsc(fname)) - fdel(fname) - - for(var/size_id in sizes) - var/size = sizes[size_id] - register_asset("[name]_[size_id].png", size[SPRSZ_STRIPPED]) - -/datum/asset/spritesheet/send(client/C) - if (!name) - return - var/all = list("spritesheet_[name].css") - for(var/size_id in sizes) - all += "[name]_[size_id].png" - send_asset_list(C, all, verify) - -/datum/asset/spritesheet/proc/ensure_stripped(sizes_to_strip = sizes) - for(var/size_id in sizes_to_strip) - var/size = sizes[size_id] - if (size[SPRSZ_STRIPPED]) - continue - - // save flattened version - var/fname = "data/spritesheets/[name]_[size_id].png" - fcopy(size[SPRSZ_ICON], fname) - var/error = rustg_dmi_strip_metadata(fname) - if(length(error)) - stack_trace("Failed to strip [name]_[size_id].png: [error]") - size[SPRSZ_STRIPPED] = icon(fname) - fdel(fname) - -/datum/asset/spritesheet/proc/generate_css() - var/list/out = list() - - for (var/size_id in sizes) - var/size = sizes[size_id] - var/icon/tiny = size[SPRSZ_ICON] - out += ".[name][size_id]{display:inline-block;width:[tiny.Width()]px;height:[tiny.Height()]px;background:url('[name]_[size_id].png') no-repeat;}" - - for (var/sprite_id in sprites) - var/sprite = sprites[sprite_id] - var/size_id = sprite[SPR_SIZE] - var/idx = sprite[SPR_IDX] - var/size = sizes[size_id] - - var/icon/tiny = size[SPRSZ_ICON] - var/icon/big = size[SPRSZ_STRIPPED] - var/per_line = big.Width() / tiny.Width() - var/x = (idx % per_line) * tiny.Width() - var/y = round(idx / per_line) * tiny.Height() - - out += ".[name][size_id].[sprite_id]{background-position:-[x]px -[y]px;}" - - return out.Join("\n") - -/datum/asset/spritesheet/proc/Insert(sprite_name, icon/I, icon_state="", dir=SOUTH, frame=1, moving=FALSE) - I = icon(I, icon_state=icon_state, dir=dir, frame=frame, moving=moving) - if (!I || !length(icon_states(I))) // that direction or state doesn't exist - return - var/size_id = "[I.Width()]x[I.Height()]" - var/size = sizes[size_id] - - if (sprites[sprite_name]) - CRASH("duplicate sprite \"[sprite_name]\" in sheet [name] ([type])") - - if (size) - var/position = size[SPRSZ_COUNT]++ - var/icon/sheet = size[SPRSZ_ICON] - size[SPRSZ_STRIPPED] = null - sheet.Insert(I, icon_state=sprite_name) - sprites[sprite_name] = list(size_id, position) - else - sizes[size_id] = size = list(1, I, null) - sprites[sprite_name] = list(size_id, 0) - -/datum/asset/spritesheet/proc/InsertAll(prefix, icon/I, list/directions) - if (length(prefix)) - prefix = "[prefix]-" - - if (!directions) - directions = list(SOUTH) - - for (var/icon_state_name in icon_states(I)) - for (var/direction in directions) - var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]-" : "" - Insert("[prefix][prefix2][icon_state_name]", I, icon_state=icon_state_name, dir=direction) - -/datum/asset/spritesheet/proc/css_tag() - return {""} - -/datum/asset/spritesheet/proc/icon_tag(sprite_name) - var/sprite = sprites[sprite_name] - if (!sprite) - return null - var/size_id = sprite[SPR_SIZE] - return {""} - -/datum/asset/spritesheet/proc/icon_class_name(sprite_name) - var/sprite = sprites[sprite_name] - if (!sprite) - return null - var/size_id = sprite[SPR_SIZE] - return {"[name][size_id] [sprite_name]"} - -#undef SPR_SIZE -#undef SPR_IDX -#undef SPRSZ_COUNT -#undef SPRSZ_ICON -#undef SPRSZ_STRIPPED - - -/datum/asset/spritesheet/simple - _abstract = /datum/asset/spritesheet/simple - var/list/assets - -/datum/asset/spritesheet/simple/register() - for (var/key in assets) - Insert(key, assets[key]) - ..() - -//Generates assets based on iconstates of a single icon -/datum/asset/simple/icon_states - _abstract = /datum/asset/simple/icon_states - var/icon - var/list/directions = list(SOUTH) - var/frame = 1 - var/movement_states = FALSE - - var/prefix = "default" //asset_name = "[prefix].[icon_state_name].png" - var/generic_icon_names = FALSE //generate icon filenames using generate_asset_name() instead the above format - - verify = FALSE - -/datum/asset/simple/icon_states/register(_icon = icon) - for(var/icon_state_name in icon_states(_icon)) - for(var/direction in directions) - var/asset = icon(_icon, icon_state_name, direction, frame, movement_states) - if (!asset) - continue - asset = fcopy_rsc(asset) //dedupe - var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]." : "" - var/asset_name = sanitize_filename("[prefix].[prefix2][icon_state_name].png") - if (generic_icon_names) - asset_name = "[generate_asset_name(asset)].png" - - register_asset(asset_name, asset) - -/datum/asset/simple/icon_states/multiple_icons - _abstract = /datum/asset/simple/icon_states/multiple_icons - var/list/icons - -/datum/asset/simple/icon_states/multiple_icons/register() - for(var/i in icons) - ..(i) - - //DEFINITIONS FOR ASSET DATUMS START HERE. - +/* uncomment this and delete the tgui def bellow this for the new tgui /datum/asset/simple/tgui assets = list( - // tgui + "tgui.bundle.js" = 'tgui/packages/tgui/public/tgui.bundle.js', + "tgui.bundle.css" = 'tgui/packages/tgui/public/tgui.bundle.css', + ) +*/ +/datum/asset/simple/tgui + assets = list( + // Old TGUI "tgui.css" = 'tgui/assets/tgui.css', "tgui.js" = 'tgui/assets/tgui.js', // tgui-next "tgui-main.html" = 'tgui-next/packages/tgui/public/tgui-main.html', - "tgui-fallback.html" = 'tgui-next/packages/tgui/public/tgui-fallback.html', "tgui.bundle.js" = 'tgui-next/packages/tgui/public/tgui.bundle.js', "tgui.bundle.css" = 'tgui-next/packages/tgui/public/tgui.bundle.css', + // Old TGUI compatability + "tgui-fallback.html" = 'tgui-next/packages/tgui/public/tgui-fallback.html', "shim-html5shiv.js" = 'tgui-next/packages/tgui/public/shim-html5shiv.js', "shim-ie8.js" = 'tgui-next/packages/tgui/public/shim-ie8.js', "shim-dom4.js" = 'tgui-next/packages/tgui/public/shim-dom4.js', @@ -434,8 +57,16 @@ GLOBAL_LIST_EMPTY(asset_datums) "smmon_4.gif" = 'icons/program_icons/smmon_4.gif', "smmon_5.gif" = 'icons/program_icons/smmon_5.gif', "smmon_6.gif" = 'icons/program_icons/smmon_6.gif' + //"borg_mon.gif" = 'icons/program_icons/borg_mon.gif' ) - +/* uncomment if you're porting the new ntnet app +/datum/asset/simple/radar_assets + assets = list( + "ntosradarbackground.png" = 'icons/UI_Icons/tgui/ntosradar_background.png', + "ntosradarpointer.png" = 'icons/UI_Icons/tgui/ntosradar_pointer.png', + "ntosradarpointerS.png" = 'icons/UI_Icons/tgui/ntosradar_pointer_S.png' + ) +*/ /datum/asset/spritesheet/simple/pda name = "pda" assets = list( @@ -464,6 +95,7 @@ GLOBAL_LIST_EMPTY(asset_datums) "refresh" = 'icons/pda_icons/pda_refresh.png', "scanner" = 'icons/pda_icons/pda_scanner.png', "signaler" = 'icons/pda_icons/pda_signaler.png', + //"skills" = 'icons/pda_icons/pda_skills.png', "status" = 'icons/pda_icons/pda_status.png', "dronephone" = 'icons/pda_icons/pda_dronephone.png', "emoji" = 'icons/pda_icons/pda_emoji.png' @@ -483,51 +115,10 @@ GLOBAL_LIST_EMPTY(asset_datums) "stamp-cap" = 'icons/stamp_icons/large_stamp-cap.png', "stamp-qm" = 'icons/stamp_icons/large_stamp-qm.png', "stamp-law" = 'icons/stamp_icons/large_stamp-law.png' - ) - -/datum/asset/spritesheet/simple/minesweeper - name = "minesweeper" - assets = list( - "1" = 'icons/UI_Icons/minesweeper_tiles/one.png', - "2" = 'icons/UI_Icons/minesweeper_tiles/two.png', - "3" = 'icons/UI_Icons/minesweeper_tiles/three.png', - "4" = 'icons/UI_Icons/minesweeper_tiles/four.png', - "5" = 'icons/UI_Icons/minesweeper_tiles/five.png', - "6" = 'icons/UI_Icons/minesweeper_tiles/six.png', - "7" = 'icons/UI_Icons/minesweeper_tiles/seven.png', - "8" = 'icons/UI_Icons/minesweeper_tiles/eight.png', - "empty" = 'icons/UI_Icons/minesweeper_tiles/empty.png', - "flag" = 'icons/UI_Icons/minesweeper_tiles/flag.png', - "hidden" = 'icons/UI_Icons/minesweeper_tiles/hidden.png', - "mine" = 'icons/UI_Icons/minesweeper_tiles/mine.png', - "minehit" = 'icons/UI_Icons/minesweeper_tiles/minehit.png' - ) - -/datum/asset/spritesheet/simple/pills - name = "pills" - assets = list( - "pill1" = 'icons/UI_Icons/Pills/pill1.png', - "pill2" = 'icons/UI_Icons/Pills/pill2.png', - "pill3" = 'icons/UI_Icons/Pills/pill3.png', - "pill4" = 'icons/UI_Icons/Pills/pill4.png', - "pill5" = 'icons/UI_Icons/Pills/pill5.png', - "pill6" = 'icons/UI_Icons/Pills/pill6.png', - "pill7" = 'icons/UI_Icons/Pills/pill7.png', - "pill8" = 'icons/UI_Icons/Pills/pill8.png', - "pill9" = 'icons/UI_Icons/Pills/pill9.png', - "pill10" = 'icons/UI_Icons/Pills/pill10.png', - "pill11" = 'icons/UI_Icons/Pills/pill11.png', - "pill12" = 'icons/UI_Icons/Pills/pill12.png', - "pill13" = 'icons/UI_Icons/Pills/pill13.png', - "pill14" = 'icons/UI_Icons/Pills/pill14.png', - "pill15" = 'icons/UI_Icons/Pills/pill15.png', - "pill16" = 'icons/UI_Icons/Pills/pill16.png', - "pill17" = 'icons/UI_Icons/Pills/pill17.png', - "pill18" = 'icons/UI_Icons/Pills/pill18.png', - "pill19" = 'icons/UI_Icons/Pills/pill19.png', - "pill20" = 'icons/UI_Icons/Pills/pill20.png', - "pill21" = 'icons/UI_Icons/Pills/pill21.png', - "pill22" = 'icons/UI_Icons/Pills/pill22.png', + //"stamp-chap" = 'icons/stamp_icons/large_stamp-chap.png', + //"stamp-mime" = 'icons/stamp_icons/large_stamp-mime.png', + //"stamp-centcom" = 'icons/stamp_icons/large_stamp-centcom.png', + //"stamp-syndicate" = 'icons/stamp_icons/large_stamp-syndicate.png' ) /datum/asset/simple/IRV @@ -573,23 +164,20 @@ GLOBAL_LIST_EMPTY(asset_datums) ) /datum/asset/simple/jquery - verify = FALSE assets = list( "jquery.min.js" = 'code/modules/goonchat/browserassets/js/jquery.min.js', ) /datum/asset/simple/goonchat - verify = FALSE assets = list( "json2.min.js" = 'code/modules/goonchat/browserassets/js/json2.min.js', "browserOutput.js" = 'code/modules/goonchat/browserassets/js/browserOutput.js', "browserOutput.css" = 'code/modules/goonchat/browserassets/css/browserOutput.css', - "browserOutput_dark.css" = 'code/modules/goonchat/browserassets/css/browserOutput_dark.css', + "browserOutput_dark.css" = 'code/modules/goonchat/browserassets/css/browserOutput_dark.css', //dark theme, cit specific "browserOutput_light.css" = 'code/modules/goonchat/browserassets/css/browserOutput_light.css' ) /datum/asset/simple/fontawesome - verify = FALSE assets = list( "fa-regular-400.eot" = 'html/font-awesome/webfonts/fa-regular-400.eot', "fa-regular-400.woff" = 'html/font-awesome/webfonts/fa-regular-400.woff', @@ -630,6 +218,90 @@ GLOBAL_LIST_EMPTY(asset_datums) "none_button.png" = 'html/none_button.png', ) +/datum/asset/spritesheet/simple/minesweeper + name = "minesweeper" + assets = list( + "1" = 'icons/UI_Icons/minesweeper_tiles/one.png', + "2" = 'icons/UI_Icons/minesweeper_tiles/two.png', + "3" = 'icons/UI_Icons/minesweeper_tiles/three.png', + "4" = 'icons/UI_Icons/minesweeper_tiles/four.png', + "5" = 'icons/UI_Icons/minesweeper_tiles/five.png', + "6" = 'icons/UI_Icons/minesweeper_tiles/six.png', + "7" = 'icons/UI_Icons/minesweeper_tiles/seven.png', + "8" = 'icons/UI_Icons/minesweeper_tiles/eight.png', + "empty" = 'icons/UI_Icons/minesweeper_tiles/empty.png', + "flag" = 'icons/UI_Icons/minesweeper_tiles/flag.png', + "hidden" = 'icons/UI_Icons/minesweeper_tiles/hidden.png', + "mine" = 'icons/UI_Icons/minesweeper_tiles/mine.png', + "minehit" = 'icons/UI_Icons/minesweeper_tiles/minehit.png' + ) + +/* Port the app game thing +/datum/asset/simple/arcade + assets = list( + "boss1.gif" = 'icons/UI_Icons/Arcade/boss1.gif', + "boss2.gif" = 'icons/UI_Icons/Arcade/boss2.gif', + "boss3.gif" = 'icons/UI_Icons/Arcade/boss3.gif', + "boss4.gif" = 'icons/UI_Icons/Arcade/boss4.gif', + "boss5.gif" = 'icons/UI_Icons/Arcade/boss5.gif', + "boss6.gif" = 'icons/UI_Icons/Arcade/boss6.gif', + ) +*/ +/* +/datum/asset/spritesheet/simple/achievements + name ="achievements" + assets = list( + "default" = 'icons/UI_Icons/Achievements/default.png', + "basemisc" = 'icons/UI_Icons/Achievements/basemisc.png', + "baseboss" = 'icons/UI_Icons/Achievements/baseboss.png', + "baseskill" = 'icons/UI_Icons/Achievements/baseskill.png', + "bbgum" = 'icons/UI_Icons/Achievements/Boss/bbgum.png', + "colossus" = 'icons/UI_Icons/Achievements/Boss/colossus.png', + "hierophant" = 'icons/UI_Icons/Achievements/Boss/hierophant.png', + "legion" = 'icons/UI_Icons/Achievements/Boss/legion.png', + "miner" = 'icons/UI_Icons/Achievements/Boss/miner.png', + "swarmer" = 'icons/UI_Icons/Achievements/Boss/swarmer.png', + "tendril" = 'icons/UI_Icons/Achievements/Boss/tendril.png', + "featofstrength" = 'icons/UI_Icons/Achievements/Misc/featofstrength.png', + "helbital" = 'icons/UI_Icons/Achievements/Misc/helbital.png', + "jackpot" = 'icons/UI_Icons/Achievements/Misc/jackpot.png', + "meteors" = 'icons/UI_Icons/Achievements/Misc/meteors.png', + "timewaste" = 'icons/UI_Icons/Achievements/Misc/timewaste.png', + "upgrade" = 'icons/UI_Icons/Achievements/Misc/upgrade.png', + "clownking" = 'icons/UI_Icons/Achievements/Misc/clownking.png', + "clownthanks" = 'icons/UI_Icons/Achievements/Misc/clownthanks.png', + "rule8" = 'icons/UI_Icons/Achievements/Misc/rule8.png', + "snail" = 'icons/UI_Icons/Achievements/Misc/snail.png', + "mining" = 'icons/UI_Icons/Achievements/Skills/mining.png', + ) +*/ +/datum/asset/spritesheet/simple/pills + name ="pills" + assets = list( + "pill1" = 'icons/UI_Icons/Pills/pill1.png', + "pill2" = 'icons/UI_Icons/Pills/pill2.png', + "pill3" = 'icons/UI_Icons/Pills/pill3.png', + "pill4" = 'icons/UI_Icons/Pills/pill4.png', + "pill5" = 'icons/UI_Icons/Pills/pill5.png', + "pill6" = 'icons/UI_Icons/Pills/pill6.png', + "pill7" = 'icons/UI_Icons/Pills/pill7.png', + "pill8" = 'icons/UI_Icons/Pills/pill8.png', + "pill9" = 'icons/UI_Icons/Pills/pill9.png', + "pill10" = 'icons/UI_Icons/Pills/pill10.png', + "pill11" = 'icons/UI_Icons/Pills/pill11.png', + "pill12" = 'icons/UI_Icons/Pills/pill12.png', + "pill13" = 'icons/UI_Icons/Pills/pill13.png', + "pill14" = 'icons/UI_Icons/Pills/pill14.png', + "pill15" = 'icons/UI_Icons/Pills/pill15.png', + "pill16" = 'icons/UI_Icons/Pills/pill16.png', + "pill17" = 'icons/UI_Icons/Pills/pill17.png', + "pill18" = 'icons/UI_Icons/Pills/pill18.png', + "pill19" = 'icons/UI_Icons/Pills/pill19.png', + "pill20" = 'icons/UI_Icons/Pills/pill20.png', + "pill21" = 'icons/UI_Icons/Pills/pill21.png', + "pill22" = 'icons/UI_Icons/Pills/pill22.png', + ) + //this exists purely to avoid meta by pre-loading all language icons. /datum/asset/language/register() for(var/path in typesof(/datum/language)) @@ -640,7 +312,7 @@ GLOBAL_LIST_EMPTY(asset_datums) /datum/asset/spritesheet/pipes name = "pipes" -/datum/asset/spritesheet/pipes/register() +/datum/asset/spritesheet/pipes/register() //we do not have chempipes for (var/each in list('icons/obj/atmospherics/pipes/pipe_item.dmi', 'icons/obj/atmospherics/pipes/disposal.dmi', 'icons/obj/atmospherics/pipes/transit_tube.dmi')) InsertAll("", each, GLOB.alldirs) ..() @@ -650,7 +322,7 @@ GLOBAL_LIST_EMPTY(asset_datums) name = "design" /datum/asset/spritesheet/research_designs/register() - for (var/path in subtypesof(/datum/design)) + for(var/path in subtypesof(/datum/design)) var/datum/design/D = path var/icon_file diff --git a/code/modules/asset_cache/validate_assets.html b/code/modules/asset_cache/validate_assets.html new file mode 100644 index 0000000000..205a7f4dad --- /dev/null +++ b/code/modules/asset_cache/validate_assets.html @@ -0,0 +1,28 @@ + + + + + + + + + diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index d575a53afa..39487efc54 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -36,29 +36,11 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null return - // asset_cache + var/asset_cache_job if(href_list["asset_cache_confirm_arrival"]) - var/job = text2num(href_list["asset_cache_confirm_arrival"]) - //because we skip the limiter, we have to make sure this is a valid arrival and not somebody tricking us - // into letting append to a list without limit. - if (job && job <= last_asset_job && !(job in completed_asset_jobs)) - completed_asset_jobs += job + asset_cache_job = asset_cache_confirm_arrival(href_list["asset_cache_confirm_arrival"]) + if (!asset_cache_job) return - else if (job in completed_asset_jobs) //byond bug ID:2256651 - to_chat(src, "An error has been detected in how your client is receiving resources. Attempting to correct.... (If you keep seeing these messages you might want to close byond and reconnect)") - src << browse("...", "window=asset_cache_browser") - // Keypress passthrough - if(href_list["__keydown"]) - var/keycode = browser_keycode_to_byond(href_list["__keydown"]) - if(keycode) - keyDown(keycode) - return - if(href_list["__keyup"]) - var/keycode = browser_keycode_to_byond(href_list["__keyup"]) - if(keycode) - keyUp(keycode) - return - var/mtl = CONFIG_GET(number/minute_topic_limit) if (!holder && mtl) @@ -75,7 +57,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( topiclimiter[ADMINSWARNED_AT] = minute msg += " Administrators have been informed." log_game("[key_name(src)] Has hit the per-minute topic limit of [mtl] topic calls in a given game minute") - message_admins("[ADMIN_LOOKUPFLW(src)] [ADMIN_KICK(usr)] Has hit the per-minute topic limit of [mtl] topic calls in a given game minute") + message_admins("[ADMIN_LOOKUPFLW(usr)] [ADMIN_KICK(usr)] Has hit the per-minute topic limit of [mtl] topic calls in a given game minute") to_chat(src, "[msg]") return @@ -96,6 +78,27 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( if(!(href_list["_src_"] == "chat" && href_list["proc"] == "ping" && LAZYLEN(href_list) == 2)) log_href("[src] (usr:[usr]\[[COORD(usr)]\]) : [hsrc ? "[hsrc] " : ""][href]") + //byond bug ID:2256651 + if (asset_cache_job && (asset_cache_job in completed_asset_jobs)) + to_chat(src, "An error has been detected in how your client is receiving resources. Attempting to correct.... (If you keep seeing these messages you might want to close byond and reconnect)") + src << browse("...", "window=asset_cache_browser") + return + if (href_list["asset_cache_preload_data"]) + asset_cache_preload_data(href_list["asset_cache_preload_data"]) + return + + // Keypress passthrough + if(href_list["__keydown"]) + var/keycode = browser_keycode_to_byond(href_list["__keydown"]) + if(keycode) + keyDown(keycode) + return + if(href_list["__keyup"]) + var/keycode = browser_keycode_to_byond(href_list["__keyup"]) + if(keycode) + keyUp(keycode) + return + // Admin PM if(href_list["priv_msg"]) cmd_admin_pm(href_list["priv_msg"],null) @@ -858,8 +861,14 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) 'html/browser/playeroptions.css', ) spawn (10) //removing this spawn causes all clients to not get verbs. + + //load info on what assets the client has + src << browse('code/modules/asset_cache/validate_assets.html', "window=asset_cache_browser") + //Precache the client with all other assets slowly, so as to not block other browse() calls getFilesSlow(src, SSassets.preload, register_asset = FALSE) + addtimer(CALLBACK(GLOBAL_PROC, /proc/getFilesSlow, src, SSassets.preload, FALSE), 5 SECONDS) + #if (PRELOAD_RSC == 0) for (var/name in GLOB.vox_sounds) var/file = GLOB.vox_sounds[name] diff --git a/code/modules/client/verbs/minimap.dm b/code/modules/client/verbs/minimap.dm index 3d213dc210..3cdb1d57a8 100644 --- a/code/modules/client/verbs/minimap.dm +++ b/code/modules/client/verbs/minimap.dm @@ -6,5 +6,7 @@ if(!CONFIG_GET(flag/minimaps_enabled)) to_chat(usr, "Minimap generation is not enabled in the server's configuration.") return - + if(!SSminimaps.station_minimap) + to_chat(usr, "Minimap generation is in progress, please wait!") + return SSminimaps.station_minimap.show(src) diff --git a/code/modules/mapping/minimaps.dm b/code/modules/mapping/minimaps.dm index 29a9fca9b7..8410a53753 100644 --- a/code/modules/mapping/minimaps.dm +++ b/code/modules/mapping/minimaps.dm @@ -1,21 +1,27 @@ /datum/minimap - var/name + var/name = "minimap" + var/icon/overlay_icon + // The map icons 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 - var/static/next_id = 0 -/datum/minimap/New(z, x1 = 1, y1 = 1, x2 = world.maxx, y2 = world.maxy, name) + var/z_level + var/id = "" + +/datum/minimap/New(z, x1 = 1, y1 = 1, x2 = world.maxx, y2 = world.maxy, name = "minimap") + if(!z) + CRASH("ERROR: new minimap requested without z level") //CRASH to halt the operatio + src.name = name - id = ++next_id z_level = z + id = "[md5("[z_level]" + src.name + REF(src))]" //use it's own md5 as a special identifier var/crop_x1 = x2 var/crop_x2 = x1 @@ -25,10 +31,11 @@ // 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) + 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))) + for(var/turf/T in block(locate(x1, y1, z_level), locate(x2, y2, z_level))) var/area/A = T.loc var/img_x = T.x - x1 + 1 // arrays start at 1 var/img_y = T.y - y1 + 1 @@ -37,21 +44,26 @@ 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 + 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/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) meta_icon.Crop(crop_x1, crop_y1, crop_x2, crop_y2) minx = crop_x1 @@ -60,14 +72,17 @@ maxy = crop_y2 overlay_icon = new(map_icon) overlay_icon.Scale(16, 16) - -/datum/minimap/proc/send(mob/user) + //we're done baking, now we ship it. 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/proc/send(mob/user) + if(!id) + CRASH("ERROR: send called, but the minimap id is null/missing. ID: [id]") + send_asset_list(user, list("minimap-[id].png" = map_icon, "minimap-[id]-meta.png" = meta_icon)) /datum/minimap_group - var/list/minimaps + var/list/minimaps = list() var/static/next_id = 0 var/id var/name @@ -75,46 +90,61 @@ /datum/minimap_group/New(list/maps, name) id = ++next_id src.name = name - minimaps = maps || list() + minimaps = maps /datum/minimap_group/proc/show(mob/user) if(!length(minimaps)) to_chat(user, "ERROR: Attempted to access an empty datum/minimap_group. This should probably not happen.") return + var/list/datas = list() var/list/info = list() - var/datum/minimap/first_map = minimaps[1] - for(var/i in 1 to length(minimaps)) + + for(var/i in 1 to length(minimaps))// OLD: for(var/i in 1 to length(minimaps)) var/datum/minimap/M = minimaps[i] M.send(user) - info += "
" + info += {" +
+
+ + +
+
+
+ "} datas += json_encode(M.color_area_names); - info = info.Join() - var/html = {" - - - - - - - -[name] - -[info] -"} + + + "} - user << browse(html, "window=minimap_[id];size=768x[round(768 / first_map.map_icon.Width() * first_map.map_icon.Height() + 50)]") + var/datum/browser/popup = new(user, "minimap_[id]", name, 500, 700) + popup.add_head_content(headerJS) //set the head + popup.set_content(info) + var/datum/minimap/MICO = minimaps[1] + popup.set_title_image(MICO.overlay_icon) + popup.open(FALSE) diff --git a/code/modules/oracle_ui/assets.dm b/code/modules/oracle_ui/assets.dm index 5d26d80a81..348860b48d 100644 --- a/code/modules/oracle_ui/assets.dm +++ b/code/modules/oracle_ui/assets.dm @@ -1,8 +1,11 @@ +/datum/asset/group/oui_theme_nano + children = list( + /datum/asset/simple/jquery, + /datum/asset/simple/oui_theme_nano + ) + /datum/asset/simple/oui_theme_nano assets = list( - // JavaScript - "sui-nano-common.js" = 'html/oracle_ui/themes/nano/sui-nano-common.js', - "sui-nano-jquery.min.js" = 'html/oracle_ui/themes/nano/sui-nano-jquery.min.js', - // Stylesheets - "sui-nano-common.css" = 'html/oracle_ui/themes/nano/sui-nano-common.css', + "sui-nano-common.js" = 'html/oracle_ui/themes/nano/sui-nano-common.js', + "sui-nano-common.css" = 'html/oracle_ui/themes/nano/sui-nano-common.css', ) diff --git a/html/admin/view_variables.css b/html/admin/view_variables.css index 83b3a37f3c..34c1a211eb 100644 --- a/html/admin/view_variables.css +++ b/html/admin/view_variables.css @@ -30,6 +30,6 @@ table.matrixbrak td.lbrak { border-right: none; } table.matrixbrak td.rbrak { - border-right: solid 0.5exrgb(95, 61, 61)k; + border-right: solid 0.5ex black; border-left: none; } diff --git a/tgstation.dme b/tgstation.dme index 93958e5d96..1ee9cd16f8 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1610,6 +1610,11 @@ #include "code\modules\assembly\signaler.dm" #include "code\modules\assembly\timer.dm" #include "code\modules\assembly\voice.dm" +#include "code\modules\asset_cache\asset_cache.dm" +#include "code\modules\asset_cache\asset_cache_client.dm" +#include "code\modules\asset_cache\asset_cache_item.dm" +#include "code\modules\asset_cache\asset_list.dm" +#include "code\modules\asset_cache\asset_list_items.dm" #include "code\modules\atmospherics\multiz.dm" #include "code\modules\atmospherics\environmental\LINDA_fire.dm" #include "code\modules\atmospherics\environmental\LINDA_system.dm" @@ -1752,7 +1757,6 @@ #include "code\modules\cargo\packs\service.dm" #include "code\modules\cargo\packs\vending.dm" #include "code\modules\chatter\chatter.dm" -#include "code\modules\client\asset_cache.dm" #include "code\modules\client\client_colour.dm" #include "code\modules\client\client_defines.dm" #include "code\modules\client\client_procs.dm" From 8122c7b35dbca84b79ae88a5477948d0d5f7f07c Mon Sep 17 00:00:00 2001 From: Letter N <24603524+LetterN@users.noreply.github.com> Date: Tue, 2 Jun 2020 11:54:03 +0800 Subject: [PATCH 2/8] Update code/modules/mapping/minimaps.dm Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> --- code/modules/mapping/minimaps.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/mapping/minimaps.dm b/code/modules/mapping/minimaps.dm index 8410a53753..7a62e9ab44 100644 --- a/code/modules/mapping/minimaps.dm +++ b/code/modules/mapping/minimaps.dm @@ -90,7 +90,8 @@ /datum/minimap_group/New(list/maps, name) id = ++next_id src.name = name - minimaps = maps + if(maps) + minimaps = maps /datum/minimap_group/proc/show(mob/user) if(!length(minimaps)) From c9b1bbdb2cf2ab2c89019dd6c27d5d4abf8d8fee Mon Sep 17 00:00:00 2001 From: bunny232 Date: Mon, 15 Jun 2020 21:00:07 -0400 Subject: [PATCH 3/8] Update vent_clog.dm --- code/modules/events/vent_clog.dm | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 48fb688d70..d5dae4a6af 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -171,36 +171,6 @@ foam.start() CHECK_TICK -/datum/round_event/vent_clog/male/announce() - priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejaculation of contents may occur.", "Atmospherics alert") - -/datum/round_event/vent_clog/male/start() - for(var/obj/machinery/atmospherics/components/unary/vent in vents) - if(vent && vent.loc && !vent.welded) - var/datum/reagents/R = new/datum/reagents(1000) - R.my_atom = vent - R.add_reagent(/datum/reagent/consumable/semen, reagentsAmount) - - var/datum/effect_system/foam_spread/foam = new - foam.set_up(200, get_turf(vent), R) - foam.start() - CHECK_TICK - -/datum/round_event/vent_clog/female/announce() - priority_announce("The scrubbers network is experiencing a backpressure squirt. Some ejection of contents may occur.", "Atmospherics alert") - -/datum/round_event/vent_clog/female/start() - for(var/obj/machinery/atmospherics/components/unary/vent in vents) - if(vent && vent.loc && !vent.welded) - var/datum/reagents/R = new/datum/reagents(1000) - R.my_atom = vent - R.add_reagent(/datum/reagent/consumable/femcum, reagentsAmount) - - var/datum/effect_system/foam_spread/foam = new - foam.set_up(200, get_turf(vent), R) - foam.start() - CHECK_TICK - /datum/round_event/vent_clog/plasma_decon/announce() priority_announce("We are deploying an experimental plasma decontamination system. Please stand away from the vents and do not breathe the smoke that comes out.", "Central Command Update") From 8a1290b5622ad984119b6820e23ef73859ec4d61 Mon Sep 17 00:00:00 2001 From: bunny232 Date: Mon, 15 Jun 2020 21:04:06 -0400 Subject: [PATCH 4/8] Update vent_clog.dm --- code/modules/events/vent_clog.dm | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index d5dae4a6af..dc672cec45 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -140,22 +140,6 @@ typepath = /datum/round_event/vent_clog/plasma_decon max_occurrences = 0 -/datum/round_event_control/vent_clog/female - name = "Clogged Vents; Girlcum" - typepath = /datum/round_event/vent_clog/female - max_occurrences = 0 - -/datum/round_event/vent_clog/female - reagentsAmount = 100 - -/datum/round_event_control/vent_clog/male - name = "Clogged Vents: Semen" - typepath = /datum/round_event/vent_clog/male - max_occurrences = 0 - -/datum/round_event/vent_clog/male - reagentsAmount = 100 - /datum/round_event/vent_clog/beer/announce() priority_announce("The scrubbers network is experiencing an unexpected surge of pressurized beer. Some ejection of contents may occur.", "Atmospherics alert") From 162549a3c267cbd559838039f70914728e588092 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 19 Jun 2020 20:34:51 +0200 Subject: [PATCH 5/8] Fixing stuff. --- .../research/designs/electronics_designs.dm | 6 ++++++ icons/obj/module.dmi | Bin 20909 -> 21871 bytes icons/turf/shuttle.dmi | Bin 45994 -> 57395 bytes 3 files changed, 6 insertions(+) diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm index 806e2ef75c..9bccda5067 100644 --- a/code/modules/research/designs/electronics_designs.dm +++ b/code/modules/research/designs/electronics_designs.dm @@ -194,7 +194,13 @@ /obj/item/circuitboard/computer/shuttle/flight_control name = "Shuttle Flight Control (Computer Board)" build_path = /obj/machinery/computer/custom_shuttle + id = "shuttle_control" + category = list ("Shuttle Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE /obj/item/circuitboard/computer/shuttle/docker name = "Shuttle Navigation Computer (Computer Board)" + id = "shuttle_docker" build_path = /obj/machinery/computer/camera_advanced/shuttle_docker/custom + category = list ("Shuttle Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE diff --git a/icons/obj/module.dmi b/icons/obj/module.dmi index bdf2d5801bbddd17438b06c78f3e2afebcb9d781..3bf0c55576f09552dec7754fa22c6e74b9f3232c 100644 GIT binary patch literal 21871 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\+8*z4!Ll!iFljzMiZ$ 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

7w(|-9uxc;?2 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 literal 45994 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

!c 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 Y@@wY(c#I*H;}CFZs_LkGQnCvBFNt<5X#fBK From 43acf79dd33f37a16d34766c4419bceb0ed7de17 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 19 Jun 2020 21:55:01 +0200 Subject: [PATCH 6/8] oh wow --- .../comp_board_designs_all_misc.dm | 18 ++++++++- .../research/designs/electronics_designs.dm | 38 ------------------- .../machine_designs_all_misc.dm | 24 ++++++++++++ 3 files changed, 41 insertions(+), 39 deletions(-) diff --git a/code/modules/research/designs/comp_board_designs/comp_board_designs_all_misc.dm b/code/modules/research/designs/comp_board_designs/comp_board_designs_all_misc.dm index 27560f29a1..99caa5b480 100644 --- a/code/modules/research/designs/comp_board_designs/comp_board_designs_all_misc.dm +++ b/code/modules/research/designs/comp_board_designs/comp_board_designs_all_misc.dm @@ -43,4 +43,20 @@ id = "libraryconsole" build_path = /obj/item/circuitboard/computer/libraryconsole category = list("Computer Boards") - departmental_flags = DEPARTMENTAL_FLAG_ALL \ No newline at end of file + departmental_flags = DEPARTMENTAL_FLAG_ALL + +/datum/design/board/flight_control + name = "Computer Design (Shuttle Flight Controls)" + desc = "Allows for the construction of circuit boards used to build a console that enables shuttle flight" + id = "shuttle_control" + build_path = /obj/item/circuitboard/computer/shuttle/flight_control + category = list("Computer Boards", "Shuttle Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/board/shuttle_docker + name = "Computer Design (Private Navigation Computer)" + desc = "Allows for the construction of circuit boards used to build a console that enables the targetting of custom flight locations" + id = "shuttle_docker" + build_path = /obj/item/circuitboard/computer/shuttle/docker + category = list("Computer Boards", "Shuttle Machinery") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm index 9bccda5067..7e5bedaf0e 100644 --- a/code/modules/research/designs/electronics_designs.dm +++ b/code/modules/research/designs/electronics_designs.dm @@ -166,41 +166,3 @@ desc = "This disk will add the ability to remotely feed slimes potions via the Xenobiology console, and lift the restrictions on the number of slimes that can be stored inside the Xenobiology console. This includes the contents of the basic slime upgrade disk." id = "xenobio_slimeadv" build_path = /obj/item/disk/xenobio_console_upgrade/slimeadv - -/datum/design/board/shuttle/engine/plasma - name = "Machine Design (Plasma Thruster Board)" - desc = "The circuit board for a plasma thruster." - id = "engine_plasma" - build_path = /obj/item/circuitboard/machine/shuttle/engine/plasma - category = list ("Shuttle Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/shuttle/engine/void - name = "Machine Design (Void Thruster Board)" - desc = "The circuit board for a void thruster." - id = "engine_void" - build_path = /obj/item/circuitboard/machine/shuttle/engine/void - category = list ("Shuttle Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/board/shuttle/engine/heater - name = "Machine Design (Engine Heater Board)" - desc = "The circuit board for an engine heater." - id = "engine_heater" - build_path = /obj/item/circuitboard/machine/shuttle/heater - category = list ("Shuttle Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/obj/item/circuitboard/computer/shuttle/flight_control - name = "Shuttle Flight Control (Computer Board)" - build_path = /obj/machinery/computer/custom_shuttle - id = "shuttle_control" - category = list ("Shuttle Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE - -/obj/item/circuitboard/computer/shuttle/docker - name = "Shuttle Navigation Computer (Computer Board)" - id = "shuttle_docker" - build_path = /obj/machinery/computer/camera_advanced/shuttle_docker/custom - category = list ("Shuttle Machinery") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE diff --git a/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm b/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm index d12099f7ff..804556cb04 100644 --- a/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm +++ b/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm @@ -130,3 +130,27 @@ departmental_flags = DEPARTMENTAL_FLAG_SECURITY build_path = /obj/item/circuitboard/machine/hypnochair category = list("Misc. Machinery") + +/datum/design/board/engine_plasma + name = "Machine Design (Plasma Thruster Board)" + desc = "The circuit board for a plasma thruster." + id = "engine_plasma" + build_path = /obj/item/circuitboard/machine/shuttle/engine/plasma + category = list ("Shuttle Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/board/engine_void + name = "Machine Design (Void Thruster Board)" + desc = "The circuit board for a void thruster." + id = "engine_void" + build_path = /obj/item/circuitboard/machine/shuttle/engine/void + category = list ("Shuttle Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/board/engine_heater + name = "Machine Design (Engine Heater Board)" + desc = "The circuit board for an engine heater." + id = "engine_heater" + build_path = /obj/item/circuitboard/machine/shuttle/heater + category = list ("Shuttle Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE From ca7f452a7fa144c69a39960dc4115a2acf69c2e9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 19 Jun 2020 16:07:26 -0500 Subject: [PATCH 7/8] Automatic changelog generation for PR #12542 [ci skip] --- html/changelogs/AutoChangeLog-pr-12542.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-12542.yml diff --git a/html/changelogs/AutoChangeLog-pr-12542.yml b/html/changelogs/AutoChangeLog-pr-12542.yml new file mode 100644 index 0000000000..0f9f9105d3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-12542.yml @@ -0,0 +1,4 @@ +author: "bunny232" +delete-after: True +changes: + - rscdel: "Removed unsavory things from the vent clog event" From d805ba3d9b6b731f5c86d03dcdefea4f121ef5f7 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 19 Jun 2020 16:09:13 -0500 Subject: [PATCH 8/8] Automatic changelog generation for PR #12414 [ci skip] --- html/changelogs/AutoChangeLog-pr-12414.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-12414.yml diff --git a/html/changelogs/AutoChangeLog-pr-12414.yml b/html/changelogs/AutoChangeLog-pr-12414.yml new file mode 100644 index 0000000000..de95e898f8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-12414.yml @@ -0,0 +1,6 @@ +author: "LetterN" +delete-after: True +changes: + - rscadd: "Asset cache from tg" + - tweak: "Made the map viewer not look bad" + - bugfix: "Admin matrix right-bracket"