From 6618c9d694d2ee116cfabb3221384e645375fe3b Mon Sep 17 00:00:00 2001 From: Thunder12345 Date: Tue, 12 Aug 2025 20:18:24 +0100 Subject: [PATCH] Misc File Purge: The Return (#92438) ## About The Pull Request Purged several files inthe theme of misc.dm and broken the contents out into better organised files. Incidentally done some minor cleanup by removing an unused global list referring to a string file that no-longer exists, and removing a useless proc that replicated the behaviour of file2list(). ## Why It's Good For The Game See #60358 and all its successors ## Changelog :cl: code: Reduced the number of files named misc.dm or similar by 14%. /:cl: # Conflicts: # code/_globalvars/lists/flavor_misc.dm --- code/__DEFINES/antagonists.dm | 6 + code/__DEFINES/clothing.dm | 26 ++ code/__HELPERS/names.dm | 8 + code/_globalvars/lists/clothing.dm | 11 + code/_globalvars/lists/color.dm | 32 ++ code/_globalvars/lists/communication.dm | 13 + code/_globalvars/lists/department.dm | 7 + code/_globalvars/lists/disposals.dm | 52 ++++ code/_globalvars/lists/flavor_misc.dm | 284 ------------------ code/_globalvars/lists/ghost.dm | 59 ++++ code/_globalvars/lists/icons.dm | 2 + code/_globalvars/lists/names.dm | 77 +++-- code/_globalvars/lists/sound.dm | 20 ++ code/_globalvars/lists/status_display.dm | 20 ++ code/_globalvars/lists/strings.dm | 16 + code/datums/status_effects/buffs.dm | 4 +- .../effects/decals/{misc.dm => chemspray.dm} | 7 - .../objects/effects/decals/cleanable/ants.dm | 90 ++++++ .../objects/effects/decals/cleanable/fuel.dm | 113 +++++++ .../decals/cleanable/{misc.dm => mess.dm} | 205 ------------- code/game/objects/effects/decals/structure.dm | 6 + code/game/objects/effects/particles/echo.dm | 14 + code/game/objects/effects/particles/food.dm | 13 + code/game/objects/effects/particles/misc.dm | 45 --- code/game/objects/effects/particles/plant.dm | 18 ++ code/modules/movespeed/modifiers/admin.dm | 4 + code/modules/movespeed/modifiers/misc.dm | 6 - .../movespeed/modifiers/status_effects.dm | 4 + .../reagent_containers/cups/mauna_mug.dm | 117 ++++++++ .../reagent_containers/{misc.dm => rag.dm} | 118 -------- tgstation.dme | 25 +- 31 files changed, 709 insertions(+), 713 deletions(-) create mode 100644 code/_globalvars/lists/clothing.dm create mode 100644 code/_globalvars/lists/communication.dm create mode 100644 code/_globalvars/lists/department.dm create mode 100644 code/_globalvars/lists/disposals.dm delete mode 100644 code/_globalvars/lists/flavor_misc.dm create mode 100644 code/_globalvars/lists/ghost.dm create mode 100644 code/_globalvars/lists/sound.dm create mode 100644 code/_globalvars/lists/status_display.dm create mode 100644 code/_globalvars/lists/strings.dm rename code/game/objects/effects/decals/{misc.dm => chemspray.dm} (94%) create mode 100644 code/game/objects/effects/decals/cleanable/ants.dm create mode 100644 code/game/objects/effects/decals/cleanable/fuel.dm rename code/game/objects/effects/decals/cleanable/{misc.dm => mess.dm} (62%) create mode 100644 code/game/objects/effects/decals/structure.dm create mode 100644 code/game/objects/effects/particles/echo.dm create mode 100644 code/game/objects/effects/particles/food.dm delete mode 100644 code/game/objects/effects/particles/misc.dm create mode 100644 code/game/objects/effects/particles/plant.dm create mode 100644 code/modules/movespeed/modifiers/admin.dm delete mode 100644 code/modules/movespeed/modifiers/misc.dm create mode 100644 code/modules/reagents/reagent_containers/cups/mauna_mug.dm rename code/modules/reagents/reagent_containers/{misc.dm => rag.dm} (64%) diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 71b05eadd2f..70cbcb951e2 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -456,3 +456,9 @@ GLOBAL_LIST_INIT(human_invader_antagonists, list( #define BATTLE_ROYALE_CAMERA_NET "battle_royale_camera_net" #define MALF_MAX_PP 400 + +//Uplink spawn loc +#define UPLINK_PDA "PDA" +#define UPLINK_RADIO "Radio" +#define UPLINK_PEN "Pen" //like a real spy! +#define UPLINK_IMPLANT "Implant" diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index a6370218fd4..805d3eccb38 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -42,3 +42,29 @@ /// How much integrity does a shirt lose every time we bite it? #define MOTH_EATING_CLOTHING_DAMAGE 15 + +//Suit/Skirt +/// Preference: Jumpsuit +#define PREF_SUIT "Jumpsuit" +/// Preference: Jumpskirt +#define PREF_SKIRT "Jumpskirt" + +// Types of backpack +/// Backpack type: Department themed backpack +#define DBACKPACK "Department Backpack" +/// Backpack type: Department themed duffelbag +#define DDUFFELBAG "Department Duffel Bag" +/// Backpack type: Department themed satchel +#define DSATCHEL "Department Satchel" +/// Backpack type: Department themed messenger bag +#define DMESSENGER "Department Messenger Bag" +/// Backpack type: Grey backpack +#define GBACKPACK "Grey Backpack" +/// Backpack type: Grey duffelbag +#define GDUFFELBAG "Grey Duffel Bag" +/// Backpack type: Grey satchel +#define GSATCHEL "Grey Satchel" +/// Backpack type: Grey messenger bag +#define GMESSENGER "Grey Messenger Bag" +/// Backpack type: Leather satchel +#define LSATCHEL "Leather Satchel" diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 89541c1c187..55b9f23b658 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -399,3 +399,11 @@ GLOBAL_DATUM(syndicate_code_response_regex, /regex) if(breaks.Find(given_name)) return FALSE return TRUE + +/// Build a list of strings containing the numbers 1-99 as both arabic and roman numerals +/proc/generate_number_strings() + var/list/L[198] + for(var/i in 1 to 99) + L += "[i]" + L += "\Roman[i]" + return L diff --git a/code/_globalvars/lists/clothing.dm b/code/_globalvars/lists/clothing.dm new file mode 100644 index 00000000000..674a32664a7 --- /dev/null +++ b/code/_globalvars/lists/clothing.dm @@ -0,0 +1,11 @@ +GLOBAL_LIST_INIT(backpacklist, list( + DBACKPACK, + DDUFFELBAG, + DSATCHEL, + DMESSENGER, + GBACKPACK, + GDUFFELBAG, + GSATCHEL, + GMESSENGER, + LSATCHEL, +)) diff --git a/code/_globalvars/lists/color.dm b/code/_globalvars/lists/color.dm index 1a195798f46..22bb20a4cfc 100644 --- a/code/_globalvars/lists/color.dm +++ b/code/_globalvars/lists/color.dm @@ -25,3 +25,35 @@ GLOBAL_LIST_INIT(carp_colors, list( COLOR_CARP_PALE_GREEN = 7, COLOR_CARP_SILVER = 1, // The rare silver carp )) + +/// List of possible ethereal colours +GLOBAL_LIST_INIT(color_list_ethereal, list( + "Blue" = "#3399ff", + "Bright Yellow" = "#ffff99", + "Burnt Orange" = "#cc4400", + "Cyan Blue" = "#00ffff", + "Dark Blue" = "#6666ff", + "Dark Fuschia" = "#cc0066", + "Dark Green" = "#37835b", + "Dark Red" = "#9c3030", + "Dull Yellow" = "#fbdf56", + "Faint Blue" = "#b3d9ff", + "Faint Green" = "#ddff99", + "Faint Red" = "#ffb3b3", + "Green" = "#97ee63", + "Orange" = "#ffa64d", + "Pink" = "#ff99cc", + "Purple" = "#ee82ee", + "Red" = "#ff4d4d", + "Seafoam Green" = "#00fa9a", + "White" = "#f2f2f2", +)) + +/// List of possible lustrous ethereal colours +GLOBAL_LIST_INIT(color_list_lustrous, list( + "Cyan Blue" = "#00ffff", + "Sky Blue" = "#37c0ff", + "Blue" = "#3374ff", + "Dark Blue" = "#5b5beb", + "Bright Red" = "#fa2d2d", +)) diff --git a/code/_globalvars/lists/communication.dm b/code/_globalvars/lists/communication.dm new file mode 100644 index 00000000000..c13cf6c03b3 --- /dev/null +++ b/code/_globalvars/lists/communication.dm @@ -0,0 +1,13 @@ +GLOBAL_LIST_INIT(admiral_messages, list( + "Error: No comment given.", + "null", + "Do you know how expensive these stations are?", + "I was sleeping, thanks a lot.", + "It's a good day to die!", + "No.", + "Stand and fight you cowards!", + "Stop being paranoid.", + "Stop wasting my time.", + "Whatever's broken just build a new one.", + "You knew the risks coming in.", +)) diff --git a/code/_globalvars/lists/department.dm b/code/_globalvars/lists/department.dm new file mode 100644 index 00000000000..2ec4a15d418 --- /dev/null +++ b/code/_globalvars/lists/department.dm @@ -0,0 +1,7 @@ +GLOBAL_LIST_INIT(security_depts_prefs, sort_list(list( + SEC_DEPT_ENGINEERING, + SEC_DEPT_MEDICAL, + SEC_DEPT_NONE, + SEC_DEPT_SCIENCE, + SEC_DEPT_SUPPLY, +))) diff --git a/code/_globalvars/lists/disposals.dm b/code/_globalvars/lists/disposals.dm new file mode 100644 index 00000000000..f543343f3ed --- /dev/null +++ b/code/_globalvars/lists/disposals.dm @@ -0,0 +1,52 @@ +// Reference list for disposal sort junctions. Set the sortType variable on disposal sort junctions to +// the index of the sort department that you want. For example, sortType set to 2 will reroute all packages +// tagged for the Cargo Bay. + +/* List of sortType codes for mapping reference +0 Waste +1 Disposals - All unwrapped items and untagged parcels get picked up by a junction with this sortType. Usually leads to the recycler. +2 Cargo Bay +3 QM Office +4 Engineering +5 CE Office +6 Atmospherics +7 Security +8 HoS Office +9 Medbay +10 CMO Office +11 Chemistry +12 Research +13 RD Office +14 Robotics +15 HoP Office +16 Library +17 Chapel +18 Theatre +19 Bar +20 Kitchen +21 Hydroponics +22 Janitor +23 Genetics +24 Experimentor Lab +25 Ordnance +26 Dormitories +27 Virology +28 Xenobiology +29 Law Office +30 Detective's Office +*/ + +//The whole system for the sorttype var is determined based on the order of this list, +//disposals must always be 1, since anything that's untagged will automatically go to disposals, or sorttype = 1 --Superxpdude + +//If you don't want to fuck up disposals, add to this list, and don't change the order. +//If you insist on changing the order, you'll have to change every sort junction to reflect the new order. --Pete + +GLOBAL_LIST_INIT(TAGGERLOCATIONS, list("Disposals", + "Cargo Bay", "QM Office", "Engineering", "CE Office", + "Atmospherics", "Security", "HoS Office", "Medbay", + "CMO Office", "Chemistry", "Research", "RD Office", + "Robotics", "HoP Office", "Library", "Chapel", "Theatre", + "Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics", + "Experimentor Lab", "Ordnance", "Dormitories", "Virology", + "Xenobiology", "Law Office","Detective's Office")) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm deleted file mode 100644 index 13fbd4a80a0..00000000000 --- a/code/_globalvars/lists/flavor_misc.dm +++ /dev/null @@ -1,284 +0,0 @@ -GLOBAL_LIST_INIT(color_list_ethereal, list( - "Blue" = "#3399ff", - "Bright Yellow" = "#ffff99", - "Burnt Orange" = "#cc4400", - "Cyan Blue" = "#00ffff", - "Dark Blue" = "#6666ff", - "Dark Fuschia" = "#cc0066", - "Dark Green" = "#37835b", - "Dark Red" = "#9c3030", - "Dull Yellow" = "#fbdf56", - "Faint Blue" = "#b3d9ff", - "Faint Green" = "#ddff99", - "Faint Red" = "#ffb3b3", - "Green" = "#97ee63", - "Orange" = "#ffa64d", - "Pink" = "#ff99cc", - "Purple" = "#ee82ee", - "Red" = "#ff4d4d", - "Seafoam Green" = "#00fa9a", - "White" = "#f2f2f2", -)) - -GLOBAL_LIST_INIT(color_list_lustrous, list( - "Cyan Blue" = "#00ffff", - "Sky Blue" = "#37c0ff", - "Blue" = "#3374ff", - "Dark Blue" = "#5b5beb", - "Bright Red" = "#fa2d2d", -)) - -GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list( - "catghost", - "ghost_black", - "ghost_blazeit", - "ghost_blue", - "ghost_camo", - "ghost_cyan", - "ghost_dblue", - "ghost_dcyan", - "ghost_dgreen", - "ghost_dpink", - "ghost_dred", - "ghost_dyellow", - "ghost_fire", - "ghost_funkypurp", - "ghost_green", - "ghost_grey", - "ghost_mellow", - "ghost_pink", - "ghost_pinksherbert", - "ghost_purpleswirl", - "ghost_rainbow", - "ghost_red", - "ghost_yellow", - "ghost", - "ghostian", - "ghostian2", - "ghostking", - "skeleghost", -)) -//stores the ghost forms that support directional sprites - -GLOBAL_LIST_INIT(ghost_forms_with_accessories_list, list( - "ghost_black", - "ghost_blazeit", - "ghost_blue", - "ghost_camo", - "ghost_cyan", - "ghost_dblue", - "ghost_dcyan", - "ghost_dgreen", - "ghost_dpink", - "ghost_dred", - "ghost_dyellow", - "ghost_fire", - "ghost_funkypurp", - "ghost_green", - "ghost_grey", - "ghost_mellow", - "ghost_pink", - "ghost_pinksherbert", - "ghost_purpleswirl", - "ghost_rainbow", - "ghost_red", - "ghost_yellow", - "ghost", - "skeleghost", -)) -//stores the ghost forms that support hair and other such things - -GLOBAL_LIST_INIT(security_depts_prefs, sort_list(list( - SEC_DEPT_ENGINEERING, - SEC_DEPT_MEDICAL, - SEC_DEPT_NONE, - SEC_DEPT_SCIENCE, - SEC_DEPT_SUPPLY, -))) - - //Backpacks -#define DBACKPACK "Department Backpack" -#define DDUFFELBAG "Department Duffel Bag" -#define DSATCHEL "Department Satchel" -#define DMESSENGER "Department Messenger Bag" -#define GBACKPACK "Grey Backpack" -#define GDUFFELBAG "Grey Duffel Bag" -#define GSATCHEL "Grey Satchel" -#define GMESSENGER "Grey Messenger Bag" -#define LSATCHEL "Leather Satchel" -GLOBAL_LIST_INIT(backpacklist, list( - DBACKPACK, - DDUFFELBAG, - DSATCHEL, - DMESSENGER, - GBACKPACK, - GDUFFELBAG, - GSATCHEL, - GMESSENGER, - LSATCHEL, -)) - - //Suit/Skirt -#define PREF_SUIT "Jumpsuit" -#define PREF_SKIRT "Jumpskirt" - -//Uplink spawn loc -#define UPLINK_PDA "PDA" -#define UPLINK_RADIO "Radio" -#define UPLINK_PEN "Pen" //like a real spy! -#define UPLINK_IMPLANT "Implant" - - //Female Uniforms -GLOBAL_LIST_EMPTY(female_clothing_icons) - -GLOBAL_LIST_INIT(scarySounds, list( - 'sound/effects/footstep/clownstep1.ogg', - 'sound/effects/footstep/clownstep2.ogg', - 'sound/effects/glass/glassbr1.ogg', - 'sound/effects/glass/glassbr2.ogg', - 'sound/effects/glass/glassbr3.ogg', - 'sound/items/tools/welder.ogg', - 'sound/items/tools/welder2.ogg', - 'sound/machines/airlock/airlock.ogg', - 'sound/mobs/non-humanoids/hiss/hiss1.ogg', - 'sound/mobs/non-humanoids/hiss/hiss2.ogg', - 'sound/mobs/non-humanoids/hiss/hiss3.ogg', - 'sound/mobs/non-humanoids/hiss/hiss4.ogg', - 'sound/mobs/non-humanoids/hiss/hiss5.ogg', - 'sound/mobs/non-humanoids/hiss/hiss6.ogg', - 'sound/items/weapons/armbomb.ogg', - 'sound/items/weapons/taser.ogg', - 'sound/items/weapons/thudswoosh.ogg', - 'sound/items/weapons/shove.ogg', -)) - - -// Reference list for disposal sort junctions. Set the sortType variable on disposal sort junctions to -// the index of the sort department that you want. For example, sortType set to 2 will reroute all packages -// tagged for the Cargo Bay. - -/* List of sortType codes for mapping reference -0 Waste -1 Disposals - All unwrapped items and untagged parcels get picked up by a junction with this sortType. Usually leads to the recycler. -2 Cargo Bay -3 QM Office -4 Engineering -5 CE Office -6 Atmospherics -7 Security -8 HoS Office -9 Medbay -10 CMO Office -11 Chemistry -12 Research -13 RD Office -14 Robotics -15 HoP Office -16 Library -17 Chapel -18 Theatre -19 Bar -20 Kitchen -21 Hydroponics -22 Janitor -23 Genetics -24 Experimentor Lab -25 Ordnance -26 Dormitories -27 Virology -28 Xenobiology -29 Law Office -30 Detective's Office -*/ - -//The whole system for the sorttype var is determined based on the order of this list, -//disposals must always be 1, since anything that's untagged will automatically go to disposals, or sorttype = 1 --Superxpdude - -//If you don't want to fuck up disposals, add to this list, and don't change the order. -//If you insist on changing the order, you'll have to change every sort junction to reflect the new order. --Pete - -GLOBAL_LIST_INIT(TAGGERLOCATIONS, list("Disposals", - "Cargo Bay", "QM Office", "Engineering", "CE Office", - "Atmospherics", "Security", "HoS Office", "Medbay", - "CMO Office", "Chemistry", "Research", "RD Office", - "Robotics", "HoP Office", "Library", "Chapel", "Theatre", - "Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics", - "Experimentor Lab", "Ordnance", "Dormitories", "Virology", - "Xenobiology", "Law Office","Detective's Office")) - -GLOBAL_LIST_INIT(station_prefixes, world.file2list("strings/station_prefixes.txt")) - -GLOBAL_LIST_INIT(station_names, world.file2list("strings/station_names.txt")) - -GLOBAL_LIST_INIT(station_suffixes, world.file2list("strings/station_suffixes.txt")) - -GLOBAL_LIST_INIT(greek_letters, world.file2list("strings/greek_letters.txt")) - -GLOBAL_LIST_INIT(phonetic_alphabet, world.file2list("strings/phonetic_alphabet.txt")) - -GLOBAL_LIST_INIT(numbers_as_words, world.file2list("strings/numbers_as_words.txt")) - -GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/wisdoms.txt")) - -/proc/generate_number_strings() - var/list/L[198] - for(var/i in 1 to 99) - L += "[i]" - L += "\Roman[i]" - return L - -GLOBAL_LIST_INIT(station_numerals, greek_letters + phonetic_alphabet + numbers_as_words + generate_number_strings()) - -GLOBAL_LIST_INIT(admiral_messages, list( - "Error: No comment given.", - "null", - "Do you know how expensive these stations are?", - "I was sleeping, thanks a lot.", - "It's a good day to die!", - "No.", - "Stand and fight you cowards!", - "Stop being paranoid.", - "Stop wasting my time.", - "Whatever's broken just build a new one.", - "You knew the risks coming in.", -)) - -GLOBAL_LIST_INIT(junkmail_messages, world.file2list("strings/junkmail.txt")) - -// All valid inputs to status display post_status -GLOBAL_LIST_INIT(status_display_approved_pictures, list( - "blank", - "shuttle", - "default", - "biohazard", - "lockdown", - "greenalert", - "bluealert", - "violetalert", // SKYRAT EDIT ADD - Alert Levels - "orangealert", // SKYRAT EDIT ADD - Alert Levels - "amberalert", // SKYRAT EDIT ADD - Alert Levels - "redalert", - "deltaalert", - "gammaalert", // SKYRAT EDIT ADD - Alert Levels - "radiation", - "currentalert", //For automatic set of status display on current level -)) - -// Members of status_display_approved_pictures that are actually states and not alert values -GLOBAL_LIST_INIT(status_display_state_pictures, list( - "blank", - "shuttle", -)) - -GLOBAL_LIST_INIT(fishing_tips, world.file2list("strings/fishing_tips.txt")) - -/// 1000 element long list containing the 1000 most common words in the English language. -/// Indexed by word, value is the rank of the word in the list. So accessing it is fasta. -GLOBAL_LIST_INIT(most_common_words, init_common_words()) - -/proc/init_common_words() - . = list() - var/i = 1 - for(var/word in world.file2list("strings/1000_most_common.txt")) - .[word] = i - i += 1 diff --git a/code/_globalvars/lists/ghost.dm b/code/_globalvars/lists/ghost.dm new file mode 100644 index 00000000000..42db2c830ee --- /dev/null +++ b/code/_globalvars/lists/ghost.dm @@ -0,0 +1,59 @@ +/// Stores the ghost forms that support directional sprites +GLOBAL_LIST_INIT(ghost_forms_with_directions_list, list( + "catghost", + "ghost_black", + "ghost_blazeit", + "ghost_blue", + "ghost_camo", + "ghost_cyan", + "ghost_dblue", + "ghost_dcyan", + "ghost_dgreen", + "ghost_dpink", + "ghost_dred", + "ghost_dyellow", + "ghost_fire", + "ghost_funkypurp", + "ghost_green", + "ghost_grey", + "ghost_mellow", + "ghost_pink", + "ghost_pinksherbert", + "ghost_purpleswirl", + "ghost_rainbow", + "ghost_red", + "ghost_yellow", + "ghost", + "ghostian", + "ghostian2", + "ghostking", + "skeleghost", +)) + +/// Stores the ghost forms that support hair and other such things +GLOBAL_LIST_INIT(ghost_forms_with_accessories_list, list( + "ghost_black", + "ghost_blazeit", + "ghost_blue", + "ghost_camo", + "ghost_cyan", + "ghost_dblue", + "ghost_dcyan", + "ghost_dgreen", + "ghost_dpink", + "ghost_dred", + "ghost_dyellow", + "ghost_fire", + "ghost_funkypurp", + "ghost_green", + "ghost_grey", + "ghost_mellow", + "ghost_pink", + "ghost_pinksherbert", + "ghost_purpleswirl", + "ghost_rainbow", + "ghost_red", + "ghost_yellow", + "ghost", + "skeleghost", +)) diff --git a/code/_globalvars/lists/icons.dm b/code/_globalvars/lists/icons.dm index 4d0b6279945..fd51a76c5f4 100644 --- a/code/_globalvars/lists/icons.dm +++ b/code/_globalvars/lists/icons.dm @@ -4,3 +4,5 @@ GLOBAL_LIST_EMPTY(icon_dimensions) GLOBAL_LIST_EMPTY(icon_states_cache) /// Cache of the states of icon files, stored associatively with TRUE for lookup GLOBAL_LIST_EMPTY(icon_states_cache_lookup) +/// Female Uniforms +GLOBAL_LIST_EMPTY(female_clothing_icons) diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index f9f70a2c706..a564d55c420 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -1,47 +1,44 @@ GLOBAL_LIST_INIT(ai_names, world.file2list("strings/names/ai.txt")) -GLOBAL_LIST_INIT(wizard_first, world.file2list("strings/names/wizardfirst.txt")) -GLOBAL_LIST_INIT(wizard_second, world.file2list("strings/names/wizardsecond.txt")) -GLOBAL_LIST_INIT(ninja_titles, world.file2list("strings/names/ninjatitle.txt")) -GLOBAL_LIST_INIT(ninja_names, world.file2list("strings/names/ninjaname.txt")) -GLOBAL_LIST_INIT(commando_names, world.file2list("strings/names/death_commando.txt")) -GLOBAL_LIST_INIT(first_names, world.file2list("strings/names/first.txt")) -GLOBAL_LIST_INIT(first_names_male, world.file2list("strings/names/first_male.txt")) -GLOBAL_LIST_INIT(first_names_female, world.file2list("strings/names/first_female.txt")) -GLOBAL_LIST_INIT(last_names, world.file2list("strings/names/last.txt")) -GLOBAL_LIST_INIT(clown_names, world.file2list("strings/names/clown.txt")) -GLOBAL_LIST_INIT(mime_names, world.file2list("strings/names/mime.txt")) -GLOBAL_LIST_INIT(religion_names, world.file2list("strings/names/religion.txt")) -GLOBAL_LIST_INIT(carp_names, world.file2list("strings/names/carp.txt")) -GLOBAL_LIST_INIT(lizard_names_male, world.file2list("strings/names/lizard_male.txt")) -GLOBAL_LIST_INIT(lizard_names_female, world.file2list("strings/names/lizard_female.txt")) -GLOBAL_LIST_INIT(golem_names, world.file2list("strings/names/golem.txt")) -GLOBAL_LIST_INIT(moth_first, world.file2list("strings/names/moth_first.txt")) -GLOBAL_LIST_INIT(moth_last, world.file2list("strings/names/moth_last.txt")) -GLOBAL_LIST_INIT(plasmaman_names, world.file2list("strings/names/plasmaman.txt")) -GLOBAL_LIST_INIT(ethereal_names, world.file2list("strings/names/ethereal.txt")) -GLOBAL_LIST_INIT(posibrain_names, world.file2list("strings/names/posibrain.txt")) -GLOBAL_LIST_INIT(nightmare_names, world.file2list("strings/names/nightmare.txt")) -GLOBAL_LIST_INIT(megacarp_first_names, world.file2list("strings/names/megacarp1.txt")) -GLOBAL_LIST_INIT(megacarp_last_names, world.file2list("strings/names/megacarp2.txt")) -GLOBAL_LIST_INIT(cyberauth_names, world.file2list("strings/names/cyberauth.txt")) -GLOBAL_LIST_INIT(hacker_aliases, world.file2list("strings/names/hackers.txt")) -GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicate_monkey.txt")) GLOBAL_LIST_INIT(cargorilla_names, world.file2list("strings/names/cargorilla.txt")) +GLOBAL_LIST_INIT(carp_names, world.file2list("strings/names/carp.txt")) +GLOBAL_LIST_INIT(clown_names, world.file2list("strings/names/clown.txt")) +GLOBAL_LIST_INIT(commando_names, world.file2list("strings/names/death_commando.txt")) +GLOBAL_LIST_INIT(cyberauth_names, world.file2list("strings/names/cyberauth.txt")) +GLOBAL_LIST_INIT(ethereal_names, world.file2list("strings/names/ethereal.txt")) +GLOBAL_LIST_INIT(first_names_female, world.file2list("strings/names/first_female.txt")) +GLOBAL_LIST_INIT(first_names_male, world.file2list("strings/names/first_male.txt")) +GLOBAL_LIST_INIT(first_names, world.file2list("strings/names/first.txt")) +GLOBAL_LIST_INIT(golem_names, world.file2list("strings/names/golem.txt")) +GLOBAL_LIST_INIT(guardian_fantasy_surnames, world.file2list("strings/names/guardian_tarot.txt")) GLOBAL_LIST_INIT(guardian_first_names, world.file2list("strings/names/guardian_descriptions.txt")) GLOBAL_LIST_INIT(guardian_tech_surnames, world.file2list("strings/names/guardian_gamepieces.txt")) -GLOBAL_LIST_INIT(guardian_fantasy_surnames, world.file2list("strings/names/guardian_tarot.txt")) -GLOBAL_LIST_INIT(operative_aliases, world.file2list("strings/names/operative_alias.txt")) -GLOBAL_LIST_INIT(voidwalker_names, world.file2list("strings/names/voidwalker.txt")) - -GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt")) -GLOBAL_LIST_INIT(ing_verbs, world.file2list("strings/names/ing_verbs.txt")) -GLOBAL_LIST_INIT(martial_prefix, world.file2list("strings/names/martial_prefix.txt")) -GLOBAL_LIST_INIT(adverbs, world.file2list("strings/names/adverbs.txt")) -GLOBAL_LIST_INIT(adjectives, world.file2list("strings/names/adjectives.txt")) -GLOBAL_LIST_INIT(gross_adjectives, world.file2list("strings/names/gross_adjectives.txt")) -GLOBAL_LIST_INIT(dream_strings, world.file2list("strings/dreamstrings.txt")) -GLOBAL_LIST_INIT(vampire_house_names, world.file2list("strings/names/vampire_house_names.txt")) -GLOBAL_LIST_INIT(greek_alphabet, world.file2list("strings/greek_alphabet.txt")) +GLOBAL_LIST_INIT(hacker_aliases, world.file2list("strings/names/hackers.txt")) GLOBAL_LIST_INIT(hive_names, world.file2list("strings/names/hive_names.txt")) +GLOBAL_LIST_INIT(last_names, world.file2list("strings/names/last.txt")) +GLOBAL_LIST_INIT(lizard_names_female, world.file2list("strings/names/lizard_female.txt")) +GLOBAL_LIST_INIT(lizard_names_male, world.file2list("strings/names/lizard_male.txt")) +GLOBAL_LIST_INIT(martial_prefix, world.file2list("strings/names/martial_prefix.txt")) +GLOBAL_LIST_INIT(megacarp_first_names, world.file2list("strings/names/megacarp1.txt")) +GLOBAL_LIST_INIT(megacarp_last_names, world.file2list("strings/names/megacarp2.txt")) +GLOBAL_LIST_INIT(mime_names, world.file2list("strings/names/mime.txt")) +GLOBAL_LIST_INIT(moth_first, world.file2list("strings/names/moth_first.txt")) +GLOBAL_LIST_INIT(moth_last, world.file2list("strings/names/moth_last.txt")) +GLOBAL_LIST_INIT(nightmare_names, world.file2list("strings/names/nightmare.txt")) +GLOBAL_LIST_INIT(ninja_names, world.file2list("strings/names/ninjaname.txt")) +GLOBAL_LIST_INIT(ninja_titles, world.file2list("strings/names/ninjatitle.txt")) +GLOBAL_LIST_INIT(operative_aliases, world.file2list("strings/names/operative_alias.txt")) +GLOBAL_LIST_INIT(plasmaman_names, world.file2list("strings/names/plasmaman.txt")) +GLOBAL_LIST_INIT(posibrain_names, world.file2list("strings/names/posibrain.txt")) +GLOBAL_LIST_INIT(religion_names, world.file2list("strings/names/religion.txt")) +GLOBAL_LIST_INIT(station_names, world.file2list("strings/station_names.txt")) +GLOBAL_LIST_INIT(station_numerals, greek_letters + phonetic_alphabet + numbers_as_words + generate_number_strings()) +GLOBAL_LIST_INIT(station_prefixes, world.file2list("strings/station_prefixes.txt")) +GLOBAL_LIST_INIT(station_suffixes, world.file2list("strings/station_suffixes.txt")) +GLOBAL_LIST_INIT(syndicate_monkey_names, world.file2list("strings/names/syndicate_monkey.txt")) +GLOBAL_LIST_INIT(vampire_house_names, world.file2list("strings/names/vampire_house_names.txt")) +GLOBAL_LIST_INIT(voidwalker_names, world.file2list("strings/names/voidwalker.txt")) +GLOBAL_LIST_INIT(wizard_first, world.file2list("strings/names/wizardfirst.txt")) +GLOBAL_LIST_INIT(wizard_second, world.file2list("strings/names/wizardsecond.txt")) + //loaded on startup because of " //would include in rsc if ' was used diff --git a/code/_globalvars/lists/sound.dm b/code/_globalvars/lists/sound.dm new file mode 100644 index 00000000000..a8fc4ab698c --- /dev/null +++ b/code/_globalvars/lists/sound.dm @@ -0,0 +1,20 @@ +GLOBAL_LIST_INIT(scarySounds, list( + 'sound/effects/footstep/clownstep1.ogg', + 'sound/effects/footstep/clownstep2.ogg', + 'sound/effects/glass/glassbr1.ogg', + 'sound/effects/glass/glassbr2.ogg', + 'sound/effects/glass/glassbr3.ogg', + 'sound/items/tools/welder.ogg', + 'sound/items/tools/welder2.ogg', + 'sound/machines/airlock/airlock.ogg', + 'sound/mobs/non-humanoids/hiss/hiss1.ogg', + 'sound/mobs/non-humanoids/hiss/hiss2.ogg', + 'sound/mobs/non-humanoids/hiss/hiss3.ogg', + 'sound/mobs/non-humanoids/hiss/hiss4.ogg', + 'sound/mobs/non-humanoids/hiss/hiss5.ogg', + 'sound/mobs/non-humanoids/hiss/hiss6.ogg', + 'sound/items/weapons/armbomb.ogg', + 'sound/items/weapons/taser.ogg', + 'sound/items/weapons/thudswoosh.ogg', + 'sound/items/weapons/shove.ogg', +)) diff --git a/code/_globalvars/lists/status_display.dm b/code/_globalvars/lists/status_display.dm new file mode 100644 index 00000000000..66ec47d9964 --- /dev/null +++ b/code/_globalvars/lists/status_display.dm @@ -0,0 +1,20 @@ +// All valid inputs to status display post_status +GLOBAL_LIST_INIT(status_display_approved_pictures, list( + "blank", + "shuttle", + "default", + "biohazard", + "lockdown", + "greenalert", + "bluealert", + "redalert", + "deltaalert", + "radiation", + "currentalert", //For automatic set of status display on current level +)) + +// Members of status_display_approved_pictures that are actually states and not alert values +GLOBAL_LIST_INIT(status_display_state_pictures, list( + "blank", + "shuttle", +)) diff --git a/code/_globalvars/lists/strings.dm b/code/_globalvars/lists/strings.dm new file mode 100644 index 00000000000..80cc4816c1e --- /dev/null +++ b/code/_globalvars/lists/strings.dm @@ -0,0 +1,16 @@ +GLOBAL_LIST_INIT(adjectives, world.file2list("strings/names/adjectives.txt")) +GLOBAL_LIST_INIT(adverbs, world.file2list("strings/names/adverbs.txt")) +GLOBAL_LIST_INIT(dream_strings, world.file2list("strings/dreamstrings.txt")) +GLOBAL_LIST_INIT(fishing_tips, world.file2list("strings/fishing_tips.txt")) +GLOBAL_LIST_INIT(greek_letters, world.file2list("strings/greek_letters.txt")) +GLOBAL_LIST_INIT(gross_adjectives, world.file2list("strings/names/gross_adjectives.txt")) +GLOBAL_LIST_INIT(ing_verbs, world.file2list("strings/names/ing_verbs.txt")) +GLOBAL_LIST_INIT(junkmail_messages, world.file2list("strings/junkmail.txt")) +GLOBAL_LIST_INIT(most_common_words, world.file2list("strings/1000_most_common.txt")) +GLOBAL_LIST_INIT(numbers_as_words, world.file2list("strings/numbers_as_words.txt")) +GLOBAL_LIST_INIT(phonetic_alphabet, world.file2list("strings/phonetic_alphabet.txt")) +GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt")) +GLOBAL_LIST_INIT(wisdoms, world.file2list("strings/wisdoms.txt")) + +//loaded on startup because of " +//would include in rsc if ' was used diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 4c7c01d5c29..3dc3b5e0ce1 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -393,12 +393,12 @@ /datum/status_effect/lightningorb/on_apply() . = ..() - owner.add_movespeed_modifier(/datum/movespeed_modifier/yellow_orb) + owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/yellow_orb) to_chat(owner, span_notice("You feel fast!")) /datum/status_effect/lightningorb/on_remove() . = ..() - owner.remove_movespeed_modifier(/datum/movespeed_modifier/yellow_orb) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/yellow_orb) to_chat(owner, span_notice("You slow down.")) /atom/movable/screen/alert/status_effect/lightningorb diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/chemspray.dm similarity index 94% rename from code/game/objects/effects/decals/misc.dm rename to code/game/objects/effects/decals/chemspray.dm index 112f3b228dc..005f7482aac 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/chemspray.dm @@ -95,10 +95,3 @@ reagents.expose(spraying, VAPOR) log_combat(user, spraying, "sprayed", sprayer, addition = "which had [logging_string]") - -/obj/effect/decal/fakelattice - name = "lattice" - desc = "A lightweight support lattice." - icon = 'icons/obj/smooth_structures/lattice.dmi' - icon_state = "lattice-255" - density = TRUE diff --git a/code/game/objects/effects/decals/cleanable/ants.dm b/code/game/objects/effects/decals/cleanable/ants.dm new file mode 100644 index 00000000000..b6a3fa38c3f --- /dev/null +++ b/code/game/objects/effects/decals/cleanable/ants.dm @@ -0,0 +1,90 @@ +/obj/effect/decal/cleanable/ants + name = "space ants" + desc = "A small colony of space ants. They're normally used to the vacuum of space, so they can't climb too well." + icon = 'icons/obj/debris.dmi' + icon_state = "ants" + beauty = -150 + plane = GAME_PLANE + layer = LOW_OBJ_LAYER + decal_reagent = /datum/reagent/ants + reagent_amount = 5 + /// Sound the ants make when biting + var/bite_sound = 'sound/items/weapons/bite.ogg' + +/obj/effect/decal/cleanable/ants/Initialize(mapload) + if(mapload && reagent_amount > 2) + reagent_amount = rand((reagent_amount - 2), reagent_amount) + . = ..() + update_ant_damage() + +/obj/effect/decal/cleanable/ants/vv_edit_var(vname, vval) + . = ..() + if(vname == NAMEOF(src, bite_sound)) + update_ant_damage() + +/obj/effect/decal/cleanable/ants/handle_merge_decal(obj/effect/decal/cleanable/merger) + . = ..() + var/obj/effect/decal/cleanable/ants/ants = merger + ants.update_ant_damage() + +/obj/effect/decal/cleanable/ants/proc/update_ant_damage(ant_min_damage, ant_max_damage) + if(!ant_max_damage) + ant_max_damage = min(10, round((reagents ? reagents.get_reagent_amount(/datum/reagent/ants) : reagent_amount) * 0.1,0.1)) // 100u ants = 10 max_damage + if(!ant_min_damage) + ant_min_damage = 0.1 + var/ant_flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN) /// Small amounts of ants won't be able to bite through shoes. + if(ant_max_damage > 1) + ant_flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN | CALTROP_BYPASS_SHOES) + + var/datum/component/caltrop/caltrop_comp = GetComponent(/datum/component/caltrop) + if(caltrop_comp) + caltrop_comp.min_damage = ant_min_damage + caltrop_comp.max_damage = ant_max_damage + caltrop_comp.flags = ant_flags + caltrop_comp.soundfile = bite_sound + else + AddComponent(/datum/component/caltrop, min_damage = ant_min_damage, max_damage = ant_max_damage, flags = ant_flags, soundfile = bite_sound) + + update_appearance(UPDATE_ICON) + +/obj/effect/decal/cleanable/ants/update_icon_state() + if(istype(src, /obj/effect/decal/cleanable/ants/fire)) //i fucking hate this but you're forced to call parent in update_icon_state() + return ..() + if(!(flags_1 & INITIALIZED_1)) + return ..() + + var/datum/component/caltrop/caltrop_comp = GetComponent(/datum/component/caltrop) + if(!caltrop_comp) + return ..() + + switch(caltrop_comp.max_damage) + if(0 to 1) + icon_state = initial(icon_state) + if(1.1 to 4) + icon_state = "[initial(icon_state)]_2" + if(4.1 to 7) + icon_state = "[initial(icon_state)]_3" + if(7.1 to INFINITY) + icon_state = "[initial(icon_state)]_4" + return ..() + +/obj/effect/decal/cleanable/ants/update_overlays() + . = ..() + . += emissive_appearance(icon, "[icon_state]_light", src, alpha = src.alpha, effect_type = EMISSIVE_NO_BLOOM) + +/obj/effect/decal/cleanable/ants/fire_act(exposed_temperature, exposed_volume) + new /obj/effect/decal/cleanable/ants/fire(loc) + qdel(src) + +/obj/effect/decal/cleanable/ants/fire + name = "space fire ants" + desc = "A small colony no longer. We are the fire nation." + decal_reagent = /datum/reagent/ants/fire + icon_state = "fire_ants" + mergeable_decal = FALSE + +/obj/effect/decal/cleanable/ants/fire/update_ant_damage(ant_min_damage, ant_max_damage) + return ..(15, 25) + +/obj/effect/decal/cleanable/ants/fire/fire_act(exposed_temperature, exposed_volume) + return diff --git a/code/game/objects/effects/decals/cleanable/fuel.dm b/code/game/objects/effects/decals/cleanable/fuel.dm new file mode 100644 index 00000000000..e372e93c43d --- /dev/null +++ b/code/game/objects/effects/decals/cleanable/fuel.dm @@ -0,0 +1,113 @@ +/obj/effect/decal/cleanable/fuel_pool + name = "pool of fuel" + desc = "A pool of flammable fuel. Its probably wise to clean this off before something ignites it..." + icon_state = "fuel_pool" + beauty = -50 + clean_type = CLEAN_TYPE_BLOOD + mouse_opacity = MOUSE_OPACITY_OPAQUE + resistance_flags = UNACIDABLE | ACID_PROOF | FIRE_PROOF | FLAMMABLE //gross way of doing this but would need to disassemble fire_act call stack otherwise + /// Maximum amount of hotspots this pool can create before deleting itself + var/burn_amount = 3 + /// Is this fuel pool currently burning? + var/burning = FALSE + /// Type of hotspot fuel pool spawns upon being ignited + var/hotspot_type = /obj/effect/hotspot + +/obj/effect/decal/cleanable/fuel_pool/Initialize(mapload, burn_stacks) + . = ..() + var/static/list/loc_connections = list( + COMSIG_TURF_MOVABLE_THROW_LANDED = PROC_REF(ignition_trigger), + COMSIG_ATOM_ENTERED = PROC_REF(on_entered) + ) + AddElement(/datum/element/connect_loc, loc_connections) + for(var/obj/effect/decal/cleanable/fuel_pool/pool in get_turf(src)) //Can't use locate because we also belong to that turf + if(pool == src) + continue + pool.burn_amount = max(min(pool.burn_amount + burn_stacks, 10), 1) + return INITIALIZE_HINT_QDEL + + if(burn_stacks) + burn_amount = max(min(burn_stacks, 10), 1) + + return INITIALIZE_HINT_LATELOAD + +// Just in case of fires, do this after mapload. +/obj/effect/decal/cleanable/fuel_pool/LateInitialize() +// We don't want to burn down the create_and_destroy test area +#ifndef UNIT_TESTS + RegisterSignal(src, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(ignition_trigger)) +#endif + +/obj/effect/decal/cleanable/fuel_pool/fire_act(exposed_temperature, exposed_volume) + . = ..() + ignite() + +/** + * Ignites the fuel pool. This should be the only way to ignite fuel pools. + */ +/obj/effect/decal/cleanable/fuel_pool/proc/ignite() + if(burning) + return + burning = TRUE + burn_process() + +/** + * Spends 1 burn_amount and spawns a hotspot. If burn_amount is equal to 0, deletes the fuel pool. + * Else, queues another call of this proc upon hotspot getting deleted and ignites other fuel pools around itself after 0.5 seconds. + * THIS SHOULD NOT BE CALLED DIRECTLY. + */ +/obj/effect/decal/cleanable/fuel_pool/proc/burn_process() + SIGNAL_HANDLER + + burn_amount -= 1 + var/obj/effect/hotspot/hotspot = new hotspot_type(get_turf(src)) + addtimer(CALLBACK(src, PROC_REF(ignite_others)), 0.5 SECONDS) + + if(!burn_amount) + qdel(src) + return + + RegisterSignal(hotspot, COMSIG_QDELETING, PROC_REF(burn_process)) + +/** + * Ignites other oil pools around itself. + */ +/obj/effect/decal/cleanable/fuel_pool/proc/ignite_others() + for(var/obj/effect/decal/cleanable/fuel_pool/oil in range(1, get_turf(src))) + oil.ignite() + +/obj/effect/decal/cleanable/fuel_pool/bullet_act(obj/projectile/hit_proj) + . = ..() + ignite() + log_combat(hit_proj.firer, src, "used [hit_proj] to ignite") + +/obj/effect/decal/cleanable/fuel_pool/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) + if(item.ignition_effect(src, user)) + ignite() + log_combat(user, src, "used [item] to ignite") + return ..() + +/obj/effect/decal/cleanable/fuel_pool/proc/on_entered(datum/source, atom/movable/entered_atom) + SIGNAL_HANDLER + + if(!entered_atom.throwing) // don't light from things being thrown over us, we handle that somewhere else + ignition_trigger(source = src, enflammable_atom = entered_atom) + +/obj/effect/decal/cleanable/fuel_pool/proc/ignition_trigger(datum/source, atom/movable/enflammable_atom) + SIGNAL_HANDLER + + if(isitem(enflammable_atom)) + var/obj/item/enflamed_item = enflammable_atom + if(enflamed_item.get_temperature() > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + ignite() + return + else if(isliving(enflammable_atom)) + var/mob/living/enflamed_liver = enflammable_atom + if(enflamed_liver.on_fire) + ignite() + else if(istype(enflammable_atom, /obj/effect/particle_effect/sparks)) + ignite() + + +/obj/effect/decal/cleanable/fuel_pool/hivis + icon_state = "fuel_pool_hivis" diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/mess.dm similarity index 62% rename from code/game/objects/effects/decals/cleanable/misc.dm rename to code/game/objects/effects/decals/cleanable/mess.dm index db4e7e2047d..d31f44a4b01 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/mess.dm @@ -365,211 +365,6 @@ GLOBAL_LIST_EMPTY(nebula_vomits) . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_SLUDGE, CELL_VIRUS_TABLE_GENERIC, rand(2,4), 15) -/obj/effect/decal/cleanable/ants - name = "space ants" - desc = "A small colony of space ants. They're normally used to the vacuum of space, so they can't climb too well." - icon = 'icons/obj/debris.dmi' - icon_state = "ants" - beauty = -150 - plane = GAME_PLANE - layer = LOW_OBJ_LAYER - decal_reagent = /datum/reagent/ants - reagent_amount = 5 - /// Sound the ants make when biting - var/bite_sound = 'sound/items/weapons/bite.ogg' - -/obj/effect/decal/cleanable/ants/Initialize(mapload) - if(mapload && reagent_amount > 2) - reagent_amount = rand((reagent_amount - 2), reagent_amount) - . = ..() - update_ant_damage() - -/obj/effect/decal/cleanable/ants/vv_edit_var(vname, vval) - . = ..() - if(vname == NAMEOF(src, bite_sound)) - update_ant_damage() - -/obj/effect/decal/cleanable/ants/handle_merge_decal(obj/effect/decal/cleanable/merger) - . = ..() - var/obj/effect/decal/cleanable/ants/ants = merger - ants.update_ant_damage() - -/obj/effect/decal/cleanable/ants/proc/update_ant_damage(ant_min_damage, ant_max_damage) - if(!ant_max_damage) - ant_max_damage = min(10, round((reagents ? reagents.get_reagent_amount(/datum/reagent/ants) : reagent_amount) * 0.1,0.1)) // 100u ants = 10 max_damage - if(!ant_min_damage) - ant_min_damage = 0.1 - var/ant_flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN) /// Small amounts of ants won't be able to bite through shoes. - if(ant_max_damage > 1) - ant_flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN | CALTROP_BYPASS_SHOES) - - var/datum/component/caltrop/caltrop_comp = GetComponent(/datum/component/caltrop) - if(caltrop_comp) - caltrop_comp.min_damage = ant_min_damage - caltrop_comp.max_damage = ant_max_damage - caltrop_comp.flags = ant_flags - caltrop_comp.soundfile = bite_sound - else - AddComponent(/datum/component/caltrop, min_damage = ant_min_damage, max_damage = ant_max_damage, flags = ant_flags, soundfile = bite_sound) - - update_appearance(UPDATE_ICON) - -/obj/effect/decal/cleanable/ants/update_icon_state() - if(istype(src, /obj/effect/decal/cleanable/ants/fire)) //i fucking hate this but you're forced to call parent in update_icon_state() - return ..() - if(!(flags_1 & INITIALIZED_1)) - return ..() - - var/datum/component/caltrop/caltrop_comp = GetComponent(/datum/component/caltrop) - if(!caltrop_comp) - return ..() - - switch(caltrop_comp.max_damage) - if(0 to 1) - icon_state = initial(icon_state) - if(1.1 to 4) - icon_state = "[initial(icon_state)]_2" - if(4.1 to 7) - icon_state = "[initial(icon_state)]_3" - if(7.1 to INFINITY) - icon_state = "[initial(icon_state)]_4" - return ..() - -/obj/effect/decal/cleanable/ants/update_overlays() - . = ..() - . += emissive_appearance(icon, "[icon_state]_light", src, alpha = src.alpha, effect_type = EMISSIVE_NO_BLOOM) - -/obj/effect/decal/cleanable/ants/fire_act(exposed_temperature, exposed_volume) - new /obj/effect/decal/cleanable/ants/fire(loc) - qdel(src) - -/obj/effect/decal/cleanable/ants/fire - name = "space fire ants" - desc = "A small colony no longer. We are the fire nation." - decal_reagent = /datum/reagent/ants/fire - icon_state = "fire_ants" - mergeable_decal = FALSE - -/obj/effect/decal/cleanable/ants/fire/update_ant_damage(ant_min_damage, ant_max_damage) - return ..(15, 25) - -/obj/effect/decal/cleanable/ants/fire/fire_act(exposed_temperature, exposed_volume) - return - -/obj/effect/decal/cleanable/fuel_pool - name = "pool of fuel" - desc = "A pool of flammable fuel. Its probably wise to clean this off before something ignites it..." - icon_state = "fuel_pool" - beauty = -50 - clean_type = CLEAN_TYPE_BLOOD - mouse_opacity = MOUSE_OPACITY_OPAQUE - resistance_flags = UNACIDABLE | ACID_PROOF | FIRE_PROOF | FLAMMABLE //gross way of doing this but would need to disassemble fire_act call stack otherwise - /// Maximum amount of hotspots this pool can create before deleting itself - var/burn_amount = 3 - /// Is this fuel pool currently burning? - var/burning = FALSE - /// Type of hotspot fuel pool spawns upon being ignited - var/hotspot_type = /obj/effect/hotspot - -/obj/effect/decal/cleanable/fuel_pool/Initialize(mapload, burn_stacks) - . = ..() - var/static/list/loc_connections = list( - COMSIG_TURF_MOVABLE_THROW_LANDED = PROC_REF(ignition_trigger), - COMSIG_ATOM_ENTERED = PROC_REF(on_entered) - ) - AddElement(/datum/element/connect_loc, loc_connections) - for(var/obj/effect/decal/cleanable/fuel_pool/pool in get_turf(src)) //Can't use locate because we also belong to that turf - if(pool == src) - continue - pool.burn_amount = max(min(pool.burn_amount + burn_stacks, 10), 1) - return INITIALIZE_HINT_QDEL - - if(burn_stacks) - burn_amount = max(min(burn_stacks, 10), 1) - - return INITIALIZE_HINT_LATELOAD - -// Just in case of fires, do this after mapload. -/obj/effect/decal/cleanable/fuel_pool/LateInitialize() -// We don't want to burn down the create_and_destroy test area -#ifndef UNIT_TESTS - RegisterSignal(src, COMSIG_ATOM_TOUCHED_SPARKS, PROC_REF(ignition_trigger)) -#endif - -/obj/effect/decal/cleanable/fuel_pool/fire_act(exposed_temperature, exposed_volume) - . = ..() - ignite() - -/** - * Ignites the fuel pool. This should be the only way to ignite fuel pools. - */ -/obj/effect/decal/cleanable/fuel_pool/proc/ignite() - if(burning) - return - burning = TRUE - burn_process() - -/** - * Spends 1 burn_amount and spawns a hotspot. If burn_amount is equal to 0, deletes the fuel pool. - * Else, queues another call of this proc upon hotspot getting deleted and ignites other fuel pools around itself after 0.5 seconds. - * THIS SHOULD NOT BE CALLED DIRECTLY. - */ -/obj/effect/decal/cleanable/fuel_pool/proc/burn_process() - SIGNAL_HANDLER - - burn_amount -= 1 - var/obj/effect/hotspot/hotspot = new hotspot_type(get_turf(src)) - addtimer(CALLBACK(src, PROC_REF(ignite_others)), 0.5 SECONDS) - - if(!burn_amount) - qdel(src) - return - - RegisterSignal(hotspot, COMSIG_QDELETING, PROC_REF(burn_process)) - -/** - * Ignites other oil pools around itself. - */ -/obj/effect/decal/cleanable/fuel_pool/proc/ignite_others() - for(var/obj/effect/decal/cleanable/fuel_pool/oil in range(1, get_turf(src))) - oil.ignite() - -/obj/effect/decal/cleanable/fuel_pool/bullet_act(obj/projectile/hit_proj) - . = ..() - ignite() - log_combat(hit_proj.firer, src, "used [hit_proj] to ignite") - -/obj/effect/decal/cleanable/fuel_pool/attackby(obj/item/item, mob/user, list/modifiers, list/attack_modifiers) - if(item.ignition_effect(src, user)) - ignite() - log_combat(user, src, "used [item] to ignite") - return ..() - -/obj/effect/decal/cleanable/fuel_pool/proc/on_entered(datum/source, atom/movable/entered_atom) - SIGNAL_HANDLER - - if(!entered_atom.throwing) // don't light from things being thrown over us, we handle that somewhere else - ignition_trigger(source = src, enflammable_atom = entered_atom) - -/obj/effect/decal/cleanable/fuel_pool/proc/ignition_trigger(datum/source, atom/movable/enflammable_atom) - SIGNAL_HANDLER - - if(isitem(enflammable_atom)) - var/obj/item/enflamed_item = enflammable_atom - if(enflamed_item.get_temperature() > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) - ignite() - return - else if(isliving(enflammable_atom)) - var/mob/living/enflamed_liver = enflammable_atom - if(enflamed_liver.on_fire) - ignite() - else if(istype(enflammable_atom, /obj/effect/particle_effect/sparks)) - ignite() - - -/obj/effect/decal/cleanable/fuel_pool/hivis - icon_state = "fuel_pool_hivis" - /obj/effect/decal/cleanable/rubble name = "rubble" desc = "A pile of rubble." diff --git a/code/game/objects/effects/decals/structure.dm b/code/game/objects/effects/decals/structure.dm new file mode 100644 index 00000000000..66935498dff --- /dev/null +++ b/code/game/objects/effects/decals/structure.dm @@ -0,0 +1,6 @@ +/obj/effect/decal/fakelattice + name = "lattice" + desc = "A lightweight support lattice." + icon = 'icons/obj/smooth_structures/lattice.dmi' + icon_state = "lattice-255" + density = TRUE diff --git a/code/game/objects/effects/particles/echo.dm b/code/game/objects/effects/particles/echo.dm new file mode 100644 index 00000000000..90c3533d8ce --- /dev/null +++ b/code/game/objects/effects/particles/echo.dm @@ -0,0 +1,14 @@ +// Echolocation particles. +/particles/echo + icon = 'icons/effects/particles/echo.dmi' + icon_state = list("echo1" = 1, "echo2" = 1, "echo3" = 2) + width = 480 + height = 480 + count = 1000 + spawning = 0.5 + lifespan = 2 SECONDS + fade = 1 SECONDS + gravity = list(0, -0.1) + position = generator(GEN_BOX, list(-240, -240), list(240, 240), NORMAL_RAND) + drift = generator(GEN_VECTOR, list(-0.1, 0), list(0.1, 0)) + rotation = generator(GEN_NUM, 0, 360, NORMAL_RAND) diff --git a/code/game/objects/effects/particles/food.dm b/code/game/objects/effects/particles/food.dm new file mode 100644 index 00000000000..30f9e6ec2f4 --- /dev/null +++ b/code/game/objects/effects/particles/food.dm @@ -0,0 +1,13 @@ +// Food related particles. +/particles/stink + icon = 'icons/effects/particles/stink.dmi' + icon_state = list("stink_1" = 1, "stink_2" = 2, "stink_3" = 2) + color = "#0BDA51" + width = 100 + height = 100 + count = 25 + spawning = 0.25 + lifespan = 1 SECONDS + fade = 1 SECONDS + position = generator(GEN_CIRCLE, 0, 16, UNIFORM_RAND) + gravity = list(0, 0.25) diff --git a/code/game/objects/effects/particles/misc.dm b/code/game/objects/effects/particles/misc.dm deleted file mode 100644 index a1f188f88c9..00000000000 --- a/code/game/objects/effects/particles/misc.dm +++ /dev/null @@ -1,45 +0,0 @@ -// General or un-matched particles, make a new file if a few can be sorted together. -/particles/pollen - icon = 'icons/effects/particles/pollen.dmi' - icon_state = "pollen" - width = 100 - height = 100 - count = 1000 - spawning = 4 - lifespan = 0.7 SECONDS - fade = 1 SECONDS - grow = -0.01 - velocity = list(0, 0) - position = generator(GEN_CIRCLE, 0, 16, NORMAL_RAND) - drift = generator(GEN_VECTOR, list(0, -0.2), list(0, 0.2)) - gravity = list(0, 0.95) - scale = generator(GEN_VECTOR, list(0.3, 0.3), list(1,1), NORMAL_RAND) - rotation = 30 - spin = generator(GEN_NUM, -20, 20) - -/particles/echo - icon = 'icons/effects/particles/echo.dmi' - icon_state = list("echo1" = 1, "echo2" = 1, "echo3" = 2) - width = 480 - height = 480 - count = 1000 - spawning = 0.5 - lifespan = 2 SECONDS - fade = 1 SECONDS - gravity = list(0, -0.1) - position = generator(GEN_BOX, list(-240, -240), list(240, 240), NORMAL_RAND) - drift = generator(GEN_VECTOR, list(-0.1, 0), list(0.1, 0)) - rotation = generator(GEN_NUM, 0, 360, NORMAL_RAND) - -/particles/stink - icon = 'icons/effects/particles/stink.dmi' - icon_state = list("stink_1" = 1, "stink_2" = 2, "stink_3" = 2) - color = "#0BDA51" - width = 100 - height = 100 - count = 25 - spawning = 0.25 - lifespan = 1 SECONDS - fade = 1 SECONDS - position = generator(GEN_CIRCLE, 0, 16, UNIFORM_RAND) - gravity = list(0, 0.25) diff --git a/code/game/objects/effects/particles/plant.dm b/code/game/objects/effects/particles/plant.dm new file mode 100644 index 00000000000..eca8b6fe5d0 --- /dev/null +++ b/code/game/objects/effects/particles/plant.dm @@ -0,0 +1,18 @@ +// Plant related particles. +/particles/pollen + icon = 'icons/effects/particles/pollen.dmi' + icon_state = "pollen" + width = 100 + height = 100 + count = 1000 + spawning = 4 + lifespan = 0.7 SECONDS + fade = 1 SECONDS + grow = -0.01 + velocity = list(0, 0) + position = generator(GEN_CIRCLE, 0, 16, NORMAL_RAND) + drift = generator(GEN_VECTOR, list(0, -0.2), list(0, 0.2)) + gravity = list(0, 0.95) + scale = generator(GEN_VECTOR, list(0.3, 0.3), list(1,1), NORMAL_RAND) + rotation = 30 + spin = generator(GEN_NUM, -20, 20) diff --git a/code/modules/movespeed/modifiers/admin.dm b/code/modules/movespeed/modifiers/admin.dm new file mode 100644 index 00000000000..c2002dec2d3 --- /dev/null +++ b/code/modules/movespeed/modifiers/admin.dm @@ -0,0 +1,4 @@ +/datum/movespeed_modifier/admin_varedit + variable = TRUE + + diff --git a/code/modules/movespeed/modifiers/misc.dm b/code/modules/movespeed/modifiers/misc.dm deleted file mode 100644 index e3aba912966..00000000000 --- a/code/modules/movespeed/modifiers/misc.dm +++ /dev/null @@ -1,6 +0,0 @@ -/datum/movespeed_modifier/admin_varedit - variable = TRUE - -/datum/movespeed_modifier/yellow_orb - multiplicative_slowdown = -0.65 - blacklisted_movetypes = (FLYING|FLOATING) diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm index 26522d0793b..951944944c5 100644 --- a/code/modules/movespeed/modifiers/status_effects.dm +++ b/code/modules/movespeed/modifiers/status_effects.dm @@ -63,6 +63,10 @@ /datum/movespeed_modifier/status_effect/guardian_shield multiplicative_slowdown = 1 +/datum/movespeed_modifier/status_effect/yellow_orb + multiplicative_slowdown = -0.65 + blacklisted_movetypes = (FLYING|FLOATING) + ///movespeed modifier that makes you go faster when wet and lying on the floor once past the fish organ set threshold. /datum/movespeed_modifier/fish_flopping blacklisted_movetypes = MOVETYPES_NOT_TOUCHING_GROUND diff --git a/code/modules/reagents/reagent_containers/cups/mauna_mug.dm b/code/modules/reagents/reagent_containers/cups/mauna_mug.dm new file mode 100644 index 00000000000..b443229358b --- /dev/null +++ b/code/modules/reagents/reagent_containers/cups/mauna_mug.dm @@ -0,0 +1,117 @@ +/obj/item/reagent_containers/cup/maunamug + name = "mauna mug" + desc = "A drink served in a classy mug. Now with built-in heating!" + icon = 'icons/obj/devices/mauna_mug.dmi' + icon_state = "maunamug" + base_icon_state = "maunamug" + spillable = TRUE + reagent_flags = OPENCONTAINER + fill_icon_state = "maunafilling" + fill_icon_thresholds = list(25) + var/obj/item/stock_parts/power_store/cell + var/open = FALSE + var/on = FALSE + +/obj/item/reagent_containers/cup/maunamug/Initialize(mapload, vol) + . = ..() + cell = new /obj/item/stock_parts/power_store/cell(src) + +/obj/item/reagent_containers/cup/maunamug/get_cell() + return cell + +/obj/item/reagent_containers/cup/maunamug/examine(mob/user) + . = ..() + . += span_notice("The status display reads: Current temperature: [reagents.chem_temp]K Current Charge:[cell ? "[cell.charge / cell.maxcharge * 100]%" : "No cell found"].") + if(open) + . += span_notice("The battery case is open.") + if(cell && cell.charge > 0) + . += span_notice("Ctrl+Click to toggle the power.") + +/obj/item/reagent_containers/cup/maunamug/process(seconds_per_tick) + ..() + if(on && (!cell || cell.charge <= 0)) //Check if we ran out of power + change_power_status(FALSE) + return FALSE + cell.use(0.005 * STANDARD_CELL_RATE * seconds_per_tick) //Basic cell goes for like 200 seconds, bluespace for 8000 + if(!reagents.total_volume) + return FALSE + var/max_temp = min(500 + (500 * (0.2 * cell.rating)), 1000) // 373 to 1000 + reagents.adjust_thermal_energy(0.4 * cell.maxcharge * reagents.total_volume * seconds_per_tick, max_temp = max_temp) // 4 kelvin every tick on a basic cell. 160k on bluespace + reagents.handle_reactions() + update_appearance() + if(reagents.chem_temp >= max_temp) + change_power_status(FALSE) + audible_message(span_notice("The Mauna Mug lets out a happy beep and turns off!")) + playsound(src, 'sound/machines/chime.ogg', 50) + +/obj/item/reagent_containers/cup/maunamug/Destroy() + if(cell) + QDEL_NULL(cell) + STOP_PROCESSING(SSobj, src) + . = ..() + +/obj/item/reagent_containers/cup/maunamug/item_ctrl_click(mob/user) + if(on) + change_power_status(FALSE) + else + if(!cell || cell.charge <= 0) + return FALSE //No power, so don't turn on + change_power_status(TRUE) + return CLICK_ACTION_SUCCESS + +/obj/item/reagent_containers/cup/maunamug/proc/change_power_status(status) + on = status + if(on) + START_PROCESSING(SSobj, src) + else + STOP_PROCESSING(SSobj, src) + update_appearance() + +/obj/item/reagent_containers/cup/maunamug/screwdriver_act(mob/living/user, obj/item/I) + . = ..() + open = !open + to_chat(user, span_notice("You screw the battery case on [src] [open ? "open" : "closed"] .")) + update_appearance() + +/obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) + add_fingerprint(user) + if(!istype(I, /obj/item/stock_parts/power_store/cell)) + return ..() + if(!open) + to_chat(user, span_warning("The battery case must be open to insert a power cell!")) + return FALSE + if(cell) + to_chat(user, span_warning("There is already a power cell inside!")) + return FALSE + else if(!user.transferItemToLoc(I, src)) + return + cell = I + user.visible_message(span_notice("[user] inserts a power cell into [src]."), span_notice("You insert the power cell into [src].")) + update_appearance() + +/obj/item/reagent_containers/cup/maunamug/attack_hand(mob/living/user, list/modifiers) + if(cell && open) + user.put_in_hands(cell) + cell = null + to_chat(user, span_notice("You remove the power cell from [src].")) + on = FALSE + update_appearance() + return TRUE + return ..() + +/obj/item/reagent_containers/cup/maunamug/update_icon_state() + if(open) + icon_state = "[base_icon_state][cell ? null : "_no"]_bat" + return ..() + icon_state = "[base_icon_state][on ? "_on" : null]" + return ..() + +/obj/item/reagent_containers/cup/maunamug/update_overlays() + . = ..() + if(!reagents.total_volume || reagents.chem_temp < 400) + return + + var/intensity = (reagents.chem_temp - 400) * 1 / 600 //Get the opacity of the incandescent overlay. Ranging from 400 to 1000 + var/mutable_appearance/mug_glow = mutable_appearance(icon, "maunamug_incand") + mug_glow.alpha = 255 * intensity + . += mug_glow diff --git a/code/modules/reagents/reagent_containers/misc.dm b/code/modules/reagents/reagent_containers/rag.dm similarity index 64% rename from code/modules/reagents/reagent_containers/misc.dm rename to code/modules/reagents/reagent_containers/rag.dm index 37185319b4d..bd73f20fe1f 100644 --- a/code/modules/reagents/reagent_containers/misc.dm +++ b/code/modules/reagents/reagent_containers/rag.dm @@ -1,121 +1,3 @@ -/obj/item/reagent_containers/cup/maunamug - name = "mauna mug" - desc = "A drink served in a classy mug. Now with built-in heating!" - icon = 'icons/obj/devices/mauna_mug.dmi' - icon_state = "maunamug" - base_icon_state = "maunamug" - spillable = TRUE - reagent_flags = OPENCONTAINER - fill_icon_state = "maunafilling" - fill_icon_thresholds = list(25) - var/obj/item/stock_parts/power_store/cell - var/open = FALSE - var/on = FALSE - -/obj/item/reagent_containers/cup/maunamug/Initialize(mapload, vol) - . = ..() - cell = new /obj/item/stock_parts/power_store/cell(src) - -/obj/item/reagent_containers/cup/maunamug/get_cell() - return cell - -/obj/item/reagent_containers/cup/maunamug/examine(mob/user) - . = ..() - . += span_notice("The status display reads: Current temperature: [reagents.chem_temp]K Current Charge:[cell ? "[cell.charge / cell.maxcharge * 100]%" : "No cell found"].") - if(open) - . += span_notice("The battery case is open.") - if(cell && cell.charge > 0) - . += span_notice("Ctrl+Click to toggle the power.") - -/obj/item/reagent_containers/cup/maunamug/process(seconds_per_tick) - ..() - if(on && (!cell || cell.charge <= 0)) //Check if we ran out of power - change_power_status(FALSE) - return FALSE - cell.use(0.005 * STANDARD_CELL_RATE * seconds_per_tick) //Basic cell goes for like 200 seconds, bluespace for 8000 - if(!reagents.total_volume) - return FALSE - var/max_temp = min(500 + (500 * (0.2 * cell.rating)), 1000) // 373 to 1000 - reagents.adjust_thermal_energy(0.4 * cell.maxcharge * reagents.total_volume * seconds_per_tick, max_temp = max_temp) // 4 kelvin every tick on a basic cell. 160k on bluespace - reagents.handle_reactions() - update_appearance() - if(reagents.chem_temp >= max_temp) - change_power_status(FALSE) - audible_message(span_notice("The Mauna Mug lets out a happy beep and turns off!")) - playsound(src, 'sound/machines/chime.ogg', 50) - -/obj/item/reagent_containers/cup/maunamug/Destroy() - if(cell) - QDEL_NULL(cell) - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/item/reagent_containers/cup/maunamug/item_ctrl_click(mob/user) - if(on) - change_power_status(FALSE) - else - if(!cell || cell.charge <= 0) - return FALSE //No power, so don't turn on - change_power_status(TRUE) - return CLICK_ACTION_SUCCESS - -/obj/item/reagent_containers/cup/maunamug/proc/change_power_status(status) - on = status - if(on) - START_PROCESSING(SSobj, src) - else - STOP_PROCESSING(SSobj, src) - update_appearance() - -/obj/item/reagent_containers/cup/maunamug/screwdriver_act(mob/living/user, obj/item/I) - . = ..() - open = !open - to_chat(user, span_notice("You screw the battery case on [src] [open ? "open" : "closed"] .")) - update_appearance() - -/obj/item/reagent_containers/cup/maunamug/attackby(obj/item/I, mob/user, list/modifiers, list/attack_modifiers) - add_fingerprint(user) - if(!istype(I, /obj/item/stock_parts/power_store/cell)) - return ..() - if(!open) - to_chat(user, span_warning("The battery case must be open to insert a power cell!")) - return FALSE - if(cell) - to_chat(user, span_warning("There is already a power cell inside!")) - return FALSE - else if(!user.transferItemToLoc(I, src)) - return - cell = I - user.visible_message(span_notice("[user] inserts a power cell into [src]."), span_notice("You insert the power cell into [src].")) - update_appearance() - -/obj/item/reagent_containers/cup/maunamug/attack_hand(mob/living/user, list/modifiers) - if(cell && open) - user.put_in_hands(cell) - cell = null - to_chat(user, span_notice("You remove the power cell from [src].")) - on = FALSE - update_appearance() - return TRUE - return ..() - -/obj/item/reagent_containers/cup/maunamug/update_icon_state() - if(open) - icon_state = "[base_icon_state][cell ? null : "_no"]_bat" - return ..() - icon_state = "[base_icon_state][on ? "_on" : null]" - return ..() - -/obj/item/reagent_containers/cup/maunamug/update_overlays() - . = ..() - if(!reagents.total_volume || reagents.chem_temp < 400) - return - - var/intensity = (reagents.chem_temp - 400) * 1 / 600 //Get the opacity of the incandescent overlay. Ranging from 400 to 1000 - var/mutable_appearance/mug_glow = mutable_appearance(icon, "maunamug_incand") - mug_glow.alpha = 255 * intensity - . += mug_glow - /obj/item/rag name = "damp rag" desc = "For cleaning up messes, you suppose." diff --git a/tgstation.dme b/tgstation.dme index 0a15e3317b7..e220e38cb96 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -693,10 +693,14 @@ #include "code\_globalvars\lists\canisters.dm" #include "code\_globalvars\lists\cargo.dm" #include "code\_globalvars\lists\client.dm" +#include "code\_globalvars\lists\clothing.dm" #include "code\_globalvars\lists\color.dm" +#include "code\_globalvars\lists\communication.dm" #include "code\_globalvars\lists\crafting.dm" +#include "code\_globalvars\lists\department.dm" +#include "code\_globalvars\lists\disposals.dm" #include "code\_globalvars\lists\engineering.dm" -#include "code\_globalvars\lists\flavor_misc.dm" +#include "code\_globalvars\lists\ghost.dm" #include "code\_globalvars\lists\icons.dm" #include "code\_globalvars\lists\keybindings.dm" #include "code\_globalvars\lists\maintenance_loot.dm" @@ -713,6 +717,9 @@ #include "code\_globalvars\lists\reagents.dm" #include "code\_globalvars\lists\rtd.dm" #include "code\_globalvars\lists\silo.dm" +#include "code\_globalvars\lists\sound.dm" +#include "code\_globalvars\lists\status_display.dm" +#include "code\_globalvars\lists\strings.dm" #include "code\_globalvars\lists\typecache.dm" #include "code\_globalvars\lists\wiremod.dm" #include "code\_globalvars\lists\xenobiology.dm" @@ -2504,15 +2511,18 @@ #include "code\game\objects\effects\anomalies\anomalies_hallucination.dm" #include "code\game\objects\effects\anomalies\anomalies_pyroclastic.dm" #include "code\game\objects\effects\anomalies\anomalies_vortex.dm" +#include "code\game\objects\effects\decals\chemspray.dm" #include "code\game\objects\effects\decals\cleanable.dm" #include "code\game\objects\effects\decals\crayon.dm" #include "code\game\objects\effects\decals\decal.dm" -#include "code\game\objects\effects\decals\misc.dm" #include "code\game\objects\effects\decals\remains.dm" +#include "code\game\objects\effects\decals\structure.dm" #include "code\game\objects\effects\decals\cleanable\aliens.dm" +#include "code\game\objects\effects\decals\cleanable\ants.dm" #include "code\game\objects\effects\decals\cleanable\blood.dm" #include "code\game\objects\effects\decals\cleanable\food.dm" -#include "code\game\objects\effects\decals\cleanable\misc.dm" +#include "code\game\objects\effects\decals\cleanable\fuel.dm" +#include "code\game\objects\effects\decals\cleanable\mess.dm" #include "code\game\objects\effects\decals\cleanable\robots.dm" #include "code\game\objects\effects\decals\turfdecal\dirt.dm" #include "code\game\objects\effects\decals\turfdecal\markings.dm" @@ -2529,10 +2539,12 @@ #include "code\game\objects\effects\effect_system\fluid_spread\effects_smoke.dm" #include "code\game\objects\effects\landmarks\atmospherics_sanity_landmarks.dm" #include "code\game\objects\effects\particles\acid.dm" +#include "code\game\objects\effects\particles\echo.dm" #include "code\game\objects\effects\particles\fire.dm" +#include "code\game\objects\effects\particles\food.dm" #include "code\game\objects\effects\particles\gravity.dm" -#include "code\game\objects\effects\particles\misc.dm" #include "code\game\objects\effects\particles\note_particles.dm" +#include "code\game\objects\effects\particles\plant.dm" #include "code\game\objects\effects\particles\slime.dm" #include "code\game\objects\effects\particles\smoke.dm" #include "code\game\objects\effects\particles\water.dm" @@ -5763,11 +5775,11 @@ #include "code\modules\modular_computers\file_system\programs\messenger\messenger_data.dm" #include "code\modules\modular_computers\file_system\programs\messenger\messenger_program.dm" #include "code\modules\movespeed\_movespeed_modifier.dm" +#include "code\modules\movespeed\modifiers\admin.dm" #include "code\modules\movespeed\modifiers\components.dm" #include "code\modules\movespeed\modifiers\drugs.dm" #include "code\modules\movespeed\modifiers\innate.dm" #include "code\modules\movespeed\modifiers\items.dm" -#include "code\modules\movespeed\modifiers\misc.dm" #include "code\modules\movespeed\modifiers\mobs.dm" #include "code\modules\movespeed\modifiers\reagent.dm" #include "code\modules\movespeed\modifiers\status_effects.dm" @@ -6095,9 +6107,9 @@ #include "code\modules\reagents\reagent_containers\hypospray.dm" #include "code\modules\reagents\reagent_containers\jerrycan.dm" #include "code\modules\reagents\reagent_containers\medigel.dm" -#include "code\modules\reagents\reagent_containers\misc.dm" #include "code\modules\reagents\reagent_containers\patch.dm" #include "code\modules\reagents\reagent_containers\pill.dm" +#include "code\modules\reagents\reagent_containers\rag.dm" #include "code\modules\reagents\reagent_containers\spray.dm" #include "code\modules\reagents\reagent_containers\syringes.dm" #include "code\modules\reagents\reagent_containers\watering_can.dm" @@ -6107,6 +6119,7 @@ #include "code\modules\reagents\reagent_containers\cups\drinkingglass.dm" #include "code\modules\reagents\reagent_containers\cups\drinks.dm" #include "code\modules\reagents\reagent_containers\cups\glassbottle.dm" +#include "code\modules\reagents\reagent_containers\cups\mauna_mug.dm" #include "code\modules\reagents\reagent_containers\cups\organ_jar.dm" #include "code\modules\reagents\reagent_containers\cups\soda.dm" #include "code\modules\reagents\withdrawal\_addiction.dm"