diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index ff7ee38ddb5..cbc47d65df8 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -179,19 +179,23 @@ if(istype(W,/obj/item/weapon/storage)) var/obj/item/weapon/storage/S = W if(S.use_to_pickup) - if(S.collection_mode) //Mode is set to collect all items on a tile and we clicked on a valid one. + if(S.collection_mode) //Mode is set to collect multiple items on a tile and we clicked on a valid one. if(isturf(src.loc)) var/list/rejections = list() var/success = 0 var/failure = 0 for(var/obj/item/I in src.loc) + if(S.collection_mode == 2 && !istype(I,src.type)) // We're only picking up items of the target type + failure = 1 + continue if(I.type in rejections) // To limit bag spamming: any given type only complains once continue if(!S.can_be_inserted(I)) // Note can_be_inserted still makes noise when the answer is no rejections += I.type // therefore full bags are still a little spammy failure = 1 continue + success = 1 S.handle_item_insertion(I, 1) //The 1 stops the "You put the [src] into [S]" insertion message from being displayed. if(success && !failure) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 5ecba49ee27..6d3be15c089 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -20,7 +20,7 @@ var/display_contents_with_number //Set this to make the storage item group contents of the same type and display them as a number. var/allow_quick_empty //Set this variable to allow the object to have the 'empty' verb, which dumps all the contents on the floor. var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile. - var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile + var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile, 2 = pick all of a type /obj/item/weapon/storage/MouseDrop(obj/over_object) @@ -351,8 +351,10 @@ set name = "Switch Gathering Method" set category = "Object" - collection_mode = !collection_mode + collection_mode = (collection_mode+1)%3 switch (collection_mode) + if(2) + usr << "[src] now picks up all items of a single type at once." if(1) usr << "[src] now picks up all items in a tile at once." if(0) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 6ab112d03d8..2e551d4161b 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -42,8 +42,12 @@ item_color = "medical" //Exists for washing machines. Is not different from latex gloves in any way. /obj/item/clothing/gloves/botanic_leather - desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin." + desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm." name = "botanist's leather gloves" icon_state = "leather" item_state = "ggloves" permeability_coefficient = 0.9 + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index de28dd85e59..21726acb0fd 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -716,7 +716,13 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/grass/attack_self(mob/user as mob) user << "You prepare the astroturf." - new/obj/item/stack/tile/grass(user.loc) + var/location = get_turf(user) + var/grassAmt = 1 // The grass we're holding + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/grass/grassToConvert in location) // The grass on the floor + grassAmt += 1 + del(grassToConvert) + var/obj/item/stack/tile/newAstroturf = new /obj/item/stack/tile/grass(location) + newAstroturf.amount = grassAmt del(src) /obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index a7f14f589f3..c0a9a814980 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -58,6 +58,18 @@ obj/machinery/hydroponics/process() if(nutrilevel <= 0 && myseed.plant_type != 1) adjustHealth(-rand(1,3)) +//Photosynthesis///////////////////////////////////////////////////////// + // Lack of light hurts non-mushrooms + if(isturf(loc)) + var/turf/currentTurf = loc + var/lightAmt = currentTurf.lighting_lumcount + if(myseed.plant_type == 2) // Mushroom + if(lightAmt < 2) + adjustHealth(-1) + else // Non-mushroom + if(lightAmt < 4) + adjustHealth(-2) + //Water////////////////////////////////////////////////////////////////// // Drink random amount of water adjustWater(-rand(1,6)) @@ -348,8 +360,8 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) // Beakers, bottles, buckets, etc. Can't use is_open_container though. if(istype(reagent_source, /obj/item/weapon/reagent_containers/glass/)) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - - // There needs to be a good amount of mutagen to actually work + + // Requires 5 mutagen to possibly change species. if(S.has_reagent("mutagen", 5)) switch(rand(100)) if(91 to 100) plantdies() @@ -360,6 +372,11 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) if(11 to 20) mutateweed() if(1 to 10) mutatepest() else user << "Nothing happens..." + // 2 or 1 units is enough to change the yield and other stats. + else if(S.has_reagent("mutagen", 2)) + hardmutate() + else if(S.has_reagent("mutagen", 1)) + mutate() // Antitoxin binds shit pretty well. So the tox goes significantly down if(S.has_reagent("anti_toxin", 1)) @@ -462,10 +479,7 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) adjustNutri(round(S.get_reagent_amount("nutriment")*1)) // Poor man's mutagen. - if(S.has_reagent("radium", 1)) - adjustHealth(-round(S.get_reagent_amount("radium")*1.5)) - adjustToxic(round(S.get_reagent_amount("radium")*2)) - if(S.has_reagent("radium", 10)) + if(S.has_reagent("radium", 10) || S.has_reagent("uranium", 10)) switch(rand(100)) if(91 to 100) plantdies() if(81 to 90) mutatespecie() @@ -475,6 +489,19 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) if(11 to 20) mutateweed() if(1 to 10) mutatepest() else user << "Nothing happens..." + // Can change the yield and other stats, but requires more than mutagen + else if(S.has_reagent("radium", 5) || S.has_reagent("uranium", 5)) + hardmutate() + else if(S.has_reagent("radium", 2) || S.has_reagent("uranium", 2)) + mutate() + + // After handling the mutating, we now handle the damage from adding crude radioactives... + if(S.has_reagent("uranium", 1)) + adjustHealth(-round(S.get_reagent_amount("uranium")*1)) + adjustToxic(round(S.get_reagent_amount("uranium")*2)) + if(S.has_reagent("radium", 1)) + adjustHealth(-round(S.get_reagent_amount("radium")*1)) + adjustToxic(round(S.get_reagent_amount("radium")*3)) // Radium is harsher (OOC: also easier to produce) // The best stuff there is. For testing/debugging. if(S.has_reagent("adminordrazine", 1)) @@ -811,10 +838,12 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) /obj/machinery/hydroponics/proc/update_tray(mob/user = usr) harvest = 0 lastproduce = age - if((yieldmod * myseed.yield) <= 0) + if(istype(myseed,/obj/item/seeds/replicapod/)) + user << "You harvest from the [myseed.plantname]." + else if((yieldmod * myseed.yield) <= 0) user << "\red You fail to harvest anything useful." else - user << "You harvest from the [myseed.plantname]." + user << "You harvest [yieldmod * myseed.yield] items from the [myseed.plantname]." if(myseed.oneharvest) del(myseed) planted = 0 diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index c182a1a5a32..a92a6019ec3 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -415,7 +415,7 @@ if(istype(W,/obj/item/weapon/storage/bag/ore)) var/obj/item/weapon/storage/bag/ore/S = W - if(S.collection_mode) + if(S.collection_mode == 1) for(var/obj/item/weapon/ore/O in src.contents) O.attackby(W,user) return diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index d35dbd733cc..60ce30b3917 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -22,10 +22,12 @@ attack_self(mob/living/user as mob) //It's magic I ain't gonna explain how instant conversion with no tool works. -- Urist var/location = get_turf(user) - for(var/obj/item/weapon/ore/glass/sandToConvert in location) - new /obj/item/stack/sheet/mineral/sandstone(location) + var/sandAmt = 1 // The sand we're holding + for(var/obj/item/weapon/ore/glass/sandToConvert in location) // The sand on the floor + sandAmt += 1 del(sandToConvert) - new /obj/item/stack/sheet/mineral/sandstone(location) + var/obj/item/stack/sheet/mineral/newSandstone = new /obj/item/stack/sheet/mineral/sandstone(location) + newSandstone.amount = sandAmt del(src) /obj/item/weapon/ore/plasma diff --git a/html/changelog.html b/html/changelog.html index 71e34a67588..ea5fd4678a9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -54,6 +54,18 @@ should be listed in the changelog upon commit tho. Thanks. --> +