mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-27 05:57:24 +01:00
Merge remote-tracking branch 'upstream/master' into embedding
This commit is contained in:
@@ -1,10 +1,3 @@
|
||||
/////////////////
|
||||
// NEW DEFINES //
|
||||
/////////////////
|
||||
|
||||
/client
|
||||
var/viewingCanvas = 0 //If this is 1, as soon as client /TRIES/ to move the view resets.
|
||||
|
||||
///////////
|
||||
// EASEL //
|
||||
///////////
|
||||
@@ -140,20 +133,4 @@ var/global/list/globalBlankCanvases[AMT_OF_CANVASES]
|
||||
icon = blank
|
||||
user.visible_message("<span class='notice'>[user] cleans the canvas.</span>","<span class='notice'>You clean the canvas.</span>")
|
||||
|
||||
//Examine to enlarge
|
||||
/obj/item/weapon/canvas/examine(mob/user)
|
||||
..(user)
|
||||
if(in_range(user, src) && get_turf(src) && user.client && ishuman(user)) //Let only humans be the robust zoominators. I'm too spooked other mobs trying to use it may get broken huds.
|
||||
if(src.loc == user || get_turf(src) == get_turf(user))
|
||||
to_chat(user, "<span class='notice'>[src] has to be on the ground to focus on it!</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You focus on \the [src].</span>")
|
||||
user.client.screen = list() //This is because screen objects go way past the view bounds we set, therefore not allowing stretch to fit to zoom in properly.
|
||||
user.client.reset_stretch = winget(user.client, "mapwindow.map", "icon-size") //Remember previous icon-size
|
||||
user.client.view = 3 //Decrease view
|
||||
winset(user.client, "mapwindow.map", "icon-size=0") //Enable stretch-to-fit
|
||||
user.client.viewingCanvas = 1 //Reset everything we just changed as soon as client tries to move
|
||||
else
|
||||
to_chat(user, "<span class='notice'>It is too far away.</span>")
|
||||
|
||||
#undef AMT_OF_CANVASES
|
||||
@@ -193,6 +193,9 @@
|
||||
L[tmpname] = R
|
||||
var/desc = input("Please select a telepad.", "RCS") in L
|
||||
E.pad = L[desc]
|
||||
if(!Adjacent(user))
|
||||
to_chat(user, "<span class='notice'>Unable to teleport, too far from crate.</span>")
|
||||
return
|
||||
playsound(E.loc, E.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>Teleporting [name]...</span>")
|
||||
E.teleporting = 1
|
||||
@@ -204,17 +207,22 @@
|
||||
to_chat(user, "<span class='warning'>Error: User located in container--aborting for safety.</span>")
|
||||
playsound(E.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
|
||||
return
|
||||
if(!(E.rcell && E.rcell.use(E.chargecost)))
|
||||
to_chat(user, "<span class='notice'>Unable to teleport, insufficient charge.</span>")
|
||||
return
|
||||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
do_teleport(src, E.pad, 0)
|
||||
E.rcell.use(E.chargecost)
|
||||
to_chat(user, "<span class='notice'>Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.</span>")
|
||||
return
|
||||
else
|
||||
E.rand_x = rand(50,200)
|
||||
E.rand_y = rand(50,200)
|
||||
var/L = locate(E.rand_x, E.rand_y, 6)
|
||||
if(!Adjacent(user))
|
||||
to_chat(user, "<span class='notice'>Unable to teleport, too far from crate.</span>")
|
||||
return
|
||||
playsound(E.loc, E.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>Teleporting [name]...</span>")
|
||||
E.teleporting = 1
|
||||
@@ -226,11 +234,13 @@
|
||||
to_chat(user, "<span class='warning'>Error: User located in container--aborting for safety.</span>")
|
||||
playsound(E.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
|
||||
return
|
||||
if(!(E.rcell && E.rcell.use(E.chargecost)))
|
||||
to_chat(user, "<span class='notice'>Unable to teleport, insufficient charge.</span>")
|
||||
return
|
||||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
do_teleport(src, L)
|
||||
E.rcell.use(E.chargecost)
|
||||
to_chat(user, "<span class='notice'>Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.</span>")
|
||||
return
|
||||
else
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/suit/hooded/nun(src)
|
||||
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
|
||||
new /obj/item/clothing/suit/hooded/monk(src)
|
||||
new /obj/item/clothing/suit/witchhunter(src)
|
||||
new /obj/item/clothing/head/witchhunter_hat(src)
|
||||
new /obj/item/clothing/suit/holidaypriest(src)
|
||||
new /obj/item/clothing/under/wedding/bride_white(src)
|
||||
new /obj/item/weapon/storage/backpack/cultpack (src)
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
new /obj/item/taperoll/engineering(src)
|
||||
new /obj/item/clothing/head/beret/eng(src)
|
||||
new /obj/item/weapon/door_remote/chief_engineer(src)
|
||||
new /obj/item/weapon/rpd(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/engineering_electrical
|
||||
name = "electrical supplies locker"
|
||||
@@ -143,3 +144,4 @@
|
||||
new /obj/item/weapon/watertank/atmos(src)
|
||||
new /obj/item/clothing/suit/fire/atmos(src)
|
||||
new /obj/item/clothing/head/hardhat/atmos(src)
|
||||
new /obj/item/weapon/rpd(src)
|
||||
|
||||
@@ -327,7 +327,7 @@
|
||||
new /obj/item/clothing/suit/storage/det_suit(src)
|
||||
new /obj/item/clothing/suit/storage/det_suit/forensics/blue(src)
|
||||
new /obj/item/clothing/suit/storage/det_suit/forensics/red(src)
|
||||
new /obj/item/clothing/gloves/color/black(src)
|
||||
new /obj/item/clothing/gloves/color/black/forensics(src)
|
||||
new /obj/item/clothing/head/det_hat(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/weapon/storage/box/evidence(src)
|
||||
|
||||
@@ -102,6 +102,9 @@
|
||||
L[tmpname] = R
|
||||
var/desc = input("Please select a telepad.", "RCS") in L
|
||||
E.pad = L[desc]
|
||||
if(!Adjacent(user))
|
||||
to_chat(user, "<span class='notice'>Unable to teleport, too far from crate.</span>")
|
||||
return
|
||||
playsound(E.loc, E.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>Teleporting [src.name]...</span>")
|
||||
E.teleporting = 1
|
||||
@@ -109,17 +112,23 @@
|
||||
E.teleporting = 0
|
||||
return
|
||||
E.teleporting = 0
|
||||
if(!(E.rcell && E.rcell.use(E.chargecost)))
|
||||
to_chat(user, "<span class='notice'>Unable to teleport, insufficient charge.</span>")
|
||||
return
|
||||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
do_teleport(src, E.pad, 0)
|
||||
E.rcell.use(E.chargecost)
|
||||
to_chat(user, "<span class='notice'>Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.</span>")
|
||||
return
|
||||
|
||||
else
|
||||
E.rand_x = rand(50,200)
|
||||
E.rand_y = rand(50,200)
|
||||
var/L = locate(E.rand_x, E.rand_y, 6)
|
||||
if(!Adjacent(user))
|
||||
to_chat(user, "<span class='notice'>Unable to teleport, too far from crate.</span>")
|
||||
return
|
||||
playsound(E.loc, E.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>Teleporting [src.name]...</span>")
|
||||
E.teleporting = 1
|
||||
@@ -127,11 +136,13 @@
|
||||
E.teleporting = 0
|
||||
return
|
||||
E.teleporting = 0
|
||||
if(!(E.rcell && E.rcell.use(E.chargecost)))
|
||||
to_chat(user, "<span class='notice'>Unable to teleport, insufficient charge.</span>")
|
||||
return
|
||||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
do_teleport(src, L)
|
||||
E.rcell.use(E.chargecost)
|
||||
to_chat(user, "<span class='notice'>Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left.</span>")
|
||||
return
|
||||
else
|
||||
|
||||
@@ -35,6 +35,44 @@
|
||||
icon_state = "open"
|
||||
layer = SHOWER_OPEN_LAYER
|
||||
|
||||
/obj/structure/curtain/attackby(obj/item/W, mob/user)
|
||||
if(istype(W, /obj/item/toy/crayon))
|
||||
color = input(user, "Choose Color") as color
|
||||
else if(isscrewdriver(W))
|
||||
if(anchored)
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] unscrews [src] from the floor.</span>", "<span class='notice'>You start to unscrew [src] from the floor...</span>", "You hear rustling noises.")
|
||||
if(do_after(user, 50 * W.toolspeed, target = src))
|
||||
if(!anchored)
|
||||
return
|
||||
anchored = FALSE
|
||||
to_chat(user, "<span class='notice'>You unscrew [src] from the floor.</span>")
|
||||
else
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] screws [src] to the floor.</span>", "<span class='notice'>You start to screw [src] to the floor...</span>", "You hear rustling noises.")
|
||||
if(do_after(user, 50 * W.toolspeed, target = src))
|
||||
if(anchored)
|
||||
return
|
||||
anchored = TRUE
|
||||
to_chat(user, "<span class='notice'>You screw [src] to the floor.</span>")
|
||||
else if(istype(W, /obj/item/weapon/wirecutters))
|
||||
if(!anchored)
|
||||
playsound(loc, W.usesound, 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] cuts apart [src].</span>", "<span class='notice'>You start to cut apart [src].</span>", "You hear cutting.")
|
||||
if(do_after(user, 50 * W.toolspeed, target = src))
|
||||
if(anchored)
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You cut apart [src].</span>")
|
||||
deconstruct()
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/obj/structure/curtain/proc/deconstruct(disassembled = TRUE)
|
||||
new /obj/item/stack/sheet/cloth(loc, 2)
|
||||
new /obj/item/stack/sheet/plastic(loc, 2)
|
||||
new /obj/item/stack/rods(loc, 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/curtain/black
|
||||
name = "black curtain"
|
||||
color = "#222222"
|
||||
@@ -59,4 +97,4 @@
|
||||
color = "#000066"
|
||||
|
||||
#undef SHOWER_OPEN_LAYER
|
||||
#undef SHOWER_CLOSED_LAYER
|
||||
#undef SHOWER_CLOSED_LAYER
|
||||
|
||||
@@ -105,19 +105,21 @@ var/global/list/captain_display_cases = list()
|
||||
var/ue = null
|
||||
var/image/occupant_overlay = null
|
||||
var/obj/item/weapon/airlock_electronics/circuit
|
||||
var/start_showpiece_type = null //add type for items on display
|
||||
|
||||
/obj/structure/displaycase/New()
|
||||
. = ..()
|
||||
if(start_showpiece_type)
|
||||
occupant = new start_showpiece_type(src)
|
||||
update_icon()
|
||||
|
||||
/obj/structure/displaycase/captains_laser
|
||||
name = "captain's display case"
|
||||
desc = "A display case for the captain's antique laser gun. Hooked up with an anti-theft system."
|
||||
burglar_alarm = 1
|
||||
|
||||
/obj/structure/displaycase/captains_laser/New()
|
||||
captain_display_cases += src
|
||||
req_access = list(access_captain)
|
||||
burglar_alarm = 1
|
||||
locked = 1
|
||||
spawn(5)
|
||||
occupant = new /obj/item/weapon/gun/energy/laser/captain(src)
|
||||
update_icon()
|
||||
req_access = list(access_captain)
|
||||
start_showpiece_type = /obj/item/weapon/gun/energy/laser/captain
|
||||
|
||||
/obj/structure/displaycase/Destroy()
|
||||
dump()
|
||||
@@ -259,7 +261,7 @@ var/global/list/captain_display_cases = list()
|
||||
if(W.flags & ABSTRACT)
|
||||
to_chat(user, "<span class='danger'>You can't put this into the case.</span>")
|
||||
return
|
||||
if(user.a_intent == I_HARM)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
if(locked && !destroyed)
|
||||
src.health -= W.force
|
||||
src.healthcheck()
|
||||
@@ -283,14 +285,14 @@ var/global/list/captain_display_cases = list()
|
||||
update_icon()
|
||||
|
||||
/obj/structure/displaycase/attack_hand(mob/user as mob)
|
||||
if(destroyed || (!locked && user.a_intent == I_HARM))
|
||||
if(destroyed || (!locked && user.a_intent == INTENT_HARM))
|
||||
if(occupant)
|
||||
dump()
|
||||
to_chat(user, "<span class='danger'>You smash your fist into the delicate electronics at the bottom of the case, and deactivate the hover field.</span>")
|
||||
src.add_fingerprint(user)
|
||||
update_icon()
|
||||
else
|
||||
if(user.a_intent == I_HARM)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.do_attack_animation(src)
|
||||
user.visible_message("<span class='danger'>[user.name] kicks \the [src]!</span>", \
|
||||
@@ -317,8 +319,9 @@ var/global/list/captain_display_cases = list()
|
||||
else
|
||||
to_chat(src, "[bicon(src)] <span class='warning'>\The [src] is empty!</span>")
|
||||
else
|
||||
user.visible_message("[user.name] gently runs his hands over \the [src] in appreciation of its contents.", \
|
||||
"You gently run your hands over \the [src] in appreciation of its contents.", \
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.visible_message("[user.name] gently runs \his hands over [src] in appreciation of its contents.", \
|
||||
"You gently run your hands over [src] in appreciation of its contents.", \
|
||||
"You hear someone streaking glass with their greasy hands.")
|
||||
|
||||
#undef DISPLAYCASE_FRAME_CIRCUIT
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
if(do_after(user, digTool.digspeed * hardness, target = src) && src)
|
||||
to_chat(user, "<span class='notice'>You finished digging.</span>")
|
||||
deconstruct(TRUE)
|
||||
else if(user.a_intent != I_HARM)
|
||||
else if(user.a_intent != INTENT_HARM)
|
||||
attack_hand(user)
|
||||
else
|
||||
attacked_by(W, user)
|
||||
|
||||
@@ -102,8 +102,7 @@
|
||||
if(!( A.anchored ))
|
||||
A.forceMove(src)
|
||||
playsound(loc, open_sound, 50, 1)
|
||||
qdel(connected)
|
||||
connected = null
|
||||
QDEL_NULL(connected)
|
||||
else
|
||||
playsound(loc, open_sound, 50, 1)
|
||||
connected = new /obj/structure/m_tray( loc )
|
||||
@@ -118,8 +117,7 @@
|
||||
connected.icon_state = "morguet"
|
||||
connected.dir = dir
|
||||
else
|
||||
qdel(connected)
|
||||
connected = null
|
||||
QDEL_NULL(connected)
|
||||
add_fingerprint(user)
|
||||
update()
|
||||
return
|
||||
@@ -155,8 +153,7 @@
|
||||
A.forceMove(connected.loc)
|
||||
connected.icon_state = "morguet"
|
||||
else
|
||||
qdel(connected)
|
||||
connected = null
|
||||
QDEL_NULL(connected)
|
||||
return
|
||||
|
||||
/obj/structure/morgue/Destroy()
|
||||
@@ -306,8 +303,7 @@
|
||||
if(!( A.anchored ))
|
||||
A.forceMove(src)
|
||||
playsound(loc, open_sound, 50, 1)
|
||||
qdel(connected)
|
||||
connected = null
|
||||
QDEL_NULL(connected)
|
||||
else if(locked == 0)
|
||||
playsound(loc, open_sound, 50, 1)
|
||||
connected = new /obj/structure/c_tray( loc )
|
||||
@@ -321,8 +317,7 @@
|
||||
A.forceMove(connected.loc)
|
||||
connected.icon_state = "cremat"
|
||||
else
|
||||
qdel(connected)
|
||||
connected = null
|
||||
QDEL_NULL(connected)
|
||||
add_fingerprint(user)
|
||||
update()
|
||||
|
||||
@@ -355,8 +350,7 @@
|
||||
A.forceMove(connected.loc)
|
||||
connected.icon_state = "cremat"
|
||||
else
|
||||
qdel(connected)
|
||||
connected = null
|
||||
QDEL_NULL(connected)
|
||||
return
|
||||
|
||||
/obj/structure/crematorium/proc/cremate(mob/user as mob)
|
||||
|
||||
@@ -182,10 +182,15 @@
|
||||
icon_state = "nuke"
|
||||
|
||||
/obj/structure/sign/clown
|
||||
name = "\improper mech painting"
|
||||
name = "\improper clown painting"
|
||||
desc = "A painting of the clown and mime. Awwww."
|
||||
icon_state = "clown"
|
||||
|
||||
/obj/structure/sign/bobross
|
||||
name = "\improper calming painting"
|
||||
desc = "We don't make mistakes, just happy little accidents."
|
||||
icon_state = "bob"
|
||||
|
||||
/obj/structure/sign/singulo
|
||||
name = "\improper singulo painting"
|
||||
desc = "A mesmerizing painting of a singularity. It seems to suck you in..."
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
burntime = 30
|
||||
buildstackamount = 2
|
||||
var/movable = 0 // For mobility checks
|
||||
buckle_offset = -6
|
||||
|
||||
/obj/structure/stool/bed/MouseDrop(atom/over_object)
|
||||
..(over_object, skip_fucking_stool_shit = 1)
|
||||
@@ -36,6 +37,7 @@
|
||||
anchored = 0
|
||||
buildstackamount = 10
|
||||
buildstacktype = /obj/item/stack/sheet/wood
|
||||
buckle_offset = 0
|
||||
|
||||
/obj/structure/stool/bed/dogbed/ian
|
||||
name = "Ian's bed"
|
||||
@@ -139,5 +141,4 @@
|
||||
to_chat(user, "<span class='notice'>You deploy the roller bed.</span>")
|
||||
var/obj/structure/stool/bed/roller/R = new /obj/structure/stool/bed/roller(user.loc)
|
||||
R.add_fingerprint(user)
|
||||
qdel(held)
|
||||
held = null
|
||||
QDEL_NULL(held)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
buckle_lying = 0 //you sit in a chair, not lay
|
||||
burn_state = FIRE_PROOF
|
||||
buildstackamount = 1
|
||||
|
||||
buckle_offset = 0
|
||||
var/propelled = 0 // Check for fire-extinguisher-driven chairs
|
||||
|
||||
/obj/structure/stool/bed/chair/New()
|
||||
|
||||
@@ -412,6 +412,35 @@
|
||||
/obj/structure/table/woodentable/poker/narsie_act()
|
||||
return
|
||||
|
||||
/*
|
||||
* Fancy Tables
|
||||
*/
|
||||
|
||||
/obj/structure/table/wood/fancy
|
||||
name = "fancy table"
|
||||
desc = "A standard metal table frame covered with an amazingly fancy, patterned cloth."
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "fancy_table"
|
||||
parts = /obj/item/weapon/table_parts/fancy
|
||||
canSmoothWith = list(/obj/structure/table/wood/fancy, /obj/structure/table/wood/fancy/black)
|
||||
|
||||
/obj/structure/table/wood/fancy/New()
|
||||
icon = 'icons/obj/smooth_structures/fancy_table.dmi' //so that the tables place correctly in the map editor
|
||||
..()
|
||||
|
||||
/obj/structure/table/wood/fancy/black
|
||||
icon_state = "fancy_table_black"
|
||||
parts = /obj/item/weapon/table_parts/fancy/black
|
||||
|
||||
/obj/structure/table/wood/fancy/black/New()
|
||||
..()
|
||||
icon = 'icons/obj/smooth_structures/fancy_table_black.dmi' //so that the tables place correctly in the map editor
|
||||
|
||||
|
||||
/*
|
||||
* Glass Tables
|
||||
*/
|
||||
|
||||
/obj/structure/glasstable_frame
|
||||
name = "glass table frame"
|
||||
desc = "A metal frame for a glass table."
|
||||
|
||||
@@ -120,6 +120,15 @@
|
||||
to_chat(user, "<span class='notice'>You carefully place [I] into the cistern.</span>")
|
||||
return
|
||||
|
||||
/obj/structure/toilet/secret
|
||||
var/secret_type = null
|
||||
|
||||
/obj/structure/toilet/secret/New()
|
||||
. = ..()
|
||||
if(secret_type)
|
||||
var/obj/item/secret = new secret_type(src)
|
||||
secret.desc += " It's a secret!"
|
||||
w_items += secret.w_class
|
||||
|
||||
|
||||
/obj/structure/urinal
|
||||
|
||||
@@ -247,6 +247,9 @@ obj/structure/windoor_assembly/Destroy()
|
||||
if(do_after(user, 40 * W.toolspeed, target = src))
|
||||
|
||||
if(src.loc && src.electronics)
|
||||
for(var/obj/machinery/door/window/WD in loc)
|
||||
if(WD.dir == dir)
|
||||
return
|
||||
|
||||
density = 1 //Shouldn't matter but just incase
|
||||
to_chat(user, "<span class='notice'>You finish the windoor!</span>")
|
||||
|
||||
@@ -133,7 +133,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!"))
|
||||
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
|
||||
destroy()
|
||||
else if(user.a_intent == I_HARM)
|
||||
else if(user.a_intent == INTENT_HARM)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1)
|
||||
user.visible_message("<span class='warning'>[user.name] bangs against the [src.name]!</span>", \
|
||||
|
||||
Reference in New Issue
Block a user