/obj/item/proc/attack_self() return /obj/item/proc/talk_into(mob/M as mob, text) return /obj/item/proc/moved(mob/user as mob, old_loc as turf) return /obj/item/proc/dropped(mob/user as mob) ..() // So you can't drop the Offhand if(istype(src, /obj/item/weapon/offhand)) user.drop_item(src) var/obj/item/O_r = user.r_hand var/obj/item/O_l = user.l_hand if(O_r.twohanded) if(O_r.wielded) user.drop_item(O_r) if(O_l.twohanded) if(O_l.wielded) user.drop_item(O_l) del(src) // called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) return // called after an item is placed in an equipment slot // user is mob that equipped it // slot is text of slot type e.g. "head" // for items that can be placed in multiple slots // note this isn't called during the initial dressing of a player /obj/item/proc/equipped(var/mob/user, var/slot) return // // ***TODO: implement unequipped() // /obj/item/proc/afterattack() return /obj/item/weapon/dummy/ex_act() return /obj/item/weapon/dummy/blob_act() return /obj/item/ex_act(severity) switch(severity) if(1.0) del(src) return if(2.0) if (prob(50)) del(src) return if(3.0) if (prob(5)) del(src) return else return /obj/item/blob_act() return /obj/item/verb/move_to_top() set name = "Move To Top" set category = "Object" set src in oview(1) if(!istype(src.loc, /turf) || usr.stat || usr.restrained() ) return var/turf/T = src.loc src.loc = null src.loc = T /obj/item/examine() set src in view() var/t switch(src.w_class) if(1.0) t = "tiny" if(2.0) t = "small" if(3.0) t = "normal-sized" if(4.0) t = "bulky" if(5.0) t = "huge" else if ((usr.mutations & CLOWN) && prob(50)) t = "funny-looking" usr << text("This is a []\icon[][]. It is a [] item.", !src.blood_DNA ? "" : "bloody ",src, src.name, t) if(src.desc) usr << src.desc return /obj/item/attack_hand(mob/user as mob) if (!user) return if (istype(src.loc, /obj/item/weapon/storage)) for(var/mob/M in range(1, src.loc)) if (M.s_active == src.loc) if (M.client) M.client.screen -= src src.throwing = 0 if (src.loc == user) //canremove==0 means that object may not be removed. You can still wear it. This only applies to clothing. /N if(istype(src, /obj/item/clothing) && !src:canremove) return else user.u_equip(src) else if(istype(src.loc, /mob/living)) return src.pickup(user) user.lastDblClick = world.time + 2 user.next_move = world.time + 2 if (user.hand) user.l_hand = src else user.r_hand = src src.loc = user src.layer = 20 add_fingerprint(user) user.update_clothing() return /obj/item/attack_paw(mob/user as mob) if(isalien(user)) // -- TLE if(!user:has_fine_manipulation) // -- defaults to 0, only changes due to badminnery -- Urist user << "Your claws aren't capable of such fine manipulation." return if (istype(src.loc, /obj/item/weapon/storage)) for(var/mob/M in range(1, src.loc)) if (M.s_active == src.loc) if (M.client) M.client.screen -= src src.throwing = 0 if (src.loc == user) //canremove==0 means that object may not be removed. You can still wear it. This only applies to clothing. /N if(istype(src, /obj/item/clothing) && !src:canremove) return else user.u_equip(src) else if(istype(src.loc, /mob/living)) return src.pickup(user) user.lastDblClick = world.time + 2 user.next_move = world.time + 2 if (user.hand) user.l_hand = src else user.r_hand = src src.loc = user src.layer = 20 user.update_clothing() return /obj/item/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/packageWrap)) var/obj/item/weapon/packageWrap/O = W if (O.amount > 1) var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(src.loc)) P.wrapped = src src.loc = P O.amount -= 1 /obj/item/attack_self(mob/user as mob) ..() if(twohanded) if(wielded) //Trying to unwield it wielded = 0 force = force_unwielded src.name = "[initial(name)] (Unwielded)" src.update_icon() //If needed by the particular item user << "\blue You are now carrying the [initial(name)] with one hand." if(istype(user.get_inactive_hand(),/obj/item/weapon/offhand)) del user.get_inactive_hand() return else //Trying to wield it if(user.get_inactive_hand()) user << "\red You need your other hand to be empty" return wielded = 1 force = force_wielded src.name = "[initial(name)] (Wielded)" src.update_icon() //If needed by the particular item user << "\blue You grab the [initial(name)] with both hands, It is ready for use." var/obj/item/weapon/offhand/O = new /obj/item/weapon/offhand(user) ////Let's reserve his other hand~ O.name = text("[initial(src.name)] - Offhand") O.desc = "Your second grip on the [initial(src.name)]" if(user.hand) user.r_hand = O ///Place dat offhand in the opposite hand else user.l_hand = O O.layer = 20 return /obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone) if (!istype(M)) // not sure if this is the right thing... return var/messagesource = M if (istype(M,/mob/living/carbon/brain)) messagesource = M:container if (src.hitsound) playsound(src.loc, hitsound, 50, 1, -1) ///////////////////////// user.lastattacked = M M.lastattacker = user user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" //spawn(1800) // this wont work right // M.lastattacker = null ///////////////////////// var/power = src.force if(!istype(M, /mob/living/carbon/human)) if(istype(M, /mob/living/carbon/metroid)) var/mob/living/carbon/metroid/Metroid = M if(prob(25)) user << "\red [src] passes right through [M]!" return if(power > 0) Metroid.attacked += 10 if(power >= 3) if(istype(Metroid, /mob/living/carbon/metroid/adult)) if(prob(5 + round(power/2))) if(Metroid.Victim) if(prob(80) && !Metroid.client) Metroid.Discipline++ Metroid.Victim = null Metroid.anchored = 0 if(prob(80) && !Metroid.client) Metroid.Discipline++ spawn() if(Metroid) Metroid.SStun = 1 sleep(rand(5,20)) Metroid.SStun = 0 spawn(0) Metroid.canmove = 0 step_away(Metroid, user) if(prob(25 + power*2)) sleep(2) step_away(Metroid, user) Metroid.canmove = 1 else if(prob(10 + power*2)) if(Metroid.Victim) if(prob(80) && !Metroid.client) Metroid.Discipline++ if(Metroid.Discipline == 1) Metroid.attacked = 0 spawn() Metroid.SStun = 1 sleep(rand(5,20)) Metroid.SStun = 0 Metroid.Victim = null Metroid.anchored = 0 spawn(0) step_away(Metroid, user) Metroid.canmove = 0 if(prob(25 + power*4)) sleep(2) step_away(Metroid, user) Metroid.canmove = 1 for(var/mob/O in viewers(messagesource, null)) O.show_message(text("\red [] has been attacked with [][] ", M, src, (user ? text(" by [].", user) : ".")), 1) if(istype(M, /mob/living/carbon/human)) M:attacked_by(src, user, def_zone) else switch(src.damtype) if("brute") if(istype(src, /mob/living/carbon/metroid)) M.bruteloss += power else M.take_organ_damage(power) if (prob(33)) // Added blood for whacking non-humans too var/turf/location = M.loc if (istype(location, /turf/simulated)) location.add_blood_floor(M) if("fire") if (!(M.mutations & COLD_RESISTANCE)) M.take_organ_damage(0, power) M << "Aargh it burns!" M.updatehealth() src.add_fingerprint(user) return 1 /obj/item/proc/eyestab(mob/living/carbon/M as mob, mob/living/carbon/user as mob) var/mob/living/carbon/human/H = M if(istype(H) && ( \ (H.head && H.head.flags & HEADCOVERSEYES) || \ (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ )) // you can't stab someone in the eyes wearing a mask! user << "\red You're going to need to remove that mask/helmet/glasses first." return var/mob/living/carbon/monkey/Mo = M if(istype(Mo) && ( \ (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ )) // you can't stab someone in the eyes wearing a mask! user << "\red You're going to need to remove that mask/helmet/glasses first." return if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/metroid))//Aliens don't have eyes./N Metroids also don't have eyes! user << "\red You cannot locate any eyes on this creature!" return user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" src.add_fingerprint(user) //if((user.mutations & CLOWN) && prob(50)) // M = user /* M << "\red You stab yourself in the eye." M.sdisabilities |= 1 M.weakened += 4 M.bruteloss += 10 */ if(M != user) for(var/mob/O in (viewers(M) - user - M)) O.show_message("\red [M] has been stabbed in the eye with [src] by [user].", 1) M << "\red [user] stabs you in the eye with [src]!" user << "\red You stab [M] in the eye with [src]!" else user.visible_message( \ "\red [user] has stabbed themself with [src]!", \ "\red You stab yourself in the eyes with [src]!" \ ) if(istype(M, /mob/living/carbon/human)) var/datum/organ/external/affecting = M:organs["head"] affecting.take_damage(7) else M.take_organ_damage(7) M.eye_blurry += rand(3,4) M.eye_stat += rand(2,4) if (M.eye_stat >= 10) M.eye_blurry += 15+(0.1*M.eye_blurry) M.disabilities |= 1 if(M.stat != 2) M << "\red Your eyes start to bleed profusely!" if(prob(50)) if(M.stat != 2) M << "\red You drop what you're holding and clutch at your eyes!" M.drop_item() M.eye_blurry += 10 M.paralysis += 1 M.weakened += 4 if (prob(M.eye_stat - 10 + 1)) if(M.stat != 2) M << "\red You go blind!" M.sdisabilities |= 1 return