diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 4fbb941c9a2..bd18d50835d 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -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) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 1ca1fe01036..13ee3c9e5ef 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -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, "[attempt_cancel_message]") + 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)) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 2db64b30bdb..4d8bd9432f4 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -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 ///////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// diff --git a/code/game/gamemodes/changeling/powers/headcrab.dm b/code/game/gamemodes/changeling/powers/headcrab.dm index 96d4a784f45..a950ec7a9c9 100644 --- a/code/game/gamemodes/changeling/powers/headcrab.dm +++ b/code/game/gamemodes/changeling/powers/headcrab.dm @@ -30,9 +30,9 @@ for(var/mob/living/silicon/S in range(2,user)) to_chat(S, "Your sensors are disabled by a shower of blood!") 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 diff --git a/code/game/machinery/computer/store.dm b/code/game/machinery/computer/store.dm index bfa2820d9b3..f49d91c53b3 100644 --- a/code/game/machinery/computer/store.dm +++ b/code/game/machinery/computer/store.dm @@ -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, "You are not close enough to do that.") + return if(sure=="No") updateUsrDialog() return diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 556cba8e330..279a3e197dc 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -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 ) diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index 4fff66a43e7..17fae9df6f6 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -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, "The water is searing hot!") 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, "The water is quite warm.")//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, "The water is chilly.")//Inform the mob it's chilly water. if(FRIGID) //YOU'RE AS COLD AS ICE diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 1cdecf3f2a1..c3c89231664 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -838,20 +838,21 @@ else if(iswelder(W) && user.a_intent != INTENT_HARM) var/obj/item/weldingtool/WT = W - if(healthYou repair the damaged gas tank.") - else - user.visible_message("[user] repairs some damage to [name].") - health += min(10, initial(health)-health) + user.visible_message("[user] starts repairing some damage to [name].", "You start repairing some damage to [name]") + 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("[user] repairs the damaged gas tank.", "You repair the damaged gas tank.") + else + user.visible_message("[user] repairs some damage to [name].", "You repair some damage to [name].") + health += min(20, initial(health) - health) else to_chat(user, "The welder must be on for this task!") - return 1 else to_chat(user, "The [name] is at full integrity!") - 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 - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 8b53e3d8ed7..43515ed5241 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -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) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 4bef1cbb324..064b66b78f4 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -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 diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index e38350a0136..faf86394dba 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -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, "You cannot climb [src], as it is blocked by \a [blocking_object]!") + 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, "You cannot climb [src], as it is blocked by \a [O]!") - return - for(var/turf/T in range(0, src)) - if(T.density == 1) - to_chat(user, "You cannot climb [src], as it is blocked by \a [T]!") - 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("[user] starts climbing onto \the [src]!") 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("[user] climbs onto \the [src]!") diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 3ec50187bfb..999e90cd89f 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -180,12 +180,16 @@ var/obj/item/grab/G = I if(G.affecting.buckled) to_chat(user, "[G.affecting] is buckled to [G.affecting.buckled]!") - return 0 + return FALSE if(G.state < GRAB_AGGRESSIVE) to_chat(user, "You need a better grip to do that!") - return 0 + return FALSE if(!G.confirm()) - return 0 + return FALSE + var/blocking_object = density_check() + if(blocking_object) + to_chat(user, "You cannot do this there is \a [blocking_object] in the way!") + return FALSE G.affecting.forceMove(get_turf(src)) G.affecting.Weaken(2) item_placed(G.affecting) @@ -193,7 +197,7 @@ "[G.assailant] pushes [G.affecting] onto [src].") 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) diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm index a2209a172ff..ef1512858d4 100644 --- a/code/modules/arcade/prize_datums.dm +++ b/code/modules/arcade/prize_datums.dm @@ -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, "You need to be closer!") + return if(!prize_counter) return 0 var/datum/prize_item/item = global_prizes.prizes[itemID] diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index 01e05762eba..f8bf515ce6b 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -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" \ No newline at end of file + origin_tech = "biotech=4;magnets=5" diff --git a/code/modules/mob/living/carbon/give.dm b/code/modules/mob/living/carbon/give.dm index 55c4db791ac..473715367b4 100644 --- a/code/modules/mob/living/carbon/give.dm +++ b/code/modules/mob/living/carbon/give.dm @@ -29,7 +29,7 @@ if("Yes") if(!I) return - if(!Adjacent(usr)) + if(!Adjacent(target)) to_chat(usr, " You need to stay in reaching distance while giving an object.") to_chat(target, " [usr.name] moved too far away.") return diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 0a24b6414ca..76ac7ab9886 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -132,7 +132,7 @@ to_chat(user, "The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.") return - if(!allowed(usr)) + if(!allowed(W)) to_chat(user, "Access denied.") return @@ -158,7 +158,7 @@ if(emagged) return - if(allowed(usr)) + if(allowed(W)) shut_down() else to_chat(user, "Access denied.") @@ -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() diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 73c9f9459dc..900d3d4bdb8 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -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 diff --git a/code/modules/reagents/chemistry/reagents/drink_cold.dm b/code/modules/reagents/chemistry/reagents/drink_cold.dm index 1a7be3748b8..35b67fa2a8b 100644 --- a/code/modules/reagents/chemistry/reagents/drink_cold.dm +++ b/code/modules/reagents/chemistry/reagents/drink_cold.dm @@ -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) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index daf799f31d2..f6474c4a16b 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -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 diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm index ed2e9154a10..bb9c2d41fa1 100644 --- a/code/modules/spacepods/spacepod.dm +++ b/code/modules/spacepods/spacepod.dm @@ -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 diff --git a/html/changelog.html b/html/changelog.html index 5b33bff5da7..d4f91352c4f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,64 @@ -->
+

01 November 2018

+

Citinited updated:

+ +

Farie82 updated:

+ +

Mitchs98 updated:

+ +

Warior4356 updated:

+ + +

31 October 2018

+

Arkatos updated:

+ +

Jountax updated:

+ +

TatsumakiMagi updated:

+ + +

30 October 2018

+

Dave-TH updated:

+ +

Farie82 updated:

+ +

Warior4356 updated:

+ +

uc_guy updated:

+ +

warior4356 updated:

+ +

29 October 2018

Farie82 updated: