Merge branch 'master' of https://github.com/tgstation/-tg-station into prisonjumpsuit

Conflicts:
	icons/mob/uniform.dmi
This commit is contained in:
paprka
2014-10-20 19:48:27 -07:00
32 changed files with 917 additions and 640 deletions
+18 -5
View File
@@ -794,26 +794,39 @@ var/global/floorIsLava = 0
if(!ai_number)
usr << "<b>No AIs located</b>" //Just so you know the thing is actually working and not just ignoring you.
/datum/admins/proc/list_free_slots()
/datum/admins/proc/manage_free_slots()
if(!check_rights())
return
var/dat = "<html><head><title>List Free Slots</title></head><body>"
var/dat = "<html><head><title>Manage Free Slots</title></head><body>"
var/count = 0
if(ticker && !ticker.mode)
alert(usr, "You cannot manage jobs before the round starts!")
return
if(job_master)
for(var/datum/job/job in job_master.occupations)
count++
var/J_title = html_encode(job.title)
var/J_opPos = html_encode(job.total_positions - (job.total_positions - job.current_positions))
var/J_totPos = html_encode(job.total_positions)
dat += "[J_title]: [J_totPos]<br>"
if(job.total_positions <= 0)
dat += "[J_title]: [J_opPos]"
else
dat += "[J_title]: [J_opPos]/[J_totPos]"
if(initial(job.total_positions) > 0)
dat += " <A href='?src=\ref[src];addjobslot=[job.title]'>Add</A> | "
if(job.total_positions > job.current_positions)
dat += "<A href='?src=\ref[src];removejobslot=[job.title]'>Remove</A>"
else
dat += "Remove"
dat += "<br>"
dat += "</body>"
var/winheight = 100 + (count * 20)
winheight = min(winheight, 690)
usr << browse(dat, "window=players;size=316x[winheight]")
//
//
//ALL DONE
+24
View File
@@ -1324,6 +1324,30 @@
src.owner << "[special_role_description]"
src.owner << "(<a href='?priv_msg=[M.ckey]'>PM</a>) (<A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A>) (<A HREF='?_src_=vars;Vars=\ref[M]'>VV</A>) (<A HREF='?src=\ref[src];subtlemessage=\ref[M]'>SM</A>) (<A HREF='?src=\ref[src];adminplayerobservejump=\ref[M]'>JMP</A>) (<A HREF='?src=\ref[src];secretsadmin=check_antagonist'>CA</A>)"
else if(href_list["addjobslot"])
if(!check_rights(R_ADMIN)) return
var/Add = href_list["addjobslot"]
for(var/datum/job/job in job_master.occupations)
if(job.title == Add)
job.total_positions += 1
break
src.manage_free_slots()
else if(href_list["removejobslot"])
if(!check_rights(R_ADMIN)) return
var/Remove = href_list["removejobslot"]
for(var/datum/job/job in job_master.occupations)
if(job.title == Remove && job.total_positions - job.current_positions > 0)
job.total_positions -= 1
break
src.manage_free_slots()
else if(href_list["adminspawncookie"])
if(!check_rights(R_ADMIN|R_FUN)) return
+3 -3
View File
@@ -449,13 +449,13 @@ Traitors and the like can also be revived with the previous role mostly intact.
/client/proc/cmd_admin_list_open_jobs()
set category = "Admin"
set name = "List free slots"
set name = "Manage Job Slots"
if (!holder)
src << "Only administrators may use this command."
return
holder.list_free_slots()
feedback_add_details("admin_verb","LFS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
holder.manage_free_slots()
feedback_add_details("admin_verb","MFS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_explosion(atom/O as obj|mob|turf in world)
set category = "Special Verbs"
+18 -60
View File
@@ -1,97 +1,55 @@
/obj/item/clothing/suit/labcoat
name = "labcoat"
desc = "A suit that protects against minor chemical spills."
icon_state = "labcoat_open"
icon_state = "labcoat"
item_state = "labcoat"
blood_overlay_type = "coat"
body_parts_covered = CHEST|ARMS
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/telebaton)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
var/open = 0
verb/toggle()
set name = "Toggle Labcoat Buttons"
set category = "Object"
set src in usr
/obj/item/clothing/suit/labcoat/verb/toggle()
set name = "Toggle Labcoat Buttons"
set category = "Object"
set src in usr
if(!usr.canmove || usr.stat || usr.restrained())
return 0
if(!usr.canmove || usr.stat || usr.restrained())
return 0
switch(icon_state) //n-nooooo
if("labcoat_open")
src.icon_state = "labcoat"
usr << "You button up the labcoat."
if("labcoat")
src.icon_state = "labcoat_open"
usr << "You unbutton the labcoat."
if("labcoat_cmo_open")
src.icon_state = "labcoat_cmo"
usr << "You button up the labcoat."
if("labcoat_cmo")
src.icon_state = "labcoat_cmo_open"
usr << "You unbutton the labcoat."
if("labcoat_gen_open")
src.icon_state = "labcoat_gen"
usr << "You button up the labcoat."
if("labcoat_gen")
src.icon_state = "labcoat_gen_open"
usr << "You unbutton the labcoat."
if("labcoat_chem_open")
src.icon_state = "labcoat_chem"
usr << "You button up the labcoat."
if("labcoat_chem")
src.icon_state = "labcoat_chem_open"
usr << "You unbutton the labcoat."
if("labcoat_vir_open")
src.icon_state = "labcoat_vir"
usr << "You button up the labcoat."
if("labcoat_vir")
src.icon_state = "labcoat_vir_open"
usr << "You unbutton the labcoat."
if("labcoat_tox_open")
src.icon_state = "labcoat_tox"
usr << "You button up the labcoat."
if("labcoat_tox")
src.icon_state = "labcoat_tox_open"
usr << "You unbutton the labcoat."
if("labgreen_open")
src.icon_state = "labgreen"
usr << "You button up the labcoat."
if("labgreen")
src.icon_state = "labgreen_open"
usr << "You unbutton the labcoat."
else
usr << "You attempt to button-up the velcro on your [src], before promptly realising how retarded you are."
return
usr.update_inv_wear_suit() //so our overlays update
open = !open
icon_state = "[initial(icon_state)][open ? "_open":""]"
usr << "You [open ? "unbutton":"button up"] the labcoat"
usr.update_inv_wear_suit()
/obj/item/clothing/suit/labcoat/cmo
name = "chief medical officer's labcoat"
desc = "Bluer than the standard model."
icon_state = "labcoat_cmo_open"
icon_state = "labcoat_cmo"
item_state = "labcoat_cmo"
/obj/item/clothing/suit/labcoat/mad
name = "\improper The Mad's labcoat"
desc = "It makes you look capable of konking someone on the noggin and shooting them into space."
icon_state = "labgreen_open"
icon_state = "labgreen"
item_state = "labgreen"
/obj/item/clothing/suit/labcoat/genetics
name = "geneticist labcoat"
desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder."
icon_state = "labcoat_gen_open"
icon_state = "labcoat_gen"
/obj/item/clothing/suit/labcoat/chemist
name = "chemist labcoat"
desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder."
icon_state = "labcoat_chem_open"
icon_state = "labcoat_chem"
/obj/item/clothing/suit/labcoat/virologist
name = "virologist labcoat"
desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder."
icon_state = "labcoat_vir_open"
icon_state = "labcoat_vir"
/obj/item/clothing/suit/labcoat/science
name = "scientist labcoat"
desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder."
icon_state = "labcoat_tox_open"
icon_state = "labcoat_tox"
+2 -1
View File
@@ -2,13 +2,14 @@
desc = "A standard issue colored jumpsuit. Variety is the spice of life!"
/obj/item/clothing/under/color/random/New()
..()
var/list/excluded = list(/obj/item/clothing/under/color/random, /obj/item/clothing/under/color)
var/obj/item/clothing/under/color/C = pick(typesof(/obj/item/clothing/under/color) - excluded)
name = initial(C.name)
icon_state = initial(C.icon_state)
item_state = initial(C.item_state)
item_color = initial(C.item_color)
suit_color = initial(C.item_color)
/obj/item/clothing/under/color/black
name = "black jumpsuit"
+2 -2
View File
@@ -1,5 +1,5 @@
/datum/round_event_control/anomaly
name = "Energetic Flux"
name = "Anomaly: Energetic Flux"
typepath = /datum/round_event/anomaly
max_occurrences = 0 //This one probably shouldn't occur! It'd work, but it wouldn't be very fun.
weight = 15
@@ -23,7 +23,7 @@
setup(safety_loop)
/datum/round_event/anomaly/announce()
priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/start()
var/turf/T = pick(get_area_turfs(impact_area))
+3 -5
View File
@@ -1,5 +1,5 @@
/datum/round_event_control/anomaly/anomaly_bluespace
name = "Bluespace Anomaly"
name = "Anomaly: Bluespace"
typepath = /datum/round_event/anomaly/anomaly_bluespace
max_occurrences = 1
weight = 5
@@ -7,7 +7,7 @@
/datum/round_event/anomaly/anomaly_bluespace
startWhen = 3
announceWhen = 10
endWhen = 55
endWhen = 95
/datum/round_event/anomaly/anomaly_bluespace/announce()
@@ -52,9 +52,7 @@
var/x_distance = TO.x - FROM.x
for (var/atom/movable/A in range(12, FROM )) // iterate thru list of mobs in the area
if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid
if(A.anchored && istype(A, /obj/machinery)) continue
if(istype(A, /obj/structure/disposalpipe )) continue
if(istype(A, /obj/structure/cable )) continue
if(A.anchored) continue
var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place
if(!A.Move(newloc)) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving
+4 -4
View File
@@ -1,13 +1,13 @@
/datum/round_event_control/anomaly/anomaly_flux
name = "Energetic Flux"
name = "Anomaly: Hyper-Energetic Flux"
typepath = /datum/round_event/anomaly/anomaly_flux
max_occurrences = 2
weight = 15
max_occurrences = 5
weight = 20
/datum/round_event/anomaly/anomaly_flux
startWhen = 3
announceWhen = 20
endWhen = 60
endWhen = 80
/datum/round_event/anomaly/anomaly_flux/announce()
+4 -4
View File
@@ -1,13 +1,13 @@
/datum/round_event_control/anomaly/anomaly_grav
name = "Gravitational Anomaly"
name = "Anomaly: Gravitational"
typepath = /datum/round_event/anomaly/anomaly_grav
max_occurrences = 2
weight = 15
max_occurrences = 5
weight = 20
/datum/round_event/anomaly/anomaly_grav
startWhen = 3
announceWhen = 20
endWhen = 50
endWhen = 120
/datum/round_event/anomaly/anomaly_grav/announce()
+16 -6
View File
@@ -1,17 +1,17 @@
/datum/round_event_control/anomaly/anomaly_pyro
name = "Pyroclastic Anomaly"
name = "Anomaly: Pyroclastic"
typepath = /datum/round_event/anomaly/anomaly_pyro
max_occurrences = 2
weight = 15
max_occurrences = 5
weight = 20
/datum/round_event/anomaly/anomaly_pyro
startWhen = 10
announceWhen = 3
endWhen = 70
endWhen = 85
/datum/round_event/anomaly/anomaly_pyro/announce()
priority_announce("Atmospheric anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
priority_announce("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
/datum/round_event/anomaly/anomaly_pyro/start()
var/turf/T = pick(get_area_turfs(impact_area))
@@ -23,4 +23,14 @@
kill()
return
if(IsMultiple(activeFor, 5))
newAnomaly.anomalyEffect()
newAnomaly.anomalyEffect()
/datum/round_event/anomaly/anomaly_pyro/end()
if(newAnomaly)
explosion(get_turf(newAnomaly), -1,0,3, flame_range = 4)
var/mob/living/carbon/slime/S = new/mob/living/carbon/slime(get_turf(newAnomaly))
S.colour = pick("red", "orange")
qdel(newAnomaly)
+4 -4
View File
@@ -1,13 +1,13 @@
/datum/round_event_control/anomaly/anomaly_vortex
name = "Vortex Anomaly"
name = "Anomaly: Vortex"
typepath = /datum/round_event/anomaly/anomaly_vortex
max_occurrences = 5
weight = 2
max_occurrences = 2
weight = 5
/datum/round_event/anomaly/anomaly_vortex
startWhen = 10
announceWhen = 3
endWhen = 80
endWhen = 95
/datum/round_event/anomaly/anomaly_vortex/announce()
@@ -578,13 +578,13 @@
else
switch(H.radiation)
if(1 to 49)
if(0 to 50)
H.radiation--
if(prob(25))
H.adjustToxLoss(1)
H.updatehealth()
if(50 to 74)
if(50 to 75)
H.radiation -= 2
H.adjustToxLoss(1)
if(prob(5))
@@ -94,6 +94,8 @@
health = health_repair_max
stat = CONSCIOUS
icon_state = icon_living
dead_mob_list -= src
living_mob_list += src
D.visible_message("<span class='notice'>[D] reactivates [src]!</span>")
alert_drones(DRONE_NET_CONNECT)
if(G)
@@ -416,6 +416,7 @@
desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna."
icon = 'icons/obj/items.dmi'
icon_state = "goliath_hide"
flags = NOBLUDGEON
w_class = 3
layer = 4
@@ -423,11 +424,32 @@
if(proximity_flag)
if(istype(target, /obj/item/clothing/suit/space/hardsuit/mining) || istype(target, /obj/item/clothing/head/helmet/space/hardsuit/mining))
var/obj/item/clothing/C = target
var/current_armor = C.armor
var/list/current_armor = C.armor
if(current_armor.["melee"] < 80)
current_armor.["melee"] = min(current_armor.["melee"] + 10, 80)
user << "<span class='info'>You strengthen [target], improving its resistance against melee attacks.</span>"
qdel(src)
else
user << "<span class='info'>You can't improve [C] any further.</span>"
return
return
if(istype(target, /obj/mecha/working/ripley))
var/obj/mecha/D = target
var/list/damage_absorption = D.damage_absorption
if(damage_absorption.["brute"] > 0.3)
damage_absorption.["brute"] = max(damage_absorption.["brute"] - 0.1, 0.3)
user << "<span class='info'>You strengthen [target], improving its resistance against melee attacks.</span>"
qdel(src)
if(D.icon_state == "ripley-open")
D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-open")
D.desc = "Autonomous Power Loader Unit. Its armour is enhanced with some goliath hide plates."
else
user << "<span class='info'>You can't add armour onto the mech while someone is inside!</span>"
if(damage_absorption.["brute"] == 0.3)
if(D.icon_state == "ripley-open")
D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-full-open")
D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - the pilot must be an experienced monster hunter."
else
user << "<span class='info'>You can't add armour onto the mech while someone is inside!</span>"
else
user << "<span class='info'>You can't improve [D] any further.</span>"
return
@@ -119,6 +119,33 @@ datum/design/honker_targ
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting
datum/design/phazon_main
name = "Exosuit Design (\"Phazon\" Central Control module)"
desc = "Allows for the construction of a \"Phazon\" Central Control module."
id = "phazon_main"
req_tech = list("programming" = 5, "materials" = 7, "powerstorage" = 6)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/main
datum/design/phazon_peri
name = "Exosuit Design (\"Phazon\" Peripherals Control module)"
desc = "Allows for the construction of a \"Phazon\" Peripheral Control module."
id = "phazon_peri"
req_tech = list("programming" = 5, "bluespace" = 6)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/peripherals
datum/design/phazon_targ
name = "Exosuit Design (\"Phazon\" Weapons & Targeting Control module)"
desc = "Allows for the construction of a \"Phazon\" Weapons & Targeting Control module."
id = "phazon_targ"
req_tech = list("programming" = 5, "magnets" = 6)
build_type = IMPRINTER
materials = list("$glass" = 1000, "sacid" = 20)
build_path = /obj/item/weapon/circuitboard/mecha/phazon/targeting
////////////////////////////////////////
/////////// Mecha Equpment /////////////
////////////////////////////////////////