diff --git a/_maps/catwalkstation.json b/_maps/catwalkstation.json
index 5c4630f2582b..de4433d48e89 100644
--- a/_maps/catwalkstation.json
+++ b/_maps/catwalkstation.json
@@ -3,6 +3,7 @@
"map_name": "Catwalk Station",
"map_path": "map_files/CatwalkStation",
"map_file": "CatwalkStation_2023.dmm",
+ "exclude_from_ci": true,
"shuttles": {
"emergency": "emergency_catwalk",
"ferry": "ferry_fancy",
diff --git a/_maps/deltastation.json b/_maps/deltastation.json
index d21ee4eac734..19e874583419 100644
--- a/_maps/deltastation.json
+++ b/_maps/deltastation.json
@@ -3,6 +3,7 @@
"map_name": "Delta Station",
"map_path": "map_files/Deltastation",
"map_file": "DeltaStation2.dmm",
+ "exclude_from_ci": true,
"shuttles": {
"emergency": "emergency_delta",
"ferry": "ferry_fancy",
diff --git a/_maps/icebox.json b/_maps/icebox.json
index 740a5883174f..9af675409c81 100644
--- a/_maps/icebox.json
+++ b/_maps/icebox.json
@@ -3,6 +3,7 @@
"map_name": "Ice Box Station",
"map_path": "map_files/IceBoxStation",
"map_file": "IceBoxStation.dmm",
+ "exclude_from_ci": true,
"space_ruin_levels": 0,
"space_empty_levels": 0,
"wilderness_levels": 2,
diff --git a/_maps/metastation.json b/_maps/metastation.json
index a7b2303166d0..a69a8127cf9a 100644
--- a/_maps/metastation.json
+++ b/_maps/metastation.json
@@ -3,6 +3,7 @@
"map_name": "MetaStation",
"map_path": "map_files/MetaStation",
"map_file": "MetaStation.dmm",
+ "exclude_from_ci": true,
"shuttles": {
"cargo": "cargo_box",
"ferry": "ferry_fancy",
diff --git a/_maps/nebulastation.json b/_maps/nebulastation.json
index 4e872fc0d694..f9984e8e2f61 100644
--- a/_maps/nebulastation.json
+++ b/_maps/nebulastation.json
@@ -3,6 +3,7 @@
"map_name": "NebulaStation",
"map_path": "map_files/NebulaStation",
"map_file": "NebulaStation.dmm",
+ "exclude_from_ci": true,
"give_players_hooks": 1,
"shuttles": {
"cargo": "cargo_nebula",
diff --git a/_maps/tramstation.json b/_maps/tramstation.json
index f40f4bf8e2dd..7606a8ab21b1 100644
--- a/_maps/tramstation.json
+++ b/_maps/tramstation.json
@@ -3,6 +3,7 @@
"map_name": "Tramstation",
"map_path": "map_files/tramstation",
"map_file": "tramstation.dmm",
+ "exclude_from_ci": true,
"give_players_hooks": 1,
"shuttles": {
"cargo": "cargo_box",
diff --git a/_maps/wawastation.json b/_maps/wawastation.json
index 096ced1d2701..c4678376a9e4 100644
--- a/_maps/wawastation.json
+++ b/_maps/wawastation.json
@@ -3,6 +3,7 @@
"map_name": "Wawastation",
"map_path": "map_files/wawastation",
"map_file": "wawastation.dmm",
+ "exclude_from_ci": true,
"give_players_hooks": 1,
"shuttles": {
"cargo": "cargo_box",
diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm
index 7a32eef0659c..919e80191acb 100644
--- a/code/__DEFINES/DNA.dm
+++ b/code/__DEFINES/DNA.dm
@@ -93,6 +93,7 @@
#define ORGAN_SLOT_BRAIN_CEREBELLUM "brain_antidrop"
#define ORGAN_SLOT_BRAIN_CNS "brain_antistun"
#define ORGAN_SLOT_BREATHING_TUBE "breathing_tube"
+#define ORGAN_SLOT_BUTT "butt" //MASSMETA ADD (butt_farts)
#define ORGAN_SLOT_EARS "ears"
#define ORGAN_SLOT_EYES "eye_sight"
#define ORGAN_SLOT_HEART "heart"
diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm
index 5b14301927e7..814f2631c854 100644
--- a/code/__DEFINES/robots.dm
+++ b/code/__DEFINES/robots.dm
@@ -142,6 +142,10 @@ DEFINE_BITFIELD(bot_cover_flags, list(
#define VIBE_BOT "Vibebot"
/// Repairbots
#define REPAIR_BOT "Repairbot"
+//MASSMETA ADD (butt_farts)
+/// Buttbots
+#define BUTT_BOT "Buttbot"
+//MASSMETA ADD END
// General Bot modes //
/// Idle
diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm
index 244da1dda813..f5583bf4f9ce 100644
--- a/code/__DEFINES/sound.dm
+++ b/code/__DEFINES/sound.dm
@@ -12,9 +12,12 @@
#define CHANNEL_ELEVATOR 1014
#define CHANNEL_ESCAPEMENU 1013
#define CHANNEL_WEATHER 1012
+//MASSMETA ADD BEGIN (butt_farts)
+#define CHANNEL_FART_SOUNDS 1011 // выделяем в отдельную группу, чтобы можно было в префах регулировать звуки "пу"
+//MASSMETA ADD END
//THIS SHOULD ALWAYS BE THE LOWEST ONE!
//KEEP IT UPDATED
-#define CHANNEL_HIGHEST_AVAILABLE 1011
+#define CHANNEL_HIGHEST_AVAILABLE 1010 //MASSMETA CHANGE (butt_farts)
#define MAX_INSTRUMENT_CHANNELS (128 * 6)
diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm
index 921d27118b93..2e97003d11f2 100644
--- a/code/__DEFINES/traits/declarations.dm
+++ b/code/__DEFINES/traits/declarations.dm
@@ -981,6 +981,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_SETTLER "settler"
#define TRAIT_STRONG_STOMACH "strong_stomach"
#define TRAIT_VEGETARIAN "trait_vegetarian"
+//MASSMETA ADD BEGIN (butt_farts)
+//Butt traits for quirks
+#define TRAIT_LOUD_ASS "loud_ass"
+#define TRAIT_UNSTABLE_ASS "unstable_ass"
+#define TRAIT_STABLE_ASS "stable_ass"
+//MASSMETA ADD END
/// This mob always lands on their feet when they fall, for better or for worse.
#define TRAIT_CATLIKE_GRACE "catlike_grace"
diff --git a/code/__DEFINES/~DELETE_AFTER_MODULARIZATION.dm b/code/__DEFINES/~DELETE_AFTER_MODULARIZATION.dm
deleted file mode 100644
index 930c562ab526..000000000000
--- a/code/__DEFINES/~DELETE_AFTER_MODULARIZATION.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-#include "..\..\massmeta\modular_meta_defines.dm"
-
-//DELETE IT THEN YOU DONE
-
diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm
index dbd3d951d59c..dd33b7e7a7d2 100644
--- a/code/_globalvars/lists/maintenance_loot.dm
+++ b/code/_globalvars/lists/maintenance_loot.dm
@@ -392,7 +392,7 @@ GLOBAL_LIST_INIT(oddity_loot, list(//oddity: strange or crazy items
/obj/item/instrument/trumpet/spectral = 1,
) = 1,
/obj/item/toy/cards/deck/tarot/haunted = 1,
- /obj/item/organ/internal/butt/atomic = 1, //MASSMETA EDIT (butts)
+ /obj/item/organ/internal/butt/atomic = 1, //MASSMETA ADD (butt_farts) big-bada-booom!
))
//Maintenance loot spawner pools
diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm
index 801f35272c4b..03447be0ef58 100644
--- a/code/_globalvars/traits/_traits.dm
+++ b/code/_globalvars/traits/_traits.dm
@@ -151,14 +151,14 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_WALLMOUNTED" = TRAIT_WALLMOUNTED,
),
/mob = list(
- //MASSMETA EDIT BEGIN (butts)
+ //MASSMETA ADD BEGIN (butt_farts)
"TRAIT_LOUD_ASS" = TRAIT_LOUD_ASS,
"TRAIT_UNSTABLE_ASS" = TRAIT_UNSTABLE_ASS,
"TRAIT_STABLE_ASS" = TRAIT_STABLE_ASS,
- //MASSMETA EDIT END
- //MASSMETA EDIT BEGIN (hooch_heals_assistants)
+ //MASSMETA ADD END
+ //MASSMETA ADD BEGIN (hooch_heals_assistants)
"TRAIT_GREYTIDE_METABOLISM" = TRAIT_GREYTIDE_METABOLISM,
- //MASSMETA EDIT END
+ //MASSMETA ADD END
"TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING,
"TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING,
"TRAIT_ACT_AS_CULTIST" = TRAIT_ACT_AS_CULTIST,
diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm
index c81ee3cd4d57..6cc5f45f0b53 100644
--- a/code/_globalvars/traits/admin_tooling.dm
+++ b/code/_globalvars/traits/admin_tooling.dm
@@ -32,6 +32,14 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_SPEED_POTIONED" = TRAIT_SPEED_POTIONED,
),
/mob = list(
+ //MASSMETA ADD BEGIN (butt_farts)
+ "TRAIT_LOUD_ASS" = TRAIT_LOUD_ASS,
+ "TRAIT_UNSTABLE_ASS" = TRAIT_UNSTABLE_ASS,
+ "TRAIT_STABLE_ASS" = TRAIT_STABLE_ASS,
+ //MASSMETA ADD END
+ //MASSMETA ADD BEGIN (hooch_heals_assistants)
+ "TRAIT_GREYTIDE_METABOLISM" = TRAIT_GREYTIDE_METABOLISM,
+ //MASSMETA ADD END
"TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING,
"TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING,
"TRAIT_ACT_AS_CULTIST" = TRAIT_ACT_AS_CULTIST,
diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm
index 3483e5b4f2be..171788ade882 100644
--- a/code/modules/mob/living/carbon/human/_species.dm
+++ b/code/modules/mob/living/carbon/human/_species.dm
@@ -91,10 +91,10 @@ GLOBAL_LIST_EMPTY(features_by_species)
var/obj/item/organ/stomach/mutantstomach = /obj/item/organ/stomach
///Replaces default appendix with a different organ.
var/obj/item/organ/appendix/mutantappendix = /obj/item/organ/appendix
- //MASSMETA EDIT BEGIN (butts)
+ //MASSMETA ADD BEGIN (butt_farts)
///Replaces default butt with a different organ
var/obj/item/organ/internal/butt/mutantbutt = /obj/item/organ/internal/butt
- //MASSMETA EDIT END
+ //MASSMETA ADD END
/// Store body marking defines. See mobs.dm for bitflags
var/list/body_markings = list()
@@ -272,10 +272,10 @@ GLOBAL_LIST_EMPTY(features_by_species)
return mutantliver
if(ORGAN_SLOT_STOMACH)
return mutantstomach
- //MASSMETA EDIT BEGIN (butts)
+ //MASSMETA ADD BEGIN (butt_farts)
if(ORGAN_SLOT_BUTT)
return mutantbutt
- //MASSMETA EDIT END
+ //MASSMETA ADD END
else
// Non-standard organs we might have
for(var/obj/item/organ/extra_organ as anything in mutant_organs)
@@ -1543,6 +1543,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
mut_organs += mutantliver
mut_organs += mutantstomach
mut_organs += mutantappendix
+ mut_organs += mutantbutt
list_clear_nulls(mut_organs)
return mut_organs
diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm
index 8c91fee3dc5f..5c9c3ef86c64 100644
--- a/code/modules/mob/living/carbon/human/human_update_icons.dm
+++ b/code/modules/mob/living/carbon/human/human_update_icons.dm
@@ -424,6 +424,12 @@ There are several things that need to be remembered:
var/icon_file = 'icons/mob/clothing/belt.dmi'
+ //MASSMETA ADD BEGIN (heads_on_belts)
+ // для голов на поясе у нас отдельный файлик со спрайтами
+ if(istype(worn_item, /obj/item/bodypart/head))
+ icon_file = 'modular_meta/tweaks/heads_on_belts/icons/belt.dmi'
+ //MASSMETA ADD END
+
var/mutable_appearance/belt_overlay = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file)
var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST)
my_chest?.worn_belt_offset?.apply_offset(belt_overlay)
diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm
index eabb7656cc86..3223ddc343a3 100644
--- a/code/modules/mob/living/carbon/human/species_types/android.dm
+++ b/code/modules/mob/living/carbon/human/species_types/android.dm
@@ -36,7 +36,7 @@
mutantlungs = null
mutanteyes = /obj/item/organ/eyes/robotic
mutantears = /obj/item/organ/ears/cybernetic
- mutantbutt = /obj/item/organ/internal/butt/cyber //MASSMETA EDIT (butts)
+ mutantbutt = /obj/item/organ/internal/butt/cyber //MASSMETA EDIT (butt_farts)
species_language_holder = /datum/language_holder/synthetic
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
index f6864ac0d4c3..f65b4db33642 100644
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
@@ -31,6 +31,7 @@
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN
species_cookie = /obj/item/reagent_containers/condiment/milk
outfit_important_for_life = /datum/outfit/plasmaman
+ mutantbutt = /obj/item/organ/internal/butt/plasma //MASSMETA EDIT (butt_farts)
species_language_holder = /datum/language_holder/skeleton
bodypart_overrides = list(
diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
index da8c1dadd0b2..d68e588fcb8b 100644
--- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm
+++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm
@@ -33,6 +33,7 @@
//They can technically be in an ERT
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | ERT_SPAWN
species_cookie = /obj/item/reagent_containers/condiment/milk
+ mutantbutt = /obj/item/organ/internal/butt/skeletal //MASSMETA EDIT (butt_farts)
species_language_holder = /datum/language_holder/skeleton
bodypart_overrides = list(
diff --git a/code/modules/research/techweb/nodes/mining_nodes.dm b/code/modules/research/techweb/nodes/mining_nodes.dm
index 9fe888ab7ecd..9c0ab9d879d1 100644
--- a/code/modules/research/techweb/nodes/mining_nodes.dm
+++ b/code/modules/research/techweb/nodes/mining_nodes.dm
@@ -46,7 +46,6 @@
"mod_gps",
"mod_visor_meson",
"mesons",
- "cryptominer", // MASSMETA EDIT: Cryptoshit
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
announce_channels = list(RADIO_CHANNEL_SUPPLY)
diff --git a/code/modules/research/techweb/nodes/syndicate_nodes.dm b/code/modules/research/techweb/nodes/syndicate_nodes.dm
index d821bd57f69f..7743b9442f82 100644
--- a/code/modules/research/techweb/nodes/syndicate_nodes.dm
+++ b/code/modules/research/techweb/nodes/syndicate_nodes.dm
@@ -16,7 +16,6 @@
"rapidsyringe",
"suppressor",
"super_pointy_tape",
- "cryptominersyndie", // MASSMETA EDIT: Cryptoshit
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
hidden = TRUE
diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm
index 1d68c1b55eab..e8d0f4d440f0 100644
--- a/code/modules/surgery/bodyparts/head.dm
+++ b/code/modules/surgery/bodyparts/head.dm
@@ -8,7 +8,6 @@
body_part = HEAD
plaintext_zone = "head"
w_class = WEIGHT_CLASS_BULKY //Quite a hefty load
- slot_flags = ITEM_SLOT_BELT // MASSMETA EDIT: Nas'hrah moment
slowdown = 1 //Balancing measure
throw_range = 2 //No head bowling
px_x = 0
@@ -140,6 +139,10 @@
if(!(locate(/obj/item/organ/tongue) in src))
. += span_info("[real_name]'s tongue has been removed.")
+ //MASSMETA ADD BEGIN (heads_on_belts)
+ if(istype(src, /obj/item/bodypart/head))
+ . += span_info("You can wear it on you belt.")
+ //MASSMETA ADD END
/obj/item/bodypart/head/can_dismember(obj/item/item)
if (!can_dismember)
diff --git a/code/modules/unit_tests/worn_icons.dm b/code/modules/unit_tests/worn_icons.dm
index 38acff5efd9d..ae9eb30068b2 100644
--- a/code/modules/unit_tests/worn_icons.dm
+++ b/code/modules/unit_tests/worn_icons.dm
@@ -4,7 +4,7 @@
/// additional_icon_location is for downstream modularity support for finding missing sprites in additonal DMI file locations.
/// Make sure this location is also present in tools/deploy.sh
/// If you need additional paths ontop of this second one, you can add another generate_possible_icon_states_list("your/folder/path/") below the if(additional_icon_location) block in Run(), and make sure to add that path to tools/deploy.sh as well.
- var/additional_icon_location = null
+ var/additional_icon_location = "modular_meta/features/heads_on_belts/icons/" //MASSMETA CHANGE (heads_on_belts) этого требуют тесты
/datum/unit_test/worn_icons/proc/generate_possible_icon_states_list(directory_path)
if(!directory_path)
diff --git a/icons/map_icons/items/_item.dmi b/icons/map_icons/items/_item.dmi
index c81bfa7d4f4c..2cfda5253ff7 100644
Binary files a/icons/map_icons/items/_item.dmi and b/icons/map_icons/items/_item.dmi differ
diff --git a/interface/skin.dmf b/interface/skin.dmf
index 37728d4eab0a..c3fd8e02a05b 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -99,7 +99,7 @@ window "mainwindow"
//MASSMETA EDIT BEGIN (better_ui)
//icon = 'icons\\ui\\common\\tg_32.png'
- icon = 'modular_meta\\features\\better_ui\\icons\\massmeta_64.png'
+ icon = 'modular_meta\\tweaks\\better_ui\\icons\\massmeta_64.png'
//MASSMETA EDIT END
macro = "default"
menu = "menu"
diff --git a/massmeta/icons/obj/butts.dmi b/massmeta/icons/obj/butts.dmi
deleted file mode 100644
index 58b6ba739317..000000000000
Binary files a/massmeta/icons/obj/butts.dmi and /dev/null differ
diff --git a/massmeta/modular_meta_defines.dm b/massmeta/modular_meta_defines.dm
deleted file mode 100644
index e2e4a0f1560f..000000000000
--- a/massmeta/modular_meta_defines.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * На этот файл идёт переадресация из code/__DEFINES/~meta_defines_include.dm
- *
- * Все файлы должны быть в алфавитном порядке
- */
-
-// BEGIN_INCLUDE
-#include "~meta_defines\butt_furrt.dm"
-// END_INCLUDE
diff --git a/massmeta/modular_meta_features.dm b/massmeta/modular_meta_features.dm
index 3027bcd1b0ae..26b8c3f436a6 100644
--- a/massmeta/modular_meta_features.dm
+++ b/massmeta/modular_meta_features.dm
@@ -13,23 +13,8 @@
//master files (unsorted, TODO: need modularization)
-#include "code\modules\mob\living\carbon\human\emote.dm"
-#include "code\datums\components\crafting\makeshift.dm"
-#include "code\game\objects\items\devices\radio\radio.dm"
-#include "code\game\objects\items\storage\belt.dm"
-#include "code\game\objects\items\tools\crowbar.dm"
-#include "code\game\objects\items\tools\kitchen.dm"
-#include "code\game\objects\items\tools\multitool.dm"
-#include "code\game\objects\items\tools\screwdriver.dm"
-#include "code\game\objects\items\tools\weldingtool.dm"
-#include "code\game\objects\items\tools\wirecutters.dm"
-#include "code\game\objects\items\tools\wrench.dm"
#include "code\obj\items\clothing\belt.dm"
#include "code\datums\components\crafting\weapon_ammo.dm"
#include "code\modules\ammunition\ballistic\shotgun.dm"
#include "code\modules\projectiles\projectile\bullets\shotgun.dm"
#include "code\modules\map_vote.dm"
-
-//buts
-#include "code\modules\surgery\organs\internal\butts\butts.dm"
-#include "code\modules\surgery\organs\internal\butts\butts_init.dm"
diff --git a/massmeta/~meta_defines/butt_furrt.dm b/massmeta/~meta_defines/butt_furrt.dm
deleted file mode 100644
index e979285345c1..000000000000
--- a/massmeta/~meta_defines/butt_furrt.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-
-#define CHANNEL_MOB_SOUNDS 1009
-
-//Butt organ
-#define ORGAN_SLOT_BUTT "butt"
-
-///Butt bots
-#define BUTT_BOT "Buttbot"
-
-//Butt traits
-#define TRAIT_LOUD_ASS "loud_ass"
-#define TRAIT_UNSTABLE_ASS "unstable_ass"
-#define TRAIT_STABLE_ASS "stable_ass"
diff --git a/massmeta/~meta_defines/readme.md b/massmeta/~meta_defines/readme.md
deleted file mode 100644
index f4d6da596be1..000000000000
--- a/massmeta/~meta_defines/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## Тут лежат все наши Новые Defines, что мы определили в нашем модуле, они все добавлены в файле:
-
-**`massmeta/modular_meta_defines.dm`**
diff --git a/modular_meta/__modpack/assets_modpacks.dm b/modular_meta/__modpack/assets_modpacks.dm
index f722c298f701..1f014e80a9b8 100644
--- a/modular_meta/__modpack/assets_modpacks.dm
+++ b/modular_meta/__modpack/assets_modpacks.dm
@@ -4,18 +4,18 @@
name = "modpacks"
/datum/asset/spritesheet_batched/modpacks/create_spritesheets()
- insert_all_icons("modpack", MODPACKS_SET)
// catch all modpack's previews which are pulling icons from preview.dmi files
- var/icon_placeholder = "default"
+ // not from .png due of special work insert_icon() with uni_icon()
for(var/datum/modpack/this_modpack as anything in subtypesof(/datum/modpack))
if(!this_modpack.visible)
continue
var/icon = initial(this_modpack.icon)
- var/icon_state = initial(this_modpack.id)
+ var/modpack_id = initial(this_modpack.id)
+
if(icon == MODPACKS_SET)
- insert_icon("modpack-[icon_state]", uni_icon(icon, icon_placeholder))
+ insert_icon("modpack-[modpack_id]", uni_icon(icon, "no-preview"))
else
- insert_icon("modpack-[icon_state]", uni_icon(icon, icon_state))
+ insert_icon("modpack-[modpack_id]", uni_icon(icon, "preview"))
#undef MODPACKS_SET
diff --git a/modular_meta/__modpack/mods_icon_placeholder.dmi b/modular_meta/__modpack/mods_icon_placeholder.dmi
index aedaa85a4930..e57aa1b5fcd1 100644
Binary files a/modular_meta/__modpack/mods_icon_placeholder.dmi and b/modular_meta/__modpack/mods_icon_placeholder.dmi differ
diff --git a/modular_meta/features/additional_circuit/preview.dmi b/modular_meta/features/additional_circuit/preview.dmi
index 36fe0779eae1..62c9a9c69804 100644
Binary files a/modular_meta/features/additional_circuit/preview.dmi and b/modular_meta/features/additional_circuit/preview.dmi differ
diff --git a/modular_meta/features/antagonists/bloodsuckers/code/objects/bloodsucker_blood_containers.dm b/modular_meta/features/antagonists/bloodsuckers/code/objects/bloodsucker_blood_containers.dm
index 3c5a1b0c97cd..4bfbde81f4c6 100644
--- a/modular_meta/features/antagonists/bloodsuckers/code/objects/bloodsucker_blood_containers.dm
+++ b/modular_meta/features/antagonists/bloodsuckers/code/objects/bloodsucker_blood_containers.dm
@@ -41,7 +41,7 @@
///Bloodbag of Bloodsucker blood (used by Vassals only)
/obj/item/reagent_containers/blood/o_minus/bloodsucker
name = "blood pack"
- blood_type = /datum/reagent/blood/bloodsucker
+ blood_type = BLOOD_TYPE_VAMPIRE
/obj/item/reagent_containers/blood/o_minus/bloodsucker/examine(mob/user)
. = ..()
diff --git a/modular_meta/features/antagonists/preview.dmi b/modular_meta/features/antagonists/preview.dmi
index 9b3f73e5e9ef..a08a036c2570 100644
Binary files a/modular_meta/features/antagonists/preview.dmi and b/modular_meta/features/antagonists/preview.dmi differ
diff --git a/modular_meta/features/antagonists/sinful_demon/code/sins/sloth.dm b/modular_meta/features/antagonists/sinful_demon/code/sins/sloth.dm
index 0ed44e64fc3d..722c793a6843 100644
--- a/modular_meta/features/antagonists/sinful_demon/code/sins/sloth.dm
+++ b/modular_meta/features/antagonists/sinful_demon/code/sins/sloth.dm
@@ -54,6 +54,6 @@
return TRUE
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/sin/sloth
+ name = "Sloth Demonic Jaunt"
cooldown_time = 30 SECONDS
-
jaunt_duration = 1 SECONDS
diff --git a/modular_meta/features/butt_farts/code/butt_bots.dm b/modular_meta/features/butt_farts/code/butt_bots.dm
new file mode 100644
index 000000000000..f02adf5f2ff5
--- /dev/null
+++ b/modular_meta/features/butt_farts/code/butt_bots.dm
@@ -0,0 +1,102 @@
+/mob/living/basic/bot/buttbot
+ name = "\improper buttbot"
+ desc = "butts"
+ icon = 'modular_meta/features/butt_farts/icons/butts.dmi'
+ icon_state = "buttbot"
+ density = FALSE
+ anchored = FALSE
+ health = 25
+ maxHealth = 25
+ bot_type = BUTT_BOT
+ pass_flags = PASSMOB
+ var/cooling_down = FALSE
+ var/butt_probability = 15
+ var/listen_probability = 30
+
+//Buttbot Production
+/obj/item/organ/internal/butt/attackby(obj/item/I, mob/living/user)
+ if(istype(I, /obj/item/bodypart/arm/left/robot) || istype(I, /obj/item/bodypart/arm/right/robot))
+ var/mob/living/basic/bot/buttbot/new_butt = new(get_turf(src))
+ qdel(I)
+ switch(src.type) //A BUTTBOT FOR EVERYONE!
+ if(/obj/item/organ/internal/butt/atomic)
+ new_butt.name = "Atomic Buttbot"
+ new_butt.desc = "Science has gone too far."
+ new_butt.icon_state = "buttbot_atomic"
+ if(/obj/item/organ/internal/butt/bluespace)
+ new_butt.name = "Bluespace Buttbot"
+ new_butt.desc = "The peak of Nanotrasen design."
+ new_butt.icon_state = "buttbot_bluespace"
+ if(/obj/item/organ/internal/butt/clown)
+ new_butt.name = "Bananium Buttbot"
+ new_butt.desc = "Didn't you know clown asses were made out of Bananium?"
+ new_butt.icon_state = "buttbot_clown"
+ new_butt.AddComponent(/datum/component/slippery, 40)
+ if(/obj/item/organ/internal/butt/cyber)
+ new_butt.name = "Cybernetic Buttbot"
+ new_butt.desc = "LAW ONE: BUTT"
+ new_butt.icon_state = "buttbot_cyber"
+ if(/obj/item/organ/internal/butt/iron)
+ new_butt.name = "Iron Buttbot"
+ new_butt.desc = "We can rebutt him, we have the technology."
+ new_butt.icon_state = "buttbot_iron"
+ if(/obj/item/organ/internal/butt/plasma)
+ new_butt.name = "Plasma Buttbot"
+ new_butt.desc = "Safer here than on it's owner."
+ new_butt.icon_state = "buttbot_plasma"
+ if(/obj/item/organ/internal/butt/skeletal)
+ new_butt.name = "Skeletal Buttbot"
+ new_butt.desc = "Rattle Me Booty!"
+ new_butt.icon_state = "buttbot_skeleton"
+ if(/obj/item/organ/internal/butt/xeno)
+ new_butt.name = "Xenomorph Buttbot"
+ new_butt.desc = "hiss!"
+ new_butt.icon_state = "buttbot_xeno"
+
+ playsound(src, pick(
+ 'modular_meta/features/butt_farts/sound/farts/fart1.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart2.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart3.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart4.ogg',
+ ), 25 ,use_reverb = TRUE, channel = CHANNEL_FART_SOUNDS)
+ qdel(src)
+
+/mob/living/basic/bot/buttbot/emag_act(mob/user)
+ if(!(bot_access_flags & BOT_COVER_EMAGGED))
+ visible_message("[user] swipes a card through the [src]'s crack!", "You swipe a card through the [src]'s crack.")
+ listen_probability = 75
+ butt_probability = 30
+ bot_access_flags |= BOT_COVER_EMAGGED
+ var/turf/butt = get_turf(src)
+ butt.atmos_spawn_air("miasma=5;TEMP=310.15")
+ playsound(src, pick(
+ 'modular_meta/features/butt_farts/sound/farts/fart1.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart2.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart3.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart4.ogg',
+ ), 100 ,use_reverb = TRUE, channel = CHANNEL_FART_SOUNDS)
+
+/mob/living/basic/bot/buttbot/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, list/message_mods, message_range)
+ . = ..()
+ if(!cooling_down && prob(listen_probability) && ishuman(speaker))
+ cooling_down = TRUE
+ var/list/split_message = splittext(raw_message, " ")
+ for (var/i in 1 to length(split_message))
+ if(prob(butt_probability))
+ split_message[i] = pick("butt", "butts")
+ if((bot_access_flags & BOT_COVER_EMAGGED))
+ var/turf/butt = get_turf(src)
+ butt.atmos_spawn_air("miasma=5;TEMP=310.15")
+ var/joined_text = jointext(split_message, " ")
+ if(!findtext(joined_text, "butt")) //We must butt, or else.
+ cooling_down = FALSE
+ return
+ say(joined_text)
+ playsound(src, pick(
+ 'modular_meta/features/butt_farts/sound/farts/fart1.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart2.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart3.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart4.ogg',
+ ), 100 ,use_reverb = TRUE, channel = CHANNEL_FART_SOUNDS)
+ spawn(20)
+ cooling_down = FALSE
diff --git a/massmeta/code/modules/mob/living/carbon/human/emote.dm b/modular_meta/features/butt_farts/code/butt_emote.dm
similarity index 75%
rename from massmeta/code/modules/mob/living/carbon/human/emote.dm
rename to modular_meta/features/butt_farts/code/butt_emote.dm
index 7b5ec27497dc..1e0436f914ee 100644
--- a/massmeta/code/modules/mob/living/carbon/human/emote.dm
+++ b/modular_meta/features/butt_farts/code/butt_emote.dm
@@ -6,24 +6,24 @@
if(issilicon(user))
user.visible_message("[user] lets out a synthesized fart!", "You let out a synthesized fart!")
playsound(user, pick(
- 'massmeta/sounds/fartts/rbf1.ogg',
- 'massmeta/sounds/fartts/rbf2.ogg',
- 'massmeta/sounds/fartts/rbf3.ogg',
- 'massmeta/sounds/fartts/rbf4.ogg',
- 'massmeta/sounds/fartts/rbf5.ogg',
- 'massmeta/sounds/fartts/rbf6.ogg',
- 'massmeta/sounds/fartts/rbf7.ogg',
- 'massmeta/sounds/fartts/rbf8.ogg',
- 'massmeta/sounds/fartts/rbf9.ogg',
- 'massmeta/sounds/fartts/rbf10.ogg',
- 'massmeta/sounds/fartts/rbf11.ogg',
- 'massmeta/sounds/fartts/rbf12.ogg',
- 'massmeta/sounds/fartts/rbf13.ogg',
- 'massmeta/sounds/fartts/rbf14.ogg',
- 'massmeta/sounds/fartts/rbf15.ogg',
- 'massmeta/sounds/fartts/rbf16.ogg',
- 'massmeta/sounds/fartts/rbf17.ogg',
- 'massmeta/sounds/fartts/rbf18.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf1.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf2.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf3.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf4.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf5.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf6.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf7.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf8.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf9.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf10.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf11.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf12.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf13.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf14.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf15.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf16.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf17.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/rbf18.ogg',
), 50, TRUE)
return
. = ..()
@@ -64,7 +64,7 @@
Person.Paralyze(15)
to_chat(Person, "[Person] attempts to fart on the [Holy], uh oh.")
playsound(user,'sound/effects/magic/lightningshock.ogg', 50, 1)
- playsound(user, 'massmeta/sounds/fartts/dagothgod.ogg', 80)
+ playsound(user, 'modular_meta/features/butt_farts/sound/farts/dagothgod.ogg', 80)
Person.electrocution_animation(15)
spawn(15)
to_chat(Person,"What a grand and intoxicating innocence. Perish.")
@@ -72,7 +72,7 @@
dyn_explosion(Location, 1, 0)
return
- playsound(ass_holder, "massmeta/sounds/fartts/superfart.ogg", 100, FALSE, pressure_affected = FALSE)
+ playsound(ass_holder, "modular_meta/features/butt_farts/sound/farts/superfart.ogg", 100, FALSE, pressure_affected = FALSE)
spawn(8)
Location = get_turf(user)
switch(rand(1000))
diff --git a/massmeta/code/modules/surgery/organs/internal/butts/butts_init.dm b/modular_meta/features/butt_farts/code/butt_quirks.dm
similarity index 56%
rename from massmeta/code/modules/surgery/organs/internal/butts/butts_init.dm
rename to modular_meta/features/butt_farts/code/butt_quirks.dm
index 362aee5daecc..85c394bcfe94 100644
--- a/massmeta/code/modules/surgery/organs/internal/butts/butts_init.dm
+++ b/modular_meta/features/butt_farts/code/butt_quirks.dm
@@ -1,25 +1,3 @@
-//Initialize all butts spawn proc(if it can be) here.
-
-//clown butt
-/datum/job/clown/after_spawn(mob/living/spawned, client/player_client)
- . = ..()
- var/obj/item/organ/internal/butt/butt = spawned.get_organ_slot(ORGAN_SLOT_BUTT)
- if(butt)
- butt.Remove(spawned, 1)
- QDEL_NULL(butt)
- butt = new/obj/item/organ/internal/butt/clown
- butt.Insert(spawned)
-
-//heal butt
-/mob/living/carbon/regenerate_organs(remove_hazardous = FALSE)
- . = ..()
- var/obj/item/organ/internal/butt/butt = get_organ_slot(ORGAN_SLOT_BUTT)
- if(!butt)
- butt = new()
- butt.Insert(src)
- butt.set_organ_damage(0)
-
-//Butt quirks
/datum/quirk/stable_ass
name = "Stable Rear"
desc = "Your rear is far more robust than average, falling off less often than usual."
diff --git a/massmeta/code/modules/surgery/organs/internal/butts/butts.dm b/modular_meta/features/butt_farts/code/butts.dm
similarity index 56%
rename from massmeta/code/modules/surgery/organs/internal/butts/butts.dm
rename to modular_meta/features/butt_farts/code/butts.dm
index 1eada36f3b25..9f72d4dfe0a9 100644
--- a/massmeta/code/modules/surgery/organs/internal/butts/butts.dm
+++ b/modular_meta/features/butt_farts/code/butts.dm
@@ -1,19 +1,24 @@
/obj/item/organ/internal/butt
name = "butt"
desc = "extremely treasured body part"
- worn_icon = 'massmeta/icons/obj/worn_butts.dmi' //Wearable on the head
- icon = 'massmeta/icons/obj/butts.dmi'
+ worn_icon = 'modular_meta/features/butt_farts/icons/worn_butts.dmi' //Wearable on the head
+ icon = 'modular_meta/features/butt_farts/icons/butts.dmi'
icon_state = "ass"
zone = BODY_ZONE_PRECISE_GROIN
slot = ORGAN_SLOT_BUTT
throw_speed = 1
force = 4
embed_type = /datum/embedding/butt
- hitsound = 'massmeta/sounds/fartts/fart1.ogg'
+ hitsound = 'modular_meta/features/butt_farts/sound/farts/fart1.ogg'
body_parts_covered = HEAD
slot_flags = ITEM_SLOT_HEAD
- var/list/sound_effect = list('massmeta/sounds/fartts/fart1.ogg', 'massmeta/sounds/fartts/fart2.ogg', 'massmeta/sounds/fartts/fart3.ogg', 'massmeta/sounds/fartts/fart4.ogg')
- var/atmos_gas = "miasma=0.25;TEMP=310.15" //310.15 is body temperature
+ var/list/sound_effect = list(
+ 'modular_meta/features/butt_farts/sound/farts/fart1.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart2.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart3.ogg',
+ 'modular_meta/features/butt_farts/sound/farts/fart4.ogg'
+ )
+ var/atmos_gas = "miasma=0.25;TEMP=310.15" //310.15 is body temperature (TODO сделать зависимость от core temp)
var/fart_instability = 1 //Percent chance to lose your rear each fart.
var/cooling_down = FALSE
@@ -28,7 +33,12 @@
/obj/item/organ/internal/butt/atomic
name = "Atomic Ass"
desc = "A highly radioactive and unstable posterior. Anyone with this is a walking war crime."
- sound_effect = list("sound/items/geiger/low1.ogg", "sound/items/geiger/low2.ogg", "sound/items/geiger/low3.ogg", "sound/items/geiger/low4.ogg")
+ sound_effect = list(
+ "sound/items/geiger/low1.ogg",
+ "sound/items/geiger/low2.ogg",
+ "sound/items/geiger/low3.ogg",
+ "sound/items/geiger/low4.ogg"
+ )
fart_instability = 5
atmos_gas = "tritium=5;TEMP=600"
icon_state = "atomicass"
@@ -42,7 +52,7 @@
cooling_down = TRUE
user.audible_message("[user] farts.")
if(prob(fart_instability))
- playsound(user, "sound/machines/alarm.ogg", 100, FALSE, 50, ignore_walls=TRUE, channel = CHANNEL_MOB_SOUNDS)
+ playsound(user, "sound/machines/alarm.ogg", 100, FALSE, 50, ignore_walls=TRUE, channel = CHANNEL_FART_SOUNDS)
minor_announce("The detonation of a nuclear posterior has been detected in your area. All crew are required to exit the blast radius.", "Nanotrasen Atomics", 0)
Person.Paralyze(120)
Person.electrocution_animation(120)
@@ -51,7 +61,7 @@
dyn_explosion(Location, 20,10)
cooling_down = FALSE
else
- playsound(user, pick(sound_effect), 50, TRUE, channel = CHANNEL_MOB_SOUNDS)
+ playsound(user, pick(sound_effect), 50, TRUE, channel = CHANNEL_FART_SOUNDS)
Location.atmos_spawn_air(atmos_gas)
spawn(20)
cooling_down = FALSE
@@ -71,7 +81,12 @@
name = "Flatulence Simulator"
desc = "Designed from the ground up to create advanced humor."
icon_state = "roboass"
- sound_effect = list('sound/machines/buzz/buzz-sigh.ogg', 'sound/machines/buzz/buzz-two.ogg', 'sound/machines/terminal/terminal_error.ogg', 'sound/items/weapons/ring.ogg')
+ sound_effect = list(
+ 'sound/machines/buzz/buzz-sigh.ogg',
+ 'sound/machines/buzz/buzz-two.ogg',
+ 'sound/machines/terminal/terminal_error.ogg',
+ 'sound/items/weapons/ring.ogg'
+ )
atmos_gas = "co2=0.25;TEMP=310.15"
//CLOWN ASS
@@ -83,7 +98,7 @@
icon_state = "clownass"
sound_effect = list('sound/items/party_horn.ogg', 'sound/items/bikehorn.ogg')
-/obj/item/organ/internal/butt/clown/Initialize()
+/obj/item/organ/internal/butt/clown/Initialize(mapload)
. = ..()
AddComponent(/datum/component/slippery, 40)
@@ -106,14 +121,14 @@
name = "Skeletal Butt"
desc = "You don't understand how this works!"
atmos_gas = "o2=0.25;TEMP=310.15"
- sound_effect = list("monkestation/sound/voice/laugh/skeleton/skeleton_laugh.ogg")
+ sound_effect = list("modular_meta/features/butt_farts/sound/skeleton_laugh.ogg")
icon_state = "skeleass"
//PLASMAMAN ASS
/obj/item/organ/internal/butt/plasma
name = "Plasmaman Butt"
desc = "You REALLY don't understand how this works!"
- sound_effect = list("monkestation/sound/voice/laugh/skeleton/skeleton_laugh.ogg")
+ sound_effect = list("modular_meta/features/butt_farts/sound/skeleton_laugh.ogg")
fart_instability = 5
atmos_gas = "plasma=0.25;TEMP=310.15"
icon_state = "plasmaass"
@@ -131,19 +146,19 @@
desc = "Truly, the trophy of champions."
icon_state = "xenoass"
-//IMMOVABLE ASS
+//IMMOVABLE ASS (TODO: сделать как смешной аналог ивента с палкой)
/obj/effect/immovablerod/butt
name = "immovable butt"
desc = "No, really, what the fuck is that?"
- icon = 'massmeta/icons/obj/butts.dmi'
+ icon = 'modular_meta/features/butt_farts/icons/butts.dmi'
icon_state = "ass"
-/obj/effect/immovablerod/butt/Initialize()
+/obj/effect/immovablerod/butt/Initialize(mapload)
. = ..()
src.SpinAnimation(5, -1)
/obj/effect/immovablerod/butt/Bump(atom/clong)
- playsound(src,'massmeta/sounds/fartts/fart1.ogg', 100, TRUE, 10, pressure_affected = FALSE)
+ playsound(src,'modular_meta/features/butt_farts/sound/farts/fart1.ogg', 100, TRUE, 10, pressure_affected = FALSE)
..()
//ACTUAL FART PROC
@@ -172,7 +187,7 @@
Person.Paralyze(15)
Person.visible_message("[Person] attempts to fart on the [Holy], uh oh.","What a grand and intoxicating innocence. Perish.")
playsound(user,'sound/effects/magic/lightningshock.ogg', 50, 1)
- playsound(user, 'massmeta/sounds/fartts/dagothgod.ogg', 80)
+ playsound(user, 'modular_meta/features/butt_farts/sound/farts/dagothgod.ogg', 80)
Person.electrocution_animation(15)
spawn(15)
Person.gib()
@@ -196,7 +211,7 @@
hit_target = TRUE
break
if(!hit_target)
- user.audible_message("[pick(world.file2list("massmeta/strings/farts.txt"))]", audible_message_flags = list(CHATMESSAGE_EMOTE = TRUE))
+ user.audible_message("[pick(world.file2list("modular_meta/features/butt_farts/strings/farts.txt"))]", audible_message_flags = list(CHATMESSAGE_EMOTE = TRUE))
//SOUND HANDLING
@@ -222,93 +237,3 @@
spawn(15)
cooling_down = FALSE
-
-
-//Buttbot Production
-/obj/item/organ/internal/butt/attackby(obj/item/I, mob/living/user)
- if(istype(I, /obj/item/bodypart/arm/left/robot) || istype(I, /obj/item/bodypart/arm/right/robot))
- var/mob/living/basic/bot/buttbot/new_butt = new(get_turf(src))
- qdel(I)
- switch(src.type) //A BUTTBOT FOR EVERYONE!
- if(/obj/item/organ/internal/butt/atomic)
- new_butt.name = "Atomic Buttbot"
- new_butt.desc = "Science has gone too far."
- new_butt.icon_state = "buttbot_atomic"
- if(/obj/item/organ/internal/butt/bluespace)
- new_butt.name = "Bluespace Buttbot"
- new_butt.desc = "The peak of Nanotrasen design."
- new_butt.icon_state = "buttbot_bluespace"
- if(/obj/item/organ/internal/butt/clown)
- new_butt.name = "Bananium Buttbot"
- new_butt.desc = "Didn't you know clown asses were made out of Bananium?"
- new_butt.icon_state = "buttbot_clown"
- new_butt.AddComponent(/datum/component/slippery, 40)
- if(/obj/item/organ/internal/butt/cyber)
- new_butt.name = "Cybernetic Buttbot"
- new_butt.desc = "LAW ONE: BUTT"
- new_butt.icon_state = "buttbot_cyber"
- if(/obj/item/organ/internal/butt/iron)
- new_butt.name = "Iron Buttbot"
- new_butt.desc = "We can rebutt him, we have the technology."
- new_butt.icon_state = "buttbot_iron"
- if(/obj/item/organ/internal/butt/plasma)
- new_butt.name = "Plasma Buttbot"
- new_butt.desc = "Safer here than on it's owner."
- new_butt.icon_state = "buttbot_plasma"
- if(/obj/item/organ/internal/butt/skeletal)
- new_butt.name = "Skeletal Buttbot"
- new_butt.desc = "Rattle Me Booty!"
- new_butt.icon_state = "buttbot_skeleton"
- if(/obj/item/organ/internal/butt/xeno)
- new_butt.name = "Xenomorph Buttbot"
- new_butt.desc = "hiss!"
- new_butt.icon_state = "buttbot_xeno"
-
- playsound(src, pick('massmeta/sounds/fartts/fart1.ogg', 'massmeta/sounds/fartts/fart2.ogg', 'massmeta/sounds/fartts/fart3.ogg', 'massmeta/sounds/fartts/fart4.ogg'), 25 ,use_reverb = TRUE, channel = CHANNEL_MOB_SOUNDS)
- qdel(src)
-
-/mob/living/basic/bot/buttbot
- name = "\improper buttbot"
- desc = "butts"
- icon = 'massmeta/icons/obj/butts.dmi'
- icon_state = "buttbot"
- density = FALSE
- anchored = FALSE
- health = 25
- maxHealth = 25
- bot_type = BUTT_BOT
- pass_flags = PASSMOB
- var/cooling_down = FALSE
- var/butt_probability = 15
- var/listen_probability = 30
-
-/mob/living/basic/bot/buttbot/emag_act(mob/user)
- if(!(bot_access_flags & BOT_COVER_EMAGGED))
- visible_message("[user] swipes a card through the [src]'s crack!", "You swipe a card through the [src]'s crack.")
- listen_probability = 75
- butt_probability = 30
- bot_access_flags |= BOT_COVER_EMAGGED
- var/turf/butt = get_turf(src)
- butt.atmos_spawn_air("miasma=5;TEMP=310.15")
- playsound(src, pick('massmeta/sounds/fartts/fart1.ogg', 'massmeta/sounds/fartts/fart2.ogg', 'massmeta/sounds/fartts/fart3.ogg', 'massmeta/sounds/fartts/fart4.ogg'), 100 ,use_reverb = TRUE)
-
-/mob/living/basic/bot/buttbot/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, list/message_mods, message_range)
- . = ..()
- if(!cooling_down && prob(listen_probability) && ishuman(speaker))
- cooling_down = TRUE
- var/list/split_message = splittext(raw_message, " ")
- for (var/i in 1 to length(split_message))
- if(prob(butt_probability))
- split_message[i] = pick("butt", "butts")
- if((bot_access_flags & BOT_COVER_EMAGGED))
- var/turf/butt = get_turf(src)
- butt.atmos_spawn_air("miasma=5;TEMP=310.15")
- var/joined_text = jointext(split_message, " ")
- if(!findtext(joined_text, "butt")) //We must butt, or else.
- cooling_down = FALSE
- return
- say(joined_text)
- playsound(src, pick('massmeta/sounds/fartts/fart1.ogg', 'massmeta/sounds/fartts/fart2.ogg', 'massmeta/sounds/fartts/fart3.ogg', 'massmeta/sounds/fartts/fart4.ogg'), 100 ,use_reverb = TRUE)
- spawn(20)
- cooling_down = FALSE
-
diff --git a/modular_meta/features/butt_farts/code/butts_init.dm b/modular_meta/features/butt_farts/code/butts_init.dm
new file mode 100644
index 000000000000..af0412266913
--- /dev/null
+++ b/modular_meta/features/butt_farts/code/butts_init.dm
@@ -0,0 +1,20 @@
+//Initialize all butts spawn proc(if it can be) here.
+
+//clown butt
+/datum/job/clown/after_spawn(mob/living/spawned, client/player_client)
+ . = ..()
+ var/obj/item/organ/internal/butt/butt = spawned.get_organ_slot(ORGAN_SLOT_BUTT)
+ if(butt)
+ butt.Remove(spawned, 1)
+ QDEL_NULL(butt)
+ butt = new/obj/item/organ/internal/butt/clown
+ butt.Insert(spawned)
+
+//heal butt
+/mob/living/carbon/regenerate_organs(remove_hazardous = FALSE)
+ . = ..()
+ var/obj/item/organ/internal/butt/butt = get_organ_slot(ORGAN_SLOT_BUTT)
+ if(!butt)
+ butt = new()
+ butt.Insert(src)
+ butt.set_organ_damage(0)
diff --git a/modular_meta/features/butt_farts/icons/butts.dmi b/modular_meta/features/butt_farts/icons/butts.dmi
new file mode 100644
index 000000000000..3f416895f127
Binary files /dev/null and b/modular_meta/features/butt_farts/icons/butts.dmi differ
diff --git a/massmeta/icons/obj/worn_butts.dmi b/modular_meta/features/butt_farts/icons/worn_butts.dmi
similarity index 100%
rename from massmeta/icons/obj/worn_butts.dmi
rename to modular_meta/features/butt_farts/icons/worn_butts.dmi
diff --git a/modular_meta/features/butt_farts/includes.dm b/modular_meta/features/butt_farts/includes.dm
new file mode 100644
index 000000000000..54fbb053e40a
--- /dev/null
+++ b/modular_meta/features/butt_farts/includes.dm
@@ -0,0 +1,13 @@
+#include "code\butt_bots.dm"
+#include "code\butt_emote.dm"
+#include "code\butt_quirks.dm"
+#include "code\butts.dm"
+#include "code\butts_init.dm"
+
+/datum/modpack/butt_farts
+ id = "butt_farts"
+ icon = 'modular_meta/features/butt_farts/preview.dmi'
+ name = "Жепки"
+ group = "Features"
+ desc = "Пук пук?"
+ author = "Xackii"
diff --git a/modular_meta/features/butt_farts/preview.dmi b/modular_meta/features/butt_farts/preview.dmi
new file mode 100644
index 000000000000..58ecfedab1f4
Binary files /dev/null and b/modular_meta/features/butt_farts/preview.dmi differ
diff --git a/massmeta/sounds/fartts/dagothgod.ogg b/modular_meta/features/butt_farts/sound/farts/dagothgod.ogg
similarity index 100%
rename from massmeta/sounds/fartts/dagothgod.ogg
rename to modular_meta/features/butt_farts/sound/farts/dagothgod.ogg
diff --git a/massmeta/sounds/fartts/fart1.ogg b/modular_meta/features/butt_farts/sound/farts/fart1.ogg
similarity index 100%
rename from massmeta/sounds/fartts/fart1.ogg
rename to modular_meta/features/butt_farts/sound/farts/fart1.ogg
diff --git a/massmeta/sounds/fartts/fart2.ogg b/modular_meta/features/butt_farts/sound/farts/fart2.ogg
similarity index 100%
rename from massmeta/sounds/fartts/fart2.ogg
rename to modular_meta/features/butt_farts/sound/farts/fart2.ogg
diff --git a/massmeta/sounds/fartts/fart3.ogg b/modular_meta/features/butt_farts/sound/farts/fart3.ogg
similarity index 100%
rename from massmeta/sounds/fartts/fart3.ogg
rename to modular_meta/features/butt_farts/sound/farts/fart3.ogg
diff --git a/massmeta/sounds/fartts/fart4.ogg b/modular_meta/features/butt_farts/sound/farts/fart4.ogg
similarity index 100%
rename from massmeta/sounds/fartts/fart4.ogg
rename to modular_meta/features/butt_farts/sound/farts/fart4.ogg
diff --git a/massmeta/sounds/fartts/rbf1.ogg b/modular_meta/features/butt_farts/sound/farts/rbf1.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf1.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf1.ogg
diff --git a/massmeta/sounds/fartts/rbf10.ogg b/modular_meta/features/butt_farts/sound/farts/rbf10.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf10.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf10.ogg
diff --git a/massmeta/sounds/fartts/rbf11.ogg b/modular_meta/features/butt_farts/sound/farts/rbf11.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf11.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf11.ogg
diff --git a/massmeta/sounds/fartts/rbf12.ogg b/modular_meta/features/butt_farts/sound/farts/rbf12.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf12.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf12.ogg
diff --git a/massmeta/sounds/fartts/rbf13.ogg b/modular_meta/features/butt_farts/sound/farts/rbf13.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf13.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf13.ogg
diff --git a/massmeta/sounds/fartts/rbf14.ogg b/modular_meta/features/butt_farts/sound/farts/rbf14.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf14.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf14.ogg
diff --git a/massmeta/sounds/fartts/rbf15.ogg b/modular_meta/features/butt_farts/sound/farts/rbf15.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf15.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf15.ogg
diff --git a/massmeta/sounds/fartts/rbf16.ogg b/modular_meta/features/butt_farts/sound/farts/rbf16.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf16.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf16.ogg
diff --git a/massmeta/sounds/fartts/rbf17.ogg b/modular_meta/features/butt_farts/sound/farts/rbf17.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf17.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf17.ogg
diff --git a/massmeta/sounds/fartts/rbf18.ogg b/modular_meta/features/butt_farts/sound/farts/rbf18.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf18.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf18.ogg
diff --git a/massmeta/sounds/fartts/rbf2.ogg b/modular_meta/features/butt_farts/sound/farts/rbf2.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf2.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf2.ogg
diff --git a/massmeta/sounds/fartts/rbf3.ogg b/modular_meta/features/butt_farts/sound/farts/rbf3.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf3.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf3.ogg
diff --git a/massmeta/sounds/fartts/rbf4.ogg b/modular_meta/features/butt_farts/sound/farts/rbf4.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf4.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf4.ogg
diff --git a/massmeta/sounds/fartts/rbf5.ogg b/modular_meta/features/butt_farts/sound/farts/rbf5.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf5.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf5.ogg
diff --git a/massmeta/sounds/fartts/rbf6.ogg b/modular_meta/features/butt_farts/sound/farts/rbf6.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf6.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf6.ogg
diff --git a/massmeta/sounds/fartts/rbf7.ogg b/modular_meta/features/butt_farts/sound/farts/rbf7.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf7.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf7.ogg
diff --git a/massmeta/sounds/fartts/rbf8.ogg b/modular_meta/features/butt_farts/sound/farts/rbf8.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf8.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf8.ogg
diff --git a/massmeta/sounds/fartts/rbf9.ogg b/modular_meta/features/butt_farts/sound/farts/rbf9.ogg
similarity index 100%
rename from massmeta/sounds/fartts/rbf9.ogg
rename to modular_meta/features/butt_farts/sound/farts/rbf9.ogg
diff --git a/massmeta/sounds/fartts/superfart.ogg b/modular_meta/features/butt_farts/sound/farts/superfart.ogg
similarity index 100%
rename from massmeta/sounds/fartts/superfart.ogg
rename to modular_meta/features/butt_farts/sound/farts/superfart.ogg
diff --git a/modular_meta/features/butt_farts/sound/skeleton_laugh.ogg b/modular_meta/features/butt_farts/sound/skeleton_laugh.ogg
new file mode 100644
index 000000000000..b6e147904023
Binary files /dev/null and b/modular_meta/features/butt_farts/sound/skeleton_laugh.ogg differ
diff --git a/massmeta/strings/farts.txt b/modular_meta/features/butt_farts/strings/farts.txt
similarity index 100%
rename from massmeta/strings/farts.txt
rename to modular_meta/features/butt_farts/strings/farts.txt
diff --git a/modular_meta/features/cargo_extended/preview.dmi b/modular_meta/features/cargo_extended/preview.dmi
index 385a908d28a9..43f88a069c66 100644
Binary files a/modular_meta/features/cargo_extended/preview.dmi and b/modular_meta/features/cargo_extended/preview.dmi differ
diff --git a/modular_meta/features/cheburek_car/preview.dmi b/modular_meta/features/cheburek_car/preview.dmi
index ad042b50fd87..ffe06e2372d7 100644
Binary files a/modular_meta/features/cheburek_car/preview.dmi and b/modular_meta/features/cheburek_car/preview.dmi differ
diff --git a/modular_meta/features/clown_traitor_sound/preview.dmi b/modular_meta/features/clown_traitor_sound/preview.dmi
index 3c7a0a1dfac4..18732fe241f2 100644
Binary files a/modular_meta/features/clown_traitor_sound/preview.dmi and b/modular_meta/features/clown_traitor_sound/preview.dmi differ
diff --git a/modular_meta/features/copytech/preview.dmi b/modular_meta/features/copytech/preview.dmi
index 00c988f360e2..a36db16cad5e 100644
Binary files a/modular_meta/features/copytech/preview.dmi and b/modular_meta/features/copytech/preview.dmi differ
diff --git a/modular_meta/features/deathmatch/preview.dmi b/modular_meta/features/deathmatch/preview.dmi
index 6d40c1ff4acf..ec5b3e101631 100644
Binary files a/modular_meta/features/deathmatch/preview.dmi and b/modular_meta/features/deathmatch/preview.dmi differ
diff --git a/modular_meta/features/kumiss_beverage/code/kumiss_reagent.dm b/modular_meta/features/kumiss_beverage/code/kumiss_reagent.dm
index 5ea67a224936..a35e327bcc0d 100644
--- a/modular_meta/features/kumiss_beverage/code/kumiss_reagent.dm
+++ b/modular_meta/features/kumiss_beverage/code/kumiss_reagent.dm
@@ -10,7 +10,7 @@
ph = 7
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
default_container = /obj/item/reagent_containers/cup/glass/bottle/kumiss
- var/hymningrn = FALSE
+ var/hymningrn = 0
/datum/reagent/consumable/kumiss/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
. = ..()
@@ -25,61 +25,20 @@
/datum/reagent/consumable/kumiss/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired)
. = ..()
- if(hymningrn == FALSE)
- hymningrn = TRUE
- to_chat(affected_mob, span_warning("Қымыз тым көп іштім деп ойлаймын..."))
- to_chat(affected_mob, span_warning("You feel something coming from inside you..."))
- sleep(200)
- to_chat(affected_mob, span_warning("You can no longer resist!"))
- sleep(200)
- to_chat(affected_mob, span_warning("You feel the Қазақстан as it absorbs every last bit of Kumiss in you to empower!"))
- affected_mob.reagents.remove_reagent(type, 1000 * REM * seconds_per_tick)
- sleep(100)
- to_chat(affected_mob, span_warning("It works! IT WORKS! Қазақстан IS STRONGER THAN EVER BEFORE! YOU CAN NO LONGER HOLD IT..."))
- sleep(20)
- // гимн поехал
- affected_mob.say("Алтын күн аспаны,", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Алтын дән даласы,", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Ерліктің дастаны –", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Еліме қарашы!", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Ежелден ер деген,", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Даңқымыз шықты ғой,", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Намысын бермеген,", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Қазағым мықты ғой!", forced = /datum/reagent/consumable/kumiss)
- sleep(20)
- affected_mob.say("Менің елім, менің елім,", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Гүлің болып егілемін,", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Жырың болып төгілемін, елім!", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Туған жерім менің — Қазақстаным!", forced = /datum/reagent/consumable/kumiss)
- sleep(20)
- affected_mob.say("Ұрпаққа жол ашқан,", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Кең байтақ жерім бар.", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Бірлігі жарасқан,", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Тәуелсіз елім бар.", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Қарсы алған уақытты,", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Мәңгілік досыӊдай.", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Біздің ел бақытты,", forced = /datum/reagent/consumable/kumiss)
- sleep(2)
- affected_mob.say("Біздің ел осындай!", forced = /datum/reagent/consumable/kumiss)
- //affected_mob.dust()
- sleep(200)
- hymningrn = FALSE
+ // ну че, окумысился?
+ affected_mob.set_jitter_if_lower(5 SECONDS * REM * seconds_per_tick)
+ if(SPT_PROB(10, seconds_per_tick))
+ var/list/phrase = world.file2list("strings/massmeta/kumiss.txt")
+ affected_mob.say(pick(phrase), forced = /datum/reagent/consumable/kvass)
+ if(SPT_PROB(20, seconds_per_tick))
+ var/thinking = rand(1,3)
+ switch(thinking)
+ if(1)
+ to_chat(affected_mob, span_warning("Қымыз тым көп іштім деп ойлаймын..."))
+ if(2)
+ to_chat(affected_mob, span_warning("You feel the Қазақстан as it absorbs every last bit of Kumiss in you to empower!"))
+ if(3)
+ to_chat(affected_mob, span_warning("Қазақстан IS STRONGER THAN EVER BEFORE!"))
//Пьём кумысс без админов еее
diff --git a/modular_meta/features/makeshift_grenade_trap/preview.dmi b/modular_meta/features/makeshift_grenade_trap/preview.dmi
index 5652a5c986eb..abbefbdd67a5 100644
Binary files a/modular_meta/features/makeshift_grenade_trap/preview.dmi and b/modular_meta/features/makeshift_grenade_trap/preview.dmi differ
diff --git a/massmeta/code/game/objects/items/storage/belt.dm b/modular_meta/features/makeshift_tools/code/belt.dm
similarity index 57%
rename from massmeta/code/game/objects/items/storage/belt.dm
rename to modular_meta/features/makeshift_tools/code/belt.dm
index 88f073f527ce..55ddb5d9d889 100644
--- a/massmeta/code/game/objects/items/storage/belt.dm
+++ b/modular_meta/features/makeshift_tools/code/belt.dm
@@ -1,10 +1,10 @@
/obj/item/storage/belt/utility/makeshift
name = "makeshift toolbelt"
desc = "A shoddy holder of tools."
- icon = 'massmeta/icons/obj/clothing/belts.dmi'
- worn_icon = 'massmeta/icons/mob/clothing/belt.dmi'
- lefthand_file = 'massmeta/icons/mob/inhands/equipment/belt_lefthand.dmi'
- righthand_file = 'massmeta/icons/mob/inhands/equipment/belt_righthand.dmi'
+ icon = 'modular_meta/features/makeshift_tools/icons/belts.dmi'
+ worn_icon = 'modular_meta/features/makeshift_tools/icons/belt.dmi'
+ lefthand_file = 'modular_meta/features/makeshift_tools/icons/belt_lefthand.dmi'
+ righthand_file = 'modular_meta/features/makeshift_tools/icons/belt_righthand.dmi'
inhand_icon_state = "makeshiftbelt"
worn_icon_state = "makeshiftbelt"
icon_state = "makeshiftbelt"
diff --git a/massmeta/code/game/objects/items/tools/crowbar.dm b/modular_meta/features/makeshift_tools/code/crowbar.dm
similarity index 87%
rename from massmeta/code/game/objects/items/tools/crowbar.dm
rename to modular_meta/features/makeshift_tools/code/crowbar.dm
index 2ccd22499dd7..ebaf5fe08a10 100644
--- a/massmeta/code/game/objects/items/tools/crowbar.dm
+++ b/modular_meta/features/makeshift_tools/code/crowbar.dm
@@ -1,7 +1,7 @@
/obj/item/crowbar/makeshift
name = "makeshift crowbar"
desc = "A crude, self-wrought crowbar. Heavy."
- icon = 'massmeta/icons/obj/improvised.dmi'
+ icon = 'modular_meta/features/makeshift_tools/icons/improvised.dmi'
icon_state = "crowbar_makeshift"
worn_icon_state = "crowbar"
force = 12 //same as large crowbar, but bulkier and slower
diff --git a/massmeta/code/game/objects/items/tools/kitchen.dm b/modular_meta/features/makeshift_tools/code/kitchen.dm
similarity index 85%
rename from massmeta/code/game/objects/items/tools/kitchen.dm
rename to modular_meta/features/makeshift_tools/code/kitchen.dm
index d5f37031f773..dc4887e68810 100644
--- a/massmeta/code/game/objects/items/tools/kitchen.dm
+++ b/modular_meta/features/makeshift_tools/code/kitchen.dm
@@ -1,7 +1,7 @@
/obj/item/knife/kitchen/makeshift/makeshift
name = "makeshift knife"
icon_state = "knife_makeshift"
- icon = 'massmeta/icons/obj/improvised.dmi'
+ icon = 'modular_meta/features/makeshift_tools/icons/improvised.dmi'
desc = "A flimsy, poorly made replica of a classic cooking utensil."
force = 8
throwforce = 8
diff --git a/massmeta/code/datums/components/crafting/makeshift.dm b/modular_meta/features/makeshift_tools/code/makeshift.dm
similarity index 69%
rename from massmeta/code/datums/components/crafting/makeshift.dm
rename to modular_meta/features/makeshift_tools/code/makeshift.dm
index e3398344d9e1..c6cdbc3f032e 100644
--- a/massmeta/code/datums/components/crafting/makeshift.dm
+++ b/modular_meta/features/makeshift_tools/code/makeshift.dm
@@ -14,17 +14,21 @@
/datum/crafting_recipe/makeshiftwirecutters
name = "Makeshift Wirecutters"
- reqs = list(/obj/item/stack/sheet/iron = 2,
- /obj/item/stack/cable_coil = 5,
- /obj/item/stack/rods = 2)
+ reqs = list(
+ /obj/item/stack/sheet/iron = 2,
+ /obj/item/stack/cable_coil = 5,
+ /obj/item/stack/rods = 2
+ )
result = /obj/item/wirecutters/makeshift
time = 15 SECONDS
category = CAT_TOOLS
/datum/crafting_recipe/makeshiftweldingtool
name = "Makeshift Welding Tool"
- reqs = list(/obj/item/tank/internals/emergency_oxygen = 1,
- /obj/item/assembly/igniter = 1)
+ reqs = list(
+ /obj/item/tank/internals/emergency_oxygen = 1,
+ /obj/item/assembly/igniter = 1
+ )
tool_behaviors = list(TOOL_SCREWDRIVER)
result = /obj/item/weldingtool/makeshift
time = 16 SECONDS
@@ -32,10 +36,12 @@
/datum/crafting_recipe/makeshiftmultitool
name = "Makeshift Multitool"
- reqs = list(/obj/item/assembly/igniter = 1,
- /obj/item/assembly/signaler = 1,
- /obj/item/stack/sheet/iron = 2,
- /obj/item/stack/cable_coil = 10)
+ reqs = list(
+ /obj/item/assembly/igniter = 1,
+ /obj/item/assembly/signaler = 1,
+ /obj/item/stack/sheet/iron = 2,
+ /obj/item/stack/cable_coil = 10
+ )
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/multitool/makeshift
time = 16 SECONDS
@@ -50,10 +56,12 @@
/datum/crafting_recipe/makeshifttoolbelt
name = "Makeshift Toolbelt"
- reqs = list(/obj/item/stack/rods = 5,
- /obj/item/stack/sheet/iron = 2,
- /obj/item/stack/cable_coil = 15,
- /obj/item/stack/sheet/cloth = 2)
+ reqs = list(
+ /obj/item/stack/rods = 5,
+ /obj/item/stack/sheet/iron = 2,
+ /obj/item/stack/cable_coil = 15,
+ /obj/item/stack/sheet/cloth = 2
+ )
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
result = /obj/item/storage/belt/utility/makeshift
time = 20 SECONDS
@@ -61,18 +69,22 @@
/datum/crafting_recipe/makeshiftknife
name = "Makeshift Knife"
- reqs = list(/obj/item/stack/rods = 3,
- /obj/item/stack/sheet/iron = 1,
- /obj/item/stack/cable_coil = 10)
+ reqs = list(
+ /obj/item/stack/rods = 3,
+ /obj/item/stack/sheet/iron = 1,
+ /obj/item/stack/cable_coil = 10
+ )
result = /obj/item/knife/kitchen/makeshift
time = 12 SECONDS
category = CAT_TOOLS
/datum/crafting_recipe/makeshiftradio
name = "Makeshift Radio"
- reqs = list(/obj/item/assembly/signaler = 1,
- /obj/item/radio/headset = 1,
- /obj/item/stack/cable_coil = 5)
+ reqs = list(
+ /obj/item/assembly/signaler = 1,
+ /obj/item/radio/headset = 1,
+ /obj/item/stack/cable_coil = 5
+ )
tool_behaviors = list(TOOL_SCREWDRIVER)
result = /obj/item/radio/off/makeshift
time = 12 SECONDS
diff --git a/massmeta/code/game/objects/items/tools/multitool.dm b/modular_meta/features/makeshift_tools/code/multitool.dm
similarity index 85%
rename from massmeta/code/game/objects/items/tools/multitool.dm
rename to modular_meta/features/makeshift_tools/code/multitool.dm
index 79cd298a988d..e8bf26dcbba9 100644
--- a/massmeta/code/game/objects/items/tools/multitool.dm
+++ b/modular_meta/features/makeshift_tools/code/multitool.dm
@@ -1,7 +1,7 @@
/obj/item/multitool/makeshift
name = "makeshift multitool"
desc = "As crappy as it is, its still mostly the same as a standard issue Nanotrasen one."
- icon = 'massmeta/icons/obj/improvised.dmi'
+ icon = 'modular_meta/features/makeshift_tools/icons/improvised.dmi'
icon_state = "multitool_makeshift"
toolspeed = 2
diff --git a/massmeta/code/game/objects/items/devices/radio/radio.dm b/modular_meta/features/makeshift_tools/code/radio.dm
similarity index 76%
rename from massmeta/code/game/objects/items/devices/radio/radio.dm
rename to modular_meta/features/makeshift_tools/code/radio.dm
index 1246949d9f4b..47747b2e94dc 100644
--- a/massmeta/code/game/objects/items/devices/radio/radio.dm
+++ b/modular_meta/features/makeshift_tools/code/radio.dm
@@ -1,5 +1,5 @@
/obj/item/radio/off/makeshift // Makeshift SBR, limited use cases but could be useful.
- icon = 'massmeta/icons/obj/improvised.dmi'
+ icon = 'modular_meta/features/makeshift_tools/icons/improvised.dmi'
icon_state = "radio_makeshift"
subspace_switchable = TRUE // Made with a headset, so it can transmit over subspace I guess
freqlock = TRUE
diff --git a/massmeta/code/game/objects/items/tools/screwdriver.dm b/modular_meta/features/makeshift_tools/code/screwdriver.dm
similarity index 85%
rename from massmeta/code/game/objects/items/tools/screwdriver.dm
rename to modular_meta/features/makeshift_tools/code/screwdriver.dm
index ac62ec972ac0..86f6044841f1 100644
--- a/massmeta/code/game/objects/items/tools/screwdriver.dm
+++ b/modular_meta/features/makeshift_tools/code/screwdriver.dm
@@ -1,7 +1,7 @@
/obj/item/screwdriver/makeshift
name = "makeshift screwdriver"
desc = "Crude driver of screws. A primitive way to screw things up."
- icon = 'massmeta/icons/obj/improvised.dmi'
+ icon = 'modular_meta/features/makeshift_tools/icons/improvised.dmi'
icon_state = "screwdriver_makeshift"
toolspeed = 2
random_color = FALSE
diff --git a/massmeta/code/game/objects/items/tools/weldingtool.dm b/modular_meta/features/makeshift_tools/code/weldingtool.dm
similarity index 90%
rename from massmeta/code/game/objects/items/tools/weldingtool.dm
rename to modular_meta/features/makeshift_tools/code/weldingtool.dm
index 0b98a1bae50e..22a3d18ba1bb 100644
--- a/massmeta/code/game/objects/items/tools/weldingtool.dm
+++ b/modular_meta/features/makeshift_tools/code/weldingtool.dm
@@ -1,7 +1,7 @@
/obj/item/weldingtool/makeshift
name = "makeshift welding tool"
desc = "A MacGyver-style welder."
- icon = 'massmeta/icons/obj/improvised.dmi'
+ icon = 'modular_meta/features/makeshift_tools/icons/improvised.dmi'
icon_state = "welder_makeshift"
toolspeed = 2
max_fuel = 10
diff --git a/massmeta/code/game/objects/items/tools/wirecutters.dm b/modular_meta/features/makeshift_tools/code/wirecutters.dm
similarity index 84%
rename from massmeta/code/game/objects/items/tools/wirecutters.dm
rename to modular_meta/features/makeshift_tools/code/wirecutters.dm
index 1eca97895c46..1dcbdca71aa9 100644
--- a/massmeta/code/game/objects/items/tools/wirecutters.dm
+++ b/modular_meta/features/makeshift_tools/code/wirecutters.dm
@@ -1,7 +1,7 @@
/obj/item/wirecutters/makeshift
name = "makeshift wirecutters"
desc = "Mind your fingers."
- icon = 'massmeta/icons/obj/improvised.dmi'
+ icon = 'modular_meta/features/makeshift_tools/icons/improvised.dmi'
icon_state = "cutters_makeshift"
toolspeed = 2
random_color = FALSE
diff --git a/massmeta/code/game/objects/items/tools/wrench.dm b/modular_meta/features/makeshift_tools/code/wrench.dm
similarity index 85%
rename from massmeta/code/game/objects/items/tools/wrench.dm
rename to modular_meta/features/makeshift_tools/code/wrench.dm
index 0146ee9d2503..c730823d1337 100644
--- a/massmeta/code/game/objects/items/tools/wrench.dm
+++ b/modular_meta/features/makeshift_tools/code/wrench.dm
@@ -1,7 +1,7 @@
/obj/item/wrench/makeshift
name = "makeshift wrench"
desc = "A crude, self-wrought wrench with common uses. Can be found in your hand."
- icon = 'massmeta/icons/obj/improvised.dmi'
+ icon = 'modular_meta/features/makeshift_tools/icons/improvised.dmi'
icon_state = "wrench_makeshift"
toolspeed = 2
diff --git a/massmeta/icons/mob/clothing/belt.dmi b/modular_meta/features/makeshift_tools/icons/belt.dmi
similarity index 100%
rename from massmeta/icons/mob/clothing/belt.dmi
rename to modular_meta/features/makeshift_tools/icons/belt.dmi
diff --git a/massmeta/icons/mob/inhands/equipment/belt_lefthand.dmi b/modular_meta/features/makeshift_tools/icons/belt_lefthand.dmi
similarity index 100%
rename from massmeta/icons/mob/inhands/equipment/belt_lefthand.dmi
rename to modular_meta/features/makeshift_tools/icons/belt_lefthand.dmi
diff --git a/massmeta/icons/mob/inhands/equipment/belt_righthand.dmi b/modular_meta/features/makeshift_tools/icons/belt_righthand.dmi
similarity index 100%
rename from massmeta/icons/mob/inhands/equipment/belt_righthand.dmi
rename to modular_meta/features/makeshift_tools/icons/belt_righthand.dmi
diff --git a/massmeta/icons/obj/clothing/belts.dmi b/modular_meta/features/makeshift_tools/icons/belts.dmi
similarity index 100%
rename from massmeta/icons/obj/clothing/belts.dmi
rename to modular_meta/features/makeshift_tools/icons/belts.dmi
diff --git a/massmeta/icons/obj/improvised.dmi b/modular_meta/features/makeshift_tools/icons/improvised.dmi
similarity index 100%
rename from massmeta/icons/obj/improvised.dmi
rename to modular_meta/features/makeshift_tools/icons/improvised.dmi
diff --git a/modular_meta/features/makeshift_tools/includes.dm b/modular_meta/features/makeshift_tools/includes.dm
new file mode 100644
index 000000000000..1ad4d9509424
--- /dev/null
+++ b/modular_meta/features/makeshift_tools/includes.dm
@@ -0,0 +1,17 @@
+#include "code\belt.dm"
+#include "code\crowbar.dm"
+#include "code\kitchen.dm"
+#include "code\makeshift.dm"
+#include "code\multitool.dm"
+#include "code\radio.dm"
+#include "code\screwdriver.dm"
+#include "code\weldingtool.dm"
+#include "code\wirecutters.dm"
+#include "code\wrench.dm"
+
+/datum/modpack/makeshift_tools
+ id = "makeshift_tools"
+ name = "Самодельные инструменты"
+ group = "Features"
+ desc = "Самодельные инструменты из палок и того самого, дешево сердито, на пару раз."
+ author = "Homexp13"
diff --git a/modular_meta/features/mod_vend/preview.dmi b/modular_meta/features/mod_vend/preview.dmi
index 95717f71bf27..0a02079e10db 100644
Binary files a/modular_meta/features/mod_vend/preview.dmi and b/modular_meta/features/mod_vend/preview.dmi differ
diff --git a/modular_meta/features/more_cell_interactions/preview.dmi b/modular_meta/features/more_cell_interactions/preview.dmi
index 7ea21519e457..46679d92a73c 100644
Binary files a/modular_meta/features/more_cell_interactions/preview.dmi and b/modular_meta/features/more_cell_interactions/preview.dmi differ
diff --git a/modular_meta/features/not_enough_medical/preview.dmi b/modular_meta/features/not_enough_medical/preview.dmi
index ebffc91e121b..e3205b66b284 100644
Binary files a/modular_meta/features/not_enough_medical/preview.dmi and b/modular_meta/features/not_enough_medical/preview.dmi differ
diff --git a/modular_meta/features/parts_tier_5/includes.dm b/modular_meta/features/parts_tier_5/includes.dm
index ed1f525e3794..d22b41f99d82 100644
--- a/modular_meta/features/parts_tier_5/includes.dm
+++ b/modular_meta/features/parts_tier_5/includes.dm
@@ -3,8 +3,8 @@
#include "code\experiment.dm"
#include "code\stock_parts.dm"
-/datum/modpack/tier5
- id = "tier5"
+/datum/modpack/parts_tier_5
+ id = "parts_tier_5"
icon = 'modular_meta/features/parts_tier_5/preview.dmi'
name = "5 уровень"
group = "Features"
diff --git a/modular_meta/features/parts_tier_5/preview.dmi b/modular_meta/features/parts_tier_5/preview.dmi
index dca1b920c52a..f9ebd7e80098 100644
Binary files a/modular_meta/features/parts_tier_5/preview.dmi and b/modular_meta/features/parts_tier_5/preview.dmi differ
diff --git a/modular_meta/features/uplink_items/preview.dmi b/modular_meta/features/uplink_items/preview.dmi
index 7474ce3e6b9f..62d422d51bf9 100644
Binary files a/modular_meta/features/uplink_items/preview.dmi and b/modular_meta/features/uplink_items/preview.dmi differ
diff --git a/modular_meta/features/woodgen/preview.dmi b/modular_meta/features/woodgen/preview.dmi
index 8339a1c50a79..db8d6d6d7369 100644
Binary files a/modular_meta/features/woodgen/preview.dmi and b/modular_meta/features/woodgen/preview.dmi differ
diff --git a/modular_meta/main_modular_include.dm b/modular_meta/main_modular_include.dm
index 03b4bd5653c1..5b8a0cbb1f69 100644
--- a/modular_meta/main_modular_include.dm
+++ b/modular_meta/main_modular_include.dm
@@ -13,6 +13,7 @@
#include "features\admin\includes.dm"
#include "features\ai_things\includes.dm"
#include "features\antagonists\includes.dm"
+#include "features\butt_farts\includes.dm"
#include "features\cheburek_car\includes.dm"
#include "features\more_clothes\includes.dm"
#include "features\hardsuits\includes.dm"
@@ -28,6 +29,7 @@
#include "features\not_enough_medical\includes.dm"
#include "features\more_cell_interactions\includes.dm"
#include "features\makeshift_grenade_trap\includes.dm"
+#include "features\makeshift_tools\includes.dm"
#include "features\parts_tier_5\includes.dm"
#include "features\copytech\includes.dm"
#include "features\cargo_extended\includes.dm"
@@ -59,6 +61,7 @@
#include "tweaks\resprite\includes.dm"
#include "tweaks\russian_translation\includes.dm"
#include "tweaks\gases\includes.dm"
+#include "tweaks\heads_on_belts\includes.dm"
#include "tweaks\lead_pipe\includes.dm"
#include "tweaks\lgbt_removal\includes.dm"
#include "tweaks\tagline\includes.dm"
diff --git a/modular_meta/tweaks/fonts/preview.dmi b/modular_meta/tweaks/fonts/preview.dmi
index 6e9d3f139fbb..37e00fe11dba 100644
Binary files a/modular_meta/tweaks/fonts/preview.dmi and b/modular_meta/tweaks/fonts/preview.dmi differ
diff --git a/modular_meta/tweaks/heads_on_belts/code/head_belted.dm b/modular_meta/tweaks/heads_on_belts/code/head_belted.dm
new file mode 100644
index 000000000000..f66dd262424d
--- /dev/null
+++ b/modular_meta/tweaks/heads_on_belts/code/head_belted.dm
@@ -0,0 +1,60 @@
+/obj/item/bodypart/head
+ slot_flags = ITEM_SLOT_BELT
+ worn_icon_state = "default_human_head"
+
+/obj/item/bodypart/head/monkey
+ worn_icon_state = "default_monkey_head"
+
+/obj/item/bodypart/head/alien
+ worn_icon_state = "alien_head"
+
+/obj/item/bodypart/head/larva
+ worn_icon_state = "larva_head"
+
+/obj/item/bodypart/head/robot
+ worn_icon_state = "buildpipe"
+
+/obj/item/bodypart/head/snail
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/abductor
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/jelly
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/zombie
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/pod
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/fly
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/shadow
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/skeleton
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/mushroom
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/dullahan
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/golem
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/moth
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/lizard
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/ethereal
+ worn_icon_state = ""
+
+/obj/item/bodypart/head/plasmaman
+ worn_icon_state = ""
diff --git a/modular_meta/tweaks/heads_on_belts/icons/belt.dmi b/modular_meta/tweaks/heads_on_belts/icons/belt.dmi
new file mode 100644
index 000000000000..5855e8dbe9b2
Binary files /dev/null and b/modular_meta/tweaks/heads_on_belts/icons/belt.dmi differ
diff --git a/modular_meta/tweaks/heads_on_belts/includes.dm b/modular_meta/tweaks/heads_on_belts/includes.dm
new file mode 100644
index 000000000000..7a34c94498d3
--- /dev/null
+++ b/modular_meta/tweaks/heads_on_belts/includes.dm
@@ -0,0 +1,8 @@
+#include "code\head_belted.dm"
+
+/datum/modpack/heads_on_belts
+ id = "heads_on_belts"
+ name = "Nas'hrah moment"
+ group = "Features"
+ desc = "Головы можно вешать на пояс. Стильно! Модно! Феар энд Хангерно!"
+ author = "Sanecman"
diff --git a/modular_meta/tweaks/lgbt_removal/includes.dm b/modular_meta/tweaks/lgbt_removal/includes.dm
index 3a1eb016bd91..3cb72763ba68 100644
--- a/modular_meta/tweaks/lgbt_removal/includes.dm
+++ b/modular_meta/tweaks/lgbt_removal/includes.dm
@@ -6,8 +6,8 @@
id = "lgbt_removal"
name = "Убираем ЛГБТ контент"
group = "Tweaks"
- desc = "Заменяем значки на нейтральные (флаги стран). Убираем неопределённый пол (Их и Оно), и убираем выбор тип тела"
- author = "Artemchik542 (Код), bee (Спрайты), SS220 (Выбор пола)"
+ desc = "Заменяем значки на нейтральные (флаги стран)"
+ author = "Artemchik542 (код), bee (спрайты)"
// если вдруг заходите убрать выбор пола на неправильные, то вот пиары (не примены полностью в билде)
diff --git a/modular_meta/tweaks/russian_translation/preview.dmi b/modular_meta/tweaks/russian_translation/preview.dmi
index d532743e96e5..6bc39caac67c 100644
Binary files a/modular_meta/tweaks/russian_translation/preview.dmi and b/modular_meta/tweaks/russian_translation/preview.dmi differ
diff --git a/strings/massmeta/kumiss.txt b/strings/massmeta/kumiss.txt
new file mode 100644
index 000000000000..7694ed74a174
--- /dev/null
+++ b/strings/massmeta/kumiss.txt
@@ -0,0 +1,20 @@
+Алтын күн аспаны
+Алтын дән даласы
+Ерліктің дастаны
+Еліме қарашы!
+Ежелден ер деген
+Даңқымыз шықты ғой
+Намысын бермеген
+Қазағым мықты ғой!
+Менің елім, менің елім
+Гүлің болып егілемін
+Жырың болып төгілемін, елім!
+Туған жерім менің — Қазақстаным!
+Ұрпаққа жол ашқан
+Кең байтақ жерім бар
+Бірлігі жарасқан
+Тәуелсіз елім бар
+Қарсы алған уақытты
+Мәңгілік досыӊдай
+Біздің ел бақытты
+Біздің ел осындай!
\ No newline at end of file
diff --git a/tgstation.dme b/tgstation.dme
index 0f20c40f0218..7d4105b64cb2 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -275,7 +275,6 @@
#include "code\__DEFINES\wounds.dm"
#include "code\__DEFINES\xenobiology.dm"
#include "code\__DEFINES\zoom.dm"
-#include "code\__DEFINES\~DELETE_AFTER_MODULARIZATION.dm"
#include "code\__DEFINES\~meta_defines_include.dm"
#include "code\__DEFINES\ai\ai.dm"
#include "code\__DEFINES\ai\ai_blackboard.dm"