/obj/item/weapon/storage/toolbox name = "toolbox" desc = "Danger. Very robust." icon_state = "red" item_state = "toolbox_red" flags = CONDUCT force = 12 throwforce = 12 throw_speed = 2 throw_range = 7 w_class = WEIGHT_CLASS_BULKY materials = list(MAT_METAL = 500) origin_tech = "combat=1;engineering=1" attack_verb = list("robusted") hitsound = 'sound/weapons/smash.ogg' /obj/item/weapon/storage/toolbox/suicide_act(mob/user) user.visible_message("[user] robusts [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") return (BRUTELOSS) /obj/item/weapon/storage/toolbox/emergency name = "emergency toolbox" icon_state = "red" item_state = "toolbox_red" /obj/item/weapon/storage/toolbox/emergency/New() ..() new /obj/item/weapon/crowbar/red(src) new /obj/item/weapon/weldingtool/mini(src) new /obj/item/weapon/extinguisher/mini(src) if(prob(50)) new /obj/item/device/flashlight(src) else new /obj/item/device/flashlight/flare(src) new /obj/item/device/radio/off(src) /obj/item/weapon/storage/toolbox/emergency/old name = "rusty red toolbox" item_state = "toolbox_red_old" /obj/item/weapon/storage/toolbox/mechanical name = "mechanical toolbox" icon_state = "blue" item_state = "toolbox_blue" /obj/item/weapon/storage/toolbox/mechanical/New() ..() new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool(src) new /obj/item/weapon/crowbar(src) new /obj/item/device/analyzer(src) new /obj/item/weapon/wirecutters(src) /obj/item/weapon/storage/toolbox/mechanical/old name = "rusty blue toolbox" item_state = "toolbox_blue_old" /obj/item/weapon/storage/toolbox/electrical name = "electrical toolbox" icon_state = "yellow" item_state = "toolbox_yellow" /obj/item/weapon/storage/toolbox/electrical/New() ..() var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white") new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wirecutters(src) new /obj/item/device/t_scanner(src) new /obj/item/weapon/crowbar(src) new /obj/item/stack/cable_coil(src,30,pickedcolor) new /obj/item/stack/cable_coil(src,30,pickedcolor) if(prob(5)) new /obj/item/clothing/gloves/color/yellow(src) else new /obj/item/stack/cable_coil(src,30,pickedcolor) /obj/item/weapon/storage/toolbox/syndicate name = "suspicious looking toolbox" icon_state = "syndicate" item_state = "toolbox_syndi" origin_tech = "combat=2;syndicate=1;engineering=2" silent = 1 force = 15 throwforce = 18 /obj/item/weapon/storage/toolbox/syndicate/New() ..() new /obj/item/weapon/screwdriver/nuke(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool/largetank(src) new /obj/item/weapon/crowbar/red(src) new /obj/item/weapon/wirecutters(src, "red") new /obj/item/device/multitool(src) new /obj/item/clothing/gloves/combat(src) /obj/item/weapon/storage/toolbox/drone name = "mechanical toolbox" icon_state = "blue" item_state = "toolbox_blue" /obj/item/weapon/storage/toolbox/drone/New() ..() var/pickedcolor = pick("red","yellow","green","blue","pink","orange","cyan","white") new /obj/item/weapon/screwdriver(src) new /obj/item/weapon/wrench(src) new /obj/item/weapon/weldingtool(src) new /obj/item/weapon/crowbar(src) new /obj/item/stack/cable_coil(src,30,pickedcolor) new /obj/item/weapon/wirecutters(src) new /obj/item/device/multitool(src) /obj/item/weapon/storage/toolbox/brass name = "brass box" desc = "A huge brass box with several indentations in its surface." icon_state = "brassbox" w_class = WEIGHT_CLASS_HUGE max_w_class = WEIGHT_CLASS_NORMAL max_combined_w_class = 28 storage_slots = 28 slowdown = 1 flags = HANDSLOW attack_verb = list("robusted", "crushed", "smashed") var/proselytizer_type = /obj/item/clockwork/clockwork_proselytizer/scarab /obj/item/weapon/storage/toolbox/brass/prefilled/New() ..() new proselytizer_type(src) new /obj/item/weapon/screwdriver/brass(src) new /obj/item/weapon/wirecutters/brass(src) new /obj/item/weapon/wrench/brass(src) new /obj/item/weapon/crowbar/brass(src) new /obj/item/weapon/weldingtool/experimental/brass(src) /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar var/slab_type = /obj/item/clockwork/slab/scarab /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar/New() ..() new slab_type(src) /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar/admin slab_type = /obj/item/clockwork/slab/debug proselytizer_type = /obj/item/clockwork/clockwork_proselytizer/scarab/debug /obj/item/weapon/storage/toolbox/artistic name = "artistic toolbox" desc = "A toolbox painted bright green. Why anyone would store art supplies in a toolbox is beyond you, but it has plenty of extra space." icon_state = "green" item_state = "artistic_toolbox" max_combined_w_class = 20 storage_slots = 10 w_class = 5 //Holds more than a regular toolbox! /obj/item/weapon/storage/toolbox/artistic/New() ..() new/obj/item/weapon/storage/crayons(src) new/obj/item/weapon/crowbar(src) new/obj/item/stack/cable_coil/red(src) new/obj/item/stack/cable_coil/yellow(src) new/obj/item/stack/cable_coil/blue(src) new/obj/item/stack/cable_coil/green(src) new/obj/item/stack/cable_coil/pink(src) new/obj/item/stack/cable_coil/orange(src) new/obj/item/stack/cable_coil/cyan(src) new/obj/item/stack/cable_coil/white(src) #define HIS_GRACE_SATIATED 0 //He hungers not. If bloodthirst is set to this, His Grace is asleep. #define HIS_GRACE_PECKISH 30 //Slightly hungry. Slightly increased damage and nothing else. #define HIS_GRACE_HUNGRY 60 //Getting closer. Increased danage and slight healing. It also starts eating anyone around it if it's left on the ground. #define HIS_GRACE_FAMISHED 90 //Dangerous. Highly increased damage, good healing, and stun resist. It also becomes nodrop at this point. #define HIS_GRACE_STARVING 110 //Incredibly close to breaking loose. Extreme damage and healing, and stun immunity. #define HIS_GRACE_CONSUME_OWNER 120 //You're dead, kiddo. The toolbox consumes its owner at this point and resets to zero. #define HIS_GRACE_FALL_ASLEEP 150 //If it reaches this point, it falls asleep and resets to zero. //His Grace is a very special weapon granted only to traitor chaplains. //When awakened through sacrifice, it thirsts for blood and begins ticking a "bloodthirst" counter. //As His Grace grows hungrier, it grants its wielder various benefits. //If the wielder fails to feed His Grace in time, it will devour them. //Leaving His Grace alone for some time will reset its timer and put it to sleep. //Using His Grace effectively is a delicate balancing act of keeping it hungry enough to induce benefits but sated enough to let you live. /obj/item/weapon/storage/toolbox/artistic/his_grace name = "artistic toolbox" desc = "A toolbox painted bright green. Looking at it makes you feel uneasy." origin_tech = "combat=4;engineering=4;syndicate=2" var/awakened = 0 var/bloodthirst = HIS_GRACE_SATIATED var/victims = 0 var/list/warning_messages = list("peckish", "hungry", "famished", "starving", "consume") //Messages that have NOT been shown /obj/item/weapon/storage/toolbox/artistic/his_grace/Destroy() for(var/mob/living/L in src) L.forceMove(get_turf(src)) return ..() /obj/item/weapon/storage/toolbox/artistic/his_grace/attack_self(mob/living/user) if(!awakened) user << "[src] begins to vibrate..." addtimer(CALLBACK(src, .proc/awaken), 50) /obj/item/weapon/storage/toolbox/artistic/his_grace/attack(mob/living/M, mob/user) if(awakened && M.stat) consume(M) else ..() /obj/item/weapon/storage/toolbox/artistic/his_grace/examine(mob/user) ..() if(awakened) if(victims) user << "You hear the distant murmuring of [victims] victims to [src]." switch(bloodthirst) if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH) user << "[src] isn't very hungry. Not yet." if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY) user << "[src] would like a snack." if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED) user << "[src] is quite hungry now..." if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING) user << "[src] is openly salivating at the sight of you. Be careful." if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER) user << "You walk a fine line. [src] is very close to devouring you." if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP) user << "[src] is shaking violently and staring directly at you." /obj/item/weapon/storage/toolbox/artistic/his_grace/relaymove(mob/living/user) //Allows changelings, etc. to climb out of the box after they revive user.forceMove(get_turf(src)) user.visible_message("[user] scrambles out of [src]!", "You climb out of [src]!") /obj/item/weapon/storage/toolbox/artistic/his_grace/process() if(!awakened) return adjust_bloodthirst(1 + victims) //Maybe adjust this? change_phases() if(ishuman(loc)) var/mob/living/carbon/human/master = loc switch(bloodthirst) //Handles benefits outside of stun absorbs, which are in change_phases() if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED) master.adjustBruteLoss(-1) master.adjustFireLoss(-1) master.adjustToxLoss(-0.5) master.adjustOxyLoss(-5) master.adjustCloneLoss(-0.5) if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING) master.adjustBruteLoss(-2) master.adjustFireLoss(-2) master.adjustToxLoss(-1) master.adjustOxyLoss(-10) master.adjustCloneLoss(-1) master.AdjustStunned(-1) master.AdjustWeakened(-1) if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER) master.adjustBruteLoss(-20) //The biggest danger at this point is the toolbox itself master.adjustFireLoss(-20) master.adjustToxLoss(-10) master.setOxyLoss(0) master.adjustCloneLoss(-5) master.add_stun_absorption("his_grace", 15, 1, null, null, "[src] shields them from harm!") if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP) master.visible_message("[src] turns on its master!", "[src] turns on you!") playsound(src, 'sound/effects/tendril_destroyed.ogg', 100, 0) master.Weaken(3) master.adjustBruteLoss(100) playsound(master, 'sound/misc/desceration-03.ogg', 100, ) playsound(master, 'sound/effects/splat.ogg', 100, 0) master.emote("scream") consume(master) //Y O U H A V E F A I L E D M E if(HIS_GRACE_FALL_ASLEEP to INFINITY) drowse() else if(bloodthirst >= HIS_GRACE_CONSUME_OWNER) if(bloodthirst >= HIS_GRACE_FALL_ASLEEP) drowse() return for(var/mob/living/L in range(1, src)) if(L.loc == src) continue if(!L.stat) L.visible_message("[src] lunges at [L]!", "[src] lunges at you!") playsound(L, 'sound/effects/splat.ogg', 50, 1) playsound(L, 'sound/misc/desceration-01.ogg', 50, 1) L.adjustBruteLoss(force) return //Only one at a tome else consume(L) return /obj/item/weapon/storage/toolbox/artistic/his_grace/proc/awaken() //Attempts to awaken. This can only occur if organs fill the box, and gives out a global warning. if(awakened) return var/organ_count = 0 for(var/obj/item/organ/O in src) //Doesn't have to be any kind, we're not picky organ_count++ if(organ_count < 5) if(isliving(loc)) loc = get_turf(src) visible_message("[src] stops shaking. It needs more organs.") else for(var/obj/item/organ/O in src) qdel(O) //delicious flesh name = "His Grace" desc = "A bloodthirsty artefact created by a profane rite." gender = MALE visible_message("[src] begins to rattle. It thirsts.") //rattle me bones capn adjust_bloodthirst(1) awakened = 1 send_to_playing_players("HIS GRACE THIRSTS FOR BLOOD") send_to_playing_players('sound/effects/his_grace_awaken.ogg') icon_state = "green_awakened" START_PROCESSING(SSprocessing, src) /obj/item/weapon/storage/toolbox/artistic/his_grace/proc/drowse() //Falls asleep, spitting out all victims and resetting to zero. if(!awakened) return visible_message("[src] slowly stops rattling and falls still... but it still lurks in its sleep.") name = initial(name) desc = initial(desc) icon_state = initial(icon_state) gender = initial(gender) awakened = 0 victims = 0 warning_messages = initial(warning_messages) adjust_bloodthirst(-bloodthirst) STOP_PROCESSING(SSprocessing, src) send_to_playing_players("HIS GRACE HAS RETURNED TO SLUMBER") send_to_playing_players('sound/effects/pope_entry.ogg') for(var/mob/living/L in src) L.forceMove(get_turf(src)) /obj/item/weapon/storage/toolbox/artistic/his_grace/proc/adjust_bloodthirst(amt) bloodthirst = min(max(1, bloodthirst + amt), HIS_GRACE_FALL_ASLEEP) /obj/item/weapon/storage/toolbox/artistic/his_grace/proc/consume(mob/living/meal) if(!meal) return meal.adjustBruteLoss(200) meal.visible_message("[src] pulls [meal] into itself!", "[src] consumes you!") playsound(meal, 'sound/misc/desceration-02.ogg', 75, 1) playsound(src, 'sound/items/eatfood.ogg', 100, 1) meal.forceMove(src) adjust_bloodthirst(-(bloodthirst - victims)) //Never fully sated, and it starts off higher as it eats victims++ /obj/item/weapon/storage/toolbox/artistic/his_grace/proc/change_phases() switch(bloodthirst) if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH) force = 15 //Constantly keep its power low if it's this full if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY) if(is_string_in_list("peckish", warning_messages)) remove_strings_from_list("peckish", warning_messages) loc.visible_message("[src] is feeling snackish.", "[src] begins to hunger. Its damage has been increased.") force = 20 spawn(400) //To prevent spam if(src) warning_messages += "peckish" if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED) if(is_string_in_list("hungry", warning_messages)) remove_strings_from_list("hungry", warning_messages) loc.visible_message("[src] is getting hungry. Its power grows.", "You feel a sense of hunger come over you. [src]'s damage has increased.") force = 25 spawn(400) if(src) warning_messages += "hungry" if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING) if(is_string_in_list("famished", warning_messages)) remove_strings_from_list("famished", warning_messages) loc.visible_message("[src] is very hungry...", "Bloodlust overcomes you. You are now resistant to stuns.") force = 30 spawn(400) if(src) warning_messages += "famished" if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER) if(is_string_in_list("starving", warning_messages)) remove_strings_from_list("starving", warning_messages) loc.visible_message("[src] is starving!", "[src] is at its full power! Feed it quickly or you will be consumed!") force = 40 spawn(400) if(src) warning_messages += "starving"