Merge branch 'master' of https://github.com/tgstation/-tg-station
@@ -55,7 +55,6 @@
|
||||
if(src.gibbed != 0) return 0
|
||||
var/turf/T = find_loc(affected_mob)
|
||||
gibs(T)
|
||||
src.cure(0)
|
||||
gibbed = 1
|
||||
var/mob/living/carbon/human/H = affected_mob
|
||||
if(istype(H) && !jobban_isbanned(affected_mob, "Cyborg"))
|
||||
|
||||
@@ -55,7 +55,6 @@
|
||||
if(gibbed != 0) return 0
|
||||
var/turf/T = find_loc(affected_mob)
|
||||
gibs(T)
|
||||
src.cure(0)
|
||||
gibbed = 1
|
||||
affected_mob:Alienize()
|
||||
|
||||
|
||||
@@ -641,27 +641,36 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
/datum/supply_packs/organic/cow
|
||||
name = "Cow Crate"
|
||||
cost = 30
|
||||
containertype = /obj/structure/largecrate/cow
|
||||
containertype = /obj/structure/closet/critter/cow
|
||||
containername = "cow crate"
|
||||
|
||||
/datum/supply_packs/organic/goat
|
||||
name = "Goat Crate"
|
||||
cost = 25
|
||||
containertype = /obj/structure/largecrate/goat
|
||||
containertype = /obj/structure/closet/critter/goat
|
||||
containername = "goat crate"
|
||||
|
||||
/datum/supply_packs/organic/chicken
|
||||
name = "Chicken Crate"
|
||||
cost = 20
|
||||
containertype = /obj/structure/largecrate/chick
|
||||
containertype = /obj/structure/closet/critter/chick
|
||||
containername = "chicken crate"
|
||||
|
||||
/datum/supply_packs/organic/lisa
|
||||
/datum/supply_packs/organic/corgi
|
||||
name = "Corgi Crate"
|
||||
contains = list()
|
||||
cost = 50
|
||||
containertype = /obj/structure/largecrate/lisa
|
||||
containertype = /obj/structure/closet/critter/corgi
|
||||
containername = "corgi crate"
|
||||
/datum/supply_packs/organic/cat
|
||||
name = "Cat crate"
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/critter/cat
|
||||
containername = "cat crate"
|
||||
/datum/supply_packs/organic/pug
|
||||
name = "Pug crate"
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/critter/pug
|
||||
containername = "pug crate"
|
||||
|
||||
////// hippy gear
|
||||
|
||||
@@ -927,10 +936,3 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
cost = 30
|
||||
containername = "crate" //let's keep it subtle, eh?
|
||||
contraband = 1
|
||||
|
||||
/datum/supply_packs/pug
|
||||
name = "Pug Crate"
|
||||
contains = list()
|
||||
cost = 50
|
||||
containertype = /obj/structure/largecrate/pug
|
||||
containername = "pug crate"
|
||||
|
||||
@@ -281,6 +281,7 @@ datum/objective/steal
|
||||
"the nuclear authentication disk" = /obj/item/weapon/disk/nuclear,
|
||||
"an ablative armor vest" = /obj/item/clothing/suit/armor/laserproof,
|
||||
"the reactive teleport armor" = /obj/item/clothing/suit/armor/reactive,
|
||||
"a laser pointer" = /obj/item/device/laser_pointer,
|
||||
/*
|
||||
Nobody takes these seriously anyways -- Ikki
|
||||
"a captain's jumpsuit" = /obj/item/clothing/under/rank/captain,
|
||||
|
||||
@@ -292,6 +292,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/librarian(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/barcodescanner(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -324,6 +325,7 @@ var/global/lawyer = 0//Checks for another lawyer
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/lawyer(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store)
|
||||
if(H.backbag == 1)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
|
||||
else
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/rd(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store)
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
@@ -718,7 +718,7 @@ Auto Patrol: []"},
|
||||
if(check_records) //check if they are set to *Arrest* on records
|
||||
var/perpname = perp.get_face_name(perp.get_id_name())
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.security)
|
||||
if(!R || (R.fields["criminal"] == "*Arrest*"))
|
||||
if(R && (R.fields["criminal"] == "*Arrest*"))
|
||||
threatcount += 4
|
||||
|
||||
if((src.idcheck) && (src.allowed(perp)) && !(src.lasercolor))
|
||||
@@ -1034,4 +1034,4 @@ Auto Patrol: []"},
|
||||
|
||||
/obj/machinery/bot/ed209/redtag/New()
|
||||
new /obj/machinery/bot/ed209(get_turf(src),null,"r")
|
||||
del(src)
|
||||
del(src)
|
||||
|
||||
@@ -631,7 +631,7 @@ Auto Patrol: []"},
|
||||
if(check_records) //check if they are set to *Arrest* on records
|
||||
var/perpname = perp.get_face_name(perp.get_id_name())
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.security)
|
||||
if(!R || (R.fields["criminal"] == "*Arrest*"))
|
||||
if(R && (R.fields["criminal"] == "*Arrest*"))
|
||||
threatcount += 4
|
||||
|
||||
return threatcount
|
||||
|
||||
@@ -182,6 +182,9 @@
|
||||
playsound(loc, "sparks", 50, 1)
|
||||
visible_message("\blue The camera has been sliced apart by [] with an energy blade!")
|
||||
del(src)
|
||||
else if(istype(W, /obj/item/device/laser_pointer))
|
||||
var/obj/item/device/laser_pointer/L = W
|
||||
L.laser_act(src, user)
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
/obj/item/toy/sword = 2,
|
||||
/obj/item/toy/gun = 2,
|
||||
/obj/item/toy/crossbow = 2,
|
||||
/obj/item/clothing/suit/syndicatefake = 2,
|
||||
/obj/item/weapon/storage/box/fakesyndiesuit = 2,
|
||||
/obj/item/weapon/storage/fancy/crayons = 2,
|
||||
/obj/item/toy/spinningtoy = 2,
|
||||
/obj/item/toy/prize/ripley = 1,
|
||||
|
||||
@@ -195,9 +195,9 @@
|
||||
usr << "\red Access Denied."
|
||||
|
||||
else if (href_list["magbot"])
|
||||
if(src.allowed(usr))
|
||||
if(issilicon(usr) && is_special_character(usr))
|
||||
var/mob/living/silicon/robot/R = locate(href_list["magbot"])
|
||||
if(R)
|
||||
if(R && !R.emagged && R.connected_ai == usr && !R.scrambledcodes)
|
||||
var/choice = input("Are you certain you wish to hack [R.name]?") in list("Confirm", "Abort")
|
||||
if(choice == "Confirm")
|
||||
if(R && istype(R))
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
density = 0 // can walk through it.
|
||||
var/id = null // id of door it controls.
|
||||
var/releasetime = 0 // when world.time reaches it - release the prisoneer
|
||||
var/timelength = 0 // the length of time this door will be set for
|
||||
var/timing = 1 // boolean, true/1 timer is on, false/0 means it's not timing
|
||||
var/picture_state // icon_state of alert picture, if not displaying text/numbers
|
||||
var/list/obj/machinery/targets = list()
|
||||
@@ -61,10 +62,11 @@
|
||||
// update the door_timer window and the icon
|
||||
process()
|
||||
if(stat & (NOPOWER|BROKEN)) return
|
||||
if(src.timing)
|
||||
if(timing)
|
||||
if(world.time > src.releasetime)
|
||||
src.timer_end() // open doors, reset timer, clear status screen
|
||||
src.timing = 0
|
||||
timing = 0
|
||||
timeset(0)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
else
|
||||
@@ -115,16 +117,18 @@
|
||||
|
||||
|
||||
proc/timeleft()
|
||||
. = (releasetime-world.time)/10
|
||||
. = (timing ? (releasetime-world.time) : timelength)/10
|
||||
if(. < 0)
|
||||
. = 0
|
||||
|
||||
|
||||
proc/timeset(var/seconds)
|
||||
releasetime=world.time+seconds*10
|
||||
if(timing)
|
||||
releasetime=world.time+seconds*10
|
||||
else
|
||||
timelength=seconds*10
|
||||
return
|
||||
|
||||
|
||||
//Allows AIs to use door_timer, see human attack_hand function below
|
||||
attack_ai(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
@@ -143,7 +147,7 @@
|
||||
var/dat = "<HTML><BODY><TT>"
|
||||
dat += "<HR>Timer System:</hr>"
|
||||
dat += "<b>Door [src.id] controls</b><br/>"
|
||||
if (src.timing)
|
||||
if (timing)
|
||||
dat += "<a href='?src=\ref[src];timing=0'>Stop Timer and open door</a><br/>"
|
||||
else
|
||||
dat += "<a href='?src=\ref[src];timing=1'>Activate Timer and close door</a><br/>"
|
||||
@@ -177,24 +181,26 @@
|
||||
return
|
||||
|
||||
usr.set_machine(src)
|
||||
if(href_list["timing"])
|
||||
src.timing = text2num(href_list["timing"])
|
||||
else
|
||||
if(href_list["tp"]) //adjust timer, close door if not already closed
|
||||
var/tp = text2num(href_list["tp"])
|
||||
var/timeleft = timeleft()
|
||||
timeleft += tp
|
||||
timeleft = min(max(round(timeleft), 0), 600)
|
||||
timeset(timeleft)
|
||||
//src.timing = 1
|
||||
//src.closedoor()
|
||||
if(href_list["fc"])
|
||||
for(var/obj/machinery/flasher/F in targets)
|
||||
F.flash()
|
||||
if(href_list["timing"]) //switch between timing and not timing
|
||||
var/timeleft = timeleft()
|
||||
timeleft = min(max(round(timeleft), 0), 600)
|
||||
timing = text2num(href_list["timing"])
|
||||
timeset(timeleft)
|
||||
else if(href_list["tp"]) //adjust timer
|
||||
var/timeleft = timeleft()
|
||||
var/tp = text2num(href_list["tp"])
|
||||
timeleft += tp
|
||||
timeleft = min(max(round(timeleft), 0), 600)
|
||||
timeset(timeleft)
|
||||
//src.timing = 1
|
||||
//src.closedoor()
|
||||
else if(href_list["fc"])
|
||||
for(var/obj/machinery/flasher/F in targets)
|
||||
F.flash()
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
src.update_icon()
|
||||
if(src.timing)
|
||||
if(timing)
|
||||
src.timer_start()
|
||||
else
|
||||
src.timer_end()
|
||||
@@ -212,7 +218,7 @@
|
||||
if(stat & (BROKEN))
|
||||
set_picture("ai_bsod")
|
||||
return
|
||||
if(src.timing)
|
||||
if(timing)
|
||||
var/disp1 = id
|
||||
var/timeleft = timeleft()
|
||||
var/disp2 = "[add_zero(num2text((timeleft / 60) % 60),2)]~[add_zero(num2text(timeleft % 60), 2)]"
|
||||
@@ -284,4 +290,4 @@
|
||||
#undef FONT_SIZE
|
||||
#undef FONT_COLOR
|
||||
#undef FONT_STYLE
|
||||
#undef CHARS_PER_LINE
|
||||
#undef CHARS_PER_LINE
|
||||
|
||||
@@ -500,6 +500,7 @@
|
||||
return "[..()] [mode==1?"([locked||"Nothing"])":null] \[<a href='?src=\ref[src];mode=1'>S</a>|<a href='?src=\ref[src];mode=2'>P</a>\]"
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if(href_list["mode"])
|
||||
mode = text2num(href_list["mode"])
|
||||
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
|
||||
|
||||
@@ -6,12 +6,6 @@
|
||||
var/obj/machinery/computer/mech_bay_power_console/recharge_console
|
||||
var/obj/mecha/recharging_mecha = null
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/airless
|
||||
icon_state = "recharge_floor_asteroid"
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
temperature = TCMB
|
||||
|
||||
Entered(var/obj/mecha/mecha)
|
||||
. = ..()
|
||||
if(istype(mecha))
|
||||
@@ -48,7 +42,11 @@
|
||||
recharge_port.recharge_console = recharge_console
|
||||
return
|
||||
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/airless
|
||||
icon_state = "recharge_floor_asteroid"
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
temperature = TCMB
|
||||
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port
|
||||
|
||||
@@ -23,6 +23,26 @@
|
||||
anchored = 1
|
||||
var/health = 200
|
||||
|
||||
/obj/structure/alien/resin/New(location)
|
||||
..()
|
||||
air_update_turf(1)
|
||||
return
|
||||
|
||||
/obj/structure/alien/resin/Del()
|
||||
density = 0
|
||||
air_update_turf(1)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/alien/resin/Move()
|
||||
air_update_turf(1)
|
||||
..()
|
||||
air_update_turf(1)
|
||||
return
|
||||
|
||||
/obj/structure/alien/resin/CanAtmosPass()
|
||||
return !density
|
||||
|
||||
/obj/structure/alien/resin/wall
|
||||
name = "resin wall"
|
||||
desc = "Purple slime solidified into a wall."
|
||||
@@ -416,4 +436,4 @@
|
||||
|
||||
spawn(rand(150, 200))
|
||||
if(src)
|
||||
tick()
|
||||
tick()
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
|
||||
/obj/effect/spider/attackby(var/obj/item/weapon/W, var/mob/user)
|
||||
if(W.attack_verb.len)
|
||||
visible_message("\red <B>\The [src] have been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]")
|
||||
visible_message("\red <B>\The [src] has been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]")
|
||||
else
|
||||
visible_message("\red <B>\The [src] have been attacked with \the [W][(user ? " by [user]." : ".")]")
|
||||
visible_message("\red <B>\The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]")
|
||||
|
||||
var/damage = W.force / 4.0
|
||||
|
||||
@@ -169,7 +169,7 @@
|
||||
var/target_atom = pick(nearby)
|
||||
walk_to(src, target_atom)
|
||||
if(prob(40))
|
||||
src.visible_message("\blue \the [src] skitters[pick(" away"," around","")].")
|
||||
src.visible_message("\blue \The [src] skitters[pick(" away"," around","")].")
|
||||
else if(prob(10))
|
||||
//ventcrawl!
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src))
|
||||
@@ -195,7 +195,7 @@
|
||||
icon_state = pick("cocoon1","cocoon2","cocoon3")
|
||||
|
||||
/obj/effect/spider/cocoon/Del()
|
||||
src.visible_message("\red \the [src] splits open.")
|
||||
src.visible_message("\red \The [src] splits open.")
|
||||
for(var/atom/movable/A in contents)
|
||||
A.loc = src.loc
|
||||
..()
|
||||
|
||||
@@ -0,0 +1,183 @@
|
||||
|
||||
/obj/item/device/laser_pointer
|
||||
name = "laser pointer"
|
||||
desc = "Don't shine it in your eyes!"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "pointer"
|
||||
item_state = "pen"
|
||||
var/pointer_icon_state
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
|
||||
slot_flags = SLOT_BELT
|
||||
m_amt = 500
|
||||
g_amt = 500
|
||||
w_class = 1.0
|
||||
origin_tech = "combat=1"
|
||||
origin_tech = "magnets=2"
|
||||
var/turf/pointer_loc
|
||||
var/energy = 5
|
||||
var/max_energy = 5
|
||||
var/recharging = 0
|
||||
var/recharge_locked = 0
|
||||
|
||||
/obj/item/device/laser_pointer/red
|
||||
pointer_icon_state = "red_laser"
|
||||
/obj/item/device/laser_pointer/green
|
||||
pointer_icon_state = "green_laser"
|
||||
/obj/item/device/laser_pointer/blue
|
||||
pointer_icon_state = "blue_laser"
|
||||
/obj/item/device/laser_pointer/purple
|
||||
pointer_icon_state = "purple_laser"
|
||||
|
||||
/obj/item/device/laser_pointer/New()
|
||||
..()
|
||||
if(!pointer_icon_state)
|
||||
pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser")
|
||||
|
||||
/obj/item/device/laser_pointer/attack(mob/living/M, mob/user)
|
||||
laser_act(M, user)
|
||||
|
||||
/obj/item/device/laser_pointer/afterattack(var/atom/target, var/mob/living/user, flag, params)
|
||||
if(flag) //we're placing the object on a table or in backpack
|
||||
return
|
||||
laser_act(target, user)
|
||||
|
||||
/obj/item/device/laser_pointer/proc/laser_act(var/atom/target, var/mob/living/user)
|
||||
if( !(user in (viewers(7,target))) )
|
||||
return
|
||||
if (!user.IsAdvancedToolUser())
|
||||
user << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
return
|
||||
if(user.has_mutation(HULK))
|
||||
user << "<span class='warning'>Your meaty finger is too large for the button!</span>"
|
||||
return
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
if(C.is_mutantrace("adamantine"))
|
||||
user << "<span class='warning'>Your metal fingers can't press the button!</span>"
|
||||
return
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
//nothing happens if the battery is drained
|
||||
if(recharge_locked)
|
||||
user << "<span class='notice'>You point [src] at [target], but it's still charging.</span>"
|
||||
return
|
||||
|
||||
var/outmsg
|
||||
var/turf/targloc = get_turf(target)
|
||||
|
||||
//human/alien mobs
|
||||
if(iscarbon(target))
|
||||
if(user.zone_sel.selecting == "eyes")
|
||||
var/mob/living/carbon/C = target
|
||||
|
||||
//20% chance to actually hit the eyes
|
||||
if(prob(20))
|
||||
C.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had a laser pointer shone in their eyes by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='orange'>Shone a laser pointer in the eyes of [C.name] ([C.ckey])</font>")
|
||||
log_attack("<font color='orange'>[user.name] ([user.ckey]) Shone a laser pointer in the eyes of [C.name] ([C.ckey])</font>")
|
||||
|
||||
//eye target check
|
||||
outmsg = "<span class='notice'>You blind [C] by shining [src] in their eyes.</span>"
|
||||
var/eye_prot = C.eyecheck()
|
||||
if(C.blinded || eye_prot >= 2)
|
||||
eye_prot = 4
|
||||
var/severity = 3 - eye_prot
|
||||
if(prob(33))
|
||||
severity += 1
|
||||
else if(prob(50))
|
||||
severity -= 1
|
||||
severity = min(max(severity, 0), 4)
|
||||
|
||||
switch(severity)
|
||||
if(0)
|
||||
//no effect
|
||||
C << "<span class='info'>A small, bright dot appears in your vision.</span>"
|
||||
if(1)
|
||||
//industrial grade eye protection
|
||||
C.eye_stat += rand(0, 2)
|
||||
C << "<span class='notice'>Something bright flashes in the corner of your vision!</span>"
|
||||
if(2)
|
||||
//basic eye protection (sunglasses)
|
||||
flick("flash", C.flash)
|
||||
C.eye_stat += rand(1, 6)
|
||||
C << "<span class='danger'>Your eyes were blinded!</span>"
|
||||
if(3)
|
||||
//no eye protection
|
||||
if(prob(2))
|
||||
C.Weaken(1)
|
||||
flick("e_flash", C.flash)
|
||||
C.eye_stat += rand(3, 7)
|
||||
C << "<span class='danger'>Your eyes were blinded!</span>"
|
||||
if(4)
|
||||
//the effect has been worsened by something
|
||||
if(prob(5))
|
||||
C.Weaken(1)
|
||||
flick("e_flash", C.flash)
|
||||
C.eye_stat += rand(5, 10)
|
||||
C << "<span class='danger'>Your eyes were blinded!</span>"
|
||||
else
|
||||
outmsg = "<span class='notice'>You fail to blind [C] by shining [src] at their eyes.</span>"
|
||||
|
||||
//robots and AI
|
||||
else if(issilicon(target))
|
||||
var/mob/living/silicon/S = target
|
||||
//20% chance to actually hit the sensors
|
||||
if(prob(20))
|
||||
S.Weaken(rand(5,10))
|
||||
S << "<span class='warning'>Your sensors were overloaded by a laser!</span>"
|
||||
outmsg = "<span class='notice'>You overload [S] by shining [src] at their sensors.</span>"
|
||||
|
||||
S.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had a laser pointer shone in their eyes by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='orange'>Shone a laser pointer in the eyes of [S.name] ([S.ckey])</font>")
|
||||
log_attack("<font color='orange'>[user.name] ([user.ckey]) Shone a laser pointer in the eyes of [S.name] ([S.ckey])</font>")
|
||||
else
|
||||
outmsg = "<span class='notice'>You fail to overload [S] by shining [src] at their sensors.</span>"
|
||||
|
||||
//cameras
|
||||
else if(istype(target, /obj/machinery/camera))
|
||||
var/obj/machinery/camera/C = target
|
||||
if(prob(20))
|
||||
C.emp_act(1)
|
||||
outmsg = "<span class='notice'>You hit the lens of [C] with [src], temporarily disabling the camera!</span>"
|
||||
|
||||
log_admin("\[[time_stamp()]\] [user.name] ([user.ckey]) EMPd a camera with a laser pointer")
|
||||
user.attack_log += text("\[[time_stamp()]\] [user.name] ([user.ckey]) EMPd a camera with a laser pointer")
|
||||
else
|
||||
outmsg = "<span class='info'>You missed the lens of [C] with [src].</span>"
|
||||
|
||||
//laser pointer image
|
||||
icon_state = "pointer_[pointer_icon_state]"
|
||||
var/list/showto = list()
|
||||
for(var/mob/M in range(7,targloc))
|
||||
if(M.client)
|
||||
showto.Add(M.client)
|
||||
var/image/I = image('icons/obj/projectiles.dmi',targloc,pointer_icon_state,10)
|
||||
I.pixel_x = target.pixel_x + rand(-5,5)
|
||||
I.pixel_y = target.pixel_y + rand(-5,5)
|
||||
|
||||
if(outmsg)
|
||||
user << outmsg
|
||||
else
|
||||
user << "<span class='info'>You point [src] at [target].</span>"
|
||||
|
||||
energy -= 1
|
||||
if(energy <= max_energy)
|
||||
if(!recharging)
|
||||
recharging = 1
|
||||
processing_objects.Add(src)
|
||||
if(energy <= 0)
|
||||
user << "<span class='warning'>You've overused the battery of [src], now it needs time to recharge!</span>"
|
||||
recharge_locked = 1
|
||||
|
||||
flick_overlay(I, showto, 10)
|
||||
icon_state = "pointer"
|
||||
|
||||
/obj/item/device/laser_pointer/process()
|
||||
if(prob(20 - recharge_locked*5))
|
||||
energy += 1
|
||||
if(energy >= max_energy)
|
||||
energy = max_energy
|
||||
recharging = 0
|
||||
recharge_locked = 0
|
||||
..()
|
||||
@@ -11,7 +11,6 @@
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
m_amt = 750
|
||||
w_amt = 750
|
||||
origin_tech = "powerstorage=3;syndicate=5"
|
||||
var/drain_rate = 600000 // amount of power to drain per tick
|
||||
var/power_drained = 0 // has drained this much power
|
||||
|
||||
@@ -384,6 +384,16 @@
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
new /obj/item/weapon/handcuffs(src)
|
||||
|
||||
/obj/item/weapon/storage/box/fakesyndiesuit
|
||||
name = "Space Suit and Helmet"
|
||||
desc = "A sleek, sturdy box used to hold replica spacesuits."
|
||||
icon_state = "box_of_doom"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/clothing/head/syndicatefake(src)
|
||||
new /obj/item/clothing/suit/syndicatefake(src)
|
||||
|
||||
/obj/item/weapon/storage/box/mousetraps
|
||||
name = "box of Pest-B-Gon Mousetraps"
|
||||
desc = "<B><FONT=red>WARNING:</FONT></B> <I>Keep out of reach of children</I>."
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
if(!prevent_warning && !istype(W, /obj/item/weapon/gun/energy/crossbow))
|
||||
for(var/mob/M in viewers(usr, null))
|
||||
if(M == usr)
|
||||
usr << "<span class='notice'>You put the [W] into [src].</span>"
|
||||
usr << "<span class='notice'>You put \the [W] into [src].</span>"
|
||||
else if(in_range(M, usr)) //If someone is standing close enough, they can tell what it is...
|
||||
M.show_message("<span class='notice'>[usr] puts [W] into [src].</span>")
|
||||
else if(W && W.w_class >= 3.0) //Otherwise they can only see large or normal items from a distance...
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
* Twohanded
|
||||
* Fireaxe
|
||||
* Double-Bladed Energy Swords
|
||||
* Spears
|
||||
*/
|
||||
|
||||
/*##################################################################
|
||||
@@ -13,6 +14,9 @@
|
||||
//This rewrite means we don't have two variables for EVERY item which are used only by a few weapons.
|
||||
//It also tidies stuff up elsewhere.
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Twohanded
|
||||
*/
|
||||
@@ -103,6 +107,14 @@
|
||||
/obj/item/weapon/twohanded/offhand/wield()
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/twohanded/offhand/IsShield()//if the actual twohanded weapon is a shield, we count as a shield too!
|
||||
var/mob/user = loc
|
||||
if(!istype(user)) return 0
|
||||
var/obj/item/I = user.get_active_hand()
|
||||
if(I == src) I = user.get_inactive_hand()
|
||||
if(!I) return 0
|
||||
return I.IsShield()
|
||||
|
||||
|
||||
/*
|
||||
* Fireaxe
|
||||
@@ -115,7 +127,7 @@
|
||||
w_class = 4.0
|
||||
slot_flags = SLOT_BACK
|
||||
force_unwielded = 5
|
||||
force_wielded = 18
|
||||
force_wielded = 24 // Was 18, Buffed - RobRichards/RR
|
||||
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
|
||||
|
||||
/obj/item/weapon/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons.
|
||||
@@ -150,7 +162,7 @@
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
force_unwielded = 3
|
||||
force_wielded = 30
|
||||
force_wielded = 40 // Was 30, Buffed - RR
|
||||
wieldsound = 'sound/weapons/saberon.ogg'
|
||||
unwieldsound = 'sound/weapons/saberoff.ogg'
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD
|
||||
@@ -205,7 +217,7 @@
|
||||
w_class = 4.0
|
||||
slot_flags = SLOT_BACK
|
||||
force_unwielded = 10
|
||||
force_wielded = 13
|
||||
force_wielded = 18 // Was 13, Buffed - RR
|
||||
throwforce = 15
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
//var/datum/module/mod //not used
|
||||
var/m_amt = 0 // metal
|
||||
var/g_amt = 0 // glass
|
||||
var/w_amt = 0 // waster amounts
|
||||
var/origin_tech = null //Used by R&D to determine what research bonuses it grants.
|
||||
var/reliability = 100 //Used by SOME devices to determine how reliable they are.
|
||||
var/crit_fail = 0
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
var/icon_opened = "open"
|
||||
var/opened = 0
|
||||
var/welded = 0
|
||||
var/locked = 0
|
||||
var/broken = 0
|
||||
var/large = 1
|
||||
var/wall_mounted = 0 //never solid (You can always pass over it)
|
||||
var/health = 100
|
||||
|
||||
@@ -1,6 +1,75 @@
|
||||
/obj/structure/closet/crate/critter
|
||||
/obj/structure/closet/critter
|
||||
name = "critter crate"
|
||||
desc = "A crate which can sustain life for a while."
|
||||
desc = "A crate designed for safe transport of animals. Only openable from the the outside."
|
||||
icon_state = "critter"
|
||||
icon_opened = "critteropen"
|
||||
icon_closed = "critter"
|
||||
icon_closed = "critter"
|
||||
var/already_opened = 0
|
||||
var/content_mob = null
|
||||
|
||||
/obj/structure/closet/critter/can_open()
|
||||
if(locked || welded)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/structure/closet/critter/open()
|
||||
if(!can_open())
|
||||
return 0
|
||||
|
||||
if(content_mob == null) //making sure we don't spawn anything too eldritch
|
||||
already_opened = 1
|
||||
return ..()
|
||||
|
||||
if(content_mob != null && already_opened == 0)
|
||||
if(content_mob == /mob/living/simple_animal/chick)
|
||||
var/num = rand(4, 6)
|
||||
for(var/i = 0, i < num, i++)
|
||||
new content_mob(loc)
|
||||
else if(content_mob == /mob/living/simple_animal/corgi)
|
||||
var/num = rand(0, 1)
|
||||
if(num) //No more matriarchy for cargo
|
||||
content_mob = /mob/living/simple_animal/corgi/Lisa
|
||||
new content_mob(loc)
|
||||
else
|
||||
new content_mob(loc)
|
||||
already_opened = 1
|
||||
..()
|
||||
|
||||
/obj/structure/closet/critter/close()
|
||||
..()
|
||||
locked = 1
|
||||
return 1
|
||||
|
||||
/obj/structure/closet/critter/attack_hand(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
if(src.loc == user.loc)
|
||||
user << "<span class='notice'>It won't budge!</span>"
|
||||
toggle()
|
||||
else
|
||||
locked = 0
|
||||
toggle()
|
||||
|
||||
/obj/structure/closet/critter/corgi
|
||||
name = "corgi crate"
|
||||
content_mob = /mob/living/simple_animal/corgi //This statement is (not) false. See above.
|
||||
|
||||
/obj/structure/closet/critter/cow
|
||||
name = "cow crate"
|
||||
content_mob = /mob/living/simple_animal/cow
|
||||
|
||||
/obj/structure/closet/critter/goat
|
||||
name = "goat crate"
|
||||
content_mob = /mob/living/simple_animal/hostile/retaliate/goat
|
||||
|
||||
/obj/structure/closet/critter/chick
|
||||
name = "chicken crate"
|
||||
content_mob = /mob/living/simple_animal/chick
|
||||
|
||||
/obj/structure/closet/critter/cat
|
||||
name = "cat crate"
|
||||
content_mob = /mob/living/simple_animal/cat
|
||||
|
||||
/obj/structure/closet/critter/pug
|
||||
name = "pug crate"
|
||||
content_mob = /mob/living/simple_animal/pug
|
||||
@@ -11,7 +11,7 @@
|
||||
var/localopened = 0 //Setting this to keep it from behaviouring like a normal closet and obstructing movement in the map. -Agouri
|
||||
opened = 1
|
||||
var/hitstaken = 0
|
||||
var/locked = 1
|
||||
locked = 1
|
||||
var/smashed = 0
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
|
||||
|
||||
@@ -47,4 +47,5 @@
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/clothing/suit/armor/reactive(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/laser_pointer(src)
|
||||
return
|
||||
@@ -5,8 +5,7 @@
|
||||
icon_state = "secure1"
|
||||
density = 1
|
||||
opened = 0
|
||||
var/locked = 1
|
||||
var/broken = 0
|
||||
locked = 1
|
||||
icon_closed = "secure"
|
||||
var/icon_locked = "secure1"
|
||||
icon_opened = "secureopen"
|
||||
@@ -16,8 +15,7 @@
|
||||
health = 200
|
||||
|
||||
/obj/structure/closet/secure_closet/can_open()
|
||||
..()
|
||||
if(src.locked)
|
||||
if(src.locked || src.welded)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
@@ -168,8 +168,8 @@
|
||||
var/greenlight = "securecrateg"
|
||||
var/sparks = "securecratesparks"
|
||||
var/emag = "securecrateemag"
|
||||
var/broken = 0
|
||||
var/locked = 1
|
||||
broken = 0
|
||||
locked = 1
|
||||
health = 1000
|
||||
|
||||
/obj/structure/closet/crate/hydroponics
|
||||
|
||||
@@ -26,47 +26,3 @@
|
||||
/obj/structure/largecrate/mule
|
||||
icon_state = "mulecrate"
|
||||
|
||||
/obj/structure/largecrate/lisa
|
||||
icon_state = "lisacrate"
|
||||
|
||||
/obj/structure/largecrate/lisa/attackby(obj/item/weapon/W as obj, mob/user as mob) //ugly but oh well
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
new /mob/living/simple_animal/corgi/Lisa(loc)
|
||||
..()
|
||||
|
||||
/obj/structure/largecrate/pug
|
||||
icon_state = "lisacrate"
|
||||
|
||||
/obj/structure/largecrate/pug/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
new /mob/living/simple_animal/pug(loc)
|
||||
..()
|
||||
|
||||
/obj/structure/largecrate/cow
|
||||
name = "cow crate"
|
||||
icon_state = "lisacrate"
|
||||
|
||||
/obj/structure/largecrate/cow/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
new /mob/living/simple_animal/cow(loc)
|
||||
..()
|
||||
|
||||
/obj/structure/largecrate/goat
|
||||
name = "goat crate"
|
||||
icon_state = "lisacrate"
|
||||
|
||||
/obj/structure/largecrate/goat/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
new /mob/living/simple_animal/hostile/retaliate/goat(loc)
|
||||
..()
|
||||
|
||||
/obj/structure/largecrate/chick
|
||||
name = "chicken crate"
|
||||
icon_state = "lisacrate"
|
||||
|
||||
/obj/structure/largecrate/chick/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
var/num = rand(4, 6)
|
||||
for(var/i = 0, i < num, i++)
|
||||
new /mob/living/simple_animal/chick(loc)
|
||||
..()
|
||||
|
||||
@@ -21,10 +21,13 @@
|
||||
icon_state = mineralType
|
||||
name = "[mineralType] door"
|
||||
air_update_turf(1)
|
||||
return
|
||||
|
||||
Del()
|
||||
density = 0
|
||||
air_update_turf(1)
|
||||
..()
|
||||
return
|
||||
|
||||
Move()
|
||||
air_update_turf(1)
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
if ("swing_hit") soundin = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg')
|
||||
if ("hiss") soundin = pick('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg')
|
||||
if ("pageturn") soundin = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg')
|
||||
if ("gunshot") soundin = pick('sound/weapons/Gunshot.ogg', 'sound/weapons/Gunshot2.ogg','sound/weapons/Gunshot3.ogg','sound/weapons/Gunshot4.ogg')
|
||||
|
||||
var/sound/S = sound(soundin)
|
||||
S.wait = 0 //No queue
|
||||
|
||||
@@ -231,8 +231,8 @@ var/datum/controller/supply_shuttle/supply_shuttle = new()
|
||||
for(var/atom/movable/MA in shuttle)
|
||||
if(MA.anchored) continue
|
||||
|
||||
// Must be in a crate!
|
||||
if(istype(MA,/obj/structure/closet/crate))
|
||||
// Must be in a crate (or a critter crate)!
|
||||
if(istype(MA,/obj/structure/closet/crate) || istype(MA,/obj/structure/closet/critter))
|
||||
crate_count++
|
||||
var/find_slip = 1
|
||||
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
var/list/Lines = list()
|
||||
|
||||
if(holder)
|
||||
for(var/client/C in clients)
|
||||
var/entry = "\t[C.key]"
|
||||
if(C.holder && C.holder.fakekey)
|
||||
entry += " <i>(as [C.holder.fakekey])</i>"
|
||||
entry += " - Playing as [C.mob.real_name]"
|
||||
if(check_rights(R_ADMIN,0))
|
||||
if(check_rights(R_ADMIN,0))//If they have +ADMIN, show hidden admins, player IC names and IC status
|
||||
for(var/client/C in clients)
|
||||
var/entry = "\t[C.key]"
|
||||
if(C.holder && C.holder.fakekey)
|
||||
entry += " <i>(as [C.holder.fakekey])</i>"
|
||||
entry += " - Playing as [C.mob.real_name]"
|
||||
switch(C.mob.stat)
|
||||
if(UNCONSCIOUS)
|
||||
entry += " - <font color='darkgray'><b>Unconscious</b></font>"
|
||||
@@ -30,6 +30,12 @@
|
||||
entry += " - <b><font color='red'>Antagonist</font></b>"
|
||||
entry += " (<A HREF='?_src_=holder;adminmoreinfo=\ref[C.mob]'>?</A>)"
|
||||
Lines += entry
|
||||
else//If they don't have +ADMIN, only show hidden admins
|
||||
for(var/client/C in clients)
|
||||
var/entry = "\t[C.key]"
|
||||
if(C.holder && C.holder.fakekey)
|
||||
entry += " <i>(as [C.holder.fakekey])</i>"
|
||||
Lines += entry
|
||||
else
|
||||
for(var/client/C in clients)
|
||||
if(C.holder && C.holder.fakekey)
|
||||
|
||||
@@ -64,7 +64,8 @@ var/list/admin_verbs_ban = list(
|
||||
)
|
||||
var/list/admin_verbs_sounds = list(
|
||||
/client/proc/play_local_sound,
|
||||
/client/proc/play_sound
|
||||
/client/proc/play_sound,
|
||||
/client/proc/stop_sounds
|
||||
)
|
||||
var/list/admin_verbs_fun = list(
|
||||
/client/proc/object_talk,
|
||||
@@ -208,7 +209,7 @@ var/list/admin_verbs_hideable = list(
|
||||
if(rights & R_REJUVINATE) verbs += admin_verbs_rejuv
|
||||
if(rights & R_SOUNDS) verbs += admin_verbs_sounds
|
||||
if(rights & R_SPAWN) verbs += admin_verbs_spawn
|
||||
|
||||
|
||||
for(var/path in holder.rank.adds)
|
||||
verbs += path
|
||||
for(var/path in holder.rank.subs)
|
||||
|
||||
@@ -25,7 +25,20 @@
|
||||
playsound(get_turf(src.mob), S, 50, 0, 0)
|
||||
feedback_add_details("admin_verb","PLS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/stop_sounds()
|
||||
set category = "Debug"
|
||||
set name = "Stop Sounds"
|
||||
if((check_rights(R_SOUNDS)) || (check_rights(R_DEBUG)))
|
||||
|
||||
log_admin("[key_name(src)] stopped all currently playing sounds.")
|
||||
message_admins("[key_name_admin(src)] stopped all currently playing sounds.")
|
||||
for(var/mob/M in player_list)
|
||||
if(M.client)
|
||||
M << sound(null)
|
||||
feedback_add_details("admin_verb","SS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
else
|
||||
return
|
||||
/*
|
||||
/client/proc/cuban_pete()
|
||||
set category = "Fun"
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
w_class = 2.0
|
||||
m_amt = 100
|
||||
g_amt = 0
|
||||
w_amt = 0
|
||||
throwforce = 2
|
||||
throw_speed = 3
|
||||
throw_range = 10
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon_state = "igniter"
|
||||
m_amt = 500
|
||||
g_amt = 50
|
||||
w_amt = 10
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
activate()
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
icon_state = "infrared"
|
||||
m_amt = 1000
|
||||
g_amt = 500
|
||||
w_amt = 100
|
||||
origin_tech = "magnets=2"
|
||||
|
||||
secured = 0
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
desc = "A handy little spring-loaded trap for catching pesty rodents."
|
||||
icon_state = "mousetrap"
|
||||
m_amt = 100
|
||||
w_amt = 10
|
||||
origin_tech = "combat=1"
|
||||
var/armed = 0
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon_state = "prox"
|
||||
m_amt = 800
|
||||
g_amt = 200
|
||||
w_amt = 50
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
secured = 0
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
item_state = "signaler"
|
||||
m_amt = 1000
|
||||
g_amt = 200
|
||||
w_amt = 100
|
||||
origin_tech = "magnets=1"
|
||||
wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon_state = "timer"
|
||||
m_amt = 500
|
||||
g_amt = 50
|
||||
w_amt = 10
|
||||
origin_tech = "magnets=1"
|
||||
|
||||
secured = 0
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon_state = "voice"
|
||||
m_amt = 500
|
||||
g_amt = 50
|
||||
w_amt = 10
|
||||
origin_tech = "magnets=1"
|
||||
var/listening = 0
|
||||
var/recorded //the activation message
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
/datum/recipe/mimeburger
|
||||
reagents = list("flour" = 5)
|
||||
items = list(
|
||||
/obj/item/clothing/head/beret
|
||||
/obj/item/clothing/mask/gas/mime
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/mimeburger
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
else
|
||||
if (copytext(message, 1, 2) != "*" && !stat)
|
||||
playsound(loc, "hiss", 25, 1, 1)//So aliens can hiss while they hiss yo/N
|
||||
return ..(message)
|
||||
return ..(message, "A")
|
||||
else
|
||||
|
||||
// ~lol~
|
||||
|
||||
@@ -532,4 +532,11 @@
|
||||
if(istype(wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
return
|
||||
|
||||
..(message)
|
||||
..(message)
|
||||
|
||||
/mob/living/carbon/proc/is_mutantrace(var/mrace)
|
||||
if(mrace)
|
||||
if(src.dna && src.dna.mutantrace == mrace)
|
||||
return 1
|
||||
else
|
||||
return src.dna && src.dna.mutantrace ? 1 : 0
|
||||
|
||||
@@ -55,24 +55,20 @@
|
||||
message = "<B>[src]</B> bows."
|
||||
m_type = 1
|
||||
|
||||
|
||||
if ("burp")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> burps."
|
||||
m_type = 2
|
||||
..(act)
|
||||
|
||||
if ("choke")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> chokes!"
|
||||
m_type = 2
|
||||
..(act)
|
||||
else
|
||||
message = "<B>[src]</B> makes a strong noise."
|
||||
m_type = 2
|
||||
|
||||
if ("chuckle")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> chuckles."
|
||||
m_type = 2
|
||||
..(act)
|
||||
else
|
||||
message = "<B>[src]</B> makes a noise."
|
||||
m_type = 2
|
||||
@@ -82,148 +78,49 @@
|
||||
message = "<B>[src]</B> claps."
|
||||
m_type = 2
|
||||
|
||||
if ("collapse")
|
||||
Paralyse(2)
|
||||
message = "<B>[src]</B> collapses!"
|
||||
m_type = 2
|
||||
|
||||
if ("cough")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> coughs!"
|
||||
m_type = 2
|
||||
..(act)
|
||||
else
|
||||
message = "<B>[src]</B> makes a strong noise."
|
||||
m_type = 2
|
||||
|
||||
if ("dance")
|
||||
if (!src.restrained())
|
||||
message = "<B>[src]</B> dances around happily."
|
||||
m_type = 1
|
||||
|
||||
|
||||
if ("deathgasp")
|
||||
message = "<B>[src]</B> seizes up and falls limp, \his eyes dead and lifeless..."
|
||||
m_type = 1
|
||||
|
||||
if ("drool")
|
||||
message = "<B>[src]</B> drools."
|
||||
m_type = 1
|
||||
|
||||
if ("faint")
|
||||
message = "<B>[src]</B> faints."
|
||||
if(src.sleeping)
|
||||
return //Can't faint while asleep
|
||||
src.sleeping += 10 //Short-short nap
|
||||
m_type = 1
|
||||
|
||||
if ("flap")
|
||||
if (!src.restrained())
|
||||
message = "<B>[src]</B> flaps \his wings."
|
||||
m_type = 2
|
||||
|
||||
if ("frown")
|
||||
message = "<B>[src]</B> frowns."
|
||||
m_type = 1
|
||||
|
||||
if ("gasp")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> gasps!"
|
||||
m_type = 2
|
||||
..(act)
|
||||
else
|
||||
message = "<B>[src]</B> makes a weak noise."
|
||||
m_type = 2
|
||||
|
||||
if ("giggle")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> giggles."
|
||||
m_type = 2
|
||||
..(act)
|
||||
else
|
||||
message = "<B>[src]</B> makes a noise."
|
||||
m_type = 2
|
||||
|
||||
if ("glare")
|
||||
var/M = null
|
||||
if (param)
|
||||
for (var/mob/A in view(1, src))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if (!M)
|
||||
param = null
|
||||
if (param)
|
||||
message = "<B>[src]</B> glares at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> glares."
|
||||
|
||||
if ("grin")
|
||||
message = "<B>[src]</B> grins."
|
||||
m_type = 1
|
||||
|
||||
if ("jump")
|
||||
message = "<B>[src]</B> jumps!"
|
||||
m_type = 1
|
||||
|
||||
if ("laugh")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> laughs."
|
||||
m_type = 2
|
||||
..(act)
|
||||
else
|
||||
message = "<B>[src]</B> makes a noise."
|
||||
|
||||
if ("look")
|
||||
var/M = null
|
||||
if (param)
|
||||
for (var/mob/A in view(1, src))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if (!M)
|
||||
param = null
|
||||
if (param)
|
||||
message = "<B>[src]</B> looks at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> looks."
|
||||
m_type = 1
|
||||
|
||||
if ("me")
|
||||
if (src.client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "You cannot send IC messages (muted)."
|
||||
return
|
||||
if (src.client.handle_spam_prevention(message,MUTE_IC))
|
||||
return
|
||||
if (stat)
|
||||
return
|
||||
if(!(message))
|
||||
return
|
||||
else
|
||||
message = "<B>[src]</B> [message]"
|
||||
|
||||
if ("nod")
|
||||
message = "<B>[src]</B> nods /his head."
|
||||
m_type = 1
|
||||
|
||||
if ("point")
|
||||
if (!src.restrained())
|
||||
var/mob/M = null
|
||||
if (param)
|
||||
for (var/atom/A as mob|obj|turf|area in view(1, src))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if (!M)
|
||||
message = "<B>[src]</B> points."
|
||||
else
|
||||
M.point()
|
||||
if (M)
|
||||
message = "<B>[src]</B> points to [M]."
|
||||
else
|
||||
message = "<B>[src]</B> nods."
|
||||
m_type = 1
|
||||
|
||||
if ("scream")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> screams!"
|
||||
m_type = 2
|
||||
..(act)
|
||||
else
|
||||
message = "<B>[src]</B> makes a very loud noise."
|
||||
m_type = 2
|
||||
@@ -232,76 +129,34 @@
|
||||
message = "<B>[src]</B> shakes \his head."
|
||||
m_type = 1
|
||||
|
||||
if ("sit")
|
||||
message = "<B>[src]</B> sits down."
|
||||
m_type = 1
|
||||
|
||||
if ("smile")
|
||||
message = "<B>[src]</B> smiles."
|
||||
m_type = 1
|
||||
|
||||
if ("sneeze")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> sneezes."
|
||||
m_type = 2
|
||||
..(act)
|
||||
else
|
||||
message = "<B>[src]</B> makes a strange noise."
|
||||
m_type = 2
|
||||
|
||||
if ("sigh")
|
||||
if (!muzzled)
|
||||
..(act)
|
||||
else
|
||||
message = "<B>[src]</B> sighs."
|
||||
m_type = 2
|
||||
|
||||
if ("sniff")
|
||||
message = "<B>[src]</B> sniffs."
|
||||
m_type = 2
|
||||
|
||||
if ("snore")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> snores."
|
||||
m_type = 2
|
||||
..(act)
|
||||
else
|
||||
message = "<B>[src]</B> makes a noise."
|
||||
m_type = 2
|
||||
|
||||
if ("stare")
|
||||
var/M = null
|
||||
if (param)
|
||||
for (var/mob/A in view(1, src))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if (!M)
|
||||
param = null
|
||||
if (param)
|
||||
message = "<B>[src]</B> stares at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> stares."
|
||||
|
||||
if ("sulk")
|
||||
message = "<B>[src]</B> sulks down sadly."
|
||||
m_type = 1
|
||||
|
||||
if ("sway")
|
||||
message = "<B>[src]</B> sways around dizzily."
|
||||
m_type = 1
|
||||
|
||||
if ("tremble")
|
||||
message = "<B>[src]</B> trembles in fear!"
|
||||
m_type = 1
|
||||
|
||||
if ("twitch")
|
||||
message = "<B>[src]</B> twitches violently."
|
||||
m_type = 1
|
||||
|
||||
if ("twitch_s")
|
||||
message = "<B>[src]</B> twitches."
|
||||
m_type = 1
|
||||
|
||||
if ("wave")
|
||||
message = "<B>[src]</B> waves."
|
||||
m_type = 1
|
||||
|
||||
if ("whimper")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> whimpers."
|
||||
m_type = 2
|
||||
..(act)
|
||||
else
|
||||
message = "<B>[src]</B> makes a weak noise."
|
||||
m_type = 2
|
||||
@@ -312,11 +167,10 @@
|
||||
|
||||
if ("yawn")
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> yawns."
|
||||
m_type = 2
|
||||
..(act)
|
||||
|
||||
if ("help")
|
||||
src << "Help for emotes. You can use these emotes with say \"*emote\":\n\naflap, airguitar, blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, dance, deathgasp, drool, flap, frown, gasp, giggle, glare-(none)/mob, grin, jump, laugh, look, me, nod, point-atom, scream, shake, sit, smile, sneeze, sniff, snore, stare-(none)/mob, sulk, sway, tremble, twitch, twitch_s, wave, whimper, wink, yawn"
|
||||
src << "Help for emotes. You can use these emotes with say \"*emote\":\n\naflap, airguitar, blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, dance, deathgasp, drool, flap, frown, gasp, giggle, glare-(none)/mob, grin, jump, laugh, look, me, nod, point-atom, scream, shake, sigh, sit, smile, sneeze, sniff, snore, stare-(none)/mob, sulk, sway, tremble, twitch, twitch_s, wave, whimper, wink, yawn"
|
||||
|
||||
else
|
||||
..(act)
|
||||
|
||||
@@ -27,28 +27,18 @@
|
||||
m_type = 1
|
||||
|
||||
if ("choke")
|
||||
if(miming)
|
||||
if (miming)
|
||||
message = "<B>[src]</B> clutches \his throat desperately!"
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> chokes!"
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a strong noise."
|
||||
m_type = 2
|
||||
..(act)
|
||||
|
||||
if ("chuckle")
|
||||
if(miming)
|
||||
message = "<B>[src]</B> appears to chuckle."
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> chuckles."
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a noise."
|
||||
m_type = 2
|
||||
..(act)
|
||||
|
||||
if ("clap")
|
||||
if (!src.restrained())
|
||||
@@ -65,7 +55,7 @@
|
||||
m_type = 1
|
||||
|
||||
if ("cough")
|
||||
if(miming)
|
||||
if (miming)
|
||||
message = "<B>[src]</B> appears to cough!"
|
||||
m_type = 1
|
||||
else
|
||||
@@ -77,7 +67,7 @@
|
||||
m_type = 2
|
||||
|
||||
if ("cry")
|
||||
if(miming)
|
||||
if (miming)
|
||||
message = "<B>[src]</B> cries."
|
||||
m_type = 1
|
||||
else
|
||||
@@ -88,30 +78,6 @@
|
||||
message = "<B>[src]</B> makes a weak noise. \He frowns."
|
||||
m_type = 2
|
||||
|
||||
if ("choke")
|
||||
if(miming)
|
||||
message = "<B>[src]</B> clutches \his throat desperately!"
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> chokes!"
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a strong noise."
|
||||
m_type = 2
|
||||
|
||||
if ("chuckle")
|
||||
if(miming)
|
||||
message = "<B>[src]</B> appears to chuckle."
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> chuckles."
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a noise."
|
||||
m_type = 2
|
||||
|
||||
if ("clap")
|
||||
if (!src.restrained())
|
||||
message = "<B>[src]</B> claps."
|
||||
@@ -131,12 +97,7 @@
|
||||
message = "<B>[src]</B> appears to cough!"
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> coughs!"
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a strong noise."
|
||||
m_type = 2
|
||||
..(act)
|
||||
|
||||
if ("cry")
|
||||
if(miming)
|
||||
@@ -202,35 +163,21 @@
|
||||
m_type = 1
|
||||
|
||||
if ("gasp")
|
||||
if(miming)
|
||||
if (miming)
|
||||
message = "<B>[src]</B> appears to be gasping!"
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> gasps!"
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a weak noise."
|
||||
m_type = 2
|
||||
..(act)
|
||||
|
||||
if ("giggle")
|
||||
if(miming)
|
||||
if (miming)
|
||||
message = "<B>[src]</B> giggles silently!"
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> giggles."
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a noise."
|
||||
m_type = 2
|
||||
|
||||
if ("grin")
|
||||
message = "<B>[src]</B> grins."
|
||||
m_type = 1
|
||||
..(act)
|
||||
|
||||
if ("groan")
|
||||
if(miming)
|
||||
if (miming)
|
||||
message = "<B>[src]</B> appears to groan!"
|
||||
m_type = 1
|
||||
else
|
||||
@@ -242,14 +189,13 @@
|
||||
m_type = 2
|
||||
|
||||
if ("grumble")
|
||||
if(miming)
|
||||
message = "<B>[src]</B> grumbles!"
|
||||
m_type = 1
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> grumbles!"
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a noise."
|
||||
if (miming)
|
||||
m_type = 1
|
||||
else
|
||||
m_type = 2
|
||||
|
||||
if ("handshake")
|
||||
@@ -316,21 +262,6 @@
|
||||
else
|
||||
message = "<B>[src]</B> holds out \his hand to [M]."
|
||||
|
||||
if ("look")
|
||||
var/M = null
|
||||
if (param)
|
||||
for (var/mob/A in view(1, src))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if (!M)
|
||||
param = null
|
||||
if (param)
|
||||
message = "<B>[src]</B> looks at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> looks."
|
||||
m_type = 1
|
||||
|
||||
if ("me")
|
||||
if(silent)
|
||||
return
|
||||
@@ -356,21 +287,6 @@
|
||||
else
|
||||
message = "<B>[src]</B> [message]"
|
||||
|
||||
if ("look")
|
||||
var/M = null
|
||||
if (param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if (!M)
|
||||
param = null
|
||||
if (param)
|
||||
message = "<B>[src]</B> looks at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> looks."
|
||||
m_type = 1
|
||||
|
||||
if ("moan")
|
||||
if(miming)
|
||||
message = "<B>[src]</B> appears to moan!"
|
||||
@@ -385,10 +301,6 @@
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if ("nod")
|
||||
message = "<B>[src]</B> nods."
|
||||
m_type = 1
|
||||
|
||||
if ("pale")
|
||||
message = "<B>[src]</B> goes pale for a second."
|
||||
m_type = 1
|
||||
@@ -419,24 +331,11 @@
|
||||
message = "<B>[src]</B> acts out a scream!"
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> screams!"
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a very loud noise."
|
||||
m_type = 2
|
||||
..(act)
|
||||
|
||||
if ("shiver")
|
||||
message = "<B>[src]</B> shivers."
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
|
||||
if ("shiver")
|
||||
message = "<B>[src]</B> shivers."
|
||||
m_type = 2
|
||||
if(miming)
|
||||
m_type = 1
|
||||
m_type = 1
|
||||
|
||||
if ("shrug")
|
||||
message = "<B>[src]</B> shrugs."
|
||||
@@ -447,12 +346,7 @@
|
||||
message = "<B>[src]</B> sighs."
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> sighs."
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a weak noise."
|
||||
m_type = 2
|
||||
..(act)
|
||||
|
||||
if ("signal")
|
||||
if (!src.restrained())
|
||||
@@ -469,12 +363,7 @@
|
||||
message = "<B>[src]</B> sneezes."
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> sneezes."
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a strange noise."
|
||||
m_type = 2
|
||||
..(act)
|
||||
|
||||
if ("sniff")
|
||||
message = "<B>[src]</B> sniffs."
|
||||
@@ -487,54 +376,14 @@
|
||||
message = "<B>[src]</B> sleeps soundly."
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> snores."
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a noise."
|
||||
m_type = 2
|
||||
|
||||
if ("stare")
|
||||
var/M = null
|
||||
if (param)
|
||||
for (var/mob/A in view(1, src))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if (!M)
|
||||
param = null
|
||||
if (param)
|
||||
message = "<B>[src]</B> stares at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> stares."
|
||||
|
||||
if ("tremble")
|
||||
message = "<B>[src]</B> trembles in fear!"
|
||||
m_type = 1
|
||||
|
||||
if ("twitch")
|
||||
message = "<B>[src]</B> twitches violently."
|
||||
m_type = 1
|
||||
|
||||
if ("twitch_s")
|
||||
message = "<B>[src]</B> twitches."
|
||||
m_type = 1
|
||||
|
||||
if ("wave")
|
||||
message = "<B>[src]</B> waves."
|
||||
m_type = 1
|
||||
..(act)
|
||||
|
||||
if ("whimper")
|
||||
if (miming)
|
||||
message = "<B>[src]</B> appears hurt."
|
||||
m_type = 1
|
||||
else
|
||||
if (!muzzled)
|
||||
message = "<B>[src]</B> whimpers."
|
||||
m_type = 2
|
||||
else
|
||||
message = "<B>[src]</B> makes a weak noise."
|
||||
m_type = 2
|
||||
..(act)
|
||||
|
||||
if ("yawn")
|
||||
if (!muzzled)
|
||||
|
||||
@@ -326,15 +326,6 @@
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/human/restrained()
|
||||
if (handcuffed)
|
||||
return 1
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/var/co2overloadtime = null
|
||||
/mob/living/carbon/human/var/temperature_resistance = T0C+75
|
||||
|
||||
@@ -394,72 +385,6 @@
|
||||
if(istype(MB))
|
||||
MB.RunOver(src)
|
||||
|
||||
//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(var/if_no_id = "No id", var/if_no_job = "No job")
|
||||
var/obj/item/weapon/card/id/id = get_idcard()
|
||||
if(id)
|
||||
. = id.assignment
|
||||
else
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
if(istype(pda))
|
||||
. = pda.ownjob
|
||||
else
|
||||
return if_no_id
|
||||
if(!.)
|
||||
return if_no_job
|
||||
|
||||
//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(var/if_no_id = "Unknown")
|
||||
var/obj/item/weapon/card/id/id = get_idcard()
|
||||
if(id)
|
||||
return id.registered_name
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
if(istype(pda))
|
||||
return pda.owner
|
||||
return if_no_id
|
||||
|
||||
//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere
|
||||
/mob/living/carbon/human/proc/get_visible_name()
|
||||
var/face_name = get_face_name("")
|
||||
var/id_name = get_id_name("")
|
||||
if(face_name)
|
||||
if(id_name && (id_name != face_name))
|
||||
return "[face_name] (as [id_name])"
|
||||
return face_name
|
||||
if(id_name)
|
||||
return id_name
|
||||
return "Unknown"
|
||||
|
||||
//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
|
||||
/mob/living/carbon/human/proc/get_face_name(if_no_face="Unknown")
|
||||
if( wear_mask && (wear_mask.flags_inv&HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible
|
||||
return if_no_face
|
||||
if( head && (head.flags_inv&HIDEFACE) )
|
||||
return if_no_face //Likewise for hats
|
||||
var/datum/limb/O = get_organ("head")
|
||||
if( (status_flags&DISFIGURED) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name ) //disfigured. use id-name if possible
|
||||
return if_no_face
|
||||
return real_name
|
||||
|
||||
//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(var/if_no_id = "Unknown")
|
||||
var/obj/item/weapon/storage/wallet/wallet = wear_id
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
var/obj/item/weapon/card/id/id = wear_id
|
||||
if(istype(wallet)) id = wallet.front_id
|
||||
if(istype(id)) . = id.registered_name
|
||||
else if(istype(pda)) . = pda.owner
|
||||
if(!.) . = if_no_id //to prevent null-names making the mob unclickable
|
||||
return
|
||||
|
||||
//gets ID card object from special clothes slot or null.
|
||||
/mob/living/carbon/human/proc/get_idcard()
|
||||
if(wear_id)
|
||||
return wear_id.GetID()
|
||||
|
||||
//Added a safety check in case you want to shock a human mob directly through electrocute_act.
|
||||
/mob/living/carbon/human/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/safety = 0)
|
||||
if(!safety)
|
||||
@@ -548,51 +473,6 @@
|
||||
if(!modified)
|
||||
usr << "\red Unable to locate a data core entry for this person."
|
||||
|
||||
|
||||
///eyecheck()
|
||||
///Returns a number between -1 to 2
|
||||
/mob/living/carbon/human/eyecheck()
|
||||
var/number = 0
|
||||
if(istype(src.head, /obj/item/clothing/head)) //are they wearing something on their head
|
||||
var/obj/item/clothing/head/HFP = src.head //if yes gets the flash protection value from that item
|
||||
number += HFP.flash_protect
|
||||
if(istype(src.glasses, /obj/item/clothing/glasses)) //glasses
|
||||
var/obj/item/clothing/glasses/GFP = src.glasses
|
||||
number += GFP.flash_protect
|
||||
if(istype(src.wear_mask, /obj/item/clothing/mask)) //mask
|
||||
var/obj/item/clothing/mask/MFP = src.wear_mask
|
||||
number += MFP.flash_protect
|
||||
return number
|
||||
|
||||
///tintcheck()
|
||||
///Checks eye covering items for visually impairing tinting, such as welding masks
|
||||
///Checked in life.dm. 0 & 1 = no impairment, 2 = welding mask overlay, 3 = You can see jack, but you can't see shit.
|
||||
/mob/living/carbon/human/tintcheck()
|
||||
var/tinted = 0
|
||||
if(istype(src.head, /obj/item/clothing/head))
|
||||
var/obj/item/clothing/head/HT = src.head
|
||||
tinted += HT.tint
|
||||
if(istype(src.glasses, /obj/item/clothing/glasses))
|
||||
var/obj/item/clothing/glasses/GT = src.glasses
|
||||
tinted += GT.tint
|
||||
if(istype(src.wear_mask, /obj/item/clothing/mask))
|
||||
var/obj/item/clothing/mask/MT = src.wear_mask
|
||||
tinted += MT.tint
|
||||
return tinted
|
||||
|
||||
/mob/living/carbon/human/IsAdvancedToolUser()
|
||||
return 1//Humans can use guns and such
|
||||
|
||||
|
||||
/mob/living/carbon/human/abiotic(var/full_body = 0)
|
||||
if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.glasses || src.ears || src.gloves)))
|
||||
return 1
|
||||
|
||||
if( (src.l_hand && !src.l_hand.abstract) || (src.r_hand && !src.r_hand.abstract) )
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/proc/play_xylophone()
|
||||
if(!src.xylophone)
|
||||
visible_message("<span class='notice'>[src] begins playing \his ribcage like a xylophone. It's quite spooky.</span>","<span class='notice'>You begin to play a spooky refrain on your ribcage.</span>","You hear a spooky xylophone melody.")
|
||||
@@ -600,4 +480,4 @@
|
||||
playsound(loc, song, 50, 1, -1)
|
||||
xylophone = 1
|
||||
spawn(1200)
|
||||
xylophone = 0
|
||||
xylophone = 0
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
|
||||
/mob/living/carbon/human/restrained()
|
||||
if (handcuffed)
|
||||
return 1
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//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(var/if_no_id = "No id", var/if_no_job = "No job")
|
||||
var/obj/item/weapon/card/id/id = get_idcard()
|
||||
if(id)
|
||||
. = id.assignment
|
||||
else
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
if(istype(pda))
|
||||
. = pda.ownjob
|
||||
else
|
||||
return if_no_id
|
||||
if(!.)
|
||||
return if_no_job
|
||||
|
||||
//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(var/if_no_id = "Unknown")
|
||||
var/obj/item/weapon/card/id/id = get_idcard()
|
||||
if(id)
|
||||
return id.registered_name
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
if(istype(pda))
|
||||
return pda.owner
|
||||
return if_no_id
|
||||
|
||||
//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere
|
||||
/mob/living/carbon/human/proc/get_visible_name()
|
||||
var/face_name = get_face_name("")
|
||||
var/id_name = get_id_name("")
|
||||
if(face_name)
|
||||
if(id_name && (id_name != face_name))
|
||||
return "[face_name] (as [id_name])"
|
||||
return face_name
|
||||
if(id_name)
|
||||
return id_name
|
||||
return "Unknown"
|
||||
|
||||
//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
|
||||
/mob/living/carbon/human/proc/get_face_name(if_no_face="Unknown")
|
||||
if( wear_mask && (wear_mask.flags_inv&HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible
|
||||
return if_no_face
|
||||
if( head && (head.flags_inv&HIDEFACE) )
|
||||
return if_no_face //Likewise for hats
|
||||
var/datum/limb/O = get_organ("head")
|
||||
if( (status_flags&DISFIGURED) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name ) //disfigured. use id-name if possible
|
||||
return if_no_face
|
||||
return real_name
|
||||
|
||||
//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(var/if_no_id = "Unknown")
|
||||
var/obj/item/weapon/storage/wallet/wallet = wear_id
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
var/obj/item/weapon/card/id/id = wear_id
|
||||
if(istype(wallet)) id = wallet.front_id
|
||||
if(istype(id)) . = id.registered_name
|
||||
else if(istype(pda)) . = pda.owner
|
||||
if(!.) . = if_no_id //to prevent null-names making the mob unclickable
|
||||
return
|
||||
|
||||
//gets ID card object from special clothes slot or null.
|
||||
/mob/living/carbon/human/proc/get_idcard()
|
||||
if(wear_id)
|
||||
return wear_id.GetID()
|
||||
|
||||
///eyecheck()
|
||||
///Returns a number between -1 to 2
|
||||
/mob/living/carbon/human/eyecheck()
|
||||
var/number = 0
|
||||
if(istype(src.head, /obj/item/clothing/head)) //are they wearing something on their head
|
||||
var/obj/item/clothing/head/HFP = src.head //if yes gets the flash protection value from that item
|
||||
number += HFP.flash_protect
|
||||
if(istype(src.glasses, /obj/item/clothing/glasses)) //glasses
|
||||
var/obj/item/clothing/glasses/GFP = src.glasses
|
||||
number += GFP.flash_protect
|
||||
if(istype(src.wear_mask, /obj/item/clothing/mask)) //mask
|
||||
var/obj/item/clothing/mask/MFP = src.wear_mask
|
||||
number += MFP.flash_protect
|
||||
return number
|
||||
|
||||
///tintcheck()
|
||||
///Checks eye covering items for visually impairing tinting, such as welding masks
|
||||
///Checked in life.dm. 0 & 1 = no impairment, 2 = welding mask overlay, 3 = You can see jack, but you can't see shit.
|
||||
/mob/living/carbon/human/tintcheck()
|
||||
var/tinted = 0
|
||||
if(istype(src.head, /obj/item/clothing/head))
|
||||
var/obj/item/clothing/head/HT = src.head
|
||||
tinted += HT.tint
|
||||
if(istype(src.glasses, /obj/item/clothing/glasses))
|
||||
var/obj/item/clothing/glasses/GT = src.glasses
|
||||
tinted += GT.tint
|
||||
if(istype(src.wear_mask, /obj/item/clothing/mask))
|
||||
var/obj/item/clothing/mask/MT = src.wear_mask
|
||||
tinted += MT.tint
|
||||
return tinted
|
||||
|
||||
/mob/living/carbon/human/abiotic(var/full_body = 0)
|
||||
if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.glasses || src.ears || src.gloves)))
|
||||
return 1
|
||||
|
||||
if( (src.l_hand && !src.l_hand.abstract) || (src.r_hand && !src.r_hand.abstract) )
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/IsAdvancedToolUser()
|
||||
return 1//Humans can use guns and such
|
||||
@@ -65,7 +65,6 @@
|
||||
message = "<B>[src]</B> dances around happily."
|
||||
m_type = 1
|
||||
|
||||
|
||||
if ("deathgasp")
|
||||
message = "<B>[src]</B> seizes up and falls limp, its eyes dead and lifeless..."
|
||||
m_type = 1
|
||||
@@ -154,7 +153,7 @@
|
||||
message = "<B>[src]</B> [message]"
|
||||
|
||||
if ("nod")
|
||||
message = "<B>[src]</B> nods its head."
|
||||
message = "<B>[src]</B> nods."
|
||||
m_type = 1
|
||||
|
||||
if ("point")
|
||||
@@ -182,6 +181,10 @@
|
||||
message = "<B>[src]</B> shakes its head."
|
||||
m_type = 1
|
||||
|
||||
if ("sigh")
|
||||
message = "<B>[src]</B> sighs."
|
||||
m_type = 2
|
||||
|
||||
if ("sit")
|
||||
message = "<B>[src]</B> sits down."
|
||||
m_type = 1
|
||||
@@ -244,16 +247,12 @@
|
||||
message = "<B>[src]</B> whimpers."
|
||||
m_type = 2
|
||||
|
||||
if ("wink")
|
||||
message = "<B>[src]</B> winks."
|
||||
m_type = 1
|
||||
|
||||
if ("yawn")
|
||||
message = "<B>[src]</B> yawns."
|
||||
m_type = 2
|
||||
|
||||
if ("help")
|
||||
src << "Help for emotes. You can use these emotes with say \"*emote\":\n\naflap, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, dance, deathgasp, drool, flap, frown, gasp, giggle, glare-(none)/mob, grin, jump, laugh, look, me, nod, point-atom, scream, shake, sit, smile, sneeze, sniff, snore, stare-(none)/mob, sulk, sway, tremble, twitch, twitch_s, wave, whimper, wink, yawn"
|
||||
src << "Help for emotes. You can use these emotes with say \"*emote\":\n\naflap, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, dance, deathgasp, drool, flap, frown, gasp, giggle, glare-(none)/mob, grin, jump, laugh, look, me, nod, point-atom, scream, shake, sit, sigh, smile, sneeze, sniff, snore, stare-(none)/mob, sulk, sway, tremble, twitch, twitch_s, wave, whimper, yawn"
|
||||
|
||||
else
|
||||
src << "\blue Unusable emote '[act]'. Say *help for a list."
|
||||
|
||||
@@ -78,7 +78,7 @@ var/list/department_radio_keys = list(
|
||||
if(!istype(dongle)) return
|
||||
if(dongle.translate_hive) return 1
|
||||
|
||||
/mob/living/say(var/message)
|
||||
/mob/living/say(var/message, var/bubble_type)
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
|
||||
if (!message)
|
||||
@@ -371,31 +371,22 @@ var/list/department_radio_keys = list(
|
||||
if(hascall(M,"show_message"))
|
||||
M:show_message(rendered, 2)
|
||||
|
||||
/*
|
||||
if(M.client)
|
||||
|
||||
if(!M.client.bubbles || M == src)
|
||||
var/image/I = image('icons/effects/speechbubble.dmi', B, "override")
|
||||
I.override = 1
|
||||
M << I
|
||||
*/ /*
|
||||
|
||||
flick("[presay]say", B)
|
||||
|
||||
if(istype(loc, /turf))
|
||||
B.loc = loc
|
||||
else
|
||||
B.loc = loc.loc
|
||||
|
||||
spawn()
|
||||
sleep(11)
|
||||
del(B)
|
||||
*/
|
||||
|
||||
//speech bubble
|
||||
var/list/speech_bubble_recipients = list()
|
||||
for(var/mob/M in heard_a + heard_b)
|
||||
if(M.client)
|
||||
speech_bubble_recipients.Add(M.client)
|
||||
flick_overlay(image('icons/mob/talk.dmi', src, "h[bubble_type][say_test(message)]",MOB_LAYER+1), speech_bubble_recipients, 30)
|
||||
|
||||
log_say("[name]/[key] : [message]")
|
||||
|
||||
/mob/living/proc/GetVoice()
|
||||
return name
|
||||
|
||||
|
||||
/mob/living/proc/say_test(var/text)
|
||||
var/ending = copytext(text, length(text))
|
||||
if (ending == "?")
|
||||
return "1"
|
||||
else if (ending == "!")
|
||||
return "2"
|
||||
return "0"
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
(copytext(message, 1, 3) == "#b") || (copytext(message, 1, 3) == "#B") || \
|
||||
(copytext(message, 1, 3) == ".b") || (copytext(message, 1, 3) == ".B"))
|
||||
if(istype(src, /mob/living/silicon/pai))
|
||||
return ..(message)
|
||||
return ..(message, "R")
|
||||
message = copytext(message, 3)
|
||||
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
|
||||
robot_talk(message)
|
||||
@@ -38,9 +38,9 @@
|
||||
src << "This function is not available to you."
|
||||
return
|
||||
else
|
||||
return ..(message)
|
||||
return ..(message, "R")
|
||||
else
|
||||
return ..(message)
|
||||
return ..(message, "R")
|
||||
|
||||
//For holopads only. Usable by AI.
|
||||
/mob/living/silicon/ai/proc/holopad_talk(var/message)
|
||||
@@ -65,11 +65,18 @@
|
||||
var/rendered_b = "<span class='game say'><span class='name'>[voice_name]</span> <span class='message'>[message_b]</span></span>"
|
||||
|
||||
src << "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> <span class='message'>[message_a]</span></span></i>"//The AI can "hear" its own message.
|
||||
var/list/speech_bubble_recipients = list()
|
||||
for(var/mob/M in hearers(T.loc))//The location is the object, default distance.
|
||||
if(M.say_understands(src))//If they understand AI speak. Humans and the like will be able to.
|
||||
M.show_message(rendered_a, 2)
|
||||
else//If they do not.
|
||||
M.show_message(rendered_b, 2)
|
||||
if(M.client)
|
||||
speech_bubble_recipients.Add(M.client)
|
||||
|
||||
//speech bubble
|
||||
flick_overlay(image('icons/mob/talk.dmi', src, "hR[say_test(message)]",MOB_LAYER+1), speech_bubble_recipients, 30)
|
||||
|
||||
/*Radios "filter out" this conversation channel so we don't need to account for them.
|
||||
This is another way of saying that we won't bother dealing with them.*/
|
||||
else
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "A cute tiny lizard."
|
||||
icon_state = "lizard"
|
||||
icon_living = "lizard"
|
||||
icon_dead = "lizard-dead"
|
||||
icon_dead = "lizard_dead"
|
||||
speak_emote = list("hisses")
|
||||
health = 5
|
||||
maxHealth = 5
|
||||
|
||||
@@ -441,4 +441,7 @@ proc/is_special_character(mob/M) // returns 1 for special characters and 2 for h
|
||||
if(M.viruses && (locate(/datum/disease/jungle_fever) in M.viruses))
|
||||
return 2
|
||||
return 1
|
||||
return 0
|
||||
return 0
|
||||
|
||||
/mob/proc/has_mutation(var/mutation)
|
||||
return mutation in src.mutations ? 1 : 0
|
||||
|
||||
@@ -402,18 +402,13 @@
|
||||
|
||||
//Breaking out of a locker?
|
||||
else if(loc && istype(loc, /obj/structure/closet))
|
||||
var/breakout_time = 2 //2 minutes by default
|
||||
|
||||
var/obj/structure/closet/C = L.loc
|
||||
if(C.opened)
|
||||
return //Door's open... wait, why are you in it's contents then?
|
||||
if(istype(L.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
if(!SC.locked && !SC.welded)
|
||||
return //It's a secure closet, but isn't locked. Easily escapable from, no need to 'resist'
|
||||
else
|
||||
if(!C.welded)
|
||||
return //closed but not welded...</span>
|
||||
var/breakout_time = 2 //2 minutes by default
|
||||
if(istype(L.loc, /obj/structure/closet/critter) && !C.welded)
|
||||
breakout_time = 0.75 //45 seconds if it's an unwelded critter crate
|
||||
|
||||
if(C.opened || (!C.welded && !C.locked))
|
||||
return //Door's open, not locked or welded, no point in resisting.
|
||||
|
||||
//okay, so the closet is either welded or locked... resist!!!
|
||||
usr.next_move = world.time + 100
|
||||
@@ -423,43 +418,19 @@
|
||||
O << "<span class='warning'>[C] begins to shake violently!</span>"
|
||||
|
||||
if(do_after(usr,(breakout_time*60*10))) //minutes * 60seconds * 10deciseconds
|
||||
if(!C || !L || L.stat != CONSCIOUS || L.loc != C || C.opened) //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened
|
||||
if(!C || !L || L.stat != CONSCIOUS || L.loc != C || C.opened || (!C.locked && !C.welded))
|
||||
return
|
||||
//we check after a while whether there is a point of resisting anymore and whether the user is capable of resisting
|
||||
|
||||
//Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'...
|
||||
if(istype(L.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
if(!SC.locked && !SC.welded)
|
||||
return
|
||||
else
|
||||
if(!C.welded)
|
||||
return
|
||||
|
||||
//Well then break it!
|
||||
if(istype(usr.loc, /obj/structure/closet/secure_closet))
|
||||
var/obj/structure/closet/secure_closet/SC = L.loc
|
||||
SC.desc = "It appears to be broken."
|
||||
SC.icon_state = SC.icon_off
|
||||
flick(SC.icon_broken, SC)
|
||||
sleep(10)
|
||||
flick(SC.icon_broken, SC)
|
||||
sleep(10)
|
||||
SC.broken = 1
|
||||
SC.locked = 0
|
||||
L.visible_message("<span class='danger'>[L] successfully broke out of [SC]!</span>", \
|
||||
"<span class='notice'>You successfully break out of [SC]!</span>")
|
||||
if(istype(SC.loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace)
|
||||
var/obj/structure/bigDelivery/BD = SC.loc
|
||||
BD.attack_hand(usr)
|
||||
SC.open()
|
||||
else
|
||||
C.welded = 0
|
||||
L.visible_message("<span class='danger'>[L] successfully broke out of [C]!</span>", \
|
||||
"<span class='notice'>You successfully break out of [C]!</span>")
|
||||
if(istype(C.loc, /obj/structure/bigDelivery)) //nullspace ect.. read the comment above
|
||||
var/obj/structure/bigDelivery/BD = C.loc
|
||||
BD.attack_hand(usr)
|
||||
C.open()
|
||||
C.welded = 0 //applies to all lockers lockers
|
||||
C.locked = 0 //applies to critter crates and secure lockers only
|
||||
C.broken = 1 //applies to secure lockers only
|
||||
L.visible_message("<span class='danger'>[L] successfully broke out of [C]!</span>", \
|
||||
"<span class='notice'>You successfully break out of [C]!</span>")
|
||||
if(istype(C.loc, /obj/structure/bigDelivery)) //Do this to prevent contents from being opened into nullspace (read: bluespace)
|
||||
var/obj/structure/bigDelivery/BD = C.loc
|
||||
BD.attack_hand(usr)
|
||||
C.open()
|
||||
|
||||
//breaking out of handcuffs
|
||||
else if(iscarbon(L))
|
||||
|
||||
@@ -211,7 +211,6 @@ proc/cardinalrange(var/center)
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
m_amt = 100
|
||||
w_amt = 2000
|
||||
|
||||
/obj/item/device/am_shielding_container/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/device/multitool) && istype(src.loc,/turf))
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
origin_tech = "combat=1"
|
||||
attack_verb = list("struck", "hit", "bashed")
|
||||
|
||||
var/fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||
var/fire_sound = "gunshot"
|
||||
var/obj/item/projectile/in_chamber = null
|
||||
var/caliber = ""
|
||||
var/silenced = 0
|
||||
@@ -23,7 +23,6 @@
|
||||
var/ejectshell = 1
|
||||
var/clumsy_check = 1
|
||||
|
||||
|
||||
proc/load_into_chamber()
|
||||
return 0
|
||||
|
||||
@@ -100,7 +99,7 @@
|
||||
user.visible_message("<span class='danger'>[user] fires [src]!</span>", "<span class='danger'>You fire [src]!</span>", "You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!")
|
||||
|
||||
prepare_shot(in_chamber) //Set the projectile's properties
|
||||
|
||||
|
||||
|
||||
|
||||
if(targloc == curloc) //Fire the projectile
|
||||
@@ -108,7 +107,7 @@
|
||||
del(in_chamber)
|
||||
update_icon()
|
||||
return
|
||||
in_chamber.original = target
|
||||
in_chamber.original = target
|
||||
in_chamber.loc = get_turf(user)
|
||||
in_chamber.starting = get_turf(user)
|
||||
in_chamber.current = curloc
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
silenced = 1
|
||||
origin_tech = "combat=2;materials=2;syndicate=8"
|
||||
ammo_type = "/obj/item/ammo_casing/c45"
|
||||
|
||||
fire_sound = 'sound/weapons/Gunshot_silenced.ogg'
|
||||
|
||||
|
||||
/obj/item/weapon/gun/projectile/deagle
|
||||
@@ -116,6 +116,8 @@
|
||||
return
|
||||
user << "<span class='notice'>You unscrew [silenced] from [src].</span>"
|
||||
user.put_in_hands(silenced)
|
||||
var/obj/item/weapon/silencer/S = silenced
|
||||
fire_sound = S.oldsound
|
||||
silenced = 0
|
||||
w_class = 2
|
||||
update_icon()
|
||||
@@ -131,6 +133,9 @@
|
||||
user.drop_item()
|
||||
user << "<span class='notice'>You screw [I] onto [src].</span>"
|
||||
silenced = I //dodgy?
|
||||
var/obj/item/weapon/silencer/S = I
|
||||
S.oldsound = fire_sound
|
||||
fire_sound = 'sound/weapons/Gunshot_silenced.ogg'
|
||||
w_class = 3
|
||||
I.loc = src //put the silencer into the gun
|
||||
update_icon()
|
||||
@@ -149,4 +154,5 @@
|
||||
desc = "a silencer"
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "silencer"
|
||||
w_class = 2
|
||||
w_class = 2
|
||||
var/oldsound = 0 //Stores the true sound the gun made before it was silenced
|
||||
@@ -25,18 +25,32 @@
|
||||
set desc = "Click to rename your gun. If you're the detective."
|
||||
|
||||
var/mob/M = usr
|
||||
if(!M.mind) return 0
|
||||
if(!M.mind.assigned_role == "Detective")
|
||||
M << "<span class='notice'>You don't feel cool enough to name this gun, chump.</span>"
|
||||
return 0
|
||||
|
||||
var/input = stripped_input(usr,"What do you want to name the gun?", ,"", MAX_NAME_LEN)
|
||||
var/input = stripped_input(M,"What do you want to name the gun?", ,"", MAX_NAME_LEN)
|
||||
|
||||
if(src && input && !M.stat && in_range(M,src))
|
||||
name = input
|
||||
M << "You name the gun [input]. Say hello to your new friend."
|
||||
return 1
|
||||
|
||||
verb/reskin_gun()
|
||||
set name = "Reskin gun"
|
||||
set category = "Object"
|
||||
set desc = "Click to reskin your gun. If you're the detective."
|
||||
|
||||
var/mob/M = usr
|
||||
var/list/options = list()
|
||||
options["The Original"] = "detective"
|
||||
options["Leopard Spots"] = "detective_leopard"
|
||||
options["Black Panther"] = "detective_panther"
|
||||
options["Gold Trim"] = "detective_gold"
|
||||
options["The Peacemaker"] = "detective_peacemaker"
|
||||
var/choice = input(M,"What do you want to skin the gun to?","Reskin Gun") in options
|
||||
|
||||
if(src && choice && !M.stat && in_range(M,src))
|
||||
icon_state = options[choice]
|
||||
M << "Your gun is now skinned as [choice]. Say hello to your new friend."
|
||||
return 1
|
||||
|
||||
attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(A, /obj/item/weapon/screwdriver))
|
||||
|
||||
@@ -444,9 +444,13 @@
|
||||
var/wait = null
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker = null
|
||||
|
||||
obj/machinery/computer/pandemic/New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/computer/pandemic/set_broken()
|
||||
icon_state = (src.beaker?"mixer1_b":"mixer0_b")
|
||||
overlays.Cut()
|
||||
stat |= BROKEN
|
||||
|
||||
/obj/machinery/computer/pandemic/proc/GetVirusByIndex(var/index)
|
||||
@@ -475,22 +479,25 @@
|
||||
return D.GetDiseaseID()
|
||||
return null
|
||||
|
||||
obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime)
|
||||
wait = 1
|
||||
update_icon()
|
||||
spawn(waittime)
|
||||
src.wait = null
|
||||
update_icon()
|
||||
playsound(src.loc, 'sound/items/timer.ogg', 30, 1)
|
||||
|
||||
|
||||
/obj/machinery/computer/pandemic/power_change()
|
||||
|
||||
/obj/machinery/computer/pandemic/update_icon()
|
||||
if(stat & BROKEN)
|
||||
icon_state = (src.beaker?"mixer1_b":"mixer0_b")
|
||||
return
|
||||
|
||||
else if(powered())
|
||||
icon_state = (src.beaker?"mixer1":"mixer0")
|
||||
stat &= ~NOPOWER
|
||||
icon_state = "mixer[(beaker)?"1":"0"][(powered()) ? "" : "_nopower"]"
|
||||
|
||||
if(wait)
|
||||
overlays.Cut()
|
||||
else
|
||||
spawn(rand(0, 15))
|
||||
src.icon_state = (src.beaker?"mixer1_nopower":"mixer0_nopower")
|
||||
stat |= NOPOWER
|
||||
|
||||
overlays += "waitlight"
|
||||
|
||||
/obj/machinery/computer/pandemic/Topic(href, href_list)
|
||||
if(..())
|
||||
@@ -523,9 +530,7 @@
|
||||
|
||||
B.name = "[vaccine_name] vaccine bottle"
|
||||
B.reagents.add_reagent("vaccine", 15, list(vaccine_type))
|
||||
wait = 1
|
||||
spawn(200)
|
||||
src.wait = null
|
||||
replicator_cooldown(200)
|
||||
else
|
||||
src.temp_html = "The replicator is not ready yet."
|
||||
src.updateUsrDialog()
|
||||
@@ -553,9 +558,7 @@
|
||||
B.desc = "A small bottle. Contains [D.agent] culture in synthblood medium."
|
||||
B.reagents.add_reagent("blood",20,data)
|
||||
src.updateUsrDialog()
|
||||
wait = 1
|
||||
spawn(1000)
|
||||
src.wait = null
|
||||
replicator_cooldown(1000)
|
||||
else
|
||||
src.temp_html = "The replicator is not ready yet."
|
||||
src.updateUsrDialog()
|
||||
|
||||
@@ -52,6 +52,32 @@ should be listed in the changelog upon commit tho. Thanks. -->
|
||||
<!-- You can simply add changelogs using AddToChangelog.exe -->
|
||||
|
||||
<!-- DO NOT REMOVE OR MOVE THIS COMMENT! THIS MUST BE THE LAST NON-EMPTY LINE BEFORE THE LOGS #ADDTOCHANGELOGMARKER# -->
|
||||
<div class='commit sansserif'>
|
||||
<h2 class='date'>2 September 2013</h2>
|
||||
<h3 class='author'>Cael_Aislinn updated:</h3>
|
||||
<ul class='changes bgimages16'>
|
||||
<li class='rscadd'>Terbs Fun Week Day 4: Humans, aliens and cyborgs now show speech bubbles when they talk.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='commit sansserif'>
|
||||
<h2 class='date'>1 September 2013</h2>
|
||||
<h3 class='author'>Cael_Aislinn updated:</h3>
|
||||
<ul class='changes bgimages16'>
|
||||
<li class='rscadd'>Terbs Fun Week Day 3: Detective can reskin his gun to one of five variants: Leopard Spots, Gold Trim, Black Panther, Peacemaker and the Original.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='commit sansserif'>
|
||||
<h2 class='date'>31 August 2013</h2>
|
||||
<h3 class='author'>Cael_Aislinn updated:</h3>
|
||||
<ul class='changes bgimages16'>
|
||||
<li class='rscadd'>Terbs Fun Week Day 2: RD, lawyers and librarians now spawn with a laser pointer. Don't point them in anyone's eyes!</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<div class='commit sansserif'>
|
||||
<h2 class='date'>30 August 2013</h2>
|
||||
|
||||
|
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 162 KiB |
|
After Width: | Height: | Size: 964 B |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
@@ -475,6 +475,7 @@
|
||||
#include "code\game\objects\items\devices\chameleonproj.dm"
|
||||
#include "code\game\objects\items\devices\flash.dm"
|
||||
#include "code\game\objects\items\devices\flashlight.dm"
|
||||
#include "code\game\objects\items\devices\laserpointer.dm"
|
||||
#include "code\game\objects\items\devices\lightreplacer.dm"
|
||||
#include "code\game\objects\items\devices\multitool.dm"
|
||||
#include "code\game\objects\items\devices\paicard.dm"
|
||||
@@ -911,6 +912,7 @@
|
||||
#include "code\modules\mob\living\carbon\human\human_damage.dm"
|
||||
#include "code\modules\mob\living\carbon\human\human_defense.dm"
|
||||
#include "code\modules\mob\living\carbon\human\human_defines.dm"
|
||||
#include "code\modules\mob\living\carbon\human\human_helpers.dm"
|
||||
#include "code\modules\mob\living\carbon\human\human_movement.dm"
|
||||
#include "code\modules\mob\living\carbon\human\inventory.dm"
|
||||
#include "code\modules\mob\living\carbon\human\life.dm"
|
||||
|
||||