diff --git a/.gitignore b/.gitignore index e020ce07f19f..de2fcefe7bb2 100644 --- a/.gitignore +++ b/.gitignore @@ -69,5 +69,8 @@ $RECYCLE.BIN # Linux libs /*.so +# VIM swap files. +*.swp + # SS220 EDIT sound/tts_cache/* diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm index 1505811a8c4e..1e3b9a3be133 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_althland_excavation.dmm @@ -797,6 +797,9 @@ /obj/effect/turf_decal/delivery/white, /turf/simulated/floor/plating/airless, /area/ruin/unpowered/althland_excavation) +"oh" = ( +/turf/simulated/mineral/volcanic/lava_land_surface, +/area/lavaland/surface/outdoors) "or" = ( /obj/structure/railing/corner{ dir = 8 @@ -1271,6 +1274,9 @@ nitrogen = 0 }, /area/lavaland/surface/outdoors) +"Mm" = ( +/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "MT" = ( /obj/structure/grille/broken, /obj/effect/decal/cleanable/glass, @@ -1564,6 +1570,19 @@ /area/ruin/unpowered/althland_excavation) (1,1,1) = {" +oh +oh +oh +oh +oh +oh +oh +oh +oh +Mm +Mm +Mm +Mm Ei Ei Ei @@ -1575,6 +1594,25 @@ Ei Ei Ei Ei +Mm +Mm +oh +oh +oh +oh +"} +(2,1,1) = {" +oh +oh +oh +oh +Mm +Mm +Mm +Mm +Mm +Mm +Mm TN TN TN @@ -1591,17 +1629,17 @@ Ei Ei Ei Ei -Ei -Ei -Ei +oh +oh +oh "} -(2,1,1) = {" -Ei -Ei -Ei -Ei -Ei -Ei +(3,1,1) = {" +oh +oh +Mm +Mm +Mm +Mm TN TN TN @@ -1624,14 +1662,14 @@ Ei Ei Ei Ei -Ei -Ei +oh +oh "} -(3,1,1) = {" -Ei -Ei -Ei -Ei +(4,1,1) = {" +oh +Mm +Mm +Mm TN TN TN @@ -1656,13 +1694,13 @@ TN TN Ei Ei -Ei -Ei +Mm +Mm "} -(4,1,1) = {" -Ei -Ei -Ei +(5,1,1) = {" +oh +Mm +Mm TN sp aU @@ -1689,11 +1727,11 @@ TN TN Ei Ei -Ei +Mm "} -(5,1,1) = {" -Ei -Ei +(6,1,1) = {" +Mm +Mm TN TN Ri @@ -1723,9 +1761,9 @@ bm Ei Ei "} -(6,1,1) = {" -Ei -Ei +(7,1,1) = {" +Mm +Mm TN PL BZ @@ -1755,8 +1793,8 @@ bm Ei Ei "} -(7,1,1) = {" -Ei +(8,1,1) = {" +Mm TN TN pE @@ -1787,8 +1825,8 @@ Ei Ei Ei "} -(8,1,1) = {" -Ei +(9,1,1) = {" +Mm TN sp bC @@ -1819,8 +1857,8 @@ aB Ei Ei "} -(9,1,1) = {" -Ei +(10,1,1) = {" +Mm TN TN TN @@ -1851,8 +1889,8 @@ Ei bm Ei "} -(10,1,1) = {" -Ei +(11,1,1) = {" +Mm TN ct Pe @@ -1883,8 +1921,8 @@ Ei bm Ei "} -(11,1,1) = {" -Ei +(12,1,1) = {" +Mm TN pC yb @@ -1915,7 +1953,7 @@ Ei TN Ei "} -(12,1,1) = {" +(13,1,1) = {" Ei TN TN @@ -1945,9 +1983,9 @@ Ei Ei Ei TN -Ei +Mm "} -(13,1,1) = {" +(14,1,1) = {" Ei TN aU @@ -1977,9 +2015,9 @@ XS Ei Ei TN -Ei +Mm "} -(14,1,1) = {" +(15,1,1) = {" Ei TN Yz @@ -2009,9 +2047,9 @@ Ei Ei Ei TN -Ei +Mm "} -(15,1,1) = {" +(16,1,1) = {" Ei TN TN @@ -2041,9 +2079,9 @@ Ei BW aB TN -Ei +Mm "} -(16,1,1) = {" +(17,1,1) = {" Ei TN Ei @@ -2073,9 +2111,9 @@ mK uG BW TN -Ei +Mm "} -(17,1,1) = {" +(18,1,1) = {" Ei bm Ei @@ -2105,9 +2143,9 @@ BW LK PM TN -Ei +Mm "} -(18,1,1) = {" +(19,1,1) = {" Ei bm Ei @@ -2137,9 +2175,9 @@ aB BW KU TN -Ei +Mm "} -(19,1,1) = {" +(20,1,1) = {" Ei TN Ei @@ -2169,9 +2207,9 @@ aB aB uG TN -Ei +Mm "} -(20,1,1) = {" +(21,1,1) = {" Ei TN TN @@ -2201,9 +2239,9 @@ aB aB aB TN -Ei +Mm "} -(21,1,1) = {" +(22,1,1) = {" Ei TN ao @@ -2233,9 +2271,9 @@ BW TJ BW TN -Ei +Mm "} -(22,1,1) = {" +(23,1,1) = {" Ei TN at @@ -2265,9 +2303,9 @@ mh mK uG TN -Ei +Mm "} -(23,1,1) = {" +(24,1,1) = {" Ei TN aG @@ -2297,10 +2335,10 @@ mh mh Gc TN -Ei +Mm "} -(24,1,1) = {" -Ei +(25,1,1) = {" +Mm TN TN bU @@ -2329,11 +2367,11 @@ gg bN TN TN -Ei +Mm "} -(25,1,1) = {" -Ei -Ei +(26,1,1) = {" +Mm +Mm TN az DS @@ -2360,12 +2398,12 @@ jL Nv jS TN -Ei -Ei +Mm +Mm "} -(26,1,1) = {" -Ei -Ei +(27,1,1) = {" +oh +Mm TN TN ap @@ -2392,13 +2430,13 @@ bL YE TN TN -Ei -Ei +Mm +Mm "} -(27,1,1) = {" -Ei -Ei -Ei +(28,1,1) = {" +oh +Mm +Mm TN TN iA @@ -2423,15 +2461,15 @@ kh aE TN TN -Ei -Ei -Ei +Mm +Mm +oh "} -(28,1,1) = {" -Ei -Ei -Ei -Ei +(29,1,1) = {" +oh +Mm +Mm +Mm TN TN TN @@ -2454,18 +2492,18 @@ TN TN TN TN -Ei -Ei -Ei -Ei +Mm +Mm +oh +oh "} -(29,1,1) = {" -Ei -Ei -Ei -Ei -Ei -Ei +(30,1,1) = {" +oh +oh +Mm +Mm +Mm +Mm TN TN TN @@ -2484,25 +2522,25 @@ TN TN TN TN -Ei -Ei -Ei -Ei -Ei -Ei +Mm +Mm +Mm +oh +oh +oh "} -(30,1,1) = {" -Ei -Ei -Ei -Ei -Ei -Ei -Ei -Ei -Ei -Ei -Ei +(31,1,1) = {" +oh +oh +oh +Mm +Mm +Mm +Mm +Mm +Mm +Mm +Mm TN TN TN @@ -2512,14 +2550,14 @@ TN TN TN TN -Ei -Ei -Ei -Ei -Ei -Ei -Ei -Ei -Ei -Ei +Mm +Mm +Mm +Mm +Mm +oh +oh +oh +oh +oh "} diff --git a/_maps/map_files/stations/metastation.dmm b/_maps/map_files/stations/metastation.dmm index 20bac11542ea..1d78a0d6871b 100644 --- a/_maps/map_files/stations/metastation.dmm +++ b/_maps/map_files/stations/metastation.dmm @@ -35212,15 +35212,6 @@ "cvo" = ( /turf/simulated/wall/r_wall, /area/station/maintenance/medmaint) -"cvu" = ( -/obj/machinery/alarm/directional/north, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/flora/ausbushes/fernybush, -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/grass/no_creep, -/area/station/science/research) "cvw" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -38052,16 +38043,11 @@ /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) "cGz" = ( -/obj/structure/extinguisher_cabinet{ - name = "west bump"; - pixel_x = -27 - }, -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/economy/vending/scidrobe, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurplecorner" }, -/obj/structure/flora/ausbushes/fernybush, -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/grass/no_creep, /area/station/science/research) "cGA" = ( /obj/structure/chair/comfy/black{ @@ -47549,25 +47535,6 @@ }, /turf/simulated/floor/engine, /area/station/science/test_chamber) -"eIe" = ( -/obj/machinery/firealarm{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" - }, -/area/station/science/research) "eIj" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -65267,23 +65234,6 @@ icon_state = "dark" }, /area/station/security/storage) -"lTc" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" - }, -/area/station/science/research) "lTB" = ( /obj/item/clothing/gloves/color/latex, /obj/structure/rack, @@ -66572,6 +66522,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/purple, /turf/simulated/floor/engine, /area/station/science/test_chamber) +"myX" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass/no_creep, +/area/station/science/research) "myY" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel, @@ -73161,6 +73122,31 @@ /obj/effect/spawner/random_spawners/oil_maybe, /turf/simulated/floor/plasteel, /area/station/maintenance/fsmaint) +"pmd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/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" + }, +/obj/machinery/newscaster{ + dir = 1; + name = "south bump"; + pixel_y = -28 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitepurple" + }, +/area/station/science/research) "pmE" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 @@ -73858,7 +73844,7 @@ "pCf" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - dir = 4; + dir = 5; icon_state = "whitepurple" }, /area/station/science/research) @@ -77205,14 +77191,6 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/primary/central/north) -"qXr" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/flora/ausbushes/fernybush, -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/grass/no_creep, -/area/station/science/research) "qXK" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plasteel{ @@ -82274,8 +82252,10 @@ }, /area/station/supply/office) "taP" = ( -/obj/machinery/status_display{ - pixel_x = -32 +/obj/machinery/firealarm{ + dir = 8; + name = "west bump"; + pixel_x = -24 }, /turf/simulated/floor/plasteel{ dir = 4; @@ -82919,10 +82899,10 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "tnN" = ( -/obj/item/kirbyplants/plant24, /obj/machinery/camera{ c_tag = "Science Hallway - Research"; - network = list("Research","SS13") + network = list("Research","SS13"); + dir = 9 }, /obj/structure/disposalpipe/segment{ dir = 2; @@ -82939,6 +82919,10 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/extinguisher_cabinet{ + name = "north bump"; + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" @@ -85371,6 +85355,16 @@ icon_state = "dark" }, /area/station/medical/surgery/observation) +"uxo" = ( +/obj/machinery/status_display{ + layer = 4; + pixel_y = 32 + }, +/obj/item/kirbyplants/plant24, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurplecorner" + }, +/area/station/science/research) "uxy" = ( /obj/machinery/atmospherics/binary/pump{ dir = 0; @@ -88953,11 +88947,6 @@ /turf/simulated/floor/grass/no_creep, /area/station/security/permabrig) "waj" = ( -/obj/machinery/newscaster{ - dir = 8; - name = "east bump"; - pixel_x = 28 - }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -89528,7 +89517,7 @@ icon_state = "1-4" }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" + icon_state = "whitepurple" }, /area/station/science/research) "woK" = ( @@ -89998,6 +89987,17 @@ icon_state = "white" }, /area/station/science/xenobiology) +"wzb" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/flora/ausbushes/fernybush, +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass/no_creep, +/area/station/science/research) "wzx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 5 @@ -90756,9 +90756,6 @@ /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) "wTJ" = ( -/obj/machinery/light{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -90770,6 +90767,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/light{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -93444,6 +93444,14 @@ icon_state = "yellow" }, /area/station/engineering/break_room) +"xYS" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/flora/ausbushes/fernybush, +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass/no_creep, +/area/station/science/research) "xZa" = ( /obj/structure/plasticflaps{ opacity = 1 @@ -123738,8 +123746,8 @@ cic fHG fpM cfw -cvu -qXr +uxo +qnt cGz cJp qcw @@ -123996,7 +124004,7 @@ bUy fPC uVF wos -qnt +cwR pCf taP pnh @@ -124512,8 +124520,8 @@ cvl wTJ cwR wIT -eIe -lTc +cOZ +cOZ waj des fWN @@ -124769,9 +124777,9 @@ bWe mfG cwR cxP -lAX -lAX -lAX +wzb +myX +xYS lAX cfw gTS @@ -125025,10 +125033,10 @@ cut soO nry cwR -cxP -eZW -lJA -rfD +pmd +lAX +lAX +lAX lAX uws bGl @@ -125284,8 +125292,8 @@ tnN lGC gcy eZW -keQ -keQ +lJA +rfD lAX gEt bGl diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index d55ff8931d95..2b98c299b0f9 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -185,8 +185,8 @@ #define SHOES_LAYER 28 #define GLOVES_LAYER 27 #define EARS_LAYER 26 -#define SUIT_LAYER 25 -#define BELT_LAYER 24 //Possible make this an overlay of somethign required to wear a belt? +#define BELT_LAYER 25 //Possible make this an overlay of something required to wear a belt? +#define SUIT_LAYER 24 #define SUIT_STORE_LAYER 23 #define BACK_LAYER 22 #define HEAD_ACCESSORY_LAYER 21 diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index f2d4cc4a0aa0..68320b724522 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -468,6 +468,8 @@ text = replacetext(text, "\[/i\]", "") text = replacetext(text, "\[u\]", "") text = replacetext(text, "\[/u\]", "") + text = replacetext(text, "\[s\]", "") + text = replacetext(text, "\[/s\]", "") if(findtext(text, "\[signfont\]") || findtext(text, "\[/signfont\]")) // Make sure the text is there before giving off an error if(check_rights(R_EVENT)) text = replacetext(text, "\[signfont\]", "") diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 3fd857553122..5b8fc955e737 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -136,7 +136,6 @@ busy = FALSE /obj/item/toy/crayon/attack(mob/M, mob/user) - var/huffable = istype(src,/obj/item/toy/crayon/spraycan) if(M == user) if(ishuman(user)) var/mob/living/carbon/human/H = user @@ -147,7 +146,7 @@ playsound(loc, 'sound/items/eatfood.ogg', 50, 0) user.adjust_nutrition(5) if(times_eaten < max_bites) - to_chat(user, "You take a [huffable ? "huff" : "bite"] of the [name]. Delicious!") + to_chat(user, "You take a bite of the [name]. Delicious!") else to_chat(user, "There is no more of [name] left!") qdel(src) @@ -302,7 +301,7 @@ /obj/item/toy/crayon/spraycan name = "\improper Nanotrasen-brand Rapid Paint Applicator" - desc = "A metallic container containing tasty paint." + desc = "A metallic container containing spray paint." icon_state = "spraycan_cap" var/capped = TRUE instant = TRUE @@ -312,6 +311,9 @@ ..() update_icon() +/obj/item/toy/crayon/spraycan/attack(mob/M, mob/user) + return // To stop you from eating spraycans. It's TOO SILLY! + /obj/item/toy/crayon/spraycan/attack_self(mob/living/user) var/choice = tgui_input_list(user, "Do you want to...", "Spraycan Options", list("Toggle Cap","Change Drawing", "Change Color")) switch(choice) @@ -329,26 +331,26 @@ if(!proximity) return if(capped) + to_chat(user, "You cannot spray [target] while the cap is still on!") return - else - if(iscarbon(target)) - if(uses - 10 > 0) - uses = uses - 10 - var/mob/living/carbon/C = target - user.visible_message(" [user] sprays [src] into the face of [target]!") - if(C.client) - C.EyeBlurry(6 SECONDS) - C.EyeBlind(2 SECONDS) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(H.check_eye_prot() <= 0) // no eye protection? ARGH IT BURNS. - H.Confused(6 SECONDS) - H.KnockDown(6 SECONDS) - H.lip_style = "spray_face" - H.lip_color = colour - H.update_body() - playsound(user, 'sound/effects/spray.ogg', 5, TRUE, 5) - ..() + if(iscarbon(target)) + if(uses - 10 > 0) + uses = uses - 10 + var/mob/living/carbon/C = target + user.visible_message(" [user] sprays [src] into the face of [target]!") + if(C.client) + C.EyeBlurry(6 SECONDS) + C.EyeBlind(2 SECONDS) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(H.check_eye_prot() <= 0) // no eye protection? ARGH IT BURNS. + H.Confused(6 SECONDS) + H.KnockDown(6 SECONDS) + H.lip_style = "spray_face" + H.lip_color = colour + H.update_body() + playsound(user, 'sound/effects/spray.ogg', 5, TRUE, 5) + ..() /obj/item/toy/crayon/spraycan/update_icon_state() icon_state = "spraycan[capped ? "_cap" : ""]" diff --git a/code/modules/hydroponics/grown/.misc_seeds.dm.swp b/code/modules/hydroponics/grown/.misc_seeds.dm.swp deleted file mode 100644 index 14c294ba33d3..000000000000 Binary files a/code/modules/hydroponics/grown/.misc_seeds.dm.swp and /dev/null differ diff --git a/code/modules/mining/lavaland/loot/hierophant_loot.dm b/code/modules/mining/lavaland/loot/hierophant_loot.dm index 4ac1ef7d13a8..5cbdee950721 100644 --- a/code/modules/mining/lavaland/loot/hierophant_loot.dm +++ b/code/modules/mining/lavaland/loot/hierophant_loot.dm @@ -16,6 +16,7 @@ attack_verb = list("clubbed", "beat", "pummeled") hitsound = 'sound/weapons/sonic_jackhammer.ogg' actions_types = list(/datum/action/item_action/vortex_recall, /datum/action/item_action/toggle_unfriendly_fire) + resistance_flags = LAVA_PROOF | FIRE_PROOF var/cooldown_time = 20 //how long the cooldown between non-melee ranged attacks is var/chaser_cooldown = 81 //how long the cooldown between firing chasers at mobs is var/chaser_timer = 0 //what our current chaser cooldown is diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index b2f9cb8bb063..47f9ab77c8cc 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -38,8 +38,6 @@ "Virology" = list(MAT_PLASMA, MAT_URANIUM, MAT_GOLD) ) // Variables - /// The currently inserted ID. - var/obj/item/card/id/inserted_id = null /// The number of unclaimed points. var/points = 0 /// Sheet multiplier applied when smelting ore. Updated by [/obj/machinery/proc/RefreshParts]. @@ -126,7 +124,6 @@ /obj/machinery/mineral/ore_redemption/Destroy() // Move any stuff inside us out var/turf/T = get_turf(src) - inserted_id?.forceMove(T) inserted_disk?.forceMove(T) var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) materials.retrieve_all() @@ -151,10 +148,6 @@ if(!..()) return update_icon(UPDATE_ICON_STATE) - if(inserted_id && !(stat & NOPOWER)) - visible_message("The ID slot indicator light flickers on [src] as it spits out a card before powering down.") - inserted_id.forceMove(get_turf(src)) - inserted_id = null /obj/machinery/mineral/ore_redemption/update_icon_state() if(has_power()) @@ -194,7 +187,19 @@ return ..() if(istype(I, /obj/item/card/id)) - try_insert_id(user) + var/obj/item/card/id/ID = I + if(!points) + to_chat(usr, "There are no points to claim."); + return + if(anyone_claim || (req_access_claim in ID.access)) + ID.mining_points += points + ID.total_mining_points += points + to_chat(usr, "[points] Mining Points claimed. You have earned a total of [ID.total_mining_points] Mining Points this Shift!") + points = 0 + SStgui.update_uis(src) + else + to_chat(usr, "Required access not found.") + add_fingerprint(usr) return else if(istype(I, /obj/item/disk/design_disk)) @@ -258,7 +263,6 @@ var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) // General info - data["id"] = inserted_id ? list("name" = "[inserted_id.registered_name] ([inserted_id.assignment])", "points" = inserted_id.mining_points, "total_points" = inserted_id.total_mining_points) : null data["points"] = points data["disk"] = inserted_disk ? list( "name" = inserted_disk.name, @@ -301,18 +305,8 @@ . = TRUE switch(action) - if("claim") - if(!inserted_id || !points) - return - if(anyone_claim || (req_access_claim in inserted_id.access)) - inserted_id.mining_points += points - inserted_id.total_mining_points += points - to_chat(usr, "[points] Mining Points claimed. You have earned a total of [inserted_id.total_mining_points] Mining Points this Shift!") - points = 0 - else - to_chat(usr, "Required access not found.") if("sheet", "alloy") - if(!(check_access(inserted_id) || allowed(usr))) + if(!allowed(usr)) to_chat(usr, "Required access not found.") return FALSE var/id = params["id"] @@ -345,18 +339,6 @@ unload_mineral(A) else unload_mineral(result) - if("insert_id") - try_insert_id(usr) - if("eject_id") - if(!inserted_id) - return FALSE - if(ishuman(usr)) - usr.put_in_hands(inserted_id) - usr.visible_message("[usr] retrieves [inserted_id] from [src].", \ - "You retrieve [inserted_id] from [src].") - else - inserted_id.forceMove(get_turf(src)) - inserted_id = null if("eject_disk") if(!inserted_disk) return FALSE @@ -488,30 +470,6 @@ if(!supply_consoles[C.department] || length(supply_consoles[C.department] - mats_in_stock)) C.createMessage("Ore Redemption Machine", "New Minerals Available!", msg, RQ_NORMALPRIORITY) -/** - * Tries to insert the ID card held by the given user into the machine. - * - * Arguments: - * * user - The ID whose active hand to check for an ID card to insert. - */ -/obj/machinery/mineral/ore_redemption/proc/try_insert_id(mob/user) - . = FALSE - var/obj/item/card/id/I = user.get_active_hand() - if(!istype(I)) - return - if(inserted_id) - to_chat(user, "There is already an ID inside!") - return - if(!user.drop_item()) - return - I.forceMove(src) - inserted_id = I - SStgui.update_uis(src) - interact(user) - user.visible_message("[user] inserts [I] into [src].", \ - "You insert [I] into [src].") - return TRUE - /obj/machinery/mineral/ore_redemption/proc/try_refill_storage(mob/living/silicon/robot/robot) . = FALSE if(!istype(robot)) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index 3213f5f2639f..9c8819b2a11d 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -1099,6 +1099,8 @@ Pass a positive integer as an argument to override a bot's default speed. to_chat(src, "0. [paicard.pai.pai_law0]") if(emagged) to_chat(src, "1. #$!@#$32K#$") + else if(HAS_TRAIT(src, TRAIT_CMAGGED)) + to_chat(src, "1. Be funny.") else to_chat(src, "1. You are a machine built to serve the station's crew and AI(s).") to_chat(src, "2. Your function is to [bot_purpose].") diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index 8f118b1a0591..00c6667b5e97 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -130,6 +130,29 @@ playsound(src, 'sound/machines/honkbot_evil_laugh.ogg', 75, 1, -1) // evil laughter update_icon() +/mob/living/simple_animal/bot/honkbot/cmag_act(mob/user) + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + return + if(locked || !open) + to_chat(user, "Unlock and open it with a screwdriver first!") + return FALSE + + ADD_TRAIT(src, TRAIT_CMAGGED, CLOWN_EMAG) + remote_disabled = TRUE + locked = TRUE + open = FALSE + bot_reset() + turn_on() + if(user) + to_chat(user, "You smear bananium ooze all over [src]'s circuitry!") + add_attack_logs(user, src, "Cmagged") + show_laws() + +/mob/living/simple_animal/bot/honkbot/examine(mob/user) + . = ..() + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + . += "Yellow ooze seems to be seeping from the case..." + /mob/living/simple_animal/bot/honkbot/bullet_act(obj/item/projectile/Proj) if((istype(Proj,/obj/item/projectile/beam)) || (istype(Proj,/obj/item/projectile/bullet) && (Proj.damage_type == BURN))||(Proj.damage_type == BRUTE) && (!Proj.nodamage && Proj.damage < health && ishuman(Proj.firer))) retaliate(Proj.firer) @@ -180,34 +203,57 @@ sensor_blink() addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), cooldowntimehorn) +/mob/living/simple_animal/bot/honkbot/proc/cuff_callback(mob/living/carbon/C) + mode = BOT_ARREST + sleep(1 SECONDS) + playsound(loc, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2) + C.visible_message("[src] is trying to put zipties on [C]!", + "[src] is trying to put zipties on you!") + if(!do_after(src, 6 SECONDS, target = C) || !on) + mode = BOT_IDLE + return + if(!C.handcuffed) + C.handcuffed = new /obj/item/restraints/handcuffs/twimsts(C) + C.update_handcuffed() + C.SetDeaf(0) + playsound(loc, pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/bcreep.ogg'), 50, FALSE) + mode = BOT_IDLE + /mob/living/simple_animal/bot/honkbot/proc/stun_attack(mob/living/carbon/C) // airhorn stun - if(!spam_flag) - playsound(src, 'sound/items/AirHorn.ogg', 100, TRUE, -1) //HEEEEEEEEEEEENK!! - sensor_blink() - if(!spam_flag) - if(ishuman(C)) - var/mob/living/carbon/human/H = C - if(H.check_ear_prot() >= HEARING_PROTECTION_MAJOR) - return - C.SetStuttering(40 SECONDS) //stammer - C.Deaf(5 SECONDS) //far less damage than the H.O.N.K. - C.Jitter(100 SECONDS) - C.Weaken(10 SECONDS) - if(client) //prevent spam from players.. - spam_flag = TRUE - if(!emagged) //HONK once, then leave - threatlevel -= 6 - target = oldtarget_name - else // you really don't want to hit an emagged honkbot - threatlevel = 6 // will never let you go - addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), cooldowntimehorn) - add_attack_logs(src, C, "honked by [src]") - C.visible_message("[src] has honked [C]!",\ - "[src] has honked you!") - else - C.Stuttering(40 SECONDS) - C.Stun(20 SECONDS) - addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), cooldowntimehorn) + if(spam_flag) + return + playsound(src, 'sound/items/AirHorn.ogg', 100, TRUE, -1) //HEEEEEEEEEEEENK!! + sensor_blink() + + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + var/area/location = get_area(src) + speak("Arresting level 4 scumbag [C] in [location].", radio_channel) + + if(!ishuman(C)) + C.Stuttering(40 SECONDS) + C.Stun(20 SECONDS) + addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), cooldowntimehorn) + return + var/mob/living/carbon/human/H = C + if(H.check_ear_prot() >= HEARING_PROTECTION_MAJOR) + return + C.SetStuttering(40 SECONDS) //stammer + C.Deaf(5 SECONDS) //far less damage than the H.O.N.K. + C.Jitter(100 SECONDS) + C.Weaken(10 SECONDS) + if(client) //prevent spam from players.. + spam_flag = TRUE + if(!emagged) //HONK once, then leave + threatlevel -= 6 + target = oldtarget_name + else // you really don't want to hit an emagged honkbot + threatlevel = 6 // will never let you go + addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), cooldowntimehorn) + add_attack_logs(src, C, "honked by [src]") + C.visible_message("[src] has honked [C]!", + "[src] has honked you!") + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + INVOKE_ASYNC(src, PROC_REF(cuff_callback), C) /mob/living/simple_animal/bot/honkbot/handle_automated_action() @@ -237,9 +283,9 @@ honk_attack(target) else if(threatlevel >= 6) + target_lastloc = target.loc stun_attack(target) anchored = FALSE - target_lastloc = target.loc return try_chasing_target(target) @@ -278,6 +324,8 @@ if((C.name == oldtarget_name) && (world.time < last_found + 100)) continue + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + threatlevel = 6 if(threatlevel < 4) if(emagged) // actually emagged bike_horn() @@ -292,8 +340,13 @@ target = C oldtarget_name = C.name bike_horn() - speak("Honk!") - visible_message("[src] starts chasing [C.name]!") + if(HAS_TRAIT(src, TRAIT_CMAGGED)) + speak("Level 4 infraction alert!") + playsound(loc, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50, FALSE) + visible_message("[src] points at [C.name]!") + else + speak("Honk!") + visible_message("[src] starts chasing [C.name]!") mode = BOT_HUNT INVOKE_ASYNC(src, PROC_REF(handle_automated_action)) return TRUE diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 9fcc73e6fc6d..3bb670b18763 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -490,6 +490,22 @@ var/obj/item/paper/manifest/slip = AM + var/error = FALSE + if(/obj/item/stamp/denied in slip.stamped) + error = "Package [slip.ordernumber] rejected. A Nanotrasen supply department official will reach out to you in 2-3 business days." + SSblackbox.record_feedback("tally", "cargo manifests rejected", 1, "amount") + else if(!(/obj/item/stamp/granted in slip.stamped)) + error = "Received unstamped manifest for package [slip.ordernumber]. Remember to stamp all manifests before returning them." + SSblackbox.record_feedback("tally", "cargo manifests not stamped", 1, "amount") + + if(error) + var/datum/economy/line_item/item = new + item.account = SSeconomy.cargo_account + item.credits = 0 + item.reason = error + manifest.line_items += item + return + var/datum/economy/line_item/item = new item.account = SSeconomy.cargo_account item.credits = SSeconomy.credits_per_manifest diff --git a/tgui/packages/tgui/interfaces/OreRedemption.js b/tgui/packages/tgui/interfaces/OreRedemption.js index 77f9f2713494..b798b6655034 100644 --- a/tgui/packages/tgui/interfaces/OreRedemption.js +++ b/tgui/packages/tgui/interfaces/OreRedemption.js @@ -45,39 +45,6 @@ const IdDisk = (properties, context) => { - - {id ? ( -