mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-19 20:15:47 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into prisonjumpsuit
Conflicts: icons/mob/uniform.dmi
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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,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"
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
@@ -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 /////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user