diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 7514d0d51c1..b683e1259a3 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -85874,6 +85874,7 @@ dir = 8; initialize_directions = 11 }, +/obj/effect/landmark/xmastree, /turf/open/floor/carpet, /area/chapel/main) "cQz" = ( @@ -89976,11 +89977,9 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/syndicate) "cXL" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/plasteel/shuttle/red, -/area/shuttle/syndicate) +/obj/effect/landmark/xmastree, +/turf/open/floor/wood, +/area/crew_quarters/bar) "cXM" = ( /obj/structure/chair{ dir = 8 @@ -129978,7 +129977,7 @@ byY bAJ bza bAG -bAG +cXL bHA bJm bAG diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 4c0ada72b83..2bb8b43d57f 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -52978,7 +52978,7 @@ /area/atmos) "clX" = ( /obj/effect/landmark/event_spawn, -/obj/effect/landmark/vr_spawn, +/obj/effect/landmark/xmastree, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) "clY" = ( @@ -56229,7 +56229,7 @@ /area/space/nearstation) "csT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/vr_spawn, +/obj/effect/landmark/xmastree, /turf/open/floor/plasteel/black, /area/chapel/main) "csU" = ( diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 9a0ef0460a3..9bc414d4e63 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -577,6 +577,10 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE // Examples of huge items: Shotgun, Two Handed Melee Weapons // Examples of gigantic items: Mech Parts, Safe +// m_intent +#define MOVE_INTENT_WALK "walk" +#define MOVE_INTENT_RUN "run" + //Endgame Results #define NUKE_NEAR_MISS 1 diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index eefb3693cf6..8d000ce6a57 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -6,7 +6,7 @@ return time2text(world.timeofday, format) /proc/gameTimestamp(format = "hh:mm:ss") // Get the game time in text - return time2text(world.time - timezoneOffset + 432000, format) + return time2text(world.time - timezoneOffset + 432000 - round_start_time, format) /* Returns 1 if it is the selected month and day */ /proc/isDay(month, day) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 9223a36b13d..4b34e516c03 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -110,7 +110,7 @@ using = new /obj/screen/mov_intent() using.icon = ui_style - using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") + using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") using.screen_loc = ui_movi static_inventory += using diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index 2c14025f201..2d8e3a08e1e 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -12,7 +12,7 @@ using = new /obj/screen/mov_intent() using.icon = ui_style - using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") + using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking") using.screen_loc = ui_movi static_inventory += using diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index af5acd416c0..de691d80480 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -284,10 +284,10 @@ return switch(user.m_intent) if("run") - user.m_intent = "walk" + user.m_intent = MOVE_INTENT_WALK icon_state = "walking" if("walk") - user.m_intent = "run" + user.m_intent = MOVE_INTENT_RUN icon_state = "running" user.update_icons() diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 7c33a9962ed..7ed96bcb692 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -351,7 +351,7 @@ if("guest_ban") guests_allowed = 0 if("usewhitelist") - config.usewhitelist = 1 + config.usewhitelist = TRUE if("allow_metadata") config.allow_Metadata = 1 if("kick_inactive") diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index 515464ea804..6b8ee2640e9 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -3,7 +3,7 @@ config_tag = "traitorchan" traitors_possible = 3 //hard limit on traitors if scaling is turned off restricted_jobs = list("AI", "Cyborg") - required_players = 0 + required_players = 25 required_enemies = 1 // how many of each type are required recommended_enemies = 3 reroll_friendly = 1 diff --git a/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm b/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm index 333b28a1041..88de2dcf093 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/proselytizer_helpers.dm @@ -68,7 +68,7 @@ //Metal conversion /obj/item/stack/rods/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - if(!source) + if(source) return FALSE if(proselytizer.metal_to_alloy) return list("operation_time" = 0, "new_obj_type" = /obj/effect/overlay/temp/ratvar/beam/itemconsume, "alloy_cost" = -(amount*REPLICANT_ROD), "spawn_dir" = SOUTH) @@ -86,7 +86,7 @@ return TRUE /obj/item/stack/sheet/metal/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - if(!source) + if(source) return FALSE if(proselytizer.metal_to_alloy) return list("operation_time" = 0, "new_obj_type" = /obj/effect/overlay/temp/ratvar/beam/itemconsume, "alloy_cost" = -(amount*REPLICANT_METAL), "spawn_dir" = SOUTH) @@ -104,7 +104,7 @@ return TRUE /obj/item/stack/sheet/plasteel/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - if(!source) + if(source) return FALSE if(proselytizer.metal_to_alloy) return list("operation_time" = 0, "new_obj_type" = /obj/effect/overlay/temp/ratvar/beam/itemconsume, "alloy_cost" = -(amount*REPLICANT_PLASTEEL), "spawn_dir" = SOUTH) @@ -123,7 +123,7 @@ //Brass directly to alloy; scarab only /obj/item/stack/sheet/brass/proselytize_vals(mob/living/user, obj/item/clockwork/clockwork_proselytizer/proselytizer) - if(!source) + if(source) return FALSE if(!proselytizer.metal_to_alloy) return FALSE diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm index 77c57243722..9d32a092aab 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm @@ -52,7 +52,8 @@ actions_types = list() /obj/item/clockwork/slab/cyborg/engineer - quickbound = list(/datum/clockwork_scripture/create_object/tinkerers_cache, /datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/tinkerers_daemon) + quickbound = list(/datum/clockwork_scripture/create_object/tinkerers_cache, /datum/clockwork_scripture/create_object/sigil_of_transgression, \ + /datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/tinkerers_daemon) /obj/item/clockwork/slab/cyborg/medical quickbound = list(/datum/clockwork_scripture/ranged_ability/linked_vanguard, /datum/clockwork_scripture/ranged_ability/sentinels_compromise, /datum/clockwork_scripture/fellowship_armory, \ @@ -70,11 +71,12 @@ /datum/clockwork_scripture/create_object/interdiction_lens) /obj/item/clockwork/slab/cyborg/service - quickbound = list(/datum/clockwork_scripture/replicant, /datum/clockwork_scripture/fellowship_armory, /datum/clockwork_scripture/spatial_gateway, \ + quickbound = list(/datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/fellowship_armory, /datum/clockwork_scripture/spatial_gateway, \ /datum/clockwork_scripture/create_object/clockwork_obelisk) /obj/item/clockwork/slab/cyborg/miner - quickbound = list(/datum/clockwork_scripture/ranged_ability/judicial_marker, /datum/clockwork_scripture/ranged_ability/linked_vanguard, /datum/clockwork_scripture/spatial_gateway) + quickbound = list(/datum/clockwork_scripture/ranged_ability/judicial_marker, /datum/clockwork_scripture/ranged_ability/linked_vanguard, \ + /datum/clockwork_scripture/create_object/sigil_of_transgression, /datum/clockwork_scripture/spatial_gateway) /obj/item/clockwork/slab/cyborg/access_display(mob/living/user) user << "Use the action buttons to recite your limited set of scripture!" diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index c16218a4e47..f350c1a553c 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -243,7 +243,9 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or invoker.visible_message(observer_message, creator_message) else if(creator_message) invoker << creator_message - new object_path (get_turf(invoker)) + var/obj/O = new object_path (get_turf(invoker)) + if(istype(O, /obj/item)) + invoker.put_in_hands(O) return TRUE //Uses a ranged slab ability, returning only when the ability no longer exists(ie, when interrupted) or finishes. diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm index 53076f4671b..f40c0f29df0 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm @@ -27,7 +27,7 @@ if(!is_servant_of_ratvar(C) && !C.null_rod_check() && number_legs) //you have legs right C.apply_damage(noncultist_damage * 0.5, BURN, "l_leg") C.apply_damage(noncultist_damage * 0.5, BURN, "r_leg") - if(C.m_intent != "walk") + if(C.m_intent != MOVE_INTENT_WALK) if(!iscultist(C)) C << "Your leg[number_legs > 1 ? "s shiver":" shivers"] with pain!" else //Cultists take extra burn damage @@ -226,8 +226,8 @@ qdel(progbar) -//Replicant: Creates a new clockwork slab. Doesn't use create_object because of its unique behavior. -/datum/clockwork_scripture/replicant +//Replicant: Creates a new clockwork slab. +/datum/clockwork_scripture/create_object/replicant descname = "New Clockwork Slab" name = "Replicant" desc = "Creates a new clockwork slab." @@ -235,19 +235,16 @@ channel_time = 10 required_components = list(REPLICANT_ALLOY = 1) whispered = TRUE + object_path = /obj/item/clockwork/slab + creator_message = "You copy a piece of replicant alloy and command it into a new slab." usage_tip = "This is inefficient as a way to produce components, as the slab produced must be held by someone with no other slabs to produce components." tier = SCRIPTURE_DRIVER + space_allowed = TRUE primary_component = REPLICANT_ALLOY sort_priority = 7 quickbind = TRUE quickbind_desc = "Creates a new Clockwork Slab." -/datum/clockwork_scripture/replicant/scripture_effects() - invoker << "You copy a piece of replicant alloy and command it into a new slab." //No visible message, for stealth purposes - var/obj/item/clockwork/slab/S = new(get_turf(invoker)) - invoker.put_in_hands(S) //Put it in your hands if possible - return TRUE - //Tinkerer's Cache: Creates a tinkerer's cache, allowing global component storage. /datum/clockwork_scripture/create_object/tinkerers_cache diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 3db006968d5..1e19475213f 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1476,6 +1476,7 @@ var/list/airlock_overlays = list() else A = new /obj/structure/door_assembly/door_assembly_0(src.loc) //If you come across a null assemblytype, it will produce the default assembly instead of disintegrating. + A.created_name = name if(!disassembled) if(A) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 99de5c77edc..4e9b7c2d363 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -168,7 +168,7 @@ if(istype(AM, /mob/living/carbon)) var/mob/living/carbon/M = AM - if (M.m_intent != "walk" && anchored) + if (M.m_intent != MOVE_INTENT_WALK && anchored) flash() /obj/machinery/flasher/portable/attackby(obj/item/weapon/W, mob/user, params) @@ -207,4 +207,4 @@ /obj/item/wallframe/flasher/after_attach(var/obj/O) ..() var/obj/machinery/flasher/F = O - F.id = id \ No newline at end of file + F.id = id diff --git a/code/game/objects/effects/alien_acid.dm b/code/game/objects/effects/alien_acid.dm index 650c684e5ce..b5bc101b9ec 100644 --- a/code/game/objects/effects/alien_acid.dm +++ b/code/game/objects/effects/alien_acid.dm @@ -66,7 +66,7 @@ var/mob/living/L = AM if(L.movement_type & FLYING) return - if(L.m_intent != "walk" && prob(40)) + if(L.m_intent != MOVE_INTENT_WALK && prob(40)) var/acid_used = min(acid_level*0.05, 20) if(L.acid_act(10, acid_used, "feet")) acid_level = max(0, acid_level - acid_used*10) @@ -98,4 +98,4 @@ if(8) visible_message("[target] is struggling to withstand the acid!") if(4) - visible_message("[target] begins to crumble under the acid!") \ No newline at end of file + visible_message("[target] begins to crumble under the acid!") diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 23e19f05564..6f6818dd372 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -88,5 +88,4 @@ /obj/item/device/multitool/cyborg name = "multitool" desc = "Optimised and stripped-down version of a regular multitool." - icon = 'icons/obj/items_cyborg.dmi' toolspeed = 2 \ No newline at end of file diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index ff8f3c458ba..884669d0965 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -347,7 +347,7 @@ /obj/item/toy/snappop/Crossed(H as mob|obj) if(ishuman(H) || issilicon(H)) //i guess carp and shit shouldn't set them off var/mob/living/carbon/M = H - if(issilicon(H) || M.m_intent == "run") + if(issilicon(H) || M.m_intent == MOVE_INTENT_RUN) M << "You step on the snap pop!" pop_burst(2, 0) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 91ebaadf7ba..f55d87d1642 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -39,7 +39,6 @@ /obj/item/weapon/wrench/cyborg name = "automatic wrench" desc = "An advanced robotic wrench. Can be found in construction cyborgs." - icon = 'icons/obj/items_cyborg.dmi' toolspeed = 2 /obj/item/weapon/wrench/brass @@ -194,8 +193,6 @@ /obj/item/weapon/screwdriver/cyborg name = "powered screwdriver" desc = "An electrical screwdriver, designed to be both precise and quick." - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "screwdriver_cyborg" usesound = 'sound/items/drill_use.ogg' toolspeed = 2 @@ -253,8 +250,6 @@ /obj/item/weapon/wirecutters/cyborg name = "wirecutters" desc = "This cuts wires." - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "cutters_cyborg" toolspeed = 2 /obj/item/weapon/wirecutters/power @@ -567,8 +562,6 @@ /obj/item/weapon/weldingtool/largetank/cyborg name = "integrated welding tool" desc = "An advanced welder designed to be used in robotic systems." - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "indwelder" toolspeed = 2 /obj/item/weapon/weldingtool/largetank/flamethrower_screwdriver() @@ -677,7 +670,6 @@ /obj/item/weapon/crowbar/cyborg name = "hydraulic crowbar" desc = "A hydraulic prying tool, compact but powerful. Designed to replace crowbar in construction cyborgs." - icon = 'icons/obj/items_cyborg.dmi' usesound = 'sound/items/jaws_pry.ogg' force = 10 toolspeed = 2 diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index ce60db2632e..a210033ca90 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -49,7 +49,7 @@ obj_integrity = 20 max_integrity = 20 var/allow_walk = 1 //can we pass through it on walk intent - + /obj/structure/holosign/barrier/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(!density) return 1 @@ -59,7 +59,7 @@ return 1 if(iscarbon(mover)) var/mob/living/carbon/C = mover - if(allow_walk && C.m_intent == "walk") + if(allow_walk && C.m_intent == MOVE_INTENT_WALK) return 1 /obj/structure/holosign/barrier/engineering diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 25bea0d7e06..4c2af23b3bf 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -132,7 +132,7 @@ else if(C.lying || !(C.status_flags & CANWEAKEN)) // can't slip unbuckled mob if they're lying or can't fall. return 0 - if(C.m_intent=="walk" && (lube&NO_SLIP_WHEN_WALKING)) + if(C.m_intent == MOVE_INTENT_WALK && (lube&NO_SLIP_WHEN_WALKING)) return 0 if(!(lube&SLIDE_ICE)) C << "You slipped[ O ? " on the [O.name]" : ""]!" @@ -236,4 +236,3 @@ wet_time = 0 if(wet) addtimer(src, "HandleWet", 15) - diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 9b229eb107b..4968942aed8 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -19,6 +19,17 @@ if((ckey in admin_datums) || (ckey in deadmins)) admin = 1 + //Whitelist + if(config.usewhitelist) + if(!check_whitelist(ckey(key))) + if (admin) + log_admin("The admin [key] has been allowed to bypass the whitelist") + message_admins("The admin [key] has been allowed to bypass the whitelist") + addclientmessage(ckey,"You have been allowed to bypass the whitelist") + else + log_access("Failed Login: [key] - Not on whitelist") + return list("reason"="whitelist", "desc" = "\nReason: You are not on the white list for this server") + //Guest Checking if(IsGuestKey(key)) if (!guests_allowed) diff --git a/code/modules/admin/whitelist.dm b/code/modules/admin/whitelist.dm new file mode 100644 index 00000000000..079f5026686 --- /dev/null +++ b/code/modules/admin/whitelist.dm @@ -0,0 +1,22 @@ +#define WHITELISTFILE "config/whitelist.txt" + +var/list/whitelist + +/proc/load_whitelist() + whitelist = list() + for(var/line in file2list(WHITELISTFILE)) + if(!line) + continue + if(findtextEx(line,"#",1,2)) + continue + whitelist += line + + if(!whitelist.len) + whitelist = null + +/proc/check_whitelist(var/ckey) + if(!whitelist) + return FALSE + . = (ckey in whitelist) + +#undef WHITELISTFILE diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 57a1249ce6c..70612872db3 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -109,7 +109,7 @@ if(!(MM.movement_type & FLYING)) if(ishuman(AM)) var/mob/living/carbon/H = AM - if(H.m_intent == "run") + if(H.m_intent == MOVE_INTENT_RUN) triggered(H) H.visible_message("[H] accidentally steps on [src].", \ "You accidentally step on [src]") diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index ef910622f9d..3f0f31d4a46 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -335,6 +335,8 @@ var/next_external_rsc = 0 /client/proc/check_randomizer(topic) . = FALSE + if (connection != "seeker") + return topic = params2list(topic) if (!config.check_randomizer) return diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 6aa1830d19e..0367f084c00 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -306,7 +306,8 @@ new/obj/structure/alien/resin/flower_bud_enemy(get_turf(holder)) /datum/spacevine_mutation/flowering/on_cross(obj/structure/spacevine/holder, mob/living/crosser) - holder.entangle(crosser) + if(prob(25)) + holder.entangle(crosser) // SPACE VINES (Note that this code is very similar to Biomass code) @@ -326,6 +327,10 @@ var/obj/effect/spacevine_controller/master = null var/list/mutations = list() +/obj/structure/spacevine/New() + ..() + add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY) + /obj/structure/spacevine/examine(mob/user) ..() var/text = "This one is a" @@ -347,7 +352,7 @@ if(!master.vines.len) var/obj/item/seeds/kudzu/KZ = new(loc) KZ.mutations |= mutations - KZ.potency = min(100, master.mutativness * 10) + KZ.potency = min(100, master.mutativeness * 10) KZ.production = (master.spread_cap / initial(master.spread_cap)) * 50 mutations = list() SetOpacity(0) @@ -430,17 +435,19 @@ var/spread_multiplier = 5 var/spread_cap = 30 var/list/mutations_list = list() - var/mutativness = 1 + var/mutativeness = 1 -/obj/effect/spacevine_controller/New(loc, list/muts, mttv, spreading) +/obj/effect/spacevine_controller/New(loc, list/muts, potency, production) + add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY) spawn_spacevine_piece(loc, , muts) START_PROCESSING(SSobj, src) init_subtypes(/datum/spacevine_mutation/, mutations_list) - if(mttv != null) - mutativness = mttv / 10 - if(spreading != null) - spread_cap *= spreading / 50 - spread_multiplier /= spreading / 50 + if(potency != null) + mutativeness = potency / 10 + if(production != null) + spread_cap *= production / 5 + spread_multiplier /= production / 5 + ..() /obj/effect/spacevine_controller/ex_act() //only killing all vines will end this suffering return @@ -468,7 +475,7 @@ SV.mutations |= parent.mutations var/parentcolor = parent.atom_colours[FIXED_COLOUR_PRIORITY] SV.add_atom_colour(parentcolor, FIXED_COLOUR_PRIORITY) - if(prob(mutativness)) + if(prob(mutativeness)) var/datum/spacevine_mutation/randmut = pick(mutations_list - SV.mutations) randmut.add_mutation_to_vinepiece(SV) @@ -537,7 +544,7 @@ SM.on_buckle(src, V) if((V.stat != DEAD) && (V.buckled != src)) //not dead or captured V << "The vines [pick("wind", "tangle", "tighten")] around you!" - buckle_mob(V) + buckle_mob(V, 1) /obj/structure/spacevine/proc/spread() var/direction = pick(cardinal) diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index a4825162e7e..5a7c865f89b 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -57,6 +57,7 @@ if(prob(20)) mutations.Remove(pick(temp_mut_list)) temp_mut_list.Cut() + if(S.has_reagent("welding_fuel", 5)) for(var/datum/spacevine_mutation/SM in mutations) if(SM.quality == POSITIVE) @@ -64,20 +65,26 @@ if(prob(20)) mutations.Remove(pick(temp_mut_list)) temp_mut_list.Cut() + if(S.has_reagent("phenol", 5)) for(var/datum/spacevine_mutation/SM in mutations) if(SM.quality == MINOR_NEGATIVE) temp_mut_list += SM if(prob(20)) mutations.Remove(pick(temp_mut_list)) + temp_mut_list.Cut() + if(S.has_reagent("blood", 15)) - production += rand(15, -5) + production = Clamp(production + rand(15, -5),1,10) + if(S.has_reagent("amatoxin", 5)) - production += rand(5, -15) + production = Clamp(production + rand(5, -15),1,10) + if(S.has_reagent("plasma", 5)) - potency += rand(5, -15) + potency = Clamp(potency + rand(5, -15),0,100) + if(S.has_reagent("holywater", 10)) - potency += rand(15, -5) + potency = Clamp(potency + rand(15, -5),0,100) /obj/item/weapon/reagent_containers/food/snacks/grown/kudzupod diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 91bcb344f15..a6c86090fa3 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -684,7 +684,7 @@ return if(alert(user, "This will make [src] self-sustaining but consume [O] forever. Are you sure?", "[name]", "I'm Sure", "Abort") == "Abort" || !user) return - if(!O) + if(!O || qdeleted(O)) return if(!Adjacent(user)) return diff --git a/code/modules/jobs/whitelist.dm b/code/modules/jobs/whitelist.dm deleted file mode 100644 index c0d5db24fec..00000000000 --- a/code/modules/jobs/whitelist.dm +++ /dev/null @@ -1,15 +0,0 @@ -#define WHITELISTFILE "data/whitelist.txt" - -var/list/whitelist - -/proc/load_whitelist() - whitelist = file2list(WHITELISTFILE) - if(!whitelist.len) - whitelist = null - -/proc/check_whitelist(mob/M /*, var/rank*/) - if(!whitelist) - return 0 - return ("[M.ckey]" in whitelist) - -#undef WHITELISTFILE \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm index 342b9ed7a0e..e6fd8c5be65 100644 --- a/code/modules/mob/living/carbon/carbon_movement.dm +++ b/code/modules/mob/living/carbon/carbon_movement.dm @@ -59,7 +59,7 @@ var/const/SLIDE_ICE = 8 nutrition = NUTRITION_LEVEL_FED - 1 //just less than feeling vigorous else if(nutrition && stat != DEAD) nutrition -= HUNGER_FACTOR/10 - if(m_intent == "run") + if(m_intent == MOVE_INTENT_RUN) nutrition -= HUNGER_FACTOR/10 - if((disabilities & FAT) && m_intent == "run" && bodytemperature <= 360) + if((disabilities & FAT) && m_intent == MOVE_INTENT_RUN && bodytemperature <= 360) bodytemperature += 2 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index a5e38ab6550..75a8ed51bd6 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -447,11 +447,11 @@ . += config.run_speed else switch(m_intent) - if("run") + if(MOVE_INTENT_RUN) if(drowsyness > 0) . += 6 . += config.run_speed - if("walk") + if(MOVE_INTENT_WALK) . += config.walk_speed /mob/living/proc/makeTrail(turf/T) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index b04955532c4..9002b16850e 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -111,6 +111,7 @@ if(wires.is_cut(WIRE_CAMERA)) camera.status = 0 module = new /obj/item/weapon/robot_module(src) + module.rebuild_modules() update_icons() ..() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 62d45408ef2..a5a49bcca61 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -38,7 +38,6 @@ var/obj/item/I = new i(src) ratvar_modules += I ratvar_modules -= i - rebuild_modules() /obj/item/weapon/robot_module/Destroy() basic_modules.Cut() @@ -163,7 +162,8 @@ for(var/obj/item/I in added_modules) add_module(I, FALSE, FALSE) for(var/i in held_modules) - R.activate_module(i) + if(i) + R.activate_module(i) if(R.hud_used) R.hud_used.update_robot_modules_display() @@ -174,6 +174,7 @@ qdel(RM) return R.module = RM + RM.rebuild_modules() addtimer(RM, "do_transform_animation", 0) qdel(src) return RM diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 173f2cc6b80..28fe9de5e47 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -73,7 +73,7 @@ var/weakened = 0 var/losebreath = 0//Carbon var/a_intent = INTENT_HELP//Living - var/m_intent = "run"//Living + var/m_intent = MOVE_INTENT_RUN//Living var/lastKnownIP = null var/atom/movable/buckled = null//Living @@ -144,4 +144,4 @@ var/resize = 1 //Badminnery resize - var/list/observers = null //The list of people observing this mob. \ No newline at end of file + var/list/observers = null //The list of people observing this mob. diff --git a/config/config.txt b/config/config.txt index a8cc323f2ce..baf5e0baee0 100644 --- a/config/config.txt +++ b/config/config.txt @@ -141,9 +141,8 @@ CHECK_RANDOMIZER ## byond membership starts at $10 for 3 months, so to use the webclient to evade, they would have sink 10 bucks in each evade. #WEBCLIENT_ONLY_BYOND_MEMBERS -## Set to jobban everyone who's key is not listed in data/whitelist.txt from Captain, HoS, HoP, CE, RD, CMO, Warden, Security, Detective, and AI positions. -## Uncomment to 1 to jobban, leave commented out to allow these positions for everyone (but see GUEST_JOBBAN above and regular jobbans) -# USEWHITELIST +## Set to prevent anyone but those ckeys listed in config/whitelist.txt and config/admins.txt from joining your server +#USEWHITELIST ## set a server location for world reboot. Don't include the byond://, just give the address and port. # Don't set this to the same server, BYOND will automatically restart players to the server when it has restarted. diff --git a/config/whitelist.txt b/config/whitelist.txt new file mode 100644 index 00000000000..59270487381 --- /dev/null +++ b/config/whitelist.txt @@ -0,0 +1,9 @@ +############################################################################################### +# Basically, a list of ckeys who make it past user connection # +# Case is not important for ckey. # +############################################################################################### +#Optimumtact +#kevinz000 +#Iamgoofball +#Rshoe95 +#That one penguin who became an admin diff --git a/html/changelog.html b/html/changelog.html index 3a89cd16699..4fed3827075 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,26 @@ -->
+

