diff --git a/_maps/map_files/generic/City_of_Cogs.dmm b/_maps/map_files/generic/City_of_Cogs.dmm index e67a829221..889abe66c3 100644 --- a/_maps/map_files/generic/City_of_Cogs.dmm +++ b/_maps/map_files/generic/City_of_Cogs.dmm @@ -212,11 +212,8 @@ /turf/open/indestructible/reebe_void, /area/reebe) "aR" = ( -/obj/effect/clockwork/servant_blocker{ - dir = 1 - }, -/obj/structure/lattice/clockwork, -/turf/open/indestructible/reebe_void, +/obj/effect/landmark/city_of_cogs, +/turf/open/indestructible/clock_spawn_room, /area/reebe/city_of_cogs) "aS" = ( /obj/effect/clockwork/servant_blocker{ @@ -242,17 +239,20 @@ /turf/open/indestructible/reebe_void/spawning/lattices, /area/reebe) "aX" = ( -/obj/effect/landmark/city_of_cogs, +/obj/structure/table/reinforced/brass, +/obj/item/clockwork/component/belligerent_eye, /turf/open/indestructible/clock_spawn_room, /area/reebe/city_of_cogs) "aY" = ( -/obj/structure/table/reinforced/brass, -/obj/item/clockwork/component/belligerent_eye/blind_eye, -/turf/open/indestructible/clock_spawn_room, -/area/reebe/city_of_cogs) +/obj/effect/clockwork/servant_blocker{ + dir = 1 + }, +/obj/structure/lattice/clockwork, +/turf/open/indestructible/reebe_void, +/area/reebe) "aZ" = ( /obj/structure/table/reinforced/brass, -/obj/item/clockwork/component/belligerent_eye, +/obj/item/clockwork/component/belligerent_eye/blind_eye, /turf/open/indestructible/clock_spawn_room, /area/reebe/city_of_cogs) "ba" = ( @@ -262,32 +262,32 @@ /area/reebe/city_of_cogs) "bb" = ( /obj/structure/table/reinforced/brass, -/obj/item/clockwork/component/replicant_alloy, +/obj/item/clockwork/component/geis_capacitor, /turf/open/indestructible/clock_spawn_room, /area/reebe/city_of_cogs) "bc" = ( /obj/structure/table/reinforced/brass, -/obj/item/clockwork/component/replicant_alloy/smashed_anima_fragment, +/obj/item/clockwork/component/geis_capacitor/antennae, /turf/open/indestructible/clock_spawn_room, /area/reebe/city_of_cogs) "bd" = ( /obj/structure/table/reinforced/brass, -/obj/item/clockwork/component/replicant_alloy/replication_plate, +/obj/item/clockwork/component/geis_capacitor/fallen_armor, /turf/open/indestructible/clock_spawn_room, /area/reebe/city_of_cogs) "be" = ( /obj/structure/table/reinforced/brass, -/obj/item/clockwork/component/geis_capacitor/antennae, +/obj/item/clockwork/component/hierophant_ansible, /turf/open/indestructible/clock_spawn_room, /area/reebe/city_of_cogs) "bf" = ( /obj/structure/table/reinforced/brass, -/obj/item/clockwork/component/geis_capacitor/fallen_armor, +/obj/item/clockwork/component/hierophant_ansible/obelisk, /turf/open/indestructible/clock_spawn_room, /area/reebe/city_of_cogs) "bg" = ( /obj/structure/table/reinforced/brass, -/obj/item/clockwork/component/geis_capacitor, +/obj/item/clockwork/component/replicant_alloy, /turf/open/indestructible/clock_spawn_room, /area/reebe/city_of_cogs) "bh" = ( @@ -304,6 +304,51 @@ /obj/structure/destructible/clockwork/eminence_spire, /turf/open/floor/clockwork/reebe, /area/reebe/city_of_cogs) +"bk" = ( +/obj/structure/table/reinforced/brass, +/obj/item/clockwork/component/replicant_alloy/replication_plate, +/turf/open/indestructible/clock_spawn_room, +/area/reebe/city_of_cogs) +"bl" = ( +/obj/structure/table/reinforced/brass, +/obj/item/clockwork/component/replicant_alloy/smashed_anima_fragment, +/turf/open/indestructible/clock_spawn_room, +/area/reebe/city_of_cogs) +"bm" = ( +/obj/structure/table/reinforced/brass, +/obj/item/clockwork/component/vanguard_cogwheel, +/turf/open/indestructible/clock_spawn_room, +/area/reebe/city_of_cogs) +"bn" = ( +/obj/structure/table/reinforced/brass, +/obj/item/clockwork/component/vanguard_cogwheel/onyx_prism, +/turf/open/indestructible/clock_spawn_room, +/area/reebe/city_of_cogs) +"bo" = ( +/obj/structure/window/reinforced/clockwork/fulltile, +/obj/structure/grille/ratvar, +/turf/open/indestructible/clock_spawn_room, +/area/reebe/city_of_cogs) +"bp" = ( +/obj/structure/window/reinforced/clockwork/fulltile, +/turf/open/indestructible/clock_spawn_room, +/area/reebe/city_of_cogs) +"bu" = ( +/obj/structure/table/reinforced/brass, +/turf/open/indestructible/clock_spawn_room, +/area/reebe/city_of_cogs) +"bw" = ( +/obj/structure/chair/brass{ + dir = 8 + }, +/turf/open/indestructible/clock_spawn_room, +/area/reebe/city_of_cogs) +"bx" = ( +/obj/structure/chair/brass{ + dir = 4 + }, +/turf/open/indestructible/clock_spawn_room, +/area/reebe/city_of_cogs) (1,1,1) = {" aa @@ -26909,7 +26954,7 @@ ab ab ab ab -aa +ab aa aa aa @@ -27166,8 +27211,8 @@ ab ab ab ab -aa -aa +ab +ab aa aa aa @@ -27423,9 +27468,9 @@ ab ab ab ab -aa -aa -aa +ab +ab +ab aa aa aa @@ -27680,10 +27725,10 @@ ab ab ab ab -aa -aa -aa -aa +ab +ab +ab +ab aa aa aa @@ -27923,25 +27968,25 @@ ab ab ab ab +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ab ab ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa aa aa aa @@ -28166,40 +28211,40 @@ ab ab ab ab -ab -ab aF +aF +aY +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ah +ah +bo +bo +bo +bo +bo +bo +bo +ah +ah +ae +ae +ae ab ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -28424,39 +28469,39 @@ aF aF aF aF -aF -aF -ae -ae -ae +aG +aS +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +aT +aT +aT +aT +aT +aT +aT +aT +aT +ah +ah +ah ae ae ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -28682,38 +28727,38 @@ aG aG aG aG -aR -ah -ah -ah -ah -ah -ae -ae -ae -ae -ae -ae -ae +aS +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +aU +aT +aT +aT +aT +aT +aT +aT +aT +aT +bo +aX +bo +ag ae ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -28940,37 +28985,37 @@ aj aj aj aS +bw +bw +bw +bw +bw +bw +bw +bw +bw +bw +bw +bw +aU aT aT +aR +aT +aR +aT +aR aT aT -ah -ah -ai -ai -ai -ai -ai -ah -ah +bo +aZ +bo +ag ae ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -29201,7 +29246,6 @@ aT aT aT aT -ah aT aT aT @@ -29209,15 +29253,22 @@ aT aT aT aT -ah +aT +bo +aT +aT +aT +aT +aT +aT +aT +aT +aT +bo +ba +bo ag ae -ab -ab -ab -ab -ab -ae bi ab ab @@ -29339,12 +29390,6 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa "} (114,1,1) = {" aa @@ -29458,7 +29503,6 @@ aT aT aT aT -aU aT aT aT @@ -29466,15 +29510,22 @@ aT aT aT aT -ah -ah -ah -ab -ab -ab -ab -ab -ab +aT +aV +aT +aT +aR +aT +aR +aT +aR +aT +aT +bo +bb +bo +ag +ae ab ae ac @@ -29596,12 +29647,6 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa "} (115,1,1) = {" aa @@ -29715,33 +29760,33 @@ aT aT aT aT -aU aT aT -aX -aX -aX aT aT -ai -aY -ai +aT +aT +aT +aT +bo +aT +aT +aT +aT +aT +aT +aT +aT +aT +bo +bc +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -29972,33 +30017,33 @@ aT aT aT aT -aV aT aT -aX -aX -aX aT aT -ai -aZ -ai +aT +aT +aT +aT +aU +aT +aT +aR +aT +aR +aT +aR +aT +aT +bo +bd +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -30229,33 +30274,33 @@ aT aT aT aT +aT +aT +aT +aT +aT +aT +aT +aT aU aT aT -aX -aX -aX aT aT -ai -ba -ai +aT +aT +aT +aT +aT +bo +be +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -30486,7 +30531,17 @@ aT aT aT aT -aU +aT +aT +aT +aT +aT +aT +bp +bp +ah +aT +aT aT aT aT @@ -30497,22 +30552,12 @@ aT ah ah ah +ae +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -30743,33 +30788,33 @@ aT aT aT aT +aT +aT +aT +aT +aT +aT +bp +bg ah -aT -aT -aT -aT -aT -aT -aT ah -ag +bo +bo +bo +bo +bo +bo +bo +ah +ah +ae +ae ae ab ab ab ab ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -31000,33 +31045,33 @@ aT aT aT aT +aT +aT +aT +aT +aT +aT +bp +bp +ah +aT +aT +aT +aT +aT +aT +aT +aT +aT ah ah -aU -aU -aV -aU -aU ah -ah -ag +ae ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -31257,7 +31302,6 @@ aT aT aT aT -ah aT aT aT @@ -31265,25 +31309,26 @@ aT aT aT aT -ah +aT +aU +aT +aT +aT +aT +aT +aT +aT +aT +aT +bo +bf +bo ag ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -31514,33 +31559,33 @@ aT aT aT aT +aT +aT +aT +aT +aT +aT +aT +aT aU aT aT +aR +aT +aR +aT +aR aT aT -aT -aT -aT -ah -ah -ah +bo +bg +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -31771,33 +31816,33 @@ aT aT aT aT -aU aT aT -aX -aX -aX +aT +aT +aT +aT aT aT ai -bb -ai +aT +aT +aT +aT +aT +aT +aT +aT +aT +bo +bk +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -32028,33 +32073,33 @@ aT aT aT aT +aT +aT +aT +aT +aT +aT +aT +aT aV aT aT -aX -aX -aX +aR +aT +aR +aT +aR aT aT -ai -bc -ai +bo +bl +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -32285,33 +32330,33 @@ aT aT aT aT -aU aT aT -aX -aX -aX +aT +aT +aT +aT aT aT ai -bd -ai +aT +aT +aT +aT +aT +aT +aT +aT +aT +bo +bm +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -32542,33 +32587,33 @@ aT aT aT aT +aT +aT +aT +aT +aT +aT +aT +aT aU aT aT +aR +aT +aR +aT +aR aT aT -aT -aT -aT -ah -ah -ah +bo +bn +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -32799,7 +32844,6 @@ aT aT aT aT -ah aT aT aT @@ -32807,25 +32851,26 @@ aT aT aT aT -ah +aT +aU +aT +aT +aT +aT +aT +aT +aT +aT +aT +bo +aX +bo ag ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -33056,33 +33101,33 @@ aT aT aT aT +aT +aT +aT +aT +aT +aT +bp +bp +ah +aT +aT +aT +aT +aT +aT +aT +aT +aT ah ah -aU -aU -aV -aU -aU ah -ah -ag +ae ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -33313,16 +33358,25 @@ aT aT aT aT +aT +aT +aT +aT +aT +aT +bp +bk +ah +ah +bo +bo +bo +bo +bo +bo +bo ah -aT -aT -aT -aT -aT -aT -aT ah -ag ae ab ab @@ -33331,15 +33385,6 @@ ab ab ab ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -33570,7 +33615,17 @@ aT aT aT aT -aU +aT +aT +aT +aT +aT +aT +bp +bp +ah +aT +aT aT aT aT @@ -33581,22 +33636,12 @@ aT ah ah ah +ae +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -33827,33 +33872,33 @@ aT aT aT aT +aT +aT +aT +aT +aT +aT +aT +aT aU aT aT -aX -aX -aX aT aT -ai -be -ai +aT +aT +aT +aT +aT +bo +aZ +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -34084,33 +34129,33 @@ aT aT aT aT -aV aT aT -aX -aX -aX aT aT -ai -bf -ai +aT +aT +aT +aT +aU +aT +aT +aR +aT +aR +aT +aR +aT +aT +bo +ba +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -34341,33 +34386,33 @@ aT aT aT aT -aU aT aT -aX -aX -aX aT aT -ai -bg -ai +aT +aT +aT +aT +bo +aT +aT +aT +aT +aT +aT +aT +aT +aT +bo +bb +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -34598,7 +34643,6 @@ aT aT aT aT -aU aT aT aT @@ -34606,25 +34650,26 @@ aT aT aT aT -ah -ah -ah +aT +aV +aT +aT +aR +aT +aR +aT +aR +aT +aT +bo +bc +bo +ag +ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -34855,7 +34900,6 @@ aT aT aT aT -ah aT aT aT @@ -34863,25 +34907,26 @@ aT aT aT aT -ah +aT +bo +aT +aT +aT +aT +aT +aT +aT +aT +aT +bo +bd +bo ag ae ab ab ab ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -35108,37 +35153,37 @@ aj aj aj aS +bx +bx +bx +bx +bx +bx +bx +bx +bx +bx +bx +bx +aU aT aT +aR +aT +aR +aT +aR aT aT -ah -ah -ai -ai -ai -ai -ai -ah -ah +bo +be +bo +ag ae ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -35364,38 +35409,38 @@ aG aG aG aG -aR -ah -ah -ah -ah -ah -ae -ae -ae -ae -ae -ae -ae +aS +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +bu +aU +aT +aT +aT +aT +aT +aT +aT +aT +aT +bo +bf +bo +ag ae ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -35620,39 +35665,39 @@ aF aF aF aF -aF -aF -ae -ae -ae +aG +aS +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +aT +aT +aT +aT +aT +aT +aT +aT +aT +ah +ah +ah ae ae ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -35878,7 +35923,31 @@ ab ab ab ab -aF +aY +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ah +ah +bo +bo +bo +bo +bo +bo +bo +ah +ah +ae ab ab ab @@ -35886,30 +35955,6 @@ ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa aa aa aa @@ -36147,12 +36192,18 @@ ab ab ab ab -ab -ab -ab -ab -ab -ab +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ae ab ab @@ -36160,12 +36211,6 @@ ab ab ab ab -ab -aa -aa -aa -aa -aa aa aa aa @@ -36410,18 +36455,18 @@ ab ab ab ab -ac -ac ab ab ab ab ab ab -aa -aa -aa -aa +ab +ab +ab +ab +ab +ab aa aa aa @@ -36667,17 +36712,17 @@ ab ab ab ab -ac -bh -ae ab ab ab ab ab -aa -aa -aa +ab +ab +ab +ab +ab +ab aa aa aa @@ -36932,8 +36977,8 @@ ab ab ab ab -aa -aa +ab +ab aa aa aa @@ -37189,7 +37234,7 @@ ab ab ab ab -aa +ab aa aa aa @@ -37438,9 +37483,9 @@ ab ab ab ab -ab -ab -ab +ac +bh +ae ab ab ab diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index aea7d42be6..4ed099d9e2 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -121,3 +121,4 @@ #define ORGAN_SLOT_BRAIN_ANTIDROP "brain_antidrop" #define ORGAN_SLOT_BRAIN_ANTISTUN "brain_antistun" #define ORGAN_SLOT_TAIL "tail" +#define ORGAN_SLOT_PENIS "penis" diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index aab49720f6..9f3d38efa1 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -102,6 +102,7 @@ #define CAT_SANDWICH "Sandwiches" #define CAT_SOUP "Soups" #define CAT_SPAGHETTI "Spaghettis" +#define CAT_SUSHI "Fish" #define RCD_FLOORWALL 1 #define RCD_AIRLOCK 2 diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index a5617e6148..99f1813f3c 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -69,6 +69,7 @@ #define TRAIT_TAGGER "tagger" #define TRAIT_PHOTOGRAPHER "photographer" #define TRAIT_MUSICIAN "musician" +#define TRAIT_CROCRIN_IMMUNE "crocin_immune" // common trait sources #define TRAIT_GENERIC "generic" diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index ad29125d95..899ef16306 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -221,9 +221,10 @@ else // A variation of get_hear inlined here to take advantage of the compiler's fastpath for obj/mob in view var/lum = T.luminosity T.luminosity = 6 // This is the maximum luminosity - for(var/mob/M in view(R, T)) + var/list/cachedview = view(R, T) + for(var/mob/M in cachedview) processing_list += M - for(var/obj/O in view(R, T)) + for(var/obj/O in cachedview) processing_list += O T.luminosity = lum diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index d0506c7dcb..36049de77b 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -108,5 +108,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/toy/eightball = 1, /obj/item/reagent_containers/pill/floorpill = 1, /obj/item/storage/daki = 3, //VERY IMPORTANT CIT CHANGE - adds bodypillows to maint + /obj/item/storage/pill_bottle/penis_enlargement = 2, "" = 3 )) diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm index 3d03c2adbd..e0a23b0209 100644 --- a/code/datums/components/storage/concrete/pockets.dm +++ b/code/datums/components/storage/concrete/pockets.dm @@ -19,6 +19,22 @@ max_items = 1 attack_hand_interact = FALSE +/datum/component/storage/concrete/pockets/small/collar + max_items = 1 + +/datum/component/storage/concrete/pockets/small/collar/Initialize() + . = ..() + can_hold = typecacheof(list( + /obj/item/reagent_containers/food/snacks/cookie, + /obj/item/reagent_containers/food/snacks/sugarcookie)) + +/datum/component/storage/concrete/pockets/small/collar/locked/Initialize() + . = ..() + can_hold = typecacheof(list( + /obj/item/reagent_containers/food/snacks/cookie, + /obj/item/reagent_containers/food/snacks/sugarcookie, + /obj/item/key/collar)) + /datum/component/storage/concrete/pockets/tiny max_items = 1 max_w_class = WEIGHT_CLASS_TINY diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm index 03badb2069..a870ecae66 100644 --- a/code/datums/dash_weapon.dm +++ b/code/datums/dash_weapon.dm @@ -32,7 +32,7 @@ if(!IsAvailable()) return var/turf/T = get_turf(target) - if(target in view(user.client.view, get_turf(user))) + if(target in view(user.client.view, user)) var/obj/spot1 = new phaseout(get_turf(user), user.dir) user.forceMove(T) playsound(T, dash_sound, 25, 1) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index b3f3f7efa1..938515625d 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -9,6 +9,7 @@ var/list/features = list("FFF") //first value is mutant color var/real_name //Stores the real name of the person who originally got this dna datum. Used primarely for changelings, var/nameless = FALSE + var/custom_species //siiiiigh I guess this is important var/list/mutations = list() //All mutations are from now on here var/list/temporary_mutations = list() //Timers for temporary mutations var/list/previous = list() //For temporary name/ui/ue/blood_type modifications @@ -45,6 +46,7 @@ destination.dna.features = features.Copy() destination.dna.real_name = real_name destination.dna.nameless = nameless + destination.dna.custom_species = custom_species destination.dna.temporary_mutations = temporary_mutations.Copy() if(ishuman(destination)) var/mob/living/carbon/human/H = destination @@ -62,6 +64,7 @@ new_dna.species = new species.type new_dna.real_name = real_name new_dna.nameless = nameless + new_dna.custom_species = custom_species new_dna.mutations = mutations.Copy() /datum/dna/proc/add_mutation(mutation_name) @@ -202,7 +205,7 @@ /datum/dna/proc/is_same_as(datum/dna/D) - if(uni_identity == D.uni_identity && struc_enzymes == D.struc_enzymes && real_name == D.real_name && nameless == D.nameless) + if(uni_identity == D.uni_identity && struc_enzymes == D.struc_enzymes && real_name == D.real_name && nameless == D.nameless && custom_species == D.custom_species) if(species.type == D.species.type && features == D.features && blood_type == D.blood_type) return 1 return 0 diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 4fc30de473..f299e9904a 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -84,3 +84,12 @@ /datum/quirk/monochromatic/remove() if(quirk_holder) quirk_holder.remove_client_colour(/datum/client_colour/monochrome) + +/datum/quirk/crocrin_immunity + name = "Crocin Immunity" + desc = "You're one of the few people in the galaxy who are genetically immune to Crocin and Hexacrocin products and their addictive properties! However, you can still get brain damage from Hexacrocin addiction." + mob_trait = TRAIT_CROCRIN_IMMUNE + value = 0 + gain_text = "You feel more prudish." + lose_text = "You don't feel as prudish as before." + medical_record_text = "Patient exhibits a special gene that makes them immune to Crocin and Hexacrocin." diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 03c60be91c..7284b3c738 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -81,6 +81,12 @@ to_chat(usr, "The drip beeps: Warning, incompatible creature!") return + var/mob/living/L + if(isliving(target)) + L = target + if(!L.can_inject(usr, 1)) + return + if(Adjacent(target) && usr.Adjacent(target)) if(beaker) usr.visible_message("[usr] attaches [src] to [target].", "You attach [src] to [target].") diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 94b6eee8aa..927608d3d5 100755 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -15,7 +15,9 @@ /obj/item/gun/energy, /obj/item/melee/baton, /obj/item/ammo_box/magazine/recharge, - /obj/item/modular_computer)) + /obj/item/modular_computer, + /obj/item/gun/ballistic/automatic/magrifle_e, + /obj/item/gun/ballistic/automatic/pistol/mag_e)) /obj/machinery/recharger/RefreshParts() for(var/obj/item/stock_parts/capacitor/C in component_parts) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 4d2e113749..ef3ba969e9 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -80,6 +80,7 @@ desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" name = "\improper DEATH-RIPLEY" icon_state = "deathripley" + armor = list("melee" = 40, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) slow_pressure_step_in = 3 opacity=0 lights_power = 7 @@ -194,4 +195,4 @@ cargo -= O else if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. - to_chat(user, "You fail to push [O] out of [src]!") \ No newline at end of file + to_chat(user, "You fail to push [O] out of [src]!") diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 9ff717816c..7d3d36c5b2 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -391,7 +391,8 @@ GLOBAL_LIST_EMPTY(PDAs) //BASIC FUNCTIONS=================================== if("Refresh")//Refresh, goes to the end of the proc. - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if ("Toggle_Font") //CODE REVISION 2 @@ -406,16 +407,19 @@ GLOBAL_LIST_EMPTY(PDAs) font_mode = FONT_ORBITRON if (MODE_VT) font_mode = FONT_VT - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if ("Change_Color") var/new_color = input("Please enter a color name or hex value (Default is \'#808000\').",background_color)as color background_color = new_color - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if ("Toggle_Underline") underline_flag = !underline_flag - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if("Return")//Return if(mode<=9) @@ -424,7 +428,8 @@ GLOBAL_LIST_EMPTY(PDAs) mode = round(mode/10) if(mode==4 || mode == 5)//Fix for cartridges. Redirects to hub. mode = 0 - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if ("Authenticate")//Checks for ID id_check(U) @@ -434,8 +439,9 @@ GLOBAL_LIST_EMPTY(PDAs) if(istype(id, /obj/item/card/id/syndicate)) owner = id.registered_name update_label() - playsound(src, 'sound/machines/terminal_processing.ogg', 50, 1) - addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/machines/terminal_success.ogg', 50, 1), 13) + if (!silent) + playsound(src, 'sound/machines/terminal_processing.ogg', 15, 1) + addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/machines/terminal_success.ogg', 15, 1), 13) if("Eject")//Ejects the cart, only done from hub. if (!isnull(cartridge)) @@ -445,56 +451,67 @@ GLOBAL_LIST_EMPTY(PDAs) cartridge.host_pda = null cartridge = null update_icon() - playsound(src, 'sound/machines/terminal_eject_disc.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_eject_disc.ogg', 50, 1) //MENU FUNCTIONS=================================== if("0")//Hub mode = 0 - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if("1")//Notes mode = 1 - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if("2")//Messenger mode = 2 - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if("21")//Read messeges mode = 21 - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if("3")//Atmos scan mode = 3 - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if("4")//Redirects to hub mode = 0 - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) //MAIN FUNCTIONS=================================== if("Light") toggle_light() - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if("Medical Scan") if(scanmode == PDA_SCANNER_MEDICAL) scanmode = PDA_SCANNER_NONE else if((!isnull(cartridge)) && (cartridge.access & CART_MEDICAL)) scanmode = PDA_SCANNER_MEDICAL - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if("Reagent Scan") if(scanmode == PDA_SCANNER_REAGENT) scanmode = PDA_SCANNER_NONE else if((!isnull(cartridge)) && (cartridge.access & CART_REAGENT_SCANNER)) scanmode = PDA_SCANNER_REAGENT - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if("Halogen Counter") if(scanmode == PDA_SCANNER_HALOGEN) scanmode = PDA_SCANNER_NONE else if((!isnull(cartridge)) && (cartridge.access & CART_ENGINE)) scanmode = PDA_SCANNER_HALOGEN - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if("Honk") if ( !(last_noise && world.time < last_noise + 20) ) @@ -511,7 +528,8 @@ GLOBAL_LIST_EMPTY(PDAs) scanmode = PDA_SCANNER_NONE else if((!isnull(cartridge)) && (cartridge.access & CART_ATMOS)) scanmode = PDA_SCANNER_GAS - playsound(src, 'sound/machines/terminal_select.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_select.ogg', 15, 1) if("Drone Phone") var/alert_s = input(U,"Alert severity level","Ping Drones",null) as null|anything in list("Low","Medium","High","Critical") @@ -520,7 +538,8 @@ GLOBAL_LIST_EMPTY(PDAs) var/msg = "NON-DRONE PING: [U.name]: [alert_s] priority alert in [A.name]!" _alert_drones(msg, TRUE, U) to_chat(U, msg) - playsound(src, 'sound/machines/terminal_success.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_success.ogg', 15, 1) //NOTEKEEPER FUNCTIONS=================================== @@ -672,7 +691,8 @@ GLOBAL_LIST_EMPTY(PDAs) if (!signal.data["done"]) to_chat(user, "ERROR: Server isn't responding.") return - playsound(src, 'sound/machines/terminal_error.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_error.ogg', 15, 1) var/target_text = signal.format_target() // Log it in our logs @@ -685,7 +705,8 @@ GLOBAL_LIST_EMPTY(PDAs) // Log in the talk log user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text]") to_chat(user, "Message sent to [target_text]: \"[message]\"") - playsound(src, 'sound/machines/terminal_success.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_success.ogg', 15, 1) // Reset the photo picture = null last_text = world.time @@ -830,14 +851,16 @@ GLOBAL_LIST_EMPTY(PDAs) if(!idcard.registered_name) to_chat(user, "\The [src] rejects the ID!") return - playsound(src, 'sound/machines/terminal_error.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_error.ogg', 15, 1) if(!owner) owner = idcard.registered_name ownjob = idcard.assignment update_label() to_chat(user, "Card scanned.") - playsound(src, 'sound/machines/terminal_success.ogg', 50, 1) + if (!silent) + playsound(src, 'sound/machines/terminal_success.ogg', 15, 1) else //Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand. if(((src in user.contents) || (isturf(loc) && in_range(src, user))) && (C in user.contents)) @@ -1053,3 +1076,4 @@ GLOBAL_LIST_EMPTY(PDAs) #undef PDA_SCANNER_HALOGEN #undef PDA_SCANNER_GAS #undef PDA_SPAM_DELAY + diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 5a68a8423a..79b04c771b 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -98,10 +98,12 @@ SLIME SCANNER if ((user.has_trait(TRAIT_CLUMSY) || user.has_trait(TRAIT_DUMB)) && prob(50)) to_chat(user, "You stupidly try to analyze the floor's vitals!") user.visible_message("[user] has analyzed the floor's vitals!") - to_chat(user, "Analyzing results for The floor:\n\tOverall status: Healthy") - to_chat(user, "Key: Suffocation/Toxin/Burn/Brute") - to_chat(user, "\tDamage specifics: 0-0-0-0") - to_chat(user, "Body temperature: ???") + var/msg = "*---------*\nAnalyzing results for The floor:\n\tOverall status: Healthy\n" + msg += "Key: Suffocation/Toxin/Burn/Brute\n" + msg += "\tDamage specifics: 0-0-0-0\n" + msg += "Body temperature: ???\n" + msg += "*---------*" + to_chat(user, msg) return user.visible_message("[user] has analyzed [M]'s vitals.") @@ -136,31 +138,31 @@ SLIME SCANNER if(H.undergoing_liver_failure() && H.stat != DEAD) to_chat(user, "Subject is suffering from liver failure: Apply Corazone and begin a liver transplant immediately!") - to_chat(user, "Analyzing results for [M]:\n\tOverall status: [mob_status]") + var/msg = "*---------*\nAnalyzing results for [M]:\n\tOverall status: [mob_status]\n" // Damage descriptions if(brute_loss > 10) - to_chat(user, "\t[brute_loss > 50 ? "Severe" : "Minor"] tissue damage detected.") + msg += "\t[brute_loss > 50 ? "Severe" : "Minor"] tissue damage detected.\n" if(fire_loss > 10) - to_chat(user, "\t[fire_loss > 50 ? "Severe" : "Minor"] burn damage detected.") + msg += "\t[fire_loss > 50 ? "Severe" : "Minor"] burn damage detected.\n" if(oxy_loss > 10) - to_chat(user, "\t[oxy_loss > 50 ? "Severe" : "Minor"] oxygen deprivation detected.") + msg += "\t[oxy_loss > 50 ? "Severe" : "Minor"] oxygen deprivation detected.\n" if(tox_loss > 10) - to_chat(user, "\t[tox_loss > 50 ? "Severe" : "Minor"] amount of toxin damage detected.") + msg += "\t[tox_loss > 50 ? "Severe" : "Minor"] amount of toxin damage detected.\n" if(M.getStaminaLoss()) - to_chat(user, "\tSubject appears to be suffering from fatigue.") + msg += "\tSubject appears to be suffering from fatigue.\n" if(advanced) - to_chat(user, "\tFatigue Level: [M.getStaminaLoss()]%.") + msg += "\tFatigue Level: [M.getStaminaLoss()]%.\n" if (M.getCloneLoss()) - to_chat(user, "\tSubject appears to have [M.getCloneLoss() > 30 ? "Severe" : "Minor"] cellular damage.") + msg += "\tSubject appears to have [M.getCloneLoss() > 30 ? "Severe" : "Minor"] cellular damage.\n" if(advanced) - to_chat(user, "\tCellular Damage Level: [M.getCloneLoss()].") + msg += "\tCellular Damage Level: [M.getCloneLoss()].\n" if (M.getBrainLoss() >= 200 || !M.getorgan(/obj/item/organ/brain)) - to_chat(user, "\tSubject's brain function is non-existent.") + msg += "\tSubject's brain function is non-existent.\n" else if (M.getBrainLoss() >= 120) - to_chat(user, "\tSevere brain damage detected. Subject likely to have mental traumas.") + msg += "\tSevere brain damage detected. Subject likely to have mental traumas.\n" else if (M.getBrainLoss() >= 45) - to_chat(user, "\tBrain damage detected.") + msg += "\tBrain damage detected.\n" if(iscarbon(M)) var/mob/living/carbon/C = M if(LAZYLEN(C.get_traumas())) @@ -176,83 +178,83 @@ SLIME SCANNER trauma_desc += "permanent " trauma_desc += B.scan_desc trauma_text += trauma_desc - to_chat(user, "\tCerebral traumas detected: subject appears to be suffering from [english_list(trauma_text)].") + msg += "\tCerebral traumas detected: subject appears to be suffering from [english_list(trauma_text)].\n" if(C.roundstart_quirks.len) - to_chat(user, "\tSubject has the following physiological traits: [C.get_trait_string()].") + msg += "\tSubject has the following physiological traits: [C.get_trait_string()].\n" if(advanced) - to_chat(user, "\tBrain Activity Level: [(200 - M.getBrainLoss())/2]%.") + msg += "\tBrain Activity Level: [(200 - M.getBrainLoss())/2]%.\n" if (M.radiation) - to_chat(user, "\tSubject is irradiated.") + msg += "\tSubject is irradiated.\n" if(advanced) - to_chat(user, "\tRadiation Level: [M.radiation]%.") + msg += "\tRadiation Level: [M.radiation]%.\n" if(advanced && M.hallucinating()) - to_chat(user, "\tSubject is hallucinating.") + msg += "\tSubject is hallucinating.\n" //Eyes and ears if(advanced) if(iscarbon(M)) var/mob/living/carbon/C = M var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS) - to_chat(user, "\t==EAR STATUS==") + msg += "\t==EAR STATUS==\n" if(istype(ears)) var/healthy = TRUE if(C.has_trait(TRAIT_DEAF, GENETIC_MUTATION)) healthy = FALSE - to_chat(user, "\tSubject is genetically deaf.") + msg += "\tSubject is genetically deaf.\n" else if(C.has_trait(TRAIT_DEAF)) healthy = FALSE - to_chat(user, "\tSubject is deaf.") + msg += "\tSubject is deaf.\n" else if(ears.ear_damage) - to_chat(user, "\tSubject has [ears.ear_damage > UNHEALING_EAR_DAMAGE? "permanent ": "temporary "]hearing damage.") + msg += "\tSubject has [ears.ear_damage > UNHEALING_EAR_DAMAGE? "permanent ": "temporary "]hearing damage.\n" healthy = FALSE if(ears.deaf) - to_chat(user, "\tSubject is [ears.ear_damage > UNHEALING_EAR_DAMAGE ? "permanently ": "temporarily "] deaf.") + msg += "\tSubject is [ears.ear_damage > UNHEALING_EAR_DAMAGE ? "permanently ": "temporarily "] deaf.\n" healthy = FALSE if(healthy) - to_chat(user, "\tHealthy.") + msg += "\tHealthy.\n" else - to_chat(user, "\tSubject does not have ears.") + msg += "\tSubject does not have ears.\n" var/obj/item/organ/eyes/eyes = C.getorganslot(ORGAN_SLOT_EYES) - to_chat(user, "\t==EYE STATUS==") + msg += "\t==EYE STATUS==\n" if(istype(eyes)) var/healthy = TRUE if(C.has_trait(TRAIT_BLIND)) - to_chat(user, "\tSubject is blind.") + msg += "\tSubject is blind.\n" healthy = FALSE if(C.has_trait(TRAIT_NEARSIGHT)) - to_chat(user, "\tSubject is nearsighted.") + msg += "\tSubject is nearsighted.\n" healthy = FALSE if(eyes.eye_damage > 30) - to_chat(user, "\tSubject has severe eye damage.") + msg += "\tSubject has severe eye damage.\n" healthy = FALSE else if(eyes.eye_damage > 20) - to_chat(user, "\tSubject has significant eye damage.") + msg += "\tSubject has significant eye damage.\n" healthy = FALSE else if(eyes.eye_damage) - to_chat(user, "\tSubject has minor eye damage.") + msg += "\tSubject has minor eye damage.\n" healthy = FALSE if(healthy) - to_chat(user, "\tHealthy.") + msg += "\tHealthy.\n" else - to_chat(user, "\tSubject does not have eyes.") + msg += "\tSubject does not have eyes.\n" if(ishuman(M)) var/mob/living/carbon/human/H = M var/ldamage = H.return_liver_damage() if(ldamage > 10) - to_chat(user, "\t[ldamage > 45 ? "Severe" : "Minor"] liver damage detected.") + msg += "\t[ldamage > 45 ? "Severe" : "Minor"] liver damage detected.\n" // Body part damage report if(iscarbon(M) && mode == 1) var/mob/living/carbon/C = M var/list/damaged = C.get_damaged_bodyparts(1,1) if(length(damaged)>0 || oxy_loss>0 || tox_loss>0 || fire_loss>0) - to_chat(user, "\tDamage: Brute-Burn-Toxin-Suffocation\n\t\tSpecifics: [brute_loss]-[fire_loss]-[tox_loss]-[oxy_loss]") + msg += "\tDamage: Brute-Burn-Toxin-Suffocation\n\t\tSpecifics: [brute_loss]-[fire_loss]-[tox_loss]-[oxy_loss]\n" for(var/obj/item/bodypart/org in damaged) - to_chat(user, "\t\t[capitalize(org.name)]: [(org.brute_dam > 0) ? "[org.brute_dam]" : "0"]-[(org.burn_dam > 0) ? "[org.burn_dam]" : "0"]") + msg += "\t\t[capitalize(org.name)]: [(org.brute_dam > 0) ? "[org.brute_dam]" : "0"]-[(org.burn_dam > 0) ? "[org.burn_dam]" : "0"]\n" // Species and body temperature if(ishuman(M)) @@ -282,20 +284,22 @@ SLIME SCANNER else if (S.mutantstomach != initial(S.mutantstomach)) mutant = TRUE - to_chat(user, "Species: [S.name][mutant ? "-derived mutant" : ""]") - to_chat(user, "Body temperature: [round(M.bodytemperature-T0C,0.1)] °C ([round(M.bodytemperature*1.8-459.67,0.1)] °F)") + msg += "Species: [H.dna.custom_species ? H.dna.custom_species : S.name] Base: [S.name]\n" + if(mutant) + msg += "Subject has mutations present." + msg += "Body temperature: [round(M.bodytemperature-T0C,0.1)] °C ([round(M.bodytemperature*1.8-459.67,0.1)] °F)\n" // Time of death if(M.tod && (M.stat == DEAD || ((M.has_trait(TRAIT_FAKEDEATH)) && !advanced))) - to_chat(user, "Time of Death: [M.tod]") + msg += "Time of Death: [M.tod]\n" var/tdelta = round(world.time - M.timeofdeath) if(tdelta < (DEFIB_TIME_LIMIT * 10)) - to_chat(user, "Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!") + msg += "Subject died [DisplayTimeText(tdelta)] ago, defibrillation may be possible!\n" for(var/thing in M.diseases) var/datum/disease/D = thing if(!(D.visibility_flags & HIDDEN_SCANNER)) - to_chat(user, "Warning: [D.form] detected\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]") + msg += "Warning: [D.form] detected\nName: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]\n" // Blood Level if(M.has_dna()) @@ -305,7 +309,7 @@ SLIME SCANNER if(ishuman(C)) var/mob/living/carbon/human/H = C if(H.bleed_rate) - to_chat(user, "Subject is bleeding!") + msg += "Subject is bleeding!\n" var/blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100) var/blood_type = C.dna.blood_type if(blood_id != "blood")//special blood substance @@ -315,36 +319,41 @@ SLIME SCANNER else blood_type = blood_id if(C.blood_volume <= BLOOD_VOLUME_SAFE && C.blood_volume > BLOOD_VOLUME_OKAY) - to_chat(user, "LOW blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]") + msg += "LOW blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]\n" else if(C.blood_volume <= BLOOD_VOLUME_OKAY) - to_chat(user, "CRITICAL blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]") + msg += "CRITICAL blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]\n" else - to_chat(user, "Blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]") + msg += "Blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]\n" var/cyberimp_detect for(var/obj/item/organ/cyberimp/CI in C.internal_organs) if(CI.status == ORGAN_ROBOTIC && !CI.syndicate_implant) cyberimp_detect += "[C.name] is modified with a [CI.name].
" if(cyberimp_detect) - to_chat(user, "Detected cybernetic modifications:") - to_chat(user, "[cyberimp_detect]") + msg += "Detected cybernetic modifications:\n" + msg += "[cyberimp_detect]\n" + msg += "*---------*
" + to_chat(user, msg) SEND_SIGNAL(M, COMSIG_NANITE_SCAN, user, FALSE) /proc/chemscan(mob/living/user, mob/living/M) if(istype(M)) if(M.reagents) + var/msg = "*---------*\n" if(M.reagents.reagent_list.len) - to_chat(user, "Subject contains the following reagents:") + msg += "Subject contains the following reagents:\n" for(var/datum/reagent/R in M.reagents.reagent_list) - to_chat(user, "[R.volume] units of [R.name][R.overdosed == 1 ? " - OVERDOSING" : "."]") + msg += "[R.volume] units of [R.name][R.overdosed == 1 ? " - OVERDOSING" : ".
"]\n" else - to_chat(user, "Subject contains no reagents.") + msg += "Subject contains no reagents.\n" if(M.reagents.addiction_list.len) - to_chat(user, "Subject is addicted to the following reagents:") + msg += "Subject is addicted to the following reagents:\n" for(var/datum/reagent/R in M.reagents.addiction_list) - to_chat(user, "[R.name]") + msg += "[R.name]\n" else - to_chat(user, "Subject is not addicted to any reagents.") + msg += "Subject is not addicted to any reagents.\n" + msg += "*---------*
" + to_chat(user, msg) /obj/item/healthanalyzer/verb/toggle_mode() set name = "Switch Verbosity" diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index 079feec17a..1a666ce921 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -122,7 +122,7 @@ new /obj/item/reagent_containers/pill/antirad(src) new /obj/item/reagent_containers/food/drinks/bottle/vodka(src) new /obj/item/healthanalyzer(src) - + /obj/item/storage/firstaid/o2 name = "oxygen deprivation treatment kit" @@ -312,3 +312,11 @@ /obj/item/storage/pill_bottle/mutarad/PopulateContents() for(var/i in 1 to 7) new /obj/item/reagent_containers/pill/mutarad(src) + +/obj/item/storage/pill_bottle/penis_enlargement + name = "penis enlargement pills" + desc = "You want penis enlargement pills?" + +/obj/item/storage/pill_bottle/penis_enlargement/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/reagent_containers/pill/penis_enlargement(src) diff --git a/code/modules/antagonists/blob/blob/blobs/core.dm b/code/modules/antagonists/blob/blob/blobs/core.dm index e048aa7665..81792ca4f6 100644 --- a/code/modules/antagonists/blob/blob/blobs/core.dm +++ b/code/modules/antagonists/blob/blob/blobs/core.dm @@ -4,7 +4,7 @@ icon_state = "blank_blob" desc = "A huge, pulsating yellow mass." max_integrity = 400 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 90) + armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 5, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 90) // Last stand explosion_block = 6 point_return = -1 health_regen = 0 //we regen in Life() instead of when pulsed diff --git a/code/modules/antagonists/blob/blob/blobs/factory.dm b/code/modules/antagonists/blob/blob/blobs/factory.dm index 3d955036b0..284a43562e 100644 --- a/code/modules/antagonists/blob/blob/blobs/factory.dm +++ b/code/modules/antagonists/blob/blob/blobs/factory.dm @@ -6,6 +6,7 @@ max_integrity = 200 health_regen = 1 point_return = 25 + armor = list("melee" = 10, "bullet" = 20, "laser" = 15, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) var/list/spores = list() var/mob/living/simple_animal/hostile/blob/blobbernaut/naut = null var/max_spores = 3 diff --git a/code/modules/antagonists/blob/blob/blobs/resource.dm b/code/modules/antagonists/blob/blob/blobs/resource.dm index 5024d0984c..76aecf717d 100644 --- a/code/modules/antagonists/blob/blob/blobs/resource.dm +++ b/code/modules/antagonists/blob/blob/blobs/resource.dm @@ -5,6 +5,7 @@ desc = "A thin spire of slightly swaying tendrils." max_integrity = 60 point_return = 15 + armor = list("melee" = 10, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) var/resource_delay = 0 /obj/structure/blob/resource/scannerreport() diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index b9abf76fd1..c9b48fa6fc 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -64,11 +64,11 @@ /obj/effect/proc_holder/changeling/sting/transformation name = "Transformation Sting" desc = "We silently sting a human, injecting a retrovirus that forces them to transform." - helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat." + helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human. This ability is loud, and might cause our blood to react violently to heat." sting_icon = "sting_transform" chemical_cost = 50 dna_cost = 3 - loudness = 1 + loudness = 2 var/datum/changelingprofile/selected_dna = null action_icon = 'icons/mob/actions/actions_changeling.dmi' action_icon_state = "ling_sting_transform" diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm index 9368a41731..b5f0e7a240 100644 --- a/code/modules/cargo/exports/large_objects.dm +++ b/code/modules/cargo/exports/large_objects.dm @@ -55,7 +55,6 @@ contents_cost = 700 export_types = list(/obj/structure/reagent_dispensers/beerkeg) - /datum/export/large/pipedispenser cost = 500 unit_name = "pipe dispenser" @@ -122,7 +121,6 @@ unit_name = "packaged antimatter reactor section" export_types = list(/obj/item/am_shielding_container) - /datum/export/large/iv cost = 50 unit_name = "iv drip" @@ -133,3 +131,86 @@ unit_name = "security barrier" export_types = list(/obj/item/grenade/barrier, /obj/structure/barricade/security) +/datum/export/large/odysseus + cost = 5500 + unit_name = "working odysseus" + export_types = list(/obj/mecha/medical/odysseus) + include_subtypes = FALSE + +/datum/export/large/ripley + cost = 6500 + unit_name = "working ripley" + export_types = list(/obj/mecha/working/ripley) + include_subtypes = FALSE + +/datum/export/large/firefighter + cost = 9000 + unit_name = "working firefighter" + export_types = list(/obj/mecha/working/ripley/firefighter) + include_subtypes = FALSE + +/datum/export/large/gygax + cost = 19000 + unit_name = "working gygax" + export_types = list(/obj/mecha/combat/gygax) + include_subtypes = FALSE + +/datum/export/large/durand + cost = 10000 + unit_name = "working durand" + export_types = list(/obj/mecha/combat/durand) + include_subtypes = FALSE + +/datum/export/large/phazon + cost = 25000 //Little over half do to needing a core + unit_name = "working phazon" + export_types = list(/obj/mecha/combat/phazon) + include_subtypes = FALSE + +/datum/export/large/marauder + cost = 15000 //Still a Combat class mech - CC tech as well! 150% "normal" boundy price. + unit_name = "working marauder" + export_types = list(/obj/mecha/combat/marauder) + include_subtypes = FALSE + +/datum/export/large/deathripley + cost = 8500 //Still a "Combat class" mech - Illegal tech as well! 165% "normal" boundy price. + unit_name = "working illegally modified" + export_types = list(/obj/mecha/working/ripley/deathripley) + include_subtypes = FALSE + +/datum/export/large/gygaxdark + cost = 28500 //Still a Combat class mech - Illegal tech as well! 150% "normal" boundy price. + unit_name = "working illegally modified gygax" + export_types = list(/obj/mecha/combat/gygax/dark) + include_subtypes = FALSE + +/datum/export/large/oldripley + cost = 6250 //old mech - Scrap metal ! 50% "normal" boundy price. + unit_name = "working miner ripley" + export_types = list(/obj/mecha/working/ripley/mining) + include_subtypes = FALSE + +/datum/export/large/honk + cost = 12000 //Still a "Combat class" mech - Comats bordem honk! + unit_name = "working honker" + export_types = list(/obj/mecha/combat/honker) + include_subtypes = FALSE + +/datum/export/large/reticence + cost = 12000 //Still a "Combat class" mech - Has cloking and lethal weaponds. + unit_name = "working reticence" + export_types = list(/obj/mecha/combat/reticence) + include_subtypes = FALSE + +/datum/export/large/seraph + cost = 25500 //Still a Combat class mech - CC tech as well! 150% "normal" boundy price. + unit_name = "working seraph" + export_types = list(/obj/mecha/combat/marauder/seraph) + include_subtypes = FALSE + +/datum/export/large/mauler + cost = 12000 //Still a Combat class mech - CC lethal weaponds. + unit_name = "working legally modified marauder" + export_types = list(/obj/mecha/combat/marauder/mauler) + include_subtypes = FALSE diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index bb3a4442b3..24768279b8 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -82,6 +82,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/list/custom_names = list() var/prefered_security_department = SEC_DEPT_RANDOM + var/custom_species = null //Quirk list var/list/positive_quirks = list() @@ -269,6 +270,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

Body

" dat += "Gender:[gender == MALE ? "Male" : (gender == FEMALE ? "Female" : (gender == PLURAL ? "Non-binary" : "Object"))]
" dat += "Species:[pref_species.id]
" + dat += "Custom Species Name:[custom_species ? custom_species : "None"]
" dat += "Random Body
" dat += "Always Random Body:[be_random_body ? "Yes" : "No"]
" dat += "
Cycle background:[bgstate]
" @@ -816,10 +818,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" dat += "
[gear_tab]
" dat += "
" - dat += "Name" - dat += "Cost" - dat += "Restrictions" - dat += "Description" + dat += "Name" + dat += "Cost" + dat += "Restrictions" + dat += "Description" for(var/j in GLOB.loadout_items[gear_tab]) var/datum/gear/gear = GLOB.loadout_items[gear_tab][j] var/donoritem @@ -1456,6 +1458,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/newtype = GLOB.species_list[result] pref_species = new newtype() //let's ensure that no weird shit happens on species swapping. + custom_species = null if(!("body_markings" in pref_species.default_features)) features["body_markings"] = "None" if(!("mam_body_markings" in pref_species.default_features)) @@ -1477,6 +1480,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(features["mcolor3"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.species_traits) && ReadHSV(temp_hsv)[3] < ReadHSV("#202020")[3])) features["mcolor3"] = pref_species.default_color + if("custom_species") + var/new_species = reject_bad_name(input(user, "Choose your species subtype, if unique. This will show up on examinations and health scans. Do not abuse this:", "Character Preference", custom_species) as null|text) + if(new_species) + custom_species = new_species + else + custom_species = null + if("mutant_color") var/new_mutantcolor = input(user, "Choose your character's alien/mutant color:", "Character Preference","#"+features["mcolor"]) as color|null if(new_mutantcolor) @@ -2115,6 +2125,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.real_name = nameless ? "[real_name] #[rand(10000, 99999)]" : real_name character.name = character.real_name character.nameless = nameless + character.custom_species = custom_species character.gender = gender character.age = age @@ -2149,6 +2160,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.dna.features = features.Copy() character.dna.real_name = character.real_name character.dna.nameless = character.nameless + character.dna.custom_species = character.custom_species if("tail_lizard" in pref_species.default_features) character.dna.species.mutant_bodyparts |= "tail_lizard" diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index b6210d94b8..6d165bc531 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -236,6 +236,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Character S["real_name"] >> real_name S["nameless"] >> nameless + S["custom_species"] >> custom_species S["name_is_always_random"] >> be_random_name S["body_is_always_random"] >> be_random_body S["gender"] >> gender @@ -350,7 +351,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car gender = sanitize_gender(gender, TRUE, TRUE) if(!real_name) real_name = random_unique_name(gender) - + custom_species = reject_bad_name(custom_species) for(var/custom_name_id in GLOB.preferences_custom_names) var/namedata = GLOB.preferences_custom_names[custom_name_id] custom_names[custom_name_id] = reject_bad_name(custom_names[custom_name_id],namedata["allow_numbers"]) @@ -427,6 +428,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Character WRITE_FILE(S["real_name"] , real_name) WRITE_FILE(S["nameless"] , nameless) + WRITE_FILE(S["custom_species"] , custom_species) WRITE_FILE(S["name_is_always_random"] , be_random_name) WRITE_FILE(S["body_is_always_random"] , be_random_body) WRITE_FILE(S["gender"] , gender) diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index 33affa944d..98bb3aec13 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -27,14 +27,19 @@ if("mam_snouts" in pref_species.default_features) if(H.dna.features["mam_snouts"] != "None") muzzle_var = ALT_STYLE + else + muzzle_var = NORMAL_STYLE else if("snout" in pref_species.default_features) if(H.dna.features["snout"] != "None") muzzle_var = ALT_STYLE + else + muzzle_var = NORMAL_STYLE else muzzle_var = NORMAL_STYLE - H.update_inv_head() + + H.update_inv_head() /obj/item/clothing/head/worn_overlays(isinhands = FALSE) . = list() diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index b1503f26fb..b6c5a5417a 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -26,7 +26,7 @@ icon_state = "captain" item_state = "that" flags_inv = 0 - armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) strip_delay = 60 dog_fashion = /datum/dog_fashion/head/captain @@ -50,7 +50,7 @@ name = "head of personnel's cap" icon_state = "hopcap" desc = "The symbol of true bureaucratic micromanagement." - armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list("melee" = 30, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) dog_fashion = /datum/dog_fashion/head/hop /obj/item/clothing/head/hopcap/beret @@ -200,4 +200,4 @@ /obj/item/clothing/head/beret/qm name = "quartermaster's beret" desc = "This headwear shows off your Cargonian leadership" - icon_state = "qmberet" \ No newline at end of file + icon_state = "qmberet" diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index f83dfca245..2b820ecfc4 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -30,10 +30,15 @@ if("mam_snouts" in pref_species.default_features) if(H.dna.features["mam_snouts"] != "None") muzzle_var = ALT_STYLE + else + muzzle_var = NORMAL_STYLE else if("snout" in pref_species.default_features) if(H.dna.features["snout"] != "None") muzzle_var = ALT_STYLE + else + muzzle_var = NORMAL_STYLE + else muzzle_var = NORMAL_STYLE diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 8245148096..d4cfbd1a84 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -171,17 +171,57 @@ icon_state = "stripedbluescarf" item_color = "stripedbluescarf" -/obj/item/clothing/neck/petcollar //don't really wear this though please c'mon seriously guys +/////////// +//COLLARS// +/////////// + +/obj/item/clothing/neck/petcollar name = "pet collar" desc = "It's for pets. Though you probably could wear it yourself, you'd doubtless be the subject of ridicule." icon_state = "petcollar" item_color = "petcollar" + pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar var/tagname = null /obj/item/clothing/neck/petcollar/attack_self(mob/user) tagname = copytext(sanitize(input(user, "Would you like to change the name on the tag?", "Name your new pet", "Spot") as null|text),1,MAX_NAME_LEN) name = "[initial(name)] - [tagname]" +/obj/item/clothing/neck/petcollar/locked + name = "locked collar" + desc = "A collar that has a small lock on it to keep it from being removed." + pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/collar/locked + var/lock = FALSE + +/obj/item/clothing/neck/petcollar/locked/attackby(obj/item/key/collar, mob/user, params) + if(lock != FALSE) + to_chat(user, "With a click the collar unlocks!") + lock = FALSE + item_flags = NONE + else + to_chat(user, "With a click the collar locks!") + lock = TRUE + item_flags = NODROP + return + +/obj/item/clothing/neck/petcollar/locked/attack_hand(mob/user) + if(loc == user && user.get_item_by_slot(SLOT_NECK) && lock != FALSE) + to_chat(user, "The collar is locked! You'll need unlock the collar before you can take it off!") + return + ..() + +/obj/item/key/collar + name = "Collar Key" + desc = "A key for a tiny lock on a collar or bag." + +/obj/item/clothing/neck/petcollar/Initialize() + . = ..() + new /obj/item/reagent_containers/food/snacks/cookie(src) + +/obj/item/clothing/neck/petcollar/locked/Initialize() + . = ..() + new /obj/item/key/collar(src) + ////////////// //DOPE BLING// ////////////// @@ -191,4 +231,4 @@ desc = "Damn, it feels good to be a gangster." icon = 'icons/obj/clothing/neck.dmi' icon_state = "bling" - item_color = "bling" \ No newline at end of file + item_color = "bling" diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 86ede7f255..75833fc086 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -13,16 +13,49 @@ var/list/vents = list() var/randomProbability = 1 var/reagentsAmount = 100 - var/list/saferChems = list("water","carbon","flour","cleaner","nutriment","condensedcapsaicin","mushroomhallucinogen","lube","pink_glitter","cryptobiolin", - "plantbgone","blood","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid","mindbreaker","rotatium","bluespace", - "pax","laughter","concentrated_barbers_aid","colorful_reagent","dizzysolution","tiresolution","sodiumchloride","beer","hair_dye","sugar","white_glitter","growthserum") + var/list/saferChems = list( + "water", + "carbon", + "flour", + "cleaner", + "nutriment", + "condensedcapsaicin", + "mushroomhallucinogen", + "lube", + "pink_glitter", + "cryptobiolin", + "plantbgone", + "blood", + "charcoal", + "space_drugs", + "morphine", + "holywater", + "ethanol", + "hot_coco", + "sacid", + "mindbreaker", + "rotatium", + "bluespace", + "pax", + "laughter", + "concentrated_barbers_aid", + "colorful_reagent", + "dizzysolution", + "tiresolution", + "sodiumchloride", + "beer", + "hair_dye", + "sugar", + "white_glitter", + "growthserum" + ) //needs to be chemid unit checked at some point /datum/round_event/vent_clog/announce() priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert") /datum/round_event/vent_clog/setup() - endWhen = rand(25, 100) + endWhen = rand(120, 180) for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines) var/turf/T = get_turf(temp_vent) if(T && is_station_level(T.z) && !temp_vent.welded) @@ -30,25 +63,34 @@ if(!vents.len) return kill() -/datum/round_event/vent_clog/start() - for(var/obj/machinery/atmospherics/components/unary/vent in vents) - if(vent && vent.loc) - var/datum/reagents/R = new/datum/reagents(1000) - R.my_atom = vent - if (prob(randomProbability)) - R.add_reagent(get_random_reagent_id(), reagentsAmount) - else - R.add_reagent(pick(saferChems), reagentsAmount) +/datum/round_event/vent_clog/tick() - var/datum/effect_system/foam_spread/foam = new - foam.set_up(200, get_turf(vent), R) - foam.start() + if(!vents.len) + return kill() - var/cockroaches = prob(33) ? 3 : 0 - while(cockroaches) - new /mob/living/simple_animal/cockroach(get_turf(vent)) - cockroaches-- - CHECK_TICK + CHECK_TICK + + var/obj/machinery/atmospherics/components/unary/vent = pick(vents) + vents -= vent + + if(!vent) + return + + var/turf/T = get_turf(vent) + if(!T) + return + + var/datum/reagents/R = new/datum/reagents(1000) + R.my_atom = vent + if (prob(randomProbability)) + R.add_reagent(get_random_reagent_id(), reagentsAmount) + else + R.add_reagent(pick(saferChems), reagentsAmount) + + var/datum/effect_system/smoke_spread/chem/C = new + C.set_up(R,16,T,TRUE) + C.start() + playsound(T, 'sound/effects/smoke.ogg', 50, 1, -3) /datum/round_event_control/vent_clog/threatening name = "Clogged Vents: Threatening" diff --git a/code/modules/events/wizard/race.dm b/code/modules/events/wizard/race.dm index 32b45e46f8..7ea875f152 100644 --- a/code/modules/events/wizard/race.dm +++ b/code/modules/events/wizard/race.dm @@ -5,6 +5,18 @@ max_occurrences = 5 earliest_start = 0 MINUTES +/datum/round_event/wizard/race + var/list/stored_name + var/list/stored_species + var/list/stored_dna + +/datum/round_event/wizard/race/setup() + stored_name = list() + stored_species = list() + stored_dna = list() + endWhen = rand(600,1200) //10 to 20 minutes + ..() + /datum/round_event/wizard/race/start() var/all_the_same = 0 @@ -12,18 +24,35 @@ for(var/speciestype in subtypesof(/datum/species)) var/datum/species/S = new speciestype() - if(!S.dangerous_existence && !S.blacklisted) + if(!S.dangerous_existence && !S.blacklisted && !S.nojumpsuit) //Dangerous Species, Blacklisted Species, and Species who can't wear jumpsuits are blacklisted. all_species += speciestype var/datum/species/new_species = pick(all_species) - if(prob(50)) + if(prob(75)) all_the_same = 1 - for(var/mob/living/carbon/human/H in GLOB.carbon_list) //yes, even the dead + for(var/mob/living/carbon/human/H in GLOB.carbon_list) + var/turf/T = get_turf(H) + if(!T) + continue + if(!is_station_level(T.z)) + continue + stored_name[H] = H.real_name + stored_species[H] = H.dna.species + stored_dna[H] = H.dna.unique_enzymes H.set_species(new_species) H.real_name = H.dna.species.random_name(H.gender,1) H.dna.unique_enzymes = H.dna.generate_unique_enzymes() to_chat(H, "You feel somehow... different?") if(!all_the_same) new_species = pick(all_species) + +/datum/round_event/wizard/race/end() + for(var/mob/living/carbon/human/H in GLOB.carbon_list) + if(!(stored_name[H] && stored_species[H] && stored_dna[H])) + continue + H.set_species(stored_species[H]) + H.real_name = stored_name[H] + H.dna.unique_enzymes = stored_dna[H] + to_chat(H, "You feel back to your normal self again.") \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm index 781b021d05..1eeea79410 100644 --- a/code/modules/food_and_drinks/food/snacks_cake.dm +++ b/code/modules/food_and_drinks/food/snacks_cake.dm @@ -54,7 +54,6 @@ tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR - /obj/item/reagent_containers/food/snacks/store/cake/brain name = "brain cake" desc = "A squishy cake-thing." @@ -86,7 +85,6 @@ tastes = list("cake" = 4, "cream cheese" = 3) foodtype = GRAIN | DAIRY - /obj/item/reagent_containers/food/snacks/cakeslice/cheese name = "cheese cake slice" desc = "Slice of pure cheestisfaction." @@ -95,7 +93,6 @@ tastes = list("cake" = 4, "cream cheese" = 3) foodtype = GRAIN | DAIRY - /obj/item/reagent_containers/food/snacks/store/cake/orange name = "orange cake" desc = "A cake with added orange." @@ -132,7 +129,6 @@ tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) foodtype = GRAIN | DAIRY | FRUIT | SUGAR - /obj/item/reagent_containers/food/snacks/store/cake/lemon name = "lemon cake" desc = "A cake with added lemon." @@ -143,7 +139,6 @@ tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) foodtype = GRAIN | DAIRY | FRUIT | SUGAR - /obj/item/reagent_containers/food/snacks/cakeslice/lemon name = "lemon cake slice" desc = "Just a slice of cake, it is enough for everyone." @@ -163,7 +158,6 @@ tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR - /obj/item/reagent_containers/food/snacks/cakeslice/chocolate name = "chocolate cake slice" desc = "Just a slice of cake, it is enough for everyone." @@ -172,7 +166,6 @@ tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR - /obj/item/reagent_containers/food/snacks/store/cake/birthday name = "birthday cake" desc = "Happy Birthday little clown..." @@ -250,5 +243,100 @@ icon_state = "pumpkinspicecakeslice" filling_color = "#FFD700" tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) - foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR + +/obj/item/reagent_containers/food/snacks/store/cake/bsvc // blackberry strawberries vanilla cake + name = "blackberry and strawberry vanilla cake" + desc = "A plain cake, filled with assortment of blackberries and strawberries!" + icon = 'modular_citadel/icons/obj/food/cake.dmi' + icon_state = "blackbarry_strawberries_cake_vanilla_cake" + slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bsvc + bonus_reagents = list("nutriment" = 14, "vitamin" = 4) + tastes = list("blackbarry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2, "cake" = 3) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/reagent_containers/food/snacks/cakeslice/bsvc + name = "blackberry and strawberry vanilla cake slice" + desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" + icon = 'modular_citadel/icons/obj/food/cake.dmi' + icon_state = "blackbarry_strawberries_cake_vanilla_slice" + filling_color = "#FFD700" + tastes = list("blackbarry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2,"cake" = 3) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/reagent_containers/food/snacks/store/cake/bscc // blackbarry strawberries chocolate cake + name = "blackberry and strawberry chocolate cake" + desc = "A plain cake, filled with assortment of blackberries and strawberries!" + icon = 'modular_citadel/icons/obj/food/cake.dmi' + icon_state = "blackbarry_strawberries_cake_coco_cake" + slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bscc + bonus_reagents = list("nutriment" = 14, "vitamin" = 4, "cocoa" = 5) + tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/reagent_containers/food/snacks/cakeslice/bscc + name = "blackberry and strawberry chocolate cake slice" + desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" + icon = 'modular_citadel/icons/obj/food/cake.dmi' + icon_state = "blackbarry_strawberries_cake_coco_cake_slice" + filling_color = "#FFD700" + tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR + +obj/item/reagent_containers/food/snacks/store/cake/holy_cake + name = "angel food cake" + desc = "A cake made for angels and chaplains alike! Contains holy water." + icon = 'modular_citadel/icons/obj/food/cake.dmi' + icon_state = "holy_cake" + slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice + bonus_reagents = list("nutriment" = 1, "vitamin" = 3, "holy_water" = 10) + tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1) + foodtype = GRAIN | DAIRY | SUGAR + +/obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice + name = "angel food cake slice" + desc = "A slice of heavenly cake." + icon = 'modular_citadel/icons/obj/food/cake.dmi' + icon_state = "holy_cake_slice" + filling_color = "#00FFFF" + tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1) + foodtype = GRAIN | DAIRY | SUGAR + +obj/item/reagent_containers/food/snacks/store/cake/pound_cake + name = "pound cake" + desc = "A condensed cake made for filling people up quickly." + icon = 'modular_citadel/icons/obj/food/cake.dmi' + icon_state = "pound_cake" + slices_num = 7 //Its ment to feed the party + slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice + bonus_reagents = list("nutriment" = 60) + tastes = list("cake" = 5, "sweetness" = 1, "batter" = 1) + foodtype = GRAIN | DAIRY | SUGAR | JUNKFOOD + +/obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice + name = "pound cake slice" + desc = "A slice of condensed cake made for filling people up quickly." + icon = 'modular_citadel/icons/obj/food/cake.dmi' + icon_state = "pound_cake_slice" + filling_color = "#00FFFF" + tastes = list("cake" = 5, "sweetness" = 5, "batter" = 1) + foodtype = GRAIN | DAIRY | SUGAR | JUNKFOOD + +obj/item/reagent_containers/food/snacks/store/cake/hardware_cake + name = "hardware cake" + desc = "A cake that is made with electronic boards and leaks acid..." + icon = 'modular_citadel/icons/obj/food/cake.dmi' + icon_state = "hardware_cake" + slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice + bonus_reagents = list("sacid" = 15, "oil" = 15) + tastes = list("acid" = 1, "metal" = 1, "regret" = 10) + foodtype = GRAIN | GROSS + +/obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice + name = "hardware cake slice" + desc = "A slice of electronic boards and some acid." + icon = 'modular_citadel/icons/obj/food/cake.dmi' + icon_state = "hardware_cake_slice" + filling_color = "#00FFFF" + tastes = list("acid" = 1, "metal" = 1, "regret" = 10) + foodtype = GRAIN | GROSS diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index d3466caa5e..cf99bd78d9 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -54,6 +54,43 @@ tastes = list("fish" = 1, "chips" = 1) foodtype = MEAT | VEGETABLES | FRIED +/obj/item/reagent_containers/food/snacks/sushi_basic + name = "funa hosomaki" + desc = "A small cylindrical kudzu skin, filled with rice and fish." + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "sushie_basic" + bonus_reagents = list("vitamin" = 2) + list_reagents = list("nutriment" = 4) + bitesize = 10 + filling_color = "#F2EEEA" //rgb(242, 238, 234) + tastes = list("fish" = 1, "rice" = 2, "salt" = 1) + foodtype = MEAT | VEGETABLES + +/obj/item/reagent_containers/food/snacks/sushi_adv + name = "funa nigiri" + desc = "A peace of carp lightly placed on some rice." + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "sushie_adv" + bonus_reagents = list("vitamin" = 2) + list_reagents = list("nutriment" = 6) + bitesize = 10 + filling_color = "#F2EEEA" //rgb(242, 238, 234) + tastes = list("fish" = 2, "rice" = 2, "salt" = 1) + foodtype = MEAT | VEGETABLES + +/obj/item/reagent_containers/food/snacks/sushi_pro + name = "funa nigiri" + desc = "A well prepared peace of the best of the carp fillet placed on rice. Looks fancy and fresh!" + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "sushie_pro" + bonus_reagents = list("nutriment" = 2, "vitamin" = 2) + list_reagents = list("nutriment" = 6, "vitamin" = 2) + bitesize = 10 + filling_color = "#F2EEEA" //rgb(242, 238, 234) + tastes = list("fish" = 3, "rice" = 2, "salt" = 1) + foodtype = MEAT | VEGETABLES + + ////////////////////////////////////////////MEATS AND ALIKE//////////////////////////////////////////// /obj/item/reagent_containers/food/snacks/tofu diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index af7a8c06f4..5213cc96e1 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -207,6 +207,16 @@ tastes = list("cobwebs" = 1, "sugar" = 2) foodtype = JUNKFOOD | SUGAR +/obj/item/reagent_containers/food/snacks/tobiko + name = "tobiko" + desc = "Spider eggs wrapped in a thin salted Kudzu pod" + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "sushie_egg" + list_reagents = list("nutriment" = 6, "vitamin" = 2) + filling_color = "#FF3333" // R225 G051 B051 + tastes = list("seaweed" = 1, "cobwebs" = 1, "salty" = 2) + foodtype = MEAT | VEGETABLES + /obj/item/reagent_containers/food/snacks/chococoin name = "chocolate coin" desc = "A completely edible but nonflippable festive coin." @@ -569,3 +579,12 @@ filling_color = "#A0522D" tastes = list("chocolate" = 1) foodtype = JUNKFOOD | SUGAR + +/obj/item/reagent_containers/food/snacks/riceball + name = "onigiri" + desc = "A ball of rice with some light salt and a wrap of Kudzu skin." + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "riceball" + list_reagents = list("nutriment" = 6, "sodiumchloride" = 2) + tastes = list("rice" = 3, "salt" = 1) + foodtype = GRAIN diff --git a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm index 747f5f7d35..88f8848315 100644 --- a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm +++ b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm @@ -102,3 +102,13 @@ list_reagents = list("nutriment" = 2, "vitamin" = 2) tastes = list("bread" = 2) foodtype = GRAIN + +/obj/item/reagent_containers/food/snacks/tuna_sandwich + name = "tuna sandwich" + desc = "Both a salad and a sandwich in one." + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "tunasandwich" + trash = /obj/item/trash/plate + bonus_reagents = list("nutriment" = 1, "vitamin" = 3) + tastes = list("tuna" = 4, "mayonnaise" = 2, "bread" = 2) + foodtype = GRAIN | MEAT diff --git a/code/modules/food_and_drinks/food/snacks_sushi.dm b/code/modules/food_and_drinks/food/snacks_sushi.dm new file mode 100644 index 0000000000..a4cbc5e344 --- /dev/null +++ b/code/modules/food_and_drinks/food/snacks_sushi.dm @@ -0,0 +1,95 @@ +//////////////////////////Sushi Components/////////////////////// + +/obj/item/reagent_containers/food/snacks/sushi_rice + name = "Sushi Rice" + desc = "A bowl of sticky rice for making sushi." + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "sushi_rice" + list_reagents = list("sodiumchloride" = 5) + tastes = list("rice" = 5, "salt" = 1) + foodtype = GRAIN + +/obj/item/reagent_containers/food/snacks/sea_weed + name = "Sea Weed Sheet" + desc = "A thin, light salt sheet of plant mater. This is commenly used in sushi recipes," + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "sea_weed" + list_reagents = list("sodiumchloride" = 2) + tastes = list("plants" = 2, "salt" = 1) + foodtype = VEGETABLES + +/obj/item/reagent_containers/food/snacks/tuna + name = "Canned Tuna" + desc = "A small can of tuna fish beloved by felines." + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "tuna_can" +//trash = /obj/item/trash/tuna_used //I dont know if I like this idea - A Masked Cat + list_reagents = list("sodiumchloride" = 5, "mercury" = 2) + tastes = list("tuna" = 15, "mercury" = 1, "salt" = 3) + foodtype = MEAT + +//////////////////////////Sushi///////////////////////////////// +/obj/item/reagent_containers/food/snacks/sushie_basic + name = "Funa Hosomaki" + desc = "A small cylindrical filled with rice and fish." + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "sushie_basic" + bonus_reagents = list("vitamin" = 2) + list_reagents = list("nutriment" = 1) + bitesize = 1 + filling_color = "#F2EEEA" //rgb(242, 238, 234) + tastes = list("fish" = 1, "rice" = 1, "salt" = 1) + foodtype = MEAT | VEGETABLES + +/obj/item/reagent_containers/food/snacks/sushie_adv + name = "Funa Nigiri" + desc = "A pice of carp lightly placed on some rice." + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "sushie_adv" + bonus_reagents = list("vitamin" = 2) + list_reagents = list("nutriment" = 2) + bitesize = 1 + filling_color = "#F2EEEA" //rgb(242, 238, 234) + tastes = list("fish" = 1, "rice" = 1, "salt" = 1) + foodtype = MEAT | VEGETABLES + +/obj/item/reagent_containers/food/snacks/sushie_pro + name = "Funa Nigiri" + desc = "A well prepared pice of the best of the carp fillet placed on rice. Looks fancy and fresh!" + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "sushie_pro" + bonus_reagents = list("nutriment" = 1, "vitamin" = 2) + list_reagents = list("nutriment" = 8, "vitamin" = 1) + bitesize = 1 + filling_color = "#F2EEEA" //rgb(242, 238, 234) + tastes = list("fish" = 1, "rice" = 1, "salt" = 1) + foodtype = MEAT | VEGETABLES + +/obj/item/reagent_containers/food/snacks/tobiko + name = "Tobiko" + desc = "Spider eggs wrapped in a thin salted Kudzu pod" + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "sushie_egg" + list_reagents = list("nutriment" = 3, "vitamin" = 2) + filling_color = "#FF3333" // R225 G051 B051 + tastes = list("seaweed" = 1, "salty" = 2) + foodtype = MEAT | VEGETABLES + +/obj/item/reagent_containers/food/snacks/riceball + name = "Onigiri" + desc = "A ball of rice with some light salt and a wrap of Kudzu skin." + icon = 'modular_citadel/icons/obj/food/food.dmi' + icon_state = "riceball" + list_reagents = list("nutriment" = 5, "sodiumchloride" = 2) + tastes = list("rice" = 4, "salt" = 1) + foodtype = GRAIN + +/obj/item/reagent_containers/food/snacks/sashimi + name = "carp sashimi" + desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself." + icon_state = "sashimi" + bonus_reagents = list("nutriment" = 1, "capsaicin" = 4, "vitamin" = 4) + list_reagents = list("nutriment" = 6, "capsaicin" = 5) + filling_color = "#FA8072" + tastes = list("fish" = 1, "hot peppers" = 1) + foodtype = MEAT | TOXIC \ No newline at end of file diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm index 01c13abf47..464b8ce26f 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm @@ -102,6 +102,52 @@ result = /obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice subcategory = CAT_CAKE +/datum/crafting_recipe/food/holycake + name = "Angel food cake" + reqs = list( + /datum/reagent/water/holywater = 15, + /obj/item/reagent_containers/food/snacks/store/cake/plain = 1 + ) + result = /obj/item/reagent_containers/food/snacks/store/cake/holy_cake + subcategory = CAT_CAKE + +/datum/crafting_recipe/food/poundcake + name = "Pound cake" + reqs = list( + /obj/item/reagent_containers/food/snacks/store/cake/plain = 4 + ) + result = /obj/item/reagent_containers/food/snacks/store/cake/pound_cake + subcategory = CAT_CAKE + +/datum/crafting_recipe/food/hardwarecake + name = "Hardware cake" + reqs = list( + /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/circuitboard = 2, + /datum/reagent/toxin/acid = 5 + ) + result = /obj/item/reagent_containers/food/snacks/store/cake/hardware_cake + subcategory = CAT_CAKE + +/datum/crafting_recipe/food/bscccake + name = "blackberry and strawberry chocolate cake" + reqs = list( + /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/reagent_containers/food/snacks/chocolatebar = 2, + /obj/item/reagent_containers/food/snacks/grown/berries = 5 + ) + result = /obj/item/reagent_containers/food/snacks/store/cake/bscc + subcategory = CAT_CAKE + +/datum/crafting_recipe/food/bscvcake + name = "blackberry and strawberry vanilla cake" + reqs = list( + /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/reagent_containers/food/snacks/grown/berries = 5 + ) + result = /obj/item/reagent_containers/food/snacks/store/cake/bsvc + subcategory = CAT_CAKE + /datum/crafting_recipe/food/cak name = "Living cat/cake hybrid" reqs = list( @@ -114,4 +160,4 @@ /datum/reagent/teslium = 1 //To shock the whole thing into life ) result = /mob/living/simple_animal/pet/cat/cak - subcategory = CAT_CAKE //Cat! Haha, get it? CAT? GET IT??? + subcategory = CAT_CAKE //Cat! Haha, get it? CAT? GET IT? We get it - Love Catpeople diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index b33d6a520b..c16c7268b9 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -1,5 +1,3 @@ - - ////////////////////////////////////////////////KEBABS//////////////////////////////////////////////// /datum/crafting_recipe/food/humankebab @@ -71,16 +69,6 @@ result = /obj/item/reagent_containers/food/snacks/fishfingers subcategory = CAT_MEAT -/datum/crafting_recipe/food/sashimi - name = "Sashimi" - reqs = list( - /datum/reagent/consumable/soysauce = 5, - /obj/item/reagent_containers/food/snacks/spidereggs = 1, - /obj/item/reagent_containers/food/snacks/carpmeat = 1 - ) - result = /obj/item/reagent_containers/food/snacks/sashimi - subcategory = CAT_MEAT - ////////////////////////////////////////////////MR SPIDER//////////////////////////////////////////////// /datum/crafting_recipe/food/spidereggsham diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index 3925416560..3dd27ddd01 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -345,3 +345,13 @@ ) result = /obj/item/reagent_containers/food/snacks/salad/ricepudding subcategory = CAT_MISCFOOD + +/datum/crafting_recipe/food/riceball + name = "Onigiri" + reqs = list( + /datum/reagent/consumable/soysauce = 1, + /obj/item/reagent_containers/food/snacks/grown/kudzupod = 1, + /obj/item/reagent_containers/food/snacks/salad/boiledrice = 1 + ) + result = /obj/item/reagent_containers/food/snacks/riceball + subcategory = CAT_MISCFOOD diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm index 9750e91930..a2e83a09b4 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm @@ -62,5 +62,13 @@ result = /obj/item/reagent_containers/food/snacks/notasandwich subcategory = CAT_SANDWICH - - +/datum/crafting_recipe/food/notasandwich + name = "Tuna sandwich" + reqs = list( + /obj/item/reagent_containers/food/snacks/breadslice/plain = 2, + /obj/item/reagent_containers/food/snacks/tuna = 1, + /obj/item/reagent_containers/food/snacks/grown/onion = 1, + /obj/item/reagent_containers/food/condiment/mayonnaise = 5 + ) + result = /obj/item/reagent_containers/food/snacks/tuna_sandwich + subcategory = CAT_SANDWICH diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sushi.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sushi.dm new file mode 100644 index 0000000000..99d48cf69d --- /dev/null +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sushi.dm @@ -0,0 +1,94 @@ +//////////////////////////Sushi Components/////////////////////// + +/datum/crafting_recipe/food/sushi_rice + name = "Sushi Rice" + reqs = list( + /datum/reagent/water = 40, + /datum/reagent/consumable/rice = 10 + ) + result = /obj/item/reagent_containers/food/snacks/sushi_rice + subcategory = CAT_SUSHI + +/datum/crafting_recipe/food/sea_weed + name = "Sea Weed Sheet" + reqs = list( + /datum/reagent/water = 30, + /datum/reagent/consumable/soysauce = 5, + /obj/item/reagent_containers/food/snacks/grown/kudzupod = 1, + ) + result = /obj/item/reagent_containers/food/snacks/sea_weed + subcategory = CAT_SUSHI + +/datum/crafting_recipe/food/tuna_can + name = "Can of Tuna" + reqs = list( + /datum/reagent/consumable/sodiumchloride = 15, + /datum/reagent/consumable/cooking_oil = 5, + /obj/item/reagent_containers/food/snacks/carpmeat = 1, + ) + result = /obj/item/reagent_containers/food/snacks/tuna + subcategory = CAT_SUSHI + +//////////////////////////Sushi///////////////////////////////// + +/datum/crafting_recipe/food/sashimi + name = "Sashimi" + reqs = list( + /datum/reagent/consumable/soysauce = 5, + /obj/item/reagent_containers/food/snacks/spidereggs = 1, + /obj/item/reagent_containers/food/snacks/carpmeat = 1 + ) + result = /obj/item/reagent_containers/food/snacks/sashimi + subcategory = CAT_SUSHI + +/datum/crafting_recipe/food/riceball + name = "Onigiri" + reqs = list( + /datum/reagent/consumable/soysauce = 1, + /obj/item/reagent_containers/food/snacks/sea_weed = 1, + /obj/item/reagent_containers/food/snacks/sushi_rice = 1 + ) + result = /obj/item/reagent_containers/food/snacks/riceball + subcategory = CAT_SUSHI + +/datum/crafting_recipe/food/sushie_egg + name = "Tobiko" + reqs = list( + /datum/reagent/consumable/soysauce = 6, + /obj/item/reagent_containers/food/snacks/spidereggs = 1, + /obj/item/reagent_containers/food/snacks/sea_weed = 2, + ) + result = /obj/item/reagent_containers/food/snacks/tobiko + subcategory = CAT_SUSHI + +/datum/crafting_recipe/food/sushie_basic + name = "Funa Hosomaki" + reqs = list( + /datum/reagent/consumable/soysauce = 3, + /obj/item/reagent_containers/food/snacks/sushi_rice = 1, + /obj/item/reagent_containers/food/snacks/carpmeat = 2, + /obj/item/reagent_containers/food/snacks/sea_weed = 3, + ) + result = /obj/item/reagent_containers/food/snacks/sushie_basic + subcategory = CAT_SUSHI + +/datum/crafting_recipe/food/sushie_adv + name = "Funa Nigiri" + reqs = list( + /datum/reagent/consumable/soysauce = 5, + /obj/item/reagent_containers/food/snacks/sushi_rice = 1, + /obj/item/reagent_containers/food/snacks/carpmeat = 1 + ) + result = /obj/item/reagent_containers/food/snacks/sushie_adv + subcategory = CAT_SUSHI + +/datum/crafting_recipe/food/sushie_pro + name = "Well made Funa Nigiri" + reqs = list( + /datum/reagent/consumable/soysauce = 10, + /obj/item/reagent_containers/food/snacks/sushi_rice = 2, + /obj/item/reagent_containers/food/snacks/carpmeat = 5, + /obj/item/reagent_containers/food/snacks/sea_weed = 1 + ) + result = /obj/item/reagent_containers/food/snacks/sushie_pro + subcategory = CAT_SUSHI diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index e1eb976966..eaffeaf016 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -304,6 +304,8 @@ else if(href_list["create"]) var/amount = (text2num(href_list["amount"])) + //Can't be outside these (if you change this keep a sane limit) + amount = CLAMP(amount, 1, 50) var/datum/design/D = locate(href_list["create"]) create_product(D, amount) updateUsrDialog() diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 6e8b0cb777..a7c58e8669 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -1309,4 +1309,35 @@ set_pin_data(IC_OUTPUT, 2, regurgitated_contents) push_data() + activate_pin(2) + +//Degens +/obj/item/integrated_circuit/input/bonermeter + name = "bonermeter" + desc = "Detects the target's arousal and various statistics about the target's arousal levels. Invasive!" + icon_state = "medscan" + complexity = 4 + inputs = list("target" = IC_PINTYPE_REF) + outputs = list( + "current arousal" = IC_PINTYPE_NUMBER, + "minimum arousal" = IC_PINTYPE_NUMBER, + "maximum arousal" = IC_PINTYPE_NUMBER, + "can be aroused" = IC_PINTYPE_BOOLEAN + ) + activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT) + spawn_flags = IC_SPAWN_RESEARCH + power_draw_per_use = 40 + +/obj/item/integrated_circuit/input/bonermeter/do_work() + + var/mob/living/L = get_pin_data_as_type(IC_INPUT, 1, /mob/living) + + if(!istype(L) || !L.Adjacent(get_turf(src)) ) //Invalid input + return + + set_pin_data(IC_OUTPUT, 1, L.getArousalLoss()) + set_pin_data(IC_OUTPUT, 2, L.min_arousal) + set_pin_data(IC_OUTPUT, 3, L.max_arousal) + set_pin_data(IC_OUTPUT, 4, L.canbearoused) + push_data() activate_pin(2) \ No newline at end of file diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index f63d58b707..c187f49473 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -144,7 +144,7 @@ w_class = WEIGHT_CLASS_SMALL complexity = 10 cooldown_per_use = 1 - ext_cooldown = 1 + ext_cooldown = 2 inputs = list("direction" = IC_PINTYPE_DIR) outputs = list("obstacle" = IC_PINTYPE_REF) activators = list("step towards dir" = IC_PINTYPE_PULSE_IN,"on step"=IC_PINTYPE_PULSE_OUT,"blocked"=IC_PINTYPE_PULSE_OUT) diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm index b9bd4627c4..1959fb55c7 100644 --- a/code/modules/integrated_electronics/subtypes/smart.dm +++ b/code/modules/integrated_electronics/subtypes/smart.dm @@ -125,7 +125,7 @@ name = "man-machine interface tank" desc = "This circuit is just a jar filled with an artificial liquid mimicking the cerebrospinal fluid." extended_desc = "This jar can hold 1 man-machine interface and let it take control of some basic functions of the assembly." - complexity = 29 + complexity = 60 inputs = list("laws" = IC_PINTYPE_LIST) outputs = list( "man-machine interface" = IC_PINTYPE_REF, @@ -254,7 +254,7 @@ name = "pAI connector circuit" desc = "This circuit lets you fit in a personal artificial intelligence to give it some form of control over the bot." extended_desc = "You can wire various functions to it." - complexity = 29 + complexity = 60 inputs = list("laws" = IC_PINTYPE_LIST) outputs = list( "personal artificial intelligence" = IC_PINTYPE_REF, diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 79270ebf63..cd75c3b55b 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -22,11 +22,11 @@ new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300), new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 400), new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400), + new /datum/data/mining_equipment("Survival Knife", /obj/item/kitchen/knife/combat/survival, 450), new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500), new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500), new /datum/data/mining_equipment("Larger Ore Bag", /obj/item/storage/bag/ore/large, 500), new /datum/data/mining_equipment("500 Point Transfer Card", /obj/item/card/mining_point_card/mp500, 500), - new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600), new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600), new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 750), new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 750), @@ -50,9 +50,11 @@ new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000), new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000), new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000), + new /datum/data/mining_equipment("Spare Suit Voucher", /obj/item/suit_voucher, 2000), new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500), new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500), new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000), + new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 3000), new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800), new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400), new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400), @@ -67,9 +69,7 @@ new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000), new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000), new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000), - new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000), - new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 12000), - new /datum/data/mining_equipment("Spare Suit Voucher", /obj/item/suit_voucher, 15000) + new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000) ) diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm deleted file mode 100644 index 44c1f7601d..0000000000 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ /dev/null @@ -1,1524 +0,0 @@ -/* - - Hello and welcome to sprite_accessories: For sprite accessories, such as hair, - facial hair, and possibly tattoos and stuff somewhere along the line. This file is - intended to be friendly for people with little to no actual coding experience. - The process of adding in new hairstyles has been made pain-free and easy to do. - Enjoy! - Doohl - - - Notice: This all gets automatically compiled in a list in dna.dm, so you do not - have to define any UI values for sprite accessories manually for hair and facial - hair. Just add in new hair types and the game will naturally adapt. - - !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles, - to the point where you may completely corrupt a server's savefiles. Please refrain - from doing this unless you absolutely know what you are doing, and have defined a - conversion in savefile.dm -*/ -/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female,var/roundstart = FALSE)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked - if(!istype(L)) - L = list() - if(!istype(male)) - male = list() - if(!istype(female)) - female = list() - - for(var/path in typesof(prototype)) - if(path == prototype) - continue - if(roundstart) - var/datum/sprite_accessory/P = path - if(initial(P.locked)) - continue - var/datum/sprite_accessory/D = new path() - - if(D.icon_state) - L[D.name] = D - else - L += D.name - - switch(D.gender) - if(MALE) - male += D.name - if(FEMALE) - female += D.name - else - male += D.name - female += D.name - return L - -/datum/sprite_accessory - var/icon //the icon file the accessory is located in - var/icon_state //the icon_state of the accessory - var/name //the preview name of the accessory - var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations - var/gender_specific //Something that can be worn by either gender, but looks different on each - var/color_src = MUTCOLORS //Currently only used by mutantparts so don't worry about hair and stuff. This is the source that this accessory will get its color from. Default is MUTCOLOR, but can also be HAIR, FACEHAIR, EYECOLOR and 0 if none. - var/hasinner //Decides if this sprite has an "inner" part, such as the fleshy parts on ears. - var/locked = FALSE //Is this part locked from roundstart selection? Used for parts that apply effects - var/dimension_x = 32 - var/dimension_y = 32 - var/center = FALSE //Should we center the sprite? - -////////////////////// -// Hair Definitions // -////////////////////// -/datum/sprite_accessory/hair - icon = 'icons/mob/human_face.dmi' // default icon for all hairs - - // please make sure they're sorted alphabetically and, where needed, categorized - // try to capitalize the names please~ - // try to spell - // you do not need to define _s or _l sub-states, game automatically does this for you - -/datum/sprite_accessory/hair/afro - name = "Afro" - icon_state = "hair_afro" - -/datum/sprite_accessory/hair/afro2 - name = "Afro 2" - icon_state = "hair_afro2" - -/datum/sprite_accessory/hair/afro_large - name = "Afro (Large)" - icon_state = "hair_bigafro" - -/datum/sprite_accessory/hair/antenna - name = "Ahoge" - icon_state = "hair_antenna" - -/datum/sprite_accessory/hair/bald - name = "Bald" - icon_state = null - -/datum/sprite_accessory/hair/balding - name = "Balding Hair" - icon_state = "hair_e" - -/datum/sprite_accessory/hair/bedhead - name = "Bedhead" - icon_state = "hair_bedhead" - -/datum/sprite_accessory/hair/bedhead2 - name = "Bedhead 2" - icon_state = "hair_bedheadv2" - -/datum/sprite_accessory/hair/bedhead3 - name = "Bedhead 3" - icon_state = "hair_bedheadv3" - -/datum/sprite_accessory/hair/beehive - name = "Beehive" - icon_state = "hair_beehive" - -/datum/sprite_accessory/hair/beehive2 - name = "Beehive 2" - icon_state = "hair_beehivev2" - -/datum/sprite_accessory/hair/bob - name = "Bob Hair" - icon_state = "hair_bob" - -/datum/sprite_accessory/hair/bob2 - name = "Bob Hair 2" - icon_state = "hair_bob2" - -/datum/sprite_accessory/hair/bob3 - name = "Bob Hair 3" - icon_state = "hair_bobcut" - -/datum/sprite_accessory/hair/bobcurl - name = "Bobcurl" - icon_state = "hair_bobcurl" - -/datum/sprite_accessory/hair/boddicker - name = "Boddicker" - icon_state = "hair_boddicker" - -/datum/sprite_accessory/hair/bowl - name = "Bowl" - icon_state = "hair_bowlcut" - -/datum/sprite_accessory/hair/braid - name = "Braid (Floorlength)" - icon_state = "hair_braid" - -/datum/sprite_accessory/hair/braided - name = "Braided" - icon_state = "hair_braided" - -/datum/sprite_accessory/hair/front_braid - name = "Braided Front" - icon_state = "hair_braidfront" - -/datum/sprite_accessory/hair/not_floorlength_braid - name = "Braid (High)" - icon_state = "hair_braid2" - -/datum/sprite_accessory/hair/lowbraid - name = "Braid (Low)" - icon_state = "hair_hbraid" - -/datum/sprite_accessory/hair/shortbraid - name = "Braid (Short)" - icon_state = "hair_shortbraid" - -/datum/sprite_accessory/hair/braidtail - name = "Braided Tail" - icon_state = "hair_braidtail" - -/datum/sprite_accessory/hair/bun - name = "Bun Head" - icon_state = "hair_bun" - -/datum/sprite_accessory/hair/bun2 - name = "Bun Head 2" - icon_state = "hair_bunhead2" - -/datum/sprite_accessory/hair/largebun - name = "Bun (Large)" - icon_state = "hair_largebun" - -/datum/sprite_accessory/hair/business - name = "Business Hair" - icon_state = "hair_business" - -/datum/sprite_accessory/hair/business2 - name = "Business Hair 2" - icon_state = "hair_business2" - -/datum/sprite_accessory/hair/business3 - name = "Business Hair 3" - icon_state = "hair_business3" - -/datum/sprite_accessory/hair/business4 - name = "Business Hair 4" - icon_state = "hair_business4" - -/datum/sprite_accessory/hair/buzz - name = "Buzzcut" - icon_state = "hair_buzzcut" - -/datum/sprite_accessory/hair/combover - name = "Combover" - icon_state = "hair_combover" - -/datum/sprite_accessory/hair/crew - name = "Crewcut" - icon_state = "hair_crewcut" - -/datum/sprite_accessory/hair/curls - name = "Curls" - icon_state = "hair_curls" - -/datum/sprite_accessory/hair/cut - name = "Cut Hair" - icon_state = "hair_c" - -/datum/sprite_accessory/hair/devillock - name = "Devil Lock" - icon_state = "hair_devilock" - -/datum/sprite_accessory/hair/dreadlocks - name = "Dreadlocks" - icon_state = "hair_dreads" - -/datum/sprite_accessory/hair/drillhair - name = "Drill Hair" - icon_state = "hair_drillhair" - -/datum/sprite_accessory/hair/drillhairextended - name = "Drill Hair (Extended)" - icon_state = "hair_drillhairextended" - -/datum/sprite_accessory/hair/emo - name = "Emo" - icon_state = "hair_emo" - -/datum/sprite_accessory/hair/feather - name = "Feather" - icon_state = "hair_feather" - -/datum/sprite_accessory/hair/sargeant - name = "Flat Top" - icon_state = "hair_sargeant" - -/datum/sprite_accessory/hair/bigflattop - name = "Flat Top (Big)" - icon_state = "hair_bigflattop" - -/datum/sprite_accessory/hair/fag - name = "Flow Hair" - icon_state = "hair_f" - -/datum/sprite_accessory/hair/gelled - name = "Gelled Back" - icon_state = "hair_gelled" - -/datum/sprite_accessory/hair/gentle - name = "Gentle" - icon_state = "hair_gentle" - -/datum/sprite_accessory/hair/halfbang - name = "Half-banged Hair" - icon_state = "hair_halfbang" - -/datum/sprite_accessory/hair/halfbang2 - name = "Half-banged Hair 2" - icon_state = "hair_halfbang2" - -/datum/sprite_accessory/hair/hedgehog - name = "Hedgehog Hair" - icon_state = "hair_hedgehog" - -/datum/sprite_accessory/hair/himecut - name = "Hime Cut" - icon_state = "hair_himecut" - -/datum/sprite_accessory/hair/himecut2 - name = "Hime Cut 2" - icon_state = "hair_himecut2" - -/datum/sprite_accessory/hair/himeup - name = "Hime Updo" - icon_state = "hair_himeup" - -/datum/sprite_accessory/hair/hitop - name = "Hitop" - icon_state = "hair_hitop" - -/datum/sprite_accessory/hair/jensen - name = "Jensen Hair" - icon_state = "hair_jensen" - -/datum/sprite_accessory/hair/keanu - name = "Keanu Hair" - icon_state = "hair_keanu" - -/datum/sprite_accessory/hair/kusangi - name = "Kusanagi Hair" - icon_state = "hair_kusanagi" - -/datum/sprite_accessory/hair/long - name = "Long Hair 1" - icon_state = "hair_long" - -/datum/sprite_accessory/hair/long2 - name = "Long Hair 2" - icon_state = "hair_long2" - -/datum/sprite_accessory/hair/long3 - name = "Long Hair 3" - icon_state = "hair_long3" - -/datum/sprite_accessory/hair/long_over_eye - name = "Long Over Eye" - icon_state = "hair_longovereye" - -/datum/sprite_accessory/hair/longbangs - name = "Long Bangs" - icon_state = "hair_lbangs" - -/datum/sprite_accessory/hair/longemo - name = "Long Emo" - icon_state = "hair_longemo" - -/datum/sprite_accessory/hair/longfringe - name = "Long Fringe" - icon_state = "hair_longfringe" - -/datum/sprite_accessory/hair/sidepartlongalt - name = "Long Side Part" - icon_state = "hair_longsidepart" - -/datum/sprite_accessory/hair/megaeyebrows - name = "Mega Eyebrows" - icon_state = "hair_megaeyebrows" - -/datum/sprite_accessory/hair/messy - name = "Messy" - icon_state = "hair_messy" - -/datum/sprite_accessory/hair/mohawk - name = "Mohawk" - icon_state = "hair_d" - -/datum/sprite_accessory/hair/reversemohawk - name = "Mohawk (Reverse)" - icon_state = "hair_reversemohawk" - -/datum/sprite_accessory/hair/odango - name = "Odango" - icon_state = "hair_odango" - -/datum/sprite_accessory/hair/ombre - name = "Ombre" - icon_state = "hair_ombre" - -/datum/sprite_accessory/hair/oneshoulder - name = "One Shoulder" - icon_state = "hair_oneshoulder" - -/datum/sprite_accessory/hair/over_eye - name = "Over Eye" - icon_state = "hair_shortovereye" - -//Donator item - fractious -/datum/sprite_accessory/hair/over_eye_fr - name = "Over Eye (fract)" - icon_state = "hair_shortovereye_1f" - ckeys_allowed = list("fractious") - -/datum/sprite_accessory/hair/parted - name = "Parted" - icon_state = "hair_parted" - -/datum/sprite_accessory/hair/partedside - name = "Parted (Side)" - icon_state = "hair_part" - -/datum/sprite_accessory/hair/kagami - name = "Pigtails" - icon_state = "hair_kagami" - -/datum/sprite_accessory/hair/pigtail - name = "Pigtails 2" - icon_state = "hair_pigtails" - -/datum/sprite_accessory/hair/pigtail2 - name = "Pigtails 3" - icon_state = "hair_pigtails2" - -/datum/sprite_accessory/hair/pixie - name = "Pixie Cut" - icon_state = "hair_pixie" - -/datum/sprite_accessory/hair/pompadour - name = "Pompadour" - icon_state = "hair_pompadour" - -/datum/sprite_accessory/hair/bigpompadour - name = "Pompadour (Big)" - icon_state = "hair_bigpompadour" - -/datum/sprite_accessory/hair/ponytail1 - name = "Ponytail" - icon_state = "hair_ponytail" - -/datum/sprite_accessory/hair/ponytail2 - name = "Ponytail 2" - icon_state = "hair_ponytail2" - -/datum/sprite_accessory/hair/ponytail3 - name = "Ponytail 3" - icon_state = "hair_ponytail3" - -/datum/sprite_accessory/hair/ponytail4 - name = "Ponytail 4" - icon_state = "hair_ponytail4" - -/datum/sprite_accessory/hair/ponytail5 - name = "Ponytail 5" - icon_state = "hair_ponytail5" - -/datum/sprite_accessory/hair/highponytail - name = "Ponytail (High)" - icon_state = "hair_highponytail" - -/datum/sprite_accessory/hair/longponytail - name = "Ponytail (Long)" - icon_state = "hair_longstraightponytail" - -/datum/sprite_accessory/hair/sidetail - name = "Ponytail (Side)" - icon_state = "hair_sidetail" - -/datum/sprite_accessory/hair/sidetail2 - name = "Ponytail (Side) 2" - icon_state = "hair_sidetail2" - -/datum/sprite_accessory/hair/sidetail3 - name = "Ponytail (Side) 3" - icon_state = "hair_sidetail3" - -/datum/sprite_accessory/hair/sidetail4 - name = "Ponytail (Side) 4" - icon_state = "hair_sidetail4" - -/datum/sprite_accessory/hair/quiff - name = "Quiff" - icon_state = "hair_quiff" - -/datum/sprite_accessory/hair/short - name = "Short Hair" - icon_state = "hair_a" - -/datum/sprite_accessory/hair/shorthair2 - name = "Short Hair 2" - icon_state = "hair_shorthair2" - -/datum/sprite_accessory/hair/shorthair3 - name = "Short Hair 3" - icon_state = "hair_shorthair3" - -/datum/sprite_accessory/hair/shoulderlength - name = "Shoulder-length Hair" - icon_state = "hair_b" - -/datum/sprite_accessory/hair/sidecut - name = "Sidecut" - icon_state = "hair_sidecut" - -/datum/sprite_accessory/hair/skinhead - name = "Skinhead" - icon_state = "hair_skinhead" - -/datum/sprite_accessory/hair/protagonist - name = "Slightly Long Hair" - icon_state = "hair_protagonist" - -/datum/sprite_accessory/hair/spiky - name = "Spiky" - icon_state = "hair_spikey" - -/datum/sprite_accessory/hair/spiky2 - name = "Spiky 2" - icon_state = "hair_spiky" - -/datum/sprite_accessory/hair/spiky3 - name = "Spiky 3" - icon_state = "hair_spiky2" - -/datum/sprite_accessory/hair/swept - name = "Swept Back Hair" - icon_state = "hair_swept" - -/datum/sprite_accessory/hair/swept2 - name = "Swept Back Hair 2" - icon_state = "hair_swept2" - -/datum/sprite_accessory/hair/tressshoulder - name = "Tress Shoulder" - icon_state = "hair_tressshoulder" - -/datum/sprite_accessory/hair/updo - name = "Updo" - icon_state = "hair_updo" - -/datum/sprite_accessory/hair/longer - name = "Very Long Hair" - icon_state = "hair_vlong" - -/datum/sprite_accessory/hair/longest - name = "Very Long Hair 2" - icon_state = "hair_longest" - -/datum/sprite_accessory/hair/longest2 - name = "Very Long Over Eye" - icon_state = "hair_longest2" - -/datum/sprite_accessory/hair/longestalt - name = "Very Long with Fringe" - icon_state = "hair_vlongfringe" - -///////////////////////////// -// Facial Hair Definitions // -///////////////////////////// - -/datum/sprite_accessory/facial_hair - icon = 'icons/mob/human_face.dmi' - gender = MALE // barf (unless you're a dorf, dorfs dig chix w/ beards :P) - -// please make sure they're sorted alphabetically and categorized - -/datum/sprite_accessory/facial_hair/abe - name = "Beard (Abraham Lincoln)" - icon_state = "facial_abe" - -/datum/sprite_accessory/facial_hair/brokenman - name = "Beard (Broken Man)" - icon_state = "facial_brokenman" - -/datum/sprite_accessory/facial_hair/chinstrap - name = "Beard (Chinstrap)" - icon_state = "facial_chin" - -/datum/sprite_accessory/facial_hair/dwarf - name = "Beard (Dwarf)" - icon_state = "facial_dwarf" - -/datum/sprite_accessory/facial_hair/fiveoclock - name = "Beard (Five o Clock Shadow)" - icon_state = "facial_fiveoclock" - -/datum/sprite_accessory/facial_hair/fullbeard - name = "Beard (Full)" - icon_state = "facial_fullbeard" - -/datum/sprite_accessory/facial_hair/gt - name = "Beard (Goatee)" - icon_state = "facial_gt" - -/datum/sprite_accessory/facial_hair/hip - name = "Beard (Hipster)" - icon_state = "facial_hip" - -/datum/sprite_accessory/facial_hair/jensen - name = "Beard (Jensen)" - icon_state = "facial_jensen" - -/datum/sprite_accessory/facial_hair/neckbeard - name = "Beard (Neckbeard)" - icon_state = "facial_neckbeard" - -/datum/sprite_accessory/facial_hair/vlongbeard - name = "Beard (Very Long)" - icon_state = "facial_wise" - -/datum/sprite_accessory/facial_hair/longbeard - name = "Beard (Long)" - icon_state = "facial_longbeard" - -/datum/sprite_accessory/facial_hair/fu - name = "Moustache (Fu Manchu)" - icon_state = "facial_fumanchu" - -/datum/sprite_accessory/facial_hair/hogan - name = "Moustache (Hulk Hogan)" - icon_state = "facial_hogan" //-Neek - -/datum/sprite_accessory/facial_hair/selleck - name = "Moustache (Selleck)" - icon_state = "facial_selleck" - -/datum/sprite_accessory/facial_hair/chaplin - name = "Moustache (Square)" - icon_state = "facial_chaplin" - -/datum/sprite_accessory/facial_hair/vandyke - name = "Moustache (Van Dyke)" - icon_state = "facial_vandyke" - -/datum/sprite_accessory/facial_hair/watson - name = "Moustache (Watson)" - icon_state = "facial_watson" - -/datum/sprite_accessory/facial_hair/shaved - name = "Shaved" - icon_state = null - gender = NEUTER - -/datum/sprite_accessory/facial_hair/elvis - name = "Sideburns (Elvis)" - icon_state = "facial_elvis" - - -/////////////////////////// -// Underwear Definitions // -/////////////////////////// -/datum/sprite_accessory/underwear - icon = 'icons/mob/underwear.dmi' - -/datum/sprite_accessory/underwear/nude - name = "Nude" - icon_state = null - gender = NEUTER - -/datum/sprite_accessory/underwear/male_mankini - name = "Mankini" - icon_state = "male_mankini" - gender = MALE - -/datum/sprite_accessory/underwear/male_black - name = "Men's Black" - icon_state = "male_black" - gender = MALE - -/datum/sprite_accessory/underwear/male_blackalt - name = "Men's Black Boxer" - icon_state = "male_blackalt" - gender = MALE - -/datum/sprite_accessory/underwear/male_blue - name = "Men's Blue" - icon_state = "male_blue" - gender = MALE - -/datum/sprite_accessory/underwear/male_green - name = "Men's Green" - icon_state = "male_green" - gender = MALE - -/datum/sprite_accessory/underwear/male_grey - name = "Men's Grey" - icon_state = "male_grey" - gender = MALE - -/datum/sprite_accessory/underwear/male_greyalt - name = "Men's Grey Boxer" - icon_state = "male_greyalt" - gender = MALE - -/datum/sprite_accessory/underwear/male_hearts - name = "Men's Hearts Boxer" - icon_state = "male_hearts" - gender = MALE - -/datum/sprite_accessory/underwear/male_kinky - name = "Men's Kinky" - icon_state = "male_kinky" - gender = MALE - -/datum/sprite_accessory/underwear/male_red - name = "Men's Red" - icon_state = "male_red" - gender = MALE - -/datum/sprite_accessory/underwear/male_stripe - name = "Men's Striped Boxer" - icon_state = "male_stripe" - gender = MALE - -/datum/sprite_accessory/underwear/male_commie - name = "Men's Striped Commie Boxer" - icon_state = "male_commie" - gender = MALE - -/datum/sprite_accessory/underwear/male_usastripe - name = "Men's Striped Freedom Boxer" - icon_state = "male_assblastusa" - gender = MALE - -/datum/sprite_accessory/underwear/male_uk - name = "Men's Striped UK Boxer" - icon_state = "male_uk" - gender = MALE - -/datum/sprite_accessory/underwear/male_white - name = "Men's White" - icon_state = "male_white" - gender = MALE - -/datum/sprite_accessory/underwear/female_babydoll - name = "Babydoll" - icon_state = "female_babydoll" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_babyblue - name = "Ladies' Baby-Blue" - icon_state = "female_babyblue" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_black - name = "Ladies' Black" - icon_state = "female_black" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_black_neko - name = "Ladies' Black Neko" - icon_state = "female_neko_black" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_blackalt - name = "Ladies' Black Sport" - icon_state = "female_blackalt" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_blue - name = "Ladies' Blue" - icon_state = "female_blue" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_commie - name = "Ladies' Commie" - icon_state = "female_commie" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_usastripe - name = "Ladies' Freedom" - icon_state = "female_assblastusa" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_green - name = "Ladies' Green" - icon_state = "female_green" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_kinky - name = "Ladies' Kinky" - icon_state = "female_kinky" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_pink - name = "Ladies' Pink" - icon_state = "female_pink" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_red - name = "Ladies' Red" - icon_state = "female_red" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit - name = "Ladies' Swimsuit (Black)" - icon_state = "swim_black" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_blue - name = "Ladies' Swimsuit (Blue)" - icon_state = "swim_blue" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_green - name = "Ladies' Swimsuit (Green)" - icon_state = "swim_green" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_purple - name = "Ladies' Swimsuit (Purple)" - icon_state = "swim_purple" - gender = FEMALE - -/datum/sprite_accessory/underwear/swimsuit_red - name = "Ladies' Swimsuit (Red)" - icon_state = "swim_red" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_thong - name = "Ladies' Thong" - icon_state = "female_thong" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_uk - name = "Ladies' UK" - icon_state = "female_uk" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_white - name = "Ladies' White" - icon_state = "female_white" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_white_neko - name = "Ladies' White Neko" - icon_state = "female_neko_white" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_whitealt - name = "Ladies' White Sport" - icon_state = "female_whitealt" - gender = FEMALE - -/datum/sprite_accessory/underwear/female_yellow - name = "Ladies' Yellow" - icon_state = "female_yellow" - gender = FEMALE - -//////////////////////////// -// Undershirt Definitions // -//////////////////////////// - -/datum/sprite_accessory/undershirt - icon = 'icons/mob/underwear.dmi' - -/datum/sprite_accessory/undershirt/nude - name = "Nude" - icon_state = null - gender = NEUTER - -// please make sure they're sorted alphabetically and categorized - -/datum/sprite_accessory/undershirt/bluejersey - name = "Jersey (Blue)" - icon_state = "shirt_bluejersey" - gender = NEUTER - -/datum/sprite_accessory/undershirt/redjersey - name = "Jersey (Red)" - icon_state = "shirt_redjersey" - gender = NEUTER - -/datum/sprite_accessory/undershirt/bluepolo - name = "Polo Shirt (Blue)" - icon_state = "bluepolo" - gender = NEUTER - -/datum/sprite_accessory/undershirt/grayyellowpolo - name = "Polo Shirt (Gray-Yellow)" - icon_state = "grayyellowpolo" - gender = NEUTER - -/datum/sprite_accessory/undershirt/redpolo - name = "Polo Shirt (Red)" - icon_state = "redpolo" - gender = NEUTER - -/datum/sprite_accessory/undershirt/whitepolo - name = "Polo Shirt (White)" - icon_state = "whitepolo" - gender = NEUTER - -/datum/sprite_accessory/undershirt/alienshirt - name = "Shirt (Alien)" - icon_state = "shirt_alien" - gender = NEUTER - -/datum/sprite_accessory/undershirt/mondmondjaja - name = "Shirt (Band)" - icon_state = "band" - gender = NEUTER - -/datum/sprite_accessory/undershirt/shirt_black - name = "Shirt (Black)" - icon_state = "shirt_black" - gender = NEUTER - -/datum/sprite_accessory/undershirt/blueshirt - name = "Shirt (Blue)" - icon_state = "shirt_blue" - gender = NEUTER - -/datum/sprite_accessory/undershirt/clownshirt - name = "Shirt (Clown)" - icon_state = "shirt_clown" - gender = NEUTER - -/datum/sprite_accessory/undershirt/commie - name = "Shirt (Commie)" - icon_state = "shirt_commie" - gender = NEUTER - -/datum/sprite_accessory/undershirt/greenshirt - name = "Shirt (Green)" - icon_state = "shirt_green" - gender = NEUTER - -/datum/sprite_accessory/undershirt/shirt_grey - name = "Shirt (Grey)" - icon_state = "shirt_grey" - gender = NEUTER - -/datum/sprite_accessory/undershirt/ian - name = "Shirt (Ian)" - icon_state = "ian" - gender = NEUTER - -/datum/sprite_accessory/undershirt/ilovent - name = "Shirt (I Love NT)" - icon_state = "ilovent" - gender = NEUTER - -/datum/sprite_accessory/undershirt/lover - name = "Shirt (Lover)" - icon_state = "lover" - gender = NEUTER - -/datum/sprite_accessory/undershirt/matroska - name = "Shirt (Matroska)" - icon_state = "matroska" - gender = NEUTER - -/datum/sprite_accessory/undershirt/meat - name = "Shirt (Meat)" - icon_state = "shirt_meat" - gender = NEUTER - -/datum/sprite_accessory/undershirt/nano - name = "Shirt (Nanotrasen)" - icon_state = "shirt_nano" - gender = NEUTER - -/datum/sprite_accessory/undershirt/peace - name = "Shirt (Peace)" - icon_state = "peace" - gender = NEUTER - -/datum/sprite_accessory/undershirt/pacman - name = "Shirt (Pogoman)" - icon_state = "pogoman" - gender = NEUTER - -/datum/sprite_accessory/undershirt/question - name = "Shirt (Question)" - icon_state = "shirt_question" - gender = NEUTER - -/datum/sprite_accessory/undershirt/redshirt - name = "Shirt (Red)" - icon_state = "shirt_red" - gender = NEUTER - -/datum/sprite_accessory/undershirt/skull - name = "Shirt (Skull)" - icon_state = "shirt_skull" - gender = NEUTER - -/datum/sprite_accessory/undershirt/ss13 - name = "Shirt (SS13)" - icon_state = "shirt_ss13" - gender = NEUTER - -/datum/sprite_accessory/undershirt/stripe - name = "Shirt (Striped)" - icon_state = "shirt_stripes" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tiedye - name = "Shirt (Tie-dye)" - icon_state = "shirt_tiedye" - gender = NEUTER - -/datum/sprite_accessory/undershirt/uk - name = "Shirt (UK)" - icon_state = "uk" - gender = NEUTER - -/datum/sprite_accessory/undershirt/usa - name = "Shirt (USA)" - icon_state = "shirt_assblastusa" - gender = NEUTER - -/datum/sprite_accessory/undershirt/shirt_white - name = "Shirt (White)" - icon_state = "shirt_white" - gender = NEUTER - -/datum/sprite_accessory/undershirt/blackshortsleeve - name = "Short-sleeved Shirt (Black)" - icon_state = "blackshortsleeve" - gender = NEUTER - -/datum/sprite_accessory/undershirt/blueshortsleeve - name = "Short-sleeved Shirt (Blue)" - icon_state = "blueshortsleeve" - gender = NEUTER - -/datum/sprite_accessory/undershirt/greenshortsleeve - name = "Short-sleeved Shirt (Green)" - icon_state = "greenshortsleeve" - gender = NEUTER - -/datum/sprite_accessory/undershirt/purpleshortsleeve - name = "Short-sleeved Shirt (Purple)" - icon_state = "purpleshortsleeve" - gender = NEUTER - -/datum/sprite_accessory/undershirt/whiteshortsleeve - name = "Short-sleeved Shirt (White)" - icon_state = "whiteshortsleeve" - gender = NEUTER - -/datum/sprite_accessory/undershirt/sports_bra - name = "Sports Bra" - icon_state = "sports_bra" - gender = NEUTER - -/datum/sprite_accessory/undershirt/sports_bra2 - name = "Sports Bra (Alt)" - icon_state = "sports_bra_alt" - gender = NEUTER - -/datum/sprite_accessory/undershirt/blueshirtsport - name = "Sports Shirt (Blue)" - icon_state = "blueshirtsport" - gender = NEUTER - -/datum/sprite_accessory/undershirt/greenshirtsport - name = "Sports Shirt (Green)" - icon_state = "greenshirtsport" - gender = NEUTER - -/datum/sprite_accessory/undershirt/redshirtsport - name = "Sports Shirt (Red)" - icon_state = "redshirtsport" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_black - name = "Tank Top (Black)" - icon_state = "tank_black" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tankfire - name = "Tank Top (Fire)" - icon_state = "tank_fire" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_grey - name = "Tank Top (Grey)" - icon_state = "tank_grey" - gender = NEUTER - -/datum/sprite_accessory/undershirt/female_midriff - name = "Tank Top (Midriff)" - icon_state = "tank_midriff" - gender = FEMALE - -/datum/sprite_accessory/undershirt/tank_red - name = "Tank Top (Red)" - icon_state = "tank_red" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tankstripe - name = "Tank Top (Striped)" - icon_state = "tank_stripes" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tank_white - name = "Tank Top (White)" - icon_state = "tank_white" - gender = NEUTER - -/datum/sprite_accessory/undershirt/redtop - name = "Top (Red)" - icon_state = "redtop" - gender = FEMALE - -/datum/sprite_accessory/undershirt/whitetop - name = "Top (White)" - icon_state = "whitetop" - gender = FEMALE - -/datum/sprite_accessory/undershirt/tshirt_blue - name = "T-Shirt (Blue)" - icon_state = "blueshirt" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tshirt_green - name = "T-Shirt (Green)" - icon_state = "greenshirt" - gender = NEUTER - -/datum/sprite_accessory/undershirt/tshirt_red - name = "T-Shirt (Red)" - icon_state = "redshirt" - gender = NEUTER - -/datum/sprite_accessory/undershirt/yellowshirt - name = "T-Shirt (Yellow)" - icon_state = "yellowshirt" - gender = NEUTER - -/////////////////////// -// Socks Definitions // -/////////////////////// - -/datum/sprite_accessory/socks - icon = 'icons/mob/underwear.dmi' - -/datum/sprite_accessory/socks/nude - name = "Nude" - icon_state = null - -// please make sure they're sorted alphabetically and categorized - -/datum/sprite_accessory/socks/black_knee - name = "Knee-high (Black)" - icon_state = "black_knee" - -/datum/sprite_accessory/socks/commie_knee - name = "Knee-High (Commie)" - icon_state = "commie_knee" - -/datum/sprite_accessory/socks/usa_knee - name = "Knee-High (Freedom)" - icon_state = "assblastusa_knee" - -/datum/sprite_accessory/socks/rainbow_knee - name = "Knee-high (Rainbow)" - icon_state = "rainbow_knee" - -/datum/sprite_accessory/socks/striped_knee - name = "Knee-high (Striped)" - icon_state = "striped_knee" - -/datum/sprite_accessory/socks/thin_knee - name = "Knee-high (Thin)" - icon_state = "thin_knee" - -/datum/sprite_accessory/socks/uk_knee - name = "Knee-High (UK)" - icon_state = "uk_knee" - -/datum/sprite_accessory/socks/white_knee - name = "Knee-high (White)" - icon_state = "white_knee" - -/datum/sprite_accessory/socks/black_norm - name = "Normal (Black)" - icon_state = "black_norm" - -/datum/sprite_accessory/socks/white_norm - name = "Normal (White)" - icon_state = "white_norm" - -/datum/sprite_accessory/socks/pantyhose - name = "Pantyhose" - icon_state = "pantyhose" - -/datum/sprite_accessory/socks/black_short - name = "Short (Black)" - icon_state = "black_short" - -/datum/sprite_accessory/socks/white_short - name = "Short (White)" - icon_state = "white_short" - -/datum/sprite_accessory/socks/black_thigh - name = "Thigh-high (Black)" - icon_state = "black_thigh" - -/datum/sprite_accessory/socks/commie_thigh - name = "Thigh-high (Commie)" - icon_state = "commie_thigh" - -/datum/sprite_accessory/socks/usa_thigh - name = "Thigh-high (Freedom)" - icon_state = "assblastusa_thigh" - -/datum/sprite_accessory/socks/rainbow_thigh - name = "Thigh-high (Rainbow)" - icon_state = "rainbow_thigh" - -/datum/sprite_accessory/socks/striped_thigh - name = "Thigh-high (Striped)" - icon_state = "striped_thigh" - -/datum/sprite_accessory/socks/thin_thigh - name = "Thigh-high (Thin)" - icon_state = "thin_thigh" - -/datum/sprite_accessory/socks/uk_thigh - name = "Thigh-high (UK)" - icon_state = "uk_thigh" - -/datum/sprite_accessory/socks/white_thigh - name = "Thigh-high (White)" - icon_state = "white_thigh" - -//////////.////////////////// -// MutantParts Definitions // -///////////////////////////// - -/datum/sprite_accessory/body_markings - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/body_markings/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/body_markings/dtiger - name = "Dark Tiger Body" - icon_state = "dtiger" - gender_specific = 1 - -/datum/sprite_accessory/body_markings/ltiger - name = "Light Tiger Body" - icon_state = "ltiger" - gender_specific = 1 - -/datum/sprite_accessory/body_markings/lbelly - name = "Light Belly" - icon_state = "lbelly" - gender_specific = 1 - -/datum/sprite_accessory/tails - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/tails_animated - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/tails/lizard/smooth - name = "Smooth" - icon_state = "smooth" - -/datum/sprite_accessory/tails_animated/lizard/smooth - name = "Smooth" - icon_state = "smooth" - -/datum/sprite_accessory/tails/lizard/dtiger - name = "Dark Tiger" - icon_state = "dtiger" - -/datum/sprite_accessory/tails_animated/lizard/dtiger - name = "Dark Tiger" - icon_state = "dtiger" - -/datum/sprite_accessory/tails/lizard/ltiger - name = "Light Tiger" - icon_state = "ltiger" - -/datum/sprite_accessory/tails_animated/lizard/ltiger - name = "Light Tiger" - icon_state = "ltiger" - -/datum/sprite_accessory/tails/lizard/spikes - name = "Spikes" - icon_state = "spikes" - -/datum/sprite_accessory/tails_animated/lizard/spikes - name = "Spikes" - icon_state = "spikes" - -/datum/sprite_accessory/tails/human/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/tails_animated/human/none - name = "None" - icon_state = "none" -/* -/datum/sprite_accessory/tails/human/cat - name = "Cat" - icon_state = "cat" - color_src = HAIR - -/datum/sprite_accessory/tails_animated/human/cat - name = "Cat" - icon_state = "cat" - color_src = HAIR*/ - -/datum/sprite_accessory/snouts - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/snouts/sharp - name = "Sharp" - icon_state = "sharp" - -/datum/sprite_accessory/snouts/round - name = "Round" - icon_state = "round" - -/datum/sprite_accessory/snouts/sharplight - name = "Sharp + Light" - icon_state = "sharplight" - -/datum/sprite_accessory/snouts/roundlight - name = "Round + Light" - icon_state = "roundlight" - -/datum/sprite_accessory/horns - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/horns/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/horns/simple - name = "Simple" - icon_state = "simple" - -/datum/sprite_accessory/horns/short - name = "Short" - icon_state = "short" - -/datum/sprite_accessory/horns/curled - name = "Curled" - icon_state = "curled" - -/datum/sprite_accessory/horns/ram - name = "Ram" - icon_state = "ram" - -/datum/sprite_accessory/horns/angler - name = "Angeler" - icon_state = "angler" - -/datum/sprite_accessory/ears - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/ears/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/ears/cat - name = "Cat" - icon_state = "cat" - hasinner = 1 - color_src = HAIR - -/datum/sprite_accessory/wings/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/wings_open - icon = 'icons/mob/wings.dmi' - -/datum/sprite_accessory/wings_open/angel - name = "Angel" - icon_state = "angel" - color_src = 0 - dimension_x = 46 - center = TRUE - dimension_y = 34 - -/datum/sprite_accessory/wings - icon = 'icons/mob/wings.dmi' - -/datum/sprite_accessory/wings/angel - name = "Angel" - icon_state = "angel" - color_src = 0 - dimension_x = 46 - center = TRUE - dimension_y = 34 - locked = TRUE - -/datum/sprite_accessory/frills - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/frills/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/frills/simple - name = "Simple" - icon_state = "simple" - -/datum/sprite_accessory/frills/short - name = "Short" - icon_state = "short" - -/datum/sprite_accessory/frills/aquatic - name = "Aquatic" - icon_state = "aqua" - -/datum/sprite_accessory/spines - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/spines_animated - icon = 'icons/mob/mutant_bodyparts.dmi' - -/datum/sprite_accessory/spines/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/spines_animated/none - name = "None" - icon_state = "none" - -/datum/sprite_accessory/spines/short - name = "Short" - icon_state = "short" - -/datum/sprite_accessory/spines_animated/short - name = "Short" - icon_state = "short" - -/datum/sprite_accessory/spines/shortmeme - name = "Short + Membrane" - icon_state = "shortmeme" - -/datum/sprite_accessory/spines_animated/shortmeme - name = "Short + Membrane" - icon_state = "shortmeme" - -/datum/sprite_accessory/spines/long - name = "Long" - icon_state = "long" - -/datum/sprite_accessory/spines_animated/long - name = "Long" - icon_state = "long" - -/datum/sprite_accessory/spines/longmeme - name = "Long + Membrane" - icon_state = "longmeme" - -/datum/sprite_accessory/spines_animated/longmeme - name = "Long + Membrane" - icon_state = "longmeme" - -/datum/sprite_accessory/spines/aqautic - name = "Aquatic" - icon_state = "aqua" - -/datum/sprite_accessory/spines_animated/aqautic - name = "Aquatic" - icon_state = "aqua" - -/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them. - icon = null //These datums exist for selecting legs on preference, and little else - -/datum/sprite_accessory/legs/none - name = "Normal Legs" - -/datum/sprite_accessory/legs/digitigrade_lizard - name = "Digitigrade Legs" - -/datum/sprite_accessory/caps - icon = 'icons/mob/mutant_bodyparts.dmi' - color_src = HAIR - -/datum/sprite_accessory/caps/round - name = "Round" - icon_state = "round" - -/datum/sprite_accessory/moth_wings - icon = 'icons/mob/wings.dmi' - color_src = null - -/datum/sprite_accessory/moth_wings/plain - name = "Plain" - icon_state = "plain" - -/datum/sprite_accessory/moth_wings/monarch - name = "Monarch" - icon_state = "monarch" - -/datum/sprite_accessory/moth_wings/luna - name = "Luna" - icon_state = "luna" - -/datum/sprite_accessory/moth_wings/atlas - name = "Atlas" - icon_state = "atlas" - -/datum/sprite_accessory/moth_wings/reddish - name = "Reddish" - icon_state = "redish" - -/datum/sprite_accessory/moth_wings/royal - name = "Royal" - icon_state = "royal" - -/datum/sprite_accessory/moth_wings/gothic - name = "Gothic" - icon_state = "gothic" - -/datum/sprite_accessory/moth_wings/lovers - name = "Lovers" - icon_state = "lovers" - -/datum/sprite_accessory/moth_wings/whitefly - name = "White Fly" - icon_state = "whitefly" - -/datum/sprite_accessory/moth_wings/punished - name = "Burnt Off" - icon_state = "punished" - locked = TRUE - -/datum/sprite_accessory/moth_wings/firewatch - name = "Firewatch" - icon_state = "firewatch" - -/datum/sprite_accessory/moth_wings/deathhead - name = "Deathshead" - icon_state = "deathhead" - -/datum/sprite_accessory/moth_wings/poison - name = "Poison" - icon_state = "poison" - -/datum/sprite_accessory/moth_wings/ragged - name = "Ragged" - icon_state = "ragged" - -/datum/sprite_accessory/moth_wings/moonfly - name = "Moon Fly" - icon_state = "moonfly" - -/datum/sprite_accessory/moth_wings/snow - name = "Snow" - icon_state = "snow" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm new file mode 100644 index 0000000000..699c3c97e4 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm @@ -0,0 +1,62 @@ +/* + + Hello and welcome to sprite_accessories: For sprite accessories, such as hair, + facial hair, and possibly tattoos and stuff somewhere along the line. This file is + intended to be friendly for people with little to no actual coding experience. + The process of adding in new hairstyles has been made pain-free and easy to do. + Enjoy! - Doohl + + + Notice: This all gets automatically compiled in a list in dna.dm, so you do not + have to define any UI values for sprite accessories manually for hair and facial + hair. Just add in new hair types and the game will naturally adapt. + + !!WARNING!!: changing existing hair information can be VERY hazardous to savefiles, + to the point where you may completely corrupt a server's savefiles. Please refrain + from doing this unless you absolutely know what you are doing, and have defined a + conversion in savefile.dm +*/ +/proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female,var/roundstart = FALSE)//Roundstart argument builds a specific list for roundstart parts where some parts may be locked + if(!istype(L)) + L = list() + if(!istype(male)) + male = list() + if(!istype(female)) + female = list() + + for(var/path in typesof(prototype)) + if(path == prototype) + continue + if(roundstart) + var/datum/sprite_accessory/P = path + if(initial(P.locked)) + continue + var/datum/sprite_accessory/D = new path() + + if(D.icon_state) + L[D.name] = D + else + L += D.name + + switch(D.gender) + if(MALE) + male += D.name + if(FEMALE) + female += D.name + else + male += D.name + female += D.name + return L + +/datum/sprite_accessory + var/icon //the icon file the accessory is located in + var/icon_state //the icon_state of the accessory + var/name //the preview name of the accessory + var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations + var/gender_specific //Something that can be worn by either gender, but looks different on each + var/color_src = MUTCOLORS //Currently only used by mutantparts so don't worry about hair and stuff. This is the source that this accessory will get its color from. Default is MUTCOLOR, but can also be HAIR, FACEHAIR, EYECOLOR and 0 if none. + var/hasinner //Decides if this sprite has an "inner" part, such as the fleshy parts on ears. + var/locked = FALSE //Is this part locked from roundstart selection? Used for parts that apply effects + var/dimension_x = 32 + var/dimension_y = 32 + var/center = FALSE //Should we center the sprite? \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm new file mode 100644 index 0000000000..6bce18d7ce --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -0,0 +1,25 @@ +//////////.////////////////// +// MutantParts Definitions // +///////////////////////////// + +/datum/sprite_accessory/body_markings + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/body_markings/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/body_markings/dtiger + name = "Dark Tiger Body" + icon_state = "dtiger" + gender_specific = 1 + +/datum/sprite_accessory/body_markings/ltiger + name = "Light Tiger Body" + icon_state = "ltiger" + gender_specific = 1 + +/datum/sprite_accessory/body_markings/lbelly + name = "Light Belly" + icon_state = "lbelly" + gender_specific = 1 \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/caps.dm b/code/modules/mob/dead/new_player/sprite_accessories/caps.dm new file mode 100644 index 0000000000..debb4865ba --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/caps.dm @@ -0,0 +1,7 @@ +datum/sprite_accessory/caps + icon = 'icons/mob/mutant_bodyparts.dmi' + color_src = HAIR + +/datum/sprite_accessory/caps/round + name = "Round" + icon_state = "round" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm new file mode 100644 index 0000000000..163f8370a2 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm @@ -0,0 +1,12 @@ +/datum/sprite_accessory/ears + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/ears/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/ears/cat + name = "Cat" + icon_state = "cat" + hasinner = 1 + color_src = HAIR \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/frills.dm b/code/modules/mob/dead/new_player/sprite_accessories/frills.dm new file mode 100644 index 0000000000..93c4af6df0 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/frills.dm @@ -0,0 +1,18 @@ +/datum/sprite_accessory/frills + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/frills/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/frills/simple + name = "Simple" + icon_state = "simple" + +/datum/sprite_accessory/frills/short + name = "Short" + icon_state = "short" + +/datum/sprite_accessory/frills/aquatic + name = "Aquatic" + icon_state = "aqua" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm new file mode 100644 index 0000000000..3566f3dea5 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_face.dm @@ -0,0 +1,89 @@ +///////////////////////////// +// Facial Hair Definitions // +///////////////////////////// +/datum/sprite_accessory/facial_hair + icon = 'icons/mob/human_face.dmi' + gender = MALE // barf (unless you're a dorf, dorfs dig chix w/ beards :P) + +// please make sure they're sorted alphabetically and categorized + +/datum/sprite_accessory/facial_hair/abe + name = "Beard (Abraham Lincoln)" + icon_state = "facial_abe" + +/datum/sprite_accessory/facial_hair/brokenman + name = "Beard (Broken Man)" + icon_state = "facial_brokenman" + +/datum/sprite_accessory/facial_hair/chinstrap + name = "Beard (Chinstrap)" + icon_state = "facial_chin" + +/datum/sprite_accessory/facial_hair/dwarf + name = "Beard (Dwarf)" + icon_state = "facial_dwarf" + +/datum/sprite_accessory/facial_hair/fiveoclock + name = "Beard (Five o Clock Shadow)" + icon_state = "facial_fiveoclock" + +/datum/sprite_accessory/facial_hair/fullbeard + name = "Beard (Full)" + icon_state = "facial_fullbeard" + +/datum/sprite_accessory/facial_hair/gt + name = "Beard (Goatee)" + icon_state = "facial_gt" + +/datum/sprite_accessory/facial_hair/hip + name = "Beard (Hipster)" + icon_state = "facial_hip" + +/datum/sprite_accessory/facial_hair/jensen + name = "Beard (Jensen)" + icon_state = "facial_jensen" + +/datum/sprite_accessory/facial_hair/neckbeard + name = "Beard (Neckbeard)" + icon_state = "facial_neckbeard" + +/datum/sprite_accessory/facial_hair/vlongbeard + name = "Beard (Very Long)" + icon_state = "facial_wise" + +/datum/sprite_accessory/facial_hair/longbeard + name = "Beard (Long)" + icon_state = "facial_longbeard" + +/datum/sprite_accessory/facial_hair/fu + name = "Moustache (Fu Manchu)" + icon_state = "facial_fumanchu" + +/datum/sprite_accessory/facial_hair/hogan + name = "Moustache (Hulk Hogan)" + icon_state = "facial_hogan" //-Neek + +/datum/sprite_accessory/facial_hair/selleck + name = "Moustache (Selleck)" + icon_state = "facial_selleck" + +/datum/sprite_accessory/facial_hair/chaplin + name = "Moustache (Square)" + icon_state = "facial_chaplin" + +/datum/sprite_accessory/facial_hair/vandyke + name = "Moustache (Van Dyke)" + icon_state = "facial_vandyke" + +/datum/sprite_accessory/facial_hair/watson + name = "Moustache (Watson)" + icon_state = "facial_watson" + +/datum/sprite_accessory/facial_hair/shaved + name = "Shaved" + icon_state = null + gender = NEUTER + +/datum/sprite_accessory/facial_hair/elvis + name = "Sideburns (Elvis)" + icon_state = "facial_elvis" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm new file mode 100644 index 0000000000..66c79ea0f0 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/hair_head.dm @@ -0,0 +1,460 @@ +////////////////////// +// Hair Definitions // +////////////////////// +/datum/sprite_accessory/hair + icon = 'icons/mob/human_face.dmi' // default icon for all hairs + + // please make sure they're sorted alphabetically and, where needed, categorized + // try to capitalize the names please~ + // try to spell + // you do not need to define _s or _l sub-states, game automatically does this for you + +/datum/sprite_accessory/hair/afro + name = "Afro" + icon_state = "hair_afro" + +/datum/sprite_accessory/hair/afro2 + name = "Afro 2" + icon_state = "hair_afro2" + +/datum/sprite_accessory/hair/afro_large + name = "Afro (Large)" + icon_state = "hair_bigafro" + +/datum/sprite_accessory/hair/antenna + name = "Ahoge" + icon_state = "hair_antenna" + +/datum/sprite_accessory/hair/bald + name = "Bald" + icon_state = null + +/datum/sprite_accessory/hair/balding + name = "Balding Hair" + icon_state = "hair_e" + +/datum/sprite_accessory/hair/bedhead + name = "Bedhead" + icon_state = "hair_bedhead" + +/datum/sprite_accessory/hair/bedhead2 + name = "Bedhead 2" + icon_state = "hair_bedheadv2" + +/datum/sprite_accessory/hair/bedhead3 + name = "Bedhead 3" + icon_state = "hair_bedheadv3" + +/datum/sprite_accessory/hair/beehive + name = "Beehive" + icon_state = "hair_beehive" + +/datum/sprite_accessory/hair/beehive2 + name = "Beehive 2" + icon_state = "hair_beehivev2" + +/datum/sprite_accessory/hair/bob + name = "Bob Hair" + icon_state = "hair_bob" + +/datum/sprite_accessory/hair/bob2 + name = "Bob Hair 2" + icon_state = "hair_bob2" + +/datum/sprite_accessory/hair/bob3 + name = "Bob Hair 3" + icon_state = "hair_bobcut" + +/datum/sprite_accessory/hair/bobcurl + name = "Bobcurl" + icon_state = "hair_bobcurl" + +/datum/sprite_accessory/hair/boddicker + name = "Boddicker" + icon_state = "hair_boddicker" + +/datum/sprite_accessory/hair/bowl + name = "Bowl" + icon_state = "hair_bowlcut" + +/datum/sprite_accessory/hair/braid + name = "Braid (Floorlength)" + icon_state = "hair_braid" + +/datum/sprite_accessory/hair/braided + name = "Braided" + icon_state = "hair_braided" + +/datum/sprite_accessory/hair/front_braid + name = "Braided Front" + icon_state = "hair_braidfront" + +/datum/sprite_accessory/hair/not_floorlength_braid + name = "Braid (High)" + icon_state = "hair_braid2" + +/datum/sprite_accessory/hair/lowbraid + name = "Braid (Low)" + icon_state = "hair_hbraid" + +/datum/sprite_accessory/hair/shortbraid + name = "Braid (Short)" + icon_state = "hair_shortbraid" + +/datum/sprite_accessory/hair/braidtail + name = "Braided Tail" + icon_state = "hair_braidtail" + +/datum/sprite_accessory/hair/bun + name = "Bun Head" + icon_state = "hair_bun" + +/datum/sprite_accessory/hair/bun2 + name = "Bun Head 2" + icon_state = "hair_bunhead2" + +/datum/sprite_accessory/hair/largebun + name = "Bun (Large)" + icon_state = "hair_largebun" + +/datum/sprite_accessory/hair/business + name = "Business Hair" + icon_state = "hair_business" + +/datum/sprite_accessory/hair/business2 + name = "Business Hair 2" + icon_state = "hair_business2" + +/datum/sprite_accessory/hair/business3 + name = "Business Hair 3" + icon_state = "hair_business3" + +/datum/sprite_accessory/hair/business4 + name = "Business Hair 4" + icon_state = "hair_business4" + +/datum/sprite_accessory/hair/buzz + name = "Buzzcut" + icon_state = "hair_buzzcut" + +/datum/sprite_accessory/hair/combover + name = "Combover" + icon_state = "hair_combover" + +/datum/sprite_accessory/hair/crew + name = "Crewcut" + icon_state = "hair_crewcut" + +/datum/sprite_accessory/hair/curls + name = "Curls" + icon_state = "hair_curls" + +/datum/sprite_accessory/hair/cut + name = "Cut Hair" + icon_state = "hair_c" + +/datum/sprite_accessory/hair/devillock + name = "Devil Lock" + icon_state = "hair_devilock" + +/datum/sprite_accessory/hair/dreadlocks + name = "Dreadlocks" + icon_state = "hair_dreads" + +/datum/sprite_accessory/hair/drillhair + name = "Drill Hair" + icon_state = "hair_drillhair" + +/datum/sprite_accessory/hair/drillhairextended + name = "Drill Hair (Extended)" + icon_state = "hair_drillhairextended" + +/datum/sprite_accessory/hair/emo + name = "Emo" + icon_state = "hair_emo" + +/datum/sprite_accessory/hair/feather + name = "Feather" + icon_state = "hair_feather" + +/datum/sprite_accessory/hair/sargeant + name = "Flat Top" + icon_state = "hair_sargeant" + +/datum/sprite_accessory/hair/bigflattop + name = "Flat Top (Big)" + icon_state = "hair_bigflattop" + +/datum/sprite_accessory/hair/fag + name = "Flow Hair" + icon_state = "hair_f" + +/datum/sprite_accessory/hair/gelled + name = "Gelled Back" + icon_state = "hair_gelled" + +/datum/sprite_accessory/hair/gentle + name = "Gentle" + icon_state = "hair_gentle" + +/datum/sprite_accessory/hair/halfbang + name = "Half-banged Hair" + icon_state = "hair_halfbang" + +/datum/sprite_accessory/hair/halfbang2 + name = "Half-banged Hair 2" + icon_state = "hair_halfbang2" + +/datum/sprite_accessory/hair/hedgehog + name = "Hedgehog Hair" + icon_state = "hair_hedgehog" + +/datum/sprite_accessory/hair/himecut + name = "Hime Cut" + icon_state = "hair_himecut" + +/datum/sprite_accessory/hair/himecut2 + name = "Hime Cut 2" + icon_state = "hair_himecut2" + +/datum/sprite_accessory/hair/himeup + name = "Hime Updo" + icon_state = "hair_himeup" + +/datum/sprite_accessory/hair/hitop + name = "Hitop" + icon_state = "hair_hitop" + +/datum/sprite_accessory/hair/jensen + name = "Jensen Hair" + icon_state = "hair_jensen" + +/datum/sprite_accessory/hair/keanu + name = "Keanu Hair" + icon_state = "hair_keanu" + +/datum/sprite_accessory/hair/kusangi + name = "Kusanagi Hair" + icon_state = "hair_kusanagi" + +/datum/sprite_accessory/hair/long + name = "Long Hair 1" + icon_state = "hair_long" + +/datum/sprite_accessory/hair/long2 + name = "Long Hair 2" + icon_state = "hair_long2" + +/datum/sprite_accessory/hair/long3 + name = "Long Hair 3" + icon_state = "hair_long3" + +/datum/sprite_accessory/hair/long_over_eye + name = "Long Over Eye" + icon_state = "hair_longovereye" + +/datum/sprite_accessory/hair/longbangs + name = "Long Bangs" + icon_state = "hair_lbangs" + +/datum/sprite_accessory/hair/longemo + name = "Long Emo" + icon_state = "hair_longemo" + +/datum/sprite_accessory/hair/longfringe + name = "Long Fringe" + icon_state = "hair_longfringe" + +/datum/sprite_accessory/hair/sidepartlongalt + name = "Long Side Part" + icon_state = "hair_longsidepart" + +/datum/sprite_accessory/hair/megaeyebrows + name = "Mega Eyebrows" + icon_state = "hair_megaeyebrows" + +/datum/sprite_accessory/hair/messy + name = "Messy" + icon_state = "hair_messy" + +/datum/sprite_accessory/hair/mohawk + name = "Mohawk" + icon_state = "hair_d" + +/datum/sprite_accessory/hair/reversemohawk + name = "Mohawk (Reverse)" + icon_state = "hair_reversemohawk" + +/datum/sprite_accessory/hair/odango + name = "Odango" + icon_state = "hair_odango" + +/datum/sprite_accessory/hair/ombre + name = "Ombre" + icon_state = "hair_ombre" + +/datum/sprite_accessory/hair/oneshoulder + name = "One Shoulder" + icon_state = "hair_oneshoulder" + +/datum/sprite_accessory/hair/over_eye + name = "Over Eye" + icon_state = "hair_shortovereye" + +//Donator item - fractious +/datum/sprite_accessory/hair/over_eye_fr + name = "Over Eye (fract)" + icon_state = "hair_shortovereye_1f" + ckeys_allowed = list("fractious") + +/datum/sprite_accessory/hair/parted + name = "Parted" + icon_state = "hair_parted" + +/datum/sprite_accessory/hair/partedside + name = "Parted (Side)" + icon_state = "hair_part" + +/datum/sprite_accessory/hair/kagami + name = "Pigtails" + icon_state = "hair_kagami" + +/datum/sprite_accessory/hair/pigtail + name = "Pigtails 2" + icon_state = "hair_pigtails" + +/datum/sprite_accessory/hair/pigtail2 + name = "Pigtails 3" + icon_state = "hair_pigtails2" + +/datum/sprite_accessory/hair/pixie + name = "Pixie Cut" + icon_state = "hair_pixie" + +/datum/sprite_accessory/hair/pompadour + name = "Pompadour" + icon_state = "hair_pompadour" + +/datum/sprite_accessory/hair/bigpompadour + name = "Pompadour (Big)" + icon_state = "hair_bigpompadour" + +/datum/sprite_accessory/hair/ponytail1 + name = "Ponytail" + icon_state = "hair_ponytail" + +/datum/sprite_accessory/hair/ponytail2 + name = "Ponytail 2" + icon_state = "hair_ponytail2" + +/datum/sprite_accessory/hair/ponytail3 + name = "Ponytail 3" + icon_state = "hair_ponytail3" + +/datum/sprite_accessory/hair/ponytail4 + name = "Ponytail 4" + icon_state = "hair_ponytail4" + +/datum/sprite_accessory/hair/ponytail5 + name = "Ponytail 5" + icon_state = "hair_ponytail5" + +/datum/sprite_accessory/hair/highponytail + name = "Ponytail (High)" + icon_state = "hair_highponytail" + +/datum/sprite_accessory/hair/longponytail + name = "Ponytail (Long)" + icon_state = "hair_longstraightponytail" + +/datum/sprite_accessory/hair/sidetail + name = "Ponytail (Side)" + icon_state = "hair_sidetail" + +/datum/sprite_accessory/hair/sidetail2 + name = "Ponytail (Side) 2" + icon_state = "hair_sidetail2" + +/datum/sprite_accessory/hair/sidetail3 + name = "Ponytail (Side) 3" + icon_state = "hair_sidetail3" + +/datum/sprite_accessory/hair/sidetail4 + name = "Ponytail (Side) 4" + icon_state = "hair_sidetail4" + +/datum/sprite_accessory/hair/quiff + name = "Quiff" + icon_state = "hair_quiff" + +/datum/sprite_accessory/hair/short + name = "Short Hair" + icon_state = "hair_a" + +/datum/sprite_accessory/hair/shorthair2 + name = "Short Hair 2" + icon_state = "hair_shorthair2" + +/datum/sprite_accessory/hair/shorthair3 + name = "Short Hair 3" + icon_state = "hair_shorthair3" + +/datum/sprite_accessory/hair/shoulderlength + name = "Shoulder-length Hair" + icon_state = "hair_b" + +/datum/sprite_accessory/hair/sidecut + name = "Sidecut" + icon_state = "hair_sidecut" + +/datum/sprite_accessory/hair/skinhead + name = "Skinhead" + icon_state = "hair_skinhead" + +/datum/sprite_accessory/hair/protagonist + name = "Slightly Long Hair" + icon_state = "hair_protagonist" + +/datum/sprite_accessory/hair/spiky + name = "Spiky" + icon_state = "hair_spikey" + +/datum/sprite_accessory/hair/spiky2 + name = "Spiky 2" + icon_state = "hair_spiky" + +/datum/sprite_accessory/hair/spiky3 + name = "Spiky 3" + icon_state = "hair_spiky2" + +/datum/sprite_accessory/hair/swept + name = "Swept Back Hair" + icon_state = "hair_swept" + +/datum/sprite_accessory/hair/swept2 + name = "Swept Back Hair 2" + icon_state = "hair_swept2" + +/datum/sprite_accessory/hair/tressshoulder + name = "Tress Shoulder" + icon_state = "hair_tressshoulder" + +/datum/sprite_accessory/hair/updo + name = "Updo" + icon_state = "hair_updo" + +/datum/sprite_accessory/hair/longer + name = "Very Long Hair" + icon_state = "hair_vlong" + +/datum/sprite_accessory/hair/longest + name = "Very Long Hair 2" + icon_state = "hair_longest" + +/datum/sprite_accessory/hair/longest2 + name = "Very Long Over Eye" + icon_state = "hair_longest2" + +/datum/sprite_accessory/hair/longestalt + name = "Very Long with Fringe" + icon_state = "hair_vlongfringe" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/horns.dm b/code/modules/mob/dead/new_player/sprite_accessories/horns.dm new file mode 100644 index 0000000000..607ad650e3 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/horns.dm @@ -0,0 +1,26 @@ +/datum/sprite_accessory/horns + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/horns/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/horns/simple + name = "Simple" + icon_state = "simple" + +/datum/sprite_accessory/horns/short + name = "Short" + icon_state = "short" + +/datum/sprite_accessory/horns/curled + name = "Curled" + icon_state = "curled" + +/datum/sprite_accessory/horns/ram + name = "Ram" + icon_state = "ram" + +/datum/sprite_accessory/horns/angler + name = "Angeler" + icon_state = "angler" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/legs.dm b/code/modules/mob/dead/new_player/sprite_accessories/legs.dm new file mode 100644 index 0000000000..7663100822 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/legs.dm @@ -0,0 +1,8 @@ +/datum/sprite_accessory/legs //legs are a special case, they aren't actually sprite_accessories but are updated with them. + icon = null //These datums exist for selecting legs on preference, and little else + +/datum/sprite_accessory/legs/none + name = "Normal Legs" + +/datum/sprite_accessory/legs/digitigrade_lizard + name = "Digitigrade Legs" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm new file mode 100644 index 0000000000..6b8036bd69 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/moth_wings.dm @@ -0,0 +1,68 @@ +/datum/sprite_accessory/moth_wings + icon = 'icons/mob/wings.dmi' + color_src = null + +/datum/sprite_accessory/moth_wings/plain + name = "Plain" + icon_state = "plain" + +/datum/sprite_accessory/moth_wings/monarch + name = "Monarch" + icon_state = "monarch" + +/datum/sprite_accessory/moth_wings/luna + name = "Luna" + icon_state = "luna" + +/datum/sprite_accessory/moth_wings/atlas + name = "Atlas" + icon_state = "atlas" + +/datum/sprite_accessory/moth_wings/reddish + name = "Reddish" + icon_state = "redish" + +/datum/sprite_accessory/moth_wings/royal + name = "Royal" + icon_state = "royal" + +/datum/sprite_accessory/moth_wings/gothic + name = "Gothic" + icon_state = "gothic" + +/datum/sprite_accessory/moth_wings/lovers + name = "Lovers" + icon_state = "lovers" + +/datum/sprite_accessory/moth_wings/whitefly + name = "White Fly" + icon_state = "whitefly" + +/datum/sprite_accessory/moth_wings/punished + name = "Burnt Off" + icon_state = "punished" + locked = TRUE + +/datum/sprite_accessory/moth_wings/firewatch + name = "Firewatch" + icon_state = "firewatch" + +/datum/sprite_accessory/moth_wings/deathhead + name = "Deathshead" + icon_state = "deathhead" + +/datum/sprite_accessory/moth_wings/poison + name = "Poison" + icon_state = "poison" + +/datum/sprite_accessory/moth_wings/ragged + name = "Ragged" + icon_state = "ragged" + +/datum/sprite_accessory/moth_wings/moonfly + name = "Moon Fly" + icon_state = "moonfly" + +/datum/sprite_accessory/moth_wings/snow + name = "Snow" + icon_state = "snow" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/pines.dm b/code/modules/mob/dead/new_player/sprite_accessories/pines.dm new file mode 100644 index 0000000000..4ccbc3d9ea --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/pines.dm @@ -0,0 +1,53 @@ +/datum/sprite_accessory/spines + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/spines_animated + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/spines/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/spines_animated/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/spines/short + name = "Short" + icon_state = "short" + +/datum/sprite_accessory/spines_animated/short + name = "Short" + icon_state = "short" + +/datum/sprite_accessory/spines/shortmeme + name = "Short + Membrane" + icon_state = "shortmeme" + +/datum/sprite_accessory/spines_animated/shortmeme + name = "Short + Membrane" + icon_state = "shortmeme" + +/datum/sprite_accessory/spines/long + name = "Long" + icon_state = "long" + +/datum/sprite_accessory/spines_animated/long + name = "Long" + icon_state = "long" + +/datum/sprite_accessory/spines/longmeme + name = "Long + Membrane" + icon_state = "longmeme" + +/datum/sprite_accessory/spines_animated/longmeme + name = "Long + Membrane" + icon_state = "longmeme" + +/datum/sprite_accessory/spines/aqautic + name = "Aquatic" + icon_state = "aqua" + +/datum/sprite_accessory/spines_animated/aqautic + name = "Aquatic" + icon_state = "aqua" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm new file mode 100644 index 0000000000..c663c08d69 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/snouts.dm @@ -0,0 +1,18 @@ +/datum/sprite_accessory/snouts + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/snouts/sharp + name = "Sharp" + icon_state = "sharp" + +/datum/sprite_accessory/snouts/round + name = "Round" + icon_state = "round" + +/datum/sprite_accessory/snouts/sharplight + name = "Sharp + Light" + icon_state = "sharplight" + +/datum/sprite_accessory/snouts/roundlight + name = "Round + Light" + icon_state = "roundlight" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/socks.dm b/code/modules/mob/dead/new_player/sprite_accessories/socks.dm new file mode 100644 index 0000000000..5a5d37d4e7 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/socks.dm @@ -0,0 +1,96 @@ +/////////////////////// +// Socks Definitions // +/////////////////////// + +/datum/sprite_accessory/socks + icon = 'icons/mob/underwear.dmi' + +/datum/sprite_accessory/socks/nude + name = "Nude" + icon_state = null + +// please make sure they're sorted alphabetically and categorized + +/datum/sprite_accessory/socks/black_knee + name = "Knee-high (Black)" + icon_state = "black_knee" + +/datum/sprite_accessory/socks/commie_knee + name = "Knee-High (Commie)" + icon_state = "commie_knee" + +/datum/sprite_accessory/socks/usa_knee + name = "Knee-High (Freedom)" + icon_state = "assblastusa_knee" + +/datum/sprite_accessory/socks/rainbow_knee + name = "Knee-high (Rainbow)" + icon_state = "rainbow_knee" + +/datum/sprite_accessory/socks/striped_knee + name = "Knee-high (Striped)" + icon_state = "striped_knee" + +/datum/sprite_accessory/socks/thin_knee + name = "Knee-high (Thin)" + icon_state = "thin_knee" + +/datum/sprite_accessory/socks/uk_knee + name = "Knee-High (UK)" + icon_state = "uk_knee" + +/datum/sprite_accessory/socks/white_knee + name = "Knee-high (White)" + icon_state = "white_knee" + +/datum/sprite_accessory/socks/black_norm + name = "Normal (Black)" + icon_state = "black_norm" + +/datum/sprite_accessory/socks/white_norm + name = "Normal (White)" + icon_state = "white_norm" + +/datum/sprite_accessory/socks/pantyhose + name = "Pantyhose" + icon_state = "pantyhose" + +/datum/sprite_accessory/socks/black_short + name = "Short (Black)" + icon_state = "black_short" + +/datum/sprite_accessory/socks/white_short + name = "Short (White)" + icon_state = "white_short" + +/datum/sprite_accessory/socks/black_thigh + name = "Thigh-high (Black)" + icon_state = "black_thigh" + +/datum/sprite_accessory/socks/commie_thigh + name = "Thigh-high (Commie)" + icon_state = "commie_thigh" + +/datum/sprite_accessory/socks/usa_thigh + name = "Thigh-high (Freedom)" + icon_state = "assblastusa_thigh" + +/datum/sprite_accessory/socks/rainbow_thigh + name = "Thigh-high (Rainbow)" + icon_state = "rainbow_thigh" + +/datum/sprite_accessory/socks/striped_thigh + name = "Thigh-high (Striped)" + icon_state = "striped_thigh" + +/datum/sprite_accessory/socks/thin_thigh + name = "Thigh-high (Thin)" + icon_state = "thin_thigh" + +/datum/sprite_accessory/socks/uk_thigh + name = "Thigh-high (UK)" + icon_state = "uk_thigh" + +/datum/sprite_accessory/socks/white_thigh + name = "Thigh-high (White)" + icon_state = "white_thigh" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm new file mode 100644 index 0000000000..31faabf663 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -0,0 +1,55 @@ +/datum/sprite_accessory/tails + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/tails_animated + icon = 'icons/mob/mutant_bodyparts.dmi' + +/datum/sprite_accessory/tails/lizard/smooth + name = "Smooth" + icon_state = "smooth" + +/datum/sprite_accessory/tails_animated/lizard/smooth + name = "Smooth" + icon_state = "smooth" + +/datum/sprite_accessory/tails/lizard/dtiger + name = "Dark Tiger" + icon_state = "dtiger" + +/datum/sprite_accessory/tails_animated/lizard/dtiger + name = "Dark Tiger" + icon_state = "dtiger" + +/datum/sprite_accessory/tails/lizard/ltiger + name = "Light Tiger" + icon_state = "ltiger" + +/datum/sprite_accessory/tails_animated/lizard/ltiger + name = "Light Tiger" + icon_state = "ltiger" + +/datum/sprite_accessory/tails/lizard/spikes + name = "Spikes" + icon_state = "spikes" + +/datum/sprite_accessory/tails_animated/lizard/spikes + name = "Spikes" + icon_state = "spikes" + +/datum/sprite_accessory/tails/human/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/tails_animated/human/none + name = "None" + icon_state = "none" +/* +/datum/sprite_accessory/tails/human/cat + name = "Cat" + icon_state = "cat" + color_src = HAIR + +/datum/sprite_accessory/tails_animated/human/cat + name = "Cat" + icon_state = "cat" + color_src = HAIR*/ \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm new file mode 100644 index 0000000000..7c66ef51e3 --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm @@ -0,0 +1,308 @@ +//////////////////////////// +// Undershirt Definitions // +//////////////////////////// + +/datum/sprite_accessory/undershirt + icon = 'icons/mob/underwear.dmi' + gender = NEUTER + +/datum/sprite_accessory/undershirt/nude + name = "Nude" + icon_state = null + +// please make sure they're sorted alphabetically and categorized + +/datum/sprite_accessory/undershirt/bluejersey + name = "Shirt, Jersey - Blue" + icon_state = "shirt_bluejersey" + +/datum/sprite_accessory/undershirt/redjersey + name = "Shirt, Jersey - Red" + icon_state = "shirt_redjersey" + +/datum/sprite_accessory/undershirt/bluepolo + name = "Shirt, Polo - Blue" + icon_state = "bluepolo" + +/datum/sprite_accessory/undershirt/grayyellowpolo + name = "Shirt, Polo - Gray, Yellow" + icon_state = "grayyellowpolo" + +/datum/sprite_accessory/undershirt/redpolo + name = "Shirt, Polo - Red" + icon_state = "redpolo" + +/datum/sprite_accessory/undershirt/whitepolo + name = "Shirt, Polo - White" + icon_state = "whitepolo" + +/datum/sprite_accessory/undershirt/alienshirt + name = "Shirt - Alien" + icon_state = "shirt_alien" + +/datum/sprite_accessory/undershirt/mondmondjaja + name = "Shirt - Band" + icon_state = "band" + +/datum/sprite_accessory/undershirt/shirt_black + name = "Shirt - Black" + icon_state = "shirt_black" + +/datum/sprite_accessory/undershirt/blueshirt + name = "Shirt - Blue" + icon_state = "shirt_blue" + +/datum/sprite_accessory/undershirt/clownshirt + name = "Shirt - Clown" + icon_state = "shirt_clown" + +/datum/sprite_accessory/undershirt/commie + name = "Shirt - Commie" + icon_state = "shirt_commie" + +/datum/sprite_accessory/undershirt/greenshirt + name = "Shirt - Green" + icon_state = "shirt_green" + +/datum/sprite_accessory/undershirt/shirt_grey + name = "Shirt - Grey" + icon_state = "shirt_grey" + +/datum/sprite_accessory/undershirt/ian + name = "Shirt - Ian" + icon_state = "ian" + +/datum/sprite_accessory/undershirt/ilovent + name = "Shirt - I Love NT" + icon_state = "ilovent" + +/datum/sprite_accessory/undershirt/lover + name = "Shirt - Lover" + icon_state = "lover" + +/datum/sprite_accessory/undershirt/matroska + name = "Shirt - Matroska" + icon_state = "matroska" + +/datum/sprite_accessory/undershirt/meat + name = "Shirt - Meat" + icon_state = "shirt_meat" + +/datum/sprite_accessory/undershirt/nano + name = "Shirt - Nanotrasen" + icon_state = "shirt_nano" + +/datum/sprite_accessory/undershirt/peace + name = "Shirt - Peace" + icon_state = "peace" + +/datum/sprite_accessory/undershirt/pacman + name = "Shirt - Pogoman" + icon_state = "pogoman" + +/datum/sprite_accessory/undershirt/question + name = "Shirt - Question" + icon_state = "shirt_question" + +/datum/sprite_accessory/undershirt/redshirt + name = "Shirt - Red" + icon_state = "shirt_red" + +/datum/sprite_accessory/undershirt/skull + name = "Shirt - Skull" + icon_state = "shirt_skull" + +/datum/sprite_accessory/undershirt/ss13 + name = "Shirt - SS13" + icon_state = "shirt_ss13" + +/datum/sprite_accessory/undershirt/stripe + name = "Shirt - Striped" + icon_state = "shirt_stripes" + +/datum/sprite_accessory/undershirt/tiedye + name = "Shirt - Tie-dye" + icon_state = "shirt_tiedye" + +/datum/sprite_accessory/undershirt/uk + name = "Shirt - UK" + icon_state = "uk" + +/datum/sprite_accessory/undershirt/usa + name = "Shirt - USA" + icon_state = "shirt_assblastusa" + +/datum/sprite_accessory/undershirt/shirt_white + name = "Shirt - White" + icon_state = "shirt_white" + +/datum/sprite_accessory/undershirt/blackshortsleeve + name = "Shirt, Short Sleeved - Black" + icon_state = "blackshortsleeve" + +/datum/sprite_accessory/undershirt/blueshortsleeve + name = "Shirt, Short Sleeved - Blue" + icon_state = "blueshortsleeve" + +/datum/sprite_accessory/undershirt/greenshortsleeve + name = "Shirt, Short Sleeved - Green" + icon_state = "greenshortsleeve" + +/datum/sprite_accessory/undershirt/purpleshortsleeve + name = "Shirt, Short Sleeved - Purple" + icon_state = "purpleshortsleeve" + +/datum/sprite_accessory/undershirt/whiteshortsleeve + name = "Shirt, Short Sleeved - White" + icon_state = "whiteshortsleeve" + +/datum/sprite_accessory/undershirt/blueshirtsport + name = "Shirt, Sports - Blue" + icon_state = "blueshirtsport" + gender = NEUTER + +/datum/sprite_accessory/undershirt/greenshirtsport + name = "Shirt, Sports - Green" + icon_state = "greenshirtsport" + gender = NEUTER + +/datum/sprite_accessory/undershirt/redshirtsport + name = "Shirt, Sports - Red" + icon_state = "redshirtsport" + gender = NEUTER + +/datum/sprite_accessory/undershirt/redtop + name = "Shirt, Short - Red" + icon_state = "redtop" + +/datum/sprite_accessory/undershirt/whitetop + name = "Shirt, Short - White" + icon_state = "whitetop" + +/datum/sprite_accessory/undershirt/tshirt_blue + name = "T-Shirt - Blue" + icon_state = "blueshirt" + +/datum/sprite_accessory/undershirt/tshirt_green + name = "T-Shirt - Green" + icon_state = "greenshirt" + +/datum/sprite_accessory/undershirt/tshirt_red + name = "T-Shirt - Red" + icon_state = "redshirt" + +/datum/sprite_accessory/undershirt/yellowshirt + name = "T-Shirt - Yellow" + icon_state = "yellowshirt" + +/datum/sprite_accessory/undershirt/tank_black + name = "Tank Top - Black" + icon_state = "tank_black" + +/datum/sprite_accessory/undershirt/tankfire + name = "Tank Top - Fire" + icon_state = "tank_fire" + +/datum/sprite_accessory/undershirt/tank_grey + name = "Tank Top - Grey" + icon_state = "tank_grey" + +/datum/sprite_accessory/undershirt/female_midriff + name = "Tank Top - Midriff" + icon_state = "tank_midriff" + +/datum/sprite_accessory/undershirt/tank_red + name = "Tank Top - Red" + icon_state = "tank_red" + +/datum/sprite_accessory/undershirt/tankstripe + name = "Tank Top - Striped" + icon_state = "tank_stripes" + +/datum/sprite_accessory/undershirt/tank_white + name = "Tank Top - White" + icon_state = "tank_white" + +/datum/sprite_accessory/undershirt/female_red + name = "Bra - Red" + icon_state = "bra_red" + +/datum/sprite_accessory/undershirt/female_pink + name = "Bra - Pink" + icon_state = "bra_pink" + +/datum/sprite_accessory/undershirt/female_kinky + name = "Bra - Kinky Black" + icon_state = "bra_kinky" + +/datum/sprite_accessory/undershirt/female_green + name = "Bra - Green" + icon_state = "bra_green" + +/datum/sprite_accessory/undershirt/female_commie + name = "Bra - Freedom" + icon_state = "bra_assblastusa" + +/datum/sprite_accessory/undershirt/female_commie + name = "Bra - Commie" + icon_state = "bra_commie" + +/datum/sprite_accessory/undershirt/female_babyblue + name = "Bra, Baby Blue" + icon_state = "bra_babyblue" + +/datum/sprite_accessory/undershirt/female_black + name = "Bra - Black" + icon_state = "bra_black" + +/datum/sprite_accessory/undershirt/female_uk + name = "Bra - UK" + icon_state = "bra_uk" + +/datum/sprite_accessory/undershirt/female_white + name = "Bra - White" + icon_state = "bra_white" + +/datum/sprite_accessory/undershirt/female_white_neko + name = "Bra, Neko - white" + icon_state = "bra_neko_white" + +/datum/sprite_accessory/undershirt/female_black_neko + name = "Bra, Neko - Black" + icon_state = "bra_neko_black" + +/datum/sprite_accessory/undershirt/female_blackalt + name = "Bra, Sports - Black" + icon_state = "bra_sports_black" + +/datum/sprite_accessory/undershirt/sports_bra + name = "Bra, Sports 1 - White" + icon_state = "sports_bra" + +/datum/sprite_accessory/undershirt/female_whitealt + name = "Bra, Sports 2 - White" + icon_state = "bra_sports_white" + +/datum/sprite_accessory/undershirt/sports_bra2 + name = "Bra, Sports 3 - White" + icon_state = "sports_bra_alt" + +/datum/sprite_accessory/undershirt/female_yellow + name = "Bra - Yellow" + icon_state = "bra_yellow" + +/datum/sprite_accessory/undershirt/female_thong + name = "Bra, Strapless - Pink" + icon_state = "bra_strapless_pink" + +/datum/sprite_accessory/undershirt/female_blue + name = "Bra, Strapless - Blue" + icon_state = "bra_blue" + +/datum/sprite_accessory/undershirt/swimsuit_green + name = "Swimsuit, Top - Green" + icon_state = "bra_swimming_green" + +/datum/sprite_accessory/undershirt/swimsuit_purple + name = "Swimsuit, Top - Purple" + icon_state = "bra_swimming_purple" \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm new file mode 100644 index 0000000000..6beed231aa --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm @@ -0,0 +1,171 @@ +/////////////////////////// +// Underwear Definitions // +/////////////////////////// +/datum/sprite_accessory/underwear + icon = 'icons/mob/underwear.dmi' + gender = NEUTER + +/datum/sprite_accessory/underwear/nude + name = "Nude" + icon_state = null + +/datum/sprite_accessory/underwear/mankini + name = "Mankini - Green" + icon_state = "mankini_green" + +/datum/sprite_accessory/underwear/male_kinky + name = "Jockstrap - White" + icon_state = "jockstrap_white" + +/datum/sprite_accessory/underwear/male_white + name = "Briefs - White" + icon_state = "briefs_white" + +/datum/sprite_accessory/underwear/male_black + name = "Briefs - Black" + icon_state = "briefs_black" + +/datum/sprite_accessory/underwear/male_grey + name = "Briefs - Grey" + icon_state = "briefs_grey" + +/datum/sprite_accessory/underwear/male_red + name = "Briefs - Red" + icon_state = "briefs_red" + +/datum/sprite_accessory/underwear/male_green + name = "Briefs - Green" + icon_state = "briefs_green" + +/datum/sprite_accessory/underwear/male_blue + name = "Briefs - Blue" + icon_state = "briefs_blue" + +/datum/sprite_accessory/underwear/male_blackalt + name = "Boxers - Black" + icon_state = "boxers_black" + +/datum/sprite_accessory/underwear/male_greyalt + name = "Boxers - Grey" + icon_state = "boxers_grey" + +/datum/sprite_accessory/underwear/male_hearts + name = "Boxers - Heart" + icon_state = "boxers_heart" + +/datum/sprite_accessory/underwear/male_stripe + name = "Boxers - Striped" + icon_state = "boxers_striped" + +/datum/sprite_accessory/underwear/male_commie + name = "Boxers - Striped Communist" + icon_state = "boxers_commie" + +/datum/sprite_accessory/underwear/male_usastripe + name = "Boxers - Striped Freedom" + icon_state = "boxers_assblastusa" + +/datum/sprite_accessory/underwear/male_uk + name = "Boxers - Striped UK" + icon_state = "boxers_uk" + + +/datum/sprite_accessory/underwear/female_whitealt + name = "Boxer Briefs - White" + icon_state = "boxer_briefs_white" + +/datum/sprite_accessory/underwear/female_blackalt + name = "Boxer Briefs - Black" + icon_state = "boxer_briefs_black" + +/datum/sprite_accessory/underwear/female_pink + name = "Boxer Briefs - Pink" + icon_state = "boxer_briefs_pink" + +/datum/sprite_accessory/underwear/female_babyblue + name = "Boxer Briefs - Baby Blue" + icon_state = "boxer_briefs_babyblue" + +/datum/sprite_accessory/underwear/female_yellow + name = "Boxer Briefs - Yellow" + icon_state = "boxer_briefs_yellow" + + +/datum/sprite_accessory/underwear/female_black + name = "Panties - Black" + icon_state = "panties_black" + +/datum/sprite_accessory/underwear/female_blue + name = "Panties - Blue" + icon_state = "panties_blue" + +/datum/sprite_accessory/underwear/female_commie + name = "Panties - Commie" + icon_state = "panties_commie" + +/datum/sprite_accessory/underwear/female_usastripe + name = "Panties - Freedom" + icon_state = "panties_assblastusa" + +/datum/sprite_accessory/underwear/female_green + name = "Panties - Green" + icon_state = "panties_green" + +/datum/sprite_accessory/underwear/female_kinky + name = "Panties - Kinky Black" + icon_state = "panties_kinky" + +/datum/sprite_accessory/underwear/female_red + name = "Panties - Red" + icon_state = "panties_red" + +/datum/sprite_accessory/underwear/female_uk + name = "Panties - UK" + icon_state = "panties_uk" + +/datum/sprite_accessory/underwear/female_white + name = "Panties - White" + icon_state = "panties_white" + +/datum/sprite_accessory/underwear/female_white_neko + name = "Panties, Neko - White" + icon_state = "panties_neko_white" + +/datum/sprite_accessory/underwear/female_black_neko + name = "Panties, Neko - Black" + icon_state = "panties_neko_black" + + +/datum/sprite_accessory/underwear/swimsuit_red + name = "Swimsuit, One Piece - Red" + icon_state = "swimming_red" + +/datum/sprite_accessory/underwear/swimsuit + name = "Swimsuit, One Piece - Black" + icon_state = "swimming_black" + +/datum/sprite_accessory/underwear/swimsuit_blue + name = "Swimsuit, One Piece - Striped Blue" + icon_state = "swimming_blue" + +/datum/sprite_accessory/underwear/swimsuit_green + name = "Swimsuit, Bottom - Green" + icon_state = "panties_swimming_green" + +/datum/sprite_accessory/underwear/swimsuit_purple + name = "Swimsuit, Bottom - Purple" + icon_state = "panties_swimming_purple" + +/datum/sprite_accessory/underwear/female_thong_black + name = "Thong - Black" + icon_state = "thong_black" + +/datum/sprite_accessory/underwear/female_thong + name = "Thong - Pink" + icon_state = "thong_pink" + +/datum/sprite_accessory/underwear/female_babydoll + name = "Babydoll - Black" + icon_state = "babydoll" + + diff --git a/code/modules/mob/dead/new_player/sprite_accessories/wings.dm b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm new file mode 100644 index 0000000000..d051b2f07a --- /dev/null +++ b/code/modules/mob/dead/new_player/sprite_accessories/wings.dm @@ -0,0 +1,26 @@ +/datum/sprite_accessory/wings/none + name = "None" + icon_state = "none" + +/datum/sprite_accessory/wings_open + icon = 'icons/mob/wings.dmi' + +/datum/sprite_accessory/wings_open/angel + name = "Angel" + icon_state = "angel" + color_src = 0 + dimension_x = 46 + center = TRUE + dimension_y = 34 + +/datum/sprite_accessory/wings + icon = 'icons/mob/wings.dmi' + +/datum/sprite_accessory/wings/angel + name = "Angel" + icon_state = "angel" + color_src = 0 + dimension_x = 46 + center = TRUE + dimension_y = 34 + locked = TRUE \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 950ac5fb8b..d1d5fb7cd4 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -39,6 +39,19 @@ restraint_check = TRUE emote_type = EMOTE_AUDIBLE +/datum/emote/living/carbon/human/mawp + key = "mawp" + key_third_person = "mawps" + message = "mawps annoyingly." + emote_type = EMOTE_AUDIBLE + +/datum/emote/living/carbon/human/mawp/run_emote(mob/living/user, params) + . = ..() + if(.) + if(ishuman(user)) + if(prob(10)) + user.adjustEarDamage(-5, -5) + /datum/emote/living/carbon/human/mumble key = "mumble" key_third_person = "mumbles" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index c6ba900b13..26e19ff376 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -18,6 +18,16 @@ var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) + if(ishuman(src)) //user just returned, y'know, the user's own species. dumb. + var/mob/living/carbon/human/H = src + var/datum/species/pref_species = H.dna.species + if(get_visible_name() == "Unknown") // same as flavor text, but hey it works. + msg += "You can't make out what species they are.\n" + else if(skipface) + msg += "You can't make out what species they are.\n" + else + msg += "[t_He] [t_is] a [H.dna.custom_species ? H.dna.custom_species : pref_species.name]!\n" + //uniform if(w_uniform && !(SLOT_W_UNIFORM in obscured)) //accessory diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index ed632c24d5..3731a98a49 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -50,6 +50,8 @@ var/nameless = FALSE //For drones of both the insectoid and robotic kind. And other types of nameless critters. + var/custom_species = null + var/datum/personal_crafting/handcrafting var/datum/physiology/physiology diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 3cdaf71e68..dc35e65c47 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -1,9 +1,14 @@ /mob/living/carbon/human/say_mod(input, message_mode) verb_say = dna.species.say_mod - if(slurring) - return "slurs" - else - . = ..() + switch(slurring) + if(25 to 50) + return "jumbles" + if(50 to 75) + return "slurs" + if(75 to INFINITY) + return "garbles" + else + . = ..() /mob/living/carbon/human/treat_message(message) message = dna.species.handle_speech(message,src) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 48a401802b..6111a92e99 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -532,7 +532,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put stuttering = max(stuttering-1, 0) if(slurring) - slurring = max(slurring-1,0) + slurring = max(slurring-1,0,drunkenness) if(cultslurring) cultslurring = max(cultslurring-1, 0) @@ -550,16 +550,11 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put drunkenness = max(drunkenness - (drunkenness * 0.04), 0) if(drunkenness >= 6) SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "drunk", /datum/mood_event/drunk) - if(prob(25)) - slurring += 2 jitteriness = max(jitteriness - 3, 0) if(has_trait(TRAIT_DRUNK_HEALING)) adjustBruteLoss(-0.12, FALSE) adjustFireLoss(-0.06, FALSE) - if(drunkenness >= 11 && slurring < 5) - slurring += 1.2 - if(mind && (mind.assigned_role == "Scientist" || mind.assigned_role == "Research Director")) if(SSresearch.science_tech) if(drunkenness >= 12.9 && drunkenness <= 13.8) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index a0f619a7d6..871e33349a 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -334,7 +334,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( message = stutter(message) if(slurring) - message = slur(message) + message = slur(message,slurring) if(cultslurring) message = cultslur(message) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index ec858fdff5..a70ca2a8e6 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -345,13 +345,18 @@ /mob/living/simple_animal/hostile/proc/AttackingTarget() in_melee = TRUE - if(isliving(target)) - var/mob/living/L = target - if(L.Adjacent(src) && vore_active && L.devourable) // aggressive check to ensure vore attacks can be made - if(prob(voracious_chance)) - vore_attack(src,L,src) + if(vore_active) + if(isliving(target)) + var/mob/living/L = target + if(L.Adjacent(src) && L.devourable) // aggressive check to ensure vore attacks can be made + if(prob(voracious_chance)) + vore_attack(src,L,src) + else + return L.attack_animal(src) else - return L.attack_animal(src) + return L.attack_animal(src) //literally every single fucking one of these need this I guess. + else + return target.attack_animal(src) else return target.attack_animal(src) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index 23f08ab234..15f2a0a834 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -187,12 +187,12 @@ var/mob/living/carbon/C = L var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT) if(S && S.resistance_flags & GOLIATH_RESISTANCE) - L.Stun(75) + L.Stun(25) else if(S && S.resistance_flags & GOLIATH_WEAKNESS) - L.Stun(125) + L.Stun(115) else - L.Stun(100) - L.adjustBruteLoss(rand(10,15)) + L.Stun(75) + L.adjustBruteLoss(rand(15,20)) // Less stun more harm latched = TRUE if(!latched) retract() diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 7fc4003667..b1c1965751 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -64,7 +64,7 @@ p++ return sanitize(t) -/proc/slur(n) +/proc/slur(n,var/strength=50) var/phrase = html_decode(n) var/leng = lentext(phrase) var/counter=lentext(phrase) @@ -72,7 +72,7 @@ var/newletter="" while(counter>=1) newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2) - if(rand(1,3)==3) + if(rand(1,100)<=strength) if(lowertext(newletter)=="o") newletter="u" if(lowertext(newletter)=="s") @@ -83,17 +83,17 @@ newletter="oo" if(lowertext(newletter)=="c") newletter="k" - if(rand(1,20)==20) + if(rand(1,100) <= strength*0.5) if(newletter==" ") newletter="...huuuhhh..." if(newletter==".") newletter=" *BURP*." - switch(rand(1,20)) - if(1) + if(rand(1,100) <= strength) + if(rand(1,5) == 1) newletter+="'" - if(10) + if(rand(1,5) == 1) newletter+="[newletter]" - if(20) + if(rand(1,5) == 1) newletter+="[newletter][newletter]" newphrase+="[newletter]";counter-=1 return newphrase diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index e43db529b8..9fcdf091a1 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -200,6 +200,10 @@ charge = 0 update_icon() +/obj/item/stock_parts/cell/lascarbine + name = "laser carbine power supply" + maxcharge = 2500 + /obj/item/stock_parts/cell/pulse //200 pulse shots name = "pulse rifle power cell" maxcharge = 40000 diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 83ce525ac8..914f9bc016 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -88,6 +88,9 @@ icon_state = "riotshotgun" mag_type = /obj/item/ammo_box/magazine/internal/shot/riot sawn_desc = "Come with me if you want to live." + unique_reskin = list("Tatical" = "riotshotgun", + "Wood Stock" = "wood_riotshotgun" + ) /obj/item/gun/ballistic/shotgun/riot/attackby(obj/item/A, mob/user, params) ..() @@ -200,6 +203,10 @@ icon_state = "cshotgun" mag_type = /obj/item/ammo_box/magazine/internal/shot/com w_class = WEIGHT_CLASS_HUGE + unique_reskin = list("Tatical" = "cshotgun", + "Slick" = "cshotgun_slick" + ) + /obj/item/gun/ballistic/shotgun/automatic/combat/compact name = "compact combat shotgun" @@ -207,6 +214,10 @@ icon_state = "cshotgunc" mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact w_class = WEIGHT_CLASS_NORMAL + unique_reskin = list("Tatical" = "cshotgunc", + "Slick" = "cshotgunc_slick" + ) + //Dual Feed Shotgun diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 066b652984..cd0dd53d48 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -39,6 +39,21 @@ selfcharge = EGUN_SELFCHARGE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF +/obj/item/gun/energy/laser/carbine + name = "laser carbine" + desc = "A ruggedized laser carbine featuring much higher capacity and improved handling when compared to a normal laser gun." + icon = 'icons/obj/guns/energy.dmi' + icon_state = "lasernew" + item_state = "laser" + force = 10 + throwforce = 10 + ammo_type = list(/obj/item/ammo_casing/energy/lasergun) + cell_type = /obj/item/stock_parts/cell/lascarbine + resistance_flags = FIRE_PROOF | ACID_PROOF + +/obj/item/gun/energy/laser/carbine/nopin + pin = null + /obj/item/gun/energy/laser/captain/scattershot name = "scatter shot laser rifle" icon_state = "lasercannon" diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 6e4d5e5a7d..92d9da401b 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -1277,8 +1277,7 @@ All effects don't start immediately, but rather get worse over time; the rate is if(!M.has_trait(TRAIT_ALCOHOL_TOLERANCE)) M.confused = max(M.confused+2,0) M.Dizzy(10) - if (!M.slurring) - M.slurring = 1 + M.slurring = max(M.slurring,50) M.slurring += 3 switch(current_cycle) if(51 to 200) @@ -1306,8 +1305,7 @@ All effects don't start immediately, but rather get worse over time; the rate is M.dizziness +=1.5 switch(current_cycle) if(15 to 45) - if(!M.slurring) - M.slurring = 1 + M.slurring = max(M.slurring,50) M.slurring += 3 if(45 to 55) if(prob(50)) @@ -1336,8 +1334,7 @@ All effects don't start immediately, but rather get worse over time; the rate is M.dizziness +=2 switch(current_cycle) if(15 to 45) - if(!M.slurring) - M.slurring = 1 + M.slurring = max(M.slurring,50) M.slurring += 3 if(45 to 55) if(prob(50)) @@ -1364,8 +1361,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "A drink enjoyed by people during the 1960's." /datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/carbon/M) - if (!M.slurring) - M.slurring = 1 + M.slurring = max(M.slurring,50) switch(current_cycle) if(1 to 5) M.Dizzy(10) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 52b212f8c5..5071150e24 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -402,8 +402,7 @@ taste_description = "mushroom" /datum/reagent/mushroomhallucinogen/on_mob_life(mob/living/carbon/M) - if(!M.slurring) - M.slurring = 1 + M.slurring = max(M.slurring,50) switch(current_cycle) if(1 to 5) M.Dizzy(5) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 52ab8f98d3..248471cd68 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1912,3 +1912,20 @@ description = "The primary precursor for an ancient feline delicacy known as skooma. While it has no notable effects on it's own, mixing it with morphine in a chilled container may yield interesting results." color = "#FAEAFF" taste_description = "synthetic catnip" + +/datum/reagent/penis_enlargement + name = "Penis Enlargement" + id = "penis_enlargement" + description = "A patented chemical forumula by Doctor Ronald Hyatt that is guaranteed to bring maximum GROWTH and LENGTH to your penis, today!" + color = "#888888" + taste_description = "chinese dragon powder" + metabolization_rate = INFINITY //So it instantly removes all of itself. Don't want to put strain on the system. + +/datum/reagent/penis_enlargement/on_mob_life(mob/living/carbon/C) + var/obj/item/organ/genital/penis/P = C.getorganslot(ORGAN_SLOT_PENIS) + if(P) + var/added_length = round(volume/30,0.01) //Every 30u gives an extra inch. Rounded to the nearest 0.01 so float fuckery doesn't occur with the division by 30. + if(added_length >= 0.20) //Only add the length if it's greater than or equal to 0.2. This is to prevent people from smoking the reagents and causing the penis to update constantly. + P.length += added_length + P.update() + ..() \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 38d47d5185..ed2ca66aae 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -233,3 +233,7 @@ /obj/item/reagent_containers/pill/get_belt_overlay() return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch") + +/obj/item/reagent_containers/pill/penis_enlargement + name = "penis enlargement pill" + list_reagents = list("penis_enlargement" = 30) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 9b42709fe2..03c0582245 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -1,6 +1,10 @@ -///////////////////////////////////////// -/////////////////Weapons///////////////// -///////////////////////////////////////// +/////////////////////////////// +///////Weapons & Ammo////////// +/////////////////////////////// + +////////////// +//Ammo Boxes// +////////////// /datum/design/c38/sec id = "sec_38" @@ -13,6 +17,40 @@ id = "sec_38lethal" build_path = /obj/item/ammo_box/c38/lethal +////////////// +//WT550 Mags// +////////////// + +/datum/design/mag_oldsmg + name = "WT-550 Semi-Auto SMG Magazine (4.6x30mm)" + desc = "A 20 round magazine for the out of date security WT-550 Semi-Auto SMG." + id = "mag_oldsmg" + build_type = PROTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_box/magazine/wt550m9 + category = list("Ammo") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/mag_oldsmg/ap_mag + name = "WT-550 Semi-Auto SMG Armour Piercing Magazine (4.6x30mm AP)" + desc = "A 20 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG." + id = "mag_oldsmg_ap" + materials = list(MAT_METAL = 6000, MAT_SILVER = 600) + build_path = /obj/item/ammo_box/magazine/wt550m9/wtap + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/mag_oldsmg/ic_mag + name = "WT-550 Semi-Auto SMG Incendiary Magazine (4.6x30mm IC)" + desc = "A 20 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG." + id = "mag_oldsmg_ic" + materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_GLASS = 1000) + build_path = /obj/item/ammo_box/magazine/wt550m9/wtic + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +////////////// +//Ammo Shells/ +////////////// + /datum/design/rubbershot/sec id = "sec_rshot" build_type = PROTOLATHE @@ -43,6 +81,40 @@ category = list("Ammo") departmental_flags = DEPARTMENTAL_FLAG_SECURITY +/datum/design/stunshell + name = "Stun Shell" + desc = "A stunning shell for a shotgun." + id = "stunshell" + build_type = PROTOLATHE + materials = list(MAT_METAL = 200) + build_path = /obj/item/ammo_casing/shotgun/stunslug + category = list("Ammo") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/techshell + name = "Unloaded Technological Shotshell" + desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects." + id = "techshotshell" + build_type = PROTOLATHE + materials = list(MAT_METAL = 1000, MAT_GLASS = 200) + build_path = /obj/item/ammo_casing/shotgun/techshell + category = list("Ammo") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/cryostatis_shotgun_dart + name = "Cryostasis Shotgun Dart" + desc = "A shotgun dart designed with similar internals to that of a cryostatis beaker, allowing reagents to not react when inside." + id = "shotgundartcryostatis" + build_type = PROTOLATHE + materials = list(MAT_METAL = 3500) + build_path = /obj/item/ammo_casing/shotgun/dart/noreact + category = list("Ammo") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + +////////////// +//Firing Pins/ +////////////// + /datum/design/pin_testing name = "Test-Range Firing Pin" desc = "This safety firing pin allows firearms to be operated within proximity to a firing range." @@ -63,6 +135,20 @@ category = list("Firing Pins") departmental_flags = DEPARTMENTAL_FLAG_SECURITY +////////////// +//Guns//////// +////////////// + +/datum/design/lasercarbine + name = "Laser Carbine" + desc = "Beefed up version of a standard laser gun." + id = "lasercarbine" + build_type = PROTOLATHE + materials = list(MAT_METAL = 15000, MAT_GLASS = 10000, MAT_GOLD = 2500, MAT_SILVER = 2500) + build_path = /obj/item/gun/energy/laser/carbine/nopin + category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + /datum/design/stunrevolver name = "Tesla Revolver" desc = "A high-tech revolver that fires internal, reusable shock cartridges in a revolving cylinder. The cartridges can be recharged using conventional rechargers." @@ -83,16 +169,6 @@ category = list("Weapons") departmental_flags = DEPARTMENTAL_FLAG_SECURITY -/datum/design/tele_shield - name = "Telescopic Riot Shield" - desc = "An advanced riot shield made of lightweight materials that collapses for easy storage." - id = "tele_shield" - build_type = PROTOLATHE - materials = list(MAT_METAL = 4000, MAT_GLASS = 4000, MAT_SILVER = 300, MAT_TITANIUM = 200) - build_path = /obj/item/shield/riot/tele - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - /datum/design/beamrifle name = "Beam Marksman Rifle" desc = "A powerful long ranged anti-material rifle that fires charged particle beams to obliterate targets." @@ -122,11 +198,11 @@ materials = list(MAT_METAL = 5000, MAT_GLASS = 1000) build_path = /obj/item/gun/syringe/rapidsyringe category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL //uwu + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/temp_gun name = "Temperature Gun" - desc = "A gun that shoots temperature bullet energythings to change temperature."//Change it if you want + desc = "A gun that shoots temperature beam like projectiles to change temperature." id = "temp_gun" build_type = PROTOLATHE materials = list(MAT_METAL = 5000, MAT_GLASS = 500, MAT_SILVER = 3000) @@ -145,46 +221,6 @@ category = list("Weapons") departmental_flags = DEPARTMENTAL_FLAG_SERVICE -/datum/design/large_grenade - name = "Large Grenade" - desc = "A grenade that affects a larger area and use larger containers." - id = "large_Grenade" - build_type = PROTOLATHE - materials = list(MAT_METAL = 3000) - build_path = /obj/item/grenade/chem_grenade/large - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE //Citadel edit added to science - -/datum/design/pyro_grenade - name = "Pyro Grenade" - desc = "An advanced grenade that is able to self ignite its mixture." - id = "pyro_Grenade" - build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_PLASMA = 500) - build_path = /obj/item/grenade/chem_grenade/pyro - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/cryo_grenade - name = "Cryo Grenade" - desc = "An advanced grenade that rapidly cools its contents upon detonation." - id = "cryo_Grenade" - build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 500) - build_path = /obj/item/grenade/chem_grenade/cryo - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/adv_grenade - name = "Advanced Release Grenade" - desc = "An advanced grenade that can be detonated several times, best used with a repeating igniter." - id = "adv_Grenade" - build_type = PROTOLATHE - materials = list(MAT_METAL = 3000, MAT_GLASS = 500) - build_path = /obj/item/grenade/chem_grenade/adv_release - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL - /datum/design/xray name = "X-ray Laser Gun" desc = "Not quite as menacing as it sounds" @@ -215,64 +251,6 @@ category = list("Weapons") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE -//WT550 Mags - -/datum/design/mag_oldsmg - name = "WT-550 Semi-Auto SMG Magazine (4.6x30mm)" - desc = "A 20 round magazine for the out of date security WT-550 Semi-Auto SMG." - id = "mag_oldsmg" - build_type = PROTOLATHE - materials = list(MAT_METAL = 4000) - build_path = /obj/item/ammo_box/magazine/wt550m9 - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/mag_oldsmg/ap_mag - name = "WT-550 Semi-Auto SMG Armour Piercing Magazine (4.6x30mm AP)" - desc = "A 20 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG." - id = "mag_oldsmg_ap" - materials = list(MAT_METAL = 6000, MAT_SILVER = 600) - build_path = /obj/item/ammo_box/magazine/wt550m9/wtap - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/mag_oldsmg/ic_mag - name = "WT-550 Semi-Auto SMG Incendiary Magazine (4.6x30mm IC)" - desc = "A 20 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG." - id = "mag_oldsmg_ic" - materials = list(MAT_METAL = 6000, MAT_SILVER = 600, MAT_GLASS = 1000) - build_path = /obj/item/ammo_box/magazine/wt550m9/wtic - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/stunshell - name = "Stun Shell" - desc = "A stunning shell for a shotgun." - id = "stunshell" - build_type = PROTOLATHE - materials = list(MAT_METAL = 200) - build_path = /obj/item/ammo_casing/shotgun/stunslug - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - -/datum/design/techshell - name = "Unloaded Technological Shotshell" - desc = "A high-tech shotgun shell which can be loaded with materials to produce unique effects." - id = "techshotshell" - build_type = PROTOLATHE - materials = list(MAT_METAL = 1000, MAT_GLASS = 200) - build_path = /obj/item/ammo_casing/shotgun/techshell - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_SCIENCE - -/datum/design/suppressor - name = "Universal Suppressor" - desc = "A reverse-engineered universal suppressor that fits on most small arms with threaded barrels." - id = "suppressor" - build_type = PROTOLATHE - materials = list(MAT_METAL = 2000, MAT_SILVER = 500) - build_path = /obj/item/suppressor - category = list("Weapons") - departmental_flags = DEPARTMENTAL_FLAG_SECURITY - /datum/design/gravitygun name = "One-point Bluespace-gravitational Manipulator" desc = "A multi-mode device that blasts one-point bluespace-gravitational bolts that locally distort gravity." @@ -293,12 +271,70 @@ category = list("Weapons") departmental_flags = DEPARTMENTAL_FLAG_SECURITY -/datum/design/cryostatis_shotgun_dart - name = "Cryostasis Shotgun Dart" - desc = "A shotgun dart designed with similar internals to that of a cryostatis beaker, allowing reagents to not react when inside." - id = "shotgundartcryostatis" +/////////// +//Grenades/ +/////////// + +/datum/design/large_grenade + name = "Large Grenade" + desc = "A grenade that affects a larger area and use larger containers." + id = "large_Grenade" build_type = PROTOLATHE - materials = list(MAT_METAL = 3500) - build_path = /obj/item/ammo_casing/shotgun/dart/noreact - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + materials = list(MAT_METAL = 3000) + build_path = /obj/item/grenade/chem_grenade/large + category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE + +/datum/design/pyro_grenade + name = "Pyro Grenade" + desc = "An advanced grenade that is able to self ignite its mixture." + id = "pyro_Grenade" + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_PLASMA = 500) + build_path = /obj/item/grenade/chem_grenade/pyro + category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL + +/datum/design/cryo_grenade + name = "Cryo Grenade" + desc = "An advanced grenade that rapidly cools its contents upon detonation." + id = "cryo_Grenade" + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 500) + build_path = /obj/item/grenade/chem_grenade/cryo + category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL + +/datum/design/adv_grenade + name = "Advanced Release Grenade" + desc = "An advanced grenade that can be detonated several times, best used with a repeating igniter." + id = "adv_Grenade" + build_type = PROTOLATHE + materials = list(MAT_METAL = 3000, MAT_GLASS = 500) + build_path = /obj/item/grenade/chem_grenade/adv_release + category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL + +////////// +//MISC//// +////////// + +/datum/design/tele_shield + name = "Telescopic Riot Shield" + desc = "An advanced riot shield made of lightweight materials that collapses for easy storage." + id = "tele_shield" + build_type = PROTOLATHE + materials = list(MAT_METAL = 4000, MAT_GLASS = 4000, MAT_SILVER = 300, MAT_TITANIUM = 200) + build_path = /obj/item/shield/riot/tele + category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/suppressor + name = "Universal Suppressor" + desc = "A reverse-engineered universal suppressor that fits on most small arms with threaded barrels." + id = "suppressor" + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_SILVER = 500) + build_path = /obj/item/suppressor + category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 4d631691d0..99ee820ff6 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -564,7 +564,7 @@ display_name = "Weapon Development Technology" description = "Our researchers have found new to weaponize just about everything now." prereq_ids = list("engineering") - design_ids = list("pin_testing", "tele_shield") + design_ids = list("pin_testing", "tele_shield", "lasercarbine") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) export_price = 5000 @@ -963,7 +963,7 @@ prereq_ids = list("biotech","engineering") boost_item_paths = list(/obj/item/gun/energy/alien, /obj/item/scalpel/alien, /obj/item/hemostat/alien, /obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/cautery/alien, /obj/item/surgicaldrill/alien, /obj/item/screwdriver/abductor, /obj/item/wrench/abductor, /obj/item/crowbar/abductor, /obj/item/multitool/abductor, - /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor) + /obj/item/weldingtool/abductor, /obj/item/wirecutters/abductor, /obj/item/circuitboard/machine/abductor, /obj/item/abductor_baton, /obj/item/abductor, /obj/item/stack/sheet/mineral/abductor) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) export_price = 20000 hidden = TRUE diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/drinnerware.dm index 151da9bc2f..33e839c039 100644 --- a/code/modules/vending/drinnerware.dm +++ b/code/modules/vending/drinnerware.dm @@ -13,7 +13,7 @@ /obj/item/reagent_containers/food/condiment/pack/hotsauce = 5, /obj/item/reagent_containers/food/condiment/saltshaker = 5, /obj/item/reagent_containers/food/condiment/peppermill = 5, - /obj/item/reagent_containers/glass/bowl = 20) + /obj/item/reagent_containers/glass/bowl = 30) contraband = list(/obj/item/kitchen/rollingpin = 2, /obj/item/kitchen/knife/butcher = 2) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) diff --git a/html/changelogs/AutoChangeLog-pr-8182.yml b/html/changelogs/AutoChangeLog-pr-8182.yml new file mode 100644 index 0000000000..8247409f1b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8182.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - code_imp: "get_hearers_in_view() now actually caches the results of view() instead of calling view() twice" diff --git a/html/changelogs/AutoChangeLog-pr-8247.yml b/html/changelogs/AutoChangeLog-pr-8247.yml new file mode 100644 index 0000000000..1ab08ece4d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8247.yml @@ -0,0 +1,5 @@ +author: "Poojawa" +delete-after: True +changes: + - rscadd: "Added custom species names! Examining people will now display their species name unless they're an Unknown or have their face hidden. like flavor text. Set it in your character window!" + - code_imp: "changed how health scanners print messages, wrapping it in msg for one to_chat instead of printing every line to_chat." diff --git a/html/changelogs/AutoChangeLog-pr-8252.yml b/html/changelogs/AutoChangeLog-pr-8252.yml new file mode 100644 index 0000000000..c86d0b5aa0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8252.yml @@ -0,0 +1,6 @@ +author: "BurgerBB" +delete-after: True +changes: + - rscadd: "Adds the bonermeter; a device that measures arousal based statistics." + - refactor: "Added a new input to the electrostimulator that controls the strength of the shock. It accepts negative inputs which reduce arousal. Added a new output to the electrostimulator that displays the amount of arousal gained." + - balance: "Rebalanced the electro-stimulator to be less spammy by giving it a 2.5 second enforced cooldown per circuit contraption. Increased the complexity of electro stimulator from 10 to 15." diff --git a/html/changelogs/AutoChangeLog-pr-8255.yml b/html/changelogs/AutoChangeLog-pr-8255.yml new file mode 100644 index 0000000000..1b2e81f5bd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8255.yml @@ -0,0 +1,4 @@ +author: "BurgerB" +delete-after: True +changes: + - tweak: "Tweaked the UI of the loadout to be less cluttered due to an issue with formatting." diff --git a/html/changelogs/AutoChangeLog-pr-8258.yml b/html/changelogs/AutoChangeLog-pr-8258.yml new file mode 100644 index 0000000000..2d1f75603f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8258.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - refactor: "Reworked the Vent Clog event to spray smoke instead of foam, also made it shoot smoke over time instead through each vent instead of all at once." diff --git a/html/changelogs/AutoChangeLog-pr-8259.yml b/html/changelogs/AutoChangeLog-pr-8259.yml new file mode 100644 index 0000000000..54a1dd6a4b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8259.yml @@ -0,0 +1,5 @@ +author: "deathride58" +delete-after: True +changes: + - balance: "Locomotion circuits are now restricted to jogging speed" + - balance: "MMI circuits and pAI circuits both now have 60 complexity, up from their original 29." diff --git a/html/changelogs/AutoChangeLog-pr-8260.yml b/html/changelogs/AutoChangeLog-pr-8260.yml new file mode 100644 index 0000000000..e6ef697917 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8260.yml @@ -0,0 +1,5 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "cakes!" + - imageadd: "Made some sprites! -Love them really came out well" diff --git a/html/changelogs/AutoChangeLog-pr-8261.yml b/html/changelogs/AutoChangeLog-pr-8261.yml new file mode 100644 index 0000000000..e7624aec73 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8261.yml @@ -0,0 +1,7 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "new economics" + - tweak: "cargo and robotics relationships" + - balance: "unbalanced something" + - bugfix: "fixed a maybe oversight" diff --git a/html/changelogs/AutoChangeLog-pr-8264.yml b/html/changelogs/AutoChangeLog-pr-8264.yml new file mode 100644 index 0000000000..15e525c581 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8264.yml @@ -0,0 +1,7 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscdel: "Fun" + - tweak: "costs of suit voucher" + - balance: "Unblances miner vender" + - bugfix: "spare cheaper brute kit" diff --git a/html/changelogs/AutoChangeLog-pr-8265.yml b/html/changelogs/AutoChangeLog-pr-8265.yml new file mode 100644 index 0000000000..e581a93315 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8265.yml @@ -0,0 +1,5 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "harm from hentie" + - balance: "rebalanced goliaths stun to be less auto death" diff --git a/html/changelogs/AutoChangeLog-pr-8274.yml b/html/changelogs/AutoChangeLog-pr-8274.yml new file mode 100644 index 0000000000..41b2de1d9e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8274.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - tweak: "Increased the spawn area of the City of Cogs (Reebe). This does not affect the area in which builders can build." diff --git a/html/changelogs/AutoChangeLog-pr-8277.yml b/html/changelogs/AutoChangeLog-pr-8277.yml new file mode 100644 index 0000000000..2a663ea2a4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8277.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - balance: "Significantly tweaks the Wizard race transformation event to be less unreasonably troublesome." diff --git a/html/changelogs/AutoChangeLog-pr-8279.yml b/html/changelogs/AutoChangeLog-pr-8279.yml new file mode 100644 index 0000000000..7ed141640a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8279.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - bugfix: "restores the deathriplys missing armor" diff --git a/html/changelogs/AutoChangeLog-pr-8283.yml b/html/changelogs/AutoChangeLog-pr-8283.yml new file mode 100644 index 0000000000..7a614e2e82 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8283.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - rscadd: "Adds a new 0 cost trait that makes you immune* to Crocin and Hexacrocin" diff --git a/html/changelogs/AutoChangeLog-pr-8286.yml b/html/changelogs/AutoChangeLog-pr-8286.yml new file mode 100644 index 0000000000..d59a8dad66 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8286.yml @@ -0,0 +1,5 @@ +author: "BurgerBB" +delete-after: True +changes: + - tweak: "Tweaks how slurring works so it's more of a gradual change into slurring instead of immediate." + - balance: "Slurring is now directly proportional to your drunkenness, with other sources of slur being added on top of it." diff --git a/html/changelogs/AutoChangeLog-pr-8287.yml b/html/changelogs/AutoChangeLog-pr-8287.yml new file mode 100644 index 0000000000..aafba03474 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8287.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "new lockable colalr" diff --git a/html/changelogs/AutoChangeLog-pr-8288.yml b/html/changelogs/AutoChangeLog-pr-8288.yml new file mode 100644 index 0000000000..6b3fbadbd8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8288.yml @@ -0,0 +1,7 @@ +author: "BurgerBB" +delete-after: True +changes: + - tweak: "Bras are now separate from underwear, meaning you can mix and match bras if you're into that." + - tweak: "Men can wear female accessory clothing, and females can wear men accessory clothing. It's not a fetish, mom, it's PROGRESSIVE." + - code_imp: "Reorganized accessories into their own files to prevent a massive 1000 line file." + - server: "i'm 10% sure that merging this PR will cause preference corruption sooooooooooo I just need to hear from @deathride58 or perhaps someone else on how much damage this could possibly do." diff --git a/html/changelogs/AutoChangeLog-pr-8289.yml b/html/changelogs/AutoChangeLog-pr-8289.yml new file mode 100644 index 0000000000..d389d95cd6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8289.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - tweak: "armor" diff --git a/html/changelogs/AutoChangeLog-pr-8290.yml b/html/changelogs/AutoChangeLog-pr-8290.yml new file mode 100644 index 0000000000..553bfbf4f9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8290.yml @@ -0,0 +1,5 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - bugfix: "missing hopes and dreams" + - code_imp: "orgized the weapon file to be more cat brain friendly" diff --git a/html/changelogs/AutoChangeLog-pr-8294.yml b/html/changelogs/AutoChangeLog-pr-8294.yml new file mode 100644 index 0000000000..bce0031c2b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8294.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - imageadd: "This means sprite right?" diff --git a/html/changelogs/AutoChangeLog-pr-8301.yml b/html/changelogs/AutoChangeLog-pr-8301.yml new file mode 100644 index 0000000000..90e893bdf2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8301.yml @@ -0,0 +1,5 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "mag gun uses cells" + - balance: "kev things their to op" diff --git a/html/changelogs/AutoChangeLog-pr-8302.yml b/html/changelogs/AutoChangeLog-pr-8302.yml new file mode 100644 index 0000000000..e2b535c40f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8302.yml @@ -0,0 +1,5 @@ +author: "BurgerBB" +delete-after: True +changes: + - tweak: "Tweaked penis." + - balance: "Rebalanced penis." diff --git a/html/changelogs/AutoChangeLog-pr-8315.yml b/html/changelogs/AutoChangeLog-pr-8315.yml new file mode 100644 index 0000000000..5d0b85e162 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8315.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - bugfix: "laser carbine" diff --git a/html/changelogs/AutoChangeLog-pr-8317.yml b/html/changelogs/AutoChangeLog-pr-8317.yml new file mode 100644 index 0000000000..0fd31c3c52 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8317.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - tweak: "Biogenerators now have a sane limit for production" diff --git a/html/changelogs/AutoChangeLog-pr-8319.yml b/html/changelogs/AutoChangeLog-pr-8319.yml new file mode 100644 index 0000000000..e46b83c121 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8319.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - rscadd: "Adds penis enlargement pills." diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index 385cd21516..0b63685668 100644 Binary files a/icons/mob/underwear.dmi and b/icons/mob/underwear.dmi differ diff --git a/icons/mob/underwear_old.dmi b/icons/mob/underwear_old.dmi new file mode 100644 index 0000000000..5e16a473ba Binary files /dev/null and b/icons/mob/underwear_old.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index e3ec4171ad..4dec451008 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 0ee0e3d2d1..e4a39903b3 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/modular_citadel/code/game/machinery/vending.dm b/modular_citadel/code/game/machinery/vending.dm index 213dd8a17a..bdca91b0e6 100755 --- a/modular_citadel/code/game/machinery/vending.dm +++ b/modular_citadel/code/game/machinery/vending.dm @@ -54,8 +54,11 @@ /obj/item/clothing/neck/petcollar = 5, /obj/item/clothing/under/mankini = 1, /obj/item/dildo/flared/huge = 1 - ) - premium = list(/obj/item/electropack/shockcollar = 3) + ) + premium = list( + /obj/item/electropack/shockcollar = 3, + /obj/item/clothing/neck/petcollar/locked = 1 + ) refill_canister = /obj/item/vending_refill/kink /* /obj/machinery/vending/nazivend diff --git a/modular_citadel/code/modules/arousal/organs/penis.dm b/modular_citadel/code/modules/arousal/organs/penis.dm index 38e8e44f39..f6b9f1d999 100644 --- a/modular_citadel/code/modules/arousal/organs/penis.dm +++ b/modular_citadel/code/modules/arousal/organs/penis.dm @@ -4,7 +4,7 @@ icon_state = "penis" icon = 'modular_citadel/icons/obj/genitals/penis.dmi' zone = "groin" - slot = "penis" + slot = ORGAN_SLOT_PENIS w_class = 3 can_masturbate_with = TRUE masturbation_verb = "stroke" @@ -40,7 +40,8 @@ var/string = "penis_[GLOB.cock_shapes_icons[shape]]_[size]" icon_state = sanitize_text(string) var/lowershape = lowertext(shape) - desc = "You see a [lowershape] penis. You estimate it's about [round(length, 0.25)] inch[length > 1 ? "es" : ""] long." + desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] penis. You estimate it's about [round(length, 0.25)] inch[round(length, 0.25) != 1 ? "es" : ""] long and [round(girth, 0.25)] inch[round(girth, 0.25) != 1 ? "es" : ""] in girth." + if(owner) if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"]) if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow... diff --git a/modular_citadel/code/modules/integrated_electronics/subtypes/manipulation.dm b/modular_citadel/code/modules/integrated_electronics/subtypes/manipulation.dm index 79d229c757..246205f7b6 100644 --- a/modular_citadel/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/modular_citadel/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -1,33 +1,54 @@ /obj/item/integrated_circuit/manipulation/electric_stimulator name = "electronic stimulation module" - desc = "Used to induce sexual stimulation with electricity." + desc = "Used to induce sexual stimulation in a target via electricity." icon_state = "power_relay" - extended_desc = "The circuit accepts a reference to a person and upon activation, attempts to stimulate them to orgasm." - complexity = 10 - size = 3 - inputs = list("target" = IC_PINTYPE_REF) - outputs = list() - activators = list("fire" = IC_PINTYPE_PULSE_IN) + extended_desc = "The circuit accepts a reference to a person, as well as a number representing the strength of the shock, and upon activation, attempts to stimulate them to orgasm. The number ranges from -35 to 35, with negative numbers reducing arousal and positive numbers increasing it by that amount." + complexity = 15 + size = 2 + inputs = list("target" = IC_PINTYPE_REF, "strength" = IC_PINTYPE_NUMBER) + outputs = list("arousal gain"=IC_PINTYPE_NUMBER) + activators = list("fire" = IC_PINTYPE_PULSE_IN, "on success" = IC_PINTYPE_PULSE_OUT, "on fail" = IC_PINTYPE_PULSE_OUT, "on orgasm" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_RESEARCH power_draw_per_use = 500 cooldown_per_use = 50 + ext_cooldown = 25 /obj/item/integrated_circuit/manipulation/electric_stimulator/do_work() ..() + set_pin_data(IC_OUTPUT, 1, 0) var/mob/living/M = get_pin_data_as_type(IC_INPUT, 1, /mob/living) if(!check_target(M)) return - if(ismob(M) && M.canbearoused) - if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna()) - var/mob/living/carbon/human/H = M - var/orgasm_message = pick("A sharp pulse of electricity pushes you to orgasm!", "You feel a jolt of electricity force you into orgasm!") - H.visible_message("\The [assembly] electrodes shock [H]!", "[orgasm_message]") - playsound(src, "sound/effects/light_flicker.ogg", 30, 1) - H.mob_climax(forced_climax=TRUE) + + var/arousal_gain = CLAMP(get_pin_data(IC_INPUT, 2),-35,35) + set_pin_data(IC_OUTPUT, 1, arousal_gain) + + if(ismob(M) && M.canbearoused && arousal_gain != 0) + var/orgasm = FALSE + if(arousal_gain > 0) + if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna()) + var/mob/living/carbon/human/H = M + var/orgasm_message = pick("A sharp pulse of electricity pushes you to orgasm!", "You feel a jolt of electricity force you into orgasm!") + H.visible_message("\The [assembly] electrodes shock [H]!", "[orgasm_message]") + playsound(src, "sound/effects/light_flicker.ogg", 30, 1) + H.mob_climax(forced_climax=TRUE) + orgasm = TRUE + else + M.adjustArousalLoss(arousal_gain) + var/stimulate_message = pick("You feel a sharp warming tingle of electricity through your body!", "A burst of arousing electricity flows through your body!") + M.visible_message("\The [assembly] electrodes shock [M]!", "[stimulate_message]") + else - M.adjustArousalLoss(35) - var/stimulate_message = pick("You feel a sharp warming tingle of electricity through your body!", "A burst of arousing electricity flows through your body!") + var/stimulate_message = pick("You feel a dull prickle of electricity through your body!", "A burst of dull electricity flows through your body!") M.visible_message("\The [assembly] electrodes shock [M]!", "[stimulate_message]") - playsound(src, "sound/effects/light_flicker.ogg", 30, 1) + M.adjustArousalLoss(arousal_gain) + + playsound(src, "sound/effects/light_flicker.ogg", 30, 1) + push_data() + activate_pin(2) + if(orgasm) activate_pin(4) + else visible_message("\The [assembly] electrodes fail to shock [M]!") + push_data() + activate_pin(3) diff --git a/modular_citadel/code/modules/mentor/mentorpm.dm b/modular_citadel/code/modules/mentor/mentorpm.dm index 4184a4abef..34ace6f002 100644 --- a/modular_citadel/code/modules/mentor/mentorpm.dm +++ b/modular_citadel/code/modules/mentor/mentorpm.dm @@ -70,16 +70,16 @@ else //recipient is an mentor but sender is not to_chat(C, "Reply PM from-[key_name_mentor(src, C, 1, 0, show_char)]: [msg]") - to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]") + to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]") else if(is_mentor()) //sender is an mentor but recipient is not. to_chat(C, "Mentor PM from-[key_name_mentor(src, C, 1, 0, 0)]: [msg]") - to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, show_char)]: [msg]") + to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, show_char)]: [msg]") //we don't use message_Mentors here because the sender/receiver might get it too var/show_char_sender = !is_mentor() && CONFIG_GET(flag/mentors_mobname_only) var/show_char_recip = !C.is_mentor() && CONFIG_GET(flag/mentors_mobname_only) for(var/client/X in GLOB.mentors | GLOB.admins) if(X.key!=key && X.key!=C.key) //check client/X is an Mentor and isn't the sender or recipient - to_chat(X, "Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]: [msg]") //inform X \ No newline at end of file + to_chat(X, "Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]: [msg]") //inform X diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon.dm index 017a9dd52d..b3af722332 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon.dm @@ -55,7 +55,7 @@ /obj/item/projectile/bullet/nlmags //non-lethal boolets icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "magjectile-nl" - damage = 0 + damage = 2 knockdown = 0 stamina = 25 armour_penetration = -10 @@ -123,7 +123,7 @@ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" ///research memes/// - +/* /obj/item/gun/ballistic/automatic/pistol/mag/nopin pin = null spawnwithmagazine = FALSE @@ -155,7 +155,7 @@ materials = list(MAT_METAL = 3000, MAT_SILVER = 250, MAT_TITANIUM = 250) build_path = /obj/item/ammo_box/magazine/mmag/small departmental_flags = DEPARTMENTAL_FLAG_SECURITY - +*/ //////toy memes///// /obj/item/projectile/bullet/reusable/foam_dart/mag @@ -210,7 +210,7 @@ /obj/item/projectile/bullet/nlmagrifle //non-lethal boolets icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "magjectile-large-nl" - damage = 0 + damage = 2 knockdown = 0 stamina = 25 armour_penetration = -10 @@ -271,7 +271,8 @@ recoil = 0.15 casing_ejector = 0 -///research/// +/* +//research/// /obj/item/gun/ballistic/automatic/magrifle/nopin pin = null @@ -304,7 +305,7 @@ materials = list(MAT_METAL = 6000, MAT_SILVER = 500, MAT_TITANIUM = 500) build_path = /obj/item/ammo_box/magazine/mmag departmental_flags = DEPARTMENTAL_FLAG_SECURITY - +*/ ///foamagrifle/// /obj/item/ammo_box/magazine/toy/foamag @@ -326,10 +327,9 @@ spread = 60 w_class = WEIGHT_CLASS_BULKY weapon_weight = WEAPON_HEAVY - /* // TECHWEBS IMPLEMENTATION -*/ +// /datum/techweb_node/magnetic_weapons id = "magnetic_weapons" @@ -339,7 +339,7 @@ design_ids = list("magrifle", "magpisol", "mag_magrifle", "mag_magrifle_nl", "mag_magpistol", "mag_magpistol_nl") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 - +*/ //////Hyper-Burst Rifle////// diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm new file mode 100644 index 0000000000..90dd577c4b --- /dev/null +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm @@ -0,0 +1,279 @@ +///ammo/// + +/obj/item/ammo_casing/caseless/mag_e + var/energy_cost = 0 + +/obj/item/ammo_casing/caseless/mag_e/amagm_e + desc = "A large ferromagnetic slug intended to be launched out of a compatible weapon." + caliber = "mag_e" + icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' + icon_state = "mag-casing-live" + projectile_type = /obj/item/projectile/bullet/magrifle + energy_cost = 300 + +/obj/item/ammo_casing/caseless/mag_e/anlmagm_e + desc = "A large, specialized ferromagnetic slug designed with a less-than-lethal payload." + caliber = "mag_e" + icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' + icon_state = "mag-casing-live" + projectile_type = /obj/item/projectile/bullet/nlmagrifle + energy_cost = 300 + +/obj/item/ammo_casing/caseless/mag_e/amags + desc = "A ferromagnetic slug intended to be launched out of a compatible weapon." + caliber = "mag_e" + icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' + icon_state = "mag-casing-live" + projectile_type = /obj/item/projectile/bullet/mags + energy_cost = 200 + +/obj/item/ammo_casing/caseless/mag_e/anlmags + desc = "A specialized ferromagnetic slug designed with a less-than-lethal payload." + caliber = "mag_e" + icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' + icon_state = "mag-casing-live" + projectile_type = /obj/item/projectile/bullet/nlmags + energy_cost = 200 + +///magazines/// + +/obj/item/ammo_box/magazine/mmag_e/ + name = "magrifle magazine (non-lethal disabler)" + icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' + icon_state = "mediummagmag" + ammo_type = /obj/item/ammo_casing/caseless/mag_e/anlmagm_e + caliber = "mag_e" + max_ammo = 24 + multiple_sprites = 2 + +/obj/item/ammo_box/magazine/mmag_e/lethal + name = "magrifle magazine (lethal)" + icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' + icon_state = "mediummagmag" + ammo_type = /obj/item/ammo_casing/caseless/mag_e/amagm_e + max_ammo = 24 + + +/obj/item/ammo_box/magazine/mmag_e/small + name = "magpistol magazine (non-lethal disabler)" + icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' + icon_state = "nlmagmag" + ammo_type = /obj/item/ammo_casing/caseless/mag_e/anlmags + caliber = "mag_e" + max_ammo = 15 + multiple_sprites = 2 + +/obj/item/ammo_box/magazine/mmag_e/small/lethal + name = "magpistol magazine (lethal)" + icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' + icon_state = "smallmagmag" + ammo_type = /obj/item/ammo_casing/caseless/mag_e/amags + +///cells/// + +/obj/item/stock_parts/cell/magrifle_e + name = "magrifle power supply" + maxcharge = 14400 + +/obj/item/stock_parts/cell/magpistol_e + name = "magpistol power supply" + maxcharge = 6000 + +///sci designs/// + +/datum/design/magrifle_e + name = "Magrifle" + desc = "An upscaled Magpistol in rifle form." + id = "magrifle_e" + build_type = PROTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_URANIUM = 2000, MAT_TITANIUM = 10000, MAT_SILVER = 4000, MAT_GOLD = 2000) + build_path = /obj/item/gun/ballistic/automatic/magrifle_e/nopin + category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/mag_magrifle_e + name = "Magrifle Magazine (Lethal)" + desc = "A 24-round magazine for the Magrifle." + id = "mag_magrifle_e" + build_type = PROTOLATHE + materials = list(MAT_METAL = 8000, MAT_SILVER = 1000) + build_path = /obj/item/ammo_box/magazine/mmag_e/lethal + category = list("Ammo") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/mag_magrifle_e/nl + name = "Magrifle Magazine (Non-Lethal)" + desc = "A 24- round non-lethal magazine for the Magrifle." + id = "mag_magrifle_e_nl" + materials = list(MAT_METAL = 6000, MAT_SILVER = 500, MAT_TITANIUM = 500) + build_path = /obj/item/ammo_box/magazine/mmag_e + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/magpistol_e + name = "Magpistol" + desc = "A weapon which fires ferromagnetic slugs." + id = "magpistol_e" + build_type = PROTOLATHE + materials = list(MAT_METAL = 7500, MAT_GLASS = 1000, MAT_URANIUM = 1000, MAT_TITANIUM = 5000, MAT_SILVER = 2000) + build_path = /obj/item/gun/ballistic/automatic/pistol/mag_e/nopin + category = list("Weapons") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/mag_magpistol_e + name = "Magpistol Magazine" + desc = "A 14 round magazine for the Magpistol." + id = "mag_magpistol_e" + build_type = PROTOLATHE + materials = list(MAT_METAL = 4000, MAT_SILVER = 500) + build_path = /obj/item/ammo_box/magazine/mmag_e/small/lethal + category = list("Ammo") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/mag_magpistol_e/nl + name = "Magpistol Magazine (Non-Lethal)" + desc = "A 14 round non-lethal magazine for the Magpistol." + id = "mag_magpistol_e_nl" + materials = list(MAT_METAL = 3000, MAT_SILVER = 250, MAT_TITANIUM = 250) + build_path = /obj/item/ammo_box/magazine/mmag_e/small + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/* +// TECHWEBS IMPLEMENTATION +*/ + +/datum/techweb_node/magnetic_weapons + id = "magnetic_weapons" + display_name = "Magnetic Weapons" + description = "Weapons using magnetic technology" + prereq_ids = list("weaponry", "adv_weaponry", "emp_adv") + design_ids = list("magrifle_e", "magpistol_e", "mag_magrifle_e", "mag_magrifle_e_nl", "mag_magpistol_e", "mag_magpistol_e_nl") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) + export_price = 5000 + +///magrifle/// + +/obj/item/gun/ballistic/automatic/magrifle_e + name = "\improper Magnetic Rifle" + desc = "A simple upscalling of the technologies used in the magpistol, the magrifle is capable of firing slightly larger slugs in bursts. Compatible with the magpistol's slugs." + icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' + icon_state = "magrifle" + item_state = "arg" + slot_flags = 0 + mag_type = /obj/item/ammo_box/magazine/mmag_e + fire_sound = 'sound/weapons/magrifle.ogg' + can_suppress = 0 + burst_size = 3 + fire_delay = 2 + spread = 5 + recoil = 0.15 + casing_ejector = 0 + var/obj/item/stock_parts/cell/cell + var/cell_type = /obj/item/stock_parts/cell/magrifle_e + var/dead_cell = FALSE + + +/obj/item/gun/ballistic/automatic/magrifle_e/can_shoot() + if(QDELETED(cell)) + return 0 + + var/obj/item/ammo_casing/caseless/mag_e/shot = chambered + if(!shot) + return 0 + if(cell.charge < shot.energy_cost*burst_size) + return 0 + . = ..() + +/obj/item/gun/ballistic/automatic/magrifle_e/shoot_live_shot() + var/obj/item/ammo_casing/caseless/mag_e/shot = chambered + cell.use(shot.energy_cost) + . = ..() + +/obj/item/gun/ballistic/automatic/magrifle_e/emp_act(severity) + . = ..() + if(!(. & EMP_PROTECT_CONTENTS)) + cell.use(round(cell.charge / severity)) + +/obj/item/gun/ballistic/automatic/magrifle_e/get_cell() + return cell + +/obj/item/gun/ballistic/automatic/magrifle_e/Initialize() + . = ..() + if(cell_type) + cell = new cell_type(src) + else + cell = new(src) + + if(!dead_cell) + cell.give(cell.maxcharge) + +/obj/item/gun/ballistic/automatic/magrifle_e/nopin + pin = null + spawnwithmagazine = FALSE + + +///magpistol/// + +/obj/item/gun/ballistic/automatic/pistol/mag_e + name = "magpistol" + desc = "A handgun utilizing maglev technologies to propel a ferromagnetic slug to extreme velocities." + icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' + icon_state = "magpistol" + force = 10 + fire_sound = 'sound/weapons/magpistol.ogg' + mag_type = /obj/item/ammo_box/magazine/mmag_e/small + can_suppress = 0 + casing_ejector = 0 + fire_delay = 2 + recoil = 0.2 + var/obj/item/stock_parts/cell/cell + var/cell_type = /obj/item/stock_parts/cell/magpistol_e + var/dead_cell = FALSE + +/obj/item/gun/ballistic/automatic/pistol/mag_e/can_shoot() + if(QDELETED(cell)) + return 0 + + var/obj/item/ammo_casing/caseless/mag_e/shot = chambered + if(!shot) + return 0 + if(cell.charge < shot.energy_cost) + return 0 + . = ..() + +/obj/item/gun/ballistic/automatic/pistol/mag_e/shoot_live_shot() + var/obj/item/ammo_casing/caseless/mag_e/shot = chambered + cell.use(shot.energy_cost) + . = ..() + +/obj/item/gun/ballistic/automatic/pistol/mag_e/emp_act(severity) + . = ..() + if(!(. & EMP_PROTECT_CONTENTS)) + cell.use(round(cell.charge / severity)) + +/obj/item/gun/ballistic/automatic/pistol/mag_e/get_cell() + return cell + +/obj/item/gun/ballistic/automatic/pistol/mag_e/Initialize() + . = ..() + if(cell_type) + cell = new cell_type(src) + else + cell = new(src) + + if(!dead_cell) + cell.give(cell.maxcharge) + + +/obj/item/gun/ballistic/automatic/pistol/mag_e/update_icon() + ..() + if(magazine) + cut_overlays() + add_overlay("magpistol-magazine") + else + cut_overlays() + icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" + + +/obj/item/gun/ballistic/automatic/pistol/mag_e/nopin + pin = null + spawnwithmagazine = FALSE diff --git a/modular_citadel/code/modules/projectiles/guns/energy/laser.dm b/modular_citadel/code/modules/projectiles/guns/energy/laser.dm index 61996a777a..c82a3e9ed9 100644 --- a/modular_citadel/code/modules/projectiles/guns/energy/laser.dm +++ b/modular_citadel/code/modules/projectiles/guns/energy/laser.dm @@ -17,30 +17,3 @@ /obj/item/gun/energy/laser/redtag lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - -/obj/item/gun/energy/laser/carbine - name = "VGS blaster carbine" - desc = "A ruggedized laser carbine featuring much higher capacity and improved handling when compared to a normal blaster carbine." - icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' - icon_state = "lasernew" - item_state = "laser" - force = 10 - throwforce = 10 - ammo_type = list(/obj/item/ammo_casing/energy/lasergun) - cell_type = /obj/item/stock_parts/cell/lascarbine - -/obj/item/gun/energy/laser/carbine/nopin - pin = null - -/obj/item/stock_parts/cell/lascarbine - name = "laser carbine power supply" - maxcharge = 2500 - -/datum/design/lasercarbine - name = "VGS Blaster Carbine" - desc = "Beefed up version of a normal blaster carbine." - id = "lasercarbine" - build_type = PROTOLATHE - materials = list(MAT_GOLD = 2500, MAT_METAL = 5000, MAT_GLASS = 5000) - build_path = /obj/item/gun/energy/laser/carbine/nopin - category = list("Weapons") \ No newline at end of file diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm index 71f390396c..1c857bf8a6 100644 --- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm +++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm @@ -97,7 +97,7 @@ color = "#FFADFF"//PINK, rgb(255, 173, 255) /datum/reagent/drug/aphrodisiac/on_mob_life(mob/living/M) - if(M && M.canbearoused) + if(M && M.canbearoused && !M.has_trait(TRAIT_CROCRIN_IMMUNE)) if(prob(33)) M.adjustArousalLoss(2) if(prob(5)) @@ -119,7 +119,7 @@ overdose_threshold = 20 /datum/reagent/drug/aphrodisiacplus/on_mob_life(mob/living/M) - if(M && M.canbearoused) + if(M && M.canbearoused && !M.has_trait(TRAIT_CROCRIN_IMMUNE)) if(prob(33)) M.adjustArousalLoss(6)//not quite six times as powerful, but still considerably more powerful. if(prob(5)) @@ -151,7 +151,7 @@ ..() /datum/reagent/drug/aphrodisiacplus/overdose_process(mob/living/M) - if(M && M.canbearoused && prob(33)) + if(M && M.canbearoused && !M.has_trait(TRAIT_CROCRIN_IMMUNE) && prob(33)) if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna()) var/mob/living/carbon/human/H = M if(prob(50)) //Less spam diff --git a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm index e931f37520..22085d520c 100644 --- a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm +++ b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm @@ -232,10 +232,11 @@ M.forceMove(drop_location()) // Move the belly contents into the same location as belly's owner. items_preserved -= M - for(var/mob/H in get_hearers_in_view(2, get_turf(owner))) - if(H.client && (H.client.prefs.cit_toggles & EATING_NOISES)) - var/sound/releasement = GLOB.release_sounds[release_sound] - playsound(get_turf(owner),releasement,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED) + if(!silent) + for(var/mob/H in get_hearers_in_view(2, get_turf(owner))) + if(H.client && (H.client.prefs.cit_toggles & EATING_NOISES)) + var/sound/releasement = GLOB.release_sounds[release_sound] + playsound(get_turf(owner),releasement,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED) if(istype(M,/mob/living)) var/mob/living/ML = M diff --git a/modular_citadel/code/modules/vore/eating/living_vr.dm b/modular_citadel/code/modules/vore/eating/living_vr.dm index b1d2a46ff2..a8a77895c8 100644 --- a/modular_citadel/code/modules/vore/eating/living_vr.dm +++ b/modular_citadel/code/modules/vore/eating/living_vr.dm @@ -289,8 +289,7 @@ if(!confirm == "Okay" || loc != B) return //Actual escaping - forceMove(get_turf(src)) //Just move me up to the turf, let's not cascade through bellies, there's been a problem, let's just leave. - src.cure_blind("belly_[REF(src)]") + B.release_specific_contents(src,TRUE) //we might as well take advantage of that specific belly's handling. Else we stay blinded forever. src.stop_sound_channel(CHANNEL_PREYLOOP) SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "fedprey", /datum/mood_event/fedprey) for(var/mob/living/simple_animal/SA in range(10)) diff --git a/modular_citadel/icons/mob/muzzled_helmet.dmi b/modular_citadel/icons/mob/muzzled_helmet.dmi index 3c0a229d58..36313cce66 100644 Binary files a/modular_citadel/icons/mob/muzzled_helmet.dmi and b/modular_citadel/icons/mob/muzzled_helmet.dmi differ diff --git a/modular_citadel/icons/obj/food/cake.dmi b/modular_citadel/icons/obj/food/cake.dmi new file mode 100644 index 0000000000..840bfe714d Binary files /dev/null and b/modular_citadel/icons/obj/food/cake.dmi differ diff --git a/modular_citadel/icons/obj/food/food.dmi b/modular_citadel/icons/obj/food/food.dmi index ea66b3d48a..da9a6c365f 100644 Binary files a/modular_citadel/icons/obj/food/food.dmi and b/modular_citadel/icons/obj/food/food.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 5b4c4eabe5..9e9c6fe593 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1628,6 +1628,7 @@ #include "code\modules\food_and_drinks\food\snacks_sandwichtoast.dm" #include "code\modules\food_and_drinks\food\snacks_soup.dm" #include "code\modules\food_and_drinks\food\snacks_spaghetti.dm" +#include "code\modules\food_and_drinks\food\snacks_sushi.dm" #include "code\modules\food_and_drinks\food\snacks_vend.dm" #include "code\modules\food_and_drinks\food\snacks\dough.dm" #include "code\modules\food_and_drinks\food\snacks\meat.dm" @@ -1655,6 +1656,7 @@ #include "code\modules\food_and_drinks\recipes\tablecraft\recipes_sandwich.dm" #include "code\modules\food_and_drinks\recipes\tablecraft\recipes_soup.dm" #include "code\modules\food_and_drinks\recipes\tablecraft\recipes_spaghetti.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_sushi.dm" #include "code\modules\games\cas.dm" #include "code\modules\goonchat\browserOutput.dm" #include "code\modules\goonchat\jsErrorHandler.dm" @@ -1874,7 +1876,23 @@ #include "code\modules\mob\dead\new_player\new_player.dm" #include "code\modules\mob\dead\new_player\poll.dm" #include "code\modules\mob\dead\new_player\preferences_setup.dm" -#include "code\modules\mob\dead\new_player\sprite_accessories.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\_sprite_accessories.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\body_markings.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\caps.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\ears.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\frills.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\hair_face.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\hair_head.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\horns.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\legs.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\moth_wings.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\pines.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\snouts.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\socks.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\tails.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\undershirt.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\underwear.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\wings.dm" #include "code\modules\mob\dead\observer\login.dm" #include "code\modules\mob\dead\observer\logout.dm" #include "code\modules\mob\dead\observer\notificationprefs.dm" @@ -2954,6 +2972,7 @@ #include "modular_citadel\code\modules\projectiles\guns\ballistic\flechette.dm" #include "modular_citadel\code\modules\projectiles\guns\ballistic\handguns.dm" #include "modular_citadel\code\modules\projectiles\guns\ballistic\magweapon.dm" +#include "modular_citadel\code\modules\projectiles\guns\ballistic\magweapon_energy.dm" #include "modular_citadel\code\modules\projectiles\guns\ballistic\revolver.dm" #include "modular_citadel\code\modules\projectiles\guns\ballistic\rifles.dm" #include "modular_citadel\code\modules\projectiles\guns\ballistic\spinfusor.dm"