diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm deleted file mode 100644 index 0638a635ff..0000000000 --- a/code/modules/asset_cache/asset_list_items.dm +++ /dev/null @@ -1,551 +0,0 @@ -//DEFINITIONS FOR ASSET DATUMS START HERE. -/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/generic - assets = list( - "search.js" = 'html/search.js', - "panels.css" = 'html/panels.css', - "loading.gif" = 'html/images/loading.gif', - "ntlogo.png" = 'html/images/ntlogo.png', - "sglogo.png" = 'html/images/sglogo.png', - "talisman.png" = 'html/images/talisman.png', - "paper_bg.png" = 'html/images/paper_bg.png', - "no_image32.png" = 'html/images/no_image32.png', - ) - -/* CHOMPedit Start - Better Changelogs -/datum/asset/simple/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', - "map-pencil.png" = 'html/map-pencil.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', - "changelog.css" = 'html/changelog.css', - "changelog.js" = 'html/changelog.js', - "changelog.html" = 'html/changelog.html' - ) -*/ // CHOMPedit end - -// /datum/asset/group/goonchat -// children = list( -// /datum/asset/simple/jquery, -// /datum/asset/simple/goonchat, -// /datum/asset/spritesheet/goonchat, -// /datum/asset/simple/fontawesome -// ) - -// /datum/asset/simple/goonchat -// 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', -// ) - -// /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/permissions -// assets = list( -// "padlock.png" = 'html/padlock.png' -// ) - -// /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', -// ) - -// /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/create_spritesheets() - for(var/each in list('icons/obj/pipe-item.dmi', 'icons/obj/pipes/disposal.dmi')) - InsertAll("", each, global.alldirs) - -//VOREStation Add -/datum/asset/spritesheet/vore - name = "vore" - -/datum/asset/spritesheet/vore/create_spritesheets() - var/icon/downscaled = icon('modular_chomp/icons/mob/screen_full_vore_ch.dmi') //CHOMPedit: preserving save data - downscaled.Scale(240, 240) - InsertAll("", downscaled) - -/datum/asset/spritesheet/vore_fixed //This should be getting loaded in the TGUI vore panel but the game refuses to do so, for some reason. It only loads the vore spritesheet. //CHOMPedit - name = "fixedvore" //CHOMPedit - -/datum/asset/spritesheet/vore_fixed/create_spritesheets() //CHOMPedi start: preserving save data - var/icon/downscaledVF = icon('icons/mob/screen_full_vore.dmi') - downscaledVF.Scale(240, 240) - InsertAll("", downscaledVF) //CHOMpedit end - -//VOREStation Add End - -// // 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/create_spritesheets() - populate_vending_products() - for(var/atom/item as anything in GLOB.vending_products) - if(!ispath(item, /atom)) - continue - - var/icon_file = initial(item.icon) - var/icon_state = initial(item.icon_state) - - // I really don't like the fact that I have to do this, but what the hell else *can* I do to make all of these - // random special items work? - if(ispath(item, /obj/item/reagent_containers/food/drinks/glass2) && !ispath(item, /obj/item/reagent_containers/food/drinks/glass2/fitnessflask)) - var/obj/item/reagent_containers/food/drinks/glass2/G = item - icon_state = initial(G.base_icon) - if(ispath(item, /obj/item/reagent_containers/hypospray/autoinjector)) - icon_state += "0" - //CHOMPadd start - if(ispath(item, /obj/item/melee/shock_maul)) - icon_state += "0" - //CHOMPadd end - - 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) - -// this is cursed but necessary or else vending product icons can be missing -// basically, if there's any vending machines that aren't already mapped in, our register() will not know -// that they exist, and therefore can't generate the entries in the spritesheet for them -// and since assets are unique and can't be reloaded later, we have to make sure that GLOB.vending_products -// is populated with every single type of vending machine -// As this is only done at runtime, we have to create all the vending machines in existence and force them -// to register their products when this asset initializes. -/datum/asset/spritesheet/vending/proc/populate_vending_products() - SSatoms.map_loader_begin() - for(var/path in subtypesof(/obj/machinery/vending)) - var/obj/machinery/vending/x = new path(null) - // force an inventory build; with map_loader_begin active, init isn't called - x.build_inventory() - qdel(x) - SSatoms.map_loader_stop() - -// /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") -// ..() - -//Pill sprites for UIs -/datum/asset/spritesheet/chem_master - name = "chem_master" - -/datum/asset/spritesheet/chem_master/create_spritesheets() - for(var/i = 1 to 24) - Insert("pill[i]", 'icons/obj/chemical.dmi', "pill[i]") - - for(var/i = 1 to 4) - Insert("bottle-[i]", 'icons/obj/chemical.dmi', "bottle-[i]") - - for(var/i = 1 to 4) // CHOMPedit - Insert("patch[i].png", 'icons/obj/chemical.dmi', "patch[i]") // CHOMPedit - -// Robot UI sprites -/datum/asset/spritesheet/robot_icons - name = "robot_icons" - -/datum/asset/spritesheet/robot_icons/create_spritesheets() - for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) - if(!S.name || !S.sprite_icon_state) // snowflake out those customs... they suck - continue - var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) - var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) - var/icon/I_W = icon(S.sprite_icon, S.sprite_icon_state, WEST) - var/icon/I_E = icon(S.sprite_icon, S.sprite_icon_state, EAST) - if(S.has_eye_sprites) - var/icon/I_NE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH) - if(I_NE) - I_N.Blend(I_NE, ICON_OVERLAY) - if(S.has_eye_sprites) - var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) - if(I_SE) - I_S.Blend(I_SE, ICON_OVERLAY) - if(S.has_eye_sprites) - var/icon/I_WE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST) - if(I_WE) - I_W.Blend(I_WE, ICON_OVERLAY) - if(S.has_eye_sprites) - var/icon/I_EE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST) - if(I_EE) - I_E.Blend(I_EE, ICON_OVERLAY) - var/imgid = sanitize_css_class_name("[S.type]") - I_N.Scale(120, 120) - I_S.Scale(120, 120) - I_W.Scale(120, 120) - I_E.Scale(120, 120) - Insert(imgid + "N", I_N) - Insert(imgid + "S", I_S) - Insert(imgid + "W", I_W) - Insert(imgid + "E", I_E) - - -//Cloning pod sprites for UIs -/datum/asset/simple/cloning - assets = list( - "pod_idle.gif" = 'icons/UI_Icons/synthprinter.gif', - "pod_cloning.gif" = 'icons/UI_Icons/synthprinter_working.gif', - ) - -// VOREStation Add -/datum/asset/simple/cloning/resleeving - assets = list( - "sleeve_empty.gif" = 'icons/UI_Icons/sleeve_empty.gif', - "sleeve_occupied.gif" = 'icons/UI_Icons/sleeve_occupied.gif', - "synthprinter.gif" = 'icons/UI_Icons/synthprinter.gif', - "synthprinter_working.gif" = 'icons/UI_Icons/synthprinter_working.gif', - ) - -/datum/asset/spritesheet/sheetmaterials - name = "sheetmaterials" - -/datum/asset/spritesheet/sheetmaterials/create_spritesheets() - InsertAll("", 'icons/obj/stacks.dmi') - -// Nanomaps -/datum/asset/simple/nanomaps - // It REALLY doesnt matter too much if these arent up to date - // They are relatively big - assets = list( - // CHOMP Edit: Restored for chomp station. Removed Tether. - "southern_cross_nanomap_z1.png" = 'icons/_nanomaps/southern_cross_nanomap_z1.png', - "southern_cross_nanomap_z2.png" = 'icons/_nanomaps/southern_cross_nanomap_z2.png', - "southern_cross_nanomap_z3.png" = 'icons/_nanomaps/southern_cross_nanomap_z3.png', - "southern_cross_nanomap_z4.png" = 'icons/_nanomaps/southern_cross_nanomap_z4.png', - "southern_cross_nanomap_z5.png" = 'icons/_nanomaps/southern_cross_nanomap_z5.png', - "southern_cross_nanomap_z6.png" = 'icons/_nanomaps/southern_cross_nanomap_z6.png', - "southern_cross_nanomap_z7.png" = 'icons/_nanomaps/southern_cross_nanomap_z7.png', - "southern_cross_nanomap_z8.png" = 'icons/_nanomaps/southern_cross_nanomap_z8.png', - "southern_cross_nanomap_z9.png" = 'icons/_nanomaps/southern_cross_nanomap_z9.png', - "southern_cross_nanomap_z10.png" = 'icons/_nanomaps/southern_cross_nanomap_z10.png', - "southern_cross_nanomap_z11.png" = 'icons/_nanomaps/southern_cross_nanomap_z11.png', - - "soluna_nexus_nanomap_z1.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z1.png', - "soluna_nexus_nanomap_z2.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z2.png', - "soluna_nexus_nanomap_z3.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z3.png', - "soluna_nexus_nanomap_z4.png" = 'icons/_nanomaps/southern_cross_nanomap_z5.png', - "soluna_nexus_nanomap_z5.png" = 'icons/_nanomaps/southern_cross_nanomap_z6.png', - "soluna_nexus_nanomap_z6.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z6.png', - "soluna_nexus_nanomap_z7.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z7.png', - "soluna_nexus_nanomap_z8.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z8.png', - "soluna_nexus_nanomap_z9.png" = 'icons/_nanomaps/southern_cross_nanomap_z10.png', - - "relicbase_nanomap_z1.png" = 'icons/_nanomaps/relicbase_nanomap_z1.png', - "relicbase_nanomap_z2.png" = 'icons/_nanomaps/relicbase_nanomap_z2.png', - "relicbase_nanomap_z3.png" = 'icons/_nanomaps/relicbase_nanomap_z3.png', - "relicbase_nanomap_z4.png" = 'icons/_nanomaps/relicbase_nanomap_z4.png', - "relicbase_nanomap_z5.png" = 'icons/_nanomaps/relicbase_nanomap_z5.png', - "relicbase_nanomap_z6.png" = 'icons/_nanomaps/relicbase_nanomap_z6.png', - "relicbase_nanomap_z7.png" = 'icons/_nanomaps/relicbase_nanomap_z7.png', - "relicbase_nanomap_z8.png" = 'icons/_nanomaps/relicbase_nanomap_z8.png', - "relicbase_nanomap_z9.png" = 'icons/_nanomaps/relicbase_nanomap_z9.png', - "relicbase_nanomap_z10.png" = 'icons/_nanomaps/relicbase_nanomap_z10.png', - "relicbase_nanomap_z11.png" = 'icons/_nanomaps/relicbase_nanomap_z11.png', - "relicbase_nanomap_z12.png" = 'icons/_nanomaps/relicbase_nanomap_z12.png', - "relicbase_nanomap_z13.png" = 'icons/_nanomaps/relicbase_nanomap_z13.png', - // CHOMP Edit End - ) diff --git a/code/modules/asset_cache/assets/browser.dm b/code/modules/asset_cache/assets/browser.dm new file mode 100644 index 0000000000..8d5b4da198 --- /dev/null +++ b/code/modules/asset_cache/assets/browser.dm @@ -0,0 +1,43 @@ +/datum/asset/simple/generic + assets = list( + "search.js" = 'html/search.js', + "panels.css" = 'html/panels.css', + "loading.gif" = 'html/images/loading.gif', + "ntlogo.png" = 'html/images/ntlogo.png', + "sglogo.png" = 'html/images/sglogo.png', + "talisman.png" = 'html/images/talisman.png', + "paper_bg.png" = 'html/images/paper_bg.png', + "no_image32.png" = 'html/images/no_image32.png', + ) + +/datum/asset/simple/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', + "map-pencil.png" = 'html/map-pencil.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', + "changelog.css" = 'html/changelog.css', + "changelog.js" = 'html/changelog.js', + "changelog.html" = 'html/changelog.html' + ) + +/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', + ) diff --git a/code/modules/asset_cache/assets/cloning.dm b/code/modules/asset_cache/assets/cloning.dm new file mode 100644 index 0000000000..152a5041c5 --- /dev/null +++ b/code/modules/asset_cache/assets/cloning.dm @@ -0,0 +1,14 @@ +//Cloning pod sprites for UIs +/datum/asset/simple/cloning + assets = list( + "pod_idle.gif" = 'icons/UI_Icons/synthprinter.gif', + "pod_cloning.gif" = 'icons/UI_Icons/synthprinter_working.gif', + ) + +/datum/asset/simple/cloning/resleeving + assets = list( + "sleeve_empty.gif" = 'icons/UI_Icons/sleeve_empty.gif', + "sleeve_occupied.gif" = 'icons/UI_Icons/sleeve_occupied.gif', + "synthprinter.gif" = 'icons/UI_Icons/synthprinter.gif', + "synthprinter_working.gif" = 'icons/UI_Icons/synthprinter_working.gif', + ) diff --git a/code/modules/asset_cache/assets/ntos.dm b/code/modules/asset_cache/assets/ntos.dm new file mode 100644 index 0000000000..92fbc163d6 --- /dev/null +++ b/code/modules/asset_cache/assets/ntos.dm @@ -0,0 +1,30 @@ +/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' + ) diff --git a/code/modules/asset_cache/assets/chat.dm b/code/modules/asset_cache/assets/spritesheets/chat.dm similarity index 100% rename from code/modules/asset_cache/assets/chat.dm rename to code/modules/asset_cache/assets/spritesheets/chat.dm diff --git a/code/modules/asset_cache/assets/spritesheets/chem_master.dm b/code/modules/asset_cache/assets/spritesheets/chem_master.dm new file mode 100644 index 0000000000..ead5d6d34f --- /dev/null +++ b/code/modules/asset_cache/assets/spritesheets/chem_master.dm @@ -0,0 +1,14 @@ +//Pill sprites for UIs +/datum/asset/spritesheet/chem_master + name = "chem_master" + +/datum/asset/spritesheet/chem_master/create_spritesheets() + for(var/i = 1 to 24) + Insert("pill[i]", 'icons/obj/chemical.dmi', "pill[i]") + + for(var/i = 1 to 4) + Insert("bottle-[i]", 'icons/obj/chemical.dmi', "bottle-[i]") + // CHOMPAdd Start + for(var/i = 1 to 4) + Insert("patch[i].png", 'icons/obj/chemical.dmi', "patch[i]") + // CHOMPAdd End diff --git a/code/modules/asset_cache/assets/kitchen_recipes.dm b/code/modules/asset_cache/assets/spritesheets/kitchen_recipes.dm similarity index 100% rename from code/modules/asset_cache/assets/kitchen_recipes.dm rename to code/modules/asset_cache/assets/spritesheets/kitchen_recipes.dm diff --git a/code/modules/asset_cache/assets/spritesheets/nanomaps.dm b/code/modules/asset_cache/assets/spritesheets/nanomaps.dm new file mode 100644 index 0000000000..ea8f0b7d9b --- /dev/null +++ b/code/modules/asset_cache/assets/spritesheets/nanomaps.dm @@ -0,0 +1,42 @@ +/datum/asset/simple/nanomaps + // It REALLY doesnt matter too much if these arent up to date + // They are relatively big + assets = list( + // CHOMP Edit: Restored for chomp station. Removed Tether. + "southern_cross_nanomap_z1.png" = 'icons/_nanomaps/southern_cross_nanomap_z1.png', + "southern_cross_nanomap_z2.png" = 'icons/_nanomaps/southern_cross_nanomap_z2.png', + "southern_cross_nanomap_z3.png" = 'icons/_nanomaps/southern_cross_nanomap_z3.png', + "southern_cross_nanomap_z4.png" = 'icons/_nanomaps/southern_cross_nanomap_z4.png', + "southern_cross_nanomap_z5.png" = 'icons/_nanomaps/southern_cross_nanomap_z5.png', + "southern_cross_nanomap_z6.png" = 'icons/_nanomaps/southern_cross_nanomap_z6.png', + "southern_cross_nanomap_z7.png" = 'icons/_nanomaps/southern_cross_nanomap_z7.png', + "southern_cross_nanomap_z8.png" = 'icons/_nanomaps/southern_cross_nanomap_z8.png', + "southern_cross_nanomap_z9.png" = 'icons/_nanomaps/southern_cross_nanomap_z9.png', + "southern_cross_nanomap_z10.png" = 'icons/_nanomaps/southern_cross_nanomap_z10.png', + "southern_cross_nanomap_z11.png" = 'icons/_nanomaps/southern_cross_nanomap_z11.png', + + "soluna_nexus_nanomap_z1.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z1.png', + "soluna_nexus_nanomap_z2.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z2.png', + "soluna_nexus_nanomap_z3.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z3.png', + "soluna_nexus_nanomap_z4.png" = 'icons/_nanomaps/southern_cross_nanomap_z5.png', + "soluna_nexus_nanomap_z5.png" = 'icons/_nanomaps/southern_cross_nanomap_z6.png', + "soluna_nexus_nanomap_z6.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z6.png', + "soluna_nexus_nanomap_z7.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z7.png', + "soluna_nexus_nanomap_z8.png" = 'icons/_nanomaps/soluna_nexus_nanomap_z8.png', + "soluna_nexus_nanomap_z9.png" = 'icons/_nanomaps/southern_cross_nanomap_z10.png', + + "relicbase_nanomap_z1.png" = 'icons/_nanomaps/relicbase_nanomap_z1.png', + "relicbase_nanomap_z2.png" = 'icons/_nanomaps/relicbase_nanomap_z2.png', + "relicbase_nanomap_z3.png" = 'icons/_nanomaps/relicbase_nanomap_z3.png', + "relicbase_nanomap_z4.png" = 'icons/_nanomaps/relicbase_nanomap_z4.png', + "relicbase_nanomap_z5.png" = 'icons/_nanomaps/relicbase_nanomap_z5.png', + "relicbase_nanomap_z6.png" = 'icons/_nanomaps/relicbase_nanomap_z6.png', + "relicbase_nanomap_z7.png" = 'icons/_nanomaps/relicbase_nanomap_z7.png', + "relicbase_nanomap_z8.png" = 'icons/_nanomaps/relicbase_nanomap_z8.png', + "relicbase_nanomap_z9.png" = 'icons/_nanomaps/relicbase_nanomap_z9.png', + "relicbase_nanomap_z10.png" = 'icons/_nanomaps/relicbase_nanomap_z10.png', + "relicbase_nanomap_z11.png" = 'icons/_nanomaps/relicbase_nanomap_z11.png', + "relicbase_nanomap_z12.png" = 'icons/_nanomaps/relicbase_nanomap_z12.png', + "relicbase_nanomap_z13.png" = 'icons/_nanomaps/relicbase_nanomap_z13.png', + // CHOMP Edit End + ) diff --git a/code/modules/asset_cache/assets/spritesheets/pipes.dm b/code/modules/asset_cache/assets/spritesheets/pipes.dm new file mode 100644 index 0000000000..b0f5935a95 --- /dev/null +++ b/code/modules/asset_cache/assets/spritesheets/pipes.dm @@ -0,0 +1,6 @@ +/datum/asset/spritesheet/pipes + name = "pipes" + +/datum/asset/spritesheet/pipes/create_spritesheets() + for(var/each in list('icons/obj/pipe-item.dmi', 'icons/obj/pipes/disposal.dmi')) + InsertAll("", each, global.alldirs) diff --git a/code/modules/asset_cache/assets/spritesheets/robot_icons.dm b/code/modules/asset_cache/assets/spritesheets/robot_icons.dm new file mode 100644 index 0000000000..7935c5af7e --- /dev/null +++ b/code/modules/asset_cache/assets/spritesheets/robot_icons.dm @@ -0,0 +1,36 @@ +/datum/asset/spritesheet/robot_icons + name = "robot_icons" + +/datum/asset/spritesheet/robot_icons/create_spritesheets() + for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) + if(!S.name || !S.sprite_icon_state) // snowflake out those customs... they suck + continue + var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) + var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) + var/icon/I_W = icon(S.sprite_icon, S.sprite_icon_state, WEST) + var/icon/I_E = icon(S.sprite_icon, S.sprite_icon_state, EAST) + if(S.has_eye_sprites) + var/icon/I_NE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH) + if(I_NE) + I_N.Blend(I_NE, ICON_OVERLAY) + if(S.has_eye_sprites) + var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) + if(I_SE) + I_S.Blend(I_SE, ICON_OVERLAY) + if(S.has_eye_sprites) + var/icon/I_WE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST) + if(I_WE) + I_W.Blend(I_WE, ICON_OVERLAY) + if(S.has_eye_sprites) + var/icon/I_EE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST) + if(I_EE) + I_E.Blend(I_EE, ICON_OVERLAY) + var/imgid = sanitize_css_class_name("[S.type]") + I_N.Scale(120, 120) + I_S.Scale(120, 120) + I_W.Scale(120, 120) + I_E.Scale(120, 120) + Insert(imgid + "N", I_N) + Insert(imgid + "S", I_S) + Insert(imgid + "W", I_W) + Insert(imgid + "E", I_E) diff --git a/code/modules/asset_cache/assets/spritesheets/stacks.dm b/code/modules/asset_cache/assets/spritesheets/stacks.dm new file mode 100644 index 0000000000..2dd3093663 --- /dev/null +++ b/code/modules/asset_cache/assets/spritesheets/stacks.dm @@ -0,0 +1,5 @@ +/datum/asset/spritesheet/sheetmaterials + name = "sheetmaterials" + +/datum/asset/spritesheet/sheetmaterials/create_spritesheets() + InsertAll("", 'icons/obj/stacks.dmi') diff --git a/code/modules/asset_cache/assets/spritesheets/vending.dm b/code/modules/asset_cache/assets/spritesheets/vending.dm new file mode 100644 index 0000000000..76671d5a52 --- /dev/null +++ b/code/modules/asset_cache/assets/spritesheets/vending.dm @@ -0,0 +1,61 @@ +/datum/asset/spritesheet/vending + name = "vending" + +/datum/asset/spritesheet/vending/create_spritesheets() + populate_vending_products() + for(var/atom/item as anything in GLOB.vending_products) + if(!ispath(item, /atom)) + continue + + var/icon_file = initial(item.icon) + var/icon_state = initial(item.icon_state) + + // I really don't like the fact that I have to do this, but what the hell else *can* I do to make all of these + // random special items work? + if(ispath(item, /obj/item/reagent_containers/food/drinks/glass2) && !ispath(item, /obj/item/reagent_containers/food/drinks/glass2/fitnessflask)) + var/obj/item/reagent_containers/food/drinks/glass2/G = item + icon_state = initial(G.base_icon) + if(ispath(item, /obj/item/reagent_containers/hypospray/autoinjector)) + icon_state += "0" + //CHOMPadd start + if(ispath(item, /obj/item/melee/shock_maul)) + icon_state += "0" + //CHOMPadd end + + 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) + +// this is cursed but necessary or else vending product icons can be missing +// basically, if there's any vending machines that aren't already mapped in, our register() will not know +// that they exist, and therefore can't generate the entries in the spritesheet for them +// and since assets are unique and can't be reloaded later, we have to make sure that GLOB.vending_products +// is populated with every single type of vending machine +// As this is only done at runtime, we have to create all the vending machines in existence and force them +// to register their products when this asset initializes. +/datum/asset/spritesheet/vending/proc/populate_vending_products() + SSatoms.map_loader_begin() + for(var/path in subtypesof(/obj/machinery/vending)) + var/obj/machinery/vending/x = new path(null) + // force an inventory build; with map_loader_begin active, init isn't called + x.build_inventory() + qdel(x) + SSatoms.map_loader_stop() diff --git a/code/modules/asset_cache/assets/spritesheets/vore.dm b/code/modules/asset_cache/assets/spritesheets/vore.dm new file mode 100644 index 0000000000..5b2c643bea --- /dev/null +++ b/code/modules/asset_cache/assets/spritesheets/vore.dm @@ -0,0 +1,15 @@ +/datum/asset/spritesheet/vore + name = "vore" + +/datum/asset/spritesheet/vore/create_spritesheets() + var/icon/downscaled = icon('modular_chomp/icons/mob/screen_full_vore_ch.dmi') //CHOMPedit: preserving save data + downscaled.Scale(240, 240) + InsertAll("", downscaled) + +/datum/asset/spritesheet/vore_fixed //This should be getting loaded in the TGUI vore panel but the game refuses to do so, for some reason. It only loads the vore spritesheet. //CHOMPedit + name = "fixedvore" //CHOMPedit + +/datum/asset/spritesheet/vore_fixed/create_spritesheets() //CHOMPedi start: preserving save data + var/icon/downscaledVF = icon('icons/mob/screen_full_vore.dmi') + downscaledVF.Scale(240, 240) + InsertAll("", downscaledVF) //CHOMpedit end diff --git a/vorestation.dme b/vorestation.dme index 41fc8d5a98..43d76820bb 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2108,16 +2108,25 @@ #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\asset_cache\assets\chat.dm" +#include "code\modules\asset_cache\assets\browser.dm" #include "code\modules\asset_cache\assets\circuits.dm" +#include "code\modules\asset_cache\assets\cloning.dm" #include "code\modules\asset_cache\assets\fontawesome.dm" #include "code\modules\asset_cache\assets\icon_ref_map.dm" #include "code\modules\asset_cache\assets\jquery.dm" -#include "code\modules\asset_cache\assets\kitchen_recipes.dm" +#include "code\modules\asset_cache\assets\ntos.dm" #include "code\modules\asset_cache\assets\preferences.dm" #include "code\modules\asset_cache\assets\tgfont.dm" #include "code\modules\asset_cache\assets\tgui.dm" +#include "code\modules\asset_cache\assets\spritesheets\chat.dm" +#include "code\modules\asset_cache\assets\spritesheets\chem_master.dm" +#include "code\modules\asset_cache\assets\spritesheets\kitchen_recipes.dm" +#include "code\modules\asset_cache\assets\spritesheets\nanomaps.dm" +#include "code\modules\asset_cache\assets\spritesheets\pipes.dm" +#include "code\modules\asset_cache\assets\spritesheets\robot_icons.dm" +#include "code\modules\asset_cache\assets\spritesheets\stacks.dm" +#include "code\modules\asset_cache\assets\spritesheets\vending.dm" +#include "code\modules\asset_cache\assets\spritesheets\vore.dm" #include "code\modules\asset_cache\transports\asset_transport.dm" #include "code\modules\asset_cache\transports\webroot_transport.dm" #include "code\modules\awaymissions\bluespaceartillery.dm"