04 December 2016

+

Durkel updated:

+ + +

03 December 2016

+

Joan updated:

+ +

RandomMarine updated:

+ +

02 December 2016

Cobby updated:

- -

01 October 2016

-

Incoming5643 updated:

-
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index f8574425d17..16341259214 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -8194,3 +8194,21 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. amount of time (per-mob, base 3 seconds), this is because being attacked causes mobs with this var to turn it off, so they can run away, however it was literally never turned on which caused swarmers to get depression and never do anything. +2016-12-03: + Joan: + - rscadd: Trying to move while bound by Geis will cause you to start resisting, + but the time required to resist is up by half a second. + - experiment: Resisting out of Geis now does damage to the binding, and as such + being stunned while bound will no longer totally reset your resist progress. + - rscadd: Using Geis on someone already bound by Geis will interrupt them resisting + out of it and will fully repair the binding. + - tweak: Geis's pre-binding channel now takes longer for each servant above 5. Geis's + conversion channel also takes slightly longer for each servant above 5. + - rscadd: Converted engineering and miner cyborgs can now create Sigils of Transgression. + RandomMarine: + - tweak: Airlocks will keep their original name when their electronics are removed + and replaced. You may still use a pen to rename the assembly if desired. +2016-12-04: + Durkel: + - tweak: Recent enemy reports indicate that changelings have grown bored with attacking + near desolate stations and have shifted focus to more fertile hunting grounds. diff --git a/html/changelogs/AutoChangeLog-pr-21846.yml b/html/changelogs/AutoChangeLog-pr-21846.yml deleted file mode 100644 index 60b408ee804..00000000000 --- a/html/changelogs/AutoChangeLog-pr-21846.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "Joan" -delete-after: True -changes: - - rscadd: "Trying to move while bound by Geis will cause you to start resisting, but the time required to resist is up by half a second." - - experiment: "Resisting out of Geis now does damage to the binding, and as such being stunned while bound will no longer totally reset your resist progress." - - rscadd: "Using Geis on someone already bound by Geis will interrupt them resisting out of it and will fully repair the binding." - - tweak: "Geis's pre-binding channel now takes longer for each servant above 5. Geis's conversion channel also takes slightly longer for each servant above 5." diff --git a/tgstation.dme b/tgstation.dme index 68a71418e06..0a13b8485ca 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -933,6 +933,7 @@ #include "code\modules\admin\stickyban.dm" #include "code\modules\admin\topic.dm" #include "code\modules\admin\watchlist.dm" +#include "code\modules\admin\whitelist.dm" #include "code\modules\admin\DB_ban\functions.dm" #include "code\modules\admin\permissionverbs\permissionedit.dm" #include "code\modules\admin\verbs\adminhelp.dm" @@ -1307,7 +1308,6 @@ #include "code\modules\hydroponics\grown\towercap.dm" #include "code\modules\jobs\access.dm" #include "code\modules\jobs\jobs.dm" -#include "code\modules\jobs\whitelist.dm" #include "code\modules\jobs\job_types\assistant.dm" #include "code\modules\jobs\job_types\captain.dm" #include "code\modules\jobs\job_types\cargo_service.dm"