mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 11:13:16 +00:00
Disposals are now much more robust, with sorters being program-able, food able to be packaged, people able to flush closets, proper construction of sorters, and a function on taggers to use a custom tag.
In addition: Made teleport talismans more amusing. Fixed duplicate traitor objectives.
This commit is contained in:
@@ -83,23 +83,34 @@
|
|||||||
traitor.objectives += block_objective
|
traitor.objectives += block_objective
|
||||||
|
|
||||||
else
|
else
|
||||||
|
var/list/target = traitor.objectives
|
||||||
for(var/i = 1, i <= rand(1,3), i++)
|
for(var/i = 1, i <= rand(1,3), i++)
|
||||||
|
var/datum/objective/objective
|
||||||
switch(rand(1,100))
|
switch(rand(1,100))
|
||||||
if(1 to 30)
|
if(1 to 30)
|
||||||
var/datum/objective/assassinate/kill_objective = new
|
var/datum/objective/assassinate/kill_objective = new
|
||||||
kill_objective.owner = traitor
|
kill_objective.owner = traitor
|
||||||
kill_objective.find_target()
|
kill_objective.find_target()
|
||||||
traitor.objectives += kill_objective
|
objective = kill_objective
|
||||||
if(31 to 40)
|
if(31 to 40)
|
||||||
var/datum/objective/protect/protect_objective = new
|
var/datum/objective/protect/protect_objective = new
|
||||||
protect_objective.owner = traitor
|
protect_objective.owner = traitor
|
||||||
protect_objective.find_target()
|
protect_objective.find_target()
|
||||||
traitor.objectives += protect_objective
|
objective = protect_objective
|
||||||
else
|
else
|
||||||
var/datum/objective/steal/steal_objective = new
|
var/datum/objective/steal/steal_objective = new
|
||||||
steal_objective.owner = traitor
|
steal_objective.owner = traitor
|
||||||
steal_objective.find_target()
|
steal_objective.find_target()
|
||||||
traitor.objectives += steal_objective
|
objective = steal_objective
|
||||||
|
var/inthere = 0
|
||||||
|
for(var/j, j<= target.len, j++)
|
||||||
|
if(target[j] == objective)
|
||||||
|
inthere = 1
|
||||||
|
break
|
||||||
|
if(!inthere)
|
||||||
|
traitor.objectives += objective
|
||||||
|
else
|
||||||
|
i -= 1
|
||||||
if (!(locate(/datum/objective/escape) in traitor.objectives))
|
if (!(locate(/datum/objective/escape) in traitor.objectives))
|
||||||
var/datum/objective/escape/escape_objective = new
|
var/datum/objective/escape/escape_objective = new
|
||||||
escape_objective.owner = traitor
|
escape_objective.owner = traitor
|
||||||
|
|||||||
@@ -119,6 +119,8 @@
|
|||||||
<A href='?src=\ref[src];dmake=2'>Junction</A><BR>
|
<A href='?src=\ref[src];dmake=2'>Junction</A><BR>
|
||||||
<A href='?src=\ref[src];dmake=3'>Y-Junction</A><BR>
|
<A href='?src=\ref[src];dmake=3'>Y-Junction</A><BR>
|
||||||
<A href='?src=\ref[src];dmake=4'>Trunk</A><BR>
|
<A href='?src=\ref[src];dmake=4'>Trunk</A><BR>
|
||||||
|
<A href='?src=\ref[src];dmake=5'>Sort Junction 1</A><BR>
|
||||||
|
<A href='?src=\ref[src];dmake=6'>Sort Junction 2</A><BR>
|
||||||
"}
|
"}
|
||||||
|
|
||||||
user << browse("<HEAD><TITLE>[src]</TITLE></HEAD><TT>[dat]</TT>", "window=pipedispenser")
|
user << browse("<HEAD><TITLE>[src]</TITLE></HEAD><TT>[dat]</TT>", "window=pipedispenser")
|
||||||
@@ -147,6 +149,10 @@
|
|||||||
C.ptype = 4
|
C.ptype = 4
|
||||||
if(4)
|
if(4)
|
||||||
C.ptype = 5
|
C.ptype = 5
|
||||||
|
if(5)
|
||||||
|
C.ptype = 6
|
||||||
|
if(6)
|
||||||
|
C.ptype = 7
|
||||||
|
|
||||||
C.update()
|
C.update()
|
||||||
wait = 1
|
wait = 1
|
||||||
|
|||||||
@@ -5,6 +5,13 @@ var/list/sacrificed = list()
|
|||||||
proc
|
proc
|
||||||
teleport(var/key)
|
teleport(var/key)
|
||||||
var/mob/living/user = usr
|
var/mob/living/user = usr
|
||||||
|
var/mob/living/grabbed
|
||||||
|
if (istype(user.get_active_hand(), /obj/item/weapon/grab))
|
||||||
|
var/obj/item/weapon/grab/G = user.get_active_hand()
|
||||||
|
grabbed = G.affecting
|
||||||
|
else if (istype(user.get_inactive_hand(), /obj/item/weapon/grab))
|
||||||
|
var/obj/item/weapon/grab/G = user.get_inactive_hand()
|
||||||
|
grabbed = G.affecting
|
||||||
var/allrunesloc[]
|
var/allrunesloc[]
|
||||||
allrunesloc = new/list()
|
allrunesloc = new/list()
|
||||||
var/index = 0
|
var/index = 0
|
||||||
@@ -17,7 +24,7 @@ var/list/sacrificed = list()
|
|||||||
allrunesloc.len = index
|
allrunesloc.len = index
|
||||||
allrunesloc[index] = R.loc
|
allrunesloc[index] = R.loc
|
||||||
if(index >= 5)
|
if(index >= 5)
|
||||||
user << "\red You feel pain, as rune disappears in reality shift caused by too much wear of space-time fabric"
|
user << "\red You feel pain, as the rune disappears into a reality shift caused by too much wear on the fabric of space-time."
|
||||||
if (istype(user, /mob/living))
|
if (istype(user, /mob/living))
|
||||||
user.take_overall_damage(5, 0)
|
user.take_overall_damage(5, 0)
|
||||||
del(src)
|
del(src)
|
||||||
@@ -29,7 +36,10 @@ var/list/sacrificed = list()
|
|||||||
user.visible_message("\red [user] disappears in a flash of red light!", \
|
user.visible_message("\red [user] disappears in a flash of red light!", \
|
||||||
"\red You feel as your body gets dragged through the dimension of Nar-Sie!", \
|
"\red You feel as your body gets dragged through the dimension of Nar-Sie!", \
|
||||||
"\red You hear a sickening crunch and sloshing of viscera.")
|
"\red You hear a sickening crunch and sloshing of viscera.")
|
||||||
user.loc = allrunesloc[rand(1,index)]
|
var/target = rand(1,index)
|
||||||
|
user.loc = allrunesloc[target]
|
||||||
|
if(grabbed)
|
||||||
|
grabbed.loc = allrunesloc[target]
|
||||||
return
|
return
|
||||||
if(istype(src,/obj/effect/rune))
|
if(istype(src,/obj/effect/rune))
|
||||||
return fizzle() //Use friggin manuals, Dorf, your list was of zero length.
|
return fizzle() //Use friggin manuals, Dorf, your list was of zero length.
|
||||||
|
|||||||
@@ -123,6 +123,7 @@
|
|||||||
var/obj/effect/bigDelivery/P = new /obj/effect/bigDelivery(get_turf(src.loc))
|
var/obj/effect/bigDelivery/P = new /obj/effect/bigDelivery(get_turf(src.loc))
|
||||||
P.wrapped = src
|
P.wrapped = src
|
||||||
src.close()
|
src.close()
|
||||||
|
P.waswelded = welded
|
||||||
src.welded = 1
|
src.welded = 1
|
||||||
src.loc = P
|
src.loc = P
|
||||||
O.amount -= 3
|
O.amount -= 3
|
||||||
@@ -185,6 +186,19 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
if(!src.open())
|
if(!src.open())
|
||||||
|
if(istype(src.loc,/obj/effect/bigDelivery) && lastbang == 0)
|
||||||
|
var/obj/effect/bigDelivery/Pack = src.loc
|
||||||
|
if(istype(Pack.loc,/turf) && Pack.waswelded == 0)
|
||||||
|
for (var/mob/M in hearers(src.loc, null))
|
||||||
|
M << text("<FONT size=[] color=#6D3F40>BANG, bang, rrrrrip!</FONT>", max(0, 5 - get_dist(src, M)))
|
||||||
|
lastbang = 1
|
||||||
|
sleep(10)
|
||||||
|
src.welded = 0
|
||||||
|
Pack.unwrap()
|
||||||
|
src.open()
|
||||||
|
spawn(30)
|
||||||
|
lastbang = 0
|
||||||
|
else if(!istype(src.loc,/obj/effect/bigDelivery))
|
||||||
user << "\blue It won't budge!"
|
user << "\blue It won't budge!"
|
||||||
if(!lastbang)
|
if(!lastbang)
|
||||||
lastbang = 1
|
lastbang = 1
|
||||||
|
|||||||
@@ -675,6 +675,21 @@
|
|||||||
R.my_atom = src
|
R.my_atom = src
|
||||||
|
|
||||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
|
if (istype(W, /obj/item/weapon/packageWrap))
|
||||||
|
if(istype(src.loc,/obj/item/weapon/storage) || istype(src.loc,/obj/item/clothing/suit/storage/)) //Taking stuff out of storage duplicates it.
|
||||||
|
user << "\blue Do not do this, it is broken as all hell. Take it out of the container first."
|
||||||
|
return
|
||||||
|
for(var/obj/item/T in user) //Lets remove it from their inventory
|
||||||
|
if(T == src)
|
||||||
|
user.remove_from_mob(T)
|
||||||
|
break
|
||||||
|
var/obj/item/weapon/packageWrap/O = W
|
||||||
|
if (O.amount > 1)
|
||||||
|
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(src.loc))
|
||||||
|
P.wrapped = src
|
||||||
|
|
||||||
|
src.loc = P
|
||||||
|
O.amount -= 1
|
||||||
return
|
return
|
||||||
attack_self(mob/user as mob)
|
attack_self(mob/user as mob)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -150,6 +150,15 @@
|
|||||||
var/obj/structure/disposalpipe/P = new pipetype(src.loc)
|
var/obj/structure/disposalpipe/P = new pipetype(src.loc)
|
||||||
P.base_icon_state = base_state
|
P.base_icon_state = base_state
|
||||||
P.dir = dir
|
P.dir = dir
|
||||||
|
if(ptype >= 6)
|
||||||
|
var/obj/structure/disposalpipe/sortjunction/V = P
|
||||||
|
V.posdir = dir
|
||||||
|
if(ptype == 6)
|
||||||
|
V.sortdir = turn(dir, -90)
|
||||||
|
V.negdir = turn(dir, 180)
|
||||||
|
else
|
||||||
|
V.sortdir = turn(dir, 90)
|
||||||
|
V.negdir = turn(dir, 180)
|
||||||
P.dpdir = dpdir
|
P.dpdir = dpdir
|
||||||
P.updateicon()
|
P.updateicon()
|
||||||
del(src)
|
del(src)
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
var/obj/structure/disposalpipe/trunk/trunk = null // the attached pipe trunk
|
var/obj/structure/disposalpipe/trunk/trunk = null // the attached pipe trunk
|
||||||
var/flushing = 0 // true if flushing in progress
|
var/flushing = 0 // true if flushing in progress
|
||||||
var/timeleft = 0 //used to give a delay after the last item was put in before flushing
|
var/timeleft = 0 //used to give a delay after the last item was put in before flushing
|
||||||
|
var/islarge = 0 //If there is a crate, lets not add a second.
|
||||||
|
|
||||||
// create a new disposal
|
// create a new disposal
|
||||||
// find the attached trunk (if present) and init gas resvr.
|
// find the attached trunk (if present) and init gas resvr.
|
||||||
@@ -112,10 +113,16 @@
|
|||||||
|
|
||||||
// mouse drop another mob or self
|
// mouse drop another mob or self
|
||||||
//
|
//
|
||||||
MouseDrop_T(mob/target, mob/user)
|
MouseDrop_T(var/atom/movable/T, mob/user)
|
||||||
|
if (istype(T,/mob))
|
||||||
|
var/mob/target = T
|
||||||
if (!istype(target) || target.buckled || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.stat || istype(user, /mob/living/silicon/ai))
|
if (!istype(target) || target.buckled || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.stat || istype(user, /mob/living/silicon/ai))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if(src.islarge == 1)
|
||||||
|
user << "They won't fit with that crate in there!"
|
||||||
|
return
|
||||||
|
|
||||||
var/msg
|
var/msg
|
||||||
for (var/mob/V in viewers(usr))
|
for (var/mob/V in viewers(usr))
|
||||||
if(target == user && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
|
if(target == user && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
|
||||||
@@ -125,8 +132,7 @@
|
|||||||
V.show_message("[usr] starts stuffing [target.name] into the disposal.", 3)
|
V.show_message("[usr] starts stuffing [target.name] into the disposal.", 3)
|
||||||
if(!do_after(usr, 20))
|
if(!do_after(usr, 20))
|
||||||
return
|
return
|
||||||
if(target == user && !user.stat && !user.weakened && !user.stunned && !user.paralysis) // if drop self, then climbed in
|
if(target == user && !user.stat && !user.weakened && !user.stunned && !user.paralysis) // if drop self, then climbed in // must be awake, not stunned or whatever
|
||||||
// must be awake, not stunned or whatever
|
|
||||||
msg = "[user.name] climbs into the [src]."
|
msg = "[user.name] climbs into the [src]."
|
||||||
user << "You climb into the [src]."
|
user << "You climb into the [src]."
|
||||||
else if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
|
else if(target != user && !user.restrained() && !user.stat && !user.weakened && !user.stunned && !user.paralysis)
|
||||||
@@ -147,6 +153,43 @@
|
|||||||
timeleft = 5
|
timeleft = 5
|
||||||
update()
|
update()
|
||||||
return
|
return
|
||||||
|
if(istype(T,/obj/effect/bigDelivery))
|
||||||
|
if (T.anchored || get_dist(user, src) > 1 || get_dist(src,T) > 2 )
|
||||||
|
return
|
||||||
|
|
||||||
|
if(src.islarge == 1)
|
||||||
|
user << "[T] won't fit with that crate in there!"
|
||||||
|
return
|
||||||
|
|
||||||
|
for(var/mob/M in viewers(src))
|
||||||
|
if(M == user)
|
||||||
|
user << "You start to shove \the [T] into the [src]."
|
||||||
|
continue
|
||||||
|
M.show_message("[user.name] looks like they're trying to place \the [T] into the [src].", 5)
|
||||||
|
|
||||||
|
if(!do_after(usr, 20))
|
||||||
|
return
|
||||||
|
|
||||||
|
user << "Your back is starting to hurt!"
|
||||||
|
sleep(5)
|
||||||
|
if(prob(50))
|
||||||
|
user << "No way can you get this thing in there."
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!do_after(usr, 20))
|
||||||
|
return
|
||||||
|
|
||||||
|
T.loc = src
|
||||||
|
src.islarge = 1
|
||||||
|
for(var/mob/M in viewers(src))
|
||||||
|
if(M == user)
|
||||||
|
user << "You shove \the [T] into the [src]."
|
||||||
|
continue
|
||||||
|
M.show_message("[user.name] manages to stuff \the [T] into the [src]. Impressive!", 5)
|
||||||
|
return
|
||||||
|
|
||||||
|
else
|
||||||
|
return
|
||||||
|
|
||||||
// can breath normally in the disposal
|
// can breath normally in the disposal
|
||||||
alter_health()
|
alter_health()
|
||||||
@@ -364,6 +407,8 @@
|
|||||||
flush = 0
|
flush = 0
|
||||||
if(mode == 2) // if was ready,
|
if(mode == 2) // if was ready,
|
||||||
mode = 1 // switch to charging
|
mode = 1 // switch to charging
|
||||||
|
if(islarge)
|
||||||
|
islarge = 0
|
||||||
update()
|
update()
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -517,10 +562,6 @@
|
|||||||
src.destinationTag = T.sortTag
|
src.destinationTag = T.sortTag
|
||||||
else if (!src.destinationTag)
|
else if (!src.destinationTag)
|
||||||
src.destinationTag = null
|
src.destinationTag = null
|
||||||
else if (istype(AM, /mob)) //If there is a mob somewhere in there....
|
|
||||||
if(prob(10))
|
|
||||||
src.destinationTag = "Mail Office"
|
|
||||||
|
|
||||||
|
|
||||||
// start the movement process
|
// start the movement process
|
||||||
// argument is the disposal unit the holder started in
|
// argument is the disposal unit the holder started in
|
||||||
@@ -945,7 +986,6 @@
|
|||||||
service = 0
|
service = 0
|
||||||
screen = 0
|
screen = 0
|
||||||
icon_state_old = null
|
icon_state_old = null
|
||||||
// mob/living/lastuser
|
|
||||||
|
|
||||||
|
|
||||||
New()
|
New()
|
||||||
@@ -1034,9 +1074,8 @@
|
|||||||
|
|
||||||
proc
|
proc
|
||||||
interact(var/mob/user)
|
interact(var/mob/user)
|
||||||
// lastuser = user
|
|
||||||
var/dat = "<TT><B>Sorting Mechanism</B><BR>"
|
var/dat = "<TT><B>Sorting Mechanism</B><BR>"
|
||||||
if (!sortType)
|
if (sortType.len == 0)
|
||||||
dat += "<br>Currently Filtering: <A href='?src=\ref[src];choice=selectSort'>None</A><br>"
|
dat += "<br>Currently Filtering: <A href='?src=\ref[src];choice=selectSort'>None</A><br>"
|
||||||
else
|
else
|
||||||
dat += "<br>Currently Filtering:"
|
dat += "<br>Currently Filtering:"
|
||||||
@@ -1045,7 +1084,7 @@
|
|||||||
dat += "<br>"
|
dat += "<br>"
|
||||||
if (!backsort)
|
if (!backsort)
|
||||||
dat += "Backwards Sorting Disabled <A href='?src=\ref[src];choice=toggleBack'>Toggle</A><br>"
|
dat += "Backwards Sorting Disabled <A href='?src=\ref[src];choice=toggleBack'>Toggle</A><br>"
|
||||||
else if(!backType && backsort)
|
else if(backType.len == 0 && backsort)
|
||||||
dat += "Backwards Sorting Active. Sorting: <A href='?src=\ref[src];choice=selectBack'>None.</A> <A href='?src=\ref[src];choice=toggleBack'>Toggle</A><br>"
|
dat += "Backwards Sorting Active. Sorting: <A href='?src=\ref[src];choice=selectBack'>None.</A> <A href='?src=\ref[src];choice=toggleBack'>Toggle</A><br>"
|
||||||
else
|
else
|
||||||
dat += "Backwards Sorting Active. Sorting:"
|
dat += "Backwards Sorting Active. Sorting:"
|
||||||
@@ -1084,7 +1123,6 @@
|
|||||||
sortType |= var_value
|
sortType |= var_value
|
||||||
else
|
else
|
||||||
sortType -= variable
|
sortType -= variable
|
||||||
// interact(lastuser)
|
|
||||||
updateUsrDialog()
|
updateUsrDialog()
|
||||||
|
|
||||||
//a trunk joining to a disposal bin or outlet on the same turf
|
//a trunk joining to a disposal bin or outlet on the same turf
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
flags = FPRINT
|
flags = FPRINT
|
||||||
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
|
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
|
||||||
var/examtext = null
|
var/examtext = null
|
||||||
|
var/waswelded = 0
|
||||||
|
|
||||||
|
|
||||||
attack_hand(mob/user as mob)
|
attack_hand(mob/user as mob)
|
||||||
@@ -19,7 +20,7 @@
|
|||||||
src.wrapped.loc = (get_turf(src.loc))
|
src.wrapped.loc = (get_turf(src.loc))
|
||||||
if (istype(src.wrapped,/obj/structure/closet))
|
if (istype(src.wrapped,/obj/structure/closet))
|
||||||
var/obj/structure/closet/O = src.wrapped
|
var/obj/structure/closet/O = src.wrapped
|
||||||
O.welded = 0
|
O.welded = waswelded
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -207,7 +208,6 @@
|
|||||||
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT
|
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT
|
||||||
|
|
||||||
attack_self(mob/user as mob)
|
attack_self(mob/user as mob)
|
||||||
user.machine = src
|
|
||||||
interact(user)
|
interact(user)
|
||||||
|
|
||||||
proc/interact(mob/user as mob)
|
proc/interact(mob/user as mob)
|
||||||
@@ -216,6 +216,7 @@
|
|||||||
dat += "<br>Current Selection: None<br>"
|
dat += "<br>Current Selection: None<br>"
|
||||||
else
|
else
|
||||||
dat += "<br>Current Selection: [currTag]<br><br>"
|
dat += "<br>Current Selection: [currTag]<br><br>"
|
||||||
|
dat += "<A href='?src=\ref[src];nextTag=[locationList.len + 1]'>Set Custom Destination</A><br><br>"
|
||||||
for (var/i = 1, i <= locationList.len, i++)
|
for (var/i = 1, i <= locationList.len, i++)
|
||||||
if(spaceList[i])
|
if(spaceList[i])
|
||||||
dat += "<br>"
|
dat += "<br>"
|
||||||
@@ -223,13 +224,18 @@
|
|||||||
dat += "<br>"
|
dat += "<br>"
|
||||||
user << browse(dat, "window=destTagScreen")
|
user << browse(dat, "window=destTagScreen")
|
||||||
onclose(user, "destTagScreen")
|
onclose(user, "destTagScreen")
|
||||||
usr.machine = null
|
|
||||||
return
|
return
|
||||||
|
|
||||||
Topic(href, href_list)
|
Topic(href, href_list)
|
||||||
|
usr.machine = src
|
||||||
src.add_fingerprint(usr)
|
src.add_fingerprint(usr)
|
||||||
if(href_list["nextTag"])
|
if(href_list["nextTag"])
|
||||||
var/n = text2num(href_list["nextTag"])
|
var/n = text2num(href_list["nextTag"])
|
||||||
|
if(n > locationList.len)
|
||||||
|
var/t1 = input("Which tag?","Tag") as null|text
|
||||||
|
if(t1)
|
||||||
|
src.currTag = t1
|
||||||
|
else
|
||||||
src.currTag = locationList[n]
|
src.currTag = locationList[n]
|
||||||
if(istype(loc,/mob))
|
if(istype(loc,/mob))
|
||||||
interact(loc)
|
interact(loc)
|
||||||
|
|||||||
Reference in New Issue
Block a user