diff --git a/code/datums/autolathe/autolathe.dm b/code/datums/autolathe/autolathe.dm index 4adeb85760..a049a4456c 100644 --- a/code/datums/autolathe/autolathe.dm +++ b/code/datums/autolathe/autolathe.dm @@ -6,7 +6,8 @@ var/datum/category_collection/autolathe/autolathe_recipes if(I.matter && !resources) resources = list() for(var/material in I.matter) - resources[material] = I.matter[material]*1.25 // More expensive to produce than they are to recycle. + var/coeff = (no_scale ? 1 : 1.25) //most objects are more expensive to produce than to recycle + resources[material] = I.matter[material]*coeff // but if it's a sheet or RCD cartridge, it's 1:1 if(is_stack && istype(I, /obj/item/stack)) var/obj/item/stack/IS = I max_stack = IS.max_amount @@ -66,6 +67,7 @@ var/datum/category_collection/autolathe/autolathe_recipes var/power_use = 0 var/is_stack var/max_stack + var/no_scale /datum/category_item/autolathe/dd_SortValue() return name \ No newline at end of file diff --git a/code/datums/autolathe/engineering.dm b/code/datums/autolathe/engineering.dm index ca40b4a6a9..fd907ba5f8 100644 --- a/code/datums/autolathe/engineering.dm +++ b/code/datums/autolathe/engineering.dm @@ -93,6 +93,7 @@ /datum/category_item/autolathe/engineering/rcd_ammo name = "matter cartridge" path =/obj/item/weapon/rcd_ammo + no_scale = TRUE //prevents material duplication exploits /datum/category_item/autolathe/engineering/rcd name = "rapid construction device" diff --git a/code/datums/autolathe/general.dm b/code/datums/autolathe/general.dm index f354583318..2e2fa3c6fb 100644 --- a/code/datums/autolathe/general.dm +++ b/code/datums/autolathe/general.dm @@ -73,22 +73,26 @@ /datum/category_item/autolathe/general/metal name = "steel sheets" path =/obj/item/stack/material/steel - is_stack = 1 + is_stack = TRUE + no_scale = TRUE //prevents material duplication exploits /datum/category_item/autolathe/general/glass name = "glass sheets" path =/obj/item/stack/material/glass - is_stack = 1 + is_stack = TRUE + no_scale = TRUE //prevents material duplication exploits /datum/category_item/autolathe/general/rglass name = "reinforced glass sheets" path =/obj/item/stack/material/glass/reinforced - is_stack = 1 + is_stack = TRUE + no_scale = TRUE //prevents material duplication exploits /datum/category_item/autolathe/general/rods name = "metal rods" path =/obj/item/stack/rods - is_stack = 1 + is_stack = TRUE + no_scale = TRUE //prevents material duplication exploits /datum/category_item/autolathe/general/knife name = "kitchen knife" diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 3a1fbf7897..7d7c64f949 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -83,16 +83,17 @@ else //Make sure it's buildable and list requires resources. for(var/material in R.resources) - var/sheets = round(stored_material[material]/round(R.resources[material]*mat_efficiency)) + var/coeff = (R.no_scale ? 1 : mat_efficiency) //stacks are unaffected by production coefficient + var/sheets = round(stored_material[material]/round(R.resources[material]*coeff)) if(isnull(max_sheets) || max_sheets > sheets) max_sheets = sheets - if(!isnull(stored_material[material]) && stored_material[material] < round(R.resources[material]*mat_efficiency)) + if(!isnull(stored_material[material]) && stored_material[material] < round(R.resources[material]*coeff)) can_make = 0 if(!comma) comma = 1 else material_string += ", " - material_string += "[round(R.resources[material] * mat_efficiency)] [material]" + material_string += "[round(R.resources[material] * coeff)] [material]" material_string += ".
" //Build list of multipliers for sheets. if(R.is_stack) @@ -251,15 +252,16 @@ update_use_power(2) //Check if we still have the materials. + var/coeff = (making.no_scale ? 1 : mat_efficiency) //stacks are unaffected by production coefficient for(var/material in making.resources) if(!isnull(stored_material[material])) - if(stored_material[material] < round(making.resources[material] * mat_efficiency) * multiplier) + if(stored_material[material] < round(making.resources[material] * coeff) * multiplier) return //Consume materials. for(var/material in making.resources) if(!isnull(stored_material[material])) - stored_material[material] = max(0, stored_material[material] - round(making.resources[material] * mat_efficiency) * multiplier) + stored_material[material] = max(0, stored_material[material] - round(making.resources[material] * coeff) * multiplier) update_icon() // So lid closes diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 25d5979002..4aef867592 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -384,7 +384,7 @@ if(!opened) icon_state = icon_closed if(sealed) - overlays += "sealed" + overlays += "welded" else icon_state = icon_opened diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index a5ad07213d..d4cf8f63b3 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -298,6 +298,14 @@ /obj/structure/flora/sif icon = 'icons/obj/flora/sifflora.dmi' +/obj/structure/flora/sif/attack_hand(mob/user) + if (user.a_intent == I_HURT) + if(do_after(user, 5 SECONDS)) + user.visible_message("\The [user] digs up \the [src.name].", "You dig up \the [src.name].") + qdel(src) + else + user.visible_message("\The [user] pokes \the [src.name].", "You poke \the [src.name].") + /datum/category_item/catalogue/flora/subterranean_bulbs name = "Sivian Flora - Subterranean Bulbs" desc = "A plant which is native to Sif, it continues the trend of being a bioluminescent specimen. These plants \ @@ -340,4 +348,4 @@ /obj/structure/flora/sif/eyes/Initialize() icon_state = "[initial(icon_state)][rand(1,3)]" - . = ..() + . = ..() \ No newline at end of file diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 789b95ab69..c51fc614d1 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -41,6 +41,9 @@ set_flooring(get_flooring_data(floortype)) else footstep_sounds = base_footstep_sounds + if(can_dirty) + if(prob(2)) + new /obj/effect/decal/cleanable/dirt(src) //5% chance to start with dirt on a floor tile- give the janitor something to do /turf/simulated/floor/proc/set_flooring(var/decl/flooring/newflooring) make_plating(defer_icon_update = 1) diff --git a/code/game/turfs/simulated/outdoors/grass.dm b/code/game/turfs/simulated/outdoors/grass.dm index 67aa054b46..72b2ee7e57 100644 --- a/code/game/turfs/simulated/outdoors/grass.dm +++ b/code/game/turfs/simulated/outdoors/grass.dm @@ -29,7 +29,7 @@ var/list/grass_types = list( name = "growth" icon_state = "grass_sif" edge_blending_priority = 4 - grass_chance = 0 + grass_chance = 5 var/tree_chance = 2 grass_types = list( diff --git a/code/modules/blob2/blobs/core.dm b/code/modules/blob2/blobs/core.dm index 17ecd2429f..f43ec7ad6f 100644 --- a/code/modules/blob2/blobs/core.dm +++ b/code/modules/blob2/blobs/core.dm @@ -6,6 +6,7 @@ var/list/blob_cores = list() icon = 'icons/mob/blob.dmi' icon_state = "blank_blob" desc = "A huge, pulsating yellow mass." + density = TRUE //bandaid fix for PolarisSS13/6173 max_integrity = 150 point_return = -1 health_regen = 0 //we regen in Life() instead of when pulsed diff --git a/code/modules/mob/living/simple_animal/animals/cat.dm b/code/modules/mob/living/simple_animal/animals/cat.dm index 20d98f9084..140deb0b24 100644 --- a/code/modules/mob/living/simple_animal/animals/cat.dm +++ b/code/modules/mob/living/simple_animal/animals/cat.dm @@ -6,9 +6,9 @@ intelligence_level = SA_ANIMAL icon_state = "cat2" item_state = "cat2" - icon_living = "cat2" - icon_dead = "cat2_dead" - icon_rest = "cat2_rest" + icon_living = "[initial(icon_state)]" + icon_dead = "[initial(icon_state)]_dead" + icon_rest = "[initial(icon_state)]_rest" investigates = 1 specific_targets = 1 //Only targets with Found() @@ -161,9 +161,6 @@ gender = FEMALE icon_state = "cat" item_state = "cat" - icon_living = "cat" - icon_dead = "cat_dead" - icon_rest = "cat_rest" befriend_job = "Chief Medical Officer" /mob/living/simple_animal/cat/kitten @@ -188,9 +185,6 @@ gender = MALE icon_state = "cat3" item_state = "cat3" - icon_living = "cat3" - icon_dead = "cat3_dead" - icon_rest = "cat3_rest" holder_type = /obj/item/weapon/holder/cat/fluff/bones friend_name = "Erstatz Vryroxes" diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm index b0ade63e92..0c33c0351b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm @@ -4,9 +4,6 @@ tt_desc = "E Felis silvestris catus" icon_state = "cat2" item_state = "cat2" - icon_living = "cat2" - icon_dead = "cat2_dead" - icon_rest = "cat2_rest" movement_cooldown = 0.5 SECONDS @@ -21,6 +18,14 @@ has_langs = list("Cat") var/mob/living/friend = null // Our best pal, who we'll follow. Meow. + var/named = FALSE //have I been named yet? + +/mob/living/simple_mob/animal/passive/cat/Initialize() + icon_living = "[initial(icon_state)]" + icon_dead = "[initial(icon_state)]_dead" + icon_rest = "[initial(icon_state)]_rest" + update_icon() + return ..() /mob/living/simple_mob/animal/passive/cat/handle_special() if(!stat && prob(2)) // spooky @@ -90,17 +95,13 @@ gender = FEMALE icon_state = "cat" item_state = "cat" - icon_living = "cat" - icon_dead = "cat_dead" - icon_rest = "cat_rest" + named = TRUE /mob/living/simple_mob/animal/passive/cat/kitten name = "kitten" - desc = "D'aaawwww" + desc = "D'aaawwww!" icon_state = "kitten" item_state = "kitten" - icon_living = "kitten" - icon_dead = "kitten_dead" gender = NEUTER /mob/living/simple_mob/animal/passive/cat/kitten/Initialize() @@ -108,6 +109,10 @@ gender = pick(MALE, FEMALE) return ..() +/mob/living/simple_mob/animal/passive/cat/black + icon_state = "cat" + item_state = "cat" + // Leaving this here for now. /obj/item/weapon/holder/cat/fluff/bones name = "Bones" @@ -121,12 +126,9 @@ gender = MALE icon_state = "cat3" item_state = "cat3" - icon_living = "cat3" - icon_dead = "cat3_dead" - icon_rest = "cat3_rest" + named = TRUE holder_type = /obj/item/weapon/holder/cat/fluff/bones - /datum/say_list/cat speak = list("Meow!","Esp!","Purr!","HSSSSS") emote_hear = list("meows","mews") @@ -134,3 +136,34 @@ say_maybe_target = list("Meow?","Mew?","Mao?") say_got_target = list("MEOW!","HSSSS!","REEER!") +/mob/living/simple_mob/animal/passive/cat/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen)) + if(named) + to_chat(user, "\the [name] already has a name!") + else + var/tmp_name = sanitizeSafe(input(user, "Give \the [name] a name", "Name"), MAX_NAME_LEN) + if(length(tmp_name) > 50) + to_chat(user, "The name can be at most 50 characters long.") + else + to_chat(user, "You name \the [name]. Meow!") + name = tmp_name + named = TRUE + else + ..() + +/obj/item/weapon/cat_box + name = "faintly purring box" + desc = "This box is purring faintly. You're pretty sure there's a cat inside it." + icon = 'icons/obj/storage.dmi' + icon_state = "box" + var/cattype = /mob/living/simple_mob/animal/passive/cat + +/obj/item/weapon/cat_box/attack_self(var/mob/user) + var/turf/catturf = get_turf(src) + to_chat(user, "You peek into \the [name]-- and a cat jumps out!") + new cattype(catturf) + new /obj/item/stack/material/cardboard(catturf) //if i fits i sits + qdel(src) + +/obj/item/weapon/cat_box/black + cattype = /mob/living/simple_mob/animal/passive/cat/black \ No newline at end of file diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 35df250581..ec6a03fc0e 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -99,6 +99,7 @@ return ..() /obj/machinery/power/supermatter/Destroy() + STOP_PROCESSING(SSobj, src) QDEL_NULL(soundloop) return ..() @@ -150,6 +151,8 @@ H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) ) spawn(pull_time) explosion(get_turf(src), explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1) + spawn(5) //to allow the explosion to finish + new /obj/item/broken_sm(TS) qdel(src) return @@ -452,3 +455,21 @@ /obj/machinery/power/supermatter/shard/announce_warning() //Shards don't get announcements return + +/obj/item/broken_sm + name = "shattered supermatter plinth" + desc = "The shattered remains of a supermatter shard plinth. It doesn't look safe to be around." + icon = 'icons/obj/engine.dmi' + icon_state = "darkmatter_broken" + +/obj/item/broken_sm/New() + message_admins("Broken SM shard created at ([x],[y],[z] - JMP)",0,1) + START_PROCESSING(SSobj, src) + return ..() + +/obj/item/broken_sm/process() + radiation_repository.radiate(src, 50) + +/obj/item/broken_sm/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() diff --git a/html/changelogs/mistyLuminescence - tinytweaks.yml b/html/changelogs/mistyLuminescence - tinytweaks.yml new file mode 100644 index 0000000000..ce00ccecd2 --- /dev/null +++ b/html/changelogs/mistyLuminescence - tinytweaks.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: mistyLuminescence + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "When the supermatter explodes, it now leaves behind a shattered plinth that continues to emit radiation. You should probably get rid of it." + - bugfix: "If you destroy the supermatter early (e.g. through admin deletion shenanigans), it no longer irradiates everyone forever." + - bugfix: "Welding lockers now actually updates their sprite properly." + - tweak: "Every floor tile now has a minor (2%) chance to spawn with some dirt on it. The Janitor now has a job again." + - tweak: "Similarly, every Sif grass tile now has a minor (5%) chance to spawn with some fancy eyebulb grass on it. It can be removed by clicking on it with harm intent." + - rscadd: "Adds cats-in-boxes, which can be activated (once) to spawn cats. There's an orange tabby (Cargo cats) and a tuxedo (Runtime) version." + - bugfix: "Fixes a material duplication exploit." \ No newline at end of file diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 1f7c06a037..048d70bd63 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/obj/engine.dmi b/icons/obj/engine.dmi index 9292260609..51bc0356c8 100644 Binary files a/icons/obj/engine.dmi and b/icons/obj/engine.dmi differ