diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 7f1861f8c6c..4fe90a2133e 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -22,6 +22,7 @@ RCD origin_tech = "engineering=4;materials=2" var/datum/effect/effect/system/spark_spread/spark_system var/matter = 0 + var/max_matter = 100 var/working = 0 var/mode = 1 var/canRwall = 0 @@ -92,7 +93,7 @@ RCD /obj/item/weapon/rcd/New() - desc = "A RCD. It currently holds [matter]/100 matter-units." + desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." src.spark_system = new /datum/effect/effect/system/spark_spread spark_system.set_up(5, 0, src) spark_system.attach(src) @@ -102,15 +103,15 @@ RCD /obj/item/weapon/rcd/attackby(obj/item/weapon/W, mob/user) ..() if(istype(W, /obj/item/weapon/rcd_ammo)) - if((matter + 20) > 100) + if((matter + 20) > max_matter) user << "The RCD cant hold any more matter-units." return user.drop_item() qdel(W) matter += 20 playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - user << "The RCD now holds [matter]/30 matter-units." - desc = "A RCD. It currently holds [matter]/30 matter-units." + user << "The RCD now holds [matter]/[max_matter] matter-units." + desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." return @@ -243,7 +244,7 @@ RCD if(matter < amount) return 0 matter -= amount - desc = "A RCD. It currently holds [matter]/30 matter-units." + desc = "A RCD. It currently holds [matter]/[max_matter] matter-units." return 1 /obj/item/weapon/rcd/proc/checkResource(var/amount, var/mob/user) diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index ae968fc3ee9..b0d9d00fd5e 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -21,6 +21,8 @@ obj/item/weapon/mop/proc/clean(turf/simulated/A) if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1)) A.clean_blood() + var/turf/simulated/floor/F = A + F.dirt = 0 for(var/obj/effect/O in A) if(istype(O,/obj/effect/decal/cleanable) || istype(O,/obj/effect/overlay)) qdel(O) diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index f5a22006542..c7458b10969 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -7,25 +7,81 @@ icon = 'icons/obj/statue.dmi' icon_state = "" density = 1 - anchored = 1 + anchored = 0 var/hardness = 1 var/oreAmount = 7 var/mineralType = "metal" - var/last_event = 0 - var/active = null - var/spam_flag = 0 /obj/structure/statue/Destroy() density = 0 ..() -/obj/structure/statue/attackby(obj/item/weapon/W, mob/user) - hardness -= W.force/100 - user << "You hit the [name] with your [W.name]!" - CheckHardness() +/obj/structure/statue/attackby(obj/item/weapon/W, mob/living/user as mob) + add_fingerprint(user) + user.changeNext_move(CLICK_CD_MELEE) + if(istype(W, /obj/item/weapon/wrench)) + if(anchored) + playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + user.visible_message("[user] is loosening the [name]'s bolts...", \ + "You are loosening the [name]'s bolts...") + if(do_after(user,40)) + if(!src) return + if(!anchored) return + user.visible_message("[user] loosened the [name]'s bolts!", \ + "You loosened the [name]'s bolts!") + anchored = 0 + else if(!anchored) + if (!istype(src.loc, /turf/simulated/floor)) + user.visible_message("A floor must be present to secure the [name]!") + return + playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1) + user.visible_message("[user] is securing the [name]'s bolts...", \ + "You are securing the [name]'s bolts...") + if(do_after(user, 40)) + if(!src) return + if(anchored) return + user.visible_message("[user] has secured the [name]'s bolts!", \ + "You have secured the [name]'s bolts!") + anchored = 1 -/obj/structure/statue/attack_hand(mob/user) - visible_message("[user] rubs some dust off from the [name]'s surface.") + else if(istype(W, /obj/item/weapon/pickaxe/plasmacutter)) + user.visible_message("[user] is slicing apart the [name]...", \ + "You are slicing apart the [name]...") + if(do_after(user,30)) + if(!src.loc) return + user.visible_message("[user] slices apart the [name]!", \ + "You slice apart the [name]!") + Dismantle(1) + + else if(istype(W, /obj/item/weapon/pickaxe/drill/diamonddrill)) + user.visible_message("[user] begins to drill apart the [name]!", \ + "You begin to drill apart the [name]!") + if(do_after(user,5)) + if(!src.loc) return + user.visible_message("[user] destroys the [name]!", \ + "You destroy the [name]!") + qdel(src) + + else if(istype(W, /obj/item/weapon/weldingtool)) + if(!anchored) + user.visible_message("[user] is slicing apart the [name]...", \ + "You are slicing apart the [name]...") + if(do_after(user, 40)) + if(!src.loc) return + user.visible_message("[user] slices apart the [name]!", \ + "You slice apart the [name]!") + Dismantle(1) + + else + hardness -= W.force/100 + ..() + CheckHardness() + +/obj/structure/statue/attack_hand(mob/living/user as mob) + user.changeNext_move(CLICK_CD_MELEE) + add_fingerprint(user) + user.visible_message("[user] rubs some dust off from the [name]'s surface.", \ + "You rub some dust off from the [name]'s surface.") /obj/structure/statue/CanAtmosPass() return !density @@ -83,6 +139,8 @@ hardness = 3 luminosity = 2 mineralType = "uranium" + var/last_event = 0 + var/active = null /obj/structure/statue/uranium/nuke name = "Statue of a Nuclear Fission Explosive" @@ -100,6 +158,7 @@ /obj/structure/statue/uranium/Bumped(atom/user) radiate() + ..() /obj/structure/statue/uranium/attack_hand(mob/user) radiate() @@ -107,6 +166,7 @@ /obj/structure/statue/uranium/attack_paw(mob/user) radiate() + ..() /obj/structure/statue/uranium/proc/radiate() if(!active) @@ -238,6 +298,7 @@ hardness = 3 mineralType = "bananium" desc = "A bananium statue with a small engraving:'HOOOOOOONK'." + var/spam_flag = 0 /obj/structure/statue/bananium/clown name = "Statue of a clown" @@ -245,6 +306,7 @@ /obj/structure/statue/bananium/Bumped(atom/user) honk() + ..() /obj/structure/statue/bananium/attackby(obj/item/weapon/W, mob/user) honk() @@ -256,9 +318,10 @@ /obj/structure/statue/bananium/attack_paw(mob/user) honk() + ..() /obj/structure/statue/bananium/proc/honk() - if(spam_flag == 0) + if(!spam_flag) spam_flag = 1 playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1) spawn(20) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index efb6acf3401..4cd9e3e0ded 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -55,6 +55,8 @@ if(M.environment_smash) new /obj/item/stack/sheet/metal(src.loc) qdel(src) + return + manual_unbuckle(M) /obj/structure/stool/bed/MouseDrop_T(mob/M as mob, mob/user as mob) if(!istype(M)) return @@ -112,8 +114,8 @@ if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || user.lying || user.stat || M.buckled || istype(user, /mob/living/silicon/pai) || M.anchored) return - if (istype(M, /mob/living/carbon/slime)) - user << "The [M] is too squishy to buckle in." + if (istype(M, /mob/living/carbon/slime) || istype(M, /mob/living/simple_animal/slime)) + user << "\The [M] is too squishy to buckle in." return unbuckle() diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 1011cef9c50..56c208db908 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -37,12 +37,10 @@ if (istype(A,/mob/living/carbon)) var/mob/living/carbon/M = A if(M.lying) return - switch (src.wet) if(1) //wet floor if(!M.slip(4, 2, null, (NO_SLIP_WHEN_WALKING|STEP))) M.inertia_dir = 0 return - if(2) //lube M.slip(0, 7, null, (STEP|SLIDE|GALOSHES_DONT_HELP)) \ No newline at end of file diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 0be1070747c..94bf8673290 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -32,6 +32,8 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," var/obj/item/stack/tile/builtin_tile = null //needed for performance reasons when the singularity rips off floor tiles var/list/broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") var/list/burnt_states = list() + var/dirt = 0 + var/ignoredirt = 0 /turf/simulated/floor/New() ..() @@ -161,4 +163,20 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," /turf/simulated/floor/narsie_act() if(prob(20)) - ChangeTurf(/turf/simulated/floor/engine/cult) \ No newline at end of file + ChangeTurf(/turf/simulated/floor/engine/cult) + +/turf/simulated/floor/Entered(atom/A, atom/OL) + ..() + if(!ignoredirt) + if(has_gravity(src)) + if(istype(A,/mob/living/carbon)) + var/mob/living/carbon/M = A + if(M.lying) return + dirt++ + var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src) + if (dirt >= 30) + if (!dirtoverlay) + dirtoverlay = new/obj/effect/decal/cleanable/dirt(src) + dirtoverlay.alpha = 15 + else if (dirt > 30) + dirtoverlay.alpha = min(dirtoverlay.alpha+20, 255) \ No newline at end of file diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index 7fb99942189..4fe22480e21 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -41,6 +41,7 @@ icon_state = "grass1" floor_tile = /obj/item/stack/tile/grass broken_states = list("sand1", "sand2", "sand3") + ignoredirt = 1 /turf/simulated/floor/fancy/grass/New() ..() diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index 0f84e80e95c..9f50b65328c 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -68,6 +68,7 @@ /turf/simulated/floor/beach name = "Beach" icon = 'icons/misc/beach.dmi' + ignoredirt = 1 /turf/simulated/floor/beach/ex_act(severity, target) contents_explosion(severity, target) @@ -89,11 +90,13 @@ ..() name = "Iron Sand" icon_state = "ironsand[rand(1,15)]" + ignoredirt = 1 /turf/simulated/floor/plating/snow name = "snow" icon = 'icons/turf/snow.dmi' icon_state = "snow" + ignoredirt = 1 /turf/simulated/floor/plating/snow/ex_act(severity, target) contents_explosion(severity, target) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 018f6e491ed..581ab4f176d 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -475,6 +475,7 @@ icon_state = "asteroid" icon_plating = "asteroid" var/dug = 0 //0 = has not yet been dug, 1 = has already been dug + ignoredirt = 1 /turf/simulated/floor/plating/asteroid/airless oxygen = 0.01 diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm index d0e5756c1b9..6228646562a 100644 --- a/code/modules/mob/living/carbon/slime/slime.dm +++ b/code/modules/mob/living/carbon/slime/slime.dm @@ -664,30 +664,30 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 icon = 'icons/obj/chemical.dmi' icon_state = "bottle19" - attack(mob/living/carbon/slime/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime/))//If target is not a slime. - user << " The potion only works on slimes!" - return ..() - if(M.stat) - user << " The slime is dead!" - return..() - if(M.mind) - user << " The slime resists!" - return ..() - var/mob/living/simple_animal/adultslime/pet = new /mob/living/simple_animal/adultslime(M.loc) - pet.icon_state = "[M.colour] adult slime" - pet.icon_living = "[M.colour] adult slime" - pet.icon_dead = "[M.colour] baby slime dead" - pet.colour = "[M.colour]" - user <<"You feed the slime the potion, removing it's powers and calming it." - qdel(M) - var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN) +/obj/item/weapon/slimepotion2/attack(mob/living/carbon/slime/M as mob, mob/user as mob) + if(!istype(M, /mob/living/carbon/slime/))//If target is not a slime. + user << " The potion only works on slimes!" + return ..() + if(M.stat) + user << " The slime is dead!" + return..() + if(M.mind) + user << " The slime resists!" + return ..() + var/mob/living/simple_animal/slime/adult/pet = new /mob/living/simple_animal/slime/adult(M.loc) + pet.icon_state = "[M.colour] adult slime" + pet.icon_living = "[M.colour] adult slime" + pet.icon_dead = "[M.colour] baby slime dead" + pet.colour = "[M.colour]" + user <<"You feed the slime the potion, removing it's powers and calming it." + qdel(M) + var/newname = copytext(sanitize(input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime") as null|text),1,MAX_NAME_LEN) - if (!newname) - newname = "pet slime" - pet.name = newname - pet.real_name = newname - qdel(src) + if (!newname) + newname = "pet slime" + pet.name = newname + pet.real_name = newname + qdel(src) /obj/item/weapon/slimesteroid diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index fc09c902729..a77344a194c 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -852,6 +852,9 @@ var/turf/tile = loc if(isturf(tile)) tile.clean_blood() + if (istype(tile, /turf/simulated/floor)) + var/turf/simulated/floor/F = tile + F.dirt = 0 for(var/A in tile) if(istype(A, /obj/effect)) if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay)) diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm index 13f6b7e40f2..85405278096 100644 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -15,34 +15,21 @@ ventcrawler = 2 var/colour = "grey" -/mob/living/simple_animal/adultslime - name = "pet slime" - desc = "A lovable, domesticated slime." - icon = 'icons/mob/slimes.dmi' +/mob/living/simple_animal/slime/adult health = 200 maxHealth = 200 icon_state = "grey adult slime" icon_living = "grey adult slime" - icon_dead = "grey baby slime dead" - response_help = "pets" - response_disarm = "shoos" - response_harm = "stomps on" - emote_see = list("jiggles", "bounces in place") - var/colour = "grey" -/mob/living/simple_animal/adultslime/New() +/mob/living/simple_animal/slime/adult/New() ..() overlays += "aslime-:33" /mob/living/simple_animal/slime/adult/Die() - var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc) - S1.icon_state = "[src.colour] baby slime" - S1.icon_living = "[src.colour] baby slime" - S1.icon_dead = "[src.colour] baby slime dead" - S1.colour = "[src.colour]" - var/mob/living/simple_animal/slime/S2 = new /mob/living/simple_animal/slime (src.loc) - S2.icon_state = "[src.colour] baby slime" - S2.icon_living = "[src.colour] baby slime" - S2.icon_dead = "[src.colour] baby slime dead" - S2.colour = "[src.colour]" + for(var/i = 0, i<=1, i++) + var/mob/living/simple_animal/slime/S1 = new /mob/living/simple_animal/slime (src.loc) + S1.icon_state = "[colour] baby slime" + S1.icon_living = "[colour] baby slime" + S1.icon_dead = "[colour] baby slime dead" + S1.colour = "[colour]" qdel(src) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 9369e597578..5834833dcbf 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -19,15 +19,17 @@ canmove = 0 stunned = 1 icon = null + overlays.Cut() invisibility = 101 - var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( loc ) - O.invisibility = 101 - var/atom/movable/overlay/animation = new /atom/movable/overlay( loc ) + var/atom/movable/overlay/animation = new( loc ) animation.icon_state = "blank" animation.icon = 'icons/mob/mob.dmi' animation.master = src flick("h2monkey", animation) + sleep(22) + var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( loc ) + qdel(animation) // hash the original name? if (tr_flags & TR_HASHNAME) @@ -82,14 +84,8 @@ updateappearance(O) . = O if ( !(tr_flags & TR_KEEPSRC) ) //flag should be used if monkeyize() is called inside another proc of src so that one does not crash - var/mob/deleted = src - src = O - qdel(deleted) + qdel(src) - spawn(22) - //animation = null - O.invisibility = 0 - qdel(animation) ////////////////////////// Humanize ////////////////////////////// //Could probably be merged with monkeyize but other transformations got their own procs, too @@ -125,14 +121,18 @@ canmove = 0 stunned = 1 icon = null + overlays.Cut() invisibility = 101 - var/mob/living/carbon/human/O = new( loc ) - O.invisibility = 101 - var/atom/movable/overlay/animation = new /atom/movable/overlay( loc ) + var/atom/movable/overlay/animation = new( loc ) animation.icon_state = "blank" animation.icon = 'icons/mob/mob.dmi' animation.master = src flick("monkey2h", animation) + sleep(22) + var/mob/living/carbon/human/O = new( loc ) + for(var/obj/item/C in O.loc) + O.equip_to_appropriate_slot(C) + qdel(animation) O.gender = (deconstruct_block(getblock(dna.uni_identity, DNA_GENDER_BLOCK), 2)-1) ? FEMALE : MALE O.dna = dna @@ -188,9 +188,6 @@ if (tr_flags & TR_DEFAULTMSG) O << "You are now a human." - for(var/obj/item/C in O.loc) - O.equip_to_appropriate_slot(C) - updateappearance(O) . = O @@ -199,17 +196,8 @@ loc.vars[A] = O if ( !(tr_flags & TR_KEEPSRC) ) //don't delete src yet if it's needed to finish calling proc - var/mob/deleted = src - src = O - qdel(deleted) + qdel(src) - spawn(22) - O.invisibility = 0 - for(var/obj/item/C in O.loc) - O.equip_to_appropriate_slot(C) - qdel(animation) - - return /mob/new_player/AIize() spawning = 1 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm index 2151bbec53f..02983913ee8 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents.dm @@ -650,6 +650,10 @@ datum/reagent/space_cleaner/reaction_turf(var/turf/T, var/volume) for(var/mob/living/carbon/slime/M in T) M.adjustToxLoss(rand(5,10)) + if(istype(T, /turf/simulated/floor)) + var/turf/simulated/floor/F = T + if(volume >= 1) + F.dirt = 0 datum/reagent/space_cleaner/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) if(iscarbon(M)) @@ -689,6 +693,7 @@ datum/reagent/cryptobiolin/on_mob_life(var/mob/living/M as mob) if(!M.confused) M.confused = 1 M.confused = max(M.confused, 20) + ..() return datum/reagent/impedrezene @@ -854,4 +859,4 @@ datum/reagent/plantnutriment/robustharvestnutriment // Undefine the alias for REAGENTS_EFFECT_MULTIPLER -#undef REM \ No newline at end of file +#undef REM diff --git a/icons/emoji.dmi b/icons/emoji.dmi index a78a7e3df79..8da34d9a468 100644 Binary files a/icons/emoji.dmi and b/icons/emoji.dmi differ diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi index 848647eae2d..8bc456a4787 100644 Binary files a/icons/obj/pda.dmi and b/icons/obj/pda.dmi differ