Merge remote-tracking branch 'upstream/master' into mechastuff

# Conflicts:
#	code/game/mecha/mecha.dm
This commit is contained in:
tigercat2000
2018-11-01 08:37:46 -07:00
22 changed files with 227 additions and 86 deletions
+1 -1
View File
@@ -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)
+21
View File
@@ -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))
+8
View File
@@ -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
+3
View File
@@ -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
+2 -2
View File
@@ -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 )
+3 -3
View File
@@ -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
View File
@@ -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
+12 -17
View File
@@ -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>")
+8 -4
View File
@@ -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)
+3
View File
@@ -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]
+5 -5
View File
@@ -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"
+1 -1
View File
@@ -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()
+2 -1
View File
@@ -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)
+38 -35
View File
@@ -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
+3
View File
@@ -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
+58
View File
@@ -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">
+36
View File
@@ -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.