diff --git a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm index 451a2a8bce..f4207eeba5 100644 --- a/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm +++ b/code/ATMOSPHERICS/components/binary_devices/algae_generator_vr.dm @@ -238,9 +238,7 @@ if(amount <= 0) amount = S.max_amount var/ejected = min(round(stored_material[material_name] / S.perunit), amount) - S.amount = min(ejected, amount) - if(S.amount <= 0) - qdel(S) + if(!S.set_amount(min(ejected, amount))) return stored_material[material_name] -= ejected * S.perunit if(recursive && stored_material[material_name] >= S.perunit) @@ -256,7 +254,7 @@ var/max_res_amount = storage_capacity[S.material.name] if(stored_material[S.material.name] + S.perunit <= max_res_amount) var/count = 0 - while(stored_material[S.material.name] + S.perunit <= max_res_amount && S.amount >= 1) + while(stored_material[S.material.name] + S.perunit <= max_res_amount && S.get_amount() >= 1) stored_material[S.material.name] += S.perunit S.use(1) count++ diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index 1f5b6d41ae..8f760c3cc9 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -13,6 +13,9 @@ var/global/list/active_ghost_pods = list() var/global/list/sensorpreflist = list("Off", "Binary", "Vitals", "Tracking", "No Preference") +// Used by the ban panel to determine what departments are offmap departments. All these share an 'offmap roles' ban. +var/global/list/offmap_departments = list(DEPARTMENT_TALON) + // Closets have magic appearances GLOBAL_LIST_EMPTY(closet_appearances) diff --git a/code/_helpers/names.dm b/code/_helpers/names.dm index 20f7b2b31d..e85a607417 100644 --- a/code/_helpers/names.dm +++ b/code/_helpers/names.dm @@ -172,7 +172,7 @@ var/syndicate_code_response//Code response for traitors. var/safety[] = list(1,2,3)//Tells the proc which options to remove later on. var/nouns[] = list("love","hate","anger","peace","pride","sympathy","bravery","loyalty","honesty","integrity","compassion","charity","success","courage","deceit","skill","beauty","brilliance","pain","misery","beliefs","dreams","justice","truth","faith","liberty","knowledge","thought","information","culture","trust","dedication","progress","education","hospitality","leisure","trouble","friendships", "relaxation") - var/drinks[] = list("vodka and tonic","gin fizz","bahama mama","manhattan","black Russian","whiskey soda","long island tea","margarita","Irish coffee"," manly dwarf","Irish cream","doctor's delight","Beepksy Smash","tequilla sunrise","brave bull","gargle blaster","bloody mary","whiskey cola","white Russian","vodka martini","martini","Cuba libre","kahlua","vodka","wine","moonshine") + var/drinks[] = list("vodka and tonic","gin fizz","bahama mama","manhattan","black Russian","whiskey soda","long island tea","margarita","Irish coffee"," manly dwarf","Irish cream","doctor's delight","Beepksy Smash","tequilla sunrise","brave bull","gargle blaster","bloody mary","whiskey cola","white Russian","vodka martini","martini","Cuba libre","kahlua","vodka","redwine","moonshine") var/locations[] = teleportlocs.len ? teleportlocs : drinks//if null, defaults to drinks instead. var/names[] = list() diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index 65974fe009..9f7848b3d3 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -15,14 +15,13 @@ return FALSE // should stop you from dragging through windows return TRUE -/atom/MouseDrop(atom/over) - if(!usr || !over) return - if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows +/atom/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) + if(!usr || !over) + return + if(!Adjacent(usr) || !over.Adjacent(usr)) + return // should stop you from dragging through windows - spawn(0) - over.MouseDrop_T(src,usr) - return + INVOKE_ASYNC(over, /atom/.proc/MouseDrop_T, src, usr, src_location, over_location, src_control, over_control, params) -// recieve a mousedrop -/atom/proc/MouseDrop_T(atom/dropping, mob/user) - return +/atom/proc/MouseDrop_T(atom/dropping, mob/user, src_location, over_location, src_control, over_control, params) + return \ No newline at end of file diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 1cb0c802a9..d5e2908def 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -298,6 +298,9 @@ var/list/gamemode_cache = list() var/static/list/jukebox_track_files + var/static/suggested_byond_version + var/static/suggested_byond_build + /datum/configuration/New() var/list/L = subtypesof(/datum/game_mode) for (var/T in L) @@ -953,6 +956,12 @@ var/list/gamemode_cache = list() if("jukebox_track_files") config.jukebox_track_files = splittext(value, ";") + + if("suggested_byond_version") + config.suggested_byond_version = text2num(value) + + if("suggested_byond_build") + config.suggested_byond_build = text2num(value) // VOREStation Edit Start - Can't be in _vr file because it is loaded too late. if("vgs_access_identifier") diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index c866711ab5..f4a1fc2c3b 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -135,7 +135,7 @@ LAZYADDASSOCLIST(.["instances"], item.type, item) if(istype(item, /obj/item/stack)) var/obj/item/stack/stack = item - .["other"][item.type] += stack.amount + .["other"][item.type] += stack.get_amount() else if(item.tool_qualities) .["tool_qualities"] |= item.tool_qualities .["other"][item.type] += 1 @@ -297,20 +297,20 @@ var/obj/item/stack/SD while(amt > 0) S = locate(path_key) in surroundings - if(S.amount >= amt) + if(S.get_amount() >= amt) if(!locate(S.type) in Deletion) SD = new S.type() Deletion += SD S.use(amt) SD = locate(S.type) in Deletion - SD.amount += amt + SD.add(amt) continue main_loop else - amt -= S.amount + amt -= S.get_amount() if(!locate(S.type) in Deletion) Deletion += S else - data = S.amount + data = S.get_amount() S = locate(S.type) in Deletion S.add(data) surroundings -= S @@ -334,8 +334,8 @@ continue else if(istype(part, /obj/item/stack)) var/obj/item/stack/ST = locate(part) in Deletion - if(ST.amount > partlist[part]) - ST.amount = partlist[part] + if(ST.get_amount() > partlist[part]) + ST.set_amount(partlist[part]) . += ST Deletion -= ST continue diff --git a/code/datums/components/crafting/recipes/primitive.dm b/code/datums/components/crafting/recipes/primitive.dm index 064fd63020..3c3eb4e84b 100644 --- a/code/datums/components/crafting/recipes/primitive.dm +++ b/code/datums/components/crafting/recipes/primitive.dm @@ -11,3 +11,27 @@ reqs = list(/obj/item/stack/material/cloth = 2) time = 40 category = CAT_PRIMAL + +/* + * Clothing + */ + +/datum/crafting_recipe/primitive_clothes + name = "primitive clothes" + result = /obj/item/clothing/under/primitive + reqs = list( + /obj/item/stack/material/fiber = 4, + /obj/item/stack/material/cloth = 6 + ) + time = 90 + category = CAT_CLOTHING + +/datum/crafting_recipe/primitive_shoes + name = "primitive shoes" + result = /obj/item/clothing/shoes/primitive + reqs = list( + /obj/item/stack/material/fiber = 2, + /obj/item/stack/material/cloth = 3 + ) + time = 60 + category = CAT_CLOTHING \ No newline at end of file diff --git a/code/datums/ghost_query.dm b/code/datums/ghost_query.dm index d40ef7bab8..c471c47c81 100644 --- a/code/datums/ghost_query.dm +++ b/code/datums/ghost_query.dm @@ -52,6 +52,11 @@ /// Send async alerts and ask for responses. Expects you to have tested D for client and type already /datum/ghost_query/proc/ask_question(var/mob/observer/dead/D) + //VOREStation Add Start Check the ban status before we ask + if(jobban_isbanned(D, "GhostRoles")) + return + //VOREStation Add End + var/client/C = D.client window_flash(C) @@ -67,7 +72,7 @@ return // Unhandled are "No" and "Nevermind" responses, which should just do nothing - + // This response is always fine, doesn't warrant retesting switch(response) if("Never for this round") diff --git a/code/datums/outfits/costumes/halloween.dm b/code/datums/outfits/costumes/halloween.dm index cca8047625..0fdad908c2 100644 --- a/code/datums/outfits/costumes/halloween.dm +++ b/code/datums/outfits/costumes/halloween.dm @@ -52,7 +52,7 @@ name = OUTFIT_COSTUME("Cowboy") uniform = /obj/item/clothing/under/pants{ starting_accessories=list(/obj/item/clothing/accessory/holster/hip) } shoes = /obj/item/clothing/shoes/boots/cowboy - head = /obj/item/clothing/head/cowboy_hat + head = /obj/item/clothing/head/cowboy gloves = /obj/item/clothing/gloves/fingerless suit = /obj/item/clothing/accessory/poncho r_hand = /obj/item/weapon/gun/projectile/revolver/capgun diff --git a/code/datums/supplypacks/costumes_vr.dm b/code/datums/supplypacks/costumes_vr.dm index 5d65a98ca9..482f024290 100644 --- a/code/datums/supplypacks/costumes_vr.dm +++ b/code/datums/supplypacks/costumes_vr.dm @@ -296,8 +296,10 @@ /obj/item/clothing/accessory/collar/spike, /obj/item/clothing/gloves/fingerless, /obj/item/clothing/gloves/botanic_leather, - /obj/item/clothing/head/cowboy_hat, - /obj/item/clothing/head/cowboy_hat/black + /obj/item/clothing/head/cowboy, + /obj/item/clothing/head/cowboy/bandit, + /obj/item/clothing/accessory/cowboy_vest/brown, + /obj/item/clothing/accessory/cowboy_vest/grey ) cost = 50 containertype = /obj/structure/closet/crate diff --git a/code/datums/vending/stored_item.dm b/code/datums/vending/stored_item.dm index 4b8606ff61..3b46c6be3f 100644 --- a/code/datums/vending/stored_item.dm +++ b/code/datums/vending/stored_item.dm @@ -70,7 +70,7 @@ if(.) var/obj/item/stack/S = product if(istype(S)) - amount += S.amount + amount += S.get_amount() /datum/stored_item/stack/get_product(var/product_location, var/count) if(!LAZYLEN(instances)) diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm index d4045aefe8..20677bb0ff 100644 --- a/code/game/machinery/CableLayer.dm +++ b/code/game/machinery/CableLayer.dm @@ -9,8 +9,7 @@ var/on = 0 /obj/machinery/cablelayer/New() - cable = new(src) - cable.amount = 100 + cable = new(src, 100) ..() /obj/machinery/cablelayer/Moved(atom/old_loc, direction, forced = FALSE) @@ -36,32 +35,32 @@ return if(O.is_wirecutter()) - if(cable && cable.amount) - var/m = round(input(usr,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) - m = min(m, cable.amount) + if(cable && cable.get_amount()) + var/m = round(input(usr, "Please specify the length of cable to cut", "Cut cable", min(cable.get_amount(), 30)) as num, 1) + m = min(m, cable.get_amount()) m = min(m, 30) if(m) playsound(src, O.usesound, 50, 1) use_cable(m) var/obj/item/stack/cable_coil/CC = new (get_turf(src)) - CC.amount = m + CC.set_amount(m) else to_chat(usr, "There's no more cable on the reel.") /obj/machinery/cablelayer/examine(mob/user) . = ..() - . += "[src]'s cable reel has [cable.amount] length\s left." + . += "[src]'s cable reel has [cable.get_amount()] length\s left." /obj/machinery/cablelayer/proc/load_cable(var/obj/item/stack/cable_coil/CC) - if(istype(CC) && CC.amount) - var/cur_amount = cable? cable.amount : 0 + if(istype(CC) && CC.get_amount()) + var/cur_amount = cable ? cable.get_amount() : 0 var/to_load = max(max_cable - cur_amount,0) if(to_load) - to_load = min(CC.amount, to_load) + to_load = min(CC.get_amount(), to_load) if(!cable) - cable = new(src) - cable.amount = 0 - cable.amount += to_load + cable = new(src, to_load) + else + cable.add(to_load) CC.use(to_load) return to_load else @@ -69,7 +68,7 @@ return /obj/machinery/cablelayer/proc/use_cable(amount) - if(!cable || cable.amount<1) + if(!cable || cable.get_amount() < 1) visible_message("A red light flashes on \the [src].") return cable.use(amount) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index ede89d5afe..0ecc4e8488 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -226,7 +226,7 @@ if(multiplier > 1) if(istype(I, /obj/item/stack)) var/obj/item/stack/S = I - S.amount = multiplier + S.set_amount(multiplier) else for(multiplier; multiplier > 1; --multiplier) // Create multiple items if it's not a stack. I = new making.path(src.loc) diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index e5cf8da8e1..e98e687af4 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -183,8 +183,7 @@ points -= cost if(ispath(bi.equipment_path, /obj/item/stack)) - var/obj/item/stack/S = new bi.equipment_path(loc) - S.amount = bi.equipment_amt + new bi.equipment_path(loc, bi.equipment_amt) playsound(src, 'sound/machines/vending/vending_drop.ogg', 100, 1) return TRUE diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 73cde92e1b..6dbe833b29 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -86,8 +86,7 @@ to_chat(user, "You remove the cables.") state = 2 icon_state = "2" - var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc ) - A.amount = 5 + new /obj/item/stack/cable_coil(loc, 5) if(istype(P, /obj/item/stack/material) && P.get_material_name() == "rglass") var/obj/item/stack/RG = P diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index b4d66b3a08..c1f25830b4 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -20,7 +20,7 @@ /obj/item/toy/cultsword = 1, /obj/item/toy/bouquet/fake = 1, /obj/item/clothing/accessory/badge/sheriff = 2, - /obj/item/clothing/head/cowboy_hat/small = 2, + /obj/item/clothing/head/cowboy/small = 2, /obj/item/toy/stickhorse = 2 ) var/list/special_prizes = list() // Holds instanced objects, intended for admins to shove surprises inside or something. diff --git a/code/game/machinery/computer/arcade_vr.dm b/code/game/machinery/computer/arcade_vr.dm index f5c23ead0d..210f31360f 100644 --- a/code/game/machinery/computer/arcade_vr.dm +++ b/code/game/machinery/computer/arcade_vr.dm @@ -1,5 +1,5 @@ /obj/machinery/computer/arcade - prizes = list( /obj/item/weapon/storage/box/snappops = 2, + prizes = list( /obj/item/weapon/storage/box/snappops = 2, /obj/item/toy/blink = 2, /obj/item/clothing/under/syndicate/tacticool = 2, /obj/item/toy/sword = 2, @@ -15,7 +15,7 @@ /obj/item/toy/cultsword = 1, /obj/item/toy/bouquet/fake = 1, /obj/item/clothing/accessory/badge/sheriff = 2, - /obj/item/clothing/head/cowboy_hat/small = 2, + /obj/item/clothing/head/cowboy/small = 2, /obj/item/toy/stickhorse = 2, /obj/item/toy/rock = 2, /obj/item/toy/flash = 2, diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index 36befb944e..cc8227147c 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -189,7 +189,7 @@ to_chat(user, "\The [src] is already fully repaired.") return var/obj/item/stack/P = C - if(P.amount < amt) + if(P.get_amount() < amt) to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") return to_chat(user, "You begin repairing [src]...") diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 3c392cf9a0..fa31ef365f 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -277,8 +277,7 @@ if(repairing && I.is_crowbar()) var/datum/material/mat = get_material() - var/obj/item/stack/material/repairing_sheet = mat.place_sheet(loc) - repairing_sheet.amount += repairing-1 + var/obj/item/stack/material/repairing_sheet = mat.place_sheet(loc, repairing) repairing = 0 to_chat(user, "You remove \the [repairing_sheet].") playsound(src, I.usesound, 100, 1) diff --git a/code/game/machinery/doors/door_vr.dm b/code/game/machinery/doors/door_vr.dm index 6c36a2514d..6583b841b8 100644 --- a/code/game/machinery/doors/door_vr.dm +++ b/code/game/machinery/doors/door_vr.dm @@ -90,8 +90,7 @@ return TRUE if(reinforcing && I.is_crowbar()) - var/obj/item/stack/material/plasteel/reinforcing_sheet = new /obj/item/stack/material/plasteel(src.loc) - reinforcing_sheet.amount = reinforcing + var/obj/item/stack/material/plasteel/reinforcing_sheet = new /obj/item/stack/material/plasteel(src.loc, reinforcing) reinforcing = 0 to_chat(user, "You remove \the [reinforcing_sheet].") playsound(src, I.usesound, 100, 1) diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm index 6a593ab554..ed4b086e73 100644 --- a/code/game/machinery/frame.dm +++ b/code/game/machinery/frame.dm @@ -514,9 +514,8 @@ if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/CP = P if(CP.get_amount() > 1) - var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided - var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src) - CC.amount = camt + var/camt = min(CP.get_amount(), req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided + var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src, camt) CC.update_icon() CP.use(camt) components += CC @@ -587,9 +586,8 @@ if(istype(P, /obj/item/stack)) var/obj/item/stack/ST = P if(ST.get_amount() > 1) - var/camt = min(ST.amount, req_components[I]) // amount of stack to take, idealy amount required, but limited by amount provided - var/obj/item/stack/NS = new ST.stacktype(src) - NS.amount = camt + var/camt = min(ST.get_amount(), req_components[I]) // amount of stack to take, idealy amount required, but limited by amount provided + var/obj/item/stack/NS = new ST.stacktype(src, camt) NS.update_icon() ST.use(camt) components += NS diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 5a78697b2a..f3149dc78a 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -71,8 +71,7 @@ to_chat(user, "You start to dismantle the IV drip.") if(do_after(user, 15)) to_chat(user, "You dismantle the IV drip.") - var/obj/item/stack/rods/A = new /obj/item/stack/rods(src.loc) - A.amount = 6 + new /obj/item/stack/rods(src.loc, 6) if(beaker) beaker.loc = get_turf(src) beaker = null diff --git a/code/game/machinery/partslathe_vr.dm b/code/game/machinery/partslathe_vr.dm index 77eefb94c9..3fe7074b41 100644 --- a/code/game/machinery/partslathe_vr.dm +++ b/code/game/machinery/partslathe_vr.dm @@ -125,12 +125,12 @@ if(!(S.material.name in materials)) to_chat(user, "The [src] doesn't accept [S.material]!") return 1 - if(S.amount < 1) + if(S.get_amount() < 1) return 1 // Does this even happen? Sanity check I guess. var/max_res_amount = storage_capacity[S.material.name] if(materials[S.material.name] + S.perunit <= max_res_amount) var/count = 0 - while(materials[S.material.name] + S.perunit <= max_res_amount && S.amount >= 1) + while(materials[S.material.name] + S.perunit <= max_res_amount && S.get_amount() >= 1) materials[S.material.name] += S.perunit S.use(1) count++ @@ -205,7 +205,7 @@ // 0 amount = 0 means ejecting a full stack; -1 means eject everything /obj/machinery/partslathe/proc/eject_materials(var/material, var/amount) - var/recursive = amount == -1 ? 1 : 0 + var/recursive = amount == -1 ? TRUE : FALSE material = lowertext(material) var/mattype switch(material) @@ -219,9 +219,7 @@ if(amount <= 0) amount = S.max_amount var/ejected = min(round(materials[material] / S.perunit), amount) - S.amount = min(ejected, amount) - if(S.amount <= 0) - qdel(S) + if(!S.set_amount(min(ejected, amount))) return materials[material] -= ejected * S.perunit if(recursive && materials[material] >= S.perunit) diff --git a/code/game/machinery/pipe/pipelayer.dm b/code/game/machinery/pipe/pipelayer.dm index 3debf68f53..bcc1f770a3 100644 --- a/code/game/machinery/pipe/pipelayer.dm +++ b/code/game/machinery/pipe/pipelayer.dm @@ -146,10 +146,9 @@ var/amount_ejected = 0 while (metal >= 1) var/datum/material/M = get_material_by_name(MAT_STEEL) - var/obj/item/stack/material/S = new M.stack_type(get_turf(src)) - S.amount = min(metal, S.max_amount) - metal -= S.amount - amount_ejected += S.amount + var/obj/item/stack/material/S = new M.stack_type(get_turf(src), metal) + metal -= S.get_amount() + amount_ejected += S.get_amount() return amount_ejected /obj/machinery/pipelayer/proc/dismantleFloor(var/turf/new_turf) diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index 1f9c9c8f70..103ea5f7ae 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -21,7 +21,7 @@ if(M) if(!M.get_amount()) return - while(metal_amount < 150000 && M.amount) + while(metal_amount < 150000 && M.get_amount()) metal_amount += O.matter[MAT_STEEL] /*O:height * O:width * O:length * 100000.0*/ M.use(1) count++ diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index b57a7a3ce8..77c3187458 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -67,11 +67,10 @@ //Tanning! for(var/obj/item/stack/hairlesshide/HH in washing) - var/obj/item/stack/wetleather/WL = new(src) - WL.amount = HH.amount + var/obj/item/stack/wetleather/WL = new(src, HH.get_amount()) washing -= HH HH.forceMove(get_turf(src)) - HH.use(HH.amount) + HH.use(HH.get_amount()) washing += WL diff --git a/code/game/mecha/equipment/tools/cable_layer.dm b/code/game/mecha/equipment/tools/cable_layer.dm index a431ecdcbf..8de184cb7a 100644 --- a/code/game/mecha/equipment/tools/cable_layer.dm +++ b/code/game/mecha/equipment/tools/cable_layer.dm @@ -8,8 +8,7 @@ required_type = list(/obj/mecha/working) /obj/item/mecha_parts/mecha_equipment/tool/cable_layer/New() - cable = new(src) - cable.amount = 0 + cable = new(src, 0) ..() /obj/item/mecha_parts/mecha_equipment/tool/cable_layer/MoveAction() @@ -38,13 +37,12 @@ log_message("[equip_ready?"Dea":"A"]ctivated.") return if(href_list["cut"]) - if(cable && cable.amount) - var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) - m = min(m, cable.amount) + if(cable && cable.get_amount()) + var/m = round(input(chassis.occupant, "Please specify the length of cable to cut", "Cut cable", min(cable.get_amount(), 30)) as num, 1) + m = min(m, cable.get_amount()) if(m) use_cable(m) - var/obj/item/stack/cable_coil/CC = new (get_turf(chassis)) - CC.amount = m + new /obj/item/stack/cable_coil(get_turf(chassis), m) else occupant_message("There's no more cable on the reel.") return @@ -52,19 +50,19 @@ /obj/item/mecha_parts/mecha_equipment/tool/cable_layer/get_equip_info() var/output = ..() if(output) - return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" + return "[output] \[Cable: [cable ? cable.get_amount() : 0] m\][(cable && cable.get_amount()) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" return /obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/load_cable(var/obj/item/stack/cable_coil/CC) - if(istype(CC) && CC.amount) - var/cur_amount = cable? cable.amount : 0 + if(istype(CC) && CC.get_amount()) + var/cur_amount = cable? cable.get_amount() : 0 var/to_load = max(max_cable - cur_amount,0) if(to_load) - to_load = min(CC.amount, to_load) + to_load = min(CC.get_amount(), to_load) if(!cable) - cable = new(src) - cable.amount = 0 - cable.amount += to_load + cable = new(src, to_load) + else + cable.add(to_load) CC.use(to_load) return to_load else @@ -72,12 +70,12 @@ return /obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/use_cable(amount) - if(!cable || cable.amount<1) + if(!cable || cable.get_amount() < 1) set_ready_state(TRUE) occupant_message("Cable depleted, [src] deactivated.") log_message("Cable depleted, [src] deactivated.") return - if(cable.amount < amount) + if(cable.get_amount() < amount) occupant_message("No enough cable to finish the task.") return cable.use(amount) diff --git a/code/game/mecha/equipment/tools/generator.dm b/code/game/mecha/equipment/tools/generator.dm index 78a74bc0f8..cdb8eb4680 100644 --- a/code/game/mecha/equipment/tools/generator.dm +++ b/code/game/mecha/equipment/tools/generator.dm @@ -18,8 +18,7 @@ /obj/item/mecha_parts/mecha_equipment/generator/Initialize() . = ..() - fuel = new fuel_type(src) - fuel.amount = 0 + fuel = new fuel_type(src, 0) /obj/item/mecha_parts/mecha_equipment/generator/Destroy() qdel(fuel) @@ -29,7 +28,7 @@ if(!chassis) set_ready_state(TRUE) return PROCESS_KILL - if(fuel.amount<=0) + if(fuel.get_amount() <= 0) log_message("Deactivated - no fuel.") set_ready_state(TRUE) return PROCESS_KILL @@ -43,7 +42,7 @@ if(cur_charge3\] - [(datum_flags & DF_ISPROCESSING)?"Dea":"A"]ctivate" + return "[output] \[[fuel]: [round(fuel.get_amount()*fuel.perunit,0.1)] cm3\] - [(datum_flags & DF_ISPROCESSING)?"Dea":"A"]ctivate" return /obj/item/mecha_parts/mecha_equipment/generator/action(target) @@ -86,12 +85,12 @@ return /obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(var/obj/item/stack/material/P) - if(P.type == fuel.type && P.amount) - var/to_load = max(max_fuel - fuel.amount*fuel.perunit,0) + if(P.type == fuel.type && P.get_amount()) + var/to_load = max(max_fuel - fuel.get_amount()*fuel.perunit,0) if(to_load) - var/units = min(max(round(to_load / P.perunit),1),P.amount) + var/units = min(max(round(to_load / P.perunit),1),P.get_amount()) if(units) - fuel.amount += units + fuel.add(units) P.use(units) return units else diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index d6d51fa923..4e92255d05 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -451,6 +451,7 @@ if(..()) return if(!allowed(user)) + to_chat(user, SPAN_WARNING("\The [src] rejects your use due to lack of access!")) return tgui_interact(user) @@ -665,18 +666,44 @@ visible_message("[bicon(src)] [src] beeps: \"No records in User DB\"") /obj/machinery/mecha_part_fabricator/proc/eject_materials(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything - var/recursive = amount == -1 ? 1 : 0 + var/recursive = amount == -1 ? TRUE : FALSE var/matstring = lowertext(material) - var/datum/material/M = get_material_by_name(matstring) - var/obj/item/stack/material/S = M.place_sheet(get_turf(src)) - if(amount <= 0) - amount = S.max_amount - var/ejected = min(round(materials[matstring] / S.perunit), amount) - S.amount = min(ejected, amount) - if(S.amount <= 0) - qdel(S) + // 0 or null, nothing to eject + if(!materials[matstring]) return + // Problem, fix problem and abort + if(materials[matstring] < 0) + warning("[src] tried to eject material '[material]', which it has 'materials[matstring]' of!") + materials[matstring] = 0 + return + + // Find the material datum for our material + var/datum/material/M = get_material_by_name(matstring) + if(!M) + warning("[src] tried to eject material '[matstring]', which didn't match any known material datum!") + return + // Find what type of sheets it makes + var/obj/item/stack/material/S = M.stack_type + if(!S) + warning("[src] tried to eject material '[matstring]', which didn't have a stack_type!") + return + + // If we were passed -1, then it's recursive ejection and we should eject all we can + if(amount <= 0) + amount = initial(S.max_amount) + // Smaller of what we have left, or the desired amount (note the amount is in sheets, but the array stores perunit values) + var/ejected = min(round(materials[matstring] / initial(S.perunit)), amount) + + // Place a sheet + S = M.place_sheet(get_turf(src), ejected) + if(!istype(S)) + warning("[src] tried to eject material '[material]', which didn't generate a proper stack when asked!") + return + + // Reduce our amount stored materials[matstring] -= ejected * S.perunit + + // Recurse if we have enough left for more sheets if(recursive && materials[matstring] >= S.perunit) eject_materials(matstring, -1) diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index 82a83e601e..27974a588d 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -190,8 +190,7 @@ holder.icon_state = "ripley4" else user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 + new /obj/item/stack/cable_coil(get_turf(holder), 4) holder.icon_state = "ripley2" if(10) if(diff==FORWARD) @@ -238,8 +237,7 @@ holder.icon_state = "ripley10" else user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/steel(get_turf(holder), 5) holder.icon_state = "ripley8" if(4) if(diff==FORWARD) @@ -261,8 +259,7 @@ holder.icon_state = "ripley13" else user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/plasteel(get_turf(holder), 5) holder.icon_state = "ripley11" if(1) if(diff==FORWARD) @@ -425,8 +422,7 @@ holder.icon_state = "gygax4" else user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 + new /obj/item/stack/cable_coil(get_turf(holder), 4) holder.icon_state = "gygax2" if(16) if(diff==FORWARD) @@ -521,8 +517,7 @@ holder.icon_state = "gygax16" else user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/steel(get_turf(holder), 5) holder.icon_state = "gygax14" if(4) if(diff==FORWARD) @@ -709,8 +704,7 @@ holder.icon_state = "gygax4" else user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 + new /obj/item/stack/cable_coil(get_turf(holder), 4) holder.icon_state = "gygax2" if(16) if(diff==FORWARD) @@ -805,8 +799,7 @@ holder.icon_state = "gygax16" else user.visible_message("[user] pries internal armor layer from [holder].", "You pry the internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/steel(get_turf(holder), 5) holder.icon_state = "gygax14" if(4) if(diff==FORWARD) @@ -828,8 +821,7 @@ holder.icon_state = "gygax19-s" else user.visible_message("[user] pries the external armor layer from [holder].", "You pry the external armor layer from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) // Fixes serenity giving Gygax Armor Plates for the reverse action... - MS.amount = 5 + new /obj/item/stack/material/plasteel(get_turf(holder), 5) // Fixes serenity giving Gygax Armor Plates for the reverse action... holder.icon_state = "gygax17" if(1) if(diff==FORWARD) @@ -975,8 +967,7 @@ holder.icon_state = "fireripley4" else user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 + new /obj/item/stack/cable_coil(get_turf(holder), 4) holder.icon_state = "fireripley2" if(11) if(diff==FORWARD) @@ -1023,8 +1014,7 @@ holder.icon_state = "fireripley10" else user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/plasteel(get_turf(holder), 5) holder.icon_state = "fireripley8" if(5) if(diff==FORWARD) @@ -1046,8 +1036,7 @@ holder.icon_state = "fireripley13" else user.visible_message("[user] removes the external armor from [holder].", "You remove the external armor from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/plasteel(get_turf(holder), 5) holder.icon_state = "fireripley11" if(2) if(diff==FORWARD) @@ -1055,8 +1044,7 @@ holder.icon_state = "fireripley14" else user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/plasteel(get_turf(holder), 5) holder.icon_state = "fireripley12" if(1) if(diff==FORWARD) @@ -1220,8 +1208,7 @@ holder.icon_state = "durand4" else user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 + new /obj/item/stack/cable_coil(get_turf(holder), 4) holder.icon_state = "durand2" if(16) if(diff==FORWARD) @@ -1316,8 +1303,7 @@ holder.icon_state = "durand16" else user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/steel(get_turf(holder), 5) holder.icon_state = "durand14" if(4) if(diff==FORWARD) @@ -1479,8 +1465,7 @@ holder.icon_state = "odysseus4" else user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 + new /obj/item/stack/cable_coil(get_turf(holder), 4) holder.icon_state = "odysseus2" if(10) if(diff==FORWARD) @@ -1527,8 +1512,7 @@ holder.icon_state = "odysseus10" else user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/steel(get_turf(holder), 5) holder.icon_state = "odysseus8" if(4) if(diff==FORWARD) @@ -1549,9 +1533,8 @@ user.visible_message("[user] secures external armor layer.", "You secure external reinforced armor layer.") holder.icon_state = "odysseus13" else - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 5 - user.visible_message("[user] pries [MS] from [holder].", "You prie [MS] from [holder].") + new /obj/item/stack/material/plasteel(get_turf(holder), 5) + user.visible_message("[user] pries the plasteel from [holder].", "You prie the plasteel from [holder].") holder.icon_state = "odysseus11" if(1) if(diff==FORWARD) @@ -1714,8 +1697,7 @@ holder.icon_state = "phazon4" else user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 + new /obj/item/stack/cable_coil(get_turf(holder), 4) holder.icon_state = "phazon2" if(16) if(diff==FORWARD) @@ -1810,8 +1792,7 @@ holder.icon_state = "phazon20" else user.visible_message("[user] pries the internal armor layer from [holder].", "You pry the internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/steel(get_turf(holder), 5) holder.icon_state = "phazon14" if(4) if(diff==FORWARD) @@ -1833,8 +1814,7 @@ holder.icon_state = "phazon23" else user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/plasteel(get_turf(holder), 5) holder.icon_state = "phazon21" if(1) if(diff==FORWARD) @@ -2004,8 +1984,7 @@ holder.icon_state = "janus4" else user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 + new /obj/item/stack/cable_coil(get_turf(holder), 4) holder.icon_state = "janus2" if(18) if(diff==FORWARD) @@ -2116,8 +2095,7 @@ holder.icon_state = "janus18" else user.visible_message("[user] pries the internal armor layer from [holder].", "You pry the internal armor layer from [holder].") - var/obj/item/stack/material/durasteel/MS = new /obj/item/stack/material/durasteel(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/durasteel(get_turf(holder), 5) holder.icon_state = "janus16" if(4) if(diff==FORWARD) @@ -2139,8 +2117,7 @@ holder.icon_state = "janus21" else user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].") - var/obj/item/stack/material/morphium/MS = new /obj/item/stack/material/morphium(get_turf(holder)) - MS.amount = 5 + new /obj/item/stack/material/morphium(get_turf(holder), 5) holder.icon_state = "janus19" if(1) if(diff==FORWARD) diff --git a/code/game/mecha/micro/mecha_construction_paths_vr.dm b/code/game/mecha/micro/mecha_construction_paths_vr.dm index 60d8d2d3b7..4117e2ca65 100644 --- a/code/game/mecha/micro/mecha_construction_paths_vr.dm +++ b/code/game/mecha/micro/mecha_construction_paths_vr.dm @@ -145,8 +145,7 @@ holder.icon_state = "polecat4" else user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 + new /obj/item/stack/cable_coil(get_turf(holder), 4) holder.icon_state = "polecat2" if(16) if(diff==FORWARD) @@ -241,8 +240,7 @@ holder.icon_state = "polecat16" else user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 3 + new /obj/item/stack/material/steel(get_turf(holder), 3) holder.icon_state = "polecat14" if(4) if(diff==FORWARD) @@ -402,8 +400,7 @@ holder.icon_state = "gopher4" else user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 + new /obj/item/stack/cable_coil(get_turf(holder), 4) holder.icon_state = "gopher2" if(10) if(diff==FORWARD) @@ -450,8 +447,7 @@ holder.icon_state = "gopher10" else user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 3 + new /obj/item/stack/material/steel(get_turf(holder), 3) holder.icon_state = "gopher8" if(4) if(diff==FORWARD) @@ -473,8 +469,7 @@ holder.icon_state = "gopher13" else user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 2 + new /obj/item/stack/material/plasteel(get_turf(holder), 2) holder.icon_state = "gopher11" if(1) if(diff==FORWARD) @@ -635,8 +630,7 @@ holder.icon_state = "weasel4" else user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 + new /obj/item/stack/cable_coil(get_turf(holder), 4) holder.icon_state = "weasel2" if(16) if(diff==FORWARD) @@ -731,8 +725,7 @@ holder.icon_state = "weasel16" else user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].") - var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder)) - MS.amount = 3 + new /obj/item/stack/material/steel(get_turf(holder), 3) holder.icon_state = "weasel14" if(4) if(diff==FORWARD) @@ -754,8 +747,7 @@ holder.icon_state = "weasel19" else user.visible_message("[user] pries external armor layer from [holder].", "You prie external armor layer from [holder].") - var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder)) - MS.amount = 3 + new /obj/item/stack/material/plasteel(get_turf(holder), 3) holder.icon_state = "weasel17" if(1) if(diff==FORWARD) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 652a413707..3d84691bf9 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -952,6 +952,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. #define CELLS 8 //Amount of cells per row/column in grid #define CELLSIZE (world.icon_size/CELLS) //Size of a cell in pixels + /* Automatic alignment of items to an invisible grid, defined by CELLS and CELLSIZE. Since the grid will be shifted to own a cell that is perfectly centered on the turf, we end up with two 'cell halves' @@ -966,7 +967,7 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen /obj/item/var/list/center_of_mass = list("x" = 16,"y" = 16) -/proc/auto_align(obj/item/W, click_parameters) +/proc/auto_align(obj/item/W, click_parameters, var/animate = FALSE) if(!W.center_of_mass) W.randpixel_xy() return @@ -983,8 +984,20 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen var/cell_x = max(0, min(CELLS-1, round(mouse_x/CELLSIZE))) var/cell_y = max(0, min(CELLS-1, round(mouse_y/CELLSIZE))) - W.pixel_x = (CELLSIZE * (0.5 + cell_x)) - W.center_of_mass["x"] - W.pixel_y = (CELLSIZE * (0.5 + cell_y)) - W.center_of_mass["y"] + var/target_x = (CELLSIZE * (0.5 + cell_x)) - W.center_of_mass["x"] + var/target_y = (CELLSIZE * (0.5 + cell_y)) - W.center_of_mass["y"] + if(animate) + var/dist_x = abs(W.pixel_x - target_x) + var/dist_y = abs(W.pixel_y - target_y) + var/dist = sqrt((dist_x*dist_x)+(dist_y*dist_y)) + animate(W, pixel_x=target_x, pixel_y=target_y,time=dist*0.5) + else + W.pixel_x = target_x + W.pixel_y = target_y #undef CELLS -#undef CELLSIZE \ No newline at end of file +#undef CELLSIZE + +// this gets called when the item gets chucked by the vending machine +/obj/item/proc/vendor_action(var/obj/machinery/vending/V) + return diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index 8af1c01a2a..b54ea59fc2 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -29,8 +29,7 @@ to_chat(user, "There is another network terminal here.") return else - var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(loc) - C.amount = 10 + new /obj/item/stack/cable_coil(loc, 10) to_chat(user, "You cut the cables and disassemble the unused power terminal.") qdel(T) new /obj/machinery/power/apc(loc, ndir, 1) diff --git a/code/game/objects/items/devices/denecrotizer_vr.dm b/code/game/objects/items/devices/denecrotizer_vr.dm index 8aeaba5b0d..164e069398 100644 --- a/code/game/objects/items/devices/denecrotizer_vr.dm +++ b/code/game/objects/items/devices/denecrotizer_vr.dm @@ -43,7 +43,9 @@ /mob/living/simple_mob/attack_ghost(mob/observer/dead/user as mob) if(!ghostjoin) return ..() - + if(jobban_isbanned(user, "GhostRoles")) + to_chat(user, "You cannot inhabit this creature because you are banned from playing ghost roles.") + return if(!evaluate_ghost_join(user)) return ..() diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 22cfcad31d..a7ba535c3b 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -16,7 +16,7 @@ var/obj/item/device/encryptionkey/keyslot2 = null var/ks1type = null var/ks2type = null - + drop_sound = 'sound/items/drop/component.ogg' pickup_sound = 'sound/items/pickup/component.ogg' @@ -62,10 +62,12 @@ /obj/item/device/radio/headset/receive_range(freq, level, aiOverride = 0) if (aiOverride) + playsound(loc, 'sound/effects/radio_common.ogg', 20, 1, 1, preference = /datum/client_preference/radio_sounds) return ..(freq, level) if(ishuman(src.loc)) var/mob/living/carbon/human/H = src.loc if(H.l_ear == src || H.r_ear == src) + playsound(loc, 'sound/effects/radio_common.ogg', 20, 1, 1, preference = /datum/client_preference/radio_sounds) return ..(freq, level) return -1 diff --git a/code/game/objects/items/magazine.dm b/code/game/objects/items/magazine.dm new file mode 100644 index 0000000000..59640c4c01 --- /dev/null +++ b/code/game/objects/items/magazine.dm @@ -0,0 +1,97 @@ +/obj/item/tabloid + name = "tabloid magazine" + desc = "It's one of those trashy tabloid magazines. It looks pretty out of date." + icon = 'icons/obj/magazine.dmi' + icon_state = "magazine" + + var/headline + var/static/list/tabloid_states = icon_states('icons/obj/magazine.dmi') + var/static/list/tabloid_publishers = list( + "\improper Solar Enquirer", + "\improper Stellar Examiner", + "\improper Antares Daily", + "\improper Weekly Galactic News", + "\improper Spiral" + ) + + var/static/list/tabloid_headlines = list( + "NARCOALGORITHMS: ARE YOUR CHILDREN SAFE?", + "ARE GMO HUMANS POISONOUS IN BED?", + "TOP 10 REASONS WHY OTHER SPECIES ARE A HOAX", + "CENTENNIAL POSITRONIC EXTENDS LIFESPAN WITH 1 SIMPLE TRICK", + "TOP 10 DANGEROUS FOODS WITH CHEMICALS", + "NEW TERRIFYING TEEN TREND: SUN-DIVING", + "HAS YOUR SPOUSE BEEN REPLACED BY AN ALIEN IMPOSTER? STUDIES SUGGEST YES!", + "SPACE CAUSES CANCER: DOCTORS CONFIRM", + "ARE BODY SCANNERS TOO INVASIVE? FIND OUT INSIDE!", + "HAS SCIENCE GONE TOO FAR? LOCAL SCIENTIST DEBUNKS ALIEN THEORY, DECRIES THEM AS TUBE EXPERIMENTS GONE WRONG", + "100 DELICIOUS RECIPES LETHAL TO CARBON-BASED LIFE", + "TOP FIVE SPECIES WE DROVE TO EXTINCTION; NUMBER TWO WILL SHOCK YOU", + "LOCAL MAN HAS SEIZURE AFTER SAYING SKRELLIAN NAME; FORCED ASSIMILATION SOON?", + "RELIGION WAS RIGHT? SHOCK FINDINGS SHOW ALIEN SIMILARITY TO ANIMALS, EXISTENCE OF BOATS", + "TOP TEN REASONS WHY ONLY HUMANS ARE SENTIENT", + "LOCAL UNATHI SYMPATHIZER: 'I really think you should stop with these spacebaiting articles.'", + "DO UNATHI SYMPATHIZERS HATE THE HUMAN RACE?", + "WHICH PLANET HAS THE BEST LOVERS? THIS AND MORE INSIDE!", + "SHE SAID WE SHOULD SEE OTHER PEOPLE, SO I MARRIED A TESHARI PACK: FULL STORY INSIDE", + "LOSE WEIGHT THREE TIMES FASTER WITH THESE LOW-G MANEUVERS!", + "SHOCKING FIGURES REVEAL MORE TEENS DIE TO UNATHI HONOUR DUELS THAN GUN VIOLENCE", + "MY DAUGHTER JOINED A NEURAL COLLECTIVE AND NOW SHE CAN TASTE SPACETIME: FULL STORY INSIDE", + "WERE THE NAZIS PSYCHIC? ONE HISTORIAN TELLS ALL", + "TAJARANS: CUTE AND CUDDLY, OR INFILTRATING THE GOVERNMENT? FIND OUT MORE INSIDE", + "IS THE SOLAR GOVERNMENT CREATING AN AI SUPERINTELLIGENCE NEAR MERCURY? ONE EXPERT REVEALS SHOCKING INSIDER DETAILS!", + "TOP TEN HISTORICAL FIGURES THAT WERE TWO PROMETHEANS IN A TRENCHCOAT", + "ZADDAT: FACT OR FICTION?", + "TOP 10 SECRET AUGMENTS THE GOVERNMENT DOESN'T WANT YOU TO GET", + "ENLARGE YOUR MENTAL FACULTIES WITH THIS 1 WEIRD HAT", + "'HELP, MY SON THINKS HE'S A 20TH CENTURY VID CHARACTER CALLED SPOCK' AND MORE SHOCKING TALES INSIDE", + "18 RADICAL HIP IMPLANTS ALL THE KIDS ARE GETTING!", + "PRESERVED HEAD OF 21ST CENTURY CAPITALIST INSISTS THAT 'DYSON WALL' ONLY SANE SOLUTION TO RIMWARD MALCONTENTS", + "50 SHADES OF GREEN; BESTSELLING MULTISPECIES ROMANCE COMING TO CINEMAS", + "PLUTO: DWARF PLANET, OR SECRET RAMPANT AI FACILITY HELL-BENT ON CORRUPTING YOUR CHILDREN?", + "TOP TEN ANIME ALIENS. NUMBER 3 WILL SICKEN YOU", + "OCTUBER X'RALLBRE EXPOSED; NUDE PHOTOSHOOT LEAKS", + "WAR ON MARS AFTER NAKED MAN WAS FOUND; WERE THE ROMANS RIGHT?", + "REAL ALIENS ARGUE EARTH MOVIES RACIST!", + "HELP! I MARRIED A HEGEMONOUS SWARM INTELLIGENCE AND MY SON THINKS HE'S A ROUTER!", + "POSITRONICS: HUMAN INGENUITY AND GENEROSITY, OR A HORRIBLE MISTAKE? FIND OUT INSIDE!", + "TENTACLES OF TERROR: SKRELL BLACK OPS SEIGE NYX NAVAL DEPOT. SHOCKING PHOTOGRAPHS INSIDE!", + "THE FREE TRADER UNION: NEITHER FREE NOR A UNION. SHOCKING EXPOSE!", + "HAS THE FREE MARKET GONE TOO FAR? LUNA GLITTERPOP STAR AUCTIONS THIRD TESTICLE FOR TRANS-ORBITAL SHIPPING BONDS", + "THEY SAID IT WAS CANCER, BUT I KNEW IT WAS A TINY, SELF-REPLICATING CLONE OF RAY KURZWEIL: FULL STORY INSIDE", + "WHAT HAS TECHNOLOGY DONE? INDUSTRY BILLIONAIRE MARRIES OWN INFORMORPH MIND-COPY", + "REPTILLIAN ICE WARRIORS FROM ANOTHER WORLD LIVE INSIDE YOUR AIR DUCTS: HERE'S HOW TO GET RID OF THEM", + "10 CRITICAL THINGS YOU NEED TO KNOW ABOUT 'DRONEGATE'", + "THEY CALL THEM JUMPGATES BUT I'VE NEVER SEEN THEM JUMP: AN INDUSTRY INSIDER SPEAKS FOR THE FIRST TIME", + "EMERGENT INTELLIGENCES ARE STEALING YOUR BANK DETAILS, FETISHES: FOIL HAT RECIPE INSIDE", + "TIME TRAVELLERS ARE STEALING YOUR WIFI: 5 TIPS FOR DEFEATING HACKERS FROM THE FUTURE", + "'My mother was an alien spy': THIS CELEBRITY REVEAL WILL SHOCK AND AMAZE YOU", + "LUMINARY SCIENTIST SPEAKS: DIABETES IS A HYPERCORP RETROVIRUS!", + "'I REROUTED MY NEURAL CIRCUITRY SO THAT PAIN TASTES OF STRAWBERRIES' AND FIFTEEN OTHER CRAZY ALMACH STORIES", + "JOINING THE NAVY? HERE'S 15 EXPERT TIPS FOR AVOIDING BRAIN PARASITES" + ) + +/obj/item/tabloid/Initialize() + . = ..() + + pixel_x = 5-rand(10) + pixel_x = 5-rand(10) + + icon_state = pick(tabloid_states) + headline = pick(tabloid_headlines) + name = pick(tabloid_publishers) + +/obj/item/tabloid/examine(mob/user, distance) + . = ..() + if(headline) + to_chat(user, "The headline screams, \"[headline]\"") + +/obj/item/tabloid/attack_self(mob/user) + user.visible_message(SPAN_NOTICE("\The [user] leafs idly through \the [src].")) + if(headline) + to_chat(user, "Most of it is the usual tabloid garbage, but the headline story, \"[headline]\", holds your attention for awhile.") + if(tabloid_headlines[headline]) + to_chat(user, tabloid_headlines[headline]) + else + to_chat(user, "Most of it is the usual tabloid garbage. You find nothing of interest.") + return TRUE diff --git a/code/game/objects/items/stacks/marker_beacons.dm b/code/game/objects/items/stacks/marker_beacons.dm index 1340418249..bbedcc2255 100644 --- a/code/game/objects/items/stacks/marker_beacons.dm +++ b/code/game/objects/items/stacks/marker_beacons.dm @@ -127,7 +127,7 @@ var/list/marker_beacon_colors = list( if(istype(I, /obj/item/stack/marker_beacon)) var/obj/item/stack/marker_beacon/M = I to_chat(user, "You start picking [src] up...") - if(do_after(user, remove_speed, target = src) && M.amount + 1 <= M.max_amount) + if(do_after(user, remove_speed, target = src) && M.get_amount() + 1 <= M.max_amount) M.add(1) playsound(src, 'sound/items/deconstruct.ogg', 50, 1) qdel(src) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index b014c1810f..2ea9ad0667 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -17,7 +17,7 @@ center_of_mass = null var/list/datum/stack_recipe/recipes var/singular_name - var/amount = 1 + VAR_PROTECTED/amount = 1 var/max_amount //also see stack recipes initialisation, param "max_res_amount" must be equal to this max_amount var/stacktype //determines whether different stack types can merge var/build_type = null //used when directly applied to a turf @@ -29,12 +29,19 @@ var/pass_color = FALSE // Will the item pass its own color var to the created item? Dyed cloth, wood, etc. var/strict_color_stacking = FALSE // Will the stack merge with other stacks that are different colors? (Dyed cloth, wood, etc) -/obj/item/stack/Initialize(var/ml, var/amount) +/obj/item/stack/Initialize(var/ml, var/starting_amount) . = ..() if(!stacktype) stacktype = type - if(amount) - src.amount = amount + if(!isnull(starting_amount)) // Could be 0 + // Negative numbers are 'give full stack', like -1 + if(starting_amount < 0) + // But sometimes a coder forgot to define what that even means + if(max_amount) + starting_amount = max_amount + else + starting_amount = 1 + set_amount(starting_amount, TRUE) update_icon() /obj/item/stack/Destroy() @@ -229,12 +236,15 @@ //Return 1 if an immediate subsequent call to use() would succeed. //Ensures that code dealing with stacks uses the same logic /obj/item/stack/proc/can_use(var/used) - if (get_amount() < used) + if(used < 0 || used % 1) + stack_trace("Tried to use a bad stack amount: [used]") + return 0 + if(get_amount() < used) return 0 return 1 /obj/item/stack/proc/use(var/used) - if (!can_use(used)) + if(!can_use(used)) return 0 if(!uses_charge) amount -= used @@ -251,6 +261,9 @@ return 1 /obj/item/stack/proc/add(var/extra) + if(extra < 0 || extra % 1) + stack_trace("Tried to add a bad stack amount: [extra]") + return 0 if(!uses_charge) if(amount + extra > get_max_amount()) return 0 @@ -265,6 +278,27 @@ var/datum/matter_synth/S = synths[i] S.add_charge(charge_costs[i] * extra) +/obj/item/stack/proc/set_amount(var/new_amount, var/no_limits = FALSE) + if(new_amount < 0 || new_amount % 1) + stack_trace("Tried to set a bad stack amount: [new_amount]") + return 0 + + // Clean up the new amount + new_amount = max(round(new_amount), 0) + + // Can exceed max if you really want + if(new_amount > max_amount && !no_limits) + new_amount = max_amount + + amount = new_amount + + // Can set it to 0 without qdel if you really want + if(amount == 0 && !no_limits) + qdel(src) + return FALSE + + return TRUE + /* The transfer and split procs work differently than use() and add(). Whereas those procs take no action if the desired amount cannot be added or removed these procs will try to transfer whatever they can. @@ -282,6 +316,10 @@ if (isnull(tamount)) tamount = src.get_amount() + + if(tamount < 0 || tamount % 1) + stack_trace("Tried to transfer a bad stack amount: [tamount]") + return 0 var/transfer = max(min(tamount, src.get_amount(), (S.get_max_amount() - S.get_amount())), 0) @@ -302,7 +340,10 @@ if(uses_charge) return null - tamount = round(tamount) + if(tamount < 0 || tamount % 1) + stack_trace("Tried to split a bad stack amount: [tamount]") + return null + var/transfer = max(min(tamount, src.amount, initial(max_amount)), 0) var/orig_amount = src.amount diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm index c2d2b171c9..e428ddfc54 100644 --- a/code/game/objects/items/toys/toys.dm +++ b/code/game/objects/items/toys/toys.dm @@ -814,13 +814,6 @@ name = "void carp plushie" icon_state = "voidcarp" -// Eris -/obj/structure/plushie/fumo - name = "Fumo" - desc = "A plushie of a....?." - icon_state = "fumoplushie" - phrase = "I just don't think about losing." - //Large plushies. /obj/structure/plushie name = "generic plush" @@ -1258,6 +1251,11 @@ icon_state = "therapygreen" item_state = "egg3" // It's the green egg in items_left/righthand +/obj/item/toy/plushie/fumo + name = "Fumo" + desc = "A plushie of a....?" + icon_state = "fumoplushie" + pokephrase = "I just don't think about losing." //Toy cult sword /obj/item/toy/cultsword diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 7ac049a774..209e47b253 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -112,3 +112,6 @@ walk(src, null, null) ..() return + +/obj/item/weapon/grenade/vendor_action(var/obj/machinery/vending/V) + activate(V) \ No newline at end of file diff --git a/code/game/objects/items/weapons/id cards/cards.dm b/code/game/objects/items/weapons/id cards/cards.dm index e62268c2c1..4831d92e56 100644 --- a/code/game/objects/items/weapons/id cards/cards.dm +++ b/code/game/objects/items/weapons/id cards/cards.dm @@ -130,10 +130,10 @@ /obj/item/weapon/card/emag/attackby(obj/item/O as obj, mob/user as mob) if(istype(O, /obj/item/stack/telecrystal)) var/obj/item/stack/telecrystal/T = O - if(T.amount < 1) + if(T.get_amount() < 1) to_chat(usr, "You are not adding enough telecrystals to fuel \the [src].") return - uses += T.amount/2 //Gives 5 uses per 10 TC + uses += T.get_amount()*0.5 //Gives 5 uses per 10 TC uses = CEILING(uses, 1) //Ensures no decimal uses nonsense, rounds up to be nice to_chat(usr, "You add \the [O] to \the [src]. Increasing the uses of \the [src] to [uses].") qdel(O) diff --git a/code/game/objects/items/weapons/material/whetstone.dm b/code/game/objects/items/weapons/material/whetstone.dm index 12da5d23fd..dd0437198c 100644 --- a/code/game/objects/items/weapons/material/whetstone.dm +++ b/code/game/objects/items/weapons/material/whetstone.dm @@ -13,7 +13,7 @@ /obj/item/weapon/whetstone/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/stack/material)) var/obj/item/stack/material/M = I - if(M.amount >= 5) + if(M.get_amount() >= 5) to_chat(user, "You begin to refine the [src] with [M]...") if(do_after(user, 70)) M.use(5) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index a9f9d312f4..28d5f6bcde 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -245,7 +245,7 @@ return 0 var/current = 0 for(var/obj/item/stack/material/S in contents) - current += S.amount + current += S.get_amount() if(capacity == current)//If it's full, you're done if(!stop_messages) to_chat(usr, "The snatcher is full.") @@ -262,29 +262,27 @@ var/inserted = 0 var/current = 0 for(var/obj/item/stack/material/S2 in contents) - current += S2.amount - if(capacity < current + S.amount)//If the stack will fill it up + current += S2.get_amount() + if(capacity < current + S.get_amount())//If the stack will fill it up amount = capacity - current else - amount = S.amount + amount = S.get_amount() for(var/obj/item/stack/material/sheet in contents) - if(S.type == sheet.type) // we are violating the amount limitation because these are not sane objects - sheet.amount += amount // they should only be removed through procs in this file, which split them up. - S.amount -= amount + if(S.type == sheet.type) + // we are violating the amount limitation because these are not sane objects + sheet.set_amount(sheet.get_amount() + amount, TRUE) + S.use(amount) // will qdel() if we use it all inserted = 1 break - if(!inserted || !S.amount) + if(!inserted) usr.remove_from_mob(S) usr.update_icons() //update our overlays if (usr.client && usr.s_active != src) usr.client.screen -= S S.dropped(usr) - if(!S.amount) - qdel(S) - else - S.loc = src + S.loc = src orient2hud(usr) if(usr.s_active) @@ -305,7 +303,7 @@ for(var/obj/item/stack/material/I in contents) adjusted_contents++ var/datum/numbered_display/D = new/datum/numbered_display(I) - D.number = I.amount + D.number = I.get_amount() numbered_contents.Add( D ) var/row_num = 0 @@ -319,14 +317,14 @@ /obj/item/weapon/storage/bag/sheetsnatcher/quick_empty() var/location = get_turf(src) for(var/obj/item/stack/material/S in contents) - while(S.amount) - var/obj/item/stack/material/N = new S.type(location) - var/stacksize = min(S.amount,N.max_amount) - N.amount = stacksize - S.amount -= stacksize - N.update_icon() - if(!S.amount) - qdel(S) // todo: there's probably something missing here + var/cur_amount = S.get_amount() + var/full_stacks = round(cur_amount / S.max_amount) // Floor of current/max is amount of full stacks we make + var/remainder = cur_amount % S.max_amount // Current mod max is remainder after full sheets removed + for(var/i = 1 to full_stacks) + new S.type(location, S.max_amount) + if(remainder) + new S.type(location, remainder) + S.set_amount(0) orient2hud(usr) if(usr.s_active) usr.s_active.show_to(usr) @@ -342,10 +340,10 @@ //Therefore, make a new stack internally that has the remainder. // -Sayu - if(S.amount > S.max_amount) - var/obj/item/stack/material/temp = new S.type(src) - temp.amount = S.amount - S.max_amount - S.amount = S.max_amount + if(S.get_amount() > S.max_amount) + var/newstack_amt = S.get_amount() - S.max_amount + new S.type(src, newstack_amt) // The one we'll keep to replace the one we give + S.set_amount(S.max_amount) // The one we hand to the clicker return ..(S,new_location) diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index dee5e284a3..824da68846 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -116,7 +116,6 @@ for(var/i = 0, i<2, i++) for(var/res in resources) - var/obj/item/stack/R = new res(src) - R.amount = R.max_amount + new res(src, -1) return ..() diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 33ea9c21eb..a83c589a1b 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -377,8 +377,11 @@ /obj/item/clothing/under/pants/khaki, /obj/item/clothing/mask/bandana/blue, /obj/item/clothing/mask/bandana/blue, - /obj/item/clothing/accessory/hawaii, - /obj/item/clothing/accessory/hawaii/random) + /obj/item/clothing/accessory/hawaiian, + /obj/item/clothing/accessory/hawaiian/blue, + /obj/item/clothing/accessory/hawaiian/pink, + /obj/item/clothing/accessory/hawaiian/red, + /obj/item/clothing/accessory/hawaiian/yellow) /obj/structure/closet/wardrobe/tactical diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm index b8c5d95cbf..60eb576db3 100644 --- a/code/game/objects/structures/curtains.dm +++ b/code/game/objects/structures/curtains.dm @@ -43,8 +43,7 @@ to_chat(user, "You start to cut the shower curtains.") if(do_after(user, 10)) to_chat(user, "You cut the shower curtains.") - var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) - A.amount = 3 + new /obj/item/stack/material/plastic(src.loc, 3) qdel(src) return else diff --git a/code/game/objects/structures/droppod.dm b/code/game/objects/structures/droppod.dm index 8598d632fc..730fba388b 100644 --- a/code/game/objects/structures/droppod.dm +++ b/code/game/objects/structures/droppod.dm @@ -113,8 +113,7 @@ if(finished) to_chat(user, "You start breaking down \the [src].") if(do_after(user, 10 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE)) - var/obj/item/stack/S = new /obj/item/stack/material/plasteel(loc) - S.amount = 10 + new /obj/item/stack/material/plasteel(loc, 10) playsound(user, O.usesound, 50, 1) qdel(src) else diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm index 4d962ca9de..feb124d489 100644 --- a/code/game/objects/structures/flora/trees.dm +++ b/code/game/objects/structures/flora/trees.dm @@ -101,8 +101,7 @@ return if(product && product_amount) // Make wooden logs. - var/obj/item/stack/material/M = new product(get_turf(src)) - M.amount = product_amount + var/obj/item/stack/material/M = new product(get_turf(src), product_amount) M.update_icon() visible_message("\The [src] is felled!") stump() diff --git a/code/game/objects/structures/ghost_pods/event_vr.dm b/code/game/objects/structures/ghost_pods/event_vr.dm index a41e1e99b5..5a7f7fa6ba 100644 --- a/code/game/objects/structures/ghost_pods/event_vr.dm +++ b/code/game/objects/structures/ghost_pods/event_vr.dm @@ -51,6 +51,9 @@ var/finalized = "No" while(finalized == "No" && M.client) + if(jobban_isbanned(M, "GhostRoles")) + to_chat(M, "You cannot inhabit this creature because you are banned from playing ghost roles.") + return choice = tgui_input_list(M, "What type of predator do you want to play as?", "Maintpred Choice", possible_mobs) if(!choice) randomize = TRUE diff --git a/code/game/objects/structures/ghost_pods/ghost_pods.dm b/code/game/objects/structures/ghost_pods/ghost_pods.dm index c77e00e13e..f09522ddb8 100644 --- a/code/game/objects/structures/ghost_pods/ghost_pods.dm +++ b/code/game/objects/structures/ghost_pods/ghost_pods.dm @@ -84,6 +84,11 @@ description_info = "A ghost can click on this to return to the round as whatever is contained inside this object." /obj/structure/ghost_pod/ghost_activated/attack_ghost(var/mob/observer/dead/user) + //VOREStation Add Start + if(jobban_isbanned(user, "GhostRoles")) + to_chat(user, "You cannot inhabit this creature because you are banned from playing ghost roles.") + return + //VOREStation Add End if(used) to_chat(user, "Another spirit appears to have gotten to \the [src] before you. Sorry.") return diff --git a/code/game/objects/structures/ghost_pods/ghost_pods_vr.dm b/code/game/objects/structures/ghost_pods/ghost_pods_vr.dm index a792e1b559..0297346c57 100644 --- a/code/game/objects/structures/ghost_pods/ghost_pods_vr.dm +++ b/code/game/objects/structures/ghost_pods/ghost_pods_vr.dm @@ -11,6 +11,10 @@ var/activated = FALSE /obj/structure/ghost_pod/manual/attack_ghost(var/mob/observer/dead/user) + if(jobban_isbanned(user, "GhostRoles")) + to_chat(user, "You cannot inhabit this creature because you are banned from playing ghost roles.") + return + if(!remains_active || busy) return diff --git a/code/game/objects/structures/low_wall.dm b/code/game/objects/structures/low_wall.dm index 44678a0a34..fe91be162b 100644 --- a/code/game/objects/structures/low_wall.dm +++ b/code/game/objects/structures/low_wall.dm @@ -121,19 +121,37 @@ return FALSE return TRUE -/obj/structure/low_wall/MouseDrop_T(obj/O as obj, mob/user as mob) +/obj/structure/low_wall/MouseDrop_T(obj/O, mob/user, src_location, over_location, src_control, over_control, params) if(istype(O, /obj/structure/window)) var/obj/structure/window/W = O if(Adjacent(W) && !W.anchored) to_chat("You hoist [W] up onto [src].") W.forceMove(loc) return - if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O)) - return ..() if(isrobot(user)) return if(can_place_items()) - user.unEquip(O, 0, src.loc) + if(ismob(O.loc)) //If placing an item + if(!isitem(O) || user.get_active_hand() != O) + return ..() + if(isrobot(user)) + return + user.drop_item() + if(O.loc != src.loc) + step(O, get_dir(O, src)) + + else if(isturf(O.loc) && isitem(O)) //If pushing an item on the tabletop + var/obj/item/I = O + if(I.anchored) + return + + if((isliving(user)) && (Adjacent(user)) && !(user.incapacitated())) + if(O.w_class <= user.can_pull_size) + O.forceMove(loc) + auto_align(I, params, TRUE) + else + to_chat(user, SPAN_WARNING("\The [I] is too big for you to move!")) + return /obj/structure/low_wall/proc/handle_rod_use(mob/user, obj/item/stack/rods/R) if(!grille_type) diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index 8b54df0c6c..bd7e7836f6 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -22,8 +22,7 @@ to_chat(user, "You start to cut the plastic flaps.") if(do_after(user, 10 * P.toolspeed)) to_chat(user, "You cut the plastic flaps.") - var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) - A.amount = 4 + new /obj/item/stack/material/plastic(src.loc, 4) qdel(src) return else diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index e858ad6ac6..f226af1afe 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -127,6 +127,13 @@ playsound(src, W.usesound, 100, 1) remove_padding() + else if(istype(W, /obj/item/weapon/disk) || (istype(W, /obj/item/toy/plushie))) + user.drop_from_inventory(W, get_turf(src)) + W.pixel_x = 10 //make sure they reach the pillow + W.pixel_y = -6 + if(istype(W, /obj/item/weapon/disk)) + user.visible_message("[src] sleeps soundly. Sleep tight, disky.") + else if(istype(W, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = W var/mob/living/affecting = G.affecting diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index ab52208b25..098861595b 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -297,7 +297,7 @@ visible_message("[user] dismantles \the [src].") var/obj/item/stack/material/mats = new glasstype(loc) if(is_fulltile()) - mats.amount = 4 + mats.set_amount(4) qdel(src) else if(istype(W, /obj/item/stack/cable_coil) && reinf && state == 0 && !istype(src, /obj/structure/window/reinforced/polarized)) var/obj/item/stack/cable_coil/C = W diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index 4f70fc5918..1168f7a081 100644 --- a/code/game/turfs/simulated/floor_attackby.dm +++ b/code/game/turfs/simulated/floor_attackby.dm @@ -96,7 +96,7 @@ if(!use_flooring) return // Do we have enough? - if(use_flooring.build_cost && S.amount < use_flooring.build_cost) + if(use_flooring.build_cost && S.get_amount() < use_flooring.build_cost) to_chat(user, "You require at least [use_flooring.build_cost] [S.name] to complete the [use_flooring.descriptor].") return // Stay still and focus... diff --git a/code/game/turfs/simulated/outdoors/snow.dm b/code/game/turfs/simulated/outdoors/snow.dm index 48235c61f9..140559539b 100644 --- a/code/game/turfs/simulated/outdoors/snow.dm +++ b/code/game/turfs/simulated/outdoors/snow.dm @@ -31,8 +31,7 @@ to_chat(user, "You begin to remove \the [src] with your [W].") if(do_after(user, 4 SECONDS * W.toolspeed)) to_chat(user, "\The [src] has been dug up, and now lies in a pile nearby.") - var/obj/item/stack/material/snow/S = new(src) - S.amount = 10 + new /obj/item/stack/material/snow(src, 10) demote() else to_chat(user, "You decide to not finish removing \the [src].") diff --git a/code/game/turfs/simulated/outdoors/survival_action_vr.dm b/code/game/turfs/simulated/outdoors/survival_action_vr.dm index dbe89b0a87..c7f90171c7 100644 --- a/code/game/turfs/simulated/outdoors/survival_action_vr.dm +++ b/code/game/turfs/simulated/outdoors/survival_action_vr.dm @@ -7,8 +7,7 @@ if(icon_state in has_rocks) user.visible_message("[user] loosens rocks from \the [src]...", "You loosen rocks from \the [src]...") if(do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE)) - var/obj/item/stack/material/flint/R = new(get_turf(src)) - R.amount = rand(1,4) + var/obj/item/stack/material/flint/R = new(get_turf(src), rand(1,4)) R.pixel_x = rand(-6,6) R.pixel_y = rand(-6,6) icon_state = "dirt0" @@ -34,9 +33,8 @@ user.visible_message("[user] starts digging around in \the [src]...", "You start digging around in \the [src]...") if(do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE)) if(prob(rock_chance)) - var/obj/item/stack/material/flint/R = new(get_turf(src)) + var/obj/item/stack/material/flint/R = new(get_turf(src), rand(1,4)) to_chat(user, "You found some [R]") - R.amount = rand(1,4) R.pixel_x = rand(-6,6) R.pixel_y = rand(-6,6) else @@ -73,8 +71,7 @@ if(sticks) user.visible_message("[user] searches \the [src] for loose sticks...", "You search \the [src] for loose sticks...") if(do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE)) - var/obj/item/stack/material/stick/S = new(get_turf(user)) - S.amount = rand(1,3) + var/obj/item/stack/material/stick/S = new(get_turf(user), rand(1,3)) S.pixel_x = rand(-6,6) S.pixel_y = rand(-6,6) sticks = FALSE diff --git a/code/game/world.dm b/code/game/world.dm index 150a94de3e..b962eb028f 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -1,4 +1,4 @@ -#define RECOMMENDED_VERSION 501 +#define RECOMMENDED_VERSION 513 /world/New() world_startup_time = world.timeofday rollover_safety_date = world.realtime - world.timeofday // 00:00 today (ish, since floating point error with world.realtime) of today diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 2850c0b89c..f1282e3b25 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -402,14 +402,13 @@ if(jobban_isbanned(M, job.title)) jobs += "[replacetext(job.title, " ", " ")]" - counter++ else jobs += "[replacetext(job.title, " ", " ")]" - counter++ - if(counter >= 6) //So things dont get squiiiiished! + if(++counter >= 6) //So things dont get squiiiiished! jobs += "" counter = 0 + jobs += "" //Security (Red) @@ -423,14 +422,13 @@ if(jobban_isbanned(M, job.title)) jobs += "[replacetext(job.title, " ", " ")]" - counter++ else jobs += "[replacetext(job.title, " ", " ")]" - counter++ - if(counter >= 5) //So things dont get squiiiiished! + if(++counter >= 5) //So things dont get squiiiiished! jobs += "" counter = 0 + jobs += "" //Engineering (Yellow) @@ -444,14 +442,13 @@ if(jobban_isbanned(M, job.title)) jobs += "[replacetext(job.title, " ", " ")]" - counter++ else jobs += "[replacetext(job.title, " ", " ")]" - counter++ - if(counter >= 5) //So things dont get squiiiiished! + if(++counter >= 5) //So things dont get squiiiiished! jobs += "" counter = 0 + jobs += "" //Cargo (Yellow) @@ -465,14 +462,13 @@ if(jobban_isbanned(M, job.title)) jobs += "[replacetext(job.title, " ", " ")]" - counter++ else jobs += "[replacetext(job.title, " ", " ")]" - counter++ - if(counter >= 5) //So things dont get squiiiiished! + if(++counter >= 5) //So things dont get squiiiiished! jobs += "" counter = 0 + jobs += "" //Medical (White) @@ -486,14 +482,13 @@ if(jobban_isbanned(M, job.title)) jobs += "[replacetext(job.title, " ", " ")]" - counter++ else jobs += "[replacetext(job.title, " ", " ")]" - counter++ - if(counter >= 5) //So things dont get squiiiiished! + if(++counter >= 5) //So things dont get squiiiiished! jobs += "" counter = 0 + jobs += "" //Science (Purple) @@ -507,20 +502,20 @@ if(jobban_isbanned(M, job.title)) jobs += "[replacetext(job.title, " ", " ")]" - counter++ else jobs += "[replacetext(job.title, " ", " ")]" - counter++ - if(counter >= 5) //So things dont get squiiiiished! + if(++counter >= 5) //So things dont get squiiiiished! jobs += "" counter = 0 + jobs += "" + //VOREStation Edit Start //Exploration (Purple) counter = 0 jobs += "" - jobs += "" + jobs += "" for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_PLANET)) if(!jobPos) continue var/datum/job/job = job_master.GetJob(jobPos) @@ -528,15 +523,39 @@ if(jobban_isbanned(M, job.title)) jobs += "" - counter++ else jobs += "" - counter++ - if(counter >= 5) //So things dont get squiiiiished! + if(++counter >= 5) //So things dont get squiiiiished! jobs += "" counter = 0 + jobs += "
Science Positions
Exploration Positions
[replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")]
" + + //Offmap (Kinda lightish bluey) + counter = 0 + // Needs to be done early because it uses the length of the list for sizing + var/list/offmap_jobs = list() + for(var/dept in offmap_departments) + offmap_jobs += SSjob.get_job_titles_in_department(dept) + jobs += "" + jobs += "" + for(var/jobPos in offmap_jobs) + if(!jobPos) continue + var/datum/job/job = job_master.GetJob(jobPos) + if(!job) continue + + if(jobban_isbanned(M, job.title)) + jobs += "" + else + jobs += "" + + if(++counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + + jobs += "
Offmap Positions
[replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")]
" + //VOREstation Edit End //Civilian (Grey) counter = 0 @@ -549,12 +568,10 @@ if(jobban_isbanned(M, job.title)) jobs += "[replacetext(job.title, " ", " ")]" - counter++ else jobs += "[replacetext(job.title, " ", " ")]" - counter++ - if(counter >= 5) //So things dont get squiiiiished! + if(++counter >= 5) //So things dont get squiiiiished! jobs += "" counter = 0 @@ -565,10 +582,10 @@ jobs += "" - //Non-Human (Green) + //Synthetic (Green) counter = 0 jobs += "" - jobs += "" + jobs += "" for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_SYNTHETIC)) if(!jobPos) continue var/datum/job/job = job_master.GetJob(jobPos) @@ -576,53 +593,56 @@ if(jobban_isbanned(M, job.title)) jobs += "" - counter++ else jobs += "" - counter++ - if(counter >= 5) //So things dont get squiiiiished! + if(++counter >= 5) //So things dont get squiiiiished! jobs += "" counter = 0 - //pAI isn't technically a job, but it goes in here. - - if(jobban_isbanned(M, "pAI")) - jobs += "" - else - jobs += "" - if(jobban_isbanned(M, "AntagHUD")) - jobs += "" - else - jobs += "" jobs += "
Non-human Positions
Synthetic Positions
[replacetext(job.title, " ", " ")][replacetext(job.title, " ", " ")]
pAIpAIAntagHUDAntagHUD
" //Antagonist (Orange) + counter = 0 var/isbanned_dept = jobban_isbanned(M, "Syndicate") jobs += "" - jobs += "" + jobs += "" // Antagonists. for(var/antag_type in all_antag_types) var/datum/antagonist/antag = all_antag_types[antag_type] if(!antag || !antag.bantype) continue + if(jobban_isbanned(M, "[antag.bantype]") || isbanned_dept) jobs += "" else jobs += "" + if(++counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + jobs += "
Antagonist Positions
Antagonist Positions
[replacetext("[antag.role_text]", " ", " ")][replacetext("[antag.role_text]", " ", " ")]
" - //Other races (Blue) ... And also graffiti. - var/list/misc_roles = list("Dionaea", "Graffiti", "Custom loadout") - jobs += "Other Roles" + //Misc 'roles' + counter = 0 + var/list/misc_roles = list("Dionaea", "Graffiti", "Custom loadout", "pAI", "GhostRoles", "AntagHUD") + jobs += "" + jobs += "" for(var/entry in misc_roles) if(jobban_isbanned(M, entry)) jobs += "" else jobs += "" - jobs += "
Other Roles
[entry][entry]
" + + if(++counter >= 5) //So things dont get squiiiiished! + jobs += "" + counter = 0 + + jobs += "" + + // Finished body = "[jobs]" dat = "[header][body]" usr << browse(dat, "window=jobban2;size=800x490") @@ -698,6 +718,13 @@ var/datum/job/temp = job_master.GetJob(jobPos) if(!temp) continue joblist += temp.title + if("offmapdept") + for(var/dept in offmap_departments) + for(var/jobPos in SSjob.get_job_titles_in_department(dept)) + if(!jobPos) continue + var/datum/job/temp = job_master.GetJob(jobPos) + if(!temp) continue + joblist += temp.title //VOREStation Edit End if("civiliandept") for(var/jobPos in SSjob.get_job_titles_in_department(DEPARTMENT_CIVILIAN)) diff --git a/code/modules/awaymissions/loot_vr.dm b/code/modules/awaymissions/loot_vr.dm index d602eb9da2..a44ebab2a9 100644 --- a/code/modules/awaymissions/loot_vr.dm +++ b/code/modules/awaymissions/loot_vr.dm @@ -57,8 +57,7 @@ var/bar_type = pick(possible_spawns) for(var/i=0,i> pref.lastchangelog S["lastnews"] >> pref.lastnews + S["lastlorenews"] >> pref.lastlorenews S["default_slot"] >> pref.default_slot S["preferences"] >> pref.preferences_enabled S["preferences_disabled"] >> pref.preferences_disabled @@ -16,6 +17,7 @@ /datum/category_item/player_setup_item/player_global/settings/save_preferences(var/savefile/S) S["lastchangelog"] << pref.lastchangelog S["lastnews"] << pref.lastnews + S["lastlorenews"] << pref.lastlorenews S["default_slot"] << pref.default_slot S["preferences"] << pref.preferences_enabled S["preferences_disabled"] << pref.preferences_disabled diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index 718f030746..854ecfc357 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -287,6 +287,12 @@ var/list/_client_preferences_by_type enabled_description = "Show" disabled_description = "Hide" +/datum/client_preference/radio_sounds + description = "Radio Sounds" + key = "RADIO_SOUNDS" + enabled_description = "On" + disabled_description = "Off" + /datum/client_preference/runechat_mob description = "Runechat (Mobs)" key = "RUNECHAT_MOB" @@ -319,6 +325,13 @@ var/list/_client_preferences_by_type var/datum/plane_holder/PH = preference_mob.plane_holder PH.set_vis(VIS_STATUS, enabled) +/datum/client_preference/show_lore_news + description = "Lore News Popup" + key = "NEWS_POPUP" + enabled_by_default = TRUE + enabled_description = "Popup New On Login" + disabled_description = "Do Nothing" + /******************** * Staff Preferences * ********************/ diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index 90e378fbb0..11e0f1f777 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -172,7 +172,8 @@ var/datum/gear_tweak/custom_name/gear_tweak_free_name = new() return if(valid_custom_names) return tgui_input_list(user, "Choose an item name.", "Character Preference", valid_custom_names, metadata) - return sanitize(input(user, "Choose the item's name. Leave it blank to use the default name.", "Item Name", metadata) as text|null, MAX_LNAME_LEN, extra = 0) + var/san_input = sanitize(input(user, "Choose the item's name. Leave it blank to use the default name.", "Item Name", metadata) as text|null, MAX_LNAME_LEN, extra = 0) + return san_input ? san_input : get_default() /datum/gear_tweak/custom_name/tweak_item(var/obj/item/I, var/metadata) if(!metadata) @@ -203,7 +204,8 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new() return if(valid_custom_desc) return tgui_input_list(user, "Choose an item description.", "Character Preference",valid_custom_desc, metadata) - return sanitize(input(user, "Choose the item's description. Leave it blank to use the default description.", "Item Description", metadata) as message|null, extra = 0) + var/san_input = sanitize(input(user, "Choose the item's description. Leave it blank to use the default description.", "Item Description", metadata) as message|null, extra = 0) + return san_input ? san_input : get_default() /datum/gear_tweak/custom_desc/tweak_item(var/obj/item/I, var/metadata) if(!metadata) @@ -551,4 +553,4 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new() /datum/gear_tweak/implant_location/get_metadata(var/user, var/metadata) return (tgui_input_list(user, "Select a bodypart for the implant to be implanted inside.", "Implant Location", bodypart_names_to_tokens || bodypart_tokens_to_names[BP_TORSO])) -#undef LOADOUT_BAN_STRING \ No newline at end of file +#undef LOADOUT_BAN_STRING diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm index 07c1b7f1be..4025094d37 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -190,19 +190,6 @@ display_name = "chaps, black" path = /obj/item/clothing/accessory/chaps/black -/datum/gear/accessory/hawaii - display_name = "hawaii shirt" - path = /obj/item/clothing/accessory/hawaii - -/datum/gear/accessory/hawaii/New() - ..() - var/list/shirts = list() - shirts["blue hawaii shirt"] = /obj/item/clothing/accessory/hawaii - shirts["red hawaii shirt"] = /obj/item/clothing/accessory/hawaii/red - shirts["random colored hawaii shirt"] = /obj/item/clothing/accessory/hawaii/random - gear_tweaks += new/datum/gear_tweak/path(shirts) - - /datum/gear/accessory/sweater display_name = "sweater selection" path = /obj/item/clothing/accessory/sweater @@ -284,3 +271,31 @@ /datum/gear/accessory/asymovercoat display_name = "orange asymmetrical overcoat" path = /obj/item/clothing/accessory/asymovercoat + +/datum/gear/accessory/hawaiian_shirt + display_name = "hawaiian shirt selection" + path = /obj/item/clothing/accessory/hawaiian + +/datum/gear/accessory/hawaiian_shirt/New() + ..() + var/list/hawaiian_shirts = list( + "Cyan Hawaiian shirt" = /obj/item/clothing/accessory/hawaiian, + "Blue Hawaiian shirt" = /obj/item/clothing/accessory/hawaiian/blue, + "Pink Hawaiian shirt" = /obj/item/clothing/accessory/hawaiian/pink, + "Red Hawaiian shirt" = /obj/item/clothing/accessory/hawaiian/red, + "Yellow Hawaiian shirt" = /obj/item/clothing/accessory/hawaiian/yellow + ) + gear_tweaks += new/datum/gear_tweak/path(hawaiian_shirts) + +/datum/gear/accessory/cowboy_vest + display_name = "cowboy selection" + path = /obj/item/clothing/accessory/cowboy_vest + +/datum/gear/accessory/cowboy_vest/New() + ..() + var/list/cowboy_vests = list( + "Ranger Vest" = /obj/item/clothing/accessory/cowboy_vest, + "Brown Vest" = /obj/item/clothing/accessory/cowboy_vest/brown, + "Grey Vest" = /obj/item/clothing/accessory/cowboy_vest/grey + ) + gear_tweaks += new/datum/gear_tweak/path(cowboy_vests) \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index 0fd0c81c73..911c92d578 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -135,24 +135,60 @@ path = /obj/item/clothing/head/soft/solgov /datum/gear/head/cowboy - display_name = "cowboy, rodeo" - path = /obj/item/clothing/head/cowboy_hat + display_name = "cowboy" + path = /obj/item/clothing/head/cowboy + +/datum/gear/head/cowboy/rattan + display_name = "cowboy, rattan" + path = /obj/item/clothing/head/cowboy/rattan + +/datum/gear/head/cowboy/dark + display_name = "cowboy, dark" + path = /obj/item/clothing/head/cowboy/dark + +/datum/gear/head/cowboy/ranger + display_name = "cowboy, ranger" + path = /obj/item/clothing/head/cowboy/ranger /datum/gear/head/cowboy/black display_name = "cowboy, black" - path = /obj/item/clothing/head/cowboy_hat/black + path = /obj/item/clothing/head/cowboy/black + +/datum/gear/head/cowboy/fancy + display_name = "cowboy, fancy" + path = /obj/item/clothing/head/cowboy/fancy + +/datum/gear/head/cowboy/rustler + display_name = "cowboy, rustler" + path = /obj/item/clothing/head/cowboy/rustler + +/datum/gear/head/cowboy/black + display_name = "cowboy, bandit" + path = /obj/item/clothing/head/cowboy/bandit /datum/gear/head/cowboy/wide display_name = "cowboy, wide" - path = /obj/item/clothing/head/cowboy_hat/wide - -/datum/gear/head/fedora - display_name = "fedora, brown" - path = /obj/item/clothing/head/fedora/brown + path = /obj/item/clothing/head/cowboy/wide /datum/gear/head/fedora/grey display_name = "fedora, grey" - path = /obj/item/clothing/head/fedora/grey + path = /obj/item/clothing/head/fedora + +/datum/gear/head/fedora/brown + display_name = "fedora, brown" + path = /obj/item/clothing/head/fedora/brown + +/datum/gear/head/fedora/white + display_name = "fedora, white" + path = /obj/item/clothing/head/fedora/white + +/datum/gear/head/fedora/beige + display_name = "fedora, beige" + path = /obj/item/clothing/head/fedora/beige + +/datum/gear/head/fedora/panama + display_name = "fedora, panama" + path = /obj/item/clothing/head/fedora/panama /datum/gear/head/hairflower display_name = "hair flower pin (colorable)" diff --git a/code/modules/client/preference_setup/loadout/loadout_shoes.dm b/code/modules/client/preference_setup/loadout/loadout_shoes.dm index 7f7ddd7f14..452867b4e5 100644 --- a/code/modules/client/preference_setup/loadout/loadout_shoes.dm +++ b/code/modules/client/preference_setup/loadout/loadout_shoes.dm @@ -5,6 +5,14 @@ slot = slot_shoes sort_category = "Shoes and Footwear" +/datum/gear/shoes/tourist_1 + display_name = "tourist, black" + path = /obj/item/clothing/shoes/tourist_1 + +/datum/gear/shoes/tourist_2 + display_name = "tourist, green" + path = /obj/item/clothing/shoes/tourist_2 + /datum/gear/shoes/jackboots display_name = "jackboots" path = /obj/item/clothing/shoes/boots/jackboots @@ -126,13 +134,37 @@ path = /obj/item/clothing/shoes/boots/cowboy /datum/gear/shoes/cowboy/classic - display_name = "classic cowboy boots" + display_name = "cowboy boots, classic" path = /obj/item/clothing/shoes/boots/cowboy/classic +/datum/gear/shoes/cowboy/brown + display_name = "cowboy boots, brown" + path = /obj/item/clothing/shoes/boots/cowboy/brown + +/datum/gear/shoes/cowboy/black + display_name = "cowboy boots, black" + path = /obj/item/clothing/shoes/boots/cowboy/black + +/datum/gear/shoes/cowboy/white + display_name = "cowboy boots, white" + path = /obj/item/clothing/shoes/boots/cowboy/white + +/datum/gear/shoes/cowboy/fancy + display_name = "cowboy boots, fancy" + path = /obj/item/clothing/shoes/boots/cowboy/fancy + /datum/gear/shoes/cowboy/snakeskin - display_name = "snakeskin cowboy boots" + display_name = "cowboy boots, snake skin" path = /obj/item/clothing/shoes/boots/cowboy/snakeskin +/datum/gear/shoes/cowboy/lizard + display_name = "cowboy boots, lizard skin" + path = /obj/item/clothing/shoes/boots/cowboy/lizard + +/datum/gear/shoes/cowboy/lizard/masterwork + display_name = "cowboy boots, lizard skin (masterwork)" + path = /obj/item/clothing/shoes/boots/cowboy/lizard/masterwork + /datum/gear/shoes/jungle display_name = "jungle boots" path = /obj/item/clothing/shoes/boots/jungle diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index 50e9102370..6e1a80d5ef 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -625,4 +625,4 @@ /datum/gear/suit/cmddressjacket display_name = "command dress jacket" path = /obj/item/clothing/suit/storage/cmddressjacket - allowed_roles = list("Facility Director", "Head of Personnel", "Command Secretary") + allowed_roles = list("Site Manager", "Head of Personnel", "Command Secretary") diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index 6905a3f0d4..b9dd7c5643 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -54,6 +54,22 @@ jumpclothes[initial(jumps.name)] = jumps gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpclothes)) +/datum/gear/uniform/qipao_colorable + display_name = "qipao, colorable" + path = /obj/item/clothing/under/qipao_colorable + +/datum/gear/uniform/qipao_colorable/New() + ..() + gear_tweaks += gear_tweak_free_color_choice + +/datum/gear/uniform/qipao2_colorable + display_name = "qipao, colorable, slim" + path = /obj/item/clothing/under/qipao2_colorable + +/datum/gear/uniform/qipao2_colorable/New() + ..() + gear_tweaks += gear_tweak_free_color_choice + /datum/gear/uniform/skirt display_name = "skirt selection" path = /obj/item/clothing/under/skirt @@ -663,21 +679,43 @@ gear_tweaks += gear_tweak_free_color_choice /datum/gear/uniform/paramedunidark - display_name = "paramedic uniform - dark" + display_name = "paramedic uniform, dark" path = /obj/item/clothing/under/rank/paramedunidark allowed_roles = list("Medical Doctor","Chief Medical Officer","Paramedic") /datum/gear/uniform/parameduniskirtdark - display_name = "paramedic skirt - dark" + display_name = "paramedic skirt, dark" path = /obj/item/clothing/under/rank/parameduniskirtdark allowed_roles = list("Medical Doctor","Chief Medical Officer","Paramedic") /datum/gear/uniform/paramedunilight - display_name = "paramedic uniform - light" + display_name = "paramedic uniform, light" path = /obj/item/clothing/under/rank/paramedunilight allowed_roles = list("Medical Doctor","Chief Medical Officer","Paramedic") /datum/gear/uniform/parameduniskirtlight - display_name = "paramedic skirt - light" + display_name = "paramedic skirt, light" path = /obj/item/clothing/under/rank/parameduniskirtlight - allowed_roles = list("Medical Doctor","Chief Medical Officer","Paramedic") \ No newline at end of file + allowed_roles = list("Medical Doctor","Chief Medical Officer","Paramedic") + +/datum/gear/uniform/tourist_1 + display_name = "tourist outfit, white" + path = /obj/item/clothing/under/tourist_1 + +/datum/gear/uniform/tourist_2 + display_name = "tourist outfit, blue" + path = /obj/item/clothing/under/tourist_2 + +/datum/gear/uniform/cowboy_outfits + display_name = "cowboy outfit selection" + path = /obj/item/clothing/under/cowboy + +/datum/gear/uniform/cowboy_outfits/New() + ..() + var/list/cowboy_outfits = list( + "Patterned Cowboy Outfit" = /obj/item/clothing/under/cowboy, + "Tan Cowboy Outfit" = /obj/item/clothing/under/cowboy/tan, + "Brown Cowboy Outfit" = /obj/item/clothing/under/cowboy/brown, + "Grey Cowboy Outfit" = /obj/item/clothing/under/cowboy/grey + ) + gear_tweaks += new/datum/gear_tweak/path(cowboy_outfits) \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm index 19b2aab906..1dfee22f63 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm @@ -196,17 +196,17 @@ Swimsuits /* Qipao */ -/datum/gear/uniform/qipao +/datum/gear/uniform/qipao_black display_name = "qipao, black" - path = /obj/item/clothing/under/dress/qipao + path = /obj/item/clothing/under/qipao /datum/gear/uniform/qipao_red display_name = "qipao, red" - path = /obj/item/clothing/under/dress/qipao/red + path = /obj/item/clothing/under/qipao/red /datum/gear/uniform/qipao_white display_name = "qipao, white" - path = /obj/item/clothing/under/dress/qipao/white + path = /obj/item/clothing/under/qipao/white /* Bluespace jumpsuit diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 5c4c1463cf..e0f84a44b0 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -150,6 +150,7 @@ var/list/preferences_datums = list() var/datum/browser/panel var/lastnews // Hash of last seen lobby news content. + var/lastlorenews //ID of last seen lore news article. var/examine_text_mode = 0 // Just examine text, include usage (description_info), switch to examine panel. var/multilingual_mode = 0 // Default behaviour, delimiter-key-space, delimiter-key-delimiter, off diff --git a/code/modules/client/preferences_toggle_procs.dm b/code/modules/client/preferences_toggle_procs.dm index bf3d7a3ca7..188ae794a1 100644 --- a/code/modules/client/preferences_toggle_procs.dm +++ b/code/modules/client/preferences_toggle_procs.dm @@ -253,7 +253,7 @@ SScharacter_setup.queue_preferences_save(prefs) feedback_add_details("admin_verb","TAirPumpNoise") - + /client/verb/toggle_old_door_sounds() set name = "Toggle Old Door Sounds" set category = "Preferences" @@ -268,7 +268,7 @@ SScharacter_setup.queue_preferences_save(prefs) feedback_add_details("admin_verb","TOldDoorSounds") - + /client/verb/toggle_department_door_sounds() set name = "Toggle Department Door Sounds" set category = "Preferences" @@ -393,6 +393,19 @@ feedback_add_details("admin_verb","TStatusIndicators") +/client/verb/toggle_radio_sounds() + set name = "Toggle Radio Sounds" + set category = "Preferences" + set desc = "Enable/Disable hearing a sound when somebody speaks over your headset." + + var/pref_path = /datum/client_preference/radio_sounds + toggle_preference(pref_path) + SScharacter_setup.queue_preferences_save(prefs) + + to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/radio_sounds)) ? "hear" : "not hear"] radio sounds.") + + feedback_add_details("admin_verb","TRadioSounds") + // Not attached to a pref datum because those are strict binary toggles /client/verb/toggle_examine_mode() set name = "Toggle Examine Mode" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 3728ed553b..5a2f9530d7 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -473,7 +473,7 @@ /obj/item/clothing/head/proc/update_flashlight(var/mob/user = null) set_light_on(!light_on) - + if(light_system == STATIC_LIGHT) update_light() @@ -767,7 +767,7 @@ // means that if a taur puts on an already taurized suit without a taur sprite // for their taur type, but the previous taur type had a sprite, it stays // taurized and they end up with that taur style which is funny - else + else taurized = FALSE if(!taurized) @@ -1050,3 +1050,10 @@ /obj/item/clothing/under/rank/New() sensor_mode = pick(0,1,2,3) ..() + +//Vorestation edit - eject mobs from clothing before deletion +/obj/item/clothing/Destroy() + for(var/mob/living/M in contents) + M.forceMove(get_turf(src)) + return ..() +//Vorestation edit end \ No newline at end of file diff --git a/code/modules/clothing/clothing_vr.dm b/code/modules/clothing/clothing_vr.dm index 5880d600f1..caf9e125d1 100644 --- a/code/modules/clothing/clothing_vr.dm +++ b/code/modules/clothing/clothing_vr.dm @@ -41,9 +41,11 @@ else var/obj/item/weapon/holder/micro/holder = I if(holder.held_mob && (holder.held_mob in holder)) - to_chat(holder.held_mob, "[user] stuffs you into \the [src]!") - holder.held_mob.forceMove(src) - to_chat(user, "You stuff \the [holder.held_mob] into \the [src]!") + var/mob/living/M = holder.held_mob + holder.dump_mob() + to_chat(M, "[user] stuffs you into \the [src]!") + M.forceMove(src) + to_chat(user, "You stuff \the [M] into \the [src]!") else ..() diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index da22b29f1f..2e492aca03 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -133,9 +133,10 @@ flags_inv = null /obj/item/clothing/head/det - name = "fedora" - desc = "A brown fedora - either the cornerstone of a detective's style or a poor attempt at looking cool, depending on the person wearing it." - icon_state = "detective" + name = "detective fedora" + desc = "A specially designed fedora that is woven with protective fibers. It also makes you look cool." + icon_state = "fedora_brown" + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 0.9 @@ -143,9 +144,7 @@ show_examine = FALSE /obj/item/clothing/head/det/grey - icon_state = "detective2" - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - desc = "A grey fedora - either the cornerstone of a detective's style or a poor attempt at looking cool, depending on the person wearing it." + icon_state = "fedora_grey" /obj/item/clothing/head/beret/engineering name = "engineering beret" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 8636b5b606..f6ff911973 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -96,13 +96,6 @@ desc = "A powdered wig." icon_state = "pwig" -/obj/item/clothing/head/that - name = "top-hat" - desc = "It's an amish looking hat." - icon_state = "tophat" - siemens_coefficient = 0.9 - body_parts_covered = 0 - /obj/item/clothing/head/redcoat name = "redcoat's hat" icon_state = "redcoat" @@ -234,84 +227,6 @@ icon_state = "bandana" item_state_slots = list(slot_r_hand_str = "redbandana", slot_l_hand_str = "redbandana") -/obj/item/clothing/head/bowler - name = "bowler-hat" - desc = "Gentleman, elite aboard!" - icon_state = "bowler" - item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") - body_parts_covered = 0 - -//stylish bs12 hats - -/obj/item/clothing/head/bowlerhat - name = "bowler hat" - icon_state = "bowler_hat" - item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") - desc = "For the gentleman of distinction." - body_parts_covered = 0 - -/obj/item/clothing/head/beaverhat - name = "beaver hat" - icon_state = "beaver_hat" - item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") - desc = "Soft felt makes this hat both comfortable and elegant." - -/obj/item/clothing/head/boaterhat - name = "boater hat" - icon_state = "boater_hat" - item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") - desc = "The ultimate in summer fashion." - -/obj/item/clothing/head/fedora - name = "fedora" - icon_state = "fedora" - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - desc = "A sharp, stylish hat." - -/obj/item/clothing/head/fedora/brown - name = "fedora" - desc = "A brown fedora - either the cornerstone of a reporter's style or a poor attempt at looking cool, depending on the person wearing it." - icon_state = "detective" - allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) - -/obj/item/clothing/head/fedora/grey - icon_state = "detective2" - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - desc = "A grey fedora - either the cornerstone of a reporter's style or a poor attempt at looking cool, depending on the person wearing it." - - -/obj/item/clothing/head/feathertrilby - name = "feather trilby" - icon_state = "feather_trilby" - item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") - desc = "A sharp, stylish hat with a feather." - -/obj/item/clothing/head/fez - name = "fez" - icon_state = "fez" - desc = "You should wear a fez. Fezzes are cool." - -/obj/item/clothing/head/cowboy_hat - name = "cowboy hat" - desc = "For those that have spurs that go jingle jangle jingle." - icon_state = "cowboyhat" - body_parts_covered = 0 - -/obj/item/clothing/head/cowboy_hat/black - name = "black cowboy hat" - desc = "You can almost hear the old western music." - icon_state = "cowboy_black" - -/obj/item/clothing/head/cowboy_hat/wide - name = "wide-brimmed cowboy hat" - desc = "Because justice isn't going to dispense itself." - icon_state = "cowboy_wide" - -/obj/item/clothing/head/cowboy_hat/small - name = "small cowboy hat" - desc = "For the tiniest of cowboys." - icon_state = "cowboy_small" - /obj/item/clothing/head/witchwig name = "witch costume wig" desc = "Eeeee~heheheheheheh!" @@ -484,4 +399,129 @@ /obj/item/clothing/head/beret/corp/xion name = "\improper Xion beret" desc = "An orange beret denoting employment with Xion Manufacturing. For personnel that are more inclined towards style than safety." - icon_state = "beret_orange" \ No newline at end of file + icon_state = "beret_orange" + +//Stylish Hats + +/obj/item/clothing/head/bowler + name = "bowler hat" + desc = "Gentleman, elite aboard!" + icon_state = "bowler" + item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") + body_parts_covered = 0 + +/obj/item/clothing/head/that + name = "top-hat" + desc = "It's an amish looking hat." + icon_state = "tophat" + siemens_coefficient = 0.9 + body_parts_covered = 0 + +/obj/item/clothing/head/beaverhat + name = "beaver hat" + desc = "Soft felt makes this hat both comfortable and elegant." + icon_state = "beaver_hat" + item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") + siemens_coefficient = 0.9 + body_parts_covered = 0 + +/obj/item/clothing/head/boaterhat + name = "boater hat" + desc = "The ultimate in summer fashion." + icon_state = "boater_hat" + item_state_slots = list(slot_r_hand_str = "tophat", slot_l_hand_str = "tophat") + body_parts_covered = 0 + +/obj/item/clothing/head/fedora + name = "fedora" + icon_state = "fedora_grey" + desc = "A sharp, stylish hat that's grey in color." + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + body_parts_covered = 0 + +/obj/item/clothing/head/fedora/brown + desc = "A brown fedora. Perfect for detectives or those trying to pilfer artifacts." + icon_state = "fedora_brown" + allowed = list(/obj/item/weapon/reagent_containers/food/snacks/candy_corn, /obj/item/weapon/pen) + +/obj/item/clothing/head/fedora/white + desc = "A white fedora, really cool hat if you're a mobster. A really lame hat if you're not." + icon_state = "fedora_white" + +/obj/item/clothing/head/fedora/beige + desc = "A beige fedora. Either the cornerstone of a reporter's style or a poor attempt at looking cool. Depends on the person wearing it." + icon_state = "fedora_beige" + +/obj/item/clothing/head/fedora/panama + desc = "A fancy, cream colored fedora. Columbian pure." + icon_state = "fedora_panama" + +/obj/item/clothing/head/trilby + name = "trilby" + icon_state = "trilby" + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + desc = "M'lady" + +/obj/item/clothing/head/trilby/feather + name = "feather trilby" + icon_state = "feather_trilby" + item_state_slots = list(slot_r_hand_str = "detective", slot_l_hand_str = "detective") + desc = "A sharp, stylish hat with a feather." + +/obj/item/clothing/head/fez + name = "fez" + icon_state = "fez" + desc = "You should wear a fez. Fezzes are cool." + +//Cowboy Hats + +/obj/item/clothing/head/cowboy + name = "cowboy hat" + desc = "For those that have spurs that go jingle jangle jingle." + icon_state = "cowboy_1" + body_parts_covered = 0 + +/obj/item/clothing/head/cowboy/rattan + name = "rattan cowboy hat" + desc = "Made from the same straw harvested from the fields." + icon_state = "cowboy_2" + +/obj/item/clothing/head/cowboy/dark + name = "dark cowboy hat" + desc = "Protect yer head in this new frontier." + icon_state = "cowboy_3" + +/obj/item/clothing/head/cowboy/ranger + name = "ranger cowboy hat" + desc = "Feel the western vibe from this good ol' classic." + icon_state = "cowboy_4" + +/obj/item/clothing/head/cowboy/rustler + name = "rustler cowboy hat" + desc = "Rustle up some of that there cattle bucko." + icon_state = "cowboy_5" + +/obj/item/clothing/head/cowboy/black + name = "black cowboy hat" + desc = "Perfect for the budding tram robber." + icon_state = "cowboy_7" + +/obj/item/clothing/head/cowboy/fancy + name = "fancy cowboy hat" + desc = "Premium black leather had with a rattlesnake hatband to top the ensemble." + icon_state = "cowboy_8" + +/obj/item/clothing/head/cowboy/wide + name = "wide-brimmed cowboy hat" + desc = "Because justice isn't going to dispense itself." + icon_state = "cowboy_6" + +/obj/item/clothing/head/cowboy/bandit + name = "bandit cowboy hat" + desc = "You can almost hear the old western music." + icon_state = "cowboy_9" + +/obj/item/clothing/head/cowboy/small + name = "small cowboy hat" + desc = "For the tiniest of cowboys." + icon_state = "cowboy_small" \ No newline at end of file diff --git a/code/modules/clothing/shoes/boots.dm b/code/modules/clothing/shoes/boots.dm index c85298cba9..acdc9f84dd 100644 --- a/code/modules/clothing/shoes/boots.dm +++ b/code/modules/clothing/shoes/boots.dm @@ -19,10 +19,40 @@ icon_state = "cowboy_classic" /obj/item/clothing/shoes/boots/cowboy/snakeskin - name = "snakeskin cowboy boots" + name = "snake skin boots" desc = "A pair of cowboy boots made from python skin." icon_state = "cowboy_snakeskin" +/obj/item/clothing/shoes/boots/cowboy/lizard + name = "lizard skin boots" + desc = "You can hear a faint hissing from inside the boots; you hope it is just a mournful ghost." + icon_state = "lizardboots_green" + +/obj/item/clothing/shoes/boots/cowboy/lizard/masterwork + name = "\improper Hugs-The-Feet lizard skin boots" + desc = "A pair of masterfully crafted lizard skin boots. Finally a good application for the station's most bothersome inhabitants." + icon_state = "lizardboots_blue" + +/obj/item/clothing/shoes/boots/cowboy/brown + name = "brown cowboy boots" + desc = "A small sticker lets you know they've been inspected for snakes, It is unclear how long ago the inspection took place..." + icon_state = "cowboy_brown" + +/obj/item/clothing/shoes/boots/cowboy/black + name = "black cowboy boots" + desc = "You get the feeling that these were red at one point." + icon_state = "cowboy_black" + +/obj/item/clothing/shoes/boots/cowboy/white + name = "white cowboy boots" + desc = "Perfect for those that like style while remaining rugged as ever." + icon_state = "cowboy_white" + +/obj/item/clothing/shoes/boots/cowboy/fancy + name = "fancy cowboy boots" + desc = "A gambler was 100% wearing these when he died." + icon_state = "cowboy_fancy" + /obj/item/clothing/shoes/boots/jackboots name = "jackboots" desc = "Standard-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index bcb3ba80c5..9cb77eaf2e 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -48,6 +48,33 @@ wizard_garb = 1 +/obj/item/clothing/shoes/flipflop + name = "flip flops" + desc = "A pair of foam flip flops. For those not afraid to show a little ankle." + icon_state = "thongsandal" + addblends = "thongsandal_a" + +/obj/item/clothing/shoes/cookflop + name = "grilling sandals" + desc = "All this talk of antags, greytiding, and griefing... I just wanna grill for god's sake!" + icon_state = "cookflops" + species_restricted = null + body_parts_covered = 0 + +/obj/item/clothing/shoes/tourist_1 + name = "tourist sandals" + desc = "Black sandals usually worn by tourists. Need I say more?" + icon_state = "tourist_1" + species_restricted = null + body_parts_covered = 0 + +/obj/item/clothing/shoes/tourist_2 + name = "tourist sandals" + desc = "Green sandals usually worn by tourists. Need I say more?" + icon_state = "tourist_2" + species_restricted = null + body_parts_covered = 0 + /obj/item/clothing/shoes/sandal/clogs name = "plastic clogs" desc = "A pair of plastic clog shoes." @@ -137,12 +164,6 @@ slowdown = SHOES_SLOWDOWN+0.5 species_restricted = null -/obj/item/clothing/shoes/flipflop - name = "flip flops" - desc = "A pair of foam flip flops. For those not afraid to show a little ankle." - icon_state = "thongsandal" - addblends = "thongsandal_a" - /obj/item/clothing/shoes/athletic name = "athletic shoes" desc = "A pair of sleek atheletic shoes. Made by and for the sporty types." @@ -204,4 +225,12 @@ bootcolor = "orange" /obj/item/clothing/shoes/boots/ranger/yellow - bootcolor = "yellow" \ No newline at end of file + bootcolor = "yellow" + +/obj/item/clothing/shoes/primitive + name = "primitive shoes" + desc = "Some patched together rags. Better than being barefoot." + icon_state = "rag" + force = 0 + drop_sound = 'sound/items/drop/clothing.ogg' + pickup_sound = 'sound/items/pickup/clothing.ogg' \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm index 0762fedeae..f8821c89d0 100644 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm @@ -95,7 +95,7 @@ return var/obj/item/stack/cable_coil/cable = W - if(!cable.amount >= 5) + if(!cable.get_amount() >= 5) to_chat(user, "You need five units of cable to repair \the [src].") return diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index f4fb54fb11..d0f8949d8d 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -3,6 +3,7 @@ * Lasertag * Costume * Misc + * Department Jackets */ // -S2-note- Needs categorizing and sorting. @@ -10,6 +11,7 @@ /* * Lasertag */ + /obj/item/clothing/suit/bluetag name = "blue laser tag armour" desc = "Blue Pride, Station Wide." @@ -33,6 +35,7 @@ /* * Costume */ + /obj/item/clothing/suit/pirate name = "pirate coat" desc = "Yarr." @@ -227,6 +230,7 @@ /* * Misc */ + /obj/item/clothing/suit/straight_jacket name = "straight jacket" desc = "A suit that completely restrains the wearer." @@ -278,8 +282,9 @@ icon_state = "kamishimo" /* - * coats + * Coats */ + /obj/item/clothing/suit/leathercoat name = "leather coat" desc = "A long, thick black leather coat." diff --git a/code/modules/clothing/under/accessories/clothing.dm b/code/modules/clothing/under/accessories/clothing.dm index ca1bb32d5f..d25cda260b 100644 --- a/code/modules/clothing/under/accessories/clothing.dm +++ b/code/modules/clothing/under/accessories/clothing.dm @@ -1,3 +1,7 @@ +/* + * Formal + */ + /obj/item/clothing/accessory/vest name = "black vest" desc = "Slick black suit vest." @@ -30,6 +34,59 @@ desc = "Lucky suit jacket." icon_state = "checkered_jacket" +/obj/item/clothing/accessory/jacket/gambler + name = "gambler suit jacket" + desc = "Chairman suit jacket." + icon_state = "gambler_jacket" + +/* + * Hawaiian + */ + +/obj/item/clothing/accessory/hawaiian + name = "hawaiian shirt" + desc = "You probably need some welder googles to look at this." + icon_state = "hawaiian_cyan" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + slot_flags = SLOT_OCLOTHING | SLOT_TIE + body_parts_covered = UPPER_TORSO|LOWER_TORSO + siemens_coefficient = 0.9 + w_class = ITEMSIZE_NORMAL + slot = ACCESSORY_SLOT_OVER + +/obj/item/clothing/accessory/hawaiian/blue + name = "blue hawaiian shirt" + icon_state = "hawaiian_blue" + +/obj/item/clothing/accessory/hawaiian/pink + name = "pink hawaiian shirt" + icon_state = "hawaiian_pink" + +/obj/item/clothing/accessory/hawaiian/red + name = "red hawaiian shirt" + icon_state = "hawaiian_red" + +/obj/item/clothing/accessory/hawaiian/yellow + name = "yellow hawaiian shirt" + icon_state = "hawaiian_yellow" + +/obj/item/clothing/accessory/hawaiian_random + name = "random hawaiian shirt" + desc = "A random set of hawaiian shirts for style." + +/obj/item/clothing/accessory/hawaiian_random/New() + return pick( + prob(2);/obj/item/clothing/accessory/hawaiian, + prob(2);/obj/item/clothing/accessory/hawaiian/blue, + prob(2);/obj/item/clothing/accessory/hawaiian/pink, + prob(2);/obj/item/clothing/accessory/hawaiian/red, + prob(2);/obj/item/clothing/accessory/hawaiian/yellow + ) + +/* + * Chaps + */ + /obj/item/clothing/accessory/chaps name = "brown chaps" desc = "A pair of loose, brown leather chaps." @@ -43,6 +100,7 @@ /* * Poncho */ + /obj/item/clothing/accessory/poncho name = "poncho" desc = "A simple, comfortable poncho." @@ -141,6 +199,7 @@ /* * Cloak */ + /obj/item/clothing/accessory/poncho/roles/cloak name = "quartermaster's cloak" desc = "An elaborate brown and gold cloak." @@ -245,28 +304,6 @@ icon_state = "colorcloak" item_state = "colorcloak" -/obj/item/clothing/accessory/hawaii - name = "flower-pattern shirt" - desc = "You probably need some welder googles to look at this." - icon_state = "hawaii" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - slot_flags = SLOT_OCLOTHING | SLOT_TIE - body_parts_covered = UPPER_TORSO|LOWER_TORSO - siemens_coefficient = 0.9 - w_class = ITEMSIZE_NORMAL - slot = ACCESSORY_SLOT_OVER - -/obj/item/clothing/accessory/hawaii/red - icon_state = "hawaii2" - -/obj/item/clothing/accessory/hawaii/random - name = "flower-pattern shirt" - -/obj/item/clothing/accessory/hawaii/random/New() - if(prob(50)) - icon_state = "hawaii2" - color = color_rotation(rand(-11,12)*15) - /obj/item/clothing/accessory/wcoat name = "waistcoat" desc = "For some classy, murderous fun." @@ -302,23 +339,34 @@ icon_state = "elegant_waistcoat" item_state = "elegant_waistcoat" +/* + * Sweatervests + */ + /obj/item/clothing/accessory/wcoat/swvest - name = "black sweatervest" + name = "black sweater vest" desc = "A sleeveless sweater. Wear this if you don't want your arms to be warm, or if you're a nerd." icon_state = "sweatervest" item_state = "sweatervest" /obj/item/clothing/accessory/wcoat/swvest/blue - name = "blue sweatervest" + name = "blue sweater vest" icon_state = "sweatervest_blue" item_state = "sweatervest_blue" /obj/item/clothing/accessory/wcoat/swvest/red - name = "red sweatervest" + name = "red sweater vest" icon_state = "sweatervest_red" item_state = "sweatervest_red" -//Sweaters. +/obj/item/clothing/accessory/wcoat/swvest/green + name = "green sweater vest" + icon_state = "sweatervest_green" + item_state = "sweatervest_green" + +/* + * Sweaters + */ /obj/item/clothing/accessory/sweater name = "sweater" @@ -386,9 +434,9 @@ desc = "A comfortable turtleneck in a dark red." icon_state = "turtleneck_red" -//*** -// End of sweaters -//*** +/* + * Misc + */ /obj/item/clothing/accessory/cowledvest name = "cowled vest" @@ -414,3 +462,20 @@ name = "orange asymmetrical overcoat" desc = "An asymmetrical orange overcoat in a 2560's fashion." icon_state = "asymovercoat" + +/* + * Cowboy Vests + */ + +/obj/item/clothing/accessory/cowboy_vest + name = "ranger cowboy vest" + desc = "A rugged looking vest made from leather. For those that tame the wilds." + icon_state = "cowboyvest_ranger" + +/obj/item/clothing/accessory/cowboy_vest/brown + name = "brown cowboy vest" + icon_state = "cowboyvest_brown" + +/obj/item/clothing/accessory/cowboy_vest/grey + name = "grey cowboy vest" + icon_state = "cowboyvest_grey" \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 562950f89a..37fd676a4c 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -743,6 +743,13 @@ Uniforms and such name = "checkered skirt" icon_state = "checkered_suit_skirt" +/obj/item/clothing/under/suit_jacket/gambler + name = "gambling suit" + desc = "The suit of a gambler. Lady luck be with you." + icon_state = "gambler_suit" + item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black") + starting_accessories = list(/obj/item/clothing/accessory/tie/black, /obj/item/clothing/accessory/jacket/gambler) + /obj/item/clothing/under/suit_jacket/tan name = "tan suit" desc = "A tan suit. Smart, but casual." @@ -754,13 +761,6 @@ Uniforms and such name = "tan skirt" icon_state = "tan_suit_skirt" -/obj/item/clothing/under/serviceoveralls - name = "workman outfit" - desc = "The very image of a working man. Not that you're probably doing work." - icon_state = "mechanic" - item_state_slots = list(slot_r_hand_str = "cargo", slot_l_hand_str = "cargo") - rolled_sleeves = 0 - /obj/item/clothing/under/cheongsam name = "white cheongsam" desc = "It is a white cheongsam dress." @@ -802,6 +802,18 @@ Uniforms and such desc = "It is a dark blue cheongsam dress." icon_state = "cheongsam-darkblue" +/obj/item/clothing/under/qipao_colorable + name = "qipao" + desc = "A traditional Chinese women's garment, typically made from silk." + icon_state = "qipao" + body_parts_covered = UPPER_TORSO|LOWER_TORSO + +/obj/item/clothing/under/qipao2_colorable + name = "slim qipao" + desc = "A traditional Chinese women's garment, typically made from silk. This one is fairly slim." + icon_state = "qipao2" + body_parts_covered = UPPER_TORSO|LOWER_TORSO + /obj/item/clothing/under/blazer name = "blue blazer" desc = "A bold but yet conservative outfit, red corduroys, navy blazer and a tie." @@ -1026,12 +1038,6 @@ Uniforms and such icon_state = "saare" worn_state = "saare" -/obj/item/clothing/under/frontier - name = "frontier clothes" - desc = "A rugged flannel shirt and denim overalls. A popular style among frontier colonists." - icon_state = "frontier" - worn_state = "frontier" - /obj/item/clothing/under/focal name = "\improper Focal Point jumpsuit" desc = "A jumpsuit belonging to Focal Point Energistics, an engineering megacorporation." @@ -1136,4 +1142,83 @@ Uniforms and such unicolor = "orange" /obj/item/clothing/under/color/ranger/yellow - unicolor = "yellow" \ No newline at end of file + unicolor = "yellow" + +/obj/item/clothing/under/boater + name = "boater outfit" + desc = "A classic outfit for those with a nautical inclination." + icon_state = "boater" + worn_state = "boater" + +/obj/item/clothing/under/tourist_1 + name = "summer outfit" + desc = "The perfect outfit to wear out of town." + icon_state = "tourist_1" + worn_state = "tourist_1" + +/obj/item/clothing/under/tourist_2 + name = "summer outfit" + desc = "The perfect outfit to wear out of town." + icon_state = "tourist_2" + worn_state = "tourist_2" + +/obj/item/clothing/under/relaxwear_1 + name = "casual outfit" + desc = "Something casual to wear out on the town. Pairs well with the holiday season." + icon_state = "relaxwear_1" + worn_state = "relaxwear_1" + starting_accessories = list(/obj/item/clothing/accessory/wcoat/swvest/red) + +/obj/item/clothing/under/relaxwear_2 + name = "relaxing outfit" + desc = "A comfy looking set of clothes to relax in, even if the style is a bit dated." + icon_state = "relaxwear_2" + worn_state = "relaxwear_2" + starting_accessories = list(/obj/item/clothing/accessory/wcoat/swvest/green) + +/obj/item/clothing/under/serviceoveralls + name = "workman outfit" + desc = "The very image of a working man. Not that you're probably doing work." + icon_state = "mechanic" + item_state_slots = list(slot_r_hand_str = "cargo", slot_l_hand_str = "cargo") + rolled_sleeves = 0 + +/obj/item/clothing/under/frontier + name = "frontier clothes" + desc = "A rugged flannel shirt and denim overalls. A popular style among frontier colonists." + icon_state = "frontier" + worn_state = "frontier" + +/obj/item/clothing/under/rustler + name = "rustler outfit" + desc = "A rugged outfit for rustling cattle out on the frontier." + icon_state = "rustler" + worn_state = "rustler" + +/obj/item/clothing/under/cowboy + name = "cowboy clothes" + desc = "Some rugged clothes for hard labor out on the farm." + icon_state = "cowboy" + worn_state = "cowboy" + +/obj/item/clothing/under/cowboy/tan + name = "tan cowboy clothes" + icon_state = "cowboy_tan" + worn_state = "cowboy_tan" + +/obj/item/clothing/under/cowboy/brown + name = "brown cowboy clothes" + icon_state = "cowboy_brown" + worn_state = "cowboy_brown" + +/obj/item/clothing/under/cowboy/grey + name = "grey cowboy clothes" + icon_state = "cowboy_grey" + worn_state = "cowboy_grey" + +/obj/item/clothing/under/primitive + name = "primitive clothes" + desc = "Some patched together rags. Better than being naked." + force = 0 + icon_state = "rag" + worn_state = "rag" \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous_vr.dm b/code/modules/clothing/under/miscellaneous_vr.dm index 3fdac04a82..df3c102fed 100644 --- a/code/modules/clothing/under/miscellaneous_vr.dm +++ b/code/modules/clothing/under/miscellaneous_vr.dm @@ -119,20 +119,21 @@ /obj/item/clothing/under/ert armor = list(melee = 5, bullet = 10, laser = 10, energy = 5, bomb = 5, bio = 0, rad = 0) -/obj/item/clothing/under/dress/qipao - name = "qipao" +/obj/item/clothing/under/qipao + name = "black qipao" desc = "A type of feminine body-hugging dress with distinctive Chinese features of Manchu origin." icon = 'icons/inventory/uniform/item_vr.dmi' icon_override = 'icons/inventory/uniform/mob_vr.dmi' icon_state = "qipao" item_state = "qipao" + body_parts_covered = UPPER_TORSO|LOWER_TORSO -/obj/item/clothing/under/dress/qipao/white +/obj/item/clothing/under/qipao/white name = "white qipao" icon_state = "qipao_white" item_state = "qipao_white" -/obj/item/clothing/under/dress/qipao/red +/obj/item/clothing/under/qipao/red name = "red qipao" icon_state = "qipao_red" item_state = "qipao_red" diff --git a/code/modules/economy/coins.dm b/code/modules/economy/coins.dm index 8f95a424b7..503d8f4959 100644 --- a/code/modules/economy/coins.dm +++ b/code/modules/economy/coins.dm @@ -76,8 +76,7 @@ ..() return - var/obj/item/stack/cable_coil/CC = new/obj/item/stack/cable_coil(user.loc) - CC.amount = 1 + var/obj/item/stack/cable_coil/CC = new (user.loc) CC.update_icon() cut_overlays() string_attached = null diff --git a/code/modules/economy/vending.dm b/code/modules/economy/vending.dm index ddd4520bdf..09a9b480aa 100644 --- a/code/modules/economy/vending.dm +++ b/code/modules/economy/vending.dm @@ -65,6 +65,7 @@ emagged = 0 //Ignores if somebody doesn't have card access to that machine. var/seconds_electrified = 0 //Shock customers like an airlock. var/shoot_inventory = 0 //Fire items at customers! We're broken! + var/shoot_inventory_chance = 1 var/scan_id = 1 var/obj/item/weapon/coin/coin @@ -677,7 +678,7 @@ GLOBAL_LIST_EMPTY(vending_products) speak(slogan) last_slogan = world.time - if(shoot_inventory && prob(2)) + if(shoot_inventory && prob(shoot_inventory_chance)) throw_item() return @@ -717,20 +718,20 @@ GLOBAL_LIST_EMPTY(vending_products) //Somebody cut an important wire and now we're following a new definition of "pitch." /obj/machinery/vending/proc/throw_item() - var/obj/throw_item = null + var/obj/item/throw_item = null var/mob/living/target = locate() in view(7,src) if(!target) return 0 - for(var/datum/stored_item/vending_product/R in product_records) + for(var/datum/stored_item/vending_product/R in shuffle(product_records)) throw_item = R.get_product(loc) if(!throw_item) continue break if(!throw_item) - return 0 - spawn(0) - throw_item.throw_at(target, 16, 3, src) + return FALSE + throw_item.vendor_action(src) + INVOKE_ASYNC(throw_item, /atom/movable.proc/throw_at, target, rand(3, 10), rand(1, 3), src) visible_message("\The [src] launches \a [throw_item] at \the [target]!") return 1 diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index c51951b338..6578b950fb 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -1191,6 +1191,7 @@ products = list( /obj/item/clothing/under/rank/chef = 5, /obj/item/clothing/shoes/black = 5, + /obj/item/clothing/shoes/cookflop = 2, /obj/item/clothing/suit/storage/apron/white = 5, /obj/item/clothing/suit/chef = 5, /obj/item/clothing/suit/chef/classic = 5, diff --git a/code/modules/economy/vending_machines_vr.dm b/code/modules/economy/vending_machines_vr.dm index 16f7f1940d..0f14326a99 100644 --- a/code/modules/economy/vending_machines_vr.dm +++ b/code/modules/economy/vending_machines_vr.dm @@ -453,8 +453,11 @@ /obj/item/weapon/storage/belt/fannypack/white = 5, /obj/item/clothing/accessory/fullcape = 5, /obj/item/clothing/accessory/halfcape = 5, - /obj/item/clothing/accessory/hawaii = 5, - /obj/item/clothing/accessory/hawaii/random = 5, + /obj/item/clothing/accessory/hawaiian = 5, + /obj/item/clothing/accessory/hawaiian/blue = 5, + /obj/item/clothing/accessory/hawaiian/pink = 5, + /obj/item/clothing/accessory/hawaiian/red = 5, + /obj/item/clothing/accessory/hawaiian/yellow = 5, /obj/item/clothing/accessory/locket = 5, /obj/item/weapon/storage/backpack/purse = 1, /obj/item/clothing/accessory/sash = 5, @@ -563,8 +566,11 @@ /obj/item/weapon/storage/belt/fannypack/white = 50, /obj/item/clothing/accessory/fullcape = 50, /obj/item/clothing/accessory/halfcape = 50, - /obj/item/clothing/accessory/hawaii = 50, - /obj/item/clothing/accessory/hawaii/random = 50, + /obj/item/clothing/accessory/hawaiian = 50, + /obj/item/clothing/accessory/hawaiian/blue = 50, + /obj/item/clothing/accessory/hawaiian/pink = 50, + /obj/item/clothing/accessory/hawaiian/red = 50, + /obj/item/clothing/accessory/hawaiian/yellow = 50, /obj/item/clothing/accessory/locket = 50, /obj/item/weapon/storage/backpack/purse = 50, /obj/item/clothing/accessory/sash = 50, @@ -759,9 +765,9 @@ /obj/item/clothing/under/dress/sailordress = 5, /obj/item/clothing/under/dress/sari = 5, /obj/item/clothing/under/dress/sari/green = 5, - /obj/item/clothing/under/dress/qipao = 5, - /obj/item/clothing/under/dress/qipao/red = 5, - /obj/item/clothing/under/dress/qipao/white = 5, + /obj/item/clothing/under/qipao = 5, + /obj/item/clothing/under/qipao/red = 5, + /obj/item/clothing/under/qipao/white = 5, /obj/item/clothing/under/shorts/red = 5, /obj/item/clothing/under/shorts/green = 5, /obj/item/clothing/under/shorts/blue = 5, @@ -930,9 +936,9 @@ /obj/item/clothing/under/dress/sailordress = 50, /obj/item/clothing/under/dress/sari = 50, /obj/item/clothing/under/dress/sari/green = 50, - /obj/item/clothing/under/dress/qipao = 50, - /obj/item/clothing/under/dress/qipao/red = 50, - /obj/item/clothing/under/dress/qipao/white = 50, + /obj/item/clothing/under/qipao = 50, + /obj/item/clothing/under/qipao/red = 50, + /obj/item/clothing/under/qipao/white = 50, /obj/item/clothing/under/shorts/red = 50, /obj/item/clothing/under/shorts/green = 50, /obj/item/clothing/under/shorts/blue = 50, @@ -1718,8 +1724,11 @@ /obj/item/weapon/storage/belt/fannypack/white = 5, /obj/item/clothing/accessory/fullcape = 5, /obj/item/clothing/accessory/halfcape = 5, - /obj/item/clothing/accessory/hawaii = 5, - /obj/item/clothing/accessory/hawaii/random = 5, + /obj/item/clothing/accessory/hawaiian = 5, + /obj/item/clothing/accessory/hawaiian/blue = 5, + /obj/item/clothing/accessory/hawaiian/pink = 5, + /obj/item/clothing/accessory/hawaiian/red = 5, + /obj/item/clothing/accessory/hawaiian/yellow = 5, /obj/item/clothing/accessory/locket = 5, /obj/item/weapon/storage/backpack/purse = 1, /obj/item/clothing/accessory/sash = 5, @@ -1828,8 +1837,11 @@ /obj/item/weapon/storage/belt/fannypack/white = 50, /obj/item/clothing/accessory/fullcape = 50, /obj/item/clothing/accessory/halfcape = 50, - /obj/item/clothing/accessory/hawaii = 50, - /obj/item/clothing/accessory/hawaii/random = 50, + /obj/item/clothing/accessory/hawaiian = 5, + /obj/item/clothing/accessory/hawaiian/blue = 5, + /obj/item/clothing/accessory/hawaiian/pink = 5, + /obj/item/clothing/accessory/hawaiian/red = 5, + /obj/item/clothing/accessory/hawaiian/yellow = 5, /obj/item/clothing/accessory/locket = 50, /obj/item/weapon/storage/backpack/purse = 50, /obj/item/clothing/accessory/sash = 50, @@ -2024,9 +2036,9 @@ /obj/item/clothing/under/dress/sailordress = 5, /obj/item/clothing/under/dress/sari = 5, /obj/item/clothing/under/dress/sari/green = 5, - /obj/item/clothing/under/dress/qipao = 5, - /obj/item/clothing/under/dress/qipao/red = 5, - /obj/item/clothing/under/dress/qipao/white = 5, + /obj/item/clothing/under/qipao = 5, + /obj/item/clothing/under/qipao/red = 5, + /obj/item/clothing/under/qipao/white = 5, /obj/item/clothing/under/shorts/red = 5, /obj/item/clothing/under/shorts/green = 5, /obj/item/clothing/under/shorts/blue = 5, @@ -2195,9 +2207,9 @@ /obj/item/clothing/under/dress/sailordress = 50, /obj/item/clothing/under/dress/sari = 50, /obj/item/clothing/under/dress/sari/green = 50, - /obj/item/clothing/under/dress/qipao = 50, - /obj/item/clothing/under/dress/qipao/red = 50, - /obj/item/clothing/under/dress/qipao/white = 50, + /obj/item/clothing/under/qipao = 50, + /obj/item/clothing/under/qipao/red = 50, + /obj/item/clothing/under/qipao/white = 50, /obj/item/clothing/under/shorts/red = 50, /obj/item/clothing/under/shorts/green = 50, /obj/item/clothing/under/shorts/blue = 50, @@ -2848,8 +2860,11 @@ /obj/item/weapon/storage/belt/fannypack/white = 5, /obj/item/clothing/accessory/fullcape = 5, /obj/item/clothing/accessory/halfcape = 5, - /obj/item/clothing/accessory/hawaii = 5, - /obj/item/clothing/accessory/hawaii/random = 5, + /obj/item/clothing/accessory/hawaiian = 5, + /obj/item/clothing/accessory/hawaiian/blue = 5, + /obj/item/clothing/accessory/hawaiian/pink = 5, + /obj/item/clothing/accessory/hawaiian/red = 5, + /obj/item/clothing/accessory/hawaiian/yellow = 5, /obj/item/clothing/accessory/locket = 5, /obj/item/weapon/storage/backpack/purse = 1, /obj/item/clothing/accessory/sash = 5, @@ -3044,9 +3059,9 @@ /obj/item/clothing/under/dress/sailordress = 5, /obj/item/clothing/under/dress/sari = 5, /obj/item/clothing/under/dress/sari/green = 5, - /obj/item/clothing/under/dress/qipao = 5, - /obj/item/clothing/under/dress/qipao/red = 5, - /obj/item/clothing/under/dress/qipao/white = 5, + /obj/item/clothing/under/qipao = 5, + /obj/item/clothing/under/qipao/red = 5, + /obj/item/clothing/under/qipao/white = 5, /obj/item/clothing/under/shorts/red = 5, /obj/item/clothing/under/shorts/green = 5, /obj/item/clothing/under/shorts/blue = 5, diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index ae089d26a2..9a949ad5d9 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -58,7 +58,7 @@ return else if(istype(I, /obj/item/stack/cable_coil) && !strung) var/obj/item/stack/cable_coil/C = I - if(C.amount < 5) + if(C.get_amount() < 5) to_chat(user, "You do not have enough length in \the [C] to string this!") return if(do_after(user, rand(10 SECONDS, 20 SECONDS))) diff --git a/code/modules/food/kitchen/smartfridge/drying_rack.dm b/code/modules/food/kitchen/smartfridge/drying_rack.dm index c0ceea5289..346b59f2e4 100644 --- a/code/modules/food/kitchen/smartfridge/drying_rack.dm +++ b/code/modules/food/kitchen/smartfridge/drying_rack.dm @@ -60,7 +60,7 @@ for(var/obj/item/stack/wetleather/WL in I.instances) if(!WL.wetness) - if(WL.amount) + if(WL.get_amount()) WL.forceMove(get_turf(src)) WL.dry() I.instances -= WL diff --git a/code/modules/food/kitchen/smartfridge/engineering.dm b/code/modules/food/kitchen/smartfridge/engineering.dm index 94a40b9dc3..2798854537 100644 --- a/code/modules/food/kitchen/smartfridge/engineering.dm +++ b/code/modules/food/kitchen/smartfridge/engineering.dm @@ -20,7 +20,7 @@ while(count > 0) var/obj/item/stack/S = I.get_product(get_turf(src), min(count, amount)) - count -= S.amount + count -= S.get_amount() SStgui.update_uis(src) /obj/machinery/smartfridge/sheets/find_record(var/obj/item/O) diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 95260876f4..c909c29fc5 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -339,7 +339,7 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/caramelapple /datum/recipe/twobread - reagents = list("wine" = 5) + reagents = list("redwine" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/slice/bread, /obj/item/weapon/reagent_containers/food/snacks/slice/bread, @@ -796,7 +796,7 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/chilicheesefries /datum/recipe/risotto - reagents = list("wine" = 5, "rice" = 10, "spacespice" = 1) + reagents = list("redwine" = 5, "rice" = 10, "spacespice" = 1) fruit = list("mushroom" = 1) reagent_mix = RECIPE_REAGENT_REPLACE //Get that rice and wine outta here result = /obj/item/weapon/reagent_containers/food/snacks/risotto diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index bf83e28bf7..f1bdc5bb50 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -201,12 +201,12 @@ var/obj/item/stack/material/wood/NG = new (user.loc) if(flesh_colour) NG.color = flesh_colour for (var/obj/item/stack/material/wood/G in user.loc) - if(G==NG) + if(G == NG) continue - if(G.amount>=G.max_amount) + if(G.get_amount() >= G.max_amount) continue G.attackby(NG, user) - to_chat(user, "You add the newly-formed wood to the stack. It now contains [NG.amount] planks.") + to_chat(user, "You add the newly-formed wood to the stack. It now contains [NG.get_amount()] planks.") qdel(src) return else if(!isnull(seed.chems["potato"])) @@ -280,12 +280,12 @@ var/obj/item/stack/tile/grass/G = new (user.loc) if(flesh_colour) G.color = flesh_colour for (var/obj/item/stack/tile/grass/NG in user.loc) - if(G==NG) + if(G == NG) continue - if(NG.amount>=NG.max_amount) + if(NG.get_amount() >= NG.max_amount) continue NG.attackby(G, user) - to_chat(user, "You add the newly-formed grass to the stack. It now contains [G.amount] tiles.") + to_chat(user, "You add the newly-formed grass to the stack. It now contains [G.get_amount()] tiles.") qdel(src) return diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm index 3ff2e48174..e1d1fafd11 100644 --- a/code/modules/hydroponics/seed_storage.dm +++ b/code/modules/hydroponics/seed_storage.dm @@ -43,41 +43,46 @@ ..() wires = new(src) if(!contraband_seeds.len) - contraband_seeds = pick(list( - list( - /obj/item/seeds/ambrosiavulgarisseed = 3, - /obj/item/seeds/greengrapeseed = 3, - /obj/item/seeds/reishimycelium = 2, - /obj/item/seeds/bloodtomatoseed = 1 - ), - list( - /obj/item/seeds/ambrosiavulgarisseed = 3, - /obj/item/seeds/plastiseed = 3, - /obj/item/seeds/kudzuseed = 2, - /obj/item/seeds/rose/blood = 1 - ), - list( - /obj/item/seeds/ambrosiavulgarisseed = 3, - /obj/item/seeds/amanitamycelium = 3, - /obj/item/seeds/libertymycelium = 2, - /obj/item/seeds/glowshroom = 1 - ), - list( - /obj/item/seeds/ambrosiavulgarisseed = 3, - /obj/item/seeds/glowberryseed = 3, - /obj/item/seeds/icepepperseed = 2, - /obj/item/seeds/bluetomatoseed = 1 - ), - list( - /obj/item/seeds/durian = 2, - /obj/item/seeds/ambrosiadeusseed = 1, - /obj/item/seeds/killertomatoseed = 1 - ), - list( - /obj/item/seeds/ambrosiavulgarisseed = 3, - /obj/item/seeds/random = 6 - ) - )) + contraband_seeds = pick( /// Some form of ambrosia in all lists. + prob(30);list( /// General produce + /obj/item/seeds/ambrosiavulgarisseed = 3, + /obj/item/seeds/greengrapeseed = 3, + /obj/item/seeds/icepepperseed = 2, + /obj/item/seeds/kudzuseed = 1 + ), + prob(30);list( ///Mushroom batch + /obj/item/seeds/ambrosiavulgarisseed = 1, + /obj/item/seeds/glowberryseed = 2, + /obj/item/seeds/libertymycelium = 1, + /obj/item/seeds/reishimycelium = 2, + /obj/item/seeds/sporemycelium = 1 + ), + prob(15);list( /// Survivalist + /obj/item/seeds/ambrosiadeusseed = 2, + /obj/item/seeds/redtowermycelium = 2, + /obj/item/seeds/vale = 2, + /obj/item/seeds/siflettuce = 2 + ), + prob(20);list( /// Cold plants + /obj/item/seeds/ambrosiavulgarisseed = 2, + /obj/item/seeds/thaadra = 2, + /obj/item/seeds/icepepperseed = 2, + /obj/item/seeds/siflettuce = 1 + ), + prob(10);list( ///Poison party + /obj/item/seeds/ambrosiavulgarisseed = 3, + /obj/item/seeds/surik = 1, + /obj/item/seeds/telriis = 1, + /obj/item/seeds/nettleseed = 2, + /obj/item/seeds/poisonberryseed = 1 + ), + prob(5);list( /// Extra poison party! + /obj/item/seeds/ambrosiainfernusseed = 1, + /obj/item/seeds/amauri = 1, + /obj/item/seeds/surik = 1, + /obj/item/seeds/deathberryseed = 1 /// Very ow. + ) + ) return /obj/machinery/seed_storage/process() diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 9970f1dd5f..2089e87afb 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -40,7 +40,7 @@ if(debug) to_chat(user, span("warning", "\The [src] does not need any material.")) return - var/num = min((max_metal - metal) / metal_per_sheet, stack.amount) + var/num = min((max_metal - metal) / metal_per_sheet, stack.get_amount()) if(num < 1) to_chat(user, span("warning", "\The [src] is too full to add more metal.")) return diff --git a/code/modules/lore_codex/news_data/main.dm b/code/modules/lore_codex/news_data/main.dm index 3a89f5cf6e..16270733cf 100644 --- a/code/modules/lore_codex/news_data/main.dm +++ b/code/modules/lore_codex/news_data/main.dm @@ -112,6 +112,12 @@ /datum/lore/codex/page/about_news, ) + var/newsindex + +/datum/lore/codex/category/main_news/New() + ..() + newsindex = LAZYLEN(children) + /datum/lore/codex/page/about_news name = "About the Publisher" data = "The Daedalus Pocket Newscaster is produced and maintained by Occulum Broadcast, the foremost authority on media distribution \ diff --git a/code/modules/materials/fifty_spawner.dm b/code/modules/materials/fifty_spawner.dm index e3ba667703..9a7786ae21 100644 --- a/code/modules/materials/fifty_spawner.dm +++ b/code/modules/materials/fifty_spawner.dm @@ -10,8 +10,7 @@ ..() var/turf/T = get_turf(src) var/obj/structure/closet/C = locate() in T - var/obj/item/stack/M = new type_to_spawn(C || T) - M.amount = M.max_amount //some stuff spawns with 60, we're still calling it fifty + var/obj/item/stack/M = new type_to_spawn(C || T, -1) M.update_icon() // Some stacks have different sprites depending on how full they are. return INITIALIZE_HINT_QDEL //Bye! diff --git a/code/modules/materials/materials/_materials.dm b/code/modules/materials/materials/_materials.dm index 07b1af73ff..f059aa28c6 100644 --- a/code/modules/materials/materials/_materials.dm +++ b/code/modules/materials/materials/_materials.dm @@ -312,9 +312,9 @@ var/list/name_to_material place_sheet(target) // Debris product. Used ALL THE TIME. -/datum/material/proc/place_sheet(var/turf/target) +/datum/material/proc/place_sheet(var/turf/target, amount) if(stack_type) - return new stack_type(target) + return new stack_type(target, amount) // As above. /datum/material/proc/place_shard(var/turf/target) diff --git a/code/modules/materials/sheets/organic/tanning/hide.dm b/code/modules/materials/sheets/organic/tanning/hide.dm index e9617ba921..b6b7778132 100644 --- a/code/modules/materials/sheets/organic/tanning/hide.dm +++ b/code/modules/materials/sheets/organic/tanning/hide.dm @@ -24,14 +24,14 @@ //Try locating an exisitng stack on the tile and add to there if possible var/obj/item/stack/hairlesshide/H = null for(var/obj/item/stack/hairlesshide/HS in user.loc) // Could be scraping something inside a locker, hence the .loc, not get_turf - if(HS.amount < HS.max_amount) + if(HS.get_amount() < HS.max_amount) H = HS break // Either we found a valid stack, in which case increment amount, // Or we need to make a new stack if(istype(H)) - H.amount++ + H.add(1) else H = new /obj/item/stack/hairlesshide(user.loc) diff --git a/code/modules/materials/sheets/organic/tanning/hide_hairless.dm b/code/modules/materials/sheets/organic/tanning/hide_hairless.dm index 72b235e415..f504e24a9f 100644 --- a/code/modules/materials/sheets/organic/tanning/hide_hairless.dm +++ b/code/modules/materials/sheets/organic/tanning/hide_hairless.dm @@ -21,14 +21,14 @@ for(var/i in 1 to wateramount) var/obj/item/stack/wetleather/H = null for(var/obj/item/stack/wetleather/HS in get_turf(src)) // Doesn't have a user, can't just use their loc - if(HS.amount < HS.max_amount) + if(HS.get_amount() < HS.max_amount) H = HS break // Either we found a valid stack, in which case increment amount, // Or we need to make a new stack if(istype(H)) - H.amount++ + H.add(1) else H = new /obj/item/stack/wetleather(get_turf(src)) diff --git a/code/modules/materials/sheets/organic/tanning/leather_wet.dm b/code/modules/materials/sheets/organic/tanning/leather_wet.dm index 64f672512c..6d1df6fd75 100644 --- a/code/modules/materials/sheets/organic/tanning/leather_wet.dm +++ b/code/modules/materials/sheets/organic/tanning/leather_wet.dm @@ -38,9 +38,8 @@ dry() /obj/item/stack/wetleather/proc/dry() - var/obj/item/stack/material/leather/L = new(src.loc) - L.amount = amount - use(amount) + var/obj/item/stack/material/leather/L = new(src.loc, get_amount()) + use(get_amount()) return L /obj/item/stack/wetleather/transfer_to(obj/item/stack/S, var/tamount=null, var/type_verified) diff --git a/code/modules/materials/sheets/organic/tanning/tanning_rack.dm b/code/modules/materials/sheets/organic/tanning/tanning_rack.dm index 885b65dd8f..fdd0fce35e 100644 --- a/code/modules/materials/sheets/organic/tanning/tanning_rack.dm +++ b/code/modules/materials/sheets/organic/tanning/tanning_rack.dm @@ -41,7 +41,7 @@ drying = A else // Drying something, add if possible var/obj/item/stack/wetleather/W = A - W.transfer_to(drying, W.amount, TRUE) + W.transfer_to(drying, W.get_amount(), TRUE) update_icon() return TRUE return ..() @@ -50,9 +50,8 @@ if(drying) var/obj/item/stack/S = drying if(!drying.wetness) // If it's dry, make a stack of dry leather and prepare to put that in their hands - var/obj/item/stack/material/leather/L = new(src) - L.amount = drying.amount - drying.use(drying.amount) + var/obj/item/stack/material/leather/L = new(src, drying.get_amount()) + drying.set_amount(0) S = L if(ishuman(user)) diff --git a/code/modules/materials/sheets/organic/wood.dm b/code/modules/materials/sheets/organic/wood.dm index 6699136606..bc437b30fd 100644 --- a/code/modules/materials/sheets/organic/wood.dm +++ b/code/modules/materials/sheets/organic/wood.dm @@ -47,10 +47,9 @@ existing_wood = M break - var/obj/item/stack/material/wood/new_wood = new plank_type(user.loc) - new_wood.amount = 2 + var/obj/item/stack/material/wood/new_wood = new plank_type(user.loc, 2) if(existing_wood && new_wood.transfer_to(existing_wood)) - to_chat(user, "You add the newly-formed wood to the stack. It now contains [existing_wood.amount] planks.") + to_chat(user, "You add the newly-formed wood to the stack. It now contains [existing_wood.get_amount()] planks.") else return ..() diff --git a/code/modules/mining/kinetic_crusher.dm b/code/modules/mining/kinetic_crusher.dm index 498f0b16bb..f4712d31b9 100644 --- a/code/modules/mining/kinetic_crusher.dm +++ b/code/modules/mining/kinetic_crusher.dm @@ -237,6 +237,7 @@ /obj/item/weapon/kinetic_crusher/machete + // general purpose. cleaves though name = "proto-kinetic machete" desc = "A scaled down version of a proto-kinetic crusher, used by people who don't want to lug around an axe-hammer." icon_state = "glaive-machete" @@ -247,14 +248,13 @@ item_state = "c-machete" w_class = ITEMSIZE_SMALL attack_verb = list("cleaved", "chopped", "pulped", "stabbed", "skewered") - force = 24 can_cleave = TRUE requires_wield = FALSE // yeah yeah buff but polaris mobs are meatwalls. - backstab_bonus = 40 - detonation_damage = 26 - // meme option - thrown_bonus = 20 + force = 24 + detonation_damage = 36 // 60 + backstab_bonus = 40 // 100 + thrown_bonus = 20 // 120 update_item_state = FALSE @@ -269,11 +269,11 @@ attack_verb = list("bashed", "kicked", "punched", "struck", "axe kicked", "uppercut", "cross-punched", "jabbed", "hammerfisted", "roundhouse kicked") integ_light_icon = FALSE w_class = ITEMSIZE_HUGE - force = 30 can_cleave = FALSE requires_wield = TRUE - backstab_bonus = 55 - detonation_damage = 35 + force = 28 + detonation_damage = 37 // 75 + backstab_bonus = 55 // 130 var/obj/item/offhand/crushergauntlets/offhand /obj/item/weapon/kinetic_crusher/machete/gauntlets/equipped() @@ -302,21 +302,29 @@ var/mob/living/M = loc if(istype(M) && forced == 0) if(M.can_wield_item(src) && src.is_held_twohanded(M)) - name = initial(name) - wielded = TRUE - to_chat(M, "You ready [src].") - var/obj/item/offhand/crushergauntlets/O = new(M) - O.name = "[name] - readied" - O.desc = "As much as you'd like to punch things with one hand, [src] is far too unwieldy for that." - O.linked = src - M.put_in_inactive_hand(O) - offhand = O + wield(M) + else + unwield(M) else - name = "[initial(name)] (unreadied)" - wielded = FALSE - to_chat(M, "You unready [src].") - if(offhand) - QDEL_NULL(offhand) + unwield(M) + +/obj/item/weapon/kinetic_crusher/machete/gauntlets/proc/wield(var/mob/living/M) + name = initial(name) + wielded = TRUE + to_chat(M, "You ready [src].") + var/obj/item/offhand/crushergauntlets/O = new(M) + O.name = "[name] - readied" + O.desc = "As much as you'd like to punch things with one hand, [src] is far too unwieldy for that." + O.linked = src + M.put_in_inactive_hand(O) + offhand = O + +/obj/item/weapon/kinetic_crusher/machete/gauntlets/proc/unwield(var/mob/living/M) + to_chat(M, "You unready [src].") + name = "[initial(name)] (unreadied)" + wielded = FALSE + if(offhand) + QDEL_NULL(offhand) /obj/item/offhand icon = 'icons/obj/weapons.dmi' @@ -324,6 +332,7 @@ name = "offhand that shouldn't exist doo dee doo" w_class = ITEMSIZE_NO_CONTAINER // var/linked - redefine this wherever + // man i really should try porting the twohand component this is hacky and Sucks /obj/item/offhand/crushergauntlets var/obj/item/weapon/kinetic_crusher/machete/gauntlets/linked @@ -333,7 +342,7 @@ linked.ready_toggle(TRUE) /obj/item/weapon/kinetic_crusher/machete/gauntlets/rig - name = "mounted proto-kinetic gear" + name = "\improper mounted proto-kinetic gear" var/obj/item/rig_module/gauntlets/storing_module /obj/item/weapon/kinetic_crusher/machete/gauntlets/rig/dropped(mob/user) @@ -351,6 +360,7 @@ else QDEL_NULL(src) +// gimmicky backup for throwing /obj/item/weapon/kinetic_crusher/machete/dagger name = "proto-kinetic dagger" desc = "A scaled down version of a proto-kinetic machete, usually used in a last ditch scenario." @@ -361,13 +371,14 @@ ) item_state = "c-knife" w_class = ITEMSIZE_SMALL - force = 15 requires_wield = FALSE charge_overlay = FALSE - backstab_bonus = 35 - detonation_damage = 25 - // woohoo - thrown_bonus = 35 + charge_time = 10 // lowered charge in return for lowered damage + force = 18 + detonation_damage = 27 // 45 + backstab_bonus = 40 // 85 + // gimmick mode + thrown_bonus = 50 // 135 but you drop your knife because you threw it //destablizing force @@ -387,15 +398,18 @@ hammer_synced = null return ..() +/obj/item/projectile/destabilizer/on_impact(var/atom/A) + if(ismineralturf(A)) + var/turf/simulated/mineral/M = A + new /obj/effect/temp_visual/kinetic_blast(M) + M.GetDrilled(firer) + . = ..() + /obj/item/projectile/destabilizer/on_hit(atom/target, blocked = FALSE) if(isliving(target)) var/mob/living/L = target - L.add_modifier(/datum/modifier/crusher_mark, 30 SECONDS, firer, TRUE) - var/target_turf = get_turf(target) - if(ismineralturf(target_turf)) - var/turf/simulated/mineral/M = target_turf - new /obj/effect/temp_visual/kinetic_blast(M) - M.GetDrilled(firer) + if(hammer_synced.can_mark(L)) + L.add_modifier(/datum/modifier/crusher_mark, 30 SECONDS, firer, TRUE) ..() /* @@ -404,5 +418,6 @@ there would be any if we had some but alas - hatterhat + */ diff --git a/code/modules/mining/machinery/machine_stacking.dm b/code/modules/mining/machinery/machine_stacking.dm index b0b2a7890e..6567625b54 100644 --- a/code/modules/mining/machinery/machine_stacking.dm +++ b/code/modules/mining/machinery/machine_stacking.dm @@ -62,10 +62,8 @@ var/stack = params["stack"] if(machine.stack_storage[stack] > 0) var/stacktype = machine.stack_paths[stack] - var/obj/item/stack/material/S = new stacktype(get_turf(machine.output)) - S.amount = machine.stack_storage[stack] + new stacktype(get_turf(machine.output), machine.stack_storage[stack]) machine.stack_storage[stack] = 0 - S.update_icon() . = TRUE add_fingerprint(usr) @@ -125,7 +123,7 @@ var/obj/item/stack/material/S = O var/matname = S.material.name if(!isnull(stack_storage[matname])) - stack_storage[matname] += S.amount + stack_storage[matname] += S.get_amount() qdel(S) else O.loc = output.loc @@ -136,10 +134,8 @@ for(var/sheet in stack_storage) if(stack_storage[sheet] >= stack_amt) var/stacktype = stack_paths[sheet] - var/obj/item/stack/material/S = new stacktype (get_turf(output)) - S.amount = stack_amt + new stacktype (get_turf(output), stack_amt) stack_storage[sheet] -= stack_amt - S.update_icon() if(console) console.updateUsrDialog() diff --git a/code/modules/mob/_modifiers/crusher_mark.dm b/code/modules/mob/_modifiers/crusher_mark.dm index 9af2980624..96ce129aad 100644 --- a/code/modules/mob/_modifiers/crusher_mark.dm +++ b/code/modules/mob/_modifiers/crusher_mark.dm @@ -2,34 +2,29 @@ name = "destabilized" desc = "You've been struck by a destabilizing bolt. By all accounts, this is probably a bad thing." stacks = MODIFIER_STACK_EXTEND - on_created_text = "You feel destabilized." - on_expired_text = "You feel stable again." + on_created_text = "You feel physically unstable." + on_expired_text = "You feel physically stable again." var/mutable_appearance/marked_underlay var/obj/item/weapon/kinetic_crusher/hammer_synced -/* -/datum/modifier/New(var/new_holder, var/new_origin) - holder = new_holder - if(new_origin) - origin = weakref(new_origin) - else // We assume the holder caused the modifier if not told otherwise. - origin = weakref(holder) - ..() -/mob/living/proc/add_modifier(var/modifier_type, var/expire_at = null, var/mob/living/origin = null, var/suppress_failure = FALSE) -*/ - /datum/modifier/crusher_mark/New(var/new_holder, var/new_origin) . = ..() if(isliving(new_origin)) var/mob/living/origin = new_origin - var/obj/item/weapon/kinetic_crusher/to_sync = locate(/obj/item/weapon/kinetic_crusher) in origin - if(to_sync) - hammer_synced = to_sync + var/obj/item/weapon/kinetic_crusher/to_sync + if(istype(origin.get_active_hand(), /obj/item/weapon/kinetic_crusher)) + to_sync = origin.get_active_hand() + else if (istype(origin.get_inactive_hand(), /obj/item/weapon/kinetic_crusher)) + to_sync = origin.get_inactive_hand() + if(to_sync) // did we find it? + hammer_synced = to_sync // go ahead if(hammer_synced? hammer_synced.can_mark(holder) : TRUE) marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2") marked_underlay.pixel_x = -holder.pixel_x marked_underlay.pixel_y = -holder.pixel_y holder.underlays += marked_underlay + else + Destroy() /datum/modifier/crusher_mark/Destroy() hammer_synced = null diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 226f1cf06e..4d81c2b4f9 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -638,6 +638,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, "Spawning as a mouse is currently disabled.") return + //VOREStation Add Start + if(jobban_isbanned(src, "GhostRoles")) + to_chat(src, "You cannot become a mouse because you are banned from playing ghost roles.") + return + //VOREStation Add End + if(!MayRespawn(1)) return diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index f007b5c8dc..445bd3895e 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -75,7 +75,7 @@ var/list/slot_equipment_priority = list( \ /mob/proc/equip_voidsuit_to_slot_or_del_with_refit(obj/item/clothing/suit/space/void/W as obj, slot, species = SPECIES_HUMAN) W.refit_for_species(species) return equip_to_slot_if_possible(W, slot, 1, 1, 0) - + /mob/proc/equip_voidhelm_to_slot_or_del_with_refit(obj/item/clothing/head/helmet/space/void/W as obj, slot, species = SPECIES_HUMAN) W.refit_for_species(species) return equip_to_slot_if_possible(W, slot, 1, 1, 0) diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index f525230124..9e869e0d81 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -298,8 +298,7 @@ new /obj/item/device/assembly/prox_sensor(Tsec) if(prob(50)) new /obj/item/robot_parts/l_arm(Tsec) - var/obj/item/stack/tile/floor/T = new /obj/item/stack/tile/floor(Tsec) - T.amount = amount + new /obj/item/stack/tile/floor(Tsec, amount) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm index 9c9ea41cb6..c6b353281b 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm @@ -215,8 +215,8 @@ to_chat(src,"You can't process [substance]!") return //Only a few things matter, the rest are best not cluttering the lists. - var/howmuch = input(src,"How much do you want to store? (0-[matstack.amount])","Select amount") as null|num - if(!howmuch || matstack != get_active_hand() || howmuch > matstack.amount) + var/howmuch = input(src,"How much do you want to store? (0-[matstack.get_amount()])","Select amount") as null|num + if(!howmuch || matstack != get_active_hand() || howmuch > matstack.get_amount()) return //Quietly fail var/actually_added = refactory.add_stored_material(substance,howmuch*matstack.perunit) diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm index a9b0013086..75b2b1b6e5 100755 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm @@ -131,8 +131,7 @@ H.synth_color = TRUE /datum/species/protean/equip_survival_gear(var/mob/living/carbon/human/H) - var/obj/item/stack/material/steel/metal_stack = new() - metal_stack.amount = 3 + var/obj/item/stack/material/steel/metal_stack = new(null, 3) var/obj/item/clothing/accessory/permit/nanotech/permit = new() permit.set_name(H.real_name) diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index d1b1e6ca0f..df685326d1 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -249,13 +249,13 @@ cold_discomfort_level = 215 has_organ = list( //No appendix. - O_HEART = /obj/item/organ/internal/heart, + O_HEART = /obj/item/organ/internal/heart/tajaran, O_LUNGS = /obj/item/organ/internal/lungs, O_VOICE = /obj/item/organ/internal/voicebox, O_LIVER = /obj/item/organ/internal/liver, O_KIDNEYS = /obj/item/organ/internal/kidneys, O_BRAIN = /obj/item/organ/internal/brain, - O_EYES = /obj/item/organ/internal/eyes, + O_EYES = /obj/item/organ/internal/eyes/tajaran, O_STOMACH = /obj/item/organ/internal/stomach, O_INTESTINE = /obj/item/organ/internal/intestine ) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 5a10d40523..483c0919e3 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -483,6 +483,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() var/icon/ears_s = get_ears_overlay() var/image/em_block_ears if(ears_s) + if(ears_s.Height() > face_standing.Height()) // Tol ears + face_standing.Crop(face_standing.Width(), ears_s.Height()) face_standing.Blend(ears_s, ICON_OVERLAY) if(ear_style?.em_block) em_block_ears = em_block_image_generic(image(ears_s)) diff --git a/code/modules/mob/living/inventory.dm b/code/modules/mob/living/inventory.dm index c2ea298683..d9af7a3689 100644 --- a/code/modules/mob/living/inventory.dm +++ b/code/modules/mob/living/inventory.dm @@ -307,7 +307,7 @@ if(istype(H.w_uniform, /obj/item/clothing/under)) suit = H.w_uniform - + var/list/slots = list() for(var/entry in H.species.hud.gear) var/list/slot_ref = H.species.hud.gear[entry] @@ -322,7 +322,7 @@ ))) data["slots"] = slots - + var/list/specialSlots = list() if(H.species.hud.has_hands) specialSlots.Add(list(list( diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm index 67954d4d9a..1340beb8d5 100644 --- a/code/modules/mob/living/simple_mob/defense.dm +++ b/code/modules/mob/living/simple_mob/defense.dm @@ -59,11 +59,8 @@ // This could be done better. var/obj/item/stack/medical/MED = O if(health < getMaxHealth()) - if(MED.amount >= 1) + if(MED.use(1)) adjustBruteLoss(-MED.heal_brute) - MED.amount -= 1 - if(MED.amount <= 0) - qdel(MED) visible_message("\The [user] applies the [MED] on [src].") else var/datum/gender/T = gender_datums[src.get_visible_gender()] diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm index 59ab8e7585..d0d1cf8bed 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/teppi.dm @@ -757,8 +757,7 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have? if(do_after(user, sheartime, exclusive = TASK_USER_EXCLUSIVE, target = src)) user.visible_message("\The [user] shears \the [src] with \the [tool].","You shear \the [src] with \the [tool].") amount_grown = rand(0,250) - var/obj/item/stack/material/fur/F = new(get_turf(user)) - F.amount = rand(10,15) + var/obj/item/stack/material/fur/F = new(get_turf(user), rand(10,15)) F.color = marking_color teppi_wool = FALSE update_icon() diff --git a/code/modules/mob/new_player/login.dm b/code/modules/mob/new_player/login.dm index a4a96ea4d3..f81e4d2fcb 100644 --- a/code/modules/mob/new_player/login.dm +++ b/code/modules/mob/new_player/login.dm @@ -49,3 +49,41 @@ var/obj/effect/lobby_image = new /obj/effect/lobby_image if(client) handle_privacy_poll() client.playtitlemusic() + version_warnings() + +/mob/new_player/proc/version_warnings() + var/problems // string to store message to present to player as a problem + + // TODO: Move this to a config file at some point maybe? What would the structure of that look like? + switch(client.byond_build) + // http://www.byond.com/forum/post/2711510 + // http://www.byond.com/forum/post/2711506 + // http://www.byond.com/forum/post/2711626 + // http://www.byond.com/forum/post/2711748 + if(1562 to 1563) + problems = "frequent known crashes related to animations" + + // Don't have a thread, just a lot of player reports. + if(1564) + if(world.byond_build == 1564) + problems = "random network disconnects on this version of BYOND server" + else if(world.byond_build < 1564) + problems = "crashes related to animations on this version of BYOND server" + else + problems = "potential network disconnects. If you experience some, try another version" + + if(problems) + // To get attention + var/message = "Your BYOND client version ([client.byond_version].[client.byond_build]) has known issues: [problems]. See the chat window for other version options." + tgui_alert_async(src, message, "BYOND Client Version Warning") + + // So we can be more wordy and give links. + to_chat(src, "Your client version has known issues. Please consider using a different version: http://www.byond.com/download/build/.") + var/chat_message = "" + if(config.suggested_byond_version) + chat_message += "We suggest using version [config.suggested_byond_version]." + if(config.suggested_byond_build) + chat_message += "[config.suggested_byond_build]." + chat_message += " If you find this version doesn't work for you, let us know." + to_chat(src, chat_message) + to_chat(src, "Tip: You can always use the '.zip' versions of BYOND and keep multiple versions in folders wherever you want, rather than uninstalling/reinstalling. Just make sure BYOND is *really* closed (check your system tray for the icon) before starting a different version.") diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 43f2cef8ce..0dcbf617e5 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -76,12 +76,20 @@ output += "

[href(src, list("give_feedback" = 1), "Give Feedback")]

" if(GLOB.news_data.station_newspaper) - output += "Show [using_map.station_name] News" + if(client.prefs.lastlorenews == GLOB.news_data.newsindex) + output += "

Show [using_map.station_name] News

" + else + output += "

Show [using_map.station_name] News (NEW!)

" output += "" - if(GLOB.news_data.station_newspaper && !client.seen_news) + if (client.prefs.lastlorenews == GLOB.news_data.newsindex) + client.seen_news = 1 + + if(GLOB.news_data.station_newspaper && !client.seen_news && client.is_preference_enabled(/datum/client_preference/show_lore_news)) show_latest_news(GLOB.news_data.station_newspaper) + client.prefs.lastlorenews = GLOB.news_data.newsindex + SScharacter_setup.queue_preferences_save(client.prefs) panel = new(src, "Welcome","Welcome", 210, 300, src) // VOREStation Edit panel.set_window_options("can_close=0") diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 8984efe214..1e48f3d7b9 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1662,159 +1662,223 @@ shaved /////////////////////////////////// */ -/datum/sprite_accessory/hair/una_spines_long +//Unathi Head-Bits + +/datum/sprite_accessory/hair/una name = "Long Unathi Spines" icon_state = "soghun_longspines" species_allowed = list(SPECIES_UNATHI) -/datum/sprite_accessory/hair/una_spines_short +/datum/sprite_accessory/hair/una/spines_short name = "Short Unathi Spines" - icon_state = "soghun_shortspines" - species_allowed = list(SPECIES_UNATHI) -/datum/sprite_accessory/hair/una_frills_long +/datum/sprite_accessory/hair/una/frills_long name = "Long Unathi Frills" icon_state = "soghun_longfrills" - species_allowed = list(SPECIES_UNATHI) -/datum/sprite_accessory/hair/una_frills_short +/datum/sprite_accessory/hair/una/frills_short name = "Short Unathi Frills" icon_state = "soghun_shortfrills" - species_allowed = list(SPECIES_UNATHI) -/datum/sprite_accessory/hair/una_horns +/datum/sprite_accessory/hair/una/horns name = "Unathi Horns" icon_state = "soghun_horns" - species_allowed = list(SPECIES_UNATHI) -/datum/sprite_accessory/hair/una_bighorns +/datum/sprite_accessory/hair/una/bighorns name = "Unathi Big Horns" icon_state = "unathi_bighorn" - species_allowed = list(SPECIES_UNATHI) -/datum/sprite_accessory/hair/una_smallhorns +/datum/sprite_accessory/hair/una/smallhorns name = "Unathi Small Horns" icon_state = "unathi_smallhorn" - species_allowed = list(SPECIES_UNATHI) -/datum/sprite_accessory/hair/una_ramhorns +/datum/sprite_accessory/hair/una/ramhorns name = "Unathi Ram Horns" icon_state = "unathi_ramhorn" - species_allowed = list(SPECIES_UNATHI) -/datum/sprite_accessory/hair/una_sidefrills +/datum/sprite_accessory/hair/una/sidefrills name = "Unathi Side Frills" icon_state = "unathi_sidefrills" - species_allowed = list(SPECIES_UNATHI) //Skrell 'hairstyles' -/datum/sprite_accessory/hair/skr_tentacle_veryshort - name = "Skrell Short Tentacles" - icon_state = "skrell_hair_short" - species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) - gender = MALE -/datum/sprite_accessory/hair/skr_tentacle_short +/datum/sprite_accessory/hair/skr name = "Skrell Average Tentacles" icon_state = "skrell_hair_average" - species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) -/datum/sprite_accessory/hair/skr_tentacle_average +/datum/sprite_accessory/hair/skr/tentacle_veryshort + name = "Skrell Short Tentacles" + icon_state = "skrell_hair_short" + gender = MALE + +/datum/sprite_accessory/hair/skr/tentacle_average name = "Skrell Long Tentacles" icon_state = "skrell_hair_long" - species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) -/datum/sprite_accessory/hair/skr_tentacle_verylong +/datum/sprite_accessory/hair/skr/tentacle_verylong name = "Skrell Very Long Tentacles" icon_state = "skrell_hair_verylong" - species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) //Tajaran hairstyles -/datum/sprite_accessory/hair/taj_ears +/datum/sprite_accessory/hair/taj name = "Tajaran Ears" icon_state = "ears_plain" species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_clean - name = "Tajaran Clean" - icon_state = "hair_clean" - species_allowed = list(SPECIES_TAJ) - -/datum/sprite_accessory/hair/taj_ears_bangs +/datum/sprite_accessory/hair/taj/bangs name = "Tajaran Bangs" icon_state = "hair_bangs" - species_allowed = list(SPECIES_TAJ) +/datum/sprite_accessory/hair/taj/bangs_alt + name = "Tajaran Bangs (Alt)" + icon_state = "hair_bangs_alt" -/datum/sprite_accessory/hair/taj_ears_braid +/datum/sprite_accessory/hair/taj/short_fringe + name = "Tajaran Short Fringe" + icon_state = "hair_shortfringe" + +/datum/sprite_accessory/hair/taj/braid name = "Tajaran Braid" icon_state = "hair_tbraid" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_shaggy +/datum/sprite_accessory/hair/taj/clean + name = "Tajaran Clean" + icon_state = "hair_clean" + +/datum/sprite_accessory/hair/taj/gman + name = "Tajaran G-Man" + icon_state = "hair_gman" + +/datum/sprite_accessory/hair/taj/greaser + name = "Tajaran Greaser" + icon_state = "hair_greaser" + +/datum/sprite_accessory/hair/taj/bun + name = "Tajaran Bun" + icon_state = "hair_tajbun" + +/datum/sprite_accessory/hair/taj/bunsmall + name = "Tajaran Bun (Small)" + icon_state = "hair_tajsmallbun" + +/datum/sprite_accessory/hair/taj/bunlow + name = "Tajaran Bun (Low)" + icon_state = "hair_tajbunlow" + +/datum/sprite_accessory/hair/taj/bunlowsmall + name = "Tajaran Bun (Low, Small)" + icon_state = "hair_tajbunlowsmall" + +/datum/sprite_accessory/hair/taj/_wedge + name = "Tajaran Wedge" + icon_state = "hair_wedge" + +/datum/sprite_accessory/hair/taj/shaggy name = "Tajaran Shaggy" icon_state = "hair_shaggy" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_mohawk +/datum/sprite_accessory/hair/taj/mohawk name = "Tajaran Mohawk" icon_state = "hair_mohawk" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_plait +/datum/sprite_accessory/hair/taj/plait name = "Tajaran Plait" icon_state = "hair_plait" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_straight +/datum/sprite_accessory/hair/taj/_sidepony + name = "Tajaran Side Ponytail" + icon_state = "hair_sidepony" + +/datum/sprite_accessory/hair/taj/straight name = "Tajaran Straight" icon_state = "hair_straight" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_long +/datum/sprite_accessory/hair/taj/long name = "Tajaran Long" icon_state = "hair_long" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_rattail +/datum/sprite_accessory/hair/taj/tresses + name = "Tajaran Tresses" + icon_state = "hair_tresses" + +/datum/sprite_accessory/hair/taj/shoulderparted + name = "Tajaran Shoulder Parted" + icon_state = "hair_shoulderparted" + +/datum/sprite_accessory/hair/taj/shoulderpartedsmall + name = "Tajaran Shoulder Parted (Small)" + icon_state = "hair_shoulderpartedsmall" + +/datum/sprite_accessory/hair/taj/shoulderpartedlong + name = "Tajaran Shoulder Parted (Long)" + icon_state = "hair_shoulderpartedlong" + +/datum/sprite_accessory/hair/taj/sidepartedleft + name = "Tajaran Side Parted (Left)" + icon_state = "hair_sidepartedleft" + +/datum/sprite_accessory/hair/taj/sidepartedright + name = "Tajaran Side Parted (Right)" + icon_state = "hair_sidepartedright" + +/datum/sprite_accessory/hair/taj/shoulderlength + name = "Tajaran Shoulder Length" + icon_state = "hair_shoulderlength" + +/datum/sprite_accessory/hair/taj/shoulderlengthalt + name = "Tajaran Shoulder Length (Alt)" + icon_state = "hair_shoulderlengthalt" + +/datum/sprite_accessory/hair/taj/cascading + name = "Tajaran Cascading" + icon_state = "hair_cascading" + +/datum/sprite_accessory/hair/taj/cascadingalt + name = "Tajaran Cascading (Alt)" + icon_state = "hair_cascadingalt" + +/datum/sprite_accessory/hair/taj/rattail name = "Tajaran Rat Tail" icon_state = "hair_rattail" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_spiky +/datum/sprite_accessory/hair/taj/spiky name = "Tajaran Spiky" icon_state = "hair_tajspiky" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_messy +/datum/sprite_accessory/hair/taj/fringeup + name = "Tajaran Fringe Spike" + icon_state = "hair_fringeup" + +/datum/sprite_accessory/hair/taj/messy name = "Tajaran Messy" icon_state = "hair_messy" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_curls +/datum/sprite_accessory/hair/taj/curls name = "Tajaran Curly" icon_state = "hair_curly" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_wife +/datum/sprite_accessory/hair/taj/curlsalt + name = "Tajaran Curly, alt" + icon_state = "hair_curlyalt" + +/datum/sprite_accessory/hair/taj/mane + name = "Tajaran Mane" + icon_state = "hair_mane" + +/datum/sprite_accessory/hair/taj/wife name = "Tajaran Housewife" icon_state = "hair_wife" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_victory +/datum/sprite_accessory/hair/taj/victory name = "Tajaran Victory Curls" icon_state = "hair_victory" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/hair/taj_ears_bob +/datum/sprite_accessory/hair/taj/bob name = "Tajaran Bob" icon_state = "hair_tbob" - species_allowed = list(SPECIES_TAJ) - -/datum/sprite_accessory/hair/taj_ears_fingercurl +/datum/sprite_accessory/hair/taj/fingercurl name = "Tajaran Finger Curls" icon_state = "hair_fingerwave" - species_allowed = list(SPECIES_TAJ) //Teshari things /datum/sprite_accessory/hair/teshari @@ -1875,7 +1939,6 @@ shaved name = "Teshari Mushroom" icon_state = "teshari_mushroom" -//Tesh things ported from Ark Station /datum/sprite_accessory/hair/teshari/twies name = "Teshari Twies" icon_state = "teshari_twies" @@ -1897,102 +1960,89 @@ shaved icon_state = "teshari_fluffymohawk" // Vox things -/datum/sprite_accessory/hair/vox_braid_long +/datum/sprite_accessory/hair/vox name = "Long Vox braid" icon_state = "vox_longbraid" species_allowed = list(SPECIES_VOX) -/datum/sprite_accessory/hair/vox_braid_short +/datum/sprite_accessory/hair/vox/braid_short name = "Short Vox Braid" icon_state = "vox_shortbraid" - species_allowed = list(SPECIES_VOX) -/datum/sprite_accessory/hair/vox_quills_short +/datum/sprite_accessory/hair/vox/quills_short name = "Short Vox Quills" icon_state = "vox_shortquills" - species_allowed = list(SPECIES_VOX) -/datum/sprite_accessory/hair/vox_quills_kingly +/datum/sprite_accessory/hair/vox/quills_kingly name = "Kingly Vox Quills" icon_state = "vox_kingly" - species_allowed = list(SPECIES_VOX) -/datum/sprite_accessory/hair/vox_quills_mohawk +/datum/sprite_accessory/hair/vox/quills_mohawk name = "Quill Mohawk" icon_state = "vox_mohawk" - species_allowed = list(SPECIES_VOX) -/datum/sprite_accessory/facial_hair/taj_sideburns +//Tajaran Facial Hair + +/datum/sprite_accessory/facial_hair/taj name = "Tajaran Sideburns" icon_state = "facial_sideburns" species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/facial_hair/taj_mutton +/datum/sprite_accessory/facial_hair/taj/mutton name = "Tajaran Mutton" icon_state = "facial_mutton" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/facial_hair/taj_pencilstache +/datum/sprite_accessory/facial_hair/taj/pencilstache name = "Tajaran Pencilstache" icon_state = "facial_pencilstache" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/facial_hair/taj_moustache +/datum/sprite_accessory/facial_hair/taj/moustache name = "Tajaran Moustache" icon_state = "facial_moustache" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/facial_hair/taj_goatee +/datum/sprite_accessory/facial_hair/taj/goatee name = "Tajaran Goatee" icon_state = "facial_goatee" - species_allowed = list(SPECIES_TAJ) -/datum/sprite_accessory/facial_hair/taj_smallstache +/datum/sprite_accessory/facial_hair/taj/smallstache name = "Tajaran Smallsatche" icon_state = "facial_smallstache" - species_allowed = list(SPECIES_TAJ) //unathi horn beards and the like -/datum/sprite_accessory/facial_hair/una_chinhorn +/datum/sprite_accessory/facial_hair/una name = "Unathi Chin Horn" icon_state = "facial_chinhorns" species_allowed = list(SPECIES_UNATHI) -/datum/sprite_accessory/facial_hair/una_hornadorns +/datum/sprite_accessory/facial_hair/una/hornadorns name = "Unathi Horn Adorns" icon_state = "facial_hornadorns" - species_allowed = list(SPECIES_UNATHI) -/datum/sprite_accessory/facial_hair/una_spinespikes +/datum/sprite_accessory/facial_hair/una/spinespikes name = "Unathi Spine Spikes" icon_state = "facial_spikes" - species_allowed = list(SPECIES_UNATHI) -/datum/sprite_accessory/facial_hair/una_dorsalfrill +/datum/sprite_accessory/facial_hair/una/dorsalfrill name = "Unathi Dorsal Frill" icon_state = "facial_dorsalfrill" - species_allowed = list(SPECIES_UNATHI) -//Teshari things -/datum/sprite_accessory/facial_hair/teshari_beard +//Teshari face things +/datum/sprite_accessory/facial_hair/teshari name = "Teshari Beard" icon_state = "teshari_chin" species_allowed = list(SPECIES_TESHARI) gender = NEUTER -/datum/sprite_accessory/facial_hair/teshari_scraggly +/datum/sprite_accessory/facial_hair/teshari/scraggly name = "Teshari Scraggly" icon_state = "teshari_scraggly" - species_allowed = list(SPECIES_TESHARI) - gender = NEUTER -/datum/sprite_accessory/facial_hair/teshari_chops + +/datum/sprite_accessory/facial_hair/teshari/chops name = "Teshari Chops" icon_state = "teshari_gap" - species_allowed = list(SPECIES_TESHARI) - gender = NEUTER /* //////////////////////////// diff --git a/code/modules/mob/new_player/sprite_accessories_ear.dm b/code/modules/mob/new_player/sprite_accessories_ear.dm index d7923efd2d..9d5377412b 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear.dm @@ -345,13 +345,43 @@ do_colouration = 1 color_blend_mode = ICON_MULTIPLY +/datum/sprite_accessory/ears/elfs2 + name = "pointed ears" + desc = "" + icon_state = "ears_pointy" + do_colouration = 1 + species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + /datum/sprite_accessory/ears/elfs - name = "elven ears" + name = "pointed ears (tall)" desc = "" icon_state = "elfs" do_colouration = 1 color_blend_mode = ICON_MULTIPLY + species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) +/datum/sprite_accessory/ears/elfs3 + name = "pointed ears (down)" + desc = "" + icon_state = "ears_pointy_down" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/ears/elfs4 + name = "pointed ears (long)" + desc = "" + icon_state = "ears_pointy_long" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) + +/datum/sprite_accessory/ears/elfs5 + name = "pointed ears (long, down)" + desc = "" + icon_state = "ears_pointy_long_down" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) /datum/sprite_accessory/ears/sleek diff --git a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm index 2c9402042d..4651023252 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm @@ -22,6 +22,14 @@ color_blend_mode = ICON_MULTIPLY species_allowed = null //YW EDIT +/datum/sprite_accessory/ears/shadekin/round + name = "Shadekin Ears Round, colorable" + desc = "" + icon = 'icons/mob/vore/ears_32x64.dmi' + icon_state = "shadekin-round" + do_colouration = 1 + extra_overlay = "shadekin-round-inner" + // Ears avaliable to anyone /datum/sprite_accessory/ears/taj_ears @@ -718,3 +726,49 @@ icon_state = "chorn_chub" do_colouration = 0 color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/bnnuy + name = "Bnnuy Ears" + desc = "" + icon = 'icons/mob/vore/ears_32x64.dmi' + icon_state = "bnnuy" + extra_overlay = "bnnuy-inner" + extra_overlay2 = "bnnuy-tips" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/sandfox + name = "Sandfox Ears" + desc = "" + icon = 'icons/mob/vore/ears_32x64.dmi' + icon_state = "sandfox" + extra_overlay = "sandfox-inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/teppiears + name = "Teppi Ears" + desc = "" + icon = 'icons/mob/vore/ears_32x64.dmi' + icon_state = "teppi_ears" + extra_overlay = "teppi_ears_inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/teppihorns + name = "Teppi Horns" + desc = "" + icon = 'icons/mob/vore/ears_32x64.dmi' + icon_state = "teppi_horns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/teppiearshorns + name = "Teppi Ears and Horns" + desc = "" + icon = 'icons/mob/vore/ears_32x64.dmi' + icon_state = "teppi_ears" + extra_overlay = "teppi_ears_inner" + extra_overlay2 = "teppi_horns" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/news/news_init.dm b/code/modules/news/news_init.dm index 2c78e4baf8..cc92668343 100644 --- a/code/modules/news/news_init.dm +++ b/code/modules/news/news_init.dm @@ -7,6 +7,7 @@ GLOBAL_DATUM_INIT(news_data, /datum/lore/news, new) /datum/lore/news var/datum/feed_channel/station_newspaper var/datum/lore/codex/category/main_news/news_codex = new() + var/newsindex /datum/lore/news/New() ..() @@ -17,6 +18,10 @@ GLOBAL_DATUM_INIT(news_data, /datum/lore/news, new) break spawn(300) // Yes, again. fill_codex_news() + if (!news_codex.newsindex) + return + else + newsindex = news_codex.newsindex /datum/lore/news/proc/fill_codex_news() if(!news_network) diff --git a/code/modules/organs/subtypes/tajaran.dm b/code/modules/organs/subtypes/tajaran.dm new file mode 100644 index 0000000000..c46dde783b --- /dev/null +++ b/code/modules/organs/subtypes/tajaran.dm @@ -0,0 +1,7 @@ +/obj/item/organ/internal/eyes/tajaran + icon_state = "tajaran_eyes" + +/obj/item/organ/internal/heart/tajaran + icon_state = "tajaran_heart-on" + dead_icon = "tajaran_heart-off" + diff --git a/code/modules/persistence/storage/smartfridge.dm b/code/modules/persistence/storage/smartfridge.dm index 3962262154..9978168c65 100644 --- a/code/modules/persistence/storage/smartfridge.dm +++ b/code/modules/persistence/storage/smartfridge.dm @@ -57,8 +57,7 @@ continue while(count > 0) - inst = new real_path - inst.amount = min(count, max_amount) + inst = new real_path(null, min(count, max_amount)) count -= inst.get_amount() . += inst diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 41486dc621..3fd25a83e4 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -559,7 +559,7 @@ GLOBAL_LIST_EMPTY(apcs) "You start adding cables to the APC frame...") playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) if(do_after(user, 20)) - if(C.amount >= 10 && !terminal && opened && has_electronics != APC_HAS_ELECTRONICS_SECURED) + if(C.get_amount() >= 10 && !terminal && opened && has_electronics != APC_HAS_ELECTRONICS_SECURED) var/obj/structure/cable/N = T.get_cable_node() if(prob(50) && electrocute_mob(usr, N, N)) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index abf536f651..d5993805da 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -163,10 +163,8 @@ //Removes one stack's worth of material from the generator. /obj/machinery/power/port_gen/pacman/DropFuel() if(sheets) - var/obj/item/stack/material/S = new sheet_path(loc) - var/amount = min(sheets, S.max_amount) - S.amount = amount - sheets -= amount + var/obj/item/stack/material/S = new sheet_path(loc, sheets) + sheets -= S.get_amount() /obj/machinery/power/port_gen/pacman/UseFuel() @@ -265,7 +263,7 @@ /obj/machinery/power/port_gen/pacman/attackby(var/obj/item/O as obj, var/mob/user as mob) if(istype(O, sheet_path)) var/obj/item/stack/addstack = O - var/amount = min((max_sheets - sheets), addstack.amount) + var/amount = min((max_sheets - sheets), addstack.get_amount()) if(amount < 1) to_chat(user, "The [src.name] is full!") return diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 829f07ce37..3dd58f6d7d 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -216,7 +216,7 @@ to_chat(user, "\The [src] is already fully repaired.") return var/obj/item/stack/P = W - if(P.amount < amt) + if(!P.can_use(amt)) to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.") return to_chat(user, "You begin repairing \the [src]...") diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index f07b68f763..ac6748fb23 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -63,8 +63,7 @@ GLOBAL_LIST_EMPTY(solars_list) if(do_after(user, 50)) var/obj/item/solar_assembly/S = new(loc) S.anchored = TRUE - var/obj/item/stack/glass = new glass_type(loc) - glass.amount = 2 + new glass_type(loc, 2) playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] takes the glass off the solar panel.") qdel(src) diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 299d4de823..d6f4603865 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -58,8 +58,7 @@ var/obj/item/solar_assembly/S = new(loc) S.tracker = TRUE S.anchored = TRUE - var/obj/item/stack/glass = new glass_type(loc) - glass.amount = 2 + new glass_type(loc, 2) playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] takes the glass off the tracker.") qdel(src) diff --git a/code/modules/reagents/machinery/grinder.dm b/code/modules/reagents/machinery/grinder.dm index 3b5ea9e4fd..738830ed1c 100644 --- a/code/modules/reagents/machinery/grinder.dm +++ b/code/modules/reagents/machinery/grinder.dm @@ -232,7 +232,7 @@ var/obj/item/stack/stack = O if(istype(stack)) var/list/sheet_components = sheet_reagents[stack.type] - var/amount_to_take = max(0,min(stack.amount,round(remaining_volume/REAGENTS_PER_SHEET))) + var/amount_to_take = max(0,min(stack.get_amount(),round(remaining_volume/REAGENTS_PER_SHEET))) if(amount_to_take) stack.use(amount_to_take) if(QDELETED(stack)) diff --git a/code/modules/reagents/reactions/instant/instant_vr.dm b/code/modules/reagents/reactions/instant/instant_vr.dm index c061368419..3a7e84537c 100644 --- a/code/modules/reagents/reactions/instant/instant_vr.dm +++ b/code/modules/reagents/reactions/instant/instant_vr.dm @@ -270,9 +270,7 @@ var/chosen = pick(material) if(chosen in rare_types) spawn_amount = rand(1,15) - var/obj/item/stack/material/C = new chosen - C.amount = spawn_amount - C.loc = get_turf(holder.my_atom) + new chosen(get_turf(holder.my_atom), spawn_amount) /decl/chemical_reaction/instant/slimelight name = "Slime Glow" @@ -296,9 +294,7 @@ result_amount = 1 /decl/chemical_reaction/instant/slimephoron/on_reaction(var/datum/reagents/holder) - var/obj/item/stack/material/phoron/P = new /obj/item/stack/material/phoron - P.amount = 10 - P.loc = get_turf(holder.my_atom) + new /obj/item/stack/material/phoron(get_turf(holder.my_atom), 10) /decl/chemical_reaction/instant/slimefreeze name = "Slime Freeze" diff --git a/code/modules/reagents/reagent_containers/borghypo.dm b/code/modules/reagents/reagent_containers/borghypo.dm index 12a3df61df..544d6e8f42 100644 --- a/code/modules/reagents/reagent_containers/borghypo.dm +++ b/code/modules/reagents/reagent_containers/borghypo.dm @@ -158,6 +158,7 @@ "milk", "mint", "orangejuice", + "redwine", "rum", "sake", "sodawater", @@ -175,8 +176,7 @@ "vodka", "water", "watermelonjuice", - "whiskey", - "wine") + "whiskey") /obj/item/weapon/reagent_containers/borghypo/service/attack(var/mob/M, var/mob/user) return diff --git a/code/modules/reagents/reagents/medicine.dm b/code/modules/reagents/reagents/medicine.dm index 540c517ed3..7ca8584ed3 100644 --- a/code/modules/reagents/reagents/medicine.dm +++ b/code/modules/reagents/reagents/medicine.dm @@ -349,11 +349,11 @@ if(istype(O, /obj/item/stack/medical/bruise_pack) && round(volume) >= 5) var/obj/item/stack/medical/bruise_pack/C = O var/packname = C.name - var/to_produce = min(C.amount, round(volume / 5)) + var/to_produce = min(C.get_amount(), round(volume / 5)) var/obj/item/stack/medical/M = C.upgrade_stack(to_produce) - if(M && M.amount) + if(M && M.get_amount()) holder.my_atom.visible_message("\The [packname] bubbles.") remove_self(to_produce * 5) @@ -1275,11 +1275,11 @@ if(istype(O, /obj/item/stack/medical/crude_pack) && round(volume) >= 1) var/obj/item/stack/medical/crude_pack/C = O var/packname = C.name - var/to_produce = min(C.amount, round(volume)) + var/to_produce = min(C.get_amount(), round(volume)) var/obj/item/stack/medical/M = C.upgrade_stack(to_produce) - if(M && M.amount) + if(M && M.get_amount()) holder.my_atom.visible_message("\The [packname] bubbles.") remove_self(to_produce) diff --git a/code/modules/recycling/recycling.dm b/code/modules/recycling/recycling.dm index 26eab561e2..37a6081de9 100644 --- a/code/modules/recycling/recycling.dm +++ b/code/modules/recycling/recycling.dm @@ -188,8 +188,8 @@ var/stacktype = M.stack_type var/turf/T = get_step(src, dir) var/obj/item/stack/S = locate(stacktype) in T - if(S) - S.amount++ + if(S && S.get_amount() < S.max_amount) + S.add(1) else new stacktype(T) diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index f793c0318a..9cf8d4d338 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -100,8 +100,7 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid). if(materials[f] >= SHEET_MATERIAL_AMOUNT) var/path = getMaterialType(f) if(path) - var/obj/item/stack/S = new path(loc) - S.amount = round(materials[f] / SHEET_MATERIAL_AMOUNT) + new path(loc, round(materials[f] / SHEET_MATERIAL_AMOUNT)) ..() /obj/machinery/r_n_d/circuit_imprinter/attackby(var/obj/item/O as obj, var/mob/user as mob) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 11c44f3e15..7a5b17dca4 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -233,27 +233,44 @@ new_item.matter[i] = new_item.matter[i] * mat_efficiency /obj/machinery/r_n_d/protolathe/proc/eject_materials(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything - var/recursive = amount == -1 ? 1 : 0 - material = lowertext(material) - var/obj/item/stack/material/mattype - var/datum/material/MAT = get_material_by_name(material) + var/recursive = amount == -1 ? TRUE : FALSE + var/matstring = lowertext(material) - if(!MAT) + // 0 or null, nothing to eject + if(!materials[matstring]) + return + // Problem, fix problem and abort + if(materials[matstring] < 0) + warning("[src] tried to eject material '[material]', which it has 'materials[matstring]' of!") + materials[matstring] = 0 return - mattype = MAT.stack_type - - if(!mattype) + // Find the material datum for our material + var/datum/material/M = get_material_by_name(matstring) + if(!M) + warning("[src] tried to eject material '[matstring]', which didn't match any known material datum!") + return + // Find what type of sheets it makes + var/obj/item/stack/material/S = M.stack_type + if(!S) + warning("[src] tried to eject material '[matstring]', which didn't have a stack_type!") return - var/obj/item/stack/material/S = new mattype(loc) + // If we were passed -1, then it's recursive ejection and we should eject all we can if(amount <= 0) - amount = S.max_amount - var/ejected = min(round(materials[material] / S.perunit), amount) - S.amount = min(ejected, amount) - if(S.amount <= 0) - qdel(S) + amount = initial(S.max_amount) + // Smaller of what we have left, or the desired amount (note the amount is in sheets, but the array stores perunit values) + var/ejected = min(round(materials[matstring] / initial(S.perunit)), amount) + + // Place a sheet + S = M.place_sheet(get_turf(src), ejected) + if(!istype(S)) + warning("[src] tried to eject material '[material]', which didn't generate a proper stack when asked!") return - materials[material] -= ejected * S.perunit - if(recursive && materials[material] >= S.perunit) - eject_materials(material, -1) + + // Reduce our amount stored + materials[matstring] -= ejected * S.perunit + + // Recurse if we have enough left for more sheets + if(recursive && materials[matstring] >= S.perunit) + eject_materials(matstring, -1) diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 76bbe9d167..885ba75297 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -38,6 +38,5 @@ eject = amount == -1 ? eject : min(eject, amount) if(eject < 1) return - var/obj/item/stack/material/S = new sheetType(loc) - S.amount = eject + new sheetType(loc, eject) materials[material] -= eject * perUnit diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 81ee392a8b..4fda3725df 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -181,8 +181,8 @@ GLOBAL_LIST_INIT(design_datums, list()) id = TECH_DATA /datum/tech/syndicate - name = "Illegal Technologies Research" - desc = "The study of technologies that violate standard government regulations." + name = "Transgressive Technologies Research" + desc = "The study of technologies that sit on the very boundaries of legality and ethics." id = TECH_ILLEGAL level = 0 diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index 36243c3ec2..921b704c96 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -388,9 +388,9 @@ var/amnt = S.perunit if(stored_material[S.material.name] + amnt <= max_res_amount) - if(S && S.amount >= 1) + if(S && S.get_amount() >= 1) var/count = 0 - while(stored_material[S.material.name] + amnt <= max_res_amount && S.amount >= 1) + while(stored_material[S.material.name] + amnt <= max_res_amount && S.get_amount() >= 1) stored_material[S.material.name] += amnt S.use(1) count++ diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 6ed7dad69d..9c210652c2 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -475,11 +475,9 @@ if(clean_name) var/okay = tgui_alert(target,"New name will be '[clean_name]', ok?", "Confirmation",list("Cancel","Ok")) if(okay == "Ok") - new_name = clean_name - - new_name = sanitizeName(new_name, allow_numbers = TRUE) - target.name = new_name - target.real_name = target.name + target.name = new_name + target.real_name = target.name + return /datum/surgery_step/robotics/install_mmi/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user]'s hand slips.", \ diff --git a/code/modules/tables/interactions.dm b/code/modules/tables/interactions.dm index aeb899cf82..27627055d7 100644 --- a/code/modules/tables/interactions.dm +++ b/code/modules/tables/interactions.dm @@ -60,14 +60,30 @@ return 1 return 1 -/obj/structure/table/MouseDrop_T(obj/O as obj, mob/user as mob) +/obj/structure/table/MouseDrop_T(obj/O, mob/user, src_location, over_location, src_control, over_control, params) + if(ismob(O.loc)) //If placing an item + if(!isitem(O) || user.get_active_hand() != O) + return ..() + if(isrobot(user)) + return + user.drop_item() + if(O.loc != src.loc) + step(O, get_dir(O, src)) - if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O)) - return ..() - if(isrobot(user)) - return - user.unEquip(O, 0, src.loc) - return + else if(isturf(O.loc) && isitem(O)) //If pushing an item on the tabletop + var/obj/item/I = O + if(I.anchored) + return + + if((isliving(user)) && (Adjacent(user)) && !(user.incapacitated())) + if(O.w_class <= user.can_pull_size) + O.forceMove(loc) + auto_align(I, params, TRUE) + else + to_chat(user, SPAN_WARNING("\The [I] is too big for you to move!")) + return + + return ..() /obj/structure/table/attackby(obj/item/W as obj, mob/user as mob, var/hit_modifier, var/click_parameters) diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm index d480a89ce3..2c905b9b52 100644 --- a/code/modules/vore/eating/digest_act_vr.dm +++ b/code/modules/vore/eating/digest_act_vr.dm @@ -9,6 +9,8 @@ var/obj/item/device/pda/P = src if(P.id) P.id = null + for(var/mob/living/M in contents)//Drop mobs from objects(shoes) before deletion + M.forceMove(item_storage) for(var/obj/item/O in contents) if(istype(O, /obj/item/weapon/storage/internal)) //Dump contents from dummy pockets. for(var/obj/item/SO in O) @@ -37,6 +39,8 @@ var/obj/item/device/pda/P = src if(P.id) P.id = null + for(var/mob/living/M in contents)//Drop mobs from objects(shoes) before deletion + M.forceMove(item_storage) for(var/obj/item/O in contents) if(istype(O,/obj/item/weapon/storage/internal)) //Dump contents from dummy pockets. for(var/obj/item/SO in O) diff --git a/config/example/config.txt b/config/example/config.txt index 30b9cd6c20..6eac0e822f 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -588,4 +588,9 @@ DEFIB_TIMER 60 # SUGGESTED: artist (str), genre (str) # OPTIONAL: secret (bool), lobby (bool) #JUKEBOX_TRACK_FILES config/jukebox.json;config/jukebox_private.json -JUKEBOX_TRACK_FILES config/jukebox.json \ No newline at end of file +JUKEBOX_TRACK_FILES config/jukebox.json + +# Suggested BYOND client version (major component, e.g. 514) +#SUGGESTED_BYOND_VERSION 514 +# Suggested BYOND client build (minor component, e.g. 1560) +#SUGGESTED_BYOND_BUILD 1561 \ No newline at end of file diff --git a/icons/_nanomaps/tether_nanomap_z3.png b/icons/_nanomaps/tether_nanomap_z3.png index 15893675cf..31ccab1e4f 100644 Binary files a/icons/_nanomaps/tether_nanomap_z3.png and b/icons/_nanomaps/tether_nanomap_z3.png differ diff --git a/icons/inventory/accessory/item.dmi b/icons/inventory/accessory/item.dmi index 61e8c36841..4aa7121c5e 100644 Binary files a/icons/inventory/accessory/item.dmi and b/icons/inventory/accessory/item.dmi differ diff --git a/icons/inventory/accessory/mob.dmi b/icons/inventory/accessory/mob.dmi index 2b252caa14..d4c479ef0d 100644 Binary files a/icons/inventory/accessory/mob.dmi and b/icons/inventory/accessory/mob.dmi differ diff --git a/icons/inventory/feet/item.dmi b/icons/inventory/feet/item.dmi index 12f1e8bc4a..94c360ec2f 100644 Binary files a/icons/inventory/feet/item.dmi and b/icons/inventory/feet/item.dmi differ diff --git a/icons/inventory/feet/mob.dmi b/icons/inventory/feet/mob.dmi index 585b658f99..702111404f 100644 Binary files a/icons/inventory/feet/mob.dmi and b/icons/inventory/feet/mob.dmi differ diff --git a/icons/inventory/head/item.dmi b/icons/inventory/head/item.dmi index bc1ad569c2..b74c635711 100644 Binary files a/icons/inventory/head/item.dmi and b/icons/inventory/head/item.dmi differ diff --git a/icons/inventory/head/mob.dmi b/icons/inventory/head/mob.dmi index 4fe11e11f9..ed9e936b7d 100644 Binary files a/icons/inventory/head/mob.dmi and b/icons/inventory/head/mob.dmi differ diff --git a/icons/inventory/head/mob_vox.dmi b/icons/inventory/head/mob_vox.dmi index c8f5e5bfb2..3d2272766d 100644 Binary files a/icons/inventory/head/mob_vox.dmi and b/icons/inventory/head/mob_vox.dmi differ diff --git a/icons/inventory/suit/item.dmi b/icons/inventory/suit/item.dmi index 7bef5fc417..3f12359223 100644 Binary files a/icons/inventory/suit/item.dmi and b/icons/inventory/suit/item.dmi differ diff --git a/icons/inventory/suit/mob.dmi b/icons/inventory/suit/mob.dmi index 29a4aa79c9..ddad77a5c3 100644 Binary files a/icons/inventory/suit/mob.dmi and b/icons/inventory/suit/mob.dmi differ diff --git a/icons/inventory/suit/mob_vox.dmi b/icons/inventory/suit/mob_vox.dmi index b1fc525399..16ed4d3b5e 100644 Binary files a/icons/inventory/suit/mob_vox.dmi and b/icons/inventory/suit/mob_vox.dmi differ diff --git a/icons/inventory/uniform/item.dmi b/icons/inventory/uniform/item.dmi index f0e5d69092..eb30629c03 100644 Binary files a/icons/inventory/uniform/item.dmi and b/icons/inventory/uniform/item.dmi differ diff --git a/icons/inventory/uniform/mob.dmi b/icons/inventory/uniform/mob.dmi index e5f028c969..f51574cbd9 100644 Binary files a/icons/inventory/uniform/mob.dmi and b/icons/inventory/uniform/mob.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index bcd4736913..1e0de2d20e 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/human_races/sprite_accessories/ears.dmi b/icons/mob/human_races/sprite_accessories/ears.dmi index 243b901e8e..b3e21ecead 100644 Binary files a/icons/mob/human_races/sprite_accessories/ears.dmi and b/icons/mob/human_races/sprite_accessories/ears.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi new file mode 100644 index 0000000000..6bf14c70ec Binary files /dev/null and b/icons/mob/uniform.dmi differ diff --git a/icons/mob/vore/ears_32x64.dmi b/icons/mob/vore/ears_32x64.dmi new file mode 100644 index 0000000000..d790034cda Binary files /dev/null and b/icons/mob/vore/ears_32x64.dmi differ diff --git a/icons/obj/card_alt_vr.dmi b/icons/obj/card_alt_vr.dmi index a82caf9bc4..445dddb156 100644 Binary files a/icons/obj/card_alt_vr.dmi and b/icons/obj/card_alt_vr.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi new file mode 100644 index 0000000000..0ad63f5424 Binary files /dev/null and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/magazine.dmi b/icons/obj/magazine.dmi new file mode 100644 index 0000000000..62b385510c Binary files /dev/null and b/icons/obj/magazine.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 0f22fa82cd..cee44a9070 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/maps/offmap_vr/talon/talon_v2.dm b/maps/offmap_vr/talon/talon_v2.dm index e224723141..1944cd8cb2 100644 --- a/maps/offmap_vr/talon/talon_v2.dm +++ b/maps/offmap_vr/talon/talon_v2.dm @@ -191,6 +191,7 @@ speaking of, if some dumbass does take it and fly off solo then get themselves k name = "somewhat glitchy drone fabricator" desc = "Obtained from a derelict, it seems to work sometimes, not work sometimes, and work TOO good sometimes. Didn't come with a control console either..." drone_type = /mob/living/silicon/robot/drone/talon + fabricator_tag = "Talon" /mob/living/silicon/robot/drone/talon foreign_droid = TRUE @@ -545,7 +546,7 @@ speaking of, if some dumbass does take it and fly off solo then get themselves k /obj/effect/shuttle_landmark/premade/talon_v2_wing_star name = "ITV Talon (Starboard Wingtip)" landmark_tag = "talon_v2_wing_star" - + /obj/random/multiple/corp_crate/talon_cargo name = "random corporate crate (talon)" desc = "A random corporate crate with thematic contents. No weapons, no SAARE cashbox, 50% chance to not appear." diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm index bf678b0380..96d7089303 100644 --- a/maps/southern_cross/southern_cross-1.dmm +++ b/maps/southern_cross/southern_cross-1.dmm @@ -22195,7 +22195,6 @@ dir = 4 }, /obj/structure/extinguisher_cabinet{ - pixel_x = 0; pixel_y = 30 }, /turf/simulated/floor/tiled, @@ -22817,8 +22816,7 @@ /obj/machinery/door/firedoor/border_only, /obj/machinery/door/airlock/security{ name = "Security Checkpoint"; - req_access = list(1); - req_one_access = list(1) + req_access = list(1) }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -30036,7 +30034,6 @@ "beW" = ( /obj/machinery/computer/security/telescreen{ desc = "Big Brother is watching."; - layer = 3.4; name = "Brig Monitor"; network = list("Prison"); pixel_y = 28 @@ -39664,8 +39661,7 @@ "bvS" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/glass_medical{ - name = "Medical Hardsuits"; - req_one_access = list(5) + name = "Medical Hardsuits" }, /turf/simulated/floor/tiled/dark, /area/ai_monitored/storage/eva) @@ -47185,6 +47181,7 @@ icon_state = "frame"; pixel_y = -32 }, +/obj/item/tabloid, /turf/simulated/floor/wood, /area/rnd/research) "bIY" = ( @@ -47583,8 +47580,7 @@ "bJN" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/glass_engineering{ - name = "Engineering Hallway"; - req_one_access = list(10) + name = "Engineering Hallway" }, /turf/simulated/floor/tiled/steel_grid, /area/engineering/hallway/atmos_hallway) @@ -47598,8 +47594,7 @@ "bJP" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/glass_engineering{ - name = "Engineering Hallway"; - req_one_access = list(10) + name = "Engineering Hallway" }, /obj/structure/cable/green{ d1 = 1; @@ -49546,8 +49541,7 @@ "bNi" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/glass_engineering{ - name = "Engineering Hallway"; - req_one_access = list(10) + name = "Engineering Hallway" }, /turf/simulated/floor/tiled/steel_grid, /area/engineering/hallway/engineer_hallway) @@ -50504,8 +50498,7 @@ "bOW" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/glass_engineering{ - name = "Engineering Hallway"; - req_one_access = list(10) + name = "Engineering Hallway" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -52126,8 +52119,7 @@ /area/engineering/drone_fabrication) "bRT" = ( /obj/machinery/door/airlock/glass_engineering{ - name = "Engineering Hallway"; - req_one_access = list(10) + name = "Engineering Hallway" }, /obj/machinery/door/firedoor/glass, /obj/structure/disposalpipe/segment, @@ -52137,8 +52129,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/glass_engineering{ - name = "Engineering Hallway"; - req_one_access = list(10) + name = "Engineering Hallway" }, /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/steel_grid, @@ -54424,6 +54415,7 @@ "bWj" = ( /obj/structure/table/woodentable, /obj/item/weapon/reagent_containers/food/snacks/chips, +/obj/item/tabloid, /turf/simulated/floor/carpet, /area/engineering/break_room) "bWk" = ( @@ -89784,6 +89776,7 @@ layer = 3.1; name = "Cafe Shutters" }, +/obj/item/tabloid, /turf/simulated/floor/tiled/yellow, /area/library) "dkx" = ( diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index 50238bf10e..67ba59f685 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -38824,6 +38824,11 @@ "fzy" = ( /turf/simulated/wall, /area/tether/surfacebase/security/iaa/officecommon) +"fzG" = ( +/turf/simulated/wall/fancy_shuttle/nondense{ + fancy_shuttle_tag = "lifeboat1" + }, +/area/shuttle/tether) "fEX" = ( /obj/structure/cable{ d1 = 2; @@ -57883,7 +57888,7 @@ aAN aAN aJn aKU -aME +fzG aME aME aNz @@ -58451,7 +58456,7 @@ arJ arJ arJ aKU -aME +fzG aME aME aME diff --git a/sound/effects/radio_common.ogg b/sound/effects/radio_common.ogg new file mode 100644 index 0000000000..20a1d1da0a Binary files /dev/null and b/sound/effects/radio_common.ogg differ diff --git a/vorestation.dme b/vorestation.dme index 36e26debb9..22100a197c 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1176,7 +1176,7 @@ #include "code\game\objects\items\glassjar.dm" #include "code\game\objects\items\gunbox.dm" #include "code\game\objects\items\gunbox_vr.dm" -#include "code\game\objects\items\gunbox_yw.dm" +#include "code\game\objects\items\magazine.dm" #include "code\game\objects\items\latexballoon.dm" #include "code\game\objects\items\paintkit.dm" #include "code\game\objects\items\pizza_voucher_vr.dm" @@ -3373,6 +3373,7 @@ #include "code\modules\organs\subtypes\slime_vr.dm" #include "code\modules\organs\subtypes\standard.dm" #include "code\modules\organs\subtypes\standard_vr.dm" +#include "code\modules\organs\subtypes\tajaran.dm" #include "code\modules\organs\subtypes\teshari.dm" #include "code\modules\organs\subtypes\unathi.dm" #include "code\modules\organs\subtypes\unbreakable.dm" @@ -4222,4 +4223,4 @@ #include "maps\yw\structures\closets\research.dm" #include "maps\yw\structures\closets\security.dm" #include "maps\~map_system\maps.dm" -// END_INCLUDE +// END_INCLUDE \ No newline at end of file