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 @@ -->