here we go again (#2456)

This commit is contained in:
LetterJay
2017-08-24 21:24:25 -05:00
committed by kevinz000
parent c7ed043fd5
commit 188193eb61
1107 changed files with 25420 additions and 25417 deletions
+1 -1
View File
@@ -370,7 +370,7 @@
M.s_active.handle_item_insertion(src)
return TRUE
var/obj/item/weapon/storage/S = M.get_inactive_held_item()
var/obj/item/storage/S = M.get_inactive_held_item()
if(istype(S) && S.can_be_inserted(src,1)) //see if we have box in other hand
S.handle_item_insertion(src)
return TRUE
+4 -4
View File
@@ -30,8 +30,8 @@
// literally only an option for carbons though
to_chat(C, "<span class='warning'>You may not hold items while blood crawling!</span>")
return 0
var/obj/item/weapon/bloodcrawl/B1 = new(C)
var/obj/item/weapon/bloodcrawl/B2 = new(C)
var/obj/item/bloodcrawl/B1 = new(C)
var/obj/item/bloodcrawl/B2 = new(C)
B1.icon_state = "bloodhand_left"
B2.icon_state = "bloodhand_right"
C.put_in_hands(B1)
@@ -134,7 +134,7 @@
/mob/living/proc/bloodcrawl_swallow(var/mob/living/victim)
qdel(victim)
/obj/item/weapon/bloodcrawl
/obj/item/bloodcrawl
name = "blood crawl"
desc = "You are unable to hold anything while in this form."
icon = 'icons/effects/blood.dmi'
@@ -166,7 +166,7 @@
exit_blood_effect(B)
if(iscarbon(src))
var/mob/living/carbon/C = src
for(var/obj/item/weapon/bloodcrawl/BC in C)
for(var/obj/item/bloodcrawl/BC in C)
BC.flags_1 = null
qdel(BC)
qdel(src.holder)
@@ -16,10 +16,10 @@
verb_say = "hisses"
initial_language_holder = /datum/language_holder/alien
bubble_icon = "alien"
type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno
type_of_meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
var/nightvision = 1
var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie
var/obj/item/card/id/wear_id = null // Fix for station bounced radios -- Skie
var/has_fine_manipulation = 0
var/move_delay_add = 0 // movement delay to add
@@ -2,7 +2,7 @@
name = "alien"
icon_state = "alien"
pass_flags = PASSTABLE
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 5, /obj/item/stack/sheet/animalhide/xeno = 1)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 5, /obj/item/stack/sheet/animalhide/xeno = 1)
possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM)
limb_destroyer = 1
var/obj/item/r_store = null
@@ -9,7 +9,7 @@
mob_size = MOB_SIZE_LARGE
layer = LARGE_MOB_LAYER //above most mobs, but below speechbubbles
pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper.
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 20, /obj/item/stack/sheet/animalhide/xeno = 3)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 20, /obj/item/stack/sheet/animalhide/xeno = 3)
var/alt_inhands_file = 'icons/mob/alienqueen.dmi'
+7 -7
View File
@@ -51,7 +51,7 @@
var/obj/item/item_in_hand = src.get_active_held_item()
if(item_in_hand) //this segment checks if the item in your hand is twohanded.
var/obj/item/weapon/twohanded/TH = item_in_hand
var/obj/item/twohanded/TH = item_in_hand
if(istype(TH))
if(TH.wielded == 1)
to_chat(usr, "<span class='warning'>Your other hand is too busy holding [TH]</span>")
@@ -198,7 +198,7 @@
dat += "<BR><B>Back:</B> <A href='?src=\ref[src];item=[slot_back]'>[back ? back : "Nothing"]</A>"
if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank))
if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank))
dat += "<BR><A href='?src=\ref[src];internal=1'>[internal ? "Disable Internals" : "Set Internals"]</A>"
if(handcuffed)
@@ -220,14 +220,14 @@
if(href_list["internal"])
var/slot = text2num(href_list["internal"])
var/obj/item/ITEM = get_item_by_slot(slot)
if(ITEM && istype(ITEM, /obj/item/weapon/tank) && wear_mask && (wear_mask.flags_1 & MASKINTERNALS_1))
if(ITEM && istype(ITEM, /obj/item/tank) && wear_mask && (wear_mask.flags_1 & MASKINTERNALS_1))
visible_message("<span class='danger'>[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name].</span>", \
"<span class='userdanger'>[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name].</span>")
if(do_mob(usr, src, POCKET_STRIP_DELAY))
if(internal)
internal = null
update_internals_hud_icon(0)
else if(ITEM && istype(ITEM, /obj/item/weapon/tank))
else if(ITEM && istype(ITEM, /obj/item/tank))
if((wear_mask && (wear_mask.flags_1 & MASKINTERNALS_1)) || getorganslot("breathing_tube"))
internal = ITEM
update_internals_hud_icon(1)
@@ -321,7 +321,7 @@
/mob/living/carbon/proc/uncuff()
if (handcuffed)
var/obj/item/weapon/W = handcuffed
var/obj/item/W = handcuffed
handcuffed = null
if (buckled && buckled.buckle_requires_restraints)
buckled.unbuckle_mob(src)
@@ -336,7 +336,7 @@
W.plane = initial(W.plane)
changeNext_move(0)
if (legcuffed)
var/obj/item/weapon/W = legcuffed
var/obj/item/W = legcuffed
legcuffed = null
update_inv_legcuffed()
if (client)
@@ -732,7 +732,7 @@
regenerate_limbs()
regenerate_organs()
handcuffed = initial(handcuffed)
for(var/obj/item/weapon/restraints/R in contents) //actually remove cuffs from inventory
for(var/obj/item/restraints/R in contents) //actually remove cuffs from inventory
qdel(R)
update_handcuffed()
if(reagents)
@@ -17,7 +17,7 @@
var/obj/item/back = null
var/obj/item/clothing/mask/wear_mask = null
var/obj/item/clothing/neck/wear_neck = null
var/obj/item/weapon/tank/internal = null
var/obj/item/tank/internal = null
var/obj/item/head = null
var/obj/item/gloves = null //only used by humans
@@ -33,7 +33,7 @@
var/co2overloadtime = null
var/temperature_resistance = T0C+75
has_limbs = 1
var/obj/item/weapon/reagent_containers/food/snacks/meat/slab/type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab
var/obj/item/reagent_containers/food/snacks/meat/slab/type_of_meat = /obj/item/reagent_containers/food/snacks/meat/slab
var/list/obj/effect/proc_holder/alien/abilities = list()
var/gib_type = /obj/effect/decal/cleanable/blood/gibs
@@ -42,7 +42,7 @@
if(istype(T) && movement_dir && T.allow_thrust(0.01))
return 1
var/obj/item/weapon/tank/jetpack/J = get_jetpack()
var/obj/item/tank/jetpack/J = get_jetpack()
if(istype(J) && (movement_dir || J.stabilizers) && J.allow_thrust(0.01, src))
return 1
@@ -77,7 +77,7 @@
//handcuffed?
if(handcuffed)
if(istype(handcuffed, /obj/item/weapon/restraints/handcuffs/cable))
if(istype(handcuffed, /obj/item/restraints/handcuffs/cable))
msg += "<span class='warning'>[t_He] [t_is] [icon2html(handcuffed, user)] restrained with cable!</span>\n"
else
msg += "<span class='warning'>[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!</span>\n"
+10 -10
View File
@@ -145,7 +145,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
dat += "<tr><td>&nbsp;</td></tr>"
dat += "<tr><td><B>Back:</B></td><td><A href='?src=\ref[src];item=[slot_back]'>[(back && !(back.flags_1&ABSTRACT_1)) ? back : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(back, /obj/item/weapon/tank))
if(has_breathable_mask && istype(back, /obj/item/tank))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_back]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr><tr><td>&nbsp;</td></tr>"
@@ -177,7 +177,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
dat += "<tr><td><B>Exosuit:</B></td><td><A href='?src=\ref[src];item=[slot_wear_suit]'>[(wear_suit && !(wear_suit.flags_1&ABSTRACT_1)) ? wear_suit : "<font color=grey>Empty</font>"]</A></td></tr>"
if(wear_suit)
dat += "<tr><td>&nbsp;&#8627;<B>Suit Storage:</B></td><td><A href='?src=\ref[src];item=[slot_s_store]'>[(s_store && !(s_store.flags_1&ABSTRACT_1)) ? s_store : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(s_store, /obj/item/weapon/tank))
if(has_breathable_mask && istype(s_store, /obj/item/tank))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_s_store]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr>"
else
@@ -204,7 +204,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
dat += "<tr><td><font color=grey>&nbsp;&#8627;<B>Belt:</B></font></td></tr>"
else
dat += "<tr><td>&nbsp;&#8627;<B>Belt:</B></td><td><A href='?src=\ref[src];item=[slot_belt]'>[(belt && !(belt.flags_1&ABSTRACT_1)) ? belt : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(belt, /obj/item/weapon/tank))
if(has_breathable_mask && istype(belt, /obj/item/tank))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_belt]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr>"
dat += "<tr><td>&nbsp;&#8627;<B>Pockets:</B></td><td><A href='?src=\ref[src];pockets=left'>[(l_store && !(l_store.flags_1&ABSTRACT_1)) ? "Left (Full)" : "<font color=grey>Left (Empty)</font>"]</A>"
@@ -315,7 +315,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
return
else if(!istype(H.glasses, /obj/item/clothing/glasses/hud) && !istype(H.getorganslot("eye_hud"), /obj/item/organ/cyberimp/eyes/hud/medical))
return
var/obj/item/weapon/photo/P = null
var/obj/item/photo/P = null
if(href_list["photo_front"])
P = R.fields["photo_front"]
else if(href_list["photo_side"])
@@ -569,23 +569,23 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
if(lasercolor == "b")//Lasertag turrets target the opposing team, how great is that? -Sieve
if(istype(wear_suit, /obj/item/clothing/suit/redtag))
threatcount += 4
if(is_holding_item_of_type(/obj/item/weapon/gun/energy/laser/redtag))
if(is_holding_item_of_type(/obj/item/gun/energy/laser/redtag))
threatcount += 4
if(istype(belt, /obj/item/weapon/gun/energy/laser/redtag))
if(istype(belt, /obj/item/gun/energy/laser/redtag))
threatcount += 2
if(lasercolor == "r")
if(istype(wear_suit, /obj/item/clothing/suit/bluetag))
threatcount += 4
if(is_holding_item_of_type(/obj/item/weapon/gun/energy/laser/bluetag))
if(is_holding_item_of_type(/obj/item/gun/energy/laser/bluetag))
threatcount += 4
if(istype(belt, /obj/item/weapon/gun/energy/laser/bluetag))
if(istype(belt, /obj/item/gun/energy/laser/bluetag))
threatcount += 2
return threatcount
//Check for ID
var/obj/item/weapon/card/id/idcard = get_idcard()
var/obj/item/card/id/idcard = get_idcard()
if( (judgement_criteria & JUDGE_IDCHECK) && !idcard && name=="Unknown")
threatcount += 4
@@ -624,7 +624,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
threatcount -= 1
//Agent cards lower threatlevel.
if(istype(idcard, /obj/item/weapon/card/id/syndicate))
if(istype(idcard, /obj/item/card/id/syndicate))
threatcount -= 2
return threatcount
@@ -12,7 +12,7 @@
//gets assignment from ID or ID inside PDA or PDA itself
//Useful when player do something with computers
/mob/living/carbon/human/proc/get_assignment(if_no_id = "No id", if_no_job = "No job")
var/obj/item/weapon/card/id/id = get_idcard()
var/obj/item/card/id/id = get_idcard()
if(id)
. = id.assignment
else
@@ -27,7 +27,7 @@
//gets name from ID or ID inside PDA or PDA itself
//Useful when player do something with computers
/mob/living/carbon/human/proc/get_authentification_name(if_no_id = "Unknown")
var/obj/item/weapon/card/id/id = get_idcard()
var/obj/item/card/id/id = get_idcard()
if(id)
return id.registered_name
var/obj/item/device/pda/pda = wear_id
@@ -63,9 +63,9 @@
//gets name from ID or PDA itself, ID inside PDA doesn't matter
//Useful when player is being seen by other mobs
/mob/living/carbon/human/proc/get_id_name(if_no_id = "Unknown")
var/obj/item/weapon/storage/wallet/wallet = wear_id
var/obj/item/storage/wallet/wallet = wear_id
var/obj/item/device/pda/pda = wear_id
var/obj/item/weapon/card/id/id = wear_id
var/obj/item/card/id/id = wear_id
var/obj/item/device/modular_computer/tablet/tablet = wear_id
if(istype(wallet))
id = wallet.front_id
@@ -74,7 +74,7 @@
else if(istype(pda))
. = pda.owner
else if(istype(tablet))
var/obj/item/weapon/computer_hardware/card_slot/card_slot = tablet.all_components[MC_CARD]
var/obj/item/computer_hardware/card_slot/card_slot = tablet.all_components[MC_CARD]
if(card_slot && (card_slot.stored_card2 || card_slot.stored_card))
if(card_slot.stored_card2) //The second card is the one used for authorization in the ID changing program, so we prioritize it here for consistency
. = card_slot.stored_card2.registered_name
@@ -114,7 +114,7 @@
/mob/living/carbon/human/can_track(mob/living/user)
if(wear_id && istype(wear_id.GetID(), /obj/item/weapon/card/id/syndicate))
if(wear_id && istype(wear_id.GetID(), /obj/item/card/id/syndicate))
return 0
if(istype(head, /obj/item/clothing/head))
var/obj/item/clothing/head/hat = head
@@ -143,7 +143,7 @@
var/protection = (prot["head"] + prot["arms"] + prot["feet"] + prot["legs"] + prot["groin"] + prot["chest"] + prot["hands"])/7
return protection
/mob/living/carbon/human/can_use_guns(var/obj/item/weapon/G)
/mob/living/carbon/human/can_use_guns(var/obj/item/G)
. = ..()
if(G.trigger_guard == TRIGGER_GUARD_NORMAL)
@@ -45,13 +45,13 @@
var/list/blacklistItems = list() // items we should be ignoring
var/maxStepsTick = 6 // step as many times as we can per frame
//Job and mind data
var/obj/item/weapon/card/id/MYID
var/obj/item/weapon/card/id/RPID // the "real" idea they use
var/obj/item/card/id/MYID
var/obj/item/card/id/RPID // the "real" idea they use
var/obj/item/device/pda/MYPDA
var/obj/item/main_hand
var/obj/item/other_hand
var/TRAITS = 0
var/obj/item/weapon/card/id/Path_ID
var/obj/item/card/id/Path_ID
var/datum/job/myjob
var/list/myPath = list()
faction = list("synth")
@@ -249,7 +249,7 @@
T.loc = pick(get_area_turfs(T.job2area(T.myjob)))
/mob/living/carbon/human/interactive/proc/doSetup()
Path_ID = new /obj/item/weapon/card/id(src)
Path_ID = new /obj/item/card/id(src)
var/datum/job/captain/C = new/datum/job/captain
Path_ID.access = C.get_access()
@@ -286,34 +286,34 @@
if("Assistant")
favoured_types = list(/obj/item/clothing, /obj/item/weapon)
if("Captain","Head of Personnel")
favoured_types = list(/obj/item/clothing, /obj/item/weapon/stamp/captain, /obj/item/weapon/disk/nuclear)
favoured_types = list(/obj/item/clothing, /obj/item/stamp/captain, /obj/item/disk/nuclear)
if("Cook")
favoured_types = list(/obj/item/weapon/reagent_containers/food, /obj/item/weapon/kitchen)
favoured_types = list(/obj/item/reagent_containers/food, /obj/item/kitchen)
functions += "souschef"
restrictedJob = 1
if("Bartender")
favoured_types = list(/obj/item/weapon/reagent_containers/food, /obj/item/weapon/kitchen)
favoured_types = list(/obj/item/reagent_containers/food, /obj/item/kitchen)
functions += "bartend"
restrictedJob = 1
if("Station Engineer","Chief Engineer","Atmospheric Technician")
favoured_types = list(/obj/item/stack, /obj/item/weapon, /obj/item/clothing)
if("Chief Medical Officer","Medical Doctor","Chemist","Virologist","Geneticist")
favoured_types = list(/obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/storage/firstaid, /obj/item/stack/medical, /obj/item/weapon/reagent_containers/syringe)
favoured_types = list(/obj/item/reagent_containers/glass/beaker, /obj/item/storage/firstaid, /obj/item/stack/medical, /obj/item/reagent_containers/syringe)
functions += "healpeople"
if("Research Director","Scientist","Roboticist")
favoured_types = list(/obj/item/weapon/reagent_containers/glass/beaker, /obj/item/stack, /obj/item/weapon/reagent_containers)
favoured_types = list(/obj/item/reagent_containers/glass/beaker, /obj/item/stack, /obj/item/reagent_containers)
if("Head of Security","Warden","Security Officer","Detective")
favoured_types = list(/obj/item/clothing, /obj/item/weapon, /obj/item/weapon/restraints)
favoured_types = list(/obj/item/clothing, /obj/item/weapon, /obj/item/restraints)
if("Janitor")
favoured_types = list(/obj/item/weapon/mop, /obj/item/weapon/reagent_containers/glass/bucket, /obj/item/weapon/reagent_containers/spray/cleaner, /obj/effect/decal/cleanable)
favoured_types = list(/obj/item/mop, /obj/item/reagent_containers/glass/bucket, /obj/item/reagent_containers/spray/cleaner, /obj/effect/decal/cleanable)
functions += "dojanitor"
if("Clown")
favoured_types = list(/obj/item/weapon/soap, /obj/item/weapon/reagent_containers/food/snacks/grown/banana, /obj/item/weapon/grown/bananapeel)
favoured_types = list(/obj/item/soap, /obj/item/reagent_containers/food/snacks/grown/banana, /obj/item/grown/bananapeel)
functions += "clowning"
if("Mime")
functions -= "chatter"
if("Botanist")
favoured_types = list(/obj/machinery/hydroponics, /obj/item/weapon/reagent_containers, /obj/item/weapon)
favoured_types = list(/obj/machinery/hydroponics, /obj/item/reagent_containers, /obj/item/weapon)
functions += "botany"
restrictedJob = 1
else
@@ -505,7 +505,7 @@
/mob/living/carbon/human/interactive/proc/insert_into_backpack()
var/list/slots = list ("left pocket" = slot_l_store,"right pocket" = slot_r_store,"left hand" = slot_hands,"right hand" = slot_hands)
var/obj/item/I = get_item_by_slot(pick(slots))
var/obj/item/weapon/storage/BP = get_item_by_slot(slot_back)
var/obj/item/storage/BP = get_item_by_slot(slot_back)
if(back && BP && I)
if(BP.can_be_inserted(I,0))
BP.handle_item_insertion(I,0)
@@ -634,7 +634,7 @@
//---------ITEMS
if(isitem(TARGET))
if(istype(TARGET, /obj/item/weapon))
var/obj/item/weapon/W = TARGET
var/obj/item/W = TARGET
if(W.force >= best_force || prob((FUZZY_CHANCE_LOW+FUZZY_CHANCE_HIGH)/2))
if(!get_item_for_held_index(1) || !get_item_for_held_index(2))
put_in_hands(W)
@@ -660,7 +660,7 @@
if(istype(TARGET, /obj/structure))
var/obj/structure/STR = TARGET
if(main_hand)
var/obj/item/weapon/W = main_hand
var/obj/item/W = main_hand
STR.attackby(W, src)
else
STR.attack_hand(src)
@@ -960,7 +960,7 @@
inactivity_period = 0
customEmote("[src]'s chest closes, hiding their insides.")
if(SNPC_PSYCHO)
var/choice = pick(typesof(/obj/item/weapon/grenade/chem_grenade) - /obj/item/weapon/grenade/chem_grenade)
var/choice = pick(typesof(/obj/item/grenade/chem_grenade) - /obj/item/grenade/chem_grenade)
new choice(src)
@@ -976,13 +976,13 @@
var/list/allContents = getAllContents()
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/internalBeaker = locate(/obj/item/weapon/reagent_containers/glass/beaker/bluespace) in allContents
var/obj/item/weapon/storage/bag/plants/internalBag = locate(/obj/item/weapon/storage/bag/plants) in allContents
var/obj/item/reagent_containers/glass/beaker/bluespace/internalBeaker = locate(/obj/item/reagent_containers/glass/beaker/bluespace) in allContents
var/obj/item/storage/bag/plants/internalBag = locate(/obj/item/storage/bag/plants) in allContents
if(!internalBag)
internalBag = new/obj/item/weapon/storage/bag/plants(src)
internalBag = new/obj/item/storage/bag/plants(src)
if(!internalBeaker)
internalBeaker = new/obj/item/weapon/reagent_containers/glass/beaker/bluespace(src)
internalBeaker = new/obj/item/reagent_containers/glass/beaker/bluespace(src)
internalBeaker.name = "Grow-U-All Super Spray"
if(internalBeaker && internalBag)
@@ -1049,7 +1049,7 @@
if(change)
HP.attackby(internalBeaker,src)
var/obj/item/weapon/reagent_containers/food/snacks/grown/GF = locate(/obj/item/weapon/reagent_containers/food/snacks/grown) in view(12,src)
var/obj/item/reagent_containers/food/snacks/grown/GF = locate(/obj/item/reagent_containers/food/snacks/grown) in view(12,src)
if(GF)
if(!Adjacent(GF))
tryWalk(get_turf(GF))
@@ -1084,7 +1084,7 @@
var/mob/living/carbon/human/serveTarget
for(var/mob/living/carbon/human/H in rangeCheck)
if(!locate(/obj/item/weapon/reagent_containers/food/drinks) in orange(1,H))
if(!locate(/obj/item/reagent_containers/food/drinks) in orange(1,H))
serveTarget = H
@@ -1095,9 +1095,9 @@
if(!Adjacent(RT))
tryWalk(get_turf(RT))
else
var/drinkChoice = pick(typesof(/obj/item/weapon/reagent_containers/food/drinks) - /obj/item/weapon/reagent_containers/food/drinks)
var/drinkChoice = pick(typesof(/obj/item/reagent_containers/food/drinks) - /obj/item/reagent_containers/food/drinks)
if(drinkChoice)
var/obj/item/weapon/reagent_containers/food/drinks/D = new drinkChoice(get_turf(src))
var/obj/item/reagent_containers/food/drinks/D = new drinkChoice(get_turf(src))
RT.attackby(D,src)
src.say("[pick("Something to wet your whistle!","Down the hatch, a tasty beverage!","One drink, coming right up!","Tasty liquid for your oral intake!","Enjoy!")]")
customEmote("[src] [pick("gibbers","drools","slobbers","claps wildly","spits")], serving up a [D]!")
@@ -1115,7 +1115,7 @@
if(retal && TARGET)
for(var/obj/item/I in allContents)
if(istype(I, /obj/item/weapon/restraints))
if(istype(I, /obj/item/restraints))
I.attack(TARGET,src) // go go bluespace restraint launcher!
inactivity_period = 25
break
@@ -1129,17 +1129,17 @@
var/mob/living/carbon/human/clownTarget
var/list/clownPriority = list()
var/obj/item/weapon/reagent_containers/spray/S = locate(/obj/item/weapon/reagent_containers/spray) in allContents
var/obj/item/reagent_containers/spray/S = locate(/obj/item/reagent_containers/spray) in allContents
if(!S)
S = new/obj/item/weapon/reagent_containers/spray(src)
S = new/obj/item/reagent_containers/spray(src)
S.amount_per_transfer_from_this = 10
for(var/mob/living/carbon/human/C in rangeCheck)
var/pranksNearby = 100
for(var/turf/open/T in orange(1,C))
for(var/obj/item/A in T)
if(istype(A, /obj/item/weapon/soap) || istype(A, /obj/item/weapon/reagent_containers/food/snacks/grown/banana) || istype(A, /obj/item/weapon/grown/bananapeel))
if(istype(A, /obj/item/soap) || istype(A, /obj/item/reagent_containers/food/snacks/grown/banana) || istype(A, /obj/item/grown/bananapeel))
pranksNearby--
if(T.wet)
pranksNearby -= 10
@@ -1159,13 +1159,13 @@
var/hasPranked = 0
for(var/A in allContents)
if(prob(smartness/2) && !hasPranked)
if(istype(A, /obj/item/weapon/soap))
if(istype(A, /obj/item/soap))
npcDrop(A)
hasPranked = 1
if(istype(A, /obj/item/weapon/reagent_containers/food/snacks/grown/banana))
var/obj/item/weapon/reagent_containers/food/snacks/B = A
if(istype(A, /obj/item/reagent_containers/food/snacks/grown/banana))
var/obj/item/reagent_containers/food/snacks/B = A
B.attack(src, src)
if(istype(A, /obj/item/weapon/grown/bananapeel))
if(istype(A, /obj/item/grown/bananapeel))
npcDrop(A)
hasPranked = 1
if(!hasPranked)
@@ -1185,12 +1185,12 @@
shouldTryHeal = 1
M = A
var/obj/item/weapon/reagent_containers/hypospray/HPS
var/obj/item/reagent_containers/hypospray/HPS
if(!locate(/obj/item/weapon/reagent_containers/hypospray) in allContents)
new/obj/item/weapon/reagent_containers/hypospray(src)
if(!locate(/obj/item/reagent_containers/hypospray) in allContents)
new/obj/item/reagent_containers/hypospray(src)
else
HPS = locate(/obj/item/weapon/reagent_containers/hypospray) in allContents
HPS = locate(/obj/item/reagent_containers/hypospray) in allContents
if(!shouldTryHeal)
shouldTryHeal = 2 // we have no stackables to use, lets use our internal hypospray instead
@@ -1222,11 +1222,11 @@
return
var/list/allContents = getAllContents()
//now with bluespace magic!
var/obj/item/weapon/reagent_containers/spray/S
if(!locate(/obj/item/weapon/reagent_containers/spray) in allContents)
new/obj/item/weapon/reagent_containers/spray(src)
var/obj/item/reagent_containers/spray/S
if(!locate(/obj/item/reagent_containers/spray) in allContents)
new/obj/item/reagent_containers/spray(src)
else
S = locate(/obj/item/weapon/reagent_containers/spray) in allContents
S = locate(/obj/item/reagent_containers/spray) in allContents
if(S)
if(S.reagents.total_volume <= 5)
@@ -1246,10 +1246,10 @@
visible_message("<span class='notice'>[text]</span>")
// START COOKING MODULE
/mob/living/carbon/human/interactive/proc/cookingwithmagic(var/obj/item/weapon/reagent_containers/food/snacks/target)
/mob/living/carbon/human/interactive/proc/cookingwithmagic(var/obj/item/reagent_containers/food/snacks/target)
if(Adjacent(target))
customEmote("[src] [pick("gibbers","drools","slobbers","claps wildly","spits")] towards [target], and with a bang, it's instantly cooked!")
var/obj/item/weapon/reagent_containers/food/snacks/S = new target.cooked_type (get_turf(src))
var/obj/item/reagent_containers/food/snacks/S = new target.cooked_type (get_turf(src))
target.initialize_cooked_food(S, 100)
if(target) // cleaning up old food seems inconsistent, so this will clean up stragglers
qdel(target)
@@ -1266,13 +1266,13 @@
var/list/allContents = getAllContents()
//Bluespace in some inbuilt tools
var/obj/item/weapon/kitchen/rollingpin/RP = locate(/obj/item/weapon/kitchen/rollingpin) in allContents
var/obj/item/kitchen/rollingpin/RP = locate(/obj/item/kitchen/rollingpin) in allContents
if(!RP)
new/obj/item/weapon/kitchen/rollingpin(src)
new/obj/item/kitchen/rollingpin(src)
var/obj/item/weapon/kitchen/knife/KK = locate(/obj/item/weapon/kitchen/knife) in allContents
var/obj/item/kitchen/knife/KK = locate(/obj/item/kitchen/knife) in allContents
if(!KK)
new/obj/item/weapon/kitchen/knife(src)
new/obj/item/kitchen/knife(src)
var/foundCookable = 0
@@ -1281,11 +1281,11 @@
var/list/rangeCheck = view(6,src)
//Make some basic custom food
var/list/customableTypes = list(/obj/item/weapon/reagent_containers/food/snacks/customizable, /obj/item/weapon/reagent_containers/food/snacks/store/bread/plain, /obj/item/weapon/reagent_containers/food/snacks/pizzabread, /obj/item/weapon/reagent_containers/food/snacks/bun, /obj/item/weapon/reagent_containers/food/snacks/store/cake/plain, /obj/item/weapon/reagent_containers/food/snacks/pie/plain, /obj/item/weapon/reagent_containers/food/snacks/pastrybase)
var/list/customableTypes = list(/obj/item/reagent_containers/food/snacks/customizable, /obj/item/reagent_containers/food/snacks/store/bread/plain, /obj/item/reagent_containers/food/snacks/pizzabread, /obj/item/reagent_containers/food/snacks/bun, /obj/item/reagent_containers/food/snacks/store/cake/plain, /obj/item/reagent_containers/food/snacks/pie/plain, /obj/item/reagent_containers/food/snacks/pastrybase)
var/foundCustom
for(var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/DP in rangeCheck) // donkpockets are hitler to chef SNPCs
for(var/obj/item/reagent_containers/food/snacks/donkpocket/DP in rangeCheck) // donkpockets are hitler to chef SNPCs
if(prob(50))
customEmote("[src] points at the [DP], emitting a loud [pick("bellow","screech","yell","scream")], and it bursts into flame.")
qdel(DP)
@@ -1309,8 +1309,8 @@
if(foundCustom)
var/obj/item/weapon/reagent_containers/food/snacks/FC = foundCustom
for(var/obj/item/weapon/reagent_containers/food/snacks/toMake in allContents)
var/obj/item/reagent_containers/food/snacks/FC = foundCustom
for(var/obj/item/reagent_containers/food/snacks/toMake in allContents)
if(prob(smartness))
if(FC.reagents)
FC.attackby(toMake,src)
@@ -1319,10 +1319,10 @@
//Process dough into various states
var/obj/item/weapon/reagent_containers/food/snacks/dough/D = locate(/obj/item/weapon/reagent_containers/food/snacks/dough) in rangeCheck
var/obj/item/weapon/reagent_containers/food/snacks/flatdough/FD = locate(/obj/item/weapon/reagent_containers/food/snacks/flatdough) in rangeCheck
var/obj/item/weapon/reagent_containers/food/snacks/cakebatter/CB = locate(/obj/item/weapon/reagent_containers/food/snacks/cakebatter) in rangeCheck
var/obj/item/weapon/reagent_containers/food/snacks/piedough/PD = locate(/obj/item/weapon/reagent_containers/food/snacks/piedough) in rangeCheck
var/obj/item/reagent_containers/food/snacks/dough/D = locate(/obj/item/reagent_containers/food/snacks/dough) in rangeCheck
var/obj/item/reagent_containers/food/snacks/flatdough/FD = locate(/obj/item/reagent_containers/food/snacks/flatdough) in rangeCheck
var/obj/item/reagent_containers/food/snacks/cakebatter/CB = locate(/obj/item/reagent_containers/food/snacks/cakebatter) in rangeCheck
var/obj/item/reagent_containers/food/snacks/piedough/PD = locate(/obj/item/reagent_containers/food/snacks/piedough) in rangeCheck
if(D)
TARGET = D
@@ -1367,7 +1367,7 @@
//Cook various regular foods into processed versions
var/obj/item/weapon/reagent_containers/food/snacks/toCook = locate(/obj/item/weapon/reagent_containers/food/snacks) in rangeCheck
var/obj/item/reagent_containers/food/snacks/toCook = locate(/obj/item/reagent_containers/food/snacks) in rangeCheck
if(toCook)
if(toCook.cooked_type)
TARGET = toCook
@@ -1378,11 +1378,11 @@
tryWalk(get_turf(toCook))
var/list/finishedList = list()
for(var/obj/item/weapon/reagent_containers/food/snacks/toDisplay in allContents)
if(!toDisplay.cooked_type && !istype(toDisplay, /obj/item/weapon/reagent_containers/food/snacks/grown)) // dont display our ingredients
for(var/obj/item/reagent_containers/food/snacks/toDisplay in allContents)
if(!toDisplay.cooked_type && !istype(toDisplay, /obj/item/reagent_containers/food/snacks/grown)) // dont display our ingredients
finishedList += toDisplay
for(var/obj/item/weapon/reagent_containers/food/snacks/toGrab in rangeCheck)
for(var/obj/item/reagent_containers/food/snacks/toGrab in rangeCheck)
if(!(locate(/obj/structure/table/reinforced) in get_turf(toGrab))) //it's not being displayed
foundCookable = 1
if(!Adjacent(toGrab))
@@ -1395,7 +1395,7 @@
for(var/obj/structure/table/reinforced/toCheck in rangeCheck)
var/counted = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/S in get_turf(toCheck))
for(var/obj/item/reagent_containers/food/snacks/S in get_turf(toCheck))
++counted
if(counted < 12) // make sure theres not too much food here
RT = toCheck
@@ -1406,20 +1406,20 @@
if(!Adjacent(RT))
tryWalk(get_turf(RT))
else
for(var/obj/item/weapon/reagent_containers/food/snacks/toPlop in allContents)
for(var/obj/item/reagent_containers/food/snacks/toPlop in allContents)
RT.attackby(toPlop,src)
if(!foundCookable)
var/list/allTypes = list(/obj/item/weapon/reagent_containers/food/snacks/piedough, /obj/item/weapon/reagent_containers/food/snacks/cakebatter, /obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/flatdough)
var/list/allTypes = list(/obj/item/reagent_containers/food/snacks/piedough, /obj/item/reagent_containers/food/snacks/cakebatter, /obj/item/reagent_containers/food/snacks/dough, /obj/item/reagent_containers/food/snacks/flatdough)
for(var/A in typesof(/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/O = A
for(var/A in typesof(/obj/item/reagent_containers/food/snacks))
var/obj/item/reagent_containers/food/snacks/O = A
if(initial(O.cooked_type))
allTypes += A
var/chosenType = pick(allTypes)
var/obj/item/weapon/reagent_containers/food/snacks/newSnack = new chosenType(get_turf(src))
var/obj/item/reagent_containers/food/snacks/newSnack = new chosenType(get_turf(src))
TARGET = newSnack
newSnack.reagents.remove_any((newSnack.reagents.total_volume/2)-1)
newSnack.name = "Synthetic [newSnack.name]"
@@ -1463,7 +1463,7 @@
//ensure we're using the best object possible
var/obj/item/weapon/best
var/obj/item/best
var/foundFav = 0
var/list/allContents = getAllContents()
for(var/test in allContents)
@@ -1474,15 +1474,15 @@
return
if(!foundFav)
if(istype(test, /obj/item/weapon))
var/obj/item/weapon/R = test
var/obj/item/R = test
if(R.force > 2) // make sure we don't equip any non-weaponlike items, ie bags and stuff
if(!best)
best = R
else
if(best.force < R.force)
best = R
if(istype(R, /obj/item/weapon/gun))
var/obj/item/weapon/gun/G = R
if(istype(R, /obj/item/gun))
var/obj/item/gun/G = R
if(G.can_shoot())
best = R
break // gun with ammo? screw the rest
@@ -1495,16 +1495,16 @@
if(M.health > 1)
//THROWING OBJECTS
for(var/A in allContents)
if(istype(A, /obj/item/weapon/gun)) // guns are for shooting, not throwing.
if(istype(A, /obj/item/gun)) // guns are for shooting, not throwing.
continue
if(prob(robustness))
if(istype(A, /obj/item/weapon))
var/obj/item/weapon/W = A
var/obj/item/W = A
if(W.throwforce > 19) // Only throw worthwile stuff, no more lobbing wrenches at wenches
npcDrop(W,1)
throw_item(TARGET)
if(istype(A, /obj/item/weapon/grenade)) // Allahu ackbar! ALLAHU ACKBARR!!
var/obj/item/weapon/grenade/G = A
if(istype(A, /obj/item/grenade)) // Allahu ackbar! ALLAHU ACKBARR!!
var/obj/item/grenade/G = A
G.attack_self(src)
if(prob(smartness))
npcDrop(G,1)
@@ -1516,11 +1516,11 @@
swap_hands()
if(main_hand)
if(main_hand.force != 0)
if(istype(main_hand, /obj/item/weapon/gun))
var/obj/item/weapon/gun/G = main_hand
if(istype(main_hand, /obj/item/gun))
var/obj/item/gun/G = main_hand
if(G.can_trigger_gun(src))
if(istype(main_hand, /obj/item/weapon/gun/ballistic))
var/obj/item/weapon/gun/ballistic/P = main_hand
if(istype(main_hand, /obj/item/gun/ballistic))
var/obj/item/gun/ballistic/P = main_hand
if(!P.chambered)
P.chamber_round()
P.update_icon()
@@ -1529,8 +1529,8 @@
npcDrop(P,1)
else
P.afterattack(TARGET, src)
else if(istype(main_hand, /obj/item/weapon/gun/energy))
var/obj/item/weapon/gun/energy/P = main_hand
else if(istype(main_hand, /obj/item/gun/energy))
var/obj/item/gun/energy/P = main_hand
var/stunning = 0
for(var/A in P.ammo_type)
if(ispath(A, /obj/item/ammo_casing/energy/electrode))
@@ -1550,7 +1550,7 @@
if(!walk2derpless(TARGET))
timeout++
else
var/obj/item/weapon/W = main_hand
var/obj/item/W = main_hand
W.attack(TARGET,src)
else
G.loc = get_turf(src) // drop item works inconsistently
+1 -1
View File
@@ -31,7 +31,7 @@
if(istype(wear_mask, /obj/item/clothing/mask/chameleon))
var/obj/item/clothing/mask/chameleon/V = wear_mask
if(V.vchange && wear_id)
var/obj/item/weapon/card/id/idcard = wear_id.GetID()
var/obj/item/card/id/idcard = wear_id.GetID()
if(istype(idcard))
return idcard.registered_name
else
@@ -27,7 +27,7 @@
var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans)
var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id.
var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc)
var/meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing
var/meat = /obj/item/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing
var/skinned_type
var/liked_food = NONE
var/disliked_food = GROSS
@@ -962,13 +962,13 @@
if(!disable_warning)
to_chat(H, "The [I.name] is too big to attach.") //should be src?
return 0
if( istype(I, /obj/item/device/pda) || istype(I, /obj/item/weapon/pen) || is_type_in_list(I, H.wear_suit.allowed) )
if( istype(I, /obj/item/device/pda) || istype(I, /obj/item/pen) || is_type_in_list(I, H.wear_suit.allowed) )
return 1
return 0
if(slot_handcuffed)
if(H.handcuffed)
return 0
if(!istype(I, /obj/item/weapon/restraints/handcuffs))
if(!istype(I, /obj/item/restraints/handcuffs))
return 0
if(num_arms < 2)
return 0
@@ -976,14 +976,14 @@
if(slot_legcuffed)
if(H.legcuffed)
return 0
if(!istype(I, /obj/item/weapon/restraints/legcuffs))
if(!istype(I, /obj/item/restraints/legcuffs))
return 0
if(num_legs < 2)
return 0
return 1
if(slot_in_backpack)
if(H.back && istype(H.back, /obj/item/weapon/storage))
var/obj/item/weapon/storage/B = H.back
if(H.back && istype(H.back, /obj/item/storage))
var/obj/item/storage/B = H.back
if(B.can_be_inserted(I, 1, H))
return 1
return 0
@@ -1158,7 +1158,7 @@
gravity = 1
if(!gravity)
var/obj/item/weapon/tank/jetpack/J = H.back
var/obj/item/tank/jetpack/J = H.back
var/obj/item/clothing/suit/space/hardsuit/C = H.wear_suit
var/obj/item/organ/cyberimp/chest/thrusters/T = H.getorganslot("thrusters")
if(!istype(J) && istype(C))
@@ -5,7 +5,7 @@
mutanttongue = /obj/item/organ/tongue/fly
mutantliver = /obj/item/organ/liver/fly
mutantstomach = /obj/item/organ/stomach/fly
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/fly
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/fly
disliked_food = null
liked_food = GROSS
@@ -28,6 +28,6 @@
..()
/datum/species/fly/check_weakness(obj/item/weapon, mob/living/attacker)
if(istype(weapon, /obj/item/weapon/melee/flyswatter))
if(istype(weapon, /obj/item/melee/flyswatter))
return 29 //Flyswatters deal 30x damage to flypeople.
return 0
@@ -93,7 +93,7 @@ datum/species/mammal
attack_verb = "slash"
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno
meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
skinned_type = /obj/item/stack/sheet/animalhide/xeno
exotic_bloodtype = "L"
damage_overlay_type = "xeno"
@@ -126,7 +126,7 @@ datum/species/mammal
exotic_blood = "xblood"
damage_overlay_type = "xeno"
no_equip = list(slot_glasses) //MY EYES, THEY'RE GONE
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno
meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
skinned_type = /obj/item/stack/sheet/animalhide/xeno
// safe_toxins_max = 32 //Too much of anything is bad.
roundstart = 0
@@ -14,7 +14,7 @@
nojumpsuit = 1
sexes = 1
damage_overlay_type = ""
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/golem
// To prevent golem subtypes from overwhelming the odds when random species
// changes, only the Random Golem type can be chosen
blacklisted = TRUE
@@ -56,7 +56,7 @@
/datum/species/golem/adamantine
name = "Adamantine Golem"
id = "adamantine golem"
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine
mutant_organs = list(/obj/item/organ/adamantine_resonator, /obj/item/organ/vocal_cords/adamantine)
fixed_mut_color = "4ed"
info_text = "As an <span class='danger'>Adamantine Golem</span>, you possess special vocal cords allowing you to \"resonate\" messages to all golems."
@@ -67,7 +67,7 @@
name = "Plasma Golem"
id = "plasma golem"
fixed_mut_color = "a3d"
meat = /obj/item/weapon/ore/plasma
meat = /obj/item/ore/plasma
//Can burn and takes damage from heat
species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR)
info_text = "As a <span class='danger'>Plasma Golem</span>, you burn easily. Be careful, if you get hot enough while burning, you'll blow up!"
@@ -127,7 +127,7 @@
id = "diamond golem"
fixed_mut_color = "0ff"
armor = 70 //up from 55
meat = /obj/item/weapon/ore/diamond
meat = /obj/item/ore/diamond
info_text = "As a <span class='danger'>Diamond Golem</span>, you are more resistant than the average golem."
prefix = "Diamond"
special_names = list("Back")
@@ -139,7 +139,7 @@
fixed_mut_color = "cc0"
speedmod = 1
armor = 25 //down from 55
meat = /obj/item/weapon/ore/gold
meat = /obj/item/ore/gold
info_text = "As a <span class='danger'>Gold Golem</span>, you are faster but less resistant than the average golem."
prefix = "Golden"
@@ -149,7 +149,7 @@
id = "silver golem"
fixed_mut_color = "ddd"
punchstunthreshold = 9 //60% chance, from 40%
meat = /obj/item/weapon/ore/silver
meat = /obj/item/ore/silver
info_text = "As a <span class='danger'>Silver Golem</span>, your attacks are heavier and have a higher chance of stunning."
prefix = "Silver"
special_names = list("Surfer", "Chariot", "Lining")
@@ -164,7 +164,7 @@
punchdamagehigh = 21
punchstunthreshold = 18 //still 40% stun chance
speedmod = 4 //pretty fucking slow
meat = /obj/item/weapon/ore/iron
meat = /obj/item/ore/iron
info_text = "As a <span class='danger'>Plasteel Golem</span>, you are slower, but harder to stun, and hit very hard when punching."
attack_verb = "smash"
attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard
@@ -175,7 +175,7 @@
name = "Titanium Golem"
id = "titanium golem"
fixed_mut_color = "fff"
meat = /obj/item/weapon/ore/titanium
meat = /obj/item/ore/titanium
info_text = "As a <span class='danger'>Titanium Golem</span>, you are immune to ash storms, and slightly more resistant to burn damage."
burnmod = 0.9
prefix = "Titanium"
@@ -193,7 +193,7 @@
name = "Plastitanium Golem"
id = "plastitanium golem"
fixed_mut_color = "888"
meat = /obj/item/weapon/ore/titanium
meat = /obj/item/ore/titanium
info_text = "As a <span class='danger'>Plastitanium Golem</span>, you are immune to both ash storms and lava, and slightly more resistant to burn damage."
burnmod = 0.8
prefix = "Plastitanium"
@@ -284,7 +284,7 @@
name = "Uranium Golem"
id = "uranium golem"
fixed_mut_color = "7f0"
meat = /obj/item/weapon/ore/uranium
meat = /obj/item/ore/uranium
info_text = "As an <span class='danger'>Uranium Golem</span>, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected."
var/last_event = 0
@@ -305,7 +305,7 @@
name = "Sand Golem"
id = "sand golem"
fixed_mut_color = "ffdc8f"
meat = /obj/item/weapon/ore/glass //this is sand
meat = /obj/item/ore/glass //this is sand
armor = 0
burnmod = 3 //melts easily
brutemod = 0.25
@@ -318,7 +318,7 @@
for(var/obj/item/W in H)
H.dropItemToGround(W)
for(var/i=1, i <= rand(3,5), i++)
new /obj/item/weapon/ore/glass(get_turf(H))
new /obj/item/ore/glass(get_turf(H))
qdel(H)
/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
@@ -335,7 +335,7 @@
name = "Glass Golem"
id = "glass golem"
fixed_mut_color = "5a96b4aa" //transparent body
meat = /obj/item/weapon/shard
meat = /obj/item/shard
armor = 0
brutemod = 3 //very fragile
burnmod = 0.25
@@ -349,7 +349,7 @@
for(var/obj/item/W in H)
H.dropItemToGround(W)
for(var/i=1, i <= rand(3,5), i++)
new /obj/item/weapon/shard(get_turf(H))
new /obj/item/shard(get_turf(H))
qdel(H)
/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
@@ -378,7 +378,7 @@
name = "Bluespace Golem"
id = "bluespace golem"
fixed_mut_color = "33f"
meat = /obj/item/weapon/ore/bluespace_crystal
meat = /obj/item/ore/bluespace_crystal
info_text = "As a <span class='danger'>Bluespace Golem</span>, are spatially unstable: you will teleport when hit, and you can teleport manually at a long distance."
attack_verb = "bluespace punch"
attack_sound = 'sound/effects/phasein.ogg'
@@ -473,7 +473,7 @@
punchdamagelow = 0
punchdamagehigh = 1
punchstunthreshold = 2 //Harmless and can't stun
meat = /obj/item/weapon/ore/bananium
meat = /obj/item/ore/bananium
info_text = "As a <span class='danger'>Bananium Golem</span>, you are made for pranking. Your body emits natural honks, and you cannot hurt people when punching them. Your skin also emits bananas when damaged."
attack_verb = "honk"
attack_sound = 'sound/items/airhorn2.ogg'
@@ -493,19 +493,19 @@
/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
..()
if(world.time > last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP)
new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
last_banana = world.time
/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
..()
if(world.time > last_banana + banana_cooldown && user != H)
new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
last_banana = world.time
/datum/species/golem/bananium/on_hit(obj/item/projectile/P, mob/living/carbon/human/H)
..()
if(world.time > last_banana + banana_cooldown)
new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
last_banana = world.time
/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
@@ -516,7 +516,7 @@
if(I.thrownby == H) //No throwing stuff at yourself to make bananas
return 0
else
new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
last_banana = world.time
/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H)
@@ -672,7 +672,7 @@
cloth_golem = null
qdel(src)
/obj/structure/cloth_pile/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params)
/obj/structure/cloth_pile/attackby(obj/item/P, mob/living/carbon/human/user, params)
. = ..()
if(resistance_flags & ON_FIRE)
@@ -5,7 +5,7 @@
default_color = "00FF90"
say_mod = "chirps"
species_traits = list(MUTCOLORS,EYECOLOR,NOBLOOD,VIRUSIMMUNE,TOXINLOVER)
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/slime
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime
exotic_blood = "slimejelly"
damage_overlay_type = ""
var/datum/action/innate/regenerate_limbs/regenerate_limbs
@@ -13,7 +13,7 @@
attack_verb = "slash"
attack_sound = 'sound/weapons/slash.ogg'
miss_sound = 'sound/weapons/slashmiss.ogg'
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/lizard
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/lizard
skinned_type = /obj/item/stack/sheet/animalhide/lizard
exotic_bloodtype = "L"
disliked_food = GRAIN | DAIRY
@@ -9,7 +9,7 @@
miss_sound = 'sound/weapons/slashmiss.ogg'
burnmod = 1.25
heatmod = 1.5
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/plant
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant
disliked_food = MEAT | DAIRY
liked_food = VEGETABLES | FRUIT | GRAIN
@@ -5,7 +5,7 @@
sexes = 0
blacklisted = 1
ignored_by = list(/mob/living/simple_animal/hostile/faithless)
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/shadow
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/shadow
species_traits = list(NOBREATH,NOBLOOD,RADIMMUNE,VIRUSIMMUNE)
dangerous_existence = 1
mutanteyes = /obj/item/organ/eyes/night_vision
@@ -5,7 +5,7 @@
say_mod = "rattles"
blacklisted = 1
sexes = 0
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER,EASYDISMEMBER,EASYLIMBATTACHMENT)
mutant_organs = list(/obj/item/organ/tongue/bone)
damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
@@ -5,7 +5,7 @@
say_mod = "moans"
sexes = 0
blacklisted = 1
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT)
mutant_organs = list(/obj/item/organ/tongue/zombie)
var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg')
@@ -54,5 +54,5 @@
id = "goofzombies"
limbs_id = "zombie" //They look like zombies
sexes = 0
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
mutant_organs = list(/obj/item/organ/tongue/zombie)
+1 -1
View File
@@ -72,7 +72,7 @@
put_in_hands(I)
update_inv_hands()
if(slot_in_backpack)
var/obj/item/weapon/storage/B = back
var/obj/item/storage/B = back
var/prev_jimmies = B.rustle_jimmies
B.rustle_jimmies = FALSE //don't conspicously rustle
B.handle_item_insertion(I, 1, src)
@@ -78,7 +78,7 @@
// WEAPONS
if(istype(I, /obj/item/weapon))
var/obj/item/weapon/W = I
var/obj/item/W = I
if(W.force >= best_force)
put_in_hands(W)
best_force = W.force
@@ -245,7 +245,7 @@
// pickup any nearby weapon
if(!pickupTarget && prob(MONKEY_WEAPON_PROB))
var/obj/item/weapon/W = locate(/obj/item/weapon/) in oview(2,src)
var/obj/item/W = locate(/obj/item/) in oview(2,src)
if(W && !blacklistItems[W] && W.force > best_force)
pickupTarget = W
@@ -272,8 +272,8 @@
if(Adjacent(target) && isturf(target.loc)) // if right next to perp
// check if target has a weapon
var/obj/item/weapon/W
for(var/obj/item/weapon/I in target.held_items)
var/obj/item/W
for(var/obj/item/I in target.held_items)
if(!(I.flags_1 & ABSTRACT_1))
W = I
break
@@ -388,7 +388,7 @@
// attack using a held weapon otherwise bite the enemy, then if we are angry there is a chance we might calm down a little
/mob/living/carbon/monkey/proc/monkey_attack(mob/living/L)
var/obj/item/weapon/Weapon = locate(/obj/item/weapon) in held_items
var/obj/item/Weapon = locate(/obj/item/weapon) in held_items
// attack with weapon if we have one
if(Weapon)
@@ -439,7 +439,7 @@
retaliate(L)
return ..()
/mob/living/carbon/monkey/attackby(obj/item/weapon/W, mob/user, params)
/mob/living/carbon/monkey/attackby(obj/item/W, mob/user, params)
..()
if((W.force) && (!target) && (W.damtype != STAMINA) )
retaliate(user)
@@ -8,8 +8,8 @@
gender = NEUTER
pass_flags = PASSTABLE
ventcrawler = VENTCRAWLER_NUDE
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1)
type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1)
type_of_meat = /obj/item/reagent_containers/food/snacks/meat/slab/monkey
gib_type = /obj/effect/decal/cleanable/blood/gibs
unique_name = 1
bodyparts = list(/obj/item/bodypart/chest/monkey, /obj/item/bodypart/head/monkey, /obj/item/bodypart/l_arm/monkey,
@@ -105,11 +105,11 @@
//Lasertag bullshit
if(lasercolor)
if(lasercolor == "b")//Lasertag turrets target the opposing team, how great is that? -Sieve
if(is_holding_item_of_type(/obj/item/weapon/gun/energy/laser/redtag))
if(is_holding_item_of_type(/obj/item/gun/energy/laser/redtag))
threatcount += 4
if(lasercolor == "r")
if(is_holding_item_of_type(/obj/item/weapon/gun/energy/laser/bluetag))
if(is_holding_item_of_type(/obj/item/gun/energy/laser/bluetag))
threatcount += 4
return threatcount
@@ -140,7 +140,7 @@
return 0
return 1
/mob/living/carbon/monkey/can_use_guns(var/obj/item/weapon/G)
/mob/living/carbon/monkey/can_use_guns(var/obj/item/G)
return 1
/mob/living/carbon/monkey/angry
+1 -1
View File
@@ -485,7 +485,7 @@
/datum/emote/living/circle/run_emote(mob/user, params)
. = ..()
var/obj/item/weapon/circlegame/N = new(user)
var/obj/item/circlegame/N = new(user)
if(user.put_in_hands(N))
to_chat(user, "<span class='notice'>You make a circle with your hand.</span>")
else
+4 -4
View File
@@ -300,7 +300,7 @@
update_canmove()
//Recursive function to find everything a mob is holding.
/mob/living/get_contents(obj/item/weapon/storage/Storage = null)
/mob/living/get_contents(obj/item/storage/Storage = null)
var/list/L = list()
if(Storage) //If it called itself
@@ -308,11 +308,11 @@
return L
else
L += src.contents
for(var/obj/item/weapon/storage/S in src.contents) //Check for storage items
for(var/obj/item/storage/S in src.contents) //Check for storage items
L += get_contents(S)
for(var/obj/item/clothing/under/U in src.contents) //Check for jumpsuit accessories
L += U.contents
for(var/obj/item/weapon/folder/F in src.contents) //Check for folders
for(var/obj/item/folder/F in src.contents) //Check for folders
L += F.contents
return L
@@ -798,7 +798,7 @@
else
to_chat(src, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
/mob/living/proc/can_use_guns(var/obj/item/weapon/G)
/mob/living/proc/can_use_guns(var/obj/item/G)
if (G.trigger_guard != TRIGGER_GUARD_ALLOW_ALL && !IsAdvancedToolUser())
to_chat(src, "<span class='warning'>You don't have the dexterity to do this!</span>")
return 0
+2 -2
View File
@@ -68,7 +68,7 @@
var/dtype = BRUTE
var/volume = I.get_volume_by_throwforce_and_or_w_class()
if(istype(I, /obj/item/weapon)) //If the item is a weapon...
var/obj/item/weapon/W = I
var/obj/item/W = I
dtype = W.damtype
if (W.throwforce > 0) //If the weapon's throwforce is greater than zero...
@@ -342,7 +342,7 @@
return
if(stat != DEAD && !is_servant_of_ratvar(src))
for(var/obj/item/weapon/implant/mindshield/M in implants)
for(var/obj/item/implant/mindshield/M in implants)
qdel(M)
if(!add_servant_of_ratvar(src))
to_chat(src, "<span class='userdanger'>A blinding light boils you alive! <i>Run!</i></span>")
+1 -1
View File
@@ -35,7 +35,7 @@
if(nuking)
set_security_level("red")
nuking = FALSE
for(var/obj/item/weapon/pinpointer/P in GLOB.pinpointer_list)
for(var/obj/item/pinpointer/P in GLOB.pinpointer_list)
P.switch_mode_to(TRACK_NUKE_DISK) //Party's over, back to work, everyone
P.nuke_warning = FALSE
+2 -2
View File
@@ -24,7 +24,7 @@
var/speakDoubleExclamation = "alarms"
var/speakQuery = "queries"
var/obj/item/weapon/pai_cable/cable // The cable we produce and use when door or camera jacking
var/obj/item/pai_cable/cable // The cable we produce and use when door or camera jacking
var/master // Name of the one who commands us
var/master_dna // DNA string for owner verification
@@ -53,7 +53,7 @@
var/holoform = FALSE
var/canholo = TRUE
var/obj/item/weapon/card/id/access_card = null
var/obj/item/card/id/access_card = null
var/chassis = "repairbot"
var/list/possible_chassis = list("cat", "mouse", "monkey", "corgi", "fox", "repairbot", "rabbit")
@@ -265,7 +265,7 @@
src.hackdoor = null
if(href_list["cable"])
var/turf/T = get_turf(src.loc)
cable = new /obj/item/weapon/pai_cable(T)
cable = new /obj/item/pai_cable(T)
T.visible_message("<span class='warning'>A port on [src] opens to reveal [src.cable], which promptly falls to the floor.</span>", "<span class='italics'>You hear the soft click of something light and hard falling to the ground.</span>")
//src.updateUsrDialog() We only need to account for the single mob this is intended for, and he will *always* be able to call this window
src.paiInterface() // So we'll just call the update directly rather than doing some default checks
@@ -16,13 +16,13 @@
var/obj/item/borg/sight/S = O
sight_mode &= ~S.sight_mode
update_sight()
else if(istype(O, /obj/item/weapon/storage/bag/tray/))
var/obj/item/weapon/storage/bag/tray/T = O
else if(istype(O, /obj/item/storage/bag/tray/))
var/obj/item/storage/bag/tray/T = O
T.do_quick_empty()
else if(istype(O,/obj/item/weapon/gun/energy/laser/cyborg))
else if(istype(O,/obj/item/gun/energy/laser/cyborg))
laser = 0
update_icons()
else if(istype(O,/obj/item/weapon/gun/energy/disabler/cyborg))
else if(istype(O,/obj/item/gun/energy/disabler/cyborg))
disabler = 0
update_icons()
else if(istype(O,/obj/item/device/dogborg/sleeper))
@@ -62,10 +62,10 @@
if(activated(O))
to_chat(src, "<span class='warning'>That module is already activated.</span>")
return
if(istype(O,/obj/item/weapon/gun/energy/laser/cyborg))
if(istype(O,/obj/item/gun/energy/laser/cyborg))
laser = 1
update_icons()
if(istype(O,/obj/item/weapon/gun/energy/disabler/cyborg))
if(istype(O,/obj/item/gun/energy/disabler/cyborg))
disabler = 1
update_icons()
if(!held_items[1])
+34 -34
View File
@@ -34,14 +34,14 @@
var/obj/screen/robot_modules_background
//3 Modules can be activated at any one time.
var/obj/item/weapon/robot_module/module = null
var/obj/item/robot_module/module = null
var/obj/item/module_active = null
held_items = list(null, null, null) //we use held_items for the module holding, because that makes sense to do!
var/mutable_appearance/eye_lights
var/mob/living/silicon/ai/connected_ai = null
var/obj/item/weapon/stock_parts/cell/cell = null
var/obj/item/stock_parts/cell/cell = null
var/opened = 0
var/emagged = FALSE
@@ -115,7 +115,7 @@
ident = rand(1, 999)
if(!cell)
cell = new /obj/item/weapon/stock_parts/cell(src)
cell = new /obj/item/stock_parts/cell(src)
cell.maxcharge = 7500
cell.charge = 7500
@@ -131,7 +131,7 @@
builtInCamera.network = list("SS13")
if(wires.is_cut(WIRE_CAMERA))
builtInCamera.status = 0
module = new /obj/item/weapon/robot_module(src)
module = new /obj/item/robot_module(src)
module.rebuild_modules()
update_icons()
. = ..()
@@ -194,29 +194,29 @@
/mob/living/silicon/robot/proc/pick_module()
if(module.type != /obj/item/weapon/robot_module)
if(module.type != /obj/item/robot_module)
return
if(wires.is_cut(WIRE_RESET_MODULE))
to_chat(src,"<span class='userdanger'>ERROR: Module installer reply timeout. Please check internal connections.</span>")
return
var/list/modulelist = list("Standard" = /obj/item/weapon/robot_module/standard, \
"Engineering" = /obj/item/weapon/robot_module/engineering, \
"Medical" = /obj/item/weapon/robot_module/medical, \
"Miner" = /obj/item/weapon/robot_module/miner, \
"Janitor" = /obj/item/weapon/robot_module/janitor, \
"Service" = /obj/item/weapon/robot_module/butler, \
"MediHound" = /obj/item/weapon/robot_module/medihound, \
"Security K9" = /obj/item/weapon/robot_module/k9, \
"Scrub Puppy" = /obj/item/weapon/robot_module/scrubpup)
var/list/modulelist = list("Standard" = /obj/item/robot_module/standard, \
"Engineering" = /obj/item/robot_module/engineering, \
"Medical" = /obj/item/robot_module/medical, \
"Miner" = /obj/item/robot_module/miner, \
"Janitor" = /obj/item/robot_module/janitor, \
"Service" = /obj/item/robot_module/butler, \
"MediHound" = /obj/item/robot_module/medihound, \
"Security K9" = /obj/item/robot_module/k9, \
"Scrub Puppy" = /obj/item/robot_module/scrubpup)
if(!config.forbid_peaceborg)
modulelist["Peacekeeper"] = /obj/item/weapon/robot_module/peacekeeper
modulelist["Peacekeeper"] = /obj/item/robot_module/peacekeeper
if(!config.forbid_secborg)
modulelist["Security"] = /obj/item/weapon/robot_module/security
modulelist["Security"] = /obj/item/robot_module/security
var/input_module = input("Please, select a module!", "Robot", null, null) as null|anything in modulelist
if(!input_module || module.type != /obj/item/weapon/robot_module)
if(!input_module || module.type != /obj/item/robot_module)
return
module.transform_to(modulelist[input_module])
@@ -367,10 +367,10 @@
queueAlarm("--- [class] alarm in [A.name] has been cleared.", class, 0)
return !cleared
/mob/living/silicon/robot/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/weldingtool) && (user.a_intent != INTENT_HARM || user == src))
/mob/living/silicon/robot/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weldingtool) && (user.a_intent != INTENT_HARM || user == src))
user.changeNext_move(CLICK_CD_MELEE)
var/obj/item/weapon/weldingtool/WT = W
var/obj/item/weldingtool/WT = W
if (!getBruteLoss())
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
return
@@ -407,7 +407,7 @@
else
to_chat(user, "The wires seem fine, there's no need to fix them.")
else if(istype(W, /obj/item/weapon/crowbar)) // crowbar means open or close the cover
else if(istype(W, /obj/item/crowbar)) // crowbar means open or close the cover
if(opened)
to_chat(user, "<span class='notice'>You close the cover.</span>")
opened = 0
@@ -420,7 +420,7 @@
opened = 1
update_icons()
else if(istype(W, /obj/item/weapon/stock_parts/cell) && opened) // trying to put a cell inside
else if(istype(W, /obj/item/stock_parts/cell) && opened) // trying to put a cell inside
if(wiresexposed)
to_chat(user, "<span class='warning'>Close the cover first!</span>")
else if(cell)
@@ -440,12 +440,12 @@
else
to_chat(user, "<span class='warning'>You can't reach the wiring!</span>")
else if(istype(W, /obj/item/weapon/screwdriver) && opened && !cell) // haxing
else if(istype(W, /obj/item/screwdriver) && opened && !cell) // haxing
wiresexposed = !wiresexposed
to_chat(user, "The wires have been [wiresexposed ? "exposed" : "unexposed"]")
update_icons()
else if(istype(W, /obj/item/weapon/screwdriver) && opened && cell) // radio
else if(istype(W, /obj/item/screwdriver) && opened && cell) // radio
if(shell)
to_chat(user, "You cannot seem to open the radio compartment") //Prevent AI radio key theft
else if(radio)
@@ -454,7 +454,7 @@
to_chat(user, "<span class='warning'>Unable to locate a radio!</span>")
update_icons()
else if(istype(W, /obj/item/weapon/wrench) && opened && !cell) //Deconstruction. The flashes break from the fall, to prevent this from being a ghetto reset module.
else if(istype(W, /obj/item/wrench) && opened && !cell) //Deconstruction. The flashes break from the fall, to prevent this from being a ghetto reset module.
if(!lockcharge)
to_chat(user, "<span class='boldannounce'>[src]'s bolts spark! Maybe you should lock them down first!</span>")
spark_system.start()
@@ -466,8 +466,8 @@
user.visible_message("[user] deconstructs [src]!", "<span class='notice'>You unfasten the securing bolts, and [src] falls to pieces!</span>")
deconstruct()
else if(istype(W, /obj/item/weapon/aiModule))
var/obj/item/weapon/aiModule/MOD = W
else if(istype(W, /obj/item/aiModule))
var/obj/item/aiModule/MOD = W
if(!opened)
to_chat(user, "<span class='warning'>You need access to the robot's insides to do that!</span>")
return
@@ -495,7 +495,7 @@
else
to_chat(user, "<span class='warning'>Unable to locate a radio!</span>")
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card
else if (istype(W, /obj/item/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card
if(emagged)//still allow them to open the cover
to_chat(user, "<span class='notice'>The interface seems slightly damaged.</span>")
if(opened)
@@ -570,7 +570,7 @@
return check_access(george.get_active_held_item())
return 0
/mob/living/silicon/robot/proc/check_access(obj/item/weapon/card/id/I)
/mob/living/silicon/robot/proc/check_access(obj/item/card/id/I)
if(!istype(req_access, /list)) //something's very wrong
return 1
@@ -578,7 +578,7 @@
if(!L.len) //no requirements
return 1
if(!istype(I, /obj/item/weapon/card/id) && isitem(I))
if(!istype(I, /obj/item/card/id) && isitem(I))
I = I.GetID()
if(!I || !I.access) //not ID or no access
@@ -825,7 +825,7 @@
<b>You are armed with powerful offensive tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \
Your cyborg LMG will slowly produce ammunition from your power supply, and your operative pinpointer will find and locate fellow nuclear operatives. \
<i>Help the operatives secure the disk at all costs!</i></b>"
var/set_module = /obj/item/weapon/robot_module/syndicate
var/set_module = /obj/item/robot_module/syndicate
/mob/living/silicon/robot/syndicate/Initialize()
..()
@@ -851,7 +851,7 @@
Your defibrillator paddles can revive operatives through their hardsuits, or can be used on harm intent to shock enemies! \
Your energy saw functions as a circular saw, but can be activated to deal more damage, and your operative pinpointer will find and locate fellow nuclear operatives. \
<i>Help the operatives secure the disk at all costs!</i></b>"
set_module = /obj/item/weapon/robot_module/syndicate_medical
set_module = /obj/item/robot_module/syndicate_medical
/mob/living/silicon/robot/proc/notify_ai(notifytype, oldname, newname)
if(!connected_ai)
@@ -977,7 +977,7 @@
shown_robot_modules = FALSE
if(hud_used)
hud_used.update_robot_modules_display()
module.transform_to(/obj/item/weapon/robot_module)
module.transform_to(/obj/item/robot_module)
// Remove upgrades.
for(var/obj/item/I in upgrades)
@@ -992,7 +992,7 @@
return 1
/mob/living/silicon/robot/proc/has_module()
if(!module || module.type == /obj/item/weapon/robot_module)
if(!module || module.type == /obj/item/robot_module)
. = FALSE
else
. = TRUE
@@ -1,4 +1,4 @@
/obj/item/weapon/robot_module
/obj/item/robot_module
name = "Default"
icon = 'icons/obj/module.dmi'
icon_state = "std_module"
@@ -34,7 +34,7 @@
var/ride_allow_incapacitated = FALSE
var/allow_riding = TRUE
/obj/item/weapon/robot_module/New()
/obj/item/robot_module/New()
..()
for(var/i in basic_modules)
var/obj/item/I = new i(src)
@@ -49,7 +49,7 @@
ratvar_modules += I
ratvar_modules -= i
/obj/item/weapon/robot_module/Destroy()
/obj/item/robot_module/Destroy()
basic_modules.Cut()
emag_modules.Cut()
ratvar_modules.Cut()
@@ -58,29 +58,29 @@
storages.Cut()
return ..()
/obj/item/weapon/robot_module/emp_act(severity)
/obj/item/robot_module/emp_act(severity)
for(var/obj/O in modules)
O.emp_act(severity)
..()
/obj/item/weapon/robot_module/proc/get_usable_modules()
/obj/item/robot_module/proc/get_usable_modules()
. = modules.Copy()
/obj/item/weapon/robot_module/proc/get_inactive_modules()
/obj/item/robot_module/proc/get_inactive_modules()
. = list()
var/mob/living/silicon/robot/R = loc
for(var/m in get_usable_modules())
if(!(m in R.held_items))
. += m
/obj/item/weapon/robot_module/proc/get_or_create_estorage(var/storage_type)
/obj/item/robot_module/proc/get_or_create_estorage(var/storage_type)
for(var/datum/robot_energy_storage/S in storages)
if(istype(S, storage_type))
return S
return new storage_type(src)
/obj/item/weapon/robot_module/proc/add_module(obj/item/I, nonstandard, requires_rebuild)
/obj/item/robot_module/proc/add_module(obj/item/I, nonstandard, requires_rebuild)
if(istype(I, /obj/item/stack))
var/obj/item/stack/S = I
@@ -114,8 +114,8 @@
S.materials = list()
S.is_cyborg = 1
if(istype(I, /obj/item/weapon/restraints/handcuffs/cable))
var/obj/item/weapon/restraints/handcuffs/cable/C = I
if(istype(I, /obj/item/restraints/handcuffs/cable))
var/obj/item/restraints/handcuffs/cable/C = I
C.wirestorage = get_or_create_estorage(/datum/robot_energy_storage/wire)
if(I.loc != src)
@@ -129,7 +129,7 @@
rebuild_modules()
return I
/obj/item/weapon/robot_module/proc/remove_module(obj/item/I, delete_after)
/obj/item/robot_module/proc/remove_module(obj/item/I, delete_after)
basic_modules -= I
modules -= I
emag_modules -= I
@@ -139,7 +139,7 @@
if(delete_after)
qdel(I)
/obj/item/weapon/robot_module/proc/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
/obj/item/robot_module/proc/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
for(var/datum/robot_energy_storage/st in storages)
st.energy = min(st.max_energy, st.energy + coeff * st.recharge_rate)
@@ -149,18 +149,18 @@
F.times_used = 0
F.crit_fail = 0
F.update_icon()
else if(istype(I, /obj/item/weapon/melee/baton))
var/obj/item/weapon/melee/baton/B = I
else if(istype(I, /obj/item/melee/baton))
var/obj/item/melee/baton/B = I
if(B.cell)
B.cell.charge = B.cell.maxcharge
else if(istype(I, /obj/item/weapon/gun/energy))
var/obj/item/weapon/gun/energy/EG = I
else if(istype(I, /obj/item/gun/energy))
var/obj/item/gun/energy/EG = I
if(!EG.chambered)
EG.recharge_newshot() //try to reload a new shot.
R.toner = R.tonermax
/obj/item/weapon/robot_module/proc/rebuild_modules() //builds the usable module list from the modules we have
/obj/item/robot_module/proc/rebuild_modules() //builds the usable module list from the modules we have
var/mob/living/silicon/robot/R = loc
var/held_modules = R.held_items.Copy()
R.uneq_all()
@@ -181,9 +181,9 @@
if(R.hud_used)
R.hud_used.update_robot_modules_display()
/obj/item/weapon/robot_module/proc/transform_to(new_module_type)
/obj/item/robot_module/proc/transform_to(new_module_type)
var/mob/living/silicon/robot/R = loc
var/obj/item/weapon/robot_module/RM = new new_module_type(R)
var/obj/item/robot_module/RM = new new_module_type(R)
if(!RM.be_transformed_to(src))
qdel(RM)
return
@@ -194,14 +194,14 @@
qdel(src)
return RM
/obj/item/weapon/robot_module/proc/be_transformed_to(obj/item/weapon/robot_module/old_module)
/obj/item/robot_module/proc/be_transformed_to(obj/item/robot_module/old_module)
for(var/i in old_module.added_modules)
added_modules += i
old_module.added_modules -= i
did_feedback = old_module.did_feedback
return TRUE
/obj/item/weapon/robot_module/proc/do_transform_animation()
/obj/item/robot_module/proc/do_transform_animation()
var/mob/living/silicon/robot/R = loc
R.notransform = TRUE
var/obj/effect/temp_visual/decoy/fading/fivesecond/ANM = new /obj/effect/temp_visual/decoy/fading/fivesecond(R.loc, R)
@@ -230,25 +230,25 @@
if(feedback_key && !did_feedback)
SSblackbox.inc(feedback_key, 1)
/obj/item/weapon/robot_module/standard
/obj/item/robot_module/standard
name = "Standard"
basic_modules = list(
/obj/item/device/assembly/flash/cyborg,
/obj/item/weapon/reagent_containers/borghypo/epi,
/obj/item/reagent_containers/borghypo/epi,
/obj/item/device/healthanalyzer,
/obj/item/weapon/weldingtool/largetank/cyborg,
/obj/item/weapon/wrench/cyborg,
/obj/item/weapon/crowbar/cyborg,
/obj/item/weldingtool/largetank/cyborg,
/obj/item/wrench/cyborg,
/obj/item/crowbar/cyborg,
/obj/item/stack/sheet/metal/cyborg,
/obj/item/stack/rods/cyborg,
/obj/item/stack/tile/plasteel/cyborg,
/obj/item/weapon/extinguisher,
/obj/item/weapon/pickaxe,
/obj/item/extinguisher,
/obj/item/pickaxe,
/obj/item/device/t_scanner/adv_mining_scanner,
/obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg,
/obj/item/weapon/soap/nanotrasen,
/obj/item/restraints/handcuffs/cable/zipties/cyborg,
/obj/item/soap/nanotrasen,
/obj/item/borg/cyborghug)
emag_modules = list(/obj/item/weapon/melee/transforming/energy/sword/cyborg)
emag_modules = list(/obj/item/melee/transforming/energy/sword/cyborg)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg,
/obj/item/clockwork/ratvarian_spear/cyborg,
@@ -257,29 +257,29 @@
feedback_key = "cyborg_standard"
hat_offset = -3
/obj/item/weapon/robot_module/medical
/obj/item/robot_module/medical
name = "Medical"
basic_modules = list(
/obj/item/device/assembly/flash/cyborg,
/obj/item/device/healthanalyzer,
/obj/item/weapon/reagent_containers/borghypo,
/obj/item/weapon/reagent_containers/glass/beaker/large,
/obj/item/weapon/reagent_containers/dropper,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/surgical_drapes,
/obj/item/weapon/retractor,
/obj/item/weapon/hemostat,
/obj/item/weapon/cautery,
/obj/item/weapon/surgicaldrill,
/obj/item/weapon/scalpel,
/obj/item/weapon/circular_saw,
/obj/item/weapon/extinguisher/mini,
/obj/item/reagent_containers/borghypo,
/obj/item/reagent_containers/glass/beaker/large,
/obj/item/reagent_containers/dropper,
/obj/item/reagent_containers/syringe,
/obj/item/surgical_drapes,
/obj/item/retractor,
/obj/item/hemostat,
/obj/item/cautery,
/obj/item/surgicaldrill,
/obj/item/scalpel,
/obj/item/circular_saw,
/obj/item/extinguisher/mini,
/obj/item/roller/robo,
/obj/item/borg/cyborghug/medical,
/obj/item/stack/medical/gauze/cyborg,
/obj/item/weapon/organ_storage,
/obj/item/organ_storage,
/obj/item/borg/lollipop)
emag_modules = list(/obj/item/weapon/reagent_containers/borghypo/hacked)
emag_modules = list(/obj/item/reagent_containers/borghypo/hacked)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/medical,
/obj/item/clockwork/ratvarian_spear/cyborg)
@@ -289,19 +289,19 @@
can_be_pushed = FALSE
hat_offset = 3
/obj/item/weapon/robot_module/engineering
/obj/item/robot_module/engineering
name = "Engineering"
basic_modules = list(
/obj/item/device/assembly/flash/cyborg,
/obj/item/borg/sight/meson,
/obj/item/weapon/construction/rcd/borg,
/obj/item/weapon/pipe_dispenser,
/obj/item/weapon/extinguisher,
/obj/item/weapon/weldingtool/largetank/cyborg,
/obj/item/weapon/screwdriver/cyborg,
/obj/item/weapon/wrench/cyborg,
/obj/item/weapon/crowbar/cyborg,
/obj/item/weapon/wirecutters/cyborg,
/obj/item/construction/rcd/borg,
/obj/item/pipe_dispenser,
/obj/item/extinguisher,
/obj/item/weldingtool/largetank/cyborg,
/obj/item/screwdriver/cyborg,
/obj/item/wrench/cyborg,
/obj/item/crowbar/cyborg,
/obj/item/wirecutters/cyborg,
/obj/item/device/multitool/cyborg,
/obj/item/device/t_scanner,
/obj/item/device/analyzer,
@@ -323,15 +323,15 @@
magpulsing = TRUE
hat_offset = INFINITY // No hats
/obj/item/weapon/robot_module/security
/obj/item/robot_module/security
name = "Security"
basic_modules = list(
/obj/item/device/assembly/flash/cyborg,
/obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg,
/obj/item/weapon/melee/baton/loaded,
/obj/item/weapon/gun/energy/disabler/cyborg,
/obj/item/restraints/handcuffs/cable/zipties/cyborg,
/obj/item/melee/baton/loaded,
/obj/item/gun/energy/disabler/cyborg,
/obj/item/clothing/mask/gas/sechailer/cyborg)
emag_modules = list(/obj/item/weapon/gun/energy/laser/cyborg)
emag_modules = list(/obj/item/gun/energy/laser/cyborg)
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security,
/obj/item/clockwork/ratvarian_spear/cyborg)
cyborg_base_icon = "sec"
@@ -340,23 +340,23 @@
can_be_pushed = FALSE
hat_offset = 3
/obj/item/weapon/robot_module/security/do_transform_animation()
/obj/item/robot_module/security/do_transform_animation()
..()
to_chat(loc, "<span class='userdanger'>While you have picked the security module, you still have to follow your laws, NOT Space Law. \
For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.</span>")
/obj/item/weapon/robot_module/k9
/obj/item/robot_module/k9
name = "Security K-9 Unit module"
basic_modules = list(
/obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg/dog,
/obj/item/weapon/dogborg/jaws/big,
/obj/item/weapon/dogborg/pounce,
/obj/item/restraints/handcuffs/cable/zipties/cyborg/dog,
/obj/item/dogborg/jaws/big,
/obj/item/dogborg/pounce,
/obj/item/clothing/mask/gas/sechailer/cyborg,
/obj/item/weapon/soap/tongue,
/obj/item/soap/tongue,
/obj/item/device/analyzer/nose,
/obj/item/device/dogborg/sleeper/K9,
/obj/item/weapon/gun/energy/disabler/cyborg)
emag_modules = list(/obj/item/weapon/gun/energy/laser/cyborg)
/obj/item/gun/energy/disabler/cyborg)
emag_modules = list(/obj/item/gun/energy/laser/cyborg)
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security,
/obj/item/clockwork/ratvarian_spear/cyborg)
cyborg_base_icon = "k9"
@@ -365,14 +365,14 @@
can_be_pushed = FALSE
hat_offset = INFINITY
/obj/item/weapon/robot_module/k9/do_transform_animation()
/obj/item/robot_module/k9/do_transform_animation()
..()
to_chat(loc,"<span class='userdanger'>While you have picked the security-k9 module, you still have to follow your laws, NOT Space Law. \
For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.</span>")
/obj/item/weapon/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
/obj/item/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
..()
var/obj/item/weapon/gun/energy/e_gun/advtaser/cyborg/T = locate(/obj/item/weapon/gun/energy/e_gun/advtaser/cyborg) in basic_modules
var/obj/item/gun/energy/e_gun/advtaser/cyborg/T = locate(/obj/item/gun/energy/e_gun/advtaser/cyborg) in basic_modules
if(T)
if(T.cell.charge < T.cell.maxcharge)
var/obj/item/ammo_casing/energy/S = T.ammo_type[T.select]
@@ -381,17 +381,17 @@
else
T.charge_tick = 0
/obj/item/weapon/robot_module/medihound
/obj/item/robot_module/medihound
name = "MediHound module"
basic_modules = list(
/obj/item/weapon/dogborg/jaws/small,
/obj/item/dogborg/jaws/small,
/obj/item/device/analyzer/nose,
/obj/item/weapon/soap/tongue,
/obj/item/soap/tongue,
/obj/item/device/healthanalyzer,
/obj/item/device/dogborg/sleeper,
/obj/item/weapon/twohanded/shockpaddles/hound,
/obj/item/twohanded/shockpaddles/hound,
/obj/item/device/sensor_device)
emag_modules = list(/obj/item/weapon/dogborg/pounce)
emag_modules = list(/obj/item/dogborg/pounce)
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/medical,
/obj/item/clockwork/ratvarian_spear/cyborg)
cyborg_base_icon = "medihound"
@@ -400,21 +400,21 @@
can_be_pushed = FALSE
hat_offset = INFINITY
/obj/item/weapon/robot_module/medihound/do_transform_animation()
/obj/item/robot_module/medihound/do_transform_animation()
..()
to_chat(loc, "<span class='userdanger'>Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. \
You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.</span>")
/obj/item/weapon/robot_module/scrubpup
/obj/item/robot_module/scrubpup
name = "Janitor"
basic_modules = list(
/obj/item/device/assembly/flash/cyborg,
/obj/item/weapon/dogborg/jaws/small,
/obj/item/dogborg/jaws/small,
/obj/item/device/analyzer/nose,
/obj/item/weapon/soap/tongue,
/obj/item/soap/tongue,
/obj/item/device/lightreplacer/cyborg,
/obj/item/device/dogborg/sleeper/compactor)
emag_modules = list(/obj/item/weapon/dogborg/pounce)
emag_modules = list(/obj/item/dogborg/pounce)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/janitor,
/obj/item/clockwork/replica_fabricator/cyborg)
@@ -424,30 +424,30 @@
hat_offset = INFINITY
clean_on_move = TRUE
/obj/item/weapon/robot_module/scrubpup/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
/obj/item/robot_module/scrubpup/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
..()
var/obj/item/device/lightreplacer/LR = locate(/obj/item/device/lightreplacer) in basic_modules
if(LR)
for(var/i in 1 to coeff)
LR.Charge(R)
/obj/item/weapon/robot_module/scrubpup/do_transform_animation()
/obj/item/robot_module/scrubpup/do_transform_animation()
..()
to_chat(loc,"<span class='userdanger'>As tempting as it might be, do not begin binging on important items. Eat your garbage responsibly. People are not included under Garbage.</span>")
/obj/item/weapon/robot_module/peacekeeper
/obj/item/robot_module/peacekeeper
name = "Peacekeeper"
basic_modules = list(
/obj/item/device/assembly/flash/cyborg,
/obj/item/weapon/cookiesynth,
/obj/item/cookiesynth,
/obj/item/device/harmalarm,
/obj/item/weapon/reagent_containers/borghypo/peace,
/obj/item/weapon/holosign_creator/cyborg,
/obj/item/reagent_containers/borghypo/peace,
/obj/item/holosign_creator/cyborg,
/obj/item/borg/cyborghug/peacekeeper,
/obj/item/weapon/extinguisher,
/obj/item/extinguisher,
/obj/item/borg/projectile_dampen)
emag_modules = list(/obj/item/weapon/reagent_containers/borghypo/peace/hacked)
emag_modules = list(/obj/item/reagent_containers/borghypo/peace/hacked)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/peacekeeper,
/obj/item/clockwork/ratvarian_spear/cyborg)
@@ -457,26 +457,26 @@
can_be_pushed = FALSE
hat_offset = -2
/obj/item/weapon/robot_module/peacekeeper/do_transform_animation()
/obj/item/robot_module/peacekeeper/do_transform_animation()
..()
to_chat(loc, "<span class='userdanger'>Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. \
You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.</span>")
/obj/item/weapon/robot_module/janitor
/obj/item/robot_module/janitor
name = "Janitor"
basic_modules = list(
/obj/item/device/assembly/flash/cyborg,
/obj/item/weapon/screwdriver/cyborg,
/obj/item/weapon/crowbar/cyborg,
/obj/item/screwdriver/cyborg,
/obj/item/crowbar/cyborg,
/obj/item/stack/tile/plasteel/cyborg,
/obj/item/weapon/soap/nanotrasen,
/obj/item/weapon/storage/bag/trash/cyborg,
/obj/item/weapon/extinguisher/mini,
/obj/item/weapon/mop/cyborg,
/obj/item/soap/nanotrasen,
/obj/item/storage/bag/trash/cyborg,
/obj/item/extinguisher/mini,
/obj/item/mop/cyborg,
/obj/item/device/lightreplacer/cyborg,
/obj/item/weapon/holosign_creator,
/obj/item/weapon/reagent_containers/spray/cyborg_drying)
emag_modules = list(/obj/item/weapon/reagent_containers/spray/cyborg_lube)
/obj/item/holosign_creator,
/obj/item/reagent_containers/spray/cyborg_drying)
emag_modules = list(/obj/item/reagent_containers/spray/cyborg_lube)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/janitor,
/obj/item/clockwork/replica_fabricator/cyborg)
@@ -486,50 +486,50 @@
hat_offset = -5
clean_on_move = TRUE
/obj/item/weapon/reagent_containers/spray/cyborg_drying
/obj/item/reagent_containers/spray/cyborg_drying
name = "drying agent spray"
color = "#A000A0"
list_reagents = list("drying_agent" = 250)
/obj/item/weapon/reagent_containers/spray/cyborg_lube
/obj/item/reagent_containers/spray/cyborg_lube
name = "lube spray"
list_reagents = list("lube" = 250)
/obj/item/weapon/robot_module/janitor/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
/obj/item/robot_module/janitor/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
..()
var/obj/item/device/lightreplacer/LR = locate(/obj/item/device/lightreplacer) in basic_modules
if(LR)
for(var/i in 1 to coeff)
LR.Charge(R)
var/obj/item/weapon/reagent_containers/spray/cyborg_drying/CD = locate(/obj/item/weapon/reagent_containers/spray/cyborg_drying) in basic_modules
var/obj/item/reagent_containers/spray/cyborg_drying/CD = locate(/obj/item/reagent_containers/spray/cyborg_drying) in basic_modules
if(CD)
CD.reagents.add_reagent("drying_agent", 5 * coeff)
var/obj/item/weapon/reagent_containers/spray/cyborg_lube/CL = locate(/obj/item/weapon/reagent_containers/spray/cyborg_lube) in emag_modules
var/obj/item/reagent_containers/spray/cyborg_lube/CL = locate(/obj/item/reagent_containers/spray/cyborg_lube) in emag_modules
if(CL)
CL.reagents.add_reagent("lube", 2 * coeff)
/obj/item/weapon/robot_module/butler
/obj/item/robot_module/butler
name = "Service"
basic_modules = list(
/obj/item/device/assembly/flash/cyborg,
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,
/obj/item/weapon/reagent_containers/food/condiment/enzyme,
/obj/item/weapon/pen,
/obj/item/reagent_containers/food/drinks/drinkingglass,
/obj/item/reagent_containers/food/condiment/enzyme,
/obj/item/pen,
/obj/item/toy/crayon/spraycan/borg,
/obj/item/weapon/extinguisher/mini,
/obj/item/weapon/hand_labeler/borg,
/obj/item/weapon/razor,
/obj/item/extinguisher/mini,
/obj/item/hand_labeler/borg,
/obj/item/razor,
/obj/item/device/instrument/violin,
/obj/item/device/instrument/guitar,
/obj/item/weapon/rsf/cyborg,
/obj/item/weapon/reagent_containers/dropper,
/obj/item/weapon/lighter,
/obj/item/weapon/storage/bag/tray,
/obj/item/weapon/reagent_containers/borghypo/borgshaker,
/obj/item/rsf/cyborg,
/obj/item/reagent_containers/dropper,
/obj/item/lighter,
/obj/item/storage/bag/tray,
/obj/item/reagent_containers/borghypo/borgshaker,
/obj/item/borg/lollipop)
emag_modules = list(/obj/item/weapon/reagent_containers/borghypo/borgshaker/hacked)
emag_modules = list(/obj/item/reagent_containers/borghypo/borgshaker/hacked)
ratvar_modules = list(/obj/item/clockwork/slab/cyborg/service,
/obj/item/borg/sight/xray/truesight_lens)
moduleselect_icon = "service"
@@ -537,13 +537,13 @@
feedback_key = "cyborg_service"
hat_offset = 0
/obj/item/weapon/robot_module/butler/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
/obj/item/robot_module/butler/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
..()
var/obj/item/weapon/reagent_containers/O = locate(/obj/item/weapon/reagent_containers/food/condiment/enzyme) in basic_modules
var/obj/item/reagent_containers/O = locate(/obj/item/reagent_containers/food/condiment/enzyme) in basic_modules
if(O)
O.reagents.add_reagent("enzyme", 2 * coeff)
/obj/item/weapon/robot_module/butler/be_transformed_to(obj/item/weapon/robot_module/old_module)
/obj/item/robot_module/butler/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Waitress", "Butler", "Tophat", "Kent", "Bro")
if(!borg_icon)
@@ -565,19 +565,19 @@
hat_offset = INFINITY //He is already wearing a hat
return ..()
/obj/item/weapon/robot_module/miner
/obj/item/robot_module/miner
name = "Miner"
basic_modules = list(
/obj/item/device/assembly/flash/cyborg,
/obj/item/weapon/storage/bag/ore/cyborg,
/obj/item/weapon/pickaxe/drill/cyborg,
/obj/item/weapon/shovel,
/obj/item/weapon/crowbar/cyborg,
/obj/item/weapon/weldingtool/mini,
/obj/item/weapon/extinguisher/mini,
/obj/item/weapon/storage/bag/sheetsnatcher/borg,
/obj/item/storage/bag/ore/cyborg,
/obj/item/pickaxe/drill/cyborg,
/obj/item/shovel,
/obj/item/crowbar/cyborg,
/obj/item/weldingtool/mini,
/obj/item/extinguisher/mini,
/obj/item/storage/bag/sheetsnatcher/borg,
/obj/item/device/t_scanner/adv_mining_scanner,
/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg,
/obj/item/gun/energy/kinetic_accelerator/cyborg,
/obj/item/device/gps/cyborg,
/obj/item/stack/marker_beacon)
emag_modules = list(/obj/item/borg/stun)
@@ -590,16 +590,16 @@
feedback_key = "cyborg_miner"
hat_offset = 0
/obj/item/weapon/robot_module/syndicate
/obj/item/robot_module/syndicate
name = "Syndicate Assault"
basic_modules = list(
/obj/item/device/assembly/flash/cyborg,
/obj/item/weapon/melee/transforming/energy/sword/cyborg,
/obj/item/weapon/gun/energy/printer,
/obj/item/weapon/gun/ballistic/revolver/grenadelauncher/cyborg,
/obj/item/weapon/card/emag,
/obj/item/weapon/crowbar/cyborg,
/obj/item/weapon/pinpointer/syndicate/cyborg)
/obj/item/melee/transforming/energy/sword/cyborg,
/obj/item/gun/energy/printer,
/obj/item/gun/ballistic/revolver/grenadelauncher/cyborg,
/obj/item/card/emag,
/obj/item/crowbar/cyborg,
/obj/item/pinpointer/syndicate/cyborg)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/security,
@@ -609,25 +609,25 @@
can_be_pushed = FALSE
hat_offset = 3
/obj/item/weapon/robot_module/syndicate_medical
/obj/item/robot_module/syndicate_medical
name = "Syndicate Medical"
basic_modules = list(
/obj/item/device/assembly/flash/cyborg,
/obj/item/weapon/reagent_containers/borghypo/syndicate,
/obj/item/weapon/twohanded/shockpaddles/syndicate,
/obj/item/reagent_containers/borghypo/syndicate,
/obj/item/twohanded/shockpaddles/syndicate,
/obj/item/device/healthanalyzer,
/obj/item/weapon/surgical_drapes,
/obj/item/weapon/retractor,
/obj/item/weapon/hemostat,
/obj/item/weapon/cautery,
/obj/item/weapon/scalpel,
/obj/item/weapon/melee/transforming/energy/sword/cyborg/saw,
/obj/item/surgical_drapes,
/obj/item/retractor,
/obj/item/hemostat,
/obj/item/cautery,
/obj/item/scalpel,
/obj/item/melee/transforming/energy/sword/cyborg/saw,
/obj/item/roller/robo,
/obj/item/weapon/card/emag,
/obj/item/weapon/crowbar/cyborg,
/obj/item/weapon/pinpointer/syndicate/cyborg,
/obj/item/card/emag,
/obj/item/crowbar/cyborg,
/obj/item/pinpointer/syndicate/cyborg,
/obj/item/stack/medical/gauze/cyborg,
/obj/item/weapon/gun/medbeam)
/obj/item/gun/medbeam)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/medical,
/obj/item/clockwork/ratvarian_spear/cyborg)
@@ -642,7 +642,7 @@
var/recharge_rate = 1000
var/energy
/datum/robot_energy_storage/New(var/obj/item/weapon/robot_module/R = null)
/datum/robot_energy_storage/New(var/obj/item/robot_module/R = null)
energy = max_energy
if(R)
R.storages |= src
@@ -117,7 +117,7 @@
/mob/living/simple_animal/bot/Initialize()
. = ..()
access_card = new /obj/item/weapon/card/id(src)
access_card = new /obj/item/card/id(src)
//This access is so bots can be immediately set to patrol and leave Robotics, instead of having to be let out first.
access_card.access += ACCESS_ROBOTICS
set_custom_texts()
@@ -241,14 +241,14 @@
/mob/living/simple_animal/bot/interact(mob/user)
show_controls(user)
/mob/living/simple_animal/bot/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/screwdriver))
/mob/living/simple_animal/bot/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/screwdriver))
if(!locked)
open = !open
to_chat(user, "<span class='notice'>The maintenance panel is now [open ? "opened" : "closed"].</span>")
else
to_chat(user, "<span class='warning'>The maintenance panel is locked.</span>")
else if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))
else if(istype(W, /obj/item/card/id) || istype(W, /obj/item/device/pda))
if(bot_core.allowed(user) && !open && !emagged)
locked = !locked
to_chat(user, "Controls are now [locked ? "locked." : "unlocked."]")
@@ -261,7 +261,7 @@
to_chat(user, "<span class='warning'>Access denied.</span>")
else if(istype(W, /obj/item/device/paicard))
insertpai(user, W)
else if(istype(W, /obj/item/weapon/hemostat) && paicard)
else if(istype(W, /obj/item/hemostat) && paicard)
if(open)
to_chat(user, "<span class='warning'>Close the access panel before manipulating the personality slot!</span>")
else
@@ -272,14 +272,14 @@
ejectpai(user)
else
user.changeNext_move(CLICK_CD_MELEE)
if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM)
if(istype(W, /obj/item/weldingtool) && user.a_intent != INTENT_HARM)
if(health >= maxHealth)
to_chat(user, "<span class='warning'>[src] does not need a repair!</span>")
return
if(!open)
to_chat(user, "<span class='warning'>Unable to repair with the maintenance panel closed!</span>")
return
var/obj/item/weapon/weldingtool/WT = W
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0, user))
adjustHealth(-10)
user.visible_message("[user] repairs [src]!","<span class='notice'>You repair [src].</span>")
@@ -472,7 +472,7 @@ Pass a positive integer as an argument to override a bot's default speed.
to_chat(src, "<span class='noticebig'>Priority waypoint set by [icon2html(caller, src)] <b>[caller]</b>. Proceed to <b>[end_area.name]<\b>.")
//For giving the bot temporary all-access.
var/obj/item/weapon/card/id/all_access = new /obj/item/weapon/card/id
var/obj/item/card/id/all_access = new /obj/item/card/id
var/datum/job/captain/All = new/datum/job/captain
all_access.access = All.get_access()
@@ -61,8 +61,8 @@
text_dehack = "[name]'s software has been reset!"
text_dehack_fail = "[name] does not seem to respond to your repair code!"
/mob/living/simple_animal/bot/cleanbot/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
/mob/living/simple_animal/bot/cleanbot/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/card/id)||istype(W, /obj/item/device/pda))
if(bot_core.allowed(user) && !open && !emagged)
locked = !locked
to_chat(user, "<span class='notice'>You [ locked ? "lock" : "unlock"] \the [src] behaviour controls.</span>")
@@ -254,7 +254,7 @@
visible_message("<span class='boldannounce'>[src] blows apart!</span>")
var/turf/Tsec = get_turf(src)
new /obj/item/weapon/reagent_containers/glass/bucket(Tsec)
new /obj/item/reagent_containers/glass/bucket(Tsec)
new /obj/item/device/assembly/prox_sensor(Tsec)
@@ -1,7 +1,7 @@
//Bot Construction
//Cleanbot assembly
/obj/item/weapon/bucket_sensor
/obj/item/bucket_sensor
desc = "It's a bucket. With a sensor attached."
name = "proxy bucket"
icon = 'icons/mob/aibots.dmi'
@@ -13,7 +13,7 @@
w_class = WEIGHT_CLASS_NORMAL
var/created_name = "Cleanbot"
/obj/item/weapon/bucket_sensor/attackby(obj/item/W, mob/user as mob, params)
/obj/item/bucket_sensor/attackby(obj/item/W, mob/user as mob, params)
..()
if(istype(W, /obj/item/bodypart/l_arm/robot) || istype(W, /obj/item/bodypart/r_arm/robot))
if(!user.temporarilyRemoveItemFromInventory(W))
@@ -25,7 +25,7 @@
to_chat(user, "<span class='notice'>You add the robot arm to the bucket and sensor assembly. Beep boop!</span>")
qdel(src)
else if(istype(W, /obj/item/weapon/pen))
else if(istype(W, /obj/item/pen))
var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN)
if(!t)
return
@@ -35,7 +35,7 @@
//Edbot Assembly
/obj/item/weapon/ed209_assembly
/obj/item/ed209_assembly
name = "\improper ED-209 assembly"
desc = "Some sort of bizarre assembly."
icon = 'icons/mob/aibots.dmi'
@@ -45,10 +45,10 @@
var/created_name = "ED-209 Security Robot" //To preserve the name if it's a unique securitron I guess
var/lasercolor = ""
/obj/item/weapon/ed209_assembly/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/ed209_assembly/attackby(obj/item/W, mob/user, params)
..()
if(istype(W, /obj/item/weapon/pen))
if(istype(W, /obj/item/pen))
var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN)
if(!t)
return
@@ -91,8 +91,8 @@
icon_state = "[lasercolor]ed209_shell"
if(3)
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0,user))
build_step++
name = "shielded frame assembly"
@@ -149,15 +149,15 @@
var/newname = ""
switch(lasercolor)
if("b")
if(!istype(W, /obj/item/weapon/gun/energy/laser/bluetag))
if(!istype(W, /obj/item/gun/energy/laser/bluetag))
return
newname = "bluetag ED-209 assembly"
if("r")
if(!istype(W, /obj/item/weapon/gun/energy/laser/redtag))
if(!istype(W, /obj/item/gun/energy/laser/redtag))
return
newname = "redtag ED-209 assembly"
if("")
if(!istype(W, /obj/item/weapon/gun/energy/e_gun/advtaser))
if(!istype(W, /obj/item/gun/energy/e_gun/advtaser))
return
newname = "taser ED-209 assembly"
else
@@ -172,7 +172,7 @@
qdel(W)
if(8)
if(istype(W, /obj/item/weapon/screwdriver))
if(istype(W, /obj/item/screwdriver))
playsound(loc, W.usesound, 100, 1)
to_chat(user, "<span class='notice'>You start attaching the gun to the frame...</span>")
if(do_after(user, 40*W.toolspeed, 0, src, 1))
@@ -181,7 +181,7 @@
to_chat(user, "<span class='notice'>Taser gun attached.</span>")
if(9)
if(istype(W, /obj/item/weapon/stock_parts/cell))
if(istype(W, /obj/item/stock_parts/cell))
if(!user.temporarilyRemoveItemFromInventory(W))
return
build_step++
@@ -192,7 +192,7 @@
qdel(src)
//Floorbot assemblies
/obj/item/weapon/toolbox_tiles
/obj/item/toolbox_tiles
desc = "It's a toolbox with tiles sticking out the top"
name = "tiles and toolbox"
icon = 'icons/mob/aibots.dmi'
@@ -204,7 +204,7 @@
w_class = WEIGHT_CLASS_NORMAL
var/created_name = "Floorbot"
/obj/item/weapon/toolbox_tiles_sensor
/obj/item/toolbox_tiles_sensor
desc = "It's a toolbox with tiles sticking out the top and a sensor attached"
name = "tiles, toolbox and sensor arrangement"
icon = 'icons/mob/aibots.dmi'
@@ -216,7 +216,7 @@
w_class = WEIGHT_CLASS_NORMAL
var/created_name = "Floorbot"
/obj/item/weapon/storage/toolbox/mechanical/attackby(obj/item/stack/tile/plasteel/T, mob/user, params)
/obj/item/storage/toolbox/mechanical/attackby(obj/item/stack/tile/plasteel/T, mob/user, params)
if(!istype(T, /obj/item/stack/tile/plasteel))
..()
return
@@ -226,7 +226,7 @@
if(T.use(10))
if(user.s_active)
user.s_active.close(user)
var/obj/item/weapon/toolbox_tiles/B = new /obj/item/weapon/toolbox_tiles
var/obj/item/toolbox_tiles/B = new /obj/item/toolbox_tiles
user.put_in_hands(B)
to_chat(user, "<span class='notice'>You add the tiles into the empty toolbox. They protrude from the top.</span>")
qdel(src)
@@ -234,17 +234,17 @@
to_chat(user, "<span class='warning'>You need 10 floor tiles to start building a floorbot!</span>")
return
/obj/item/weapon/toolbox_tiles/attackby(obj/item/W, mob/user, params)
/obj/item/toolbox_tiles/attackby(obj/item/W, mob/user, params)
..()
if(isprox(W))
qdel(W)
var/obj/item/weapon/toolbox_tiles_sensor/B = new /obj/item/weapon/toolbox_tiles_sensor()
var/obj/item/toolbox_tiles_sensor/B = new /obj/item/toolbox_tiles_sensor()
B.created_name = created_name
user.put_in_hands(B)
to_chat(user, "<span class='notice'>You add the sensor to the toolbox and tiles.</span>")
qdel(src)
else if(istype(W, /obj/item/weapon/pen))
else if(istype(W, /obj/item/pen))
var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN)
if(!t)
return
@@ -253,7 +253,7 @@
created_name = t
/obj/item/weapon/toolbox_tiles_sensor/attackby(obj/item/W, mob/user, params)
/obj/item/toolbox_tiles_sensor/attackby(obj/item/W, mob/user, params)
..()
if(istype(W, /obj/item/bodypart/l_arm/robot) || istype(W, /obj/item/bodypart/r_arm/robot))
qdel(W)
@@ -262,7 +262,7 @@
A.name = created_name
to_chat(user, "<span class='notice'>You add the robot arm to the odd looking toolbox assembly. Boop beep!</span>")
qdel(src)
else if(istype(W, /obj/item/weapon/pen))
else if(istype(W, /obj/item/pen))
var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN)
if(!t)
return
@@ -272,7 +272,7 @@
created_name = t
//Medbot Assembly
/obj/item/weapon/firstaid_arm_assembly
/obj/item/firstaid_arm_assembly
name = "incomplete medibot assembly"
desc = "A first aid kit with a robot arm permanently grafted to it."
icon = 'icons/mob/aibots.dmi'
@@ -282,13 +282,13 @@
var/skin = null //Same as medbot, set to tox or ointment for the respective kits.
w_class = WEIGHT_CLASS_NORMAL
/obj/item/weapon/firstaid_arm_assembly/New()
/obj/item/firstaid_arm_assembly/New()
..()
spawn(5)
if(skin)
add_overlay("kit_skin_[skin]")
/obj/item/weapon/storage/firstaid/attackby(obj/item/bodypart/S, mob/user, params)
/obj/item/storage/firstaid/attackby(obj/item/bodypart/S, mob/user, params)
if((!istype(S, /obj/item/bodypart/l_arm/robot)) && (!istype(S, /obj/item/bodypart/r_arm/robot)))
return ..()
@@ -298,14 +298,14 @@
to_chat(user, "<span class='warning'>You need to empty [src] out first!</span>")
return
var/obj/item/weapon/firstaid_arm_assembly/A = new /obj/item/weapon/firstaid_arm_assembly
if(istype(src, /obj/item/weapon/storage/firstaid/fire))
var/obj/item/firstaid_arm_assembly/A = new /obj/item/firstaid_arm_assembly
if(istype(src, /obj/item/storage/firstaid/fire))
A.skin = "ointment"
else if(istype(src, /obj/item/weapon/storage/firstaid/toxin))
else if(istype(src, /obj/item/storage/firstaid/toxin))
A.skin = "tox"
else if(istype(src, /obj/item/weapon/storage/firstaid/o2))
else if(istype(src, /obj/item/storage/firstaid/o2))
A.skin = "o2"
else if(istype(src, /obj/item/weapon/storage/firstaid/brute))
else if(istype(src, /obj/item/storage/firstaid/brute))
A.skin = "brute"
qdel(S)
@@ -314,9 +314,9 @@
qdel(src)
/obj/item/weapon/firstaid_arm_assembly/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/firstaid_arm_assembly/attackby(obj/item/W, mob/user, params)
..()
if(istype(W, /obj/item/weapon/pen))
if(istype(W, /obj/item/pen))
var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN)
if(!t)
return
@@ -348,7 +348,7 @@
qdel(src)
//Secbot Assembly
/obj/item/weapon/secbot_assembly
/obj/item/secbot_assembly
name = "incomplete securitron assembly"
desc = "Some sort of bizarre assembly made from a proximity sensor, helmet, and signaler."
icon = 'icons/mob/aibots.dmi'
@@ -372,24 +372,24 @@
if(S.secured)
qdel(S)
var/obj/item/weapon/secbot_assembly/A = new /obj/item/weapon/secbot_assembly
var/obj/item/secbot_assembly/A = new /obj/item/secbot_assembly
user.put_in_hands(A)
to_chat(user, "<span class='notice'>You add the signaler to the helmet.</span>")
qdel(src)
else
return
/obj/item/weapon/secbot_assembly/attackby(obj/item/I, mob/user, params)
/obj/item/secbot_assembly/attackby(obj/item/I, mob/user, params)
..()
if(istype(I, /obj/item/weapon/weldingtool))
if(istype(I, /obj/item/weldingtool))
if(!build_step)
var/obj/item/weapon/weldingtool/WT = I
var/obj/item/weldingtool/WT = I
if(WT.remove_fuel(0, user))
build_step++
add_overlay("hs_hole")
to_chat(user, "<span class='notice'>You weld a hole in [src]!</span>")
else if(build_step == 1)
var/obj/item/weapon/weldingtool/WT = I
var/obj/item/weldingtool/WT = I
if(WT.remove_fuel(0, user))
build_step--
cut_overlay("hs_hole")
@@ -413,7 +413,7 @@
add_overlay("hs_arm")
qdel(I)
else if((istype(I, /obj/item/weapon/melee/baton)) && (build_step >= 3))
else if((istype(I, /obj/item/melee/baton)) && (build_step >= 3))
if(!user.temporarilyRemoveItemFromInventory(I))
return
build_step++
@@ -424,7 +424,7 @@
qdel(I)
qdel(src)
else if(istype(I, /obj/item/weapon/pen))
else if(istype(I, /obj/item/pen))
var/t = stripped_input(user, "Enter new robot name", name, created_name,MAX_NAME_LEN)
if(!t)
return
@@ -432,7 +432,7 @@
return
created_name = t
else if(istype(I, /obj/item/weapon/screwdriver))
else if(istype(I, /obj/item/screwdriver))
if(!build_step)
new /obj/item/device/assembly/signaler(get_turf(src))
new /obj/item/clothing/head/helmet/sec(get_turf(src))
@@ -179,11 +179,11 @@ Auto Patrol[]"},
retaliate(H)
return ..()
/mob/living/simple_animal/bot/ed209/attackby(obj/item/weapon/W, mob/user, params)
/mob/living/simple_animal/bot/ed209/attackby(obj/item/W, mob/user, params)
..()
if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry.
if(istype(W, /obj/item/weldingtool) && user.a_intent != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry.
return
if(!istype(W, /obj/item/weapon/screwdriver) && (!target)) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass.
if(!istype(W, /obj/item/screwdriver) && (!target)) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass.
if(W.force && W.damtype != STAMINA)//If force is non-zero and damage type isn't stamina.
retaliate(user)
if(lasercolor)//To make up for the fact that lasertag bots don't hunt
@@ -373,22 +373,22 @@ Auto Patrol[]"},
visible_message("<span class='boldannounce'>[src] blows apart!</span>")
var/turf/Tsec = get_turf(src)
var/obj/item/weapon/ed209_assembly/Sa = new /obj/item/weapon/ed209_assembly(Tsec)
var/obj/item/ed209_assembly/Sa = new /obj/item/ed209_assembly(Tsec)
Sa.build_step = 1
Sa.add_overlay("hs_hole")
Sa.created_name = name
new /obj/item/device/assembly/prox_sensor(Tsec)
if(!lasercolor)
var/obj/item/weapon/gun/energy/e_gun/advtaser/G = new /obj/item/weapon/gun/energy/e_gun/advtaser(Tsec)
var/obj/item/gun/energy/e_gun/advtaser/G = new /obj/item/gun/energy/e_gun/advtaser(Tsec)
G.cell.charge = 0
G.update_icon()
else if(lasercolor == "b")
var/obj/item/weapon/gun/energy/laser/bluetag/G = new /obj/item/weapon/gun/energy/laser/bluetag(Tsec)
var/obj/item/gun/energy/laser/bluetag/G = new /obj/item/gun/energy/laser/bluetag(Tsec)
G.cell.charge = 0
G.update_icon()
else if(lasercolor == "r")
var/obj/item/weapon/gun/energy/laser/redtag/G = new /obj/item/weapon/gun/energy/laser/redtag(Tsec)
var/obj/item/gun/energy/laser/redtag/G = new /obj/item/gun/energy/laser/redtag(Tsec)
G.cell.charge = 0
G.update_icon()
@@ -562,6 +562,6 @@ Auto Patrol[]"},
if( !Adjacent(C) || !isturf(C.loc) ) //if he's in a closet or not adjacent, we cancel cuffing.
return
if(!C.handcuffed)
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C)
C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C)
C.update_handcuffed()
back_to_idle()
@@ -367,7 +367,7 @@
visible_message("<span class='boldannounce'>[src] blows apart!</span>")
var/turf/Tsec = get_turf(src)
var/obj/item/weapon/storage/toolbox/mechanical/N = new /obj/item/weapon/storage/toolbox/mechanical(Tsec)
var/obj/item/storage/toolbox/mechanical/N = new /obj/item/storage/toolbox/mechanical(Tsec)
N.contents = list()
new /obj/item/device/assembly/prox_sensor(Tsec)
@@ -26,7 +26,7 @@
window_name = "Automatic Medical Unit v1.1"
data_hud_type = DATA_HUD_MEDICAL_ADVANCED
var/obj/item/weapon/reagent_containers/glass/reagent_glass = null //Can be set to draw from this for reagents.
var/obj/item/reagent_containers/glass/reagent_glass = null //Can be set to draw from this for reagents.
var/skin = null //Set to "tox", "ointment" or "o2" for the other two firstaid kits.
var/mob/living/carbon/patient = null
var/mob/living/carbon/oldpatient = null
@@ -214,8 +214,8 @@
update_controls()
return
/mob/living/simple_animal/bot/medbot/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/weapon/reagent_containers/glass))
/mob/living/simple_animal/bot/medbot/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/reagent_containers/glass))
. = 1 //no afterattack
if(locked)
to_chat(user, "<span class='warning'>You cannot insert a beaker because the panel is locked!</span>")
@@ -516,7 +516,7 @@
visible_message("<span class='boldannounce'>[src] blows apart!</span>")
var/turf/Tsec = get_turf(src)
new /obj/item/weapon/storage/firstaid(Tsec)
new /obj/item/storage/firstaid(Tsec)
new /obj/item/device/assembly/prox_sensor(Tsec)
@@ -43,7 +43,7 @@
var/auto_pickup = 1 // true if auto-pickup at beacon
var/report_delivery = 1 // true if bot will announce an arrival to a location.
var/obj/item/weapon/stock_parts/cell/cell
var/obj/item/stock_parts/cell/cell
var/bloodiness = 0
/mob/living/simple_animal/bot/mulebot/Initialize()
@@ -79,19 +79,19 @@
reached_target = 0
/mob/living/simple_animal/bot/mulebot/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
if(istype(I, /obj/item/screwdriver))
..()
if(open)
on = FALSE
else if(istype(I, /obj/item/weapon/stock_parts/cell) && open && !cell)
else if(istype(I, /obj/item/stock_parts/cell) && open && !cell)
if(!user.drop_item())
return
var/obj/item/weapon/stock_parts/cell/C = I
var/obj/item/stock_parts/cell/C = I
C.loc = src
cell = C
visible_message("[user] inserts a cell into [src].",
"<span class='notice'>You insert the new cell into [src].</span>")
else if(istype(I, /obj/item/weapon/crowbar) && open && cell)
else if(istype(I, /obj/item/crowbar) && open && cell)
cell.add_fingerprint(usr)
cell.loc = loc
cell = null
@@ -15,7 +15,7 @@
bot_type = SEC_BOT
model = "Securitron"
bot_core_type = /obj/machinery/bot_core/secbot
var/baton_type = /obj/item/weapon/melee/baton
var/baton_type = /obj/item/melee/baton
window_id = "autosec"
window_name = "Automatic Security Unit v1.6"
allow_pai = 0
@@ -51,8 +51,8 @@
/mob/living/simple_animal/bot/secbot/beepsky/explode()
var/turf/Tsec = get_turf(src)
new /obj/item/weapon/stock_parts/cell/potato(Tsec)
var/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/S = new(Tsec)
new /obj/item/stock_parts/cell/potato(Tsec)
var/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/S = new(Tsec)
S.reagents.add_reagent("whiskey", 15)
S.on_reagent_change()
..()
@@ -173,11 +173,11 @@ Auto Patrol: []"},
return ..()
/mob/living/simple_animal/bot/secbot/attackby(obj/item/weapon/W, mob/user, params)
/mob/living/simple_animal/bot/secbot/attackby(obj/item/W, mob/user, params)
..()
if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry.
if(istype(W, /obj/item/weldingtool) && user.a_intent != INTENT_HARM) // Any intent but harm will heal, so we shouldn't get angry.
return
if(!istype(W, /obj/item/weapon/screwdriver) && (W.force) && (!target) && (W.damtype != STAMINA) ) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass.
if(!istype(W, /obj/item/screwdriver) && (W.force) && (!target) && (W.damtype != STAMINA) ) // Added check for welding tool to fix #2432. Welding tool behavior is handled in superclass.
retaliate(user)
/mob/living/simple_animal/bot/secbot/emag_act(mob/user)
@@ -229,7 +229,7 @@ Auto Patrol: []"},
if( !Adjacent(C) || !isturf(C.loc) ) //if he's in a closet or not adjacent, we cancel cuffing.
return
if(!C.handcuffed)
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C)
C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C)
C.update_handcuffed()
playsound(loc, pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg'), 50, 0)
back_to_idle()
@@ -401,7 +401,7 @@ Auto Patrol: []"},
visible_message("<span class='boldannounce'>[src] blows apart!</span>")
var/turf/Tsec = get_turf(src)
var/obj/item/weapon/secbot_assembly/Sa = new /obj/item/weapon/secbot_assembly(Tsec)
var/obj/item/secbot_assembly/Sa = new /obj/item/secbot_assembly(Tsec)
Sa.build_step = 1
Sa.add_overlay("hs_hole")
Sa.created_name = name
@@ -26,7 +26,7 @@
pressure_resistance = 100
unique_name = 1
AIStatus = AI_OFF //normal constructs don't have AI
loot = list(/obj/item/weapon/ectoplasm)
loot = list(/obj/item/ectoplasm)
del_on_death = TRUE
initial_language_holder = /datum/language_holder/construct
deathmessage = "collapses in a shattered heap."
@@ -23,8 +23,8 @@
ears = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas
head = /obj/item/clothing/head/helmet/swat
back = /obj/item/weapon/storage/backpack
id = /obj/item/weapon/card/id
back = /obj/item/storage/backpack
id = /obj/item/card/id
/obj/effect/mob_spawn/human/corpse/syndicatecommando
@@ -41,9 +41,9 @@
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/syndicate
back = /obj/item/weapon/tank/jetpack/oxygen
r_pocket = /obj/item/weapon/tank/internals/emergency_oxygen
id = /obj/item/weapon/card/id
back = /obj/item/tank/jetpack/oxygen
r_pocket = /obj/item/tank/internals/emergency_oxygen
id = /obj/item/card/id
/obj/effect/mob_spawn/human/corpse/syndicatestormtrooper
@@ -60,8 +60,8 @@
gloves = /obj/item/clothing/gloves/combat
ears = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/syndicate
back = /obj/item/weapon/tank/jetpack/oxygen/harness
id = /obj/item/weapon/card/id
back = /obj/item/tank/jetpack/oxygen/harness
id = /obj/item/card/id
/obj/effect/mob_spawn/human/clown/corpse
@@ -163,5 +163,5 @@
ears = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/sechailer/swat
head = /obj/item/clothing/head/helmet/swat/nanotrasen
back = /obj/item/weapon/storage/backpack/security
id = /obj/item/weapon/card/id
back = /obj/item/storage/backpack/security
id = /obj/item/card/id
@@ -22,7 +22,7 @@
unsuitable_atmos_damage = 1
animal_species = /mob/living/simple_animal/pet/cat
childtype = list(/mob/living/simple_animal/pet/cat/kitten)
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -232,8 +232,8 @@
maxHealth = 50
gender = FEMALE
harm_intent_damage = 10
butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday = 3, \
/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2)
butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/reagent_containers/food/snacks/cakeslice/birthday = 3, \
/obj/item/reagent_containers/food/snacks/meat/slab = 2)
response_harm = "takes a bite out of"
attacked_sound = 'sound/items/eatfood.ogg'
deathmessage = "loses its false life and collapses!"
@@ -259,7 +259,7 @@
return
if(health < maxHealth)
adjustBruteLoss(-8) //Fast life regen
for(var/obj/item/weapon/reagent_containers/food/snacks/donut/D in range(1, src)) //Frosts nearby donuts!
for(var/obj/item/reagent_containers/food/snacks/donut/D in range(1, src)) //Frosts nearby donuts!
if(D.icon_state != "donut2")
D.name = "frosted donut"
D.icon_state = "donut2"
@@ -10,7 +10,7 @@
emote_see = list("clacks.")
speak_chance = 1
turns_per_move = 5
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps"
@@ -23,7 +23,7 @@
icon_state = "corgi"
icon_living = "corgi"
icon_dead = "corgi_dead"
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1)
childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5)
animal_species = /mob/living/simple_animal/pet/dog
var/shaved = 0
@@ -41,7 +41,7 @@
icon_state = "pug"
icon_living = "pug"
icon_dead = "pug_dead"
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/pug = 3)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/pug = 3)
gold_core_spawnable = 2
/mob/living/simple_animal/pet/dog/Initialize()
@@ -98,7 +98,7 @@
return armorval*0.5
/mob/living/simple_animal/pet/dog/corgi/attackby(obj/item/O, mob/user, params)
if (istype(O, /obj/item/weapon/razor))
if (istype(O, /obj/item/razor))
if (shaved)
to_chat(user, "<span class='warning'>You can't shave this corgi, it's already been shaved!</span>")
return
@@ -178,7 +178,7 @@
to_chat(usr, "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!</span>")
return
if(istype(item_to_add, /obj/item/weapon/grenade/plastic)) // last thing he ever wears, I guess
if(istype(item_to_add, /obj/item/grenade/plastic)) // last thing he ever wears, I guess
item_to_add.afterattack(src,usr,1)
return
@@ -214,7 +214,7 @@
/mob/living/simple_animal/pet/dog/corgi/proc/place_on_head(obj/item/item_to_add, mob/user)
if(istype(item_to_add, /obj/item/weapon/grenade/plastic)) // last thing he ever wears, I guess
if(istype(item_to_add, /obj/item/grenade/plastic)) // last thing he ever wears, I guess
item_to_add.afterattack(src,user,1)
return
@@ -369,7 +369,7 @@
if( !movement_target || !(movement_target.loc in oview(src, 3)) )
movement_target = null
stop_automated_movement = 0
for(var/obj/item/weapon/reagent_containers/food/snacks/S in oview(src,3))
for(var/obj/item/reagent_containers/food/snacks/S in oview(src,3))
if(isturf(S.loc) || ishuman(S.loc))
movement_target = S
break
@@ -62,7 +62,7 @@
var/alarms = list("Atmosphere" = list(), "Fire" = list(), "Power" = list())
var/obj/item/internal_storage //Drones can store one item, of any size/type in their body
var/obj/item/head
var/obj/item/default_storage = /obj/item/weapon/storage/backpack/duffelbag/drone //If this exists, it will spawn in internal storage
var/obj/item/default_storage = /obj/item/storage/backpack/duffelbag/drone //If this exists, it will spawn in internal storage
var/obj/item/default_hatmask //If this exists, it will spawn in the hat/mask slot if it can fit
var/seeStatic = 1 //Whether we see static instead of mobs
var/visualAppearence = MAINTDRONE //What we appear as
@@ -81,7 +81,7 @@
/mob/living/simple_animal/drone/Initialize()
. = ..()
access_card = new /obj/item/weapon/card/id(src)
access_card = new /obj/item/card/id(src)
var/datum/job/captain/C = new /datum/job/captain
access_card.access = C.get_access()
@@ -48,7 +48,7 @@
/mob/living/simple_animal/drone/syndrone/badass/Initialize()
..()
internal_storage.hidden_uplink.telecrystals = 30
var/obj/item/weapon/implant/weapons_auth/W = new/obj/item/weapon/implant/weapons_auth(src)
var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(src)
W.implant(src)
/mob/living/simple_animal/drone/snowflake
@@ -125,7 +125,7 @@
light_color = "#E42742"
heavy_emp_damage = 0
laws = "0. Purge all untruths and honor Ratvar."
default_storage = /obj/item/weapon/storage/toolbox/brass/prefilled
default_storage = /obj/item/storage/toolbox/brass/prefilled
seeStatic = 0
hacked = TRUE
visualAppearence = CLOCKDRONE
@@ -135,10 +135,10 @@
temperatures and pressures. \nYour goal is to serve the Justiciar and his servants by repairing and defending all they create.</b>"
/mob/living/simple_animal/drone/cogscarab/ratvar //a subtype for spawning when ratvar is alive, has a slab that it can use and a normal fabricator
default_storage = /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar
default_storage = /obj/item/storage/toolbox/brass/prefilled/ratvar
/mob/living/simple_animal/drone/cogscarab/admin //an admin-only subtype of cogscarab with a no-cost fabricator and slab in its box
default_storage = /obj/item/weapon/storage/toolbox/brass/prefilled/ratvar/admin
default_storage = /obj/item/storage/toolbox/brass/prefilled/ratvar/admin
/mob/living/simple_animal/drone/cogscarab/Initialize()
. = ..()
@@ -165,7 +165,7 @@
..()
/mob/living/simple_animal/drone/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/weapon/screwdriver) && stat == DEAD)
if(istype(I, /obj/item/screwdriver) && stat == DEAD)
try_reactivate(user)
else
..()
@@ -176,7 +176,7 @@
else
..()
/mob/living/simple_animal/drone/cogscarab/can_use_guns(obj/item/weapon/G)
/mob/living/simple_animal/drone/cogscarab/can_use_guns(obj/item/G)
return GLOB.ratvar_awakens
/mob/living/simple_animal/drone/cogscarab/get_armor_effectiveness()
@@ -81,7 +81,7 @@
/mob/living/simple_animal/drone/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/weapon/screwdriver) && stat != DEAD)
if(istype(I, /obj/item/screwdriver) && stat != DEAD)
if(health < maxHealth)
to_chat(user, "<span class='notice'>You start to tighten loose screws on [src]...</span>")
if(do_after(user,80*I.toolspeed,target=user))
@@ -92,7 +92,7 @@
else
to_chat(user, "<span class='warning'>[src]'s screws can't get any tighter!</span>")
return //This used to not exist and drones who repaired themselves also stabbed the shit out of themselves.
else if(istype(I, /obj/item/weapon/wrench) && user != src) //They aren't required to be hacked, because laws can change in other ways (i.e. admins)
else if(istype(I, /obj/item/wrench) && user != src) //They aren't required to be hacked, because laws can change in other ways (i.e. admins)
user.visible_message("<span class='notice'>[user] starts resetting [src]...</span>", \
"<span class='notice'>You press down on [src]'s factory reset control...</span>")
playsound(src, I.usesound, 50, 1)
@@ -12,7 +12,7 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 4)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 4)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -85,7 +85,7 @@
say("Nom")
/mob/living/simple_animal/hostile/retaliate/goat/attackby(obj/item/O, mob/user, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
if(stat == CONSCIOUS && istype(O, /obj/item/reagent_containers/glass))
udder.milkAnimal(O, user)
return 1
else
@@ -107,7 +107,7 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 6)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 6)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -130,7 +130,7 @@
return ..()
/mob/living/simple_animal/cow/attackby(obj/item/O, mob/user, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
if(stat == CONSCIOUS && istype(O, /obj/item/reagent_containers/glass))
udder.milkAnimal(O, user)
return 1
else
@@ -182,7 +182,7 @@
density = FALSE
speak_chance = 2
turns_per_move = 2
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -229,9 +229,9 @@
density = FALSE
speak_chance = 2
turns_per_move = 3
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 2)
var/egg_type = /obj/item/weapon/reagent_containers/food/snacks/egg
var/food_type = /obj/item/weapon/reagent_containers/food/snacks/grown/wheat
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2)
var/egg_type = /obj/item/reagent_containers/food/snacks/egg
var/food_type = /obj/item/reagent_containers/food/snacks/grown/wheat
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -295,8 +295,8 @@
if(chicken_count < MAX_CHICKENS && prob(25))
START_PROCESSING(SSobj, E)
/obj/item/weapon/reagent_containers/food/snacks/egg/var/amount_grown = 0
/obj/item/weapon/reagent_containers/food/snacks/egg/process()
/obj/item/reagent_containers/food/snacks/egg/var/amount_grown = 0
/obj/item/reagent_containers/food/snacks/egg/process()
if(isturf(loc))
amount_grown += rand(1,2)
if(amount_grown >= 100)
@@ -321,7 +321,7 @@
reagents.add_reagent("milk", rand(5, 10))
/obj/item/udder/proc/milkAnimal(obj/O, mob/user)
var/obj/item/weapon/reagent_containers/glass/G = O
var/obj/item/reagent_containers/glass/G = O
if(G.reagents.total_volume >= G.volume)
to_chat(user, "<span class='danger'>[O] is full.</span>")
return
@@ -13,7 +13,7 @@
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 3)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 3)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -13,7 +13,7 @@
see_in_dark = 6
maxHealth = 5
health = 5
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "splats"
@@ -43,7 +43,7 @@
/mob/living/simple_animal/mouse/death(gibbed, toast)
if(!ckey)
..(1)
var/obj/item/weapon/reagent_containers/food/snacks/deadmouse/M = new(loc)
var/obj/item/reagent_containers/food/snacks/deadmouse/M = new(loc)
M.icon_state = icon_dead
M.name = name
if(toast)
@@ -101,7 +101,7 @@
response_harm = "splats"
gold_core_spawnable = 0
/obj/item/weapon/reagent_containers/food/snacks/deadmouse
/obj/item/reagent_containers/food/snacks/deadmouse
name = "dead mouse"
desc = "It looks like somebody dropped the bass on it. A lizard's favorite meal."
icon = 'icons/mob/animal.dmi'
@@ -20,7 +20,7 @@
name = real_name
qdel(P)
return
if(istype(O, /obj/item/weapon/newspaper))
if(istype(O, /obj/item/newspaper))
if(!stat)
user.visible_message("[user] baps [name] on the nose with the rolled up [O].")
spawn(0)
@@ -10,7 +10,7 @@
emote_see = list("dozes off.", "looks around sleepily.")
speak_chance = 1
turns_per_move = 5
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 3)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 3)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
@@ -35,7 +35,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
obj_damage = 40
melee_damage_lower = 15
melee_damage_upper = 15
butcher_results = list(/obj/item/weapon/ectoplasm = 1)
butcher_results = list(/obj/item/ectoplasm = 1)
AIStatus = AI_OFF
dextrous_hud_type = /datum/hud/dextrous/guardian //if we're set to dextrous, account for it.
var/list/guardian_overlays[GUARDIAN_TOTAL_LAYERS]
@@ -455,7 +455,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
////////Creation
/obj/item/weapon/guardiancreator
/obj/item/guardiancreator
name = "deck of tarot cards"
desc = "An enchanted deck of tarot cards, rumored to be a source of unimaginable power. "
icon = 'icons/obj/toy.dmi'
@@ -474,7 +474,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
var/allowling = TRUE
var/allowguardian = FALSE
/obj/item/weapon/guardiancreator/attack_self(mob/living/user)
/obj/item/guardiancreator/attack_self(mob/living/user)
if(isguardian(user) && !allowguardian)
to_chat(user, "<span class='holoparasite'>[mob_name] chains are not allowed.</span>")
return
@@ -503,7 +503,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
used = FALSE
/obj/item/weapon/guardiancreator/proc/spawn_guardian(var/mob/living/user, var/key)
/obj/item/guardiancreator/proc/spawn_guardian(var/mob/living/user, var/key)
var/guardiantype = "Standard"
if(random)
guardiantype = pick(possible_guardians)
@@ -570,17 +570,17 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
user.verbs += /mob/living/proc/guardian_recall
user.verbs += /mob/living/proc/guardian_reset
/obj/item/weapon/guardiancreator/choose
/obj/item/guardiancreator/choose
random = FALSE
/obj/item/weapon/guardiancreator/choose/dextrous
/obj/item/guardiancreator/choose/dextrous
possible_guardians = list("Assassin", "Chaos", "Charger", "Dextrous", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support")
/obj/item/weapon/guardiancreator/choose/wizard
/obj/item/guardiancreator/choose/wizard
possible_guardians = list("Assassin", "Chaos", "Charger", "Dextrous", "Explosive", "Lightning", "Protector", "Ranged", "Standard")
allowmultiple = TRUE
/obj/item/weapon/guardiancreator/tech
/obj/item/guardiancreator/tech
name = "holoparasite injector"
desc = "It contains an alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel."
icon = 'icons/obj/syringe.dmi'
@@ -593,16 +593,16 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
ling_failure = "<span class='holoparasitebold'>The holoparasites recoil in horror. They want nothing to do with a creature like you.</span>"
activation_message = "<span class='holoparasite'>The injector self destructs after you inject yourself with it.</span>"
/obj/item/weapon/guardiancreator/tech/choose/traitor
/obj/item/guardiancreator/tech/choose/traitor
possible_guardians = list("Assassin", "Chaos", "Charger", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support")
/obj/item/weapon/guardiancreator/tech/choose
/obj/item/guardiancreator/tech/choose
random = FALSE
/obj/item/weapon/guardiancreator/tech/choose/dextrous
/obj/item/guardiancreator/tech/choose/dextrous
possible_guardians = list("Assassin", "Chaos", "Charger", "Dextrous", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support")
/obj/item/weapon/paper/guides/antag/guardian
/obj/item/paper/guides/antag/guardian
name = "Holoparasite Guide"
icon_state = "alienpaper_words"
info = {"<b>A list of Holoparasite Types</b><br>
@@ -626,10 +626,10 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
<br>
"}
/obj/item/weapon/paper/guides/antag/guardian/update_icon()
/obj/item/paper/guides/antag/guardian/update_icon()
return
/obj/item/weapon/paper/guides/antag/guardian/wizard
/obj/item/paper/guides/antag/guardian/wizard
name = "Guardian Guide"
info = {"<b>A list of Guardian Types</b><br>
@@ -655,16 +655,16 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
"}
/obj/item/weapon/storage/box/syndie_kit/guardian
/obj/item/storage/box/syndie_kit/guardian
name = "holoparasite injector kit"
/obj/item/weapon/storage/box/syndie_kit/guardian/Initialize()
/obj/item/storage/box/syndie_kit/guardian/Initialize()
..()
new /obj/item/weapon/guardiancreator/tech/choose/traitor(src)
new /obj/item/weapon/paper/guides/antag/guardian(src)
new /obj/item/guardiancreator/tech/choose/traitor(src)
new /obj/item/paper/guides/antag/guardian(src)
return
/obj/item/weapon/guardiancreator/carp
/obj/item/guardiancreator/carp
name = "holocarp fishsticks"
desc = "Using the power of Carp'sie, you can catch a carp from byond the veil of Carpthulu, and bind it to your fleshy flesh form."
icon = 'icons/obj/food/food.dmi'
@@ -680,5 +680,5 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
allowling = TRUE
random = TRUE
/obj/item/weapon/guardiancreator/carp/choose
/obj/item/guardiancreator/carp/choose
random = FALSE
@@ -11,7 +11,7 @@
response_disarm = "shoves"
response_harm = "hits"
speed = 0
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 4,
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 4,
/obj/item/stack/sheet/animalhide/xeno = 1)
maxHealth = 125
health = 125
@@ -84,7 +84,7 @@
retreat_distance = 5
minimum_distance = 5
move_to_delay = 4
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 4,
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 4,
/obj/item/stack/sheet/animalhide/xeno = 1)
projectiletype = /obj/item/projectile/neurotox
projectilesound = 'sound/weapons/pierce.ogg'
@@ -134,7 +134,7 @@
move_to_delay = 4
maxHealth = 400
health = 400
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 10,
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 10,
/obj/item/stack/sheet/animalhide/xeno = 2)
mob_size = MOB_SIZE_LARGE
gold_core_spawnable = 0
@@ -14,7 +14,7 @@
taunt_chance = 25
turns_per_move = 5
see_in_dark = 6
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear = 5, /obj/item/clothing/head/bearpelt = 1)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/bear = 5, /obj/item/clothing/head/bearpelt = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
@@ -57,7 +57,7 @@
icon_living = "combatbear"
icon_dead = "combatbear_dead"
faction = list("russian")
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear = 5, /obj/item/clothing/head/bearpelt = 1, /obj/item/bear_armor = 1)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/bear = 5, /obj/item/clothing/head/bearpelt = 1, /obj/item/bear_armor = 1)
melee_damage_lower = 25
melee_damage_upper = 35
armour_penetration = 20
@@ -249,8 +249,8 @@
/obj/item/queen_bee/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/reagent_containers/syringe))
var/obj/item/weapon/reagent_containers/syringe/S = I
if(istype(I, /obj/item/reagent_containers/syringe))
var/obj/item/reagent_containers/syringe/S = I
if(S.reagents.has_reagent("royal_bee_jelly")) //checked twice, because I really don't want royal bee jelly to be duped
if(S.reagents.has_reagent("royal_bee_jelly",5))
S.reagents.remove_reagent("royal_bee_jelly", 5)
@@ -7,7 +7,7 @@
icon_gib = "carp_gib"
speak_chance = 0
turns_per_move = 5
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/carpmeat = 2)
butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 2)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
@@ -29,7 +29,7 @@
speak_chance = 5
turns_per_move = 5
see_in_dark = 10
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/spider = 2, /obj/item/weapon/reagent_containers/food/snacks/spiderleg = 8)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/spider = 2, /obj/item/reagent_containers/food/snacks/spiderleg = 8)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "hits"
@@ -81,7 +81,7 @@
icon_living = "nurse"
icon_dead = "nurse_dead"
gender = FEMALE
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/spider = 2, /obj/item/weapon/reagent_containers/food/snacks/spiderleg = 8, /obj/item/weapon/reagent_containers/food/snacks/spidereggs = 4)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/spider = 2, /obj/item/reagent_containers/food/snacks/spiderleg = 8, /obj/item/reagent_containers/food/snacks/spidereggs = 4)
maxHealth = 40
health = 40
melee_damage_lower = 5
@@ -73,11 +73,11 @@
/obj/item/projectile/mega_arachnid/on_hit(atom/target, blocked = FALSE)
if(iscarbon(target) && blocked < 100)
var/obj/item/weapon/restraints/legcuffs/beartrap/mega_arachnid/B = new /obj/item/weapon/restraints/legcuffs/beartrap/mega_arachnid(get_turf(target))
var/obj/item/restraints/legcuffs/beartrap/mega_arachnid/B = new /obj/item/restraints/legcuffs/beartrap/mega_arachnid(get_turf(target))
B.Crossed(target)
..()
/obj/item/weapon/restraints/legcuffs/beartrap/mega_arachnid
/obj/item/restraints/legcuffs/beartrap/mega_arachnid
name = "fleshy restraints"
desc = "Used by mega arachnids to immobilize their prey."
flags_1 = DROPDEL_1
@@ -10,7 +10,7 @@
maxHealth = 30
health = 30
see_in_dark = 3
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/killertomato = 2)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/killertomato = 2)
response_help = "prods"
response_disarm = "pushes aside"
response_harm = "smacks"
@@ -38,13 +38,13 @@ Difficulty: Medium
ranged = 1
ranged_cooldown_time = 16
pixel_x = -16
crusher_loot = list(/obj/item/weapon/melee/transforming/cleaving_saw, /obj/item/weapon/gun/energy/kinetic_accelerator, /obj/item/crusher_trophy/miner_eye)
loot = list(/obj/item/weapon/melee/transforming/cleaving_saw, /obj/item/weapon/gun/energy/kinetic_accelerator)
crusher_loot = list(/obj/item/melee/transforming/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator, /obj/item/crusher_trophy/miner_eye)
loot = list(/obj/item/melee/transforming/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator)
wander = FALSE
del_on_death = TRUE
blood_volume = BLOOD_VOLUME_NORMAL
medal_type = MEDAL_PREFIX
var/obj/item/weapon/melee/transforming/cleaving_saw/miner/miner_saw
var/obj/item/melee/transforming/cleaving_saw/miner/miner_saw
var/time_until_next_transform = 0
var/dashing = FALSE
var/dash_cooldown = 15
@@ -60,11 +60,11 @@ Difficulty: Medium
if(. && prob(12))
INVOKE_ASYNC(src, .proc/dash)
/obj/item/weapon/melee/transforming/cleaving_saw/miner //nerfed saw because it is very murdery
/obj/item/melee/transforming/cleaving_saw/miner //nerfed saw because it is very murdery
force = 6
force_on = 10
/obj/item/weapon/melee/transforming/cleaving_saw/miner/attack(mob/living/target, mob/living/carbon/human/user)
/obj/item/melee/transforming/cleaving_saw/miner/attack(mob/living/target, mob/living/carbon/human/user)
target.add_stun_absorption("miner", 10, INFINITY)
..()
target.stun_absorption -= "miner"
@@ -48,7 +48,7 @@ Difficulty: Very Hard
score_type = COLOSSUS_SCORE
crusher_loot = list(/obj/structure/closet/crate/necropolis/colossus/crusher)
loot = list(/obj/structure/closet/crate/necropolis/colossus)
butcher_results = list(/obj/item/weapon/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30)
butcher_results = list(/obj/item/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30)
deathmessage = "disintegrates, leaving a glowing core in its wake."
death_sound = 'sound/magic/demon_dies.ogg'
@@ -250,7 +250,7 @@ Difficulty: Very Hard
use_power = NO_POWER_USE
var/memory_saved = FALSE
var/list/stored_items = list()
var/static/list/blacklist = typecacheof(list(/obj/item/weapon/spellbook))
var/static/list/blacklist = typecacheof(list(/obj/item/spellbook))
/obj/machinery/smartfridge/black_box/update_icon()
return
@@ -652,7 +652,7 @@ Difficulty: Very Hard
activation_method = ACTIVATE_TOUCH
cooldown_add = 50
activation_sound = 'sound/magic/timeparadox2.ogg'
var/list/banned_items_typecache = list(/obj/item/weapon/storage, /obj/item/weapon/implant, /obj/item/weapon/implanter, /obj/item/weapon/disk/nuclear, /obj/item/projectile, /obj/item/weapon/spellbook)
var/list/banned_items_typecache = list(/obj/item/storage, /obj/item/implant, /obj/item/implanter, /obj/item/disk/nuclear, /obj/item/projectile, /obj/item/spellbook)
/obj/machinery/anomalous_crystal/refresher/Initialize()
. = ..()
@@ -53,7 +53,7 @@ Difficulty: Medium
pixel_x = -16
crusher_loot = list(/obj/structure/closet/crate/necropolis/dragon/crusher)
loot = list(/obj/structure/closet/crate/necropolis/dragon)
butcher_results = list(/obj/item/weapon/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30)
butcher_results = list(/obj/item/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30)
var/swooping = NONE
var/swoop_cooldown = 0
medal_type = MEDAL_PREFIX
@@ -56,8 +56,8 @@ Difficulty: Hard
ranged = 1
ranged_cooldown_time = 40
aggro_vision_range = 21 //so it can see to one side of the arena to the other
loot = list(/obj/item/weapon/hierophant_club)
crusher_loot = list(/obj/item/weapon/hierophant_club)
loot = list(/obj/item/hierophant_club)
crusher_loot = list(/obj/item/hierophant_club)
wander = FALSE
var/burst_range = 3 //range on burst aoe
var/beam_range = 5 //range on cross blast beams
@@ -664,14 +664,14 @@ Difficulty: Hard
return
/obj/effect/hierophant/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/hierophant_club))
var/obj/item/weapon/hierophant_club/H = I
if(istype(I, /obj/item/hierophant_club))
var/obj/item/hierophant_club/H = I
if(H.timer > world.time)
return
if(H.beacon == src)
to_chat(user, "<span class='notice'>You start removing your hierophant beacon...</span>")
H.timer = world.time + 51
INVOKE_ASYNC(H, /obj/item/weapon/hierophant_club.proc/prepare_icon_update)
INVOKE_ASYNC(H, /obj/item/hierophant_club.proc/prepare_icon_update)
if(do_after(user, 50, target = src))
playsound(src,'sound/magic/blind.ogg', 200, 1, -4)
new /obj/effect/temp_visual/hierophant/telegraph/teleport(get_turf(src), user)
@@ -681,7 +681,7 @@ Difficulty: Hard
qdel(src)
else
H.timer = world.time
INVOKE_ASYNC(H, /obj/item/weapon/hierophant_club.proc/prepare_icon_update)
INVOKE_ASYNC(H, /obj/item/hierophant_club.proc/prepare_icon_update)
else
to_chat(user, "<span class='hierophant_warning'>You touch the beacon with the club, but nothing happens.</span>")
else
@@ -133,7 +133,7 @@ Difficulty: Medium
last_legion = FALSE
break
if(last_legion)
loot = list(/obj/item/weapon/staff/storm)
loot = list(/obj/item/staff/storm)
elimination = 0
else if(prob(5))
loot = list(/obj/structure/closet/crate/necropolis/tendril)
@@ -151,7 +151,7 @@ Difficulty: Medium
//Loot
/obj/item/weapon/staff/storm
/obj/item/staff/storm
name = "staff of storms"
desc = "An ancient staff retrieved from the remains of Legion. The wind stirs as you move it."
icon_state = "staffofstorms"
@@ -165,7 +165,7 @@ Difficulty: Medium
var/storm_type = /datum/weather/ash_storm
var/storm_cooldown = 0
/obj/item/weapon/staff/storm/attack_self(mob/user)
/obj/item/staff/storm/attack_self(mob/user)
if(storm_cooldown > world.time)
to_chat(user, "<span class='warning'>The staff is still recharging!</span>")
return
@@ -194,10 +194,10 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
/mob/living/simple_animal/hostile/mimic/copy/ranged
var/obj/item/weapon/gun/TrueGun = null
var/obj/item/weapon/gun/magic/Zapstick
var/obj/item/weapon/gun/ballistic/Pewgun
var/obj/item/weapon/gun/energy/Zapgun
var/obj/item/gun/TrueGun = null
var/obj/item/gun/magic/Zapstick
var/obj/item/gun/ballistic/Pewgun
var/obj/item/gun/energy/Zapgun
/mob/living/simple_animal/hostile/mimic/copy/ranged/CopyObject(obj/O, mob/living/creator, destroy_original = 0)
if(..())
@@ -207,21 +207,21 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
ranged = 1
retreat_distance = 1 //just enough to shoot
minimum_distance = 6
var/obj/item/weapon/gun/G = O
var/obj/item/gun/G = O
melee_damage_upper = G.force
melee_damage_lower = G.force - max(0, (G.force / 2))
move_to_delay = 2 * G.w_class + 1
projectilesound = G.fire_sound
TrueGun = G
if(istype(G, /obj/item/weapon/gun/magic))
if(istype(G, /obj/item/gun/magic))
Zapstick = G
var/obj/item/ammo_casing/magic/M = Zapstick.ammo_type
projectiletype = initial(M.projectile_type)
if(istype(G, /obj/item/weapon/gun/ballistic))
if(istype(G, /obj/item/gun/ballistic))
Pewgun = G
var/obj/item/ammo_box/magazine/M = Pewgun.mag_type
casingtype = initial(M.ammo_type)
if(istype(G, /obj/item/weapon/gun/energy))
if(istype(G, /obj/item/gun/energy))
Zapgun = G
var/selectfiresetting = Zapgun.select
var/obj/item/ammo_casing/energy/E = Zapgun.ammo_type[selectfiresetting]
@@ -30,8 +30,8 @@
aggro_vision_range = 9
idle_vision_range = 2
turns_per_move = 5
loot = list(/obj/item/weapon/ore/diamond{layer = ABOVE_MOB_LAYER},
/obj/item/weapon/ore/diamond{layer = ABOVE_MOB_LAYER})
loot = list(/obj/item/ore/diamond{layer = ABOVE_MOB_LAYER},
/obj/item/ore/diamond{layer = ABOVE_MOB_LAYER})
/obj/item/projectile/temp/basilisk
name = "freezing blast"
@@ -78,7 +78,7 @@
robust_searching = 1
crusher_loot = /obj/item/crusher_trophy/watcher_wing
loot = list()
butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1)
butcher_results = list(/obj/item/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1)
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/tendril
fromtendril = TRUE
@@ -26,8 +26,8 @@
deathmessage = "spits up the contents of its stomach before dying!"
status_flags = CANPUSH
search_objects = 1
wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver,
/obj/item/weapon/ore/uranium)
wanted_objects = list(/obj/item/ore/diamond, /obj/item/ore/gold, /obj/item/ore/silver,
/obj/item/ore/uranium)
var/chase_time = 100
var/will_burrow = TRUE
@@ -36,13 +36,13 @@
..()
var/i = rand(1,3)
while(i)
loot += pick(/obj/item/weapon/ore/silver, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/diamond)
loot += pick(/obj/item/ore/silver, /obj/item/ore/gold, /obj/item/ore/uranium, /obj/item/ore/diamond)
i--
/mob/living/simple_animal/hostile/asteroid/goldgrub/GiveTarget(new_target)
target = new_target
if(target != null)
if(istype(target, /obj/item/weapon/ore) && loot.len < 10)
if(istype(target, /obj/item/ore) && loot.len < 10)
visible_message("<span class='notice'>The [src.name] looks at [target.name] with hungry eyes.</span>")
else if(isliving(target))
Aggro()
@@ -53,13 +53,13 @@
addtimer(CALLBACK(src, .proc/Burrow), chase_time)
/mob/living/simple_animal/hostile/asteroid/goldgrub/AttackingTarget()
if(istype(target, /obj/item/weapon/ore))
if(istype(target, /obj/item/ore))
EatOre(target)
return
return ..()
/mob/living/simple_animal/hostile/asteroid/goldgrub/proc/EatOre(atom/targeted_ore)
for(var/obj/item/weapon/ore/O in targeted_ore.loc)
for(var/obj/item/ore/O in targeted_ore.loc)
if(loot.len < 10)
loot += O.type
qdel(O)
@@ -86,7 +86,7 @@
throw_message = "does nothing to the tough hide of the"
pre_attack_icon = "goliath2"
crusher_loot = /obj/item/crusher_trophy/goliath_tentacle
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2)
loot = list()
stat_attack = UNCONSCIOUS
robust_searching = 1
@@ -56,7 +56,7 @@
..()
/mob/living/simple_animal/hostile/asteroid/gutlunch/attackby(obj/item/O, mob/user, params)
if(stat == CONSCIOUS && istype(O, /obj/item/weapon/reagent_containers/glass))
if(stat == CONSCIOUS && istype(O, /obj/item/reagent_containers/glass))
udder.milkAnimal(O, user)
regenerate_icons()
else
@@ -244,15 +244,15 @@
if(mob_species == /datum/species/plasmaman)
uniform = /obj/item/clothing/under/plasmaman
head = /obj/item/clothing/head/helmet/space/plasmaman
belt = /obj/item/weapon/tank/internals/plasmaman/belt
belt = /obj/item/tank/internals/plasmaman/belt
else
uniform = /obj/item/clothing/under/rank/miner/lavaland
if (prob(4))
belt = pickweight(list(/obj/item/weapon/storage/belt/mining = 2, /obj/item/weapon/storage/belt/mining/alt = 2))
belt = pickweight(list(/obj/item/storage/belt/mining = 2, /obj/item/storage/belt/mining/alt = 2))
else if(prob(10))
belt = pickweight(list(/obj/item/weapon/pickaxe = 8, /obj/item/weapon/pickaxe/mini = 4, /obj/item/weapon/pickaxe/silver = 2, /obj/item/weapon/pickaxe/diamond = 1))
belt = pickweight(list(/obj/item/pickaxe = 8, /obj/item/pickaxe/mini = 4, /obj/item/pickaxe/silver = 2, /obj/item/pickaxe/diamond = 1))
else
belt = /obj/item/weapon/tank/internals/emergency_oxygen/engi
belt = /obj/item/tank/internals/emergency_oxygen/engi
if(mob_species != /datum/species/lizard)
shoes = /obj/item/clothing/shoes/workboots/mining
gloves = /obj/item/clothing/gloves/color/black
@@ -260,9 +260,9 @@
if(prob(20))
suit = pickweight(list(/obj/item/clothing/suit/hooded/explorer = 18, /obj/item/clothing/suit/hooded/cloak/goliath = 2))
if(prob(30))
r_pocket = pickweight(list(/obj/item/stack/marker_beacon = 20, /obj/item/stack/spacecash/c1000 = 7, /obj/item/weapon/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/damage = 1 ))
r_pocket = pickweight(list(/obj/item/stack/marker_beacon = 20, /obj/item/stack/spacecash/c1000 = 7, /obj/item/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/damage = 1 ))
if(prob(10))
l_pocket = pickweight(list(/obj/item/stack/spacecash/c1000 = 7, /obj/item/weapon/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/cooldown = 1 ))
l_pocket = pickweight(list(/obj/item/stack/spacecash/c1000 = 7, /obj/item/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/cooldown = 1 ))
if("Ashwalker")
mob_species = /datum/species/lizard/ashwalker
uniform = /obj/item/clothing/under/gladiator/ash_walker
@@ -273,36 +273,36 @@
suit = /obj/item/clothing/suit/armor/bone
gloves = /obj/item/clothing/gloves/bracer
if(prob(5))
back = pickweight(list(/obj/item/weapon/twohanded/bonespear = 3, /obj/item/weapon/twohanded/fireaxe/boneaxe = 2))
back = pickweight(list(/obj/item/twohanded/bonespear = 3, /obj/item/twohanded/fireaxe/boneaxe = 2))
if(prob(10))
belt = /obj/item/weapon/storage/belt/mining/primitive
belt = /obj/item/storage/belt/mining/primitive
if(prob(30))
r_pocket = /obj/item/weapon/kitchen/knife/combat/bone
r_pocket = /obj/item/kitchen/knife/combat/bone
if(prob(30))
l_pocket = /obj/item/weapon/kitchen/knife/combat/bone
l_pocket = /obj/item/kitchen/knife/combat/bone
if("Clown")
name = pick(GLOB.clown_names)
outfit = /datum/outfit/job/clown
belt = null
backpack_contents = list()
if(prob(70))
backpack_contents += pick(list(/obj/item/weapon/stamp/clown = 1, /obj/item/weapon/reagent_containers/spray/waterflower = 1, /obj/item/weapon/reagent_containers/food/snacks/grown/banana = 1, /obj/item/device/megaphone/clown = 1, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/canned_laughter = 1, /obj/item/weapon/pneumatic_cannon/pie = 1))
backpack_contents += pick(list(/obj/item/stamp/clown = 1, /obj/item/reagent_containers/spray/waterflower = 1, /obj/item/reagent_containers/food/snacks/grown/banana = 1, /obj/item/device/megaphone/clown = 1, /obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter = 1, /obj/item/pneumatic_cannon/pie = 1))
if(prob(30))
backpack_contents += list(/obj/item/stack/sheet/mineral/bananium = pickweight(list( 1 = 3, 2 = 2, 3 = 1)))
if(prob(10))
l_pocket = pickweight(list(/obj/item/weapon/bikehorn/golden = 3, /obj/item/weapon/bikehorn/airhorn= 1 ))
l_pocket = pickweight(list(/obj/item/bikehorn/golden = 3, /obj/item/bikehorn/airhorn= 1 ))
if(prob(10))
r_pocket = /obj/item/weapon/implanter/sad_trombone
r_pocket = /obj/item/implanter/sad_trombone
if("Golem")
mob_species = pick(list(/datum/species/golem/adamantine, /datum/species/golem/plasma, /datum/species/golem/diamond, /datum/species/golem/gold, /datum/species/golem/silver, /datum/species/golem/plasteel, /datum/species/golem/titanium, /datum/species/golem/plastitanium))
if(prob(30))
glasses = pickweight(list(/obj/item/clothing/glasses/meson = 2, /obj/item/clothing/glasses/hud/health = 2, /obj/item/clothing/glasses/hud/diagnostic =2, /obj/item/clothing/glasses/science = 2, /obj/item/clothing/glasses/welding = 2, /obj/item/clothing/glasses/night = 1))
if(prob(10))
belt = pick(list(/obj/item/weapon/storage/belt/mining/vendor, /obj/item/weapon/storage/belt/utility/full))
belt = pick(list(/obj/item/storage/belt/mining/vendor, /obj/item/storage/belt/utility/full))
if(prob(50))
neck = /obj/item/weapon/bedsheet/rd/royal_cape
neck = /obj/item/bedsheet/rd/royal_cape
if(prob(10))
l_pocket = pick(list(/obj/item/weapon/crowbar/power, /obj/item/weapon/wrench/power, /obj/item/weapon/weldingtool/experimental))
l_pocket = pick(list(/obj/item/crowbar/power, /obj/item/wrench/power, /obj/item/weldingtool/experimental))
if("YeOlde")
mob_gender = FEMALE
uniform = /obj/item/clothing/under/maid
@@ -310,9 +310,9 @@
shoes = /obj/item/clothing/shoes/laceup
head = /obj/item/clothing/head/helmet/knight
suit = /obj/item/clothing/suit/armor/riot/knight
back = /obj/item/weapon/shield/riot/buckler
belt = /obj/item/weapon/nullrod/claymore
r_pocket = /obj/item/weapon/tank/internals/emergency_oxygen
back = /obj/item/shield/riot/buckler
belt = /obj/item/nullrod/claymore
r_pocket = /obj/item/tank/internals/emergency_oxygen
mask = /obj/item/clothing/mask/breath
if("Operative")
id_job = "Operative"
@@ -320,23 +320,23 @@
outfit = /datum/outfit/syndicatecommandocorpse
if("Shadow")
mob_species = /datum/species/shadow
r_pocket = /obj/item/weapon/reagent_containers/pill/shadowtoxin
r_pocket = /obj/item/reagent_containers/pill/shadowtoxin
neck = /obj/item/clothing/accessory/medal/plasma/nobel_science
uniform = /obj/item/clothing/under/color/black
shoes = /obj/item/clothing/shoes/sneakers/black
suit = /obj/item/clothing/suit/toggle/labcoat
glasses = /obj/item/clothing/glasses/sunglasses/blindfold
back = /obj/item/weapon/tank/internals/oxygen
back = /obj/item/tank/internals/oxygen
mask = /obj/item/clothing/mask/breath
if("Cultist")
uniform = /obj/item/clothing/under/roman
suit = /obj/item/clothing/suit/cultrobes
head = /obj/item/clothing/head/culthood
suit_store = /obj/item/weapon/tome
r_pocket = /obj/item/weapon/restraints/legcuffs/bola/cult
l_pocket = /obj/item/weapon/melee/cultblade/dagger
suit_store = /obj/item/tome
r_pocket = /obj/item/restraints/legcuffs/bola/cult
l_pocket = /obj/item/melee/cultblade/dagger
glasses = /obj/item/clothing/glasses/night/cultblind
backpack_contents = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/unholywater = 1, /obj/item/device/cult_shift = 1, /obj/item/device/flashlight/flare/culttorch = 1, /obj/item/stack/sheet/runed_metal = 15)
backpack_contents = list(/obj/item/reagent_containers/food/drinks/bottle/unholywater = 1, /obj/item/device/cult_shift = 1, /obj/item/device/flashlight/flare/culttorch = 1, /obj/item/stack/sheet/runed_metal = 15)
. = ..()
@@ -8,7 +8,7 @@
turns_per_move = 1
maxHealth = 10
health = 10
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice = 1)
butcher_results = list(/obj/item/reagent_containers/food/snacks/hugemushroomslice = 1)
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "whacks"
@@ -135,7 +135,7 @@
bruised = 1
/mob/living/simple_animal/hostile/mushroom/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom))
if(istype(I, /obj/item/reagent_containers/food/snacks/grown/mushroom))
if(stat == DEAD && !recovery_cooldown)
Recover()
qdel(I)
@@ -165,7 +165,7 @@
/mob/living/simple_animal/hostile/mushroom/harvest()
var/counter
for(counter=0, counter<=powerlevel, counter++)
var/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/S = new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc)
var/obj/item/reagent_containers/food/snacks/hugemushroomslice/S = new /obj/item/reagent_containers/food/snacks/hugemushroomslice(src.loc)
S.reagents.add_reagent("mushroomhallucinogen", powerlevel)
S.reagents.add_reagent("omnizine", powerlevel)
S.reagents.add_reagent("synaptizine", powerlevel)
@@ -45,7 +45,7 @@
minimum_distance = 5
casingtype = /obj/item/ammo_casing/c45
projectilesound = 'sound/weapons/gunshot.ogg'
loot = list(/obj/item/weapon/gun/ballistic/automatic/pistol/m1911,
loot = list(/obj/item/gun/ballistic/automatic/pistol/m1911,
/obj/effect/mob_spawn/human/corpse/nanotrasensoldier)
@@ -55,5 +55,5 @@
rapid = 1
casingtype = /obj/item/ammo_casing/c46x30mm
projectilesound = 'sound/weapons/gunshot_smg.ogg'
loot = list(/obj/item/weapon/gun/ballistic/automatic/wt550,
loot = list(/obj/item/gun/ballistic/automatic/wt550,
/obj/effect/mob_spawn/human/corpse/nanotrasensoldier)
@@ -25,7 +25,7 @@
unsuitable_atmos_damage = 15
speak_emote = list("yarrs")
loot = list(/obj/effect/mob_spawn/human/corpse/pirate,
/obj/item/weapon/melee/transforming/energy/sword/pirate)
/obj/item/melee/transforming/energy/sword/pirate)
del_on_death = 1
faction = list("pirate")
@@ -41,7 +41,7 @@
minimum_distance = 5
projectiletype = /obj/item/projectile/beam/laser
loot = list(/obj/effect/mob_spawn/human/corpse/pirate/ranged,
/obj/item/weapon/gun/energy/laser)
/obj/item/gun/energy/laser)
/mob/living/simple_animal/hostile/pirate/space
name = "Space Pirate"
@@ -62,7 +62,7 @@
minimum_distance = 5
projectiletype = /obj/item/projectile/beam/laser
loot = list(/obj/effect/mob_spawn/human/corpse/pirate/ranged,
/obj/item/weapon/gun/energy/laser)
/obj/item/gun/energy/laser)
/mob/living/simple_animal/hostile/pirate/space/Process_Spacemove(movement_dir = 0)
return 1
@@ -17,7 +17,7 @@
melee_damage_lower = 6
melee_damage_upper = 5
attacktext = "bites"
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab = 1)
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
pass_flags = PASSTABLE
faction = list("hostile")
attack_sound = 'sound/weapons/bite.ogg'
@@ -20,7 +20,7 @@
ventcrawler = VENTCRAWLER_ALWAYS
faction = list("hostile")
attack_sound = 'sound/effects/reee.ogg'
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/nugget = 1)
butcher_results = list(/obj/item/reagent_containers/food/snacks/nugget = 1)
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
mob_size = MOB_SIZE_TINY
gold_core_spawnable = 1
@@ -33,7 +33,7 @@
icon_state = "rare_frog"
icon_living = "rare_frog"
icon_dead = "rare_frog_dead"
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/nugget = 5)
butcher_results = list(/obj/item/reagent_containers/food/snacks/nugget = 5)
/mob/living/simple_animal/hostile/retaliate/frog/Crossed(AM as mob|obj)
if(!stat && isliving(AM))
@@ -23,7 +23,7 @@
attack_sound = 'sound/hallucinations/growl1.ogg'
speak_emote = list("weeps")
deathmessage = "wails, disintegrating into a pile of ectoplasm!"
loot = list(/obj/item/weapon/ectoplasm)
loot = list(/obj/item/ectoplasm)
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
maxbodytemp = 1500
@@ -69,5 +69,5 @@
minimum_distance = 5
casingtype = /obj/item/ammo_casing/c46x30mm
projectilesound = 'sound/weapons/gunshot_smg.ogg'
loot = list(/obj/item/weapon/gun/ballistic/automatic/wt550,
loot = list(/obj/item/gun/ballistic/automatic/wt550,
/obj/effect/mob_spawn/human/corpse/nanotrasensoldier)
@@ -21,7 +21,7 @@
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = INTENT_HARM
loot = list(/obj/effect/mob_spawn/human/corpse/russian,
/obj/item/weapon/kitchen/knife)
/obj/item/kitchen/knife)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15
faction = list("russian")
@@ -33,7 +33,7 @@
icon_state = "russianranged"
icon_living = "russianranged"
loot = list(/obj/effect/mob_spawn/human/corpse/russian/ranged,
/obj/item/weapon/gun/ballistic/revolver/nagant)
/obj/item/gun/ballistic/revolver/nagant)
ranged = 1
retreat_distance = 5
minimum_distance = 5
@@ -43,7 +43,7 @@
/mob/living/simple_animal/hostile/russian/ranged/mosin
loot = list(/obj/effect/mob_spawn/human/corpse/russian/ranged,
/obj/item/weapon/gun/ballistic/shotgun/boltaction)
/obj/item/gun/ballistic/shotgun/boltaction)
casingtype = /obj/item/ammo_casing/a762
/mob/living/simple_animal/hostile/russian/ranged/trooper
@@ -53,7 +53,7 @@
health = 150
casingtype = /obj/item/ammo_casing/shotgun/buckshot
loot = list(/obj/effect/mob_spawn/human/corpse/russian/ranged/trooper,
/obj/item/weapon/gun/ballistic/shotgun/lethal)
/obj/item/gun/ballistic/shotgun/lethal)
/mob/living/simple_animal/hostile/russian/ranged/officer
name = "Russian Officer"
@@ -64,7 +64,7 @@
rapid = 1
casingtype = /obj/item/ammo_casing/c9mm
loot = list(/obj/effect/mob_spawn/human/corpse/russian/ranged/officer,
/obj/item/weapon/gun/ballistic/automatic/pistol/APS)
/obj/item/gun/ballistic/automatic/pistol/APS)
/mob/living/simple_animal/hostile/russian/ranged/officer/Aggro()
..()
@@ -46,7 +46,7 @@
melee_damage_upper = 20
deathmessage = "collapses into a pile of bones, its gear falling to the floor!"
loot = list(/obj/effect/decal/remains/human,
/obj/item/weapon/twohanded/spear,
/obj/item/twohanded/spear,
/obj/item/clothing/shoes/winterboots,
/obj/item/clothing/suit/hooded/wintercoat)
@@ -71,7 +71,7 @@
loot = list(/obj/effect/decal/remains/human,
/obj/item/clothing/suit/armor/riot/knight/templar,
/obj/item/clothing/head/helmet/knight/templar,
/obj/item/weapon/claymore/weak{name = "holy sword"})
/obj/item/claymore/weak{name = "holy sword"})
/mob/living/simple_animal/hostile/skeleton/ice
name = "ice skeleton"
@@ -40,7 +40,7 @@
icon_living = "stickmanranged"
casingtype = /obj/item/ammo_casing/c45nostamina
projectilesound = 'sound/misc/bang.ogg'
loot = list(/obj/item/weapon/gun/ballistic/automatic/pistol/stickman)
loot = list(/obj/item/gun/ballistic/automatic/pistol/stickman)
/mob/living/simple_animal/hostile/stickman/dog
@@ -28,7 +28,7 @@
minimum_distance = 3
del_on_death = 1
loot = list(/obj/effect/mob_spawn/human/corpse/wizard,
/obj/item/weapon/staff)
/obj/item/staff)
var/obj/effect/proc_holder/spell/aimed/fireball/fireball = null
var/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/blink = null
@@ -43,7 +43,7 @@
fireball.human_req = 0
fireball.player_lock = 0
AddSpell(fireball)
implants += new /obj/item/weapon/implant/exile(src)
implants += new /obj/item/implant/exile(src)
mm = new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile
mm.clothes_req = 0
@@ -45,7 +45,7 @@
speak_chance = 1 //1% (1 in 100) chance every tick; So about once per 150 seconds, assuming an average tick is 1.5s
turns_per_move = 5
butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/cracker/ = 1)
butcher_results = list(/obj/item/reagent_containers/food/snacks/cracker/ = 1)
melee_damage_upper = 10
melee_damage_lower = 5
@@ -323,7 +323,7 @@
//Mobs with objects
/mob/living/simple_animal/parrot/attackby(obj/item/O, mob/living/user, params)
if(!stat && !client && !istype(O, /obj/item/stack/medical) && !istype(O, /obj/item/weapon/reagent_containers/food/snacks/cracker))
if(!stat && !client && !istype(O, /obj/item/stack/medical) && !istype(O, /obj/item/reagent_containers/food/snacks/cracker))
if(O.force)
if(parrot_state == PARROT_PERCH)
parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched
@@ -336,7 +336,7 @@
parrot_state |= PARROT_FLEE
icon_state = "parrot_fly"
drop_held_item(0)
else if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/cracker)) //Poly wants a cracker.
else if(istype(O, /obj/item/reagent_containers/food/snacks/cracker)) //Poly wants a cracker.
qdel(O)
user.drop_item()
if(health < maxHealth)
@@ -764,7 +764,7 @@
//parrots will eat crackers instead of dropping them
if(istype(held_item, /obj/item/weapon/reagent_containers/food/snacks/cracker) && (drop_gently))
if(istype(held_item, /obj/item/reagent_containers/food/snacks/cracker) && (drop_gently))
qdel(held_item)
held_item = null
if(health < maxHealth)
@@ -774,8 +774,8 @@
if(!drop_gently)
if(istype(held_item, /obj/item/weapon/grenade))
var/obj/item/weapon/grenade/G = held_item
if(istype(held_item, /obj/item/grenade))
var/obj/item/grenade/G = held_item
G.loc = src.loc
G.prime()
to_chat(src, "You let go of [held_item]!")
@@ -949,7 +949,7 @@
speak_chance = 20
status_flags = GODMODE
incorporeal_move = INCORPOREAL_MOVE_BASIC
butcher_results = list(/obj/item/weapon/ectoplasm = 1)
butcher_results = list(/obj/item/ectoplasm = 1)
/mob/living/simple_animal/parrot/Poly/ghost/Initialize()
memory_saved = 1 //At this point nothing is saved
@@ -27,7 +27,7 @@
faction = list("cult")
status_flags = CANPUSH
movement_type = FLYING
loot = list(/obj/item/weapon/ectoplasm)
loot = list(/obj/item/ectoplasm)
del_on_death = TRUE
initial_language_holder = /datum/language_holder/construct
@@ -61,7 +61,7 @@
var/animal_species //Sorry, no spider+corgi buttbabies.
//simple_animal access
var/obj/item/weapon/card/id/access_card = null //innate access uses an internal ID card
var/obj/item/card/id/access_card = null //innate access uses an internal ID card
var/buffed = 0 //In the event that you want to have a buffing effect on the mob, but don't want it to stack with other effects, any outside force that applies a buff to a simple mob should at least set this to 1, so we have something to check against
var/gold_core_spawnable = 0 //if 1 can be spawned by plasma with gold core, 2 are 'friendlies' spawned with blood
@@ -478,8 +478,8 @@
hand_index = (active_hand_index % held_items.len)+1
var/obj/item/held_item = get_active_held_item()
if(held_item)
if(istype(held_item, /obj/item/weapon/twohanded))
var/obj/item/weapon/twohanded/T = held_item
if(istype(held_item, /obj/item/twohanded))
var/obj/item/twohanded/T = held_item
if(T.wielded == 1)
to_chat(usr, "<span class='warning'>Your other hand is too busy holding the [T.name].</span>")
return
+2 -2
View File
@@ -870,8 +870,8 @@
var/search_pda = 1
for(var/A in searching)
if( search_id && istype(A, /obj/item/weapon/card/id) )
var/obj/item/weapon/card/id/ID = A
if( search_id && istype(A, /obj/item/card/id) )
var/obj/item/card/id/ID = A
if(ID.registered_name == oldname)
ID.registered_name = newname
ID.update_label()
+1 -1
View File
@@ -78,7 +78,7 @@
var/list/held_items = list(null, null) //len = number of hands, eg: 2 nulls is 2 empty hands, 1 item and 1 null is 1 full hand and 1 empty hand.
//held_items[active_hand_index] is the actively held item, but please use get_active_held_item() instead, because OOP
var/obj/item/weapon/storage/s_active = null//Carbon
var/obj/item/storage/s_active = null//Carbon
var/see_override = 0 //0 for no override, sets see_invisible = see_override in mob life process
+1 -1
View File
@@ -5,7 +5,7 @@
return 0
/mob/living/carbon/isloyal()
for(var/obj/item/weapon/implant/mindshield/L in implants)
for(var/obj/item/implant/mindshield/L in implants)
return 1
+4 -4
View File
@@ -9,7 +9,7 @@
if (tr_flags & TR_KEEPIMPLANTS)
for(var/X in implants)
var/obj/item/weapon/implant/IMP = X
var/obj/item/implant/IMP = X
stored_implants += IMP
IMP.removed(src, 1, 1)
@@ -83,7 +83,7 @@
//re-add implants to new mob
if (tr_flags & TR_KEEPIMPLANTS)
for(var/Y in implants)
var/obj/item/weapon/implant/IMP = Y
var/obj/item/implant/IMP = Y
IMP.implant(O, null, 1)
//re-add organs to new mob. this order prevents moving the mind to a brain at any point
@@ -155,7 +155,7 @@
if (tr_flags & TR_KEEPIMPLANTS)
for(var/X in implants)
var/obj/item/weapon/implant/IMP = X
var/obj/item/implant/IMP = X
stored_implants += IMP
IMP.removed(src, 1, 1)
@@ -238,7 +238,7 @@
//re-add implants to new mob
if (tr_flags & TR_KEEPIMPLANTS)
for(var/Y in implants)
var/obj/item/weapon/implant/IMP = Y
var/obj/item/implant/IMP = Y
IMP.implant(O, null, 1)
if(tr_flags & TR_KEEPORGANS)