here we go again (#2456)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -145,7 +145,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
|
||||
dat += "<tr><td> </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 += " <A href='?src=\ref[src];internal=[slot_back]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
|
||||
dat += "</td></tr><tr><td> </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> ↳<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 += " <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> ↳<B>Belt:</B></font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td> ↳<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 += " <A href='?src=\ref[src];internal=[slot_belt]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
dat += "</td></tr>"
|
||||
dat += "<tr><td> ↳<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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user