/* -------------------- Standard Toolboxes -------------------- */ /obj/item/storage/toolbox name = "toolbox" icon = 'icons/obj/storage.dmi' inhand_image_icon = 'icons/mob/inhand/hand_tools.dmi' icon_state = "red" item_state = "toolbox_red" flags = FPRINT | TABLEPASS | CONDUCT | NOSPLASH force = 5.0 throwforce = 10.0 throw_speed = 1 throw_range = 7 w_class = 4.0 max_wclass = 3 //cogwerks - burn vars burn_point = 4500 burn_output = 4800 burn_type = 1 stamina_damage = 40 stamina_cost = 30 stamina_crit_chance = 10 New() ..() if (src.type == /obj/item/storage/toolbox) message_admins("BAD: [src] ([src.type]) spawned at [showCoords(src.x, src.y, src.z)]") qdel(src) suicide(var/mob/user as mob) user.visible_message("[user] slams the toolbox closed on \his head repeatedly!") user.TakeDamage("head", 150, 0) user.updatehealth() spawn(100) if (user) user.suiciding = 0 return 1 /obj/item/storage/toolbox/emergency name = "emergency toolbox" icon_state = "red" item_state = "toolbox_red" desc = "A metal container designed to hold various tools. This variety holds supplies required for emergencies." spawn_contents = list(/obj/item/crowbar,\ /obj/item/extinguisher,\ /obj/item/device/flashlight,\ /obj/item/device/radio) /obj/item/storage/toolbox/mechanical name = "mechanical toolbox" icon_state = "blue" item_state = "toolbox_blue" desc = "A metal container designed to hold various tools. This variety holds standard construction tools." spawn_contents = list(/obj/item/screwdriver,\ /obj/item/wrench,\ /obj/item/weldingtool,\ /obj/item/crowbar,\ /obj/item/device/analyzer,\ /obj/item/wirecutters) /obj/item/storage/toolbox/electrical name = "electrical toolbox" icon_state = "yellow" item_state = "toolbox_yellow" desc = "A metal container designed to hold various tools. This variety holds electrical supplies." spawn_contents = list(/obj/item/screwdriver,\ /obj/item/wirecutters,\ /obj/item/device/t_scanner,\ /obj/item/crowbar,\ /obj/item/cable_coil = 3) // The extra items (scanner and soldering iron) take up precious space in the backpack. mechanic_spawn spawn_contents = list(/obj/item/screwdriver,\ /obj/item/wirecutters,\ /obj/item/device/t_scanner,\ /obj/item/crowbar,\ /obj/item/electronics/scanner,\ /obj/item/electronics/soldering,\ /obj/item/cable_coil) /obj/item/storage/toolbox/artistic name = "artistic toolbox" desc = "A metal container designed to hold various tools. This variety holds art supplies." icon_state = "green" item_state = "toolbox_green" spawn_contents = list(/obj/item/paint_can/random = 7) /* -------------------- Memetic Toolbox -------------------- */ /obj/item/storage/toolbox/memetic name = "artistic toolbox" desc = "His Grace." icon_state = "green" item_state = "toolbox_green" var/list/servantlinks = list() var/hunger = 0 var/hunger_message_level = 0 var/original_owner = null cant_other_remove = 1 examine() set src in view() var/mob/living/carbon/human/H = usr if(!istype(H)) boutput(H, "It almost hurts to look at that, it's all out of focus.") return if (H.find_ailment_by_type(/datum/ailment/disability/memetic_madness)) ..() return else H.contract_memetic_madness(src) if (!original_owner) original_owner = H return MouseDrop(over_object, src_location, over_location) if(!ishuman(usr) || !usr:find_ailment_by_type(/datum/ailment/disability/memetic_madness)) boutput(usr, "You can't seem to find the latch. Maybe you need to examine it more thoroughly?") return return ..() attack_hand(mob/user as mob) if (src.loc == user) if(!ishuman(user) || !user:find_ailment_by_type(/datum/ailment/disability/memetic_madness)) boutput(user, "You can't seem to find the latch. Maybe you need to examine it more thoroughly?") return return ..() attackby(obj/item/W as obj, mob/user as mob) if(!ishuman(user) || !user:find_ailment_by_type(/datum/ailment/disability/memetic_madness)) boutput(user, "You can't seem to find the latch to open this. Maybe you need to examine it more thoroughly?") return if (src.contents.len >= 7) return if (((istype(W, /obj/item/storage) && W.w_class > 2) || src.loc == W)) return if(istype(W, /obj/item/grab)) // It will devour people! It's an evil thing! var/obj/item/grab/G = W if(!G.affecting) return if(!G.affecting.stat && !G.affecting.restrained() && !G.affecting.weakened) boutput(user, "They're moving too much to feed to His Grace!") return user.visible_message("[user] is trying to feed [G.affecting] to [src]!") if(!do_mob(user, G.affecting, 30)) return G.affecting.set_loc(src) user.visible_message("[user] has fed [G.affecting] to [src]!") src.consume(G.affecting, G) boutput(user, "You have done well...") src.force += 5 src.throwforce += 5 return return ..() proc/consume(mob/M as mob, var/obj/item/grab/G) if (!M) return src.hunger = 0 src.hunger_message_level = 0 playsound(src.loc, pick("sound/misc/burp_alien.ogg"), 50, 0) //Neatly sort everything they have into handy little boxes. var/obj/item/storage/box/per_person = new per_person.set_loc(src) var/obj/item/storage/box/Gcontents = new Gcontents.set_loc(per_person) per_person.name = "Box-'[M.real_name]'" for(var/obj/item/looted in M) if(Gcontents.contents.len >= 7) Gcontents = new Gcontents.set_loc(per_person) if(istype(looted, /obj/item/implant)) continue M.u_equip(looted) if (looted == src) src.layer = initial(src.layer) src.set_loc(get_turf(M)) continue if (looted) looted.set_loc(Gcontents) looted.layer = initial(looted.layer) looted.dropped(M) M.ghostize() var/we_need_to_die = (M == original_owner) var/mob/dead_jerk = M spawn(5) if(dead_jerk) qdel(dead_jerk) if (G) qdel(G) if (we_need_to_die) new /obj/item/storage/toolbox/emergency {name = "artistic toolbox"; desc = "It looks a lot duller than it used to."; icon_state = "green"; item_state = "toolbox_green";} (get_turf(src)) qdel(src) return disposing() for(var/mob/M in src) //Release trapped dudes... M.set_loc(get_turf(src)) src.visible_message("[M] bursts out of [src]!") for(var/datum/ailment_data/A in src.servantlinks) //Remove the plague... if (istype(A.master,/datum/ailment/disability/memetic_madness/)) A.dispose() break if (servantlinks) servantlinks.len = 0 servantlinks = null src.visible_message("[src] screams!") playsound(src.loc,"sound/effects/screech.ogg", 100, 1) ..() return hear_talk(var/mob/living/carbon/speaker, messages, real_name, lang_id) if(!speaker || !messages) return if(src.loc != speaker) return for(var/datum/ailment_data/A in src.servantlinks) var/mob/living/M = A.affected_mob if(!M || M == speaker) continue boutput(M, "[messages[1]]") return /mob/living/proc/contract_memetic_madness(var/obj/item/storage/toolbox/memetic/newprogenitor) if(src.find_ailment_by_type(/datum/ailment/disability/memetic_madness)) return src.resistances -= /datum/ailment/disability/memetic_madness // just going to have to set it up manually i guess var/datum/ailment_data/memetic_madness/AD = new /datum/ailment_data/memetic_madness if(istype(newprogenitor,/obj/item/storage/toolbox/memetic/)) AD.progenitor = newprogenitor src.ailments += AD AD.affected_mob = src newprogenitor.servantlinks.Add(AD) newprogenitor.force += 4 newprogenitor.throwforce += 4 else qdel(AD) return var/acount = 0 var/amax = rand(10,15) var/screamstring = null var/asize = 1 while(acount <= amax) screamstring += "a" if(acount > (amax/2)) asize-- else asize++ acount++ src.playsound_local(src.loc,"sound/effects/screech.ogg", 100, 1) shake_camera(src, 20, 1) boutput(src, "[screamstring]") boutput(src, "His Grace accepts thee, spread His will! All who look close to the Enlightened may share His gifts.") return /* * MEMETIC DISEASE */ /datum/ailment_data/memetic_madness var/obj/item/storage/toolbox/memetic/progenitor = null stage_prob = 8 New() master = get_disease_from_path(/datum/ailment/disability/memetic_madness) stage_act() if (!istype(master,/datum/ailment/) || !src.progenitor) affected_mob.ailments -= src qdel(src) return if(stage > master.max_stages) stage = master.max_stages if(prob(stage_prob) && stage < master.max_stages) stage++ master.stage_act(affected_mob,src,progenitor) return /datum/ailment/disability/memetic_madness name = "Memetic Kill Agent" cure = "Unknown" affected_species = list("Human") max_stages = 4 stage_prob = 8 stage_act(var/mob/living/affected_mob,var/datum/ailment_data/D,var/obj/item/storage/toolbox/memetic/progenitor) if (..()) return if(progenitor in affected_mob.contents) if(affected_mob.get_oxygen_deprivation()) affected_mob.take_oxygen_deprivation(-5) affected_mob:HealDamage("All", 12, 12) if(affected_mob.get_toxin_damage()) affected_mob.take_toxin_damage(-5) if(affected_mob:stunned) affected_mob:stunned = 0 if(affected_mob:weakened) affected_mob:weakened = 0 if(affected_mob:paralysis) affected_mob:paralysis = 0 affected_mob.dizziness = max(0,affected_mob.dizziness-10) affected_mob:drowsyness = max(0,affected_mob:drowsyness-10) affected_mob:sleeping = 0 D.stage = 1 switch (progenitor.hunger) if (10 to 60) if (progenitor.hunger_message_level < 1) progenitor.hunger_message_level = 1 boutput(affected_mob, "Feed Me the unclean ones...They will be purified...") if (61 to 120) if (progenitor.hunger_message_level < 2) progenitor.hunger_message_level = 2 boutput(affected_mob, "I hunger for the flesh of the impure...") if (121 to 210) if (prob(10) && progenitor.hunger_message_level < 3) progenitor.hunger_message_level = 3 boutput(affected_mob, "The hunger of Your Master grows with every passing moment. Feed Me at once.") if (230 to 399) if (progenitor.hunger_message_level < 4) progenitor.hunger_message_level = 4 boutput(affected_mob, "His Grace starves in your hands. Feed Me the unclean or suffer.") if (300 to INFINITY) affected_mob.visible_message("[progenitor] consumes [affected_mob] whole!") progenitor.consume(affected_mob) return progenitor.hunger += min(max((progenitor.force / 10), 1), 10) else if(D.stage == 4) if(get_dist(get_turf(progenitor),src) <= 7) D.stage = 1 return if(prob(4)) boutput(affected_mob, "We are too far from His Grace...") affected_mob.take_toxin_damage(5) affected_mob.updatehealth() else if(prob(6)) boutput(affected_mob, "You feel weak.") random_brute_damage(affected_mob, 5) if (ismob(progenitor.loc)) progenitor.hunger++ return /* disposing() if(src.affected_mob) src.affected_mob.playsound_local(src.affected_mob.loc,'sound/effects/screech.ogg', 100, 1) boutput(src.affected_mob, "NOOOO") src.affected_mob.paralysis = 10 if (src.affected_mob.ailments) src.affected_mob.ailments -= src src.affected_mob = null src.progenitor = null ..() */ /* * His Grace for Dummies */ /obj/item/paper/memetic_manual name = "paper- 'So You Want to Worship His Grace'" info = {"