mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 23:17:02 +01:00
Merge remote-tracking branch 'upstream/master' into mechastuff
# Conflicts: # code/game/mecha/mecha.dm
This commit is contained in:
@@ -5896,7 +5896,7 @@
|
||||
"cjt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/asmaint)
|
||||
"cju" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkblue"},/area/medical/surgery1)
|
||||
"cjv" = (/obj/structure/closet/wardrobe/medic_white,/obj/item/clothing/head/surgery/blue,/obj/item/clothing/head/surgery/blue,/obj/item/clothing/head/surgery/green,/obj/item/clothing/head/surgery/green,/obj/item/clothing/head/surgery/purple,/obj/item/clothing/head/surgery/purple,/obj/item/clothing/suit/storage/fr_jacket,/obj/item/clothing/suit/storage/fr_jacket,/obj/item/clothing/suit/storage/fr_jacket,/obj/item/clothing/under/rank/medical/blue,/obj/item/clothing/under/rank/medical/green,/obj/item/clothing/under/rank/medical/purple,/turf/simulated/floor/plasteel{dir = 2; icon_state = "cafeteria"; tag = "icon-cafeteria (NORTHEAST)"},/area/medical/medbreak)
|
||||
"cjw" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = -5},/obj/machinery/holosign_switch{pixel_x = -23; pixel_y = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "darkblue"},/area/medical/surgery1)
|
||||
"cjw" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = -5},/obj/machinery/holosign_switch{id = "surgery1"; pixel_x = -23; pixel_y = 4},/turf/simulated/floor/plasteel{dir = 10; icon_state = "darkblue"},/area/medical/surgery1)
|
||||
"cjx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5; level = 1},/turf/simulated/floor/plasteel{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/surgery1)
|
||||
"cjy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{dir = 6; icon_state = "darkblue"},/area/medical/surgery1)
|
||||
"cjz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/medical/ward)
|
||||
|
||||
@@ -372,6 +372,27 @@ This is always put in the attack log.
|
||||
if(progress)
|
||||
qdel(progbar)
|
||||
|
||||
#define DOAFTERONCE_MAGIC "Magic~~"
|
||||
GLOBAL_LIST_INIT(do_after_once_tracker, list())
|
||||
/proc/do_after_once(mob/user, delay, needhand = 1, atom/target = null, progress = 1, attempt_cancel_message = "Attempt cancelled.")
|
||||
if(!user || !target)
|
||||
return
|
||||
|
||||
var/cache_key = "[user.UID()][target.UID()]"
|
||||
if(GLOB.do_after_once_tracker[cache_key])
|
||||
GLOB.do_after_once_tracker[cache_key] = DOAFTERONCE_MAGIC
|
||||
to_chat(user, "<span class='warning'>[attempt_cancel_message]</span>")
|
||||
return FALSE
|
||||
GLOB.do_after_once_tracker[cache_key] = TRUE
|
||||
. = do_after(user, delay, needhand, target, progress, extra_checks = CALLBACK(GLOBAL_PROC, .proc/do_after_once_checks, cache_key))
|
||||
GLOB.do_after_once_tracker[cache_key] = FALSE
|
||||
|
||||
/proc/do_after_once_checks(cache_key)
|
||||
if(GLOB.do_after_once_tracker[cache_key] && GLOB.do_after_once_tracker[cache_key] == DOAFTERONCE_MAGIC)
|
||||
GLOB.do_after_once_tracker[cache_key] = FALSE
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/proc/is_species(A, species_datum)
|
||||
. = FALSE
|
||||
if(ishuman(A))
|
||||
|
||||
@@ -923,6 +923,14 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
|
||||
containername = "machine prototype crate"
|
||||
access = access_research
|
||||
|
||||
/datum/supply_packs/science/oil
|
||||
name = "Oil Tank Crate"
|
||||
contains = list(/obj/structure/reagent_dispensers/oil,
|
||||
/obj/item/reagent_containers/food/drinks/oilcan)
|
||||
cost = 10
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "oil tank crate"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Organic /////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -30,9 +30,9 @@
|
||||
for(var/mob/living/silicon/S in range(2,user))
|
||||
to_chat(S, "<span class='userdanger'>Your sensors are disabled by a shower of blood!</span>")
|
||||
S.Weaken(3)
|
||||
var/turf = get_turf(user)
|
||||
var/new_location = user.drop_location()
|
||||
spawn(5) // So it's not killed in explosion
|
||||
var/mob/living/simple_animal/hostile/headcrab/crab = new(turf)
|
||||
var/mob/living/simple_animal/hostile/headcrab/crab = new(new_location)
|
||||
for(var/obj/item/organ/internal/I in organs)
|
||||
I.loc = crab
|
||||
crab.origin = M
|
||||
|
||||
@@ -145,6 +145,9 @@ th.cost.toomuch {background:maroon;}
|
||||
var/itemID = text2num(href_list["buy"])
|
||||
var/datum/storeitem/item = centcomm_store.items[itemID]
|
||||
var/sure = alert(usr,"Are you sure you wish to purchase [item.name] for $[item.cost]?","You sure?","Yes","No") in list("Yes","No")
|
||||
if(!Adjacent(usr))
|
||||
to_chat(usr, "<span class='warning'>You are not close enough to do that.</span>")
|
||||
return
|
||||
if(sure=="No")
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
add_fingerprint(user)
|
||||
|
||||
if(normaldoorcontrol)
|
||||
for(var/obj/machinery/door/airlock/D in range(range))
|
||||
for(var/obj/machinery/door/airlock/D in range(range, src))
|
||||
if(D.id_tag == id)
|
||||
if(specialfunctions & OPEN)
|
||||
if(D.density)
|
||||
@@ -113,7 +113,7 @@
|
||||
D.safe = 1
|
||||
|
||||
else
|
||||
for(var/obj/machinery/door/poddoor/M in range(range))
|
||||
for(var/obj/machinery/door/poddoor/M in range(range, src))
|
||||
if(M.id_tag == id)
|
||||
if(M.density)
|
||||
spawn( 0 )
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
continue
|
||||
handleTemp(M) //handles pool temp effects on the swimmers
|
||||
if(ishuman(M)) //Only human types will drown, to keep things simple for non-human mobs that live in the water
|
||||
handleDrowning(M)
|
||||
handleDrowning(M)
|
||||
|
||||
/obj/machinery/poolcontroller/proc/cleanPool()
|
||||
for(var/obj/effect/decal/cleanable/decal in decalinpool) //Cleans up cleanable decals like blood and such
|
||||
@@ -79,11 +79,11 @@
|
||||
to_chat(M, "<span class='danger'>The water is searing hot!</span>")
|
||||
|
||||
if(WARM) //Warm the mob.
|
||||
if(prob(50)) //inform the mob of warm water half the time
|
||||
if(prob(5)) //inform the mob of warm water occasionally
|
||||
to_chat(M, "<span class='warning'>The water is quite warm.</span>")//Inform the mob it's warm water.
|
||||
|
||||
if(COOL) //Cool the mob.
|
||||
if(prob(50)) //inform the mob of cold water half the time
|
||||
if(prob(5)) //inform the mob of cold water occasionally
|
||||
to_chat(M, "<span class='warning'>The water is chilly.</span>")//Inform the mob it's chilly water.
|
||||
|
||||
if(FRIGID) //YOU'RE AS COLD AS ICE
|
||||
|
||||
+11
-10
@@ -838,20 +838,21 @@
|
||||
|
||||
else if(iswelder(W) && user.a_intent != INTENT_HARM)
|
||||
var/obj/item/weldingtool/WT = W
|
||||
if(health<initial(health))
|
||||
if(health < initial(health))
|
||||
if(WT.remove_fuel(0, user))
|
||||
if(internal_damage & MECHA_INT_TANK_BREACH)
|
||||
clearInternalDamage(MECHA_INT_TANK_BREACH)
|
||||
to_chat(user, "<span class='notice'>You repair the damaged gas tank.</span>")
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] repairs some damage to [name].</span>")
|
||||
health += min(10, initial(health)-health)
|
||||
user.visible_message("<span class='notice'>[user] starts repairing some damage to [name].</span>", "<span class='notice'>You start repairing some damage to [name]</span>")
|
||||
if(do_after_once(user, 15 * WT.toolspeed, target = src, attempt_cancel_message = "You stop repairing [name]."))
|
||||
if(internal_damage & MECHA_INT_TANK_BREACH)
|
||||
clearInternalDamage(MECHA_INT_TANK_BREACH)
|
||||
user.visible_message("<span class='notice'>[user] repairs the damaged gas tank.</span>", "<span class='notice'>You repair the damaged gas tank.</span>")
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] repairs some damage to [name].</span>", "<span class='notice'>You repair some damage to [name].</span>")
|
||||
health += min(20, initial(health) - health)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The welder must be on for this task!</span>")
|
||||
return 1
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The [name] is at full integrity!</span>")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
else if(istype(W, /obj/item/mecha_parts/mecha_tracking))
|
||||
if(!user.unEquip(W))
|
||||
@@ -1494,4 +1495,4 @@
|
||||
visual_effect_icon = ATTACK_EFFECT_MECHFIRE
|
||||
else if(damtype == TOX)
|
||||
visual_effect_icon = ATTACK_EFFECT_MECHTOXIN
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
message = sanitize(copytext(message, 1, MAX_MESSAGE_LEN))
|
||||
if(!message)
|
||||
return
|
||||
message = user.handle_speech_problems(message)[1]
|
||||
message = capitalize(message)
|
||||
if((loc == user && !user.incapacitated()))
|
||||
if(emagged)
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
|
||||
/obj/item/borg/upgrade/syndicate
|
||||
name = "illegal equipment module"
|
||||
desc = "Unlocks the hidden, deadlier functions of a cyborg"
|
||||
desc = "Unlocks the hidden, deadlier functions of a cyborg. Also prevents emag subversion."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
origin_tech = "combat=4;syndicate=1"
|
||||
require_module = 1
|
||||
|
||||
@@ -64,26 +64,26 @@
|
||||
if(C == user)
|
||||
do_climb(user)
|
||||
|
||||
/obj/structure/proc/density_check()
|
||||
for(var/obj/O in orange(0, src))
|
||||
if(O.density && !istype(O, /obj/machinery/door/window)) //Ignores windoors, as those already block climbing, otherwise a windoor on the opposite side of a table would prevent climbing.
|
||||
return O
|
||||
var/turf/T = get_turf(src)
|
||||
if(T.density)
|
||||
return T
|
||||
return null
|
||||
|
||||
/obj/structure/proc/do_climb(var/mob/living/user)
|
||||
|
||||
if(!can_touch(user) || !climbable)
|
||||
return
|
||||
var/blocking_object = density_check()
|
||||
if(blocking_object)
|
||||
to_chat(user, "<span class='warning'>You cannot climb [src], as it is blocked by \a [blocking_object]!</span>")
|
||||
return
|
||||
|
||||
for(var/obj/O in range(0, src))
|
||||
if(O.density == 1 && O != src && !istype(O, /obj/machinery/door/window)) //Ignores windoors, as those already block climbing, otherwise a windoor on the opposite side of a table would prevent climbing.
|
||||
to_chat(user, "<span class='warning'>You cannot climb [src], as it is blocked by \a [O]!</span>")
|
||||
return
|
||||
for(var/turf/T in range(0, src))
|
||||
if(T.density == 1)
|
||||
to_chat(user, "<span class='warning'>You cannot climb [src], as it is blocked by \a [T]!</span>")
|
||||
return
|
||||
var/turf/T = src.loc
|
||||
if(!T || !istype(T)) return
|
||||
|
||||
var/obj/machinery/door/poddoor/shutters/S = locate() in T.contents
|
||||
if(S && S.density) return
|
||||
|
||||
usr.visible_message("<span class='warning'>[user] starts climbing onto \the [src]!</span>")
|
||||
climber = user
|
||||
if(!do_after(user, 50, target = src))
|
||||
@@ -94,11 +94,6 @@
|
||||
climber = null
|
||||
return
|
||||
|
||||
S = locate() in T.contents
|
||||
if(S && S.density)
|
||||
climber = null
|
||||
return
|
||||
|
||||
usr.loc = get_turf(src)
|
||||
if(get_turf(user) == get_turf(src))
|
||||
usr.visible_message("<span class='warning'>[user] climbs onto \the [src]!</span>")
|
||||
|
||||
@@ -180,12 +180,16 @@
|
||||
var/obj/item/grab/G = I
|
||||
if(G.affecting.buckled)
|
||||
to_chat(user, "<span class='warning'>[G.affecting] is buckled to [G.affecting.buckled]!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
if(G.state < GRAB_AGGRESSIVE)
|
||||
to_chat(user, "<span class='warning'>You need a better grip to do that!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
if(!G.confirm())
|
||||
return 0
|
||||
return FALSE
|
||||
var/blocking_object = density_check()
|
||||
if(blocking_object)
|
||||
to_chat(user, "<span class='warning'>You cannot do this there is \a [blocking_object] in the way!</span>")
|
||||
return FALSE
|
||||
G.affecting.forceMove(get_turf(src))
|
||||
G.affecting.Weaken(2)
|
||||
item_placed(G.affecting)
|
||||
@@ -193,7 +197,7 @@
|
||||
"<span class='userdanger'>[G.assailant] pushes [G.affecting] onto [src].</span>")
|
||||
add_attack_logs(G.assailant, G.affecting, "Pushed onto a table")
|
||||
qdel(I)
|
||||
return 1
|
||||
return TRUE
|
||||
qdel(I)
|
||||
|
||||
/obj/structure/table/attackby(obj/item/I, mob/user, params)
|
||||
|
||||
@@ -9,6 +9,9 @@ var/global/datum/prizes/global_prizes = new
|
||||
prizes += new itempath()
|
||||
|
||||
/datum/prizes/proc/PlaceOrder(var/obj/machinery/prize_counter/prize_counter, var/itemID)
|
||||
if(!prize_counter.Adjacent(usr))
|
||||
to_chat(usr, "<span class='warning'>You need to be closer!</span>")
|
||||
return
|
||||
if(!prize_counter)
|
||||
return 0
|
||||
var/datum/prize_item/item = global_prizes.prizes[itemID]
|
||||
|
||||
@@ -28,11 +28,11 @@
|
||||
|
||||
// Ice Chili
|
||||
/obj/item/seeds/chili/ice
|
||||
name = "pack of ice pepper seeds"
|
||||
desc = "These seeds grow into ice pepper plants."
|
||||
name = "pack of chilly pepper seeds"
|
||||
desc = "These seeds grow into chilly pepper plants."
|
||||
icon_state = "seed-icepepper"
|
||||
species = "chiliice"
|
||||
plantname = "Ice Pepper Plants"
|
||||
plantname = "Chilly Pepper Plants"
|
||||
product = /obj/item/reagent_containers/food/snacks/grown/icepepper
|
||||
lifespan = 25
|
||||
maturation = 4
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/grown/icepepper
|
||||
seed = /obj/item/seeds/chili/ice
|
||||
name = "ice pepper"
|
||||
name = "chilly pepper"
|
||||
desc = "It's a mutant strain of chili"
|
||||
icon_state = "icepepper"
|
||||
filling_color = "#0000CD"
|
||||
@@ -73,4 +73,4 @@
|
||||
icon_state = "ghostchilipepper"
|
||||
filling_color = "#F8F8FF"
|
||||
bitesize_mod = 4
|
||||
origin_tech = "biotech=4;magnets=5"
|
||||
origin_tech = "biotech=4;magnets=5"
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
if("Yes")
|
||||
if(!I)
|
||||
return
|
||||
if(!Adjacent(usr))
|
||||
if(!Adjacent(target))
|
||||
to_chat(usr, "<span class='warning'> You need to stay in reaching distance while giving an object.</span>")
|
||||
to_chat(target, "<span class='warning'> [usr.name] moved too far away.</span>")
|
||||
return
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
to_chat(user, "<span class='warning'>The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.</span>")
|
||||
return
|
||||
|
||||
if(!allowed(usr))
|
||||
if(!allowed(W))
|
||||
to_chat(user, "<span class='warning'>Access denied.</span>")
|
||||
return
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
if(emagged)
|
||||
return
|
||||
|
||||
if(allowed(usr))
|
||||
if(allowed(W))
|
||||
shut_down()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Access denied.</span>")
|
||||
@@ -223,6 +223,10 @@
|
||||
health = 35 - (getBruteLoss() + getFireLoss())
|
||||
update_stat("updatehealth([reason])")
|
||||
|
||||
/mob/living/silicon/robot/drone/death(gibbed)
|
||||
. = ..(gibbed)
|
||||
ghostize(can_reenter_corpse = 0)
|
||||
|
||||
|
||||
//CONSOLE PROCS
|
||||
/mob/living/silicon/robot/drone/proc/law_resync()
|
||||
|
||||
@@ -71,7 +71,8 @@
|
||||
|
||||
|
||||
update_icon()
|
||||
attack_self(usr) //Update the browsed page.
|
||||
if(winget(usr, "[name]", "is-visible") == "true") // NOT MY FAULT IT IS A BUILT IN PROC PLEASE DO NOT HIT ME
|
||||
attack_self(usr) //Update the browsed page.
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
|
||||
|
||||
@@ -163,12 +163,12 @@
|
||||
|
||||
/datum/reagent/consumable/drink/cold/rewriter
|
||||
name = "Rewriter"
|
||||
description = "The secert of the sanctuary of the Libarian..."
|
||||
description = "The secret of the sanctuary of the Librarian..."
|
||||
id = "rewriter"
|
||||
color = "#485000" // rgb:72, 080, 0
|
||||
drink_icon = "rewriter"
|
||||
drink_name = "Rewriter"
|
||||
drink_desc = "The secert of the sanctuary of the Libarian..."
|
||||
drink_desc = "The secret of the sanctuary of the Librarian..."
|
||||
taste_message = "coffee...soda?"
|
||||
|
||||
/datum/reagent/consumable/drink/cold/rewriter/on_mob_life(mob/living/M)
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
T.nicely_link_to_other_stuff(src)
|
||||
|
||||
//When the disposalsoutlet is forcefully moved. Due to meteorshot (not the recall spell)
|
||||
/obj/machinery/disposal/Moved(atom/OldLoc, Dir)
|
||||
/obj/machinery/disposal/Moved(atom/OldLoc, Dir)
|
||||
. = ..()
|
||||
eject()
|
||||
var/ptype = istype(src, /obj/machinery/disposal/deliveryChute) ? PIPE_DISPOSALS_CHUTE : PIPE_DISPOSALS_BIN //Check what disposaltype it is
|
||||
@@ -1220,24 +1220,27 @@
|
||||
// if not entering from disposal bin,
|
||||
// transfer to linked object (outlet or bin)
|
||||
|
||||
/obj/structure/disposalpipe/trunk/transfer(var/obj/structure/disposalholder/H)
|
||||
|
||||
/obj/structure/disposalpipe/trunk/transfer(obj/structure/disposalholder/H)
|
||||
if(!H)
|
||||
return
|
||||
if(H.dir == DOWN) // we just entered from a disposer
|
||||
return ..() // so do base transfer proc
|
||||
// otherwise, go to the linked object
|
||||
if(linked)
|
||||
var/obj/structure/disposaloutlet/O = linked
|
||||
if(istype(O) && (H))
|
||||
O.expel(H) // expel at outlet
|
||||
else
|
||||
var/obj/machinery/disposal/D = linked
|
||||
if(H)
|
||||
D.expel(H) // expel at disposal
|
||||
else
|
||||
if(H)
|
||||
src.expel(H, src.loc, 0) // expel at turf
|
||||
return null
|
||||
|
||||
if(!linked)
|
||||
expel(H, loc, FALSE) // expel at turf
|
||||
else if(istype(linked, /obj/structure/disposaloutlet))
|
||||
var/obj/structure/disposaloutlet/DO = linked
|
||||
for(var/atom/movable/AM in H)
|
||||
AM.forceMove(DO)
|
||||
qdel(H)
|
||||
H.vent_gas(loc)
|
||||
DO.expel()
|
||||
else if(istype(linked, /obj/machinery/disposal))
|
||||
var/obj/machinery/disposal/D = linked
|
||||
H.forceMove(D)
|
||||
D.expel(H) // expel at disposal
|
||||
else //just in case
|
||||
expel(H, loc, FALSE)
|
||||
// nextdir
|
||||
|
||||
/obj/structure/disposalpipe/trunk/nextdir(var/fromdir)
|
||||
@@ -1283,24 +1286,29 @@
|
||||
if(T)
|
||||
T.nicely_link_to_other_stuff(src)
|
||||
|
||||
// expel the contents of the holder object, then delete it
|
||||
// called when the holder exits the outlet
|
||||
/obj/structure/disposaloutlet/proc/expel(var/obj/structure/disposalholder/H, animation = 1)
|
||||
/obj/structure/disposaloutlet/Destroy()
|
||||
if(linkedtrunk)
|
||||
linkedtrunk.remove_trunk_links()
|
||||
expel(FALSE)
|
||||
return ..()
|
||||
|
||||
|
||||
// expel the contents of the outlet
|
||||
/obj/structure/disposaloutlet/proc/expel(animation = TRUE)
|
||||
if(animation)
|
||||
flick("outlet-open", src)
|
||||
playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
|
||||
sleep(20) //wait until correct animation frame
|
||||
playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
|
||||
if(H)
|
||||
for(var/atom/movable/AM in H)
|
||||
AM.forceMove(loc)
|
||||
AM.pipe_eject(dir)
|
||||
if(!istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z
|
||||
spawn(5)
|
||||
if(AM)
|
||||
AM.throw_at(target, 3, 1)
|
||||
H.vent_gas(src.loc)
|
||||
qdel(H)
|
||||
for(var/atom/movable/AM in contents)
|
||||
AM.forceMove(loc)
|
||||
AM.pipe_eject(dir)
|
||||
if(istype(AM,/mob/living/silicon/robot/drone)) //Drones keep smashing windows from being fired out of chutes. Bad for the station. ~Z
|
||||
return
|
||||
spawn(5)
|
||||
if(QDELETED(AM))
|
||||
return
|
||||
AM.throw_at(target, 3, 1)
|
||||
|
||||
|
||||
/obj/structure/disposaloutlet/attackby(var/obj/item/I, var/mob/user, params)
|
||||
@@ -1339,7 +1347,7 @@
|
||||
return
|
||||
|
||||
//When the disposalsoutlet is forcefully moved. Due to meteorshot or the recall item spell for instance
|
||||
/obj/structure/disposaloutlet/Moved(atom/OldLoc, Dir)
|
||||
/obj/structure/disposaloutlet/Moved(atom/OldLoc, Dir)
|
||||
. = ..()
|
||||
var/turf/T = OldLoc
|
||||
if(T.intact)
|
||||
@@ -1356,11 +1364,6 @@
|
||||
C.density = 1
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/disposaloutlet/Destroy()
|
||||
if(linkedtrunk)
|
||||
linkedtrunk.remove_trunk_links()
|
||||
return ..()
|
||||
|
||||
// called when movable is expelled from a disposal pipe or outlet
|
||||
// by default does nothing, override for special behaviour
|
||||
|
||||
|
||||
@@ -199,6 +199,9 @@
|
||||
deal_damage(P.damage)
|
||||
P.on_hit(src)
|
||||
|
||||
/obj/spacepod/AllowDrop()
|
||||
return TRUE
|
||||
|
||||
/obj/spacepod/blob_act()
|
||||
deal_damage(30)
|
||||
return
|
||||
|
||||
@@ -56,6 +56,64 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">01 November 2018</h2>
|
||||
<h3 class="author">Citinited updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">A disposal nullspace bug.</li>
|
||||
</ul>
|
||||
<h3 class="author">Farie82 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Repairing a mech now says you're doing it to the others balance: Mechs now take time to repair. No more spam repairing</li>
|
||||
</ul>
|
||||
<h3 class="author">Mitchs98 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Lowers the spam you receive from entering a warm or cold pool. You will no longer receive 'The water is quite warm.' nearly every few seconds.</li>
|
||||
<li class="bugfix">Headslugs no longer teleport out of closed lockers upon bursting.</li>
|
||||
</ul>
|
||||
<h3 class="author">Warior4356 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Ghosts can no longer re-enter a drone that has been shut down.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">31 October 2018</h2>
|
||||
<h3 class="author">Arkatos updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="spellcheck">Fixes Rewriter drink description typo.</li>
|
||||
</ul>
|
||||
<h3 class="author">Jountax updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Renamed Ice Peppers to Chilly Peppers.</li>
|
||||
</ul>
|
||||
<h3 class="author">TatsumakiMagi updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">fixed merch shop, arcade shop and the give command working from a distance</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">30 October 2018</h2>
|
||||
<h3 class="author">Dave-TH updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Adding a paper to a paper bundle no longer automatically opens the bundle.</li>
|
||||
</ul>
|
||||
<h3 class="author">Farie82 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Items dropped in a space pod are now under the seat. No more magical dropping out of the pod</li>
|
||||
<li class="rscadd">Cargo can now buy oil tanks.</li>
|
||||
</ul>
|
||||
<h3 class="author">Warior4356 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Megaphone now handle speech impediments properly</li>
|
||||
<li class="bugfix">Swiping an ID through a drone no longer causes a runtime and correctly shuts it down</li>
|
||||
<li class="bugfix">Silicons are now able to open a door linked to a button regardless of proximity</li>
|
||||
</ul>
|
||||
<h3 class="author">uc_guy updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">You can no longer table people through walls/doors/shutters.</li>
|
||||
</ul>
|
||||
<h3 class="author">warior4356 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">fixed the holosign in surgery1</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">29 October 2018</h2>
|
||||
<h3 class="author">Farie82 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -7776,3 +7776,39 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- bugfix: Mech speech bubbles should now follow the mech.
|
||||
gatchapod:
|
||||
- bugfix: Fixed airlocks electrocuting people remotely through open UI
|
||||
2018-10-30:
|
||||
Dave-TH:
|
||||
- bugfix: Adding a paper to a paper bundle no longer automatically opens the bundle.
|
||||
Farie82:
|
||||
- bugfix: Items dropped in a space pod are now under the seat. No more magical dropping
|
||||
out of the pod
|
||||
- rscadd: Cargo can now buy oil tanks.
|
||||
Warior4356:
|
||||
- bugfix: Megaphone now handle speech impediments properly
|
||||
- bugfix: Swiping an ID through a drone no longer causes a runtime and correctly
|
||||
shuts it down
|
||||
- bugfix: Silicons are now able to open a door linked to a button regardless of
|
||||
proximity
|
||||
uc_guy:
|
||||
- bugfix: You can no longer table people through walls/doors/shutters.
|
||||
warior4356:
|
||||
- bugfix: fixed the holosign in surgery1
|
||||
2018-10-31:
|
||||
Arkatos:
|
||||
- spellcheck: Fixes Rewriter drink description typo.
|
||||
Jountax:
|
||||
- tweak: Renamed Ice Peppers to Chilly Peppers.
|
||||
TatsumakiMagi:
|
||||
- bugfix: fixed merch shop, arcade shop and the give command working from a distance
|
||||
2018-11-01:
|
||||
Citinited:
|
||||
- bugfix: A disposal nullspace bug.
|
||||
Farie82:
|
||||
- tweak: 'Repairing a mech now says you''re doing it to the others balance: Mechs
|
||||
now take time to repair. No more spam repairing'
|
||||
Mitchs98:
|
||||
- tweak: Lowers the spam you receive from entering a warm or cold pool. You will
|
||||
no longer receive 'The water is quite warm.' nearly every few seconds.
|
||||
- bugfix: Headslugs no longer teleport out of closed lockers upon bursting.
|
||||
Warior4356:
|
||||
- bugfix: Ghosts can no longer re-enter a drone that has been shut down.
|
||||
|
||||
Reference in New Issue
Block a user