This commit is contained in:
Mark Aherne (Faerdan)
2013-09-10 20:39:00 +01:00
77 changed files with 1649 additions and 1675 deletions
@@ -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()
+15 -13
View File
@@ -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"
+1
View File
@@ -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,
+2
View File
@@ -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
+1
View File
@@ -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
+2 -2
View File
@@ -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)
+1 -1
View File
@@ -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
+3
View File
@@ -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
+1 -1
View File
@@ -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,
+2 -2
View File
@@ -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))
+29 -23
View File
@@ -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
+1
View File
@@ -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())
+5 -7
View File
@@ -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
+21 -1
View File
@@ -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()
+4 -4
View File
@@ -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...
+15 -3
View File
@@ -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'
-1
View File
@@ -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)
+1
View File
@@ -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
+2 -2
View File
@@ -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
+12 -6
View File
@@ -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)
+3 -2
View File
@@ -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)
+13
View File
@@ -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"
-1
View File
@@ -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
-1
View File
@@ -4,7 +4,6 @@
icon_state = "igniter"
m_amt = 500
g_amt = 50
w_amt = 10
origin_tech = "magnets=1"
activate()
-1
View File
@@ -6,7 +6,6 @@
icon_state = "infrared"
m_amt = 1000
g_amt = 500
w_amt = 100
origin_tech = "magnets=2"
secured = 0
-1
View File
@@ -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
-1
View File
@@ -4,7 +4,6 @@
icon_state = "prox"
m_amt = 800
g_amt = 200
w_amt = 50
origin_tech = "magnets=1"
secured = 0
-1
View File
@@ -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
-1
View File
@@ -4,7 +4,6 @@
icon_state = "timer"
m_amt = 500
g_amt = 50
w_amt = 10
origin_tech = "magnets=1"
secured = 0
-1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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~
+8 -1
View File
@@ -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
+21 -167
View File
@@ -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)
+20 -171
View File
@@ -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)
+1 -121
View File
@@ -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
+6 -7
View File
@@ -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."
+14 -23
View File
@@ -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"
+10 -3
View File
@@ -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
+4 -1
View File
@@ -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
+17 -46
View File
@@ -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))
+3 -4
View File
@@ -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))
+19 -16
View File
@@ -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()
+26
View File
@@ -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>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2
View File
@@ -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"