/obj/table
name = "table"
desc = "A metal table strong enough to support a substantial amount of weight, but easily made portable by unsecuring the bolts with a wrench."
icon = 'icons/obj/table.dmi'//'icons/obj/structures.dmi'
icon_state = "0"
density = 1
anchored = 1.0
flags = NOSPLASH
var/auto_type = /obj/table/auto
var/auto = 0
New()
..()
spawn(10)
if (src.auto)
if (ispath(src.auto_type) && src.icon_state == "0") // if someone's set up a special icon state don't mess with it
src.set_up()
spawn(1)
for (var/obj/table/T in orange(1))
if (T.auto)
T.set_up()
var/bonus = 0
for (var/obj/O in loc)
if (istype(O, /obj/item))
bonus += 4
if (istype(O, /obj/table) && O != src)
return
if (istype(O, /obj/rack))
return
var/area/Ar = get_area(src)
if (Ar)
Ar.sims_score = min(Ar.sims_score + bonus, 100)
proc/set_up()
if (!ispath(src.auto_type))
return
var/dirs = 0
for (var/direction in cardinal)
var/turf/T = get_step(src, direction)
if (locate(src.auto_type) in T)
dirs |= direction
icon_state = num2text(dirs)
//christ this is ugly
var/obj/table/SWT = locate(src.auto_type) in get_step(src, SOUTHWEST)
if (SWT)
var/obj/table/ST = locate(src.auto_type) in get_step(src, SOUTH)
var/obj/table/WT = locate(src.auto_type) in get_step(src, WEST)
if (ST && WT)
src.overlays += "SW"
var/obj/table/SET = locate(src.auto_type) in get_step(src, SOUTHEAST)
if (SET)
var/obj/table/ST = locate(src.auto_type) in get_step(src, SOUTH)
var/obj/table/ET = locate(src.auto_type) in get_step(src, EAST)
if (ST && ET)
src.overlays += "SE"
var/obj/table/NWT = locate(src.auto_type) in get_step(src, NORTHWEST)
if (NWT)
var/obj/table/NT = locate(src.auto_type) in get_step(src, NORTH)
var/obj/table/WT = locate(src.auto_type) in get_step(src, WEST)
if (NT && WT)
src.overlays += "NW"
var/obj/table/NET = locate(src.auto_type) in get_step(src, NORTHEAST)
if (NET)
var/obj/table/NT = locate(src.auto_type) in get_step(src, NORTH)
var/obj/table/ET = locate(src.auto_type) in get_step(src, EAST)
if (NT && ET)
src.overlays += "NE"
suicide(var/mob/user as mob) //if this is TOO ridiculous just remove it idc
user.visible_message("[user] contorts \himself so that \his head is underneath one of the [src.name]'s legs and \his heels are resting on top of it, then raises \his feet and slams them back down over and over again!")
user.TakeDamage("head", 175, 0)
user.updatehealth()
spawn(100)
if (user)
user.suiciding = 0
return 1
/obj/table/auto
auto = 1
/obj/table/round
icon = 'icons/obj/table_round.dmi'
auto
auto = 1
auto_type = /obj/table/round/auto
/obj/table/wood
name = "wooden table"
desc = "A table made from solid oak, which is quite rare in space."
icon = 'icons/obj/table_wood.dmi'
auto
auto = 1
auto_type = /obj/table/wood/auto
/obj/table/wood/round
icon = 'icons/obj/table_wood_round.dmi'
auto
auto = 1
auto_type = /obj/table/wood/round/auto
/obj/table/reinforced
name = "reinforced table"
desc = "A table made from reinforced metal, it is quite strong and it requires welding and wrenching to disassemble it."
icon = 'icons/obj/table_reinforced.dmi'
var/status = 2
auto
auto = 1
auto_type = /obj/table/reinforced/auto
/obj/table/reinforced/bar
name = "bar table"
desc = "A reinforced table with a faux wooden finish to make you feel at ease."
icon = 'icons/obj/table_bar.dmi'
auto
auto = 1
auto_type = /obj/table/reinforced/bar/auto
/* =================================================== */
/* -------------------- Auto-Join -------------------- */
/* =================================================== */
/*
/* ---------- Table ---------- */
/obj/table/auto
icon = 'icons/obj/table.dmi'
icon_state = "0"
New()
spawn(1)
src.set_up()
for (var/obj/table/auto/T in orange(1))
T.set_up()
..()
proc/set_up()
var/dirs = 0
for (var/direction in cardinal)
var/turf/T = get_step(src, direction)
if (locate(/obj/table/auto) in T)
dirs |= direction
icon_state = num2text(dirs)
/* ---------- Round ---------- */
/obj/table/round/auto
icon = 'icons/obj/table_round.dmi'
icon_state = "0"
New()
spawn(1)
src.set_up()
for (var/obj/table/round/auto/T in orange(1))
T.set_up()
..()
proc/set_up()
var/dirs = 0
for (var/direction in cardinal)
var/turf/T = get_step(src, direction)
if (locate(/obj/table/round/auto) in T)
dirs |= direction
icon_state = num2text(dirs)
/* ---------- Wood ---------- */
/obj/table/woodentable/auto
icon = 'icons/obj/table_wood.dmi'
icon_state = "0"
New()
spawn(1)
src.set_up()
for (var/obj/table/woodentable/auto/T in orange(1))
T.set_up()
..()
proc/set_up()
var/dirs = 0
for (var/direction in cardinal)
var/turf/T = get_step(src, direction)
if (locate(/obj/table/woodentable/auto) in T)
dirs |= direction
icon_state = num2text(dirs)
/* ---------- Round Wood ---------- */
/obj/table/woodentable/round/auto
icon = 'icons/obj/table_wood_round.dmi'
icon_state = "0"
New()
spawn(1)
src.set_up()
for (var/obj/table/woodentable/round/auto/T in orange(1))
T.set_up()
..()
proc/set_up()
var/dirs = 0
for (var/direction in cardinal)
var/turf/T = get_step(src, direction)
if (locate(/obj/table/woodentable/round/auto) in T)
dirs |= direction
icon_state = num2text(dirs)
/* ---------- Reinforced ---------- */
/obj/table/reinforced/auto
icon = 'icons/obj/table_reinforced.dmi'
icon_state = "0"
New()
spawn(1)
src.set_up()
for (var/obj/table/reinforced/auto/T in orange(1))
T.set_up()
..()
proc/set_up()
var/dirs = 0
for (var/direction in cardinal)
var/turf/T = get_step(src, direction)
if (locate(/obj/table/reinforced/auto) in T)
dirs |= direction
icon_state = num2text(dirs)
/* ---------- Bar ---------- */
/obj/table/reinforced/bar/auto
icon = 'icons/obj/table_bar.dmi'
icon_state = "0"
New()
spawn(1)
src.set_up()
for (var/obj/table/reinforced/bar/auto/T in orange(1))
T.set_up()
..()
proc/set_up()
var/dirs = 0
for (var/direction in cardinal)
var/turf/T = get_step(src, direction)
if (locate(/obj/table/reinforced/bar/auto) in T)
dirs |= direction
icon_state = num2text(dirs)
*/
/* ======================================== */
/* ---------------------------------------- */
/* ======================================== */
/obj/table/ex_act(severity)
switch(severity)
if(1.0)
//SN src = null
qdel(src)
return
if(2.0)
if (prob(50))
//SN src = null
qdel(src)
return
if(3.0)
if (prob(25))
src.density = 0
else
return
//
/obj/table/dispose()
var/turf/OL = get_turf(src)
loc = null
if (!OL)
return
if (!(locate(/obj/table) in OL) && !(locate(/obj/rack) in OL))
var/area/Ar = OL.loc
for (var/obj/item/I in OL)
Ar.sims_score -= 4
Ar.sims_score = max(Ar.sims_score, 0)
..()
/obj/table/blob_act(var/power)
if (prob(power * 2.5))
var/atom/A = new /obj/item/table_parts(src.loc)
if (src.material)
A.setMaterial(src.material)
qdel(src)
/obj/table/attack_hand(mob/user as mob)
if (user.bioHolder && user.bioHolder.HasEffect("hulk"))
user.visible_message("[user] destroys the table.")
if (istype(src, /obj/table/reinforced))
var/atom/A = new /obj/item/table_parts/reinforced(src.loc)
if (src.material)
A.setMaterial(src.material)
else
var/atom/A = new /obj/item/table_parts(src.loc)
if (src.material)
A.setMaterial(src.material)
src.density = 0
qdel(src)
if (ishuman(user))
var/mob/living/carbon/human/H = user
if (istype(H.w_uniform, /obj/item/clothing/under/misc/lawyer))
src.visible_message("[H] slams their palms against [src]!")
playsound(src.loc, "sound/misc/meteorimpact.ogg", 50, 1)
for (var/mob/N in AIviewers(usr, null))
if (N.client)
shake_camera(N, 4, 1, 0.5)
return
/obj/table/meteorhit()
if(istype(src, /obj/table/reinforced))
var/atom/A = new /obj/item/table_parts/reinforced( src.loc )
if(src.material) A.setMaterial(src.material)
else
var/atom/A = new /obj/item/table_parts( src.loc )
if(src.material) A.setMaterial(src.material)
qdel(src)
/obj/table/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
if ((mover.flags & TABLEPASS || istype(mover, /obj/newmeteor)) )
return 1
else
return 0
/obj/table/MouseDrop_T(obj/O as obj, mob/user as mob)
if (istype(O,/obj/item/satchel/))
if (O.contents.len < 1)
boutput(usr, "There's nothing in the satchel!")
else
user.visible_message("[user] dumps out [O]'s contents onto [src]!")
for(var/obj/item/I in O.contents) I.set_loc(src.loc)
O.desc = "A leather bag. It holds 0/[O:maxitems] [O:itemstring]."
O:satchel_updateicon()
return
if (isrobot(user) || (!( istype(O, /obj/item) ) || user.equipped() != O) || (O:cant_drop || O:cant_self_remove))
return
user.drop_item()
if (O.loc != src.loc)
step(O, get_dir(O, src))
return
/obj/table/proc/smash_bottle(var/mob/user as mob, var/obj/item/reagent_containers/food/drinks/bottle/bottle as obj)
if (!istype(bottle, /obj/item/reagent_containers/food/drinks/bottle) || user.a_intent != "harm")
return
if (issilicon(user) || !user.reagents)
return
var/turf/U = user.loc
var/damage = rand(5,15)
if (bottle.broken)
user.visible_message("[user] smashes [bottle] on [src]! [bottle] shatters completely!")
playsound(U, pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg'), 100, 1)
new /obj/item/raw_material/shard/glass(U)
bottle.reagents.reaction(U)
qdel(bottle)
if (prob (50))
user.visible_message("The broken shards of [bottle] slice up [user]'s hand!")
playsound(U, "sound/effects/splat.ogg", 50, 1)
random_brute_damage(user, damage)
take_bleeding_damage(user, user, damage)
return
if (bottle.unbreakable)
boutput(user, "[bottle] bounces uselessly off [src]!")
return
var/success_prob = 25
var/hurt_prob = 50
if (user.reagents.has_reagent("ethanol") && user.mind && user.mind.assigned_role == "Barman")
success_prob = 75
hurt_prob = 25
else if (user.mind && user.mind.assigned_role == "Barman")
success_prob = 50
hurt_prob = 10
else if (user.reagents.has_reagent("ethanol"))
success_prob = 75
hurt_prob = 75
if (prob(success_prob))
user.visible_message("[user] smashes [bottle] on [src], shattering it open![prob(50) ? " [user] looks like they're ready for a fight!" : " [bottle] has one mean edge on it!"]")
playsound(U, pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg'), 100, 1)
new /obj/item/raw_material/shard/glass(U)
bottle.broken = 1
bottle.reagents.reaction(U)
bottle.create_reagents(0)
bottle.update_icon()
else
user.visible_message("[user] smashes [bottle] on [src]! [bottle] shatters completely!")
playsound(U, pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg'), 100, 1)
new /obj/item/raw_material/shard/glass(U)
bottle.reagents.reaction(U)
qdel(bottle)
if (prob(hurt_prob))
user.visible_message("The broken shards of [bottle] slice up [user]'s hand!")
playsound(U, "sound/effects/splat.ogg", 50, 1)
random_brute_damage(user, damage)
take_bleeding_damage(user, user, damage)
/obj/table/attackby(obj/item/W as obj, mob/user as mob, params)
if (istype(W, /obj/item/grab))
var/obj/item/grab/G = W
if(!G.affecting || G.affecting.buckled)
return
if(!G.state)
boutput(usr, "You need a tighter grip!")
return
G.affecting.set_loc(src.loc)
G.affecting.weakened = 2
src.visible_message("[G.assailant] puts [G.affecting] on the table.")
if(G.affecting.bioHolder.HasEffect("fat")) // fatties crash through the table instead :V
var/atom/A = new /obj/item/table_parts( src.loc )
if(src.material) A.setMaterial(src.material)
qdel(src)
qdel(W)
return
else if (istype(W, /obj/item/wrench))
boutput(user, "Now disassembling table")
playsound(src.loc, "sound/items/Ratchet.ogg", 50, 1)
if(do_after(user,50))
var/atom/A = new /obj/item/table_parts( src.loc )
if(src.material) A.setMaterial(src.material)
playsound(src.loc, "sound/items/Deconstruct.ogg", 50, 1)
//SN src = null
qdel(src)
return
else if (istype(W, /obj/item/reagent_containers/food/drinks/bottle) && user.a_intent == "harm")
smash_bottle(user, W)
return
if (!isrobot(user))
user.drop_item()
if (W && W.loc && !(W.cant_drop || W.cant_self_remove))
W.set_loc(src.loc)
if (islist(params) && params["icon-y"] && params["icon-x"])
W.pixel_x = text2num(params["icon-x"]) - 16
W.pixel_y = text2num(params["icon-y"]) - 16
return
/obj/table/reinforced/attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/weldingtool) && W:welding)
var/turf/T = user.loc
if(src.status == 2)
boutput(user, "Now weakening the reinforced table")
playsound(src.loc, "sound/items/Welder.ogg", 50, 1)
sleep(50)
if ((user.loc == T && user.equipped() == W))
boutput(user, "Table weakened")
src.status = 1
else if((istype(user, /mob/living/silicon/robot) && (user.loc == T)))
boutput(user, "Table weakened")
src.status = 1
else
boutput(user, "Now strengthening the reinforced table")
playsound(src.loc, "sound/items/Welder.ogg", 50, 1)
sleep(50)
if ((user.loc == T && user.equipped() == W))
boutput(user, "Table strengthened")
src.status = 2
else if((istype(user, /mob/living/silicon/robot) && (user.loc == T)))
boutput(user, "Table strengthened")
src.status = 2
return
else if (istype(W, /obj/item/wrench))
var/turf/T = user.loc
if(src.status == 1)
boutput(user, "Now disassembling the reinforced table")
playsound(src.loc, "sound/items/Ratchet.ogg", 50, 1)
sleep(50)
if (user.loc == T)
var/atom/A = new /obj/item/table_parts/reinforced( src.loc )
if(src.material) A.setMaterial(src.material)
playsound(src.loc, "sound/items/Deconstruct.ogg", 50, 1)
qdel(src)
return
else
return ..()
// -------------------- VR --------------------
/obj/table/virtual
desc = "A simulated table. Fortunately the kind that's less of a pain in the ass to deal with."
icon = 'icons/effects/VR.dmi'
icon_state = "table"
// --------------------------------------------