Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master'
@@ -1969,7 +1969,7 @@
|
||||
"aLS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plasteel,/area/crew_quarters/fitness)
|
||||
"aLT" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/item/weapon/pen/multi/gold,/turf/simulated/floor/carpet,/area/magistrateoffice)
|
||||
"aLU" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutral"},/area/crew_quarters/fitness)
|
||||
"aLV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Mr. Chang's"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/snow,/area/crew_quarters/mrchangs)
|
||||
"aLV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/public/glass{name = "Mr. Chang's"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/mrchangs)
|
||||
"aLW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/sleep)
|
||||
"aLX" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 5},/area/crew_quarters/fitness)
|
||||
"aLY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet/arcade,/area/crew_quarters/fitness{name = "\improper Arcade"})
|
||||
|
||||
@@ -914,6 +914,7 @@
|
||||
"rD" = (/obj/structure/table/wood{dir = 10},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "SPECOPS"; name = "Ready Room"; pixel_x = -6; pixel_y = 6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "specopsoffice"; name = "Privacy Shutters"; pixel_x = 6; pixel_y = -6; req_access_txt = "114"},/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "CCGAMMA"; name = "Gamma Lockdown"; pixel_x = -6; pixel_y = -6; req_access_txt = "114"},/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/specops)
|
||||
"rE" = (/turf/unsimulated/wall,/area/start)
|
||||
"rF" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/machinery/door/poddoor/shutters{dir = 2; id_tag = "specopsoffice"; name = "Privacy Shutters"},/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows3"; tag = "icon-fakewindows (WEST)"},/area/centcom/specops)
|
||||
"rG" = (/obj/machinery/door/airlock/centcom{name = "Special Operations Command"; opacity = 1; req_access_txt = "114"},/obj/machinery/door/poddoor{id_tag = "specopsoffice"; name = "Super Privacy Shutters"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops)
|
||||
"rH" = (/obj/effect/landmark/start,/turf/unsimulated/floor,/area/start)
|
||||
"rK" = (/turf/unsimulated/wall/splashscreen,/area/start)
|
||||
"sq" = (/turf/unsimulated/wall,/area/centcom/control)
|
||||
@@ -1034,7 +1035,6 @@
|
||||
"uR" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"uS" = (/obj/machinery/camera{c_tag = "CentComm Special Ops. Ready Room East"; dir = 8; network = list("ERT","CentComm")},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"uT" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/wall/fakeglass{dir = 8; icon_state = "fakewindows3"; tag = "icon-fakewindows (WEST)"},/area/centcom/specops)
|
||||
"uU" = (/obj/machinery/door/airlock/centcom{name = "Special Operations Command"; opacity = 1; req_access_txt = "114"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops)
|
||||
"uW" = (/obj/structure/urinal,/turf/unsimulated/wall,/area/centcom/specops)
|
||||
"uX" = (/obj/structure/stool/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
"va" = (/obj/structure/table/reinforced,/obj/effect/landmark{name = "Commando_Manual"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
|
||||
@@ -1634,7 +1634,7 @@ aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGoNoJoWoPoGfmjHfFkdkdkdkdfFlZmdujujujujujujujujuqururururururussXfeujflsqtQtRtZsuutuuuvuwuxuyuzsutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpgpfpfpfphoGfmoKkdkdkdkdkdkdoLmdujujujujujujujujsXuAuBuBuBuBuBuCsXsXoMsXsquEtRtSsuuFtRuGuHtRtRtRsuuEtRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpipfpkpopfptfdoUoToToToToToToVfdujujujuIuIujujujuJuKuKuKuKuKuKuKuLuKuKuKuMtRtRtRuNtRtRtRtRtRtRtRuNtRtRtZoltRolomogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpjpfpfrloGfmfmfmfmfmfmfmfmfmfmujujuOuPuQuRujuSsXsXrFuUrFsXsXoXsXoZoYpbsquetRucsutRtRtRtRtRtRtRsuuetRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmoGpjpfpfrloGfmfmfmfmfmfmfmfmfmfmujujuOuPuQuRujuSsXsXrFrGrFsXsXoXsXoZoYpbsquetRucsutRtRtRtRtRtRtRsuuetRtZsqsqsqohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpnrnrmrprooGfmaNsXrxujujujujujryujuXrzooonvavbujvcvdvdvdvdvesXuKsXsXsXsXsqtQtRtZsuvfuuvgvgvgvhvisutQtRtZsqaNaNohogogogogogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmpDoEoEoEoErkfmaNsXrAujsXuWuWsXsXujujvauRvmuRujujvnvdvovpvqvdsXuKsXvrtTtUsqtQtRtZsqsqvsvtvuvvvwsqsqtQtRtZsqaNaNohogogogopogogogohaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
aNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNfmfmfmfmfmfmfmfmaNsXrBujsXvkvkpqprujujujvyvyujujujvzvdrCvBvCbesXuKsqpstRtRvFtRtRtZsqsqsusususususqsqtQtRtZsqaNaNoqodododododododoraNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaN
|
||||
|
||||
@@ -120,6 +120,7 @@
|
||||
|
||||
#define TINT_IMPAIR 2 //Threshold of tint level to apply weld mask overlay
|
||||
#define TINT_BLIND 3 //Threshold of tint level to obscure vision fully
|
||||
#define EYE_SHINE_THRESHOLD 6 //dark_view threshold past which a humanoid's eyes will 'shine' in the dark.
|
||||
|
||||
#define isliving(A) (istype((A), /mob/living))
|
||||
#define iscarbon(A) (istype((A), /mob/living/carbon))
|
||||
|
||||
@@ -897,3 +897,12 @@ proc/rand_hex_color()
|
||||
for(var/i=0;i<6;i++)
|
||||
color = color+pick(colors)
|
||||
return "#[color]"
|
||||
|
||||
//Imagine removing pixels from the main icon that are covered by pixels from the mask icon.
|
||||
proc/get_icon_difference(var/icon/main, var/icon/mask)
|
||||
if(istype(main) && istype(mask))
|
||||
mask.Blend(rgb(255,255,255), ICON_SUBTRACT) //Make all pixels on the mask as black as possible.
|
||||
mask.Opaque(rgb(255,255,255)) //Make the transparent pixels (background) white.
|
||||
mask.BecomeAlphaMask() //Make all the black pixels vanish (fully transparent), leaving only the white pixels.
|
||||
main.AddAlphaMask(mask) //Make the pixels in the main icon that are in the transparent zone of the mask icon also vanish (fully transparent).
|
||||
return main
|
||||
|
||||
@@ -1337,7 +1337,7 @@ Standard way to write links -Sayu
|
||||
if(covered_locations & HEAD)
|
||||
return 0
|
||||
if("eyes")
|
||||
if(covered_locations & HEAD || face_covered & HIDEEYES || eyesmouth_covered & GLASSESCOVERSEYES)
|
||||
if(face_covered & HIDEEYES || eyesmouth_covered & GLASSESCOVERSEYES || eyesmouth_covered & HEADCOVERSEYES)
|
||||
return 0
|
||||
if("mouth")
|
||||
if(covered_locations & HEAD || face_covered & HIDEFACE || eyesmouth_covered & MASKCOVERSMOUTH)
|
||||
|
||||
@@ -20,15 +20,8 @@ Make sure spells that are removed from spell_list are actually removed and delet
|
||||
Also, you never added distance checking after target is selected. I've went ahead and did that.
|
||||
*/
|
||||
/obj/effect/proc_holder/spell/targeted/mind_transfer/cast(list/targets, mob/user = usr, distanceoverride)
|
||||
if(!targets.len)
|
||||
to_chat(user, "No mind found.")
|
||||
return
|
||||
|
||||
if(targets.len > 1)
|
||||
to_chat(user, "Too many minds! You're not a hive damnit!")//Whaa...aat?
|
||||
return
|
||||
|
||||
var/mob/living/target = targets[1]
|
||||
var/mob/living/target = targets[range]
|
||||
|
||||
if(!(target in oview(range)) && !distanceoverride)//If they are not in overview after selection. Do note that !() is necessary for in to work because ! takes precedence over it.
|
||||
to_chat(user, "They are too far away!")
|
||||
@@ -50,6 +43,10 @@ Also, you never added distance checking after target is selected. I've went ahea
|
||||
to_chat(user, "Their mind is resisting your spell.")
|
||||
return
|
||||
|
||||
if(istype(target, /mob/living/silicon))
|
||||
to_chat(user, "You feel this enslaved being is just as dead as its cold, hard exoskeleton.")
|
||||
return
|
||||
|
||||
var/mob/living/victim = target//The target of the spell whos body will be transferred to.
|
||||
var/mob/caster = user//The wizard/whomever doing the body transferring.
|
||||
|
||||
|
||||
@@ -128,10 +128,12 @@
|
||||
/datum/dna/gene/disability/colourblindness/activate(var/mob/M, var/connected, var/flags)
|
||||
..()
|
||||
M.update_client_colour() //Handle the activation of the colourblindness on the mob.
|
||||
M.update_icons() //Apply eyeshine as needed.
|
||||
|
||||
/datum/dna/gene/disability/colourblindness/deactivate(var/mob/M, var/connected, var/flags)
|
||||
..()
|
||||
M.update_client_colour() //Handle the deactivation of the colourblindness on the mob.
|
||||
M.update_icons() //Remove eyeshine as needed.
|
||||
|
||||
/datum/dna/gene/disability/deaf
|
||||
name="Deafness"
|
||||
|
||||
@@ -164,10 +164,12 @@
|
||||
/datum/dna/gene/basic/xray/activate(mob/living/M, connected, flags)
|
||||
..()
|
||||
M.update_sight()
|
||||
M.update_icons() //Apply eyeshine as needed.
|
||||
|
||||
/datum/dna/gene/basic/xray/deactivate(mob/living/M, connected, flags)
|
||||
..()
|
||||
M.update_sight()
|
||||
M.update_icons() //Remove eyeshine as needed.
|
||||
|
||||
/datum/dna/gene/basic/tk
|
||||
name="Telekenesis"
|
||||
|
||||
@@ -97,6 +97,9 @@
|
||||
var/obj/item/weapon/coin/coin
|
||||
var/datum/wires/vending/wires = null
|
||||
|
||||
var/item_slot = FALSE
|
||||
var/obj/item/inserted_item = null
|
||||
|
||||
/obj/machinery/vending/New()
|
||||
..()
|
||||
wires = new(src)
|
||||
@@ -119,6 +122,10 @@
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/vending/Destroy()
|
||||
eject_item()
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* Build src.produdct_records from the products lists
|
||||
*
|
||||
@@ -281,9 +288,54 @@
|
||||
return;
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You should probably unscrew the service panel first.</span>")
|
||||
else if(item_slot_check(user, I))
|
||||
insert_item(user, I)
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
//Override this proc to do per-machine checks on the inserted item, but remember to call the parent to handle these generic checks before your logic!
|
||||
/obj/machinery/vending/proc/item_slot_check(mob/user, obj/item/I)
|
||||
if(!item_slot)
|
||||
return FALSE
|
||||
if(alert(user, "Do you want to attempt to insert [I]?", "","Yes", "No") == "No")
|
||||
return FALSE
|
||||
if(inserted_item)
|
||||
to_chat(user, "<span class='warning'>There is something already inserted!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/* Example override for item_slot_check proc:
|
||||
/obj/machinery/vending/example/item_slot_check(mob/user, obj/item/I)
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(!istype(I, /obj/item/toy))
|
||||
to_chat(user, "<span class='warning'>[I] isn't compatible with this machine's slot.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
*/
|
||||
|
||||
/obj/machinery/vending/proc/insert_item(mob/user, obj/item/I)
|
||||
if(!item_slot || inserted_item)
|
||||
return
|
||||
if(!user.canUnEquip(I))
|
||||
to_chat(user, "<span class='warning'>[I] is stuck to your hand, you can't seem to put it down!</span>")
|
||||
return
|
||||
|
||||
user.unEquip(I)
|
||||
inserted_item = I
|
||||
I.forceMove(src)
|
||||
|
||||
to_chat(user, "<span class='notice'>You insert [I] into [src].</span>")
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
/obj/machinery/vending/proc/eject_item()
|
||||
if(!item_slot || !inserted_item)
|
||||
return
|
||||
inserted_item.forceMove(get_turf(src))
|
||||
inserted_item = null
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
/obj/machinery/vending/emag_act(user as mob)
|
||||
emagged = 1
|
||||
to_chat(user, "You short out the product lock on [src]")
|
||||
@@ -439,12 +491,21 @@
|
||||
|
||||
data["products"] = listed_products
|
||||
|
||||
if(src.coin)
|
||||
data["coin"] = src.coin.name
|
||||
if(coin)
|
||||
data["coin"] = coin.name
|
||||
|
||||
if(src.panel_open)
|
||||
if(item_slot)
|
||||
data["item_slot"] = 1
|
||||
if(inserted_item)
|
||||
data["inserted_item"] = inserted_item
|
||||
else
|
||||
data["inserted_item"] = null
|
||||
else
|
||||
data["item_slot"] = 0
|
||||
|
||||
if(panel_open)
|
||||
data["panel"] = 1
|
||||
data["speaker"] = src.shut_up ? 0 : 1
|
||||
data["speaker"] = shut_up ? 0 : 1
|
||||
else
|
||||
data["panel"] = 0
|
||||
return data
|
||||
@@ -463,6 +524,9 @@
|
||||
to_chat(usr, "<span class='notice'>You remove [coin] from [src].</span>")
|
||||
categories &= ~CAT_COIN
|
||||
|
||||
if(href_list["remove_item"])
|
||||
eject_item()
|
||||
|
||||
if(href_list["pay"])
|
||||
if(currently_vending && vendor_account && !vendor_account.suspended)
|
||||
var/paid = 0
|
||||
@@ -562,14 +626,32 @@
|
||||
use_power(vend_power_usage) //actuators and stuff
|
||||
if(icon_vend) //Show the vending animation if needed
|
||||
flick(icon_vend,src)
|
||||
spawn(src.vend_delay)
|
||||
new R.product_path(get_turf(src))
|
||||
spawn(vend_delay)
|
||||
do_vend(R)
|
||||
status_message = ""
|
||||
status_error = 0
|
||||
vend_ready = 1
|
||||
currently_vending = null
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
//override this proc to add handling for what to do with the vended product when you have a inserted item and remember to include a parent call for this generic handling
|
||||
/obj/machinery/vending/proc/do_vend(datum/data/vending_product/R)
|
||||
if(!item_slot || !inserted_item)
|
||||
new R.product_path(get_turf(src))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/* Example override for do_vend proc:
|
||||
/obj/machinery/vending/example/do_vend(datum/data/vending_product/R)
|
||||
if(..())
|
||||
return
|
||||
var/obj/item/vended = new R.product_path()
|
||||
if(inserted_item.force == initial(inserted_item.force)
|
||||
inserted_item.force += vended.force
|
||||
inserted_item.damtype = vended.damtype
|
||||
qdel(vended)
|
||||
*/
|
||||
|
||||
/obj/machinery/vending/proc/stock(var/datum/data/vending_product/R, var/mob/user)
|
||||
if(panel_open)
|
||||
to_chat(user, "<span class='notice'>You stock the [src] with \a [R.product_name]</span>")
|
||||
@@ -701,6 +783,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bag/goonbag = 3,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/cans/beer = 6,
|
||||
@@ -737,18 +820,22 @@
|
||||
component_parts += new /obj/item/weapon/vending_refill/boozeomat(0)
|
||||
component_parts += new /obj/item/weapon/vending_refill/boozeomat(0)
|
||||
|
||||
|
||||
/obj/machinery/vending/coffee
|
||||
name = "\improper Hot Drinks machine"
|
||||
desc = "A vending machine which dispenses hot drinks."
|
||||
product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies"
|
||||
icon_state = "coffee"
|
||||
icon_vend = "coffee-vend"
|
||||
item_slot = TRUE
|
||||
vend_delay = 34
|
||||
products = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 25,/obj/item/weapon/reagent_containers/food/drinks/tea = 25,/obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 25,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/chocolate = 10, /obj/item/weapon/reagent_containers/food/drinks/chicken_soup = 10,/obj/item/weapon/reagent_containers/food/drinks/weightloss = 10)
|
||||
/obj/item/weapon/reagent_containers/food/drinks/chocolate = 10, /obj/item/weapon/reagent_containers/food/drinks/chicken_soup = 10,/obj/item/weapon/reagent_containers/food/drinks/weightloss = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug = 15)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/ice = 10)
|
||||
premium = list(/obj/item/weapon/reagent_containers/food/drinks/mug/novelty = 5)
|
||||
prices = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 25, /obj/item/weapon/reagent_containers/food/drinks/tea = 25, /obj/item/weapon/reagent_containers/food/drinks/h_chocolate = 25, /obj/item/weapon/reagent_containers/food/drinks/chocolate = 25,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/chicken_soup = 30,/obj/item/weapon/reagent_containers/food/drinks/weightloss = 50)
|
||||
/obj/item/weapon/reagent_containers/food/drinks/chicken_soup = 30,/obj/item/weapon/reagent_containers/food/drinks/weightloss = 50, /obj/item/weapon/reagent_containers/food/drinks/mug = 50)
|
||||
refill_canister = /obj/item/weapon/vending_refill/coffee
|
||||
|
||||
/obj/machinery/vending/coffee/New()
|
||||
@@ -761,6 +848,33 @@
|
||||
component_parts += new /obj/item/weapon/vending_refill/coffee(0)
|
||||
component_parts += new /obj/item/weapon/vending_refill/coffee(0)
|
||||
|
||||
/obj/machinery/vending/coffee/item_slot_check(mob/user, obj/item/I)
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(!(istype(I, /obj/item/weapon/reagent_containers/glass) || istype(I, /obj/item/weapon/reagent_containers/food/drinks)))
|
||||
to_chat(user, "<span class='warning'>[I] is not compatible with this machine.</span>")
|
||||
return FALSE
|
||||
if(!I.is_open_container())
|
||||
to_chat(user, "<span class='warning>You need to open [I] before you insert it.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/vending/coffee/do_vend(datum/data/vending_product/R)
|
||||
if(..())
|
||||
return
|
||||
var/obj/item/weapon/reagent_containers/food/drinks/vended = new R.product_path()
|
||||
|
||||
if(istype(vended, /obj/item/weapon/reagent_containers/food/drinks/mug))
|
||||
vended.forceMove(get_turf(src))
|
||||
return
|
||||
|
||||
vended.reagents.trans_to(inserted_item, vended.reagents.total_volume)
|
||||
if(vended.reagents.total_volume)
|
||||
vended.forceMove(get_turf(src))
|
||||
else
|
||||
qdel(vended)
|
||||
|
||||
|
||||
/obj/machinery/vending/snack
|
||||
name = "\improper Getmore Chocolate Corp"
|
||||
desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars."
|
||||
|
||||
@@ -12,18 +12,18 @@
|
||||
icon_state ="bookEngineering"
|
||||
author = "Engineering Encyclopedia" // Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
|
||||
title = "Station Repairs and Construction"
|
||||
/*dat = {"
|
||||
dat = {"
|
||||
|
||||
<html><head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<iframe width='100%' height='97%' src="http://wiki.nanotrasen.com/index.php?title=Guide_to_construction&printable=yes&remove_links=1" frameborder="0" id="main_frame"></iframe>
|
||||
<iframe width='100%' height='97%' src="https://Nanotrasen.se/wiki/index.php?title=Guide_to_Construction&printable=yes&remove_links=1" frameborder="0" id="main_frame"></iframe>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
"}*/
|
||||
"}
|
||||
|
||||
/obj/item/weapon/book/manual/engineering_particle_accelerator
|
||||
name = "Particle Accelerator User's Guide"
|
||||
@@ -32,7 +32,7 @@
|
||||
title = "Particle Accelerator User's Guide"
|
||||
//big pile of shit below.
|
||||
|
||||
/*dat = {"<html>
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
@@ -65,7 +65,7 @@
|
||||
</ol>
|
||||
|
||||
</body>
|
||||
</html>"}*/
|
||||
</html>"}
|
||||
|
||||
|
||||
/obj/item/weapon/book/manual/supermatter_engine
|
||||
@@ -158,18 +158,18 @@
|
||||
title = "Hacking"
|
||||
//big pile of shit below.
|
||||
|
||||
/*dat = {"
|
||||
dat = {"
|
||||
|
||||
<html><head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<iframe width='100%' height='97%' src="http://wiki.nanotrasen.com/index.php?title=Hacking&printable=yes&remove_links=1" frameborder="0" id="main_frame"></iframe>
|
||||
<iframe width='100%' height='97%' src="https://Nanotrasen.se/wiki/index.php?title=Hacking&printable=yes&remove_links=1" frameborder="0" id="main_frame"></iframe>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
||||
"}*/
|
||||
"}
|
||||
|
||||
/obj/item/weapon/book/manual/engineering_singularity_safety
|
||||
name = "Singularity Safety in Special Circumstances"
|
||||
@@ -178,7 +178,7 @@
|
||||
title = "Singularity Safety in Special Circumstances"
|
||||
//big pile of shit below.
|
||||
|
||||
/*dat = {"<html>
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
@@ -217,14 +217,14 @@
|
||||
Step one: <b>GET THE FUCK OUT OF THERE!!! FORGET THE WOMEN AND CHILDREN, SAVE YOURSELF!!!</b><br>
|
||||
</body>
|
||||
</html>
|
||||
"}*/
|
||||
"}
|
||||
|
||||
/obj/item/weapon/book/manual/hydroponics_pod_people
|
||||
name = "The Human Harvest - From seed to market"
|
||||
icon_state ="bookHydroponicsPodPeople"
|
||||
author = "Farmer John"
|
||||
title = "The Human Harvest - From seed to market"
|
||||
/*dat = {"<html>
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
@@ -252,7 +252,7 @@
|
||||
|
||||
</body>
|
||||
</html>
|
||||
"}*/
|
||||
"}
|
||||
|
||||
/obj/item/weapon/book/manual/medical_cloning
|
||||
name = "Cloning techniques of the 26th century"
|
||||
@@ -261,7 +261,7 @@
|
||||
title = "Cloning techniques of the 26th century"
|
||||
//big pile of shit below.
|
||||
|
||||
/*dat = {"<html>
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
@@ -329,7 +329,7 @@
|
||||
|
||||
</body>
|
||||
</html>
|
||||
"}*/
|
||||
"}
|
||||
|
||||
|
||||
/obj/item/weapon/book/manual/ripley_build_and_repair
|
||||
@@ -339,7 +339,7 @@
|
||||
title = "APLU \"Ripley\" Construction and Operation Manual"
|
||||
//big pile of shit below.
|
||||
|
||||
/*dat = {"<html>
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
@@ -405,7 +405,7 @@
|
||||
|
||||
<h2>Operation</h2>
|
||||
Coming soon...
|
||||
"}*/
|
||||
"}
|
||||
|
||||
/obj/item/weapon/book/manual/experimentor
|
||||
name = "Mentoring your Experiments"
|
||||
@@ -544,7 +544,7 @@
|
||||
icon_state = "rdbook"
|
||||
author = "Dr. L. Ight"
|
||||
title = "Research and Development 101"
|
||||
/*dat = {"
|
||||
dat = {"
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
@@ -580,11 +580,14 @@
|
||||
<h2>Protolathe</h2>
|
||||
This machine is an advanced form of the Autolathe that produce non-circuit designs. Unlike the Autolathe, it can use processed metal, glass, solid plasma, silver, gold, and diamonds along with a variety of chemicals to produce devices. The downside is that, again, not all devices you make are 100% reliable when you first discover them.
|
||||
|
||||
<h1>Reliability and You</h1>
|
||||
As it has been stated, many devices when they're first discovered do not have a 100% reliablity when you first discover them. Instead, the reliablity of the device is dependent upon a base reliability value, whatever improvements to the design you've discovered through the Destructive Analyzer, and any advancements you've made with the device's source technologies. To be able to improve the reliability of a device, you have to use the device until it breaks beyond repair. Once that happens, you can analyze it in a Destructive Analyzer. Once the device reachs a certain minimum reliability, you'll gain tech advancements from it.
|
||||
|
||||
<h1>Building a Better Machine</h1>
|
||||
Many machines produces from circuit boards and inserted into a machine frame require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. If you use these parts when constructing something, its attributes may be improved. For example, if you use an advanced matter bin when constructing an autolathe (rather then a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results!
|
||||
Many machines produces from circuit boards and inserted into a machine frame require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. If you use these parts when constructing something, its attributes may be improved. For example, if you use an advanced matter bin when constructing an autolathe (rather then a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results! Be warned, however: Tier 3 and higher stock parts don't have 100% reliability and their low reliability may affect the reliability of the end machine.
|
||||
</body>
|
||||
</html>
|
||||
"}*/
|
||||
"}
|
||||
|
||||
|
||||
/obj/item/weapon/book/manual/robotics_cyborgs
|
||||
@@ -592,7 +595,7 @@
|
||||
icon_state = "borgbook"
|
||||
author = "XISC"
|
||||
title = "Cyborgs for Dummies"
|
||||
/*dat = {"<html>
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 21px; margin: 15px 0px 5px;}
|
||||
@@ -787,7 +790,7 @@
|
||||
|
||||
</body>
|
||||
</html>
|
||||
"}*/
|
||||
"}
|
||||
|
||||
/obj/item/weapon/book/manual/security_space_law
|
||||
name = "Space Law"
|
||||
@@ -801,7 +804,7 @@
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<iframe width='100%' height='97%' src="http://nanotrasen.se/wiki/index.php?title=Space_law&printable=yes" frameborder="0" id="main_frame"></iframe> </body>
|
||||
<iframe width='100%' height='97%' src="https://Nanotrasen.se/wiki/index.php?title=Space_law&printable=yes&remove_links=1" frameborder="0" id="main_frame"></iframe> </body>
|
||||
|
||||
</html>
|
||||
|
||||
@@ -818,17 +821,17 @@
|
||||
icon_state ="bookEngineering2"
|
||||
author = "Engineering Encyclopedia"
|
||||
title = "Engineering Textbook"
|
||||
/*dat = {"
|
||||
dat = {"
|
||||
|
||||
<html><head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<iframe width='100%' height='97%' src="http://wiki.nanotrasen.com/index.php?title=Guide_to_engineering&printable=yes&remove_links=1" frameborder="0" id="main_frame"></iframe> </body>
|
||||
<iframe width='100%' height='97%' src="https://Nanotrasen.se/wiki/index.php?title=Guide_to_Engineering&printable=yes&remove_links=1" frameborder="0" id="main_frame"></iframe> </body>
|
||||
|
||||
</html>
|
||||
|
||||
"}*/
|
||||
"}
|
||||
|
||||
|
||||
/obj/item/weapon/book/manual/chef_recipes
|
||||
@@ -836,7 +839,7 @@
|
||||
icon_state = "cooked_book"
|
||||
author = "Victoria Ponsonby"
|
||||
title = "Chef Recipes"
|
||||
/*dat = {"<html>
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
@@ -884,14 +887,14 @@
|
||||
|
||||
</body>
|
||||
</html>
|
||||
"}*/
|
||||
"}
|
||||
|
||||
/obj/item/weapon/book/manual/barman_recipes
|
||||
name = "Barman Recipes"
|
||||
icon_state = "barbook"
|
||||
author = "Sir John Rose"
|
||||
title = "Barman Recipes"
|
||||
/*dat = {"<html>
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
@@ -936,7 +939,7 @@
|
||||
|
||||
</body>
|
||||
</html>
|
||||
"}*/
|
||||
"}
|
||||
|
||||
|
||||
/obj/item/weapon/book/manual/detective
|
||||
@@ -944,7 +947,7 @@
|
||||
icon_state ="bookDetective"
|
||||
author = "Nanotrasen"
|
||||
title = "The Film Noir: Proper Procedures for Investigations"
|
||||
/*dat = {"<html>
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
@@ -978,14 +981,14 @@
|
||||
It really is that easy! Good luck!
|
||||
|
||||
</body>
|
||||
</html>"}*/
|
||||
</html>"}
|
||||
|
||||
/obj/item/weapon/book/manual/nuclear
|
||||
name = "Fission Mailed: Nuclear Sabotage 101"
|
||||
icon_state ="bookNuclear"
|
||||
author = "Syndicate"
|
||||
title = "Fission Mailed: Nuclear Sabotage 101"
|
||||
/*dat = {"<html>
|
||||
dat = {"<html>
|
||||
Nuclear Explosives 101:<br>
|
||||
Hello and thank you for choosing the Syndicate for your nuclear information needs.<br>
|
||||
Today's crash course will deal with the operation of a Fusion Class Nanotrasen made Nuclear Device.<br>
|
||||
@@ -1013,7 +1016,7 @@
|
||||
<b>Disk, Code, Safety, Timer, Disk, RUN!</b><br>
|
||||
Intelligence Analysts believe that normal Nanotrasen procedure is for the Captain to secure the nuclear authorisation disk.<br>
|
||||
Good luck!
|
||||
</html>"}*/
|
||||
</html>"}
|
||||
|
||||
/obj/item/weapon/book/manual/atmospipes
|
||||
name = "Pipes and You: Getting To Know Your Scary Tools"
|
||||
@@ -2557,4 +2560,4 @@
|
||||
</body>
|
||||
</html>
|
||||
|
||||
"}
|
||||
"}
|
||||
@@ -37,7 +37,7 @@
|
||||
/obj/item/weapon/vending_refill/coffee
|
||||
machine_name = "hot drinks"
|
||||
icon_state = "refill_joe"
|
||||
charges = 28//of 85
|
||||
charges = 35//of 105
|
||||
|
||||
/obj/item/weapon/vending_refill/snack
|
||||
machine_name = "Getmore Chocolate Corp"
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
new /obj/item/clothing/head/beret/eng(src)
|
||||
new /obj/item/weapon/door_remote/chief_engineer(src)
|
||||
new /obj/item/weapon/rpd(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/mug/ce(src)
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/engineering_electrical
|
||||
|
||||
@@ -111,8 +111,15 @@
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/pill/haloperidol(src)
|
||||
new /obj/item/weapon/reagent_containers/food/pill/haloperidol(src)
|
||||
new /obj/item/weapon/reagent_containers/food/pill/haloperidol(src)
|
||||
new /obj/item/weapon/reagent_containers/food/pill/methamphetamine(src)
|
||||
new /obj/item/weapon/reagent_containers/food/pill/methamphetamine(src)
|
||||
new /obj/item/weapon/reagent_containers/food/pill/methamphetamine(src)
|
||||
new /obj/item/weapon/reagent_containers/food/pill/patch/nicotine(src)
|
||||
new /obj/item/weapon/reagent_containers/food/pill/patch/nicotine(src)
|
||||
new /obj/item/weapon/reagent_containers/food/pill/patch/nicotine(src)
|
||||
new /obj/item/weapon/reagent_containers/food/pill/hydrocodone(src)
|
||||
new /obj/item/weapon/reagent_containers/food/pill/hydrocodone(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/psychiatrist
|
||||
name = "psychiatrist's locker"
|
||||
@@ -130,7 +137,10 @@
|
||||
new /obj/item/weapon/reagent_containers/syringe(src)
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/ether(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/psychiatrist(src)
|
||||
|
||||
new /obj/random/plushie(src)
|
||||
for(var/i in 0 to 3)
|
||||
var/candy = pick(subtypesof(/obj/item/weapon/reagent_containers/food/snacks/candy/fudge))
|
||||
new candy(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/CMO
|
||||
name = "chief medical officer's locker"
|
||||
@@ -173,6 +183,7 @@
|
||||
new /obj/item/weapon/reagent_containers/hypospray/CMO(src)
|
||||
new /obj/item/organ/internal/cyberimp/eyes/hud/medical(src)
|
||||
new /obj/item/weapon/door_remote/chief_medical_officer(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/mug/cmo(src)
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/animal
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/laser_pointer(src)
|
||||
new /obj/item/weapon/door_remote/research_director(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/mug/rd(src)
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/research_reagents
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
new /obj/item/weapon/storage/belt/rapier(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/door_remote/captain(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/mug/cap(src)
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/hop
|
||||
@@ -56,6 +57,7 @@
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/clothing/accessory/petcollar(src)
|
||||
new /obj/item/weapon/door_remote/civillian(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/mug/hop(src)
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/hop2
|
||||
@@ -120,6 +122,7 @@
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/weapon/gun/energy/gun/hos(src)
|
||||
new /obj/item/weapon/door_remote/head_of_security(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/mug/hos(src)
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/warden
|
||||
|
||||
@@ -79,3 +79,54 @@
|
||||
display_name = "Nano-Mob Hunter GO! Cartridge"
|
||||
path = /obj/item/weapon/cartridge/mob_hunt_game
|
||||
cost = 2
|
||||
|
||||
//////////////////////
|
||||
// Mugs //
|
||||
//////////////////////
|
||||
|
||||
/datum/gear/mug
|
||||
display_name = "random coffee mug"
|
||||
description = "A randomly colored coffee mug. You'll need to supply your own beverage though."
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/mug
|
||||
sort_category = "Mugs"
|
||||
|
||||
/datum/gear/novelty_mug
|
||||
display_name = "novelty coffee mug"
|
||||
description = "A random novelty coffee mug. You'll need to supply your own beverage though."
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/mug/novelty
|
||||
cost = 2
|
||||
sort_category = "Mugs"
|
||||
|
||||
/datum/gear/mug/department
|
||||
subtype_path = /datum/gear/mug/department
|
||||
sort_category = "Mugs"
|
||||
subtype_cost_overlap = FALSE
|
||||
|
||||
/datum/gear/mug/department/eng
|
||||
display_name = "engineer coffee mug"
|
||||
description = "An engineer's coffee mug, emblazoned in the colors of the Engineering department."
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist")
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/mug/eng
|
||||
|
||||
/datum/gear/mug/department/med
|
||||
display_name = "doctor coffee mug"
|
||||
description = "A doctor's coffee mug, emblazoned in the colors of the Medical department."
|
||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Coroner")
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/mug/med
|
||||
|
||||
/datum/gear/mug/department/sci
|
||||
display_name = "scientist coffee mug"
|
||||
description = "A scientist's coffee mug, emblazoned in the colors of the Science department."
|
||||
allowed_roles = list("Research Director", "Scientist", "Roboticist")
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/mug/sci
|
||||
|
||||
/datum/gear/mug/department/sec
|
||||
display_name = "officer coffee mug"
|
||||
description = "An officer's coffee mug, emblazoned in the colors of the Security department."
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot", "Brig Physician", "Internal Affairs Agent")
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/mug/sec
|
||||
|
||||
/datum/gear/mug/department/serv
|
||||
display_name = "crewmember coffee mug"
|
||||
description = "A crewmember's coffee mug, emblazoned in the colors of the Service department."
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/mug/serv
|
||||
|
||||
@@ -152,7 +152,3 @@
|
||||
/datum/gear/hat/flowerpin
|
||||
display_name = "hair flower"
|
||||
path = /obj/item/clothing/head/hairflower
|
||||
|
||||
/datum/gear/hat/flowerpinpurp
|
||||
display_name = "hair flower, purple"
|
||||
path = /obj/item/clothing/head/hairflower/purple
|
||||
@@ -14,11 +14,6 @@
|
||||
desc = "Smells nice."
|
||||
item_state = "hairflower"
|
||||
|
||||
/obj/item/clothing/head/hairflower/purple
|
||||
icon_state = "hairflowerp"
|
||||
item_state = "hairflowerp"
|
||||
item_state = "that"
|
||||
|
||||
/obj/item/clothing/head/powdered_wig
|
||||
name = "powdered wig"
|
||||
desc = "A powdered wig."
|
||||
|
||||
@@ -588,7 +588,7 @@
|
||||
/obj/item/clothing/head/fluff/heather_winceworth // Regens: Heather Winceworth
|
||||
name= "Heather's rose"
|
||||
desc= "A beautiful purple rose for your hair."
|
||||
icon= 'icons/obj/clothing/hats.dmi'
|
||||
icon= 'icons/obj/custom_items.dmi'
|
||||
icon_state = "hairflowerp"
|
||||
item_state = "hairflowerp"
|
||||
|
||||
|
||||
@@ -353,3 +353,16 @@
|
||||
icon = 'icons/obj/lavaland/ash_flora.dmi'
|
||||
icon_state = "mushroom_bowl"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bag
|
||||
name = "Drink bag"
|
||||
desc = "Normally put in wine boxes, or down pants at stadium events."
|
||||
icon_state = "goonbag"
|
||||
volume = 70
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bag/goonbag
|
||||
name = "Goon from a Blue Toolbox special edition"
|
||||
desc = "Wine from the land down under, where the dingos roam and the roos do wander."
|
||||
icon_state = "goonbag"
|
||||
list_reagents = list("wine" = 70)
|
||||
@@ -0,0 +1,166 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug
|
||||
name = "coffee mug"
|
||||
desc = "A mug for sipping hot beverages out of."
|
||||
icon = 'icons/obj/mugs.dmi'
|
||||
icon_state = "mug"
|
||||
var/novelty = FALSE
|
||||
var/preset = FALSE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/novelty
|
||||
name = "novelty coffee mug"
|
||||
desc = "A fun mug for your coffee or other hot beverage!"
|
||||
novelty = TRUE
|
||||
|
||||
/datum/novelty_mug
|
||||
var/name = "novelty coffee mug"
|
||||
var/description = "A fun mug for your coffee or other hot beverage!"
|
||||
var/state = "mug"
|
||||
|
||||
/datum/novelty_mug/peace
|
||||
name = "peaceful mug"
|
||||
description = "It's like... so peaceful, man."
|
||||
state = "mug_peace"
|
||||
|
||||
/datum/novelty_mug/fire
|
||||
name = "fire mug"
|
||||
description = "Caution: contents and design may be incredibly hot."
|
||||
state = "mug_fire"
|
||||
|
||||
/datum/novelty_mug/best
|
||||
name = "best mug"
|
||||
description = "By decree of this mug, you are the best!"
|
||||
state = "mug_best"
|
||||
|
||||
/datum/novelty_mug/best/New()
|
||||
var/locale = pick("Room's", "Department's", "Station's", "World's", "Sector's", "System's", "Galaxy's", "Universe's", "Multi-verse's", "Nanotrasen's", "Syndicate's")
|
||||
var/what = pick("Crewmember", "Spessman", "Employee", "Coffee", "Coffee-drinker", "Survivor", "Personality", "Lifeform", "Doctor", "Scientist", "Engineer", "Officer", "Civillian", "Captain", "Agent")
|
||||
name = "\"[locale] Best [what]\" mug"
|
||||
|
||||
/datum/novelty_mug/worst
|
||||
name = "worst mug"
|
||||
description = "By decree of this mug, you are the worst!"
|
||||
state = "mug_worst"
|
||||
|
||||
/datum/novelty_mug/worst/New()
|
||||
var/locale = pick("Room's", "Department's", "Station's", "World's", "Sector's", "System's", "Galaxy's", "Universe's", "Multi-verse's", "Nanotrasen's", "Syndicate's")
|
||||
var/what = pick("Crewmember", "Spessman", "Employee", "Coffee", "Coffee-drinker", "Survivor", "Personality", "Lifeform", "Doctor", "Scientist", "Engineer", "Officer", "Civillian", "Captain", "Agent")
|
||||
name = "\"[locale] Worst [what]\" mug"
|
||||
|
||||
/datum/novelty_mug/insult
|
||||
name = "insulting coffee mug"
|
||||
description = "How rude!"
|
||||
state = "mug_insult"
|
||||
|
||||
/datum/novelty_mug/insult/New()
|
||||
var/insult = pick("There isn't enough coffee to make you tolerable.", "I drink coffee so I can pretend to like people.", "I haven't had my coffee yet... What's your excuse?", "This coffee is more robust than you.", "Decaf is for weaklings like you.")
|
||||
description = "This one says:\"[insult]\""
|
||||
|
||||
/datum/novelty_mug/pda
|
||||
name = "PDA mug"
|
||||
description = "Finally, a use for one of these!"
|
||||
state = "mug_pda"
|
||||
|
||||
/datum/novelty_mug/rad
|
||||
name = "radioactive mug"
|
||||
description = "Is coffee supposed to be green... and glowing?"
|
||||
state = "mug_rad"
|
||||
|
||||
/datum/novelty_mug/tide
|
||||
name = "greytide mug"
|
||||
description = "This coffee packs almost as much of a punch as a toolbox to the face!"
|
||||
state = "mug_tide"
|
||||
|
||||
/datum/novelty_mug/happy
|
||||
name = "happy mug"
|
||||
description = "Even when you aren't, this mug helps you look happy around coworkers."
|
||||
state = "mug_happy"
|
||||
|
||||
/datum/novelty_mug/pills
|
||||
name = "prescription mug"
|
||||
description = "Prescription: caffeine. Dosage: As much as it takes."
|
||||
state = "mug_pills"
|
||||
|
||||
/datum/novelty_mug/rainbow
|
||||
name = "rainbow mug"
|
||||
description = "So mesmerizing!"
|
||||
state = "mug_rainbow"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/New()
|
||||
..()
|
||||
if(preset)
|
||||
return
|
||||
if(novelty)
|
||||
var/novelty_type = pick(subtypesof(/datum/novelty_mug))
|
||||
var/datum/novelty_mug/selected = new novelty_type
|
||||
name = selected.name
|
||||
desc = selected.description
|
||||
icon_state = selected.state
|
||||
else
|
||||
icon_state = pick("mug_black", "mug_white", "mug_red", "mug_blue", "mug_green", "mug_pink")
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/eng
|
||||
name = "engineer's mug"
|
||||
desc = "A mug engineered to hold your beverage... IN SPACE!"
|
||||
icon_state = "mug_eng"
|
||||
preset = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/med
|
||||
name = "doctor's mug"
|
||||
desc = "A mug that can hold the cure for what ails you!"
|
||||
icon_state = "mug_med"
|
||||
preset = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/sci
|
||||
name = "scientist's mug"
|
||||
desc = "Nothing fuels research like a coffee mug... or grant money!"
|
||||
icon_state = "mug_sci"
|
||||
preset = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/sec
|
||||
name = "officer's mug"
|
||||
desc = "The perfect partner for a sprinkled donut or stunbaton!"
|
||||
icon_state = "mug_sec"
|
||||
preset = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/serv
|
||||
name = "crewmember's mug"
|
||||
desc = "Serve your thirst better than you serve the rest of the crew!"
|
||||
icon_state = "mug_serv"
|
||||
preset = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/ce
|
||||
name = "chief engineer's mug"
|
||||
desc = "Broken and welded back together countless times, just like the station! Probably microwave safe."
|
||||
icon_state = "mug_ce"
|
||||
preset = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/hos
|
||||
name = "head of security's mug"
|
||||
desc = "If only your officers were as robust as this coffee's flavor!"
|
||||
icon_state = "mug_hos"
|
||||
preset = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/rd
|
||||
name = "research director's mug"
|
||||
desc = "Energy tech level: 99"
|
||||
icon_state = "mug_rd"
|
||||
preset = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/cmo
|
||||
name = "chief medical officer's mug"
|
||||
desc = "Fill it with something to keep you awake while you try to keep the crew alive."
|
||||
icon_state = "mug_cmo"
|
||||
preset = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/hop
|
||||
name = "head of personnel's mug"
|
||||
desc = "Are the stains on the bottom coffee or ink?"
|
||||
icon_state = "mug_hop"
|
||||
preset = TRUE
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mug/cap
|
||||
name = "captain's mug"
|
||||
desc = "An inscription on the side reads \"Best Captain 2559\"... The last time the station had a worthy captain."
|
||||
icon_state = "mug_cap"
|
||||
preset = TRUE
|
||||
@@ -1,3 +1,4 @@
|
||||
#define MAX_WEIGHT_CLASS WEIGHT_CLASS_SMALL * 2
|
||||
//Food items that are eaten normally and don't leave anything behind.
|
||||
/obj/item/weapon/reagent_containers/food/snacks
|
||||
name = "snack"
|
||||
@@ -14,6 +15,7 @@
|
||||
var/dry = 0
|
||||
var/cooktype[0]
|
||||
var/cooked_type = null //for microwave cooking. path of the resulting item after microwaving
|
||||
var/total_w_class = 0 //for the total weight an item of food can carry
|
||||
|
||||
|
||||
//Placeholder for effect that trigger on eating that aren't tied to reagents.
|
||||
@@ -131,6 +133,10 @@
|
||||
)
|
||||
inaccurate = 1
|
||||
else if(W.w_class <= WEIGHT_CLASS_SMALL && istype(src,/obj/item/weapon/reagent_containers/food/snacks/sliceable))
|
||||
if(total_w_class > MAX_WEIGHT_CLASS)
|
||||
// Nope, no bluespace slice food
|
||||
to_chat(user, "<span class='warning'>Something is already in [src]!</span>")
|
||||
return 1
|
||||
if(!iscarbon(user))
|
||||
return 1
|
||||
to_chat(user, "<span class='warning'>You slip [W] inside [src].</span>")
|
||||
@@ -138,6 +144,7 @@
|
||||
if((user.client && user.s_active != src))
|
||||
user.client.screen -= W
|
||||
W.dropped(user)
|
||||
total_w_class += W.w_class
|
||||
add_fingerprint(user)
|
||||
contents += W
|
||||
return
|
||||
@@ -2521,4 +2528,5 @@
|
||||
icon_state = "onionrings"
|
||||
list_reagents = list("nutriment" = 3)
|
||||
filling_color = "#C0C9A0"
|
||||
gender = PLURAL
|
||||
gender = PLURAL
|
||||
#undef MAX_WEIGHT_CLASS
|
||||
@@ -1668,6 +1668,41 @@
|
||||
G.icon_state = "grabbed1"
|
||||
G.synch()
|
||||
|
||||
/mob/living/carbon/human/proc/get_eyecon()
|
||||
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
|
||||
var/obj/item/organ/internal/cyberimp/eyes/eye_implant = get_int_organ(/obj/item/organ/internal/cyberimp/eyes)
|
||||
if(istype(species) && species.eyes)
|
||||
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', species.eyes)
|
||||
if(eye_implant) //Eye implants override native DNA eye colo(u)r
|
||||
eyes_icon = eye_implant.generate_icon()
|
||||
else if(eyes)
|
||||
eyes_icon = eyes.generate_icon()
|
||||
else
|
||||
eyes_icon.Blend("#800000", ICON_ADD)
|
||||
|
||||
return eyes_icon
|
||||
|
||||
/mob/living/carbon/human/proc/get_eye_shine() //Referenced cult constructs for shining in the dark. Needs to be above lighting effects such as shading.
|
||||
var/obj/item/organ/external/head/head_organ = get_organ("head")
|
||||
var/datum/sprite_accessory/hair/hair_style = hair_styles_full_list[head_organ.h_style]
|
||||
var/icon/hair = new /icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
|
||||
return image(get_icon_difference(get_eyecon(), hair), layer = LIGHTING_LAYER + 1) //Cut the hair's pixels from the eyes icon so eyes covered by bangs stay hidden even while on a higher layer.
|
||||
|
||||
/*Used to check if eyes should shine in the dark. Returns the image of the eyes on the layer where they will appear to shine.
|
||||
Eyes need to have significantly high darksight to shine unless the mob has the XRAY vision mutation. Eyes will not shine if they are covered in any way.*/
|
||||
/mob/living/carbon/human/proc/eyes_shine()
|
||||
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
|
||||
var/obj/item/organ/internal/cyberimp/eyes/eye_implant = get_int_organ(/obj/item/organ/internal/cyberimp/eyes)
|
||||
if(!(istype(eyes) || istype(eye_implant)))
|
||||
return FALSE
|
||||
if(!get_location_accessible(src, "eyes"))
|
||||
return FALSE
|
||||
if(!(eyes.shine()) && !istype(eye_implant) && !(XRAY in mutations)) //If their eyes don't shine, they don't have other augs, nor do they have X-RAY vision
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/proc/gut()
|
||||
set category = "Abilities"
|
||||
set name = "Gut"
|
||||
|
||||
@@ -170,9 +170,9 @@ I use this to standardize shadowling dethrall code
|
||||
-- Crazylemon
|
||||
*/
|
||||
/mob/living/carbon/human/proc/named_organ_parent(var/organ_name)
|
||||
if(!get_int_organ(organ_name))
|
||||
if(!get_int_organ_tag(organ_name))
|
||||
return null
|
||||
var/obj/item/organ/internal/O = get_int_organ(organ_name)
|
||||
var/obj/item/organ/internal/O = get_int_organ_tag(organ_name)
|
||||
return O.parent_organ
|
||||
|
||||
/mob/living/carbon/human/has_organic_damage()
|
||||
@@ -187,4 +187,4 @@ I use this to standardize shadowling dethrall code
|
||||
splinted_limbs.Cut()
|
||||
for(var/obj/item/organ/external/limb in bodyparts)
|
||||
if(limb.status & ORGAN_SPLINTED)
|
||||
splinted_limbs += limb
|
||||
splinted_limbs += limb
|
||||
|
||||
@@ -947,6 +947,8 @@
|
||||
|
||||
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
|
||||
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
|
||||
if(!head_organ)
|
||||
return
|
||||
head_organ.h_style = "Bald"
|
||||
head_organ.f_style = "Shaved"
|
||||
spawn(100)
|
||||
|
||||
@@ -105,6 +105,7 @@ Please contact me on #coderbus IRC. ~Carn x
|
||||
|
||||
/mob/living/carbon/human
|
||||
var/list/overlays_standing[TOTAL_LAYERS]
|
||||
var/list/misc_effect_overlays = list() //Overlays that are applied at a custom layer (defined in each image's .layer property) outside of standard overlay application. Updated in update_misc_effects()
|
||||
var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed
|
||||
var/icon/skeleton
|
||||
var/list/cached_standing_overlays = list() // List of everything currently in a human's actual overlays
|
||||
@@ -154,6 +155,10 @@ Please contact me on #coderbus IRC. ~Carn x
|
||||
I.layer = (-2 - (TOTAL_LAYERS - i)) // Highest layer gets -2, each prior layer is 1 lower
|
||||
new_overlays += I
|
||||
|
||||
update_misc_effects()
|
||||
if(misc_effect_overlays)
|
||||
new_overlays += misc_effect_overlays
|
||||
|
||||
if(frozen) // Admin freeze overlay
|
||||
new_overlays += frozen
|
||||
|
||||
@@ -1324,6 +1329,13 @@ var/global/list/damage_icon_parts = list()
|
||||
|
||||
if(update_icons) update_icons()
|
||||
|
||||
/mob/living/carbon/human/proc/update_misc_effects()
|
||||
misc_effect_overlays.Cut()
|
||||
|
||||
//Begin appending miscellaneous effects.
|
||||
if(eyes_shine())
|
||||
misc_effect_overlays += get_eye_shine() //Image layer is specified in get_eye_shine() proc as LIGHTING_LAYER + 1.
|
||||
|
||||
/mob/living/carbon/human/proc/force_update_limbs()
|
||||
for(var/obj/item/organ/external/O in bodyparts)
|
||||
O.sync_colour_to_human(src)
|
||||
|
||||
@@ -226,6 +226,27 @@ var/list/ai_verbs_default = list(
|
||||
|
||||
job = "AI"
|
||||
|
||||
/mob/living/silicon/ai/Stat()
|
||||
..()
|
||||
if(statpanel("Status"))
|
||||
if(stat)
|
||||
stat(null, text("Systems nonfunctional"))
|
||||
return
|
||||
show_borg_info()
|
||||
|
||||
/mob/living/silicon/ai/proc/show_borg_info()
|
||||
stat(null, text("Connected cyborgs: [connected_robots.len]"))
|
||||
for(var/mob/living/silicon/robot/R in connected_robots)
|
||||
var/robot_status = "Nominal"
|
||||
if(R.stat || !R.client)
|
||||
robot_status = "OFFLINE"
|
||||
else if(!R.cell || R.cell.charge <= 0)
|
||||
robot_status = "DEPOWERED"
|
||||
// Name, Health, Battery, Module, Area, and Status! Everything an AI wants to know about its borgies!
|
||||
var/area/A = get_area(R)
|
||||
stat(null, text("[R.name] | S.Integrity: [R.health]% | Cell: [R.cell ? "[R.cell.charge] / [R.cell.maxcharge]" : "Empty"] | \
|
||||
Module: [R.designation] | Loc: [sanitize(A.name)] | Status: [robot_status]"))
|
||||
|
||||
/mob/living/silicon/ai/rename_character(oldname, newname)
|
||||
if(!..(oldname, newname))
|
||||
return FALSE
|
||||
|
||||
@@ -769,6 +769,7 @@
|
||||
data["totalLoad"] = round(lastused_equip + lastused_light + lastused_environ)
|
||||
data["coverLocked"] = coverlocked
|
||||
data["siliconUser"] = istype(user, /mob/living/silicon)
|
||||
data["siliconLock"] = locked
|
||||
data["malfStatus"] = get_malf_status(user)
|
||||
|
||||
var/powerChannels[0]
|
||||
|
||||
@@ -27,7 +27,11 @@
|
||||
/obj/item/projectile/magic/death/on_hit(var/mob/living/carbon/G)
|
||||
. = ..()
|
||||
if(isliving(G))
|
||||
G.adjustFireLoss(3000)
|
||||
if(G.get_species() == "Machine") //speshul snowfleks deserv speshul treetment
|
||||
G.adjustFireLoss(6969) //remember - slimes love fire
|
||||
else
|
||||
G.death()
|
||||
|
||||
visible_message("<span class='danger'>[G] topples backwards as the death bolt impacts them!</span>")
|
||||
|
||||
/obj/item/projectile/magic/fireball/Range()
|
||||
@@ -293,4 +297,4 @@ proc/wabbajack(mob/living/M)
|
||||
damage_type = BURN
|
||||
flag = "magic"
|
||||
dismemberment = 50
|
||||
nodamage = 0
|
||||
nodamage = 0
|
||||
|
||||
@@ -41,7 +41,8 @@
|
||||
/obj/machinery/hydroponics,
|
||||
/obj/machinery/constructable_frame,
|
||||
/obj/machinery/icemachine,
|
||||
/obj/item/weapon/bombcore/chemical)
|
||||
/obj/item/weapon/bombcore/chemical,
|
||||
/obj/machinery/vending)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/New()
|
||||
..()
|
||||
|
||||
@@ -110,3 +110,9 @@
|
||||
desc = "Used to treat respiratory distress."
|
||||
icon_state = "pill8"
|
||||
list_reagents = list("salbutamol" = 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/pill/hydrocodone
|
||||
name = "Hydrocodone pill"
|
||||
desc = "Used to treat extreme pain."
|
||||
icon_state = "pill6"
|
||||
list_reagents = list("hydrocodone" = 15)
|
||||
@@ -18,6 +18,9 @@
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/insert(var/mob/living/carbon/M, var/special = 0)
|
||||
..()
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H) && eye_colour)
|
||||
H.update_body() //Apply our eye colour to the target.
|
||||
if(aug_message && !special)
|
||||
to_chat(owner, "<span class='notice'>[aug_message]</span>")
|
||||
M.update_sight()
|
||||
@@ -26,6 +29,15 @@
|
||||
. = ..()
|
||||
M.update_sight()
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/proc/generate_icon(var/mob/living/carbon/human/HA)
|
||||
var/mob/living/carbon/human/H = HA
|
||||
if(!istype(H))
|
||||
H = owner
|
||||
var/icon/cybereyes_icon = new /icon('icons/mob/human_face.dmi', H.species.eyes)
|
||||
cybereyes_icon.Blend(eye_colour, ICON_ADD) // Eye implants override native DNA eye color
|
||||
|
||||
return cybereyes_icon
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/emp_act(severity)
|
||||
if(!owner || emp_proof)
|
||||
return
|
||||
@@ -35,8 +47,6 @@
|
||||
to_chat(owner, "<span class='warning'>Static obfuscates your vision!</span>")
|
||||
owner.flash_eyes(visual = 1)
|
||||
|
||||
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/xray
|
||||
name = "X-ray implant"
|
||||
desc = "These cybernetic eye implants will give you X-ray vision. Blinking is futile."
|
||||
|
||||
@@ -337,6 +337,14 @@ I use this so that this can be made better once the organ overhaul rolls out --
|
||||
return 0
|
||||
return src == O.get_int_organ(organ_tag)
|
||||
|
||||
/obj/item/organ/proc/is_robotic(var/purist = FALSE)
|
||||
if(purist && (robotic > 1 || status & (ORGAN_ROBOT))) //Only the robotiest.
|
||||
return TRUE
|
||||
if(robotic || status & (ORGAN_ROBOT|ORGAN_ASSISTED)) //Any tech will do.
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
/obj/item/organ/serialize()
|
||||
var/data = ..()
|
||||
if(status != 0)
|
||||
|
||||
@@ -692,7 +692,6 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
|
||||
if(!owner)
|
||||
return
|
||||
var/is_robotic = status & ORGAN_ROBOT
|
||||
var/mob/living/carbon/human/victim = owner
|
||||
|
||||
if(status & ORGAN_SPLINTED)
|
||||
@@ -724,7 +723,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
victim.bodyparts_by_name[limb_name] = null // Remove from owner's vars.
|
||||
|
||||
//Robotic limbs explode if sabotaged.
|
||||
if(is_robotic && sabotaged)
|
||||
if(is_robotic() && sabotaged)
|
||||
victim.visible_message(
|
||||
"<span class='danger'>\The [victim]'s [src.name] explodes violently!</span>",\
|
||||
"<span class='danger'>Your [src.name] explodes!</span>",\
|
||||
|
||||
@@ -102,16 +102,8 @@ var/global/list/limb_icon_cache = list()
|
||||
return
|
||||
|
||||
if(species.has_organ["eyes"])
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
var/obj/item/organ/internal/cyberimp/eyes/eye_implant = owner.get_int_organ(/obj/item/organ/internal/cyberimp/eyes)
|
||||
if(species.eyes)
|
||||
var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', species.eyes)
|
||||
if(eye_implant) // Eye implants override native DNA eye color
|
||||
eyes_icon.Blend(eye_implant.eye_colour, ICON_ADD)
|
||||
else if(eyes)
|
||||
eyes_icon.Blend(eyes.eye_colour, ICON_ADD)
|
||||
else
|
||||
eyes_icon.Blend("#800000", ICON_ADD)
|
||||
var/icon/eyes_icon = owner.get_eyecon()
|
||||
if(eyes_icon)
|
||||
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
|
||||
overlays |= eyes_icon
|
||||
|
||||
|
||||
@@ -305,6 +305,15 @@
|
||||
/obj/item/organ/internal/eyes/proc/update_colour()
|
||||
dna.write_eyes_attributes(src)
|
||||
|
||||
/obj/item/organ/internal/eyes/proc/generate_icon(var/mob/living/carbon/human/HA)
|
||||
var/mob/living/carbon/human/H = HA
|
||||
if(!istype(H))
|
||||
H = owner
|
||||
var/icon/eyes_icon = new /icon('icons/mob/human_face.dmi', H.species.eyes)
|
||||
eyes_icon.Blend(eye_colour, ICON_ADD)
|
||||
|
||||
return eyes_icon
|
||||
|
||||
/obj/item/organ/internal/eyes/proc/get_colourmatrix() //Returns a special colour matrix if the eyes are organic and the mob is colourblind, otherwise it uses the current one.
|
||||
if(!robotic && owner.disabilities & COLOURBLIND)
|
||||
return colourblind_matrix
|
||||
@@ -314,6 +323,10 @@
|
||||
/obj/item/organ/internal/eyes/proc/get_dark_view() //Returns dark_view (if the eyes are organic) for see_invisible handling in species.dm to be autoprocessed by life().
|
||||
return dark_view
|
||||
|
||||
/obj/item/organ/internal/eyes/proc/shine()
|
||||
if(is_robotic() || (dark_view > EYE_SHINE_THRESHOLD))
|
||||
return TRUE
|
||||
|
||||
/obj/item/organ/internal/eyes/insert(mob/living/carbon/human/M, special = 0)
|
||||
..()
|
||||
if(istype(M) && eye_colour)
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
. = stored_mmi
|
||||
if(owner.mind)
|
||||
owner.mind.transfer_to(stored_mmi.brainmob)
|
||||
stored_mmi.forceMove(get_turf(src))
|
||||
stored_mmi.forceMove(get_turf(owner))
|
||||
stored_mmi = null
|
||||
..()
|
||||
qdel(src)
|
||||
|
||||
@@ -56,6 +56,61 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">06 March 2018</h2>
|
||||
<h3 class="author">Regen updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscdel">Removes the purple hair flower pin from loadout and general player access, because this is a fluff item.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">04 March 2018</h2>
|
||||
<h3 class="author">Funce updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">APC Interface lock UI works for silicons.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">03 March 2018</h2>
|
||||
<h3 class="author">Birdtalon updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">A few more items in the Psyche locker.</li>
|
||||
</ul>
|
||||
<h3 class="author">Citinited updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">IPCs can now lose russian roulette without going to nullspace</li>
|
||||
</ul>
|
||||
<h3 class="author">DarkPyrolord updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Sliceable food items are no longer hammerspace capable</li>
|
||||
</ul>
|
||||
<h3 class="author">FalseIncarnate updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds colored, departmental, and novelty mugs to the hot drinks machine and loadout menu under "Mugs".</li>
|
||||
<li class="rscadd">Adds Head of Staff coffee mugs to their respective lockers.</li>
|
||||
<li class="rscadd">Adds support for inserting items into vendors and having the vendor interact with said item when vending items.</li>
|
||||
<li class="rscadd">Adds the ability to insert containers into the hot drink machine, filling the container with your purchase.</li>
|
||||
</ul>
|
||||
<h3 class="author">Fethas updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">The booze o' mat now has wine..bags.</li>
|
||||
</ul>
|
||||
<h3 class="author">KasparoVy updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">The eyes of humanoids who have XRAY vision mutation, sufficiently high darkview, synthetic eyes or eye implants now appear to shine in the dark.</li>
|
||||
<li class="rscadd">Adds a way to 'cut' one icon's pixels out of another by using the get_icon_difference() proc.</li>
|
||||
<li class="bugfix">get_location_accessible() now checks the appropriate flags when determining the accessibility of eyes.</li>
|
||||
</ul>
|
||||
<h3 class="author">Serket updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Death Wand can kill slimes and hopefully everything</li>
|
||||
<li class="bugfix">Wizards can no longer mind-swap borgs</li>
|
||||
<li class="rscadd">ERT Specops Office now comes with extra privacy (borgs can't open the ERT mech room, etc.)</li>
|
||||
<li class="bugfix">Removed snow from Mr Chang's</li>
|
||||
<li class="bugfix">Fixed a dethralling error causing message typos</li>
|
||||
</ul>
|
||||
<h3 class="author">Tayyyyyyy updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">AIs can view info of their synced borgs in the status panel</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">26 February 2018</h2>
|
||||
<h3 class="author">Birdtalon updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -6085,3 +6085,43 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
2018-02-26:
|
||||
Birdtalon:
|
||||
- rscdel: Removes printing photos on security consoles.
|
||||
2018-03-03:
|
||||
Birdtalon:
|
||||
- tweak: A few more items in the Psyche locker.
|
||||
Citinited:
|
||||
- bugfix: IPCs can now lose russian roulette without going to nullspace
|
||||
DarkPyrolord:
|
||||
- bugfix: Sliceable food items are no longer hammerspace capable
|
||||
FalseIncarnate:
|
||||
- rscadd: Adds colored, departmental, and novelty mugs to the hot drinks machine
|
||||
and loadout menu under "Mugs".
|
||||
- rscadd: Adds Head of Staff coffee mugs to their respective lockers.
|
||||
- rscadd: Adds support for inserting items into vendors and having the vendor interact
|
||||
with said item when vending items.
|
||||
- rscadd: Adds the ability to insert containers into the hot drink machine, filling
|
||||
the container with your purchase.
|
||||
Fethas:
|
||||
- rscadd: The booze o' mat now has wine..bags.
|
||||
KasparoVy:
|
||||
- rscadd: The eyes of humanoids who have XRAY vision mutation, sufficiently high
|
||||
darkview, synthetic eyes or eye implants now appear to shine in the dark.
|
||||
- rscadd: Adds a way to 'cut' one icon's pixels out of another by using the get_icon_difference()
|
||||
proc.
|
||||
- bugfix: get_location_accessible() now checks the appropriate flags when determining
|
||||
the accessibility of eyes.
|
||||
Serket:
|
||||
- bugfix: Death Wand can kill slimes and hopefully everything
|
||||
- bugfix: Wizards can no longer mind-swap borgs
|
||||
- rscadd: ERT Specops Office now comes with extra privacy (borgs can't open the
|
||||
ERT mech room, etc.)
|
||||
- bugfix: Removed snow from Mr Chang's
|
||||
- bugfix: Fixed a dethralling error causing message typos
|
||||
Tayyyyyyy:
|
||||
- rscadd: AIs can view info of their synced borgs in the status panel
|
||||
2018-03-04:
|
||||
Funce:
|
||||
- bugfix: APC Interface lock UI works for silicons.
|
||||
2018-03-06:
|
||||
Regen:
|
||||
- rscdel: Removes the purple hair flower pin from loadout and general player access,
|
||||
because this is a fluff item.
|
||||
|
||||
|
Before Width: | Height: | Size: 99 KiB After Width: | Height: | Size: 99 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
@@ -4,7 +4,7 @@
|
||||
Interface Lock:
|
||||
</div>
|
||||
<div class="itemContentFull">
|
||||
{{:helper.link('Engaged', 'lock', {'toggleaccess' : 1}, data.locked ? 'selected' : null)}}{{:helper.link('Disengaged', 'unlock', {'toggleaccess' : 1}, data.malfStatus >= 2 ? 'linkOff' : (data.locked ? null : 'selected'))}}
|
||||
{{:helper.link('Engaged', 'lock', {'toggleaccess' : 1}, data.siliconLock ? 'selected' : null)}}{{:helper.link('Disengaged', 'unlock', {'toggleaccess' : 1}, data.malfStatus >= 2 ? 'linkOff' : (data.siliconLock ? null : 'selected'))}}
|
||||
</div>
|
||||
<div class="clearBoth"></div>
|
||||
{{else}}
|
||||
|
||||
@@ -33,6 +33,17 @@
|
||||
<div class='itemContent'>{{:helper.link(data.coin, 'eject', {'remove_coin' : 1})}}</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if data.item_slot == 1}}
|
||||
<h2>Item Slot</h2>
|
||||
<div class='item'>
|
||||
<div class='itemLabel'>Item Slot:</div>
|
||||
{{if data.inserted_item}}
|
||||
<div class='itemContent'>{{:helper.link(data.inserted_item, 'eject', {'remove_item' : 1})}}</div>
|
||||
{{else}}
|
||||
<div class='itemContent'>Empty</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{else data.mode == 1}} <!-- Payment screen -->
|
||||
<h2>Item selected</h2>
|
||||
<div class='item'>
|
||||
|
||||
@@ -1370,6 +1370,7 @@
|
||||
#include "code\modules\food_and_drinks\drinks\drinks\bottle.dm"
|
||||
#include "code\modules\food_and_drinks\drinks\drinks\cans.dm"
|
||||
#include "code\modules\food_and_drinks\drinks\drinks\drinkingglass.dm"
|
||||
#include "code\modules\food_and_drinks\drinks\drinks\mugs.dm"
|
||||
#include "code\modules\food_and_drinks\drinks\drinks\shotglass.dm"
|
||||
#include "code\modules\food_and_drinks\food\candy.dm"
|
||||
#include "code\modules\food_and_drinks\food\condiment.dm"
|
||||
|
||||