mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 09:42:29 +00:00
* [Ready] CDN browser assets! (#52681) Rewrites the asset_cache system to handle sending assets to a CDN via a webroot. see https://github.com/MrStonedOne/tgstation/blob/asset-cdn/code/modules/asset_cache/readme.md Fixed a lot of bugs with assets, removed some dead code. Changes: Moved asset cache code to transport datums, the currently loaded one is located at SSassets.transport, asset cache calls made before the config is loaded use the simple browse_rsc transport. Added subsystem call for when the config loads or reloads. Added a webroot CDN asset transport. assets are saved to a file in a format based on the file's hash (currently md5). Assets that don't use get_asset_url or get_url_mappings (such as browser assets referred to by static html files like changelog.html or static css files) can be saved to browse_rsc even when in cdn asset mode by setting legacy to TRUE on the datum returned by register_assets Added a system for saving assets on a cdn in a hash based namespace (folder), assets within the same namespace will always be able to refer to each other by relative names. (used to allow cdn'ing font awesome without having to make something that regenerates it's css files.). The simple/namespaced asset cache datum helper will handle generating a namespace composed of the combined md5 of everything in the same datum, as well as registering them properly. Moved external resource from a snowflake loaded file to a config entry, added it to resources.txt To ensure the system breaks in local testing in any situation that wouldn't work in cdn mode, the simple transport will mutate the filenames of non-legacy and non-namespaced assets and return this with get_asset_url. Simple transport's passive send of all roundstart assets to all clients is now a config that defaults to off. this is to break race conditions during local testings from devs accidentally relying on this instead of using send() properly. cl refactor: Interface assets (js/css/images) can now be managed using an external webserver instead of byond's one at a time file transfer queue. admin: Adds admin verb toggle-cdn that allows admins to disable the external webserver asset transport and revert to the old system. Useful if the webserver backing this goes down (thanks cloudflare). config: New config file, resources.txt, (must be loaded by an $include statement from the main config) server: The external_rsc_urls.txt config has been moved to the main config system. /cl Porting notes: Interface webpages must refer to their assets (css/js/image/etc) by a generated url, or the asset must register itself as a legacy asset. The system is designed to break in localtest (on simple/legacy mode) in most situations that would break in cdn mode. Requires latest tgui. The webserver must set the proper CORS headers for font files or font awesome (and other fonts) won't load. /tg/'s webserver config: https://gist.github.com/MrStonedOne/523388b2f161af832292d98a8aad0eae * [Ready] CDN browser assets! Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
443 lines
17 KiB
Plaintext
443 lines
17 KiB
Plaintext
//DEFINITIONS FOR ASSET DATUMS START HERE.
|
|
|
|
/datum/asset/simple/tgui
|
|
assets = list(
|
|
"tgui.bundle.js" = 'tgui/packages/tgui/public/tgui.bundle.js',
|
|
"tgui.bundle.css" = 'tgui/packages/tgui/public/tgui.bundle.css',
|
|
)
|
|
|
|
/datum/asset/simple/headers
|
|
assets = list(
|
|
"alarm_green.gif" = 'icons/program_icons/alarm_green.gif',
|
|
"alarm_red.gif" = 'icons/program_icons/alarm_red.gif',
|
|
"batt_5.gif" = 'icons/program_icons/batt_5.gif',
|
|
"batt_20.gif" = 'icons/program_icons/batt_20.gif',
|
|
"batt_40.gif" = 'icons/program_icons/batt_40.gif',
|
|
"batt_60.gif" = 'icons/program_icons/batt_60.gif',
|
|
"batt_80.gif" = 'icons/program_icons/batt_80.gif',
|
|
"batt_100.gif" = 'icons/program_icons/batt_100.gif',
|
|
"charging.gif" = 'icons/program_icons/charging.gif',
|
|
"downloader_finished.gif" = 'icons/program_icons/downloader_finished.gif',
|
|
"downloader_running.gif" = 'icons/program_icons/downloader_running.gif',
|
|
"ntnrc_idle.gif" = 'icons/program_icons/ntnrc_idle.gif',
|
|
"ntnrc_new.gif" = 'icons/program_icons/ntnrc_new.gif',
|
|
"power_norm.gif" = 'icons/program_icons/power_norm.gif',
|
|
"power_warn.gif" = 'icons/program_icons/power_warn.gif',
|
|
"sig_high.gif" = 'icons/program_icons/sig_high.gif',
|
|
"sig_low.gif" = 'icons/program_icons/sig_low.gif',
|
|
"sig_lan.gif" = 'icons/program_icons/sig_lan.gif',
|
|
"sig_none.gif" = 'icons/program_icons/sig_none.gif',
|
|
"smmon_0.gif" = 'icons/program_icons/smmon_0.gif',
|
|
"smmon_1.gif" = 'icons/program_icons/smmon_1.gif',
|
|
"smmon_2.gif" = 'icons/program_icons/smmon_2.gif',
|
|
"smmon_3.gif" = 'icons/program_icons/smmon_3.gif',
|
|
"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'
|
|
)
|
|
|
|
/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(
|
|
"atmos" = 'icons/pda_icons/pda_atmos.png',
|
|
"back" = 'icons/pda_icons/pda_back.png',
|
|
"bell" = 'icons/pda_icons/pda_bell.png',
|
|
"blank" = 'icons/pda_icons/pda_blank.png',
|
|
"boom" = 'icons/pda_icons/pda_boom.png',
|
|
"bucket" = 'icons/pda_icons/pda_bucket.png',
|
|
"medbot" = 'icons/pda_icons/pda_medbot.png',
|
|
"floorbot" = 'icons/pda_icons/pda_floorbot.png',
|
|
"cleanbot" = 'icons/pda_icons/pda_cleanbot.png',
|
|
"crate" = 'icons/pda_icons/pda_crate.png',
|
|
"cuffs" = 'icons/pda_icons/pda_cuffs.png',
|
|
"eject" = 'icons/pda_icons/pda_eject.png',
|
|
"flashlight" = 'icons/pda_icons/pda_flashlight.png',
|
|
"honk" = 'icons/pda_icons/pda_honk.png',
|
|
"mail" = 'icons/pda_icons/pda_mail.png',
|
|
"medical" = 'icons/pda_icons/pda_medical.png',
|
|
"menu" = 'icons/pda_icons/pda_menu.png',
|
|
"mule" = 'icons/pda_icons/pda_mule.png',
|
|
"notes" = 'icons/pda_icons/pda_notes.png',
|
|
"power" = 'icons/pda_icons/pda_power.png',
|
|
"rdoor" = 'icons/pda_icons/pda_rdoor.png',
|
|
"reagent" = 'icons/pda_icons/pda_reagent.png',
|
|
"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'
|
|
)
|
|
|
|
/datum/asset/spritesheet/simple/paper
|
|
name = "paper"
|
|
assets = list(
|
|
"stamp-clown" = 'icons/stamp_icons/large_stamp-clown.png',
|
|
"stamp-deny" = 'icons/stamp_icons/large_stamp-deny.png',
|
|
"stamp-ok" = 'icons/stamp_icons/large_stamp-ok.png',
|
|
"stamp-hop" = 'icons/stamp_icons/large_stamp-hop.png',
|
|
"stamp-cmo" = 'icons/stamp_icons/large_stamp-cmo.png',
|
|
"stamp-ce" = 'icons/stamp_icons/large_stamp-ce.png',
|
|
"stamp-hos" = 'icons/stamp_icons/large_stamp-hos.png',
|
|
"stamp-rd" = 'icons/stamp_icons/large_stamp-rd.png',
|
|
"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',
|
|
"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
|
|
assets = list(
|
|
"jquery-ui.custom-core-widgit-mouse-sortable-min.js" = 'html/IRV/jquery-ui.custom-core-widgit-mouse-sortable-min.js',
|
|
)
|
|
|
|
/datum/asset/group/irv
|
|
children = list(
|
|
/datum/asset/simple/jquery,
|
|
/datum/asset/simple/irv
|
|
)
|
|
|
|
/datum/asset/simple/namespaced/changelog
|
|
assets = list(
|
|
"88x31.png" = 'html/88x31.png',
|
|
"bug-minus.png" = 'html/bug-minus.png',
|
|
"cross-circle.png" = 'html/cross-circle.png',
|
|
"hard-hat-exclamation.png" = 'html/hard-hat-exclamation.png',
|
|
"image-minus.png" = 'html/image-minus.png',
|
|
"image-plus.png" = 'html/image-plus.png',
|
|
"music-minus.png" = 'html/music-minus.png',
|
|
"music-plus.png" = 'html/music-plus.png',
|
|
"tick-circle.png" = 'html/tick-circle.png',
|
|
"wrench-screwdriver.png" = 'html/wrench-screwdriver.png',
|
|
"spell-check.png" = 'html/spell-check.png',
|
|
"burn-exclamation.png" = 'html/burn-exclamation.png',
|
|
"chevron.png" = 'html/chevron.png',
|
|
"chevron-expand.png" = 'html/chevron-expand.png',
|
|
"scales.png" = 'html/scales.png',
|
|
"coding.png" = 'html/coding.png',
|
|
"ban.png" = 'html/ban.png',
|
|
"chrome-wrench.png" = 'html/chrome-wrench.png',
|
|
"changelog.css" = 'html/changelog.css'
|
|
)
|
|
parents = list("changelog.html" = 'html/changelog.html')
|
|
|
|
|
|
/datum/asset/group/goonchat
|
|
children = list(
|
|
/datum/asset/simple/jquery,
|
|
/datum/asset/simple/namespaced/goonchat,
|
|
/datum/asset/spritesheet/goonchat,
|
|
/datum/asset/simple/namespaced/fontawesome
|
|
)
|
|
|
|
/datum/asset/simple/jquery
|
|
legacy = TRUE
|
|
assets = list(
|
|
"jquery.min.js" = 'code/modules/goonchat/browserassets/js/jquery.min.js',
|
|
)
|
|
|
|
/datum/asset/simple/namespaced/goonchat
|
|
legacy = TRUE
|
|
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_white.css" = 'code/modules/goonchat/browserassets/css/browserOutput_white.css',
|
|
)
|
|
parents = list(
|
|
//this list intentionally left empty (parent namespaced assets can't be referred to by name, only by generated url, and goonchat isn't smart enough for that. yet)
|
|
)
|
|
|
|
/datum/asset/simple/namespaced/fontawesome
|
|
legacy = TRUE
|
|
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',
|
|
"fa-solid-900.eot" = 'html/font-awesome/webfonts/fa-solid-900.eot',
|
|
"fa-solid-900.woff" = 'html/font-awesome/webfonts/fa-solid-900.woff',
|
|
"v4shim.css" = 'html/font-awesome/css/v4-shims.min.css'
|
|
)
|
|
parents = list("font-awesome.css" = 'html/font-awesome/css/all.min.css')
|
|
|
|
/datum/asset/spritesheet/goonchat
|
|
name = "chat"
|
|
|
|
/datum/asset/spritesheet/goonchat/register()
|
|
InsertAll("emoji", 'icons/emoji.dmi')
|
|
|
|
// pre-loading all lanugage icons also helps to avoid meta
|
|
InsertAll("language", 'icons/misc/language.dmi')
|
|
// catch languages which are pulling icons from another file
|
|
for(var/path in typesof(/datum/language))
|
|
var/datum/language/L = path
|
|
var/icon = initial(L.icon)
|
|
if (icon != 'icons/misc/language.dmi')
|
|
var/icon_state = initial(L.icon_state)
|
|
Insert("language-[icon_state]", icon, icon_state=icon_state)
|
|
|
|
..()
|
|
|
|
/datum/asset/simple/lobby
|
|
assets = list(
|
|
"playeroptions.css" = 'html/browser/playeroptions.css'
|
|
)
|
|
|
|
/datum/asset/simple/namespaced/common
|
|
assets = list("padlock.png" = 'html/padlock.png')
|
|
parents = list("common.css" = 'html/browser/common.css')
|
|
|
|
/datum/asset/simple/permissions
|
|
assets = list(
|
|
"search.js" = 'html/admin/search.js',
|
|
"panels.css" = 'html/admin/panels.css'
|
|
)
|
|
|
|
/datum/asset/group/permissions
|
|
children = list(
|
|
/datum/asset/simple/permissions,
|
|
/datum/asset/simple/namespaced/common
|
|
)
|
|
|
|
/datum/asset/simple/notes
|
|
assets = list(
|
|
"high_button.png" = 'html/high_button.png',
|
|
"medium_button.png" = 'html/medium_button.png',
|
|
"minor_button.png" = 'html/minor_button.png',
|
|
"none_button.png" = 'html/none_button.png',
|
|
)
|
|
|
|
/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',
|
|
"assistant" = 'icons/UI_Icons/Achievements/Mafia/assistant.png',
|
|
"changeling" = 'icons/UI_Icons/Achievements/Mafia/changeling.png',
|
|
"chaplain" = 'icons/UI_Icons/Achievements/Mafia/chaplain.png',
|
|
"clown" = 'icons/UI_Icons/Achievements/Mafia/clown.png',
|
|
"detective" = 'icons/UI_Icons/Achievements/Mafia/detective.png',
|
|
"fugitive" = 'icons/UI_Icons/Achievements/Mafia/fugitive.png',
|
|
"hated" = 'icons/UI_Icons/Achievements/Mafia/hated.png',
|
|
"hop" = 'icons/UI_Icons/Achievements/Mafia/hop.png',
|
|
"lawyer" = 'icons/UI_Icons/Achievements/Mafia/lawyer.png',
|
|
"md" = 'icons/UI_Icons/Achievements/Mafia/md.png',
|
|
"nightmare" = 'icons/UI_Icons/Achievements/Mafia/nightmare.png',
|
|
"obsessed" = 'icons/UI_Icons/Achievements/Mafia/obsessed.png',
|
|
"psychologist" = 'icons/UI_Icons/Achievements/Mafia/psychologist.png',
|
|
"thoughtfeeder" = 'icons/UI_Icons/Achievements/Mafia/thoughtfeeder.png',
|
|
"traitor" = 'icons/UI_Icons/Achievements/Mafia/traitor.png',
|
|
"basemafia" ='icons/UI_Icons/Achievements/basemafia.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))
|
|
set waitfor = FALSE
|
|
var/datum/language/L = new path ()
|
|
L.get_icon()
|
|
|
|
/datum/asset/spritesheet/pipes
|
|
name = "pipes"
|
|
|
|
/datum/asset/spritesheet/pipes/register()
|
|
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', 'icons/obj/plumbing/fluid_ducts.dmi'))
|
|
InsertAll("", each, GLOB.alldirs)
|
|
..()
|
|
|
|
// Representative icons for each research design
|
|
/datum/asset/spritesheet/research_designs
|
|
name = "design"
|
|
|
|
/datum/asset/spritesheet/research_designs/register()
|
|
for (var/path in subtypesof(/datum/design))
|
|
var/datum/design/D = path
|
|
|
|
var/icon_file
|
|
var/icon_state
|
|
var/icon/I
|
|
|
|
if(initial(D.research_icon) && initial(D.research_icon_state)) //If the design has an icon replacement skip the rest
|
|
icon_file = initial(D.research_icon)
|
|
icon_state = initial(D.research_icon_state)
|
|
if(!(icon_state in icon_states(icon_file)))
|
|
warning("design [D] with icon '[icon_file]' missing state '[icon_state]'")
|
|
continue
|
|
I = icon(icon_file, icon_state, SOUTH)
|
|
|
|
else
|
|
// construct the icon and slap it into the resource cache
|
|
var/atom/item = initial(D.build_path)
|
|
if (!ispath(item, /atom))
|
|
// biogenerator outputs to beakers by default
|
|
if (initial(D.build_type) & BIOGENERATOR)
|
|
item = /obj/item/reagent_containers/glass/beaker/large
|
|
else
|
|
continue // shouldn't happen, but just in case
|
|
|
|
// circuit boards become their resulting machines or computers
|
|
if (ispath(item, /obj/item/circuitboard))
|
|
var/obj/item/circuitboard/C = item
|
|
var/machine = initial(C.build_path)
|
|
if (machine)
|
|
item = machine
|
|
|
|
icon_file = initial(item.icon)
|
|
icon_state = initial(item.icon_state)
|
|
|
|
if(!(icon_state in icon_states(icon_file)))
|
|
warning("design [D] with icon '[icon_file]' missing state '[icon_state]'")
|
|
continue
|
|
I = icon(icon_file, icon_state, SOUTH)
|
|
|
|
// computers (and snowflakes) get their screen and keyboard sprites
|
|
if (ispath(item, /obj/machinery/computer) || ispath(item, /obj/machinery/power/solar_control))
|
|
var/obj/machinery/computer/C = item
|
|
var/screen = initial(C.icon_screen)
|
|
var/keyboard = initial(C.icon_keyboard)
|
|
var/all_states = icon_states(icon_file)
|
|
if (screen && (screen in all_states))
|
|
I.Blend(icon(icon_file, screen, SOUTH), ICON_OVERLAY)
|
|
if (keyboard && (keyboard in all_states))
|
|
I.Blend(icon(icon_file, keyboard, SOUTH), ICON_OVERLAY)
|
|
|
|
Insert(initial(D.id), I)
|
|
return ..()
|
|
|
|
/datum/asset/spritesheet/vending
|
|
name = "vending"
|
|
|
|
/datum/asset/spritesheet/vending/register()
|
|
for (var/k in GLOB.vending_products)
|
|
var/atom/item = k
|
|
if (!ispath(item, /atom))
|
|
continue
|
|
|
|
var/icon_file = initial(item.icon)
|
|
var/icon_state = initial(item.icon_state)
|
|
var/icon/I
|
|
|
|
var/icon_states_list = icon_states(icon_file)
|
|
if(icon_state in icon_states_list)
|
|
I = icon(icon_file, icon_state, SOUTH)
|
|
var/c = initial(item.color)
|
|
if (!isnull(c) && c != "#FFFFFF")
|
|
I.Blend(c, ICON_MULTIPLY)
|
|
else
|
|
var/icon_states_string
|
|
for (var/an_icon_state in icon_states_list)
|
|
if (!icon_states_string)
|
|
icon_states_string = "[json_encode(an_icon_state)](\ref[an_icon_state])"
|
|
else
|
|
icon_states_string += ", [json_encode(an_icon_state)](\ref[an_icon_state])"
|
|
stack_trace("[item] does not have a valid icon state, icon=[icon_file], icon_state=[json_encode(icon_state)](\ref[icon_state]), icon_states=[icon_states_string]")
|
|
I = icon('icons/turf/floors.dmi', "", SOUTH)
|
|
|
|
var/imgid = replacetext(replacetext("[item]", "/obj/item/", ""), "/", "-")
|
|
|
|
Insert(imgid, I)
|
|
return ..()
|
|
|
|
/datum/asset/simple/genetics
|
|
assets = list(
|
|
"dna_discovered.gif" = 'html/dna_discovered.gif',
|
|
"dna_undiscovered.gif" = 'html/dna_undiscovered.gif',
|
|
"dna_extra.gif" = 'html/dna_extra.gif'
|
|
)
|
|
|
|
/datum/asset/simple/orbit
|
|
assets = list(
|
|
"ghost.png" = 'html/ghost.png'
|
|
)
|
|
|
|
/datum/asset/simple/vv
|
|
assets = list(
|
|
"view_variables.css" = 'html/admin/view_variables.css'
|
|
)
|
|
|
|
/datum/asset/spritesheet/sheetmaterials
|
|
name = "sheetmaterials"
|
|
|
|
/datum/asset/spritesheet/sheetmaterials/register()
|
|
InsertAll("", 'icons/obj/stack_objects.dmi')
|
|
|
|
// Special case to handle Bluespace Crystals
|
|
Insert("polycrystal", 'icons/obj/telescience.dmi', "polycrystal")
|
|
..()
|
|
|
|
/datum/asset/spritesheet/mafia
|
|
name = "mafia"
|
|
|
|
/datum/asset/spritesheet/mafia/register()
|
|
InsertAll("", 'icons/obj/mafia.dmi')
|
|
..()
|