From b367f76c62adfe370eaa0247905dfca0cc0318a6 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Wed, 24 Jun 2020 07:49:45 -0700 Subject: [PATCH 01/58] autobunker --- .../configuration/entries/comms.dm | 21 +++++++++++- code/datums/world_topic.dm | 19 +++++++++++ code/modules/client/verbs/autobunker.dm | 34 +++++++++++++++++++ tgstation.dme | 1 + 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 code/modules/client/verbs/autobunker.dm diff --git a/code/controllers/configuration/entries/comms.dm b/code/controllers/configuration/entries/comms.dm index 012c3ec9fe..e56ff3f0d1 100644 --- a/code/controllers/configuration/entries/comms.dm +++ b/code/controllers/configuration/entries/comms.dm @@ -25,4 +25,23 @@ /datum/config_entry/string/medal_hub_address /datum/config_entry/string/medal_hub_password - protection = CONFIG_ENTRY_HIDDEN \ No newline at end of file + protection = CONFIG_ENTRY_HIDDEN + +/datum/config_entry/keyed_list/cross_server_bunker_override + key_mode = KEY_MODE_TEXT + value_mode = VALUE_MODE_TEXT + protection = CONFIG_ENTRY_LOCKED + +/datum/config_entry/keyed_list/cross_server_bunker_override/ValidateAndSet(str_val) + . = ..() + if(.) + var/list/newv = list() + for(var/I in config_entry_value) + newv[replacetext(I, "+", " ")] = config_entry_value[I] + config_entry_value = newv + +/datum/config_entry/keyed_list/cross_server_bunker_override/ValidateListEntry(key_name, key_value) + return key_value != "byond:\\address:port" && ..() + +/datum/config_entry/flag/allow_cross_server_bunker_override + protection = CONFIG_ENTRY_LOCKED diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index 30699d36f4..261e423640 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -74,6 +74,25 @@ for(var/client/C in GLOB.clients) C.AnnouncePR(final_composed) +/datum/world_topic/auto_bunker_passthrough + keyword = "auto_bunker_override" + require_comms_key = TRUE + +/datum/world_topic/auto_bunker_passthrough/Run(list/input) + if(!CONFIG_GET(flag/allow_cross_server_bunker_override)) + return "Function Disabled" + var/ckeytobypass = input["ckey"] + var/is_new_ckey = !(ckey(ckeytobypass) in GLOB.bunker_passthrough) + var/sender = input["source"] || "UNKNOWN" + GLOB.bunker_passthrough |= ckey(ckeytobypass) + GLOB.bunker_passthrough[ckey(ckeytobypass)] = world.realtime + SSpersistence.SavePanicBunker() //we can do this every time, it's okay + if(!is_new_ckey) + log_admin("AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).") + message_admins("AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).") + send2irc("Panic Bunker", "AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).") + return "Success" + /datum/world_topic/ahelp_relay keyword = "Ahelp" require_comms_key = TRUE diff --git a/code/modules/client/verbs/autobunker.dm b/code/modules/client/verbs/autobunker.dm new file mode 100644 index 0000000000..7fba73bda8 --- /dev/null +++ b/code/modules/client/verbs/autobunker.dm @@ -0,0 +1,34 @@ +/client/verb/bunker_auto_authorize() + set name = "Auto Authorize Panic Bunker" + set desc = "Authorizes your account in the panic bunker of any servers connected to this function." + set category = "OOC" + + world.send_cross_server_bunker_overrides(key, src) + +/world/proc/send_cross_server_bunker_overrides(key, client/C) + var/comms_key = CONFIG_GET(string/comms_key) + if(!comms_key) + return + var/list/message = list() + message["ckey"] = key + message["source"] = "[CONFIG_GET(string/cross_comms_name)]" + message["key"] = comms_key + message["auto_bunker_override"] = TRUE + var/list/servers = CONFIG_GET(keyed_list/cross_server_bunker_override) + if(!length(servers)) + to_chat(C, "AUTOBUNKER: No servers are configured to receive from this one.") + return + var/logtext = "[key] ([key_name(C)]) has initiated an autobunker authentication with linked servers." + message_admins(logtext) + log_admin(logtext) + for(var/name in servers) + var/returned = world.Export("[servers[name]]?[list2params(message)]") + switch(returned) + if("Bad Key") + to_chat(C, "AUTOBuNKER: [name] failed to authenticate with this server.") + if("Function Disabled") + to_chat(C, "AUTOBUNKER: [name] has autobunker receive disabled.") + if("Success") + to_chat(C, "AUTOBUNKER: Successfully authenticated with [name]. Panic bunker bypass granted to [key]..") + else + to_chat(C, "AUTOBUNKER: Unknown error ([name]).") diff --git a/tgstation.dme b/tgstation.dme index 78cce84a0c..21f167de78 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1792,6 +1792,7 @@ #include "code\modules\client\preferences_toggles.dm" #include "code\modules\client\preferences_vr.dm" #include "code\modules\client\verbs\aooc.dm" +#include "code\modules\client\verbs\autobunker.dm" #include "code\modules\client\verbs\etips.dm" #include "code\modules\client\verbs\looc.dm" #include "code\modules\client\verbs\minimap.dm" From d6a7f91b81fb76988a8e69b48c6d03d25c8bab58 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Mon, 29 Jun 2020 04:45:05 -0700 Subject: [PATCH 02/58] Update autobunker.dm --- code/modules/client/verbs/autobunker.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/client/verbs/autobunker.dm b/code/modules/client/verbs/autobunker.dm index 7fba73bda8..8954901eef 100644 --- a/code/modules/client/verbs/autobunker.dm +++ b/code/modules/client/verbs/autobunker.dm @@ -2,6 +2,12 @@ set name = "Auto Authorize Panic Bunker" set desc = "Authorizes your account in the panic bunker of any servers connected to this function." set category = "OOC" + + var/static/lastuse = 0 + if(lastuse + 5 SECONDS > world.time) + to_chat(src, "Function on cooldown, try again in 5 seconds.") + return + lastuse = world.time world.send_cross_server_bunker_overrides(key, src) From 4865831b6e357e3c937cf4d2d21a149e42273159 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 1 Jul 2020 03:28:37 +0100 Subject: [PATCH 03/58] alright this is a bad meme --- code/modules/reagents/chemistry/reagents/food_reagents.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 52fd89e37c..88d9004bbb 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -132,8 +132,8 @@ "You're covered in boiling oil!") M.emote("scream") playsound(M, 'sound/machines/fryer/deep_fryer_emerge.ogg', 25, TRUE) - var/oil_damage = (holder.chem_temp / fry_temperature) * 0.33 //Damage taken per unit - M.adjustFireLoss(min(35, oil_damage * reac_volume)) //Damage caps at 35 + var/oil_damage = max((holder.chem_temp / fry_temperature) * 0.33,1) //Damage taken per unit + M.adjustFireLoss(oil_damage * max(reac_volume,10)) //Damage caps at 10 else ..() return TRUE @@ -866,4 +866,3 @@ taste_mult = 2 taste_description = "fizzy sweetness" value = REAGENT_VALUE_COMMON - \ No newline at end of file From d1f92da74a7a0310ccd335190957c609968457ea Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 1 Jul 2020 03:29:22 +0100 Subject: [PATCH 04/58] 20 is fine if we edit volume --- code/modules/reagents/chemistry/reagents/food_reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 88d9004bbb..6929a374b8 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -133,7 +133,7 @@ M.emote("scream") playsound(M, 'sound/machines/fryer/deep_fryer_emerge.ogg', 25, TRUE) var/oil_damage = max((holder.chem_temp / fry_temperature) * 0.33,1) //Damage taken per unit - M.adjustFireLoss(oil_damage * max(reac_volume,10)) //Damage caps at 10 + M.adjustFireLoss(oil_damage * max(reac_volume,20)) //Damage caps at 20 else ..() return TRUE From 0f0e0298e5838ccb47440e178de185f19790b39a Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 1 Jul 2020 03:34:17 +0100 Subject: [PATCH 05/58] newline at end of file --- code/modules/reagents/chemistry/reagents/food_reagents.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 6929a374b8..f0900796c6 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -866,3 +866,4 @@ taste_mult = 2 taste_description = "fizzy sweetness" value = REAGENT_VALUE_COMMON + From 35ee3e6aeb93a87701c61c5f8787b72a7bdd95cf Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:43:34 +0000 Subject: [PATCH 06/58] No pocket guns, unstupids part names --- .../datums/components/crafting/guncrafting.dm | 38 ++++--------------- 1 file changed, 7 insertions(+), 31 deletions(-) diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index 4626ef69d1..6f95aaa536 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -1,4 +1,4 @@ -k// PARTS // +// PARTS // /obj/item/weaponcrafting icon = 'icons/obj/improvised.dmi' @@ -14,12 +14,12 @@ k// PARTS // icon_state = "durastring" //////////////////////////////// -// KAT IMPROVISED WEAPON PARTS// +// IMPROVISED WEAPON PARTS// //////////////////////////////// /obj/item/weaponcrafting/improvised_parts - name = "Eerie bunch of coloured dots." - desc = "You feel the urge to report to Central that the parent type of guncrafting, which should never appear in this reality, has appeared. Whatever that means." + name = "Debug Improvised Gun Part" //Just make it a normal fucking debug item not debug hypno sissy dot shit + desc = "A badly coded gun part. You should report coders if you see this." icon = 'icons/obj/guns/gun_parts.dmi' icon_state = "palette" @@ -35,33 +35,21 @@ k// PARTS // desc = "A twenty bore shotgun barrel." icon_state = "barrel_shotgun" -/obj/item/weaponcrafting/improvised_parts/barrel_pistol - name = "pistol barrel" - desc = "A pipe with a small diameter and some holes finely cut into it. It fits .32 ACP bullets. Probably." - icon_state = "barrel_pistol" - w_class = WEIGHT_CLASS_SMALL - // RECEIVERS /obj/item/weaponcrafting/improvised_parts/rifle_receiver - name = "bolt action receiver" + name = "rifle receiver" desc = "A crudely constructed receiver to create an improvised bolt-action breechloaded rifle. It's generic enough to modify to create other rifles, potentially." icon_state = "receiver_rifle" w_class = WEIGHT_CLASS_SMALL -/obj/item/weaponcrafting/improvised_parts/pistol_receiver - name = "pistol receiver" - desc = "A receiver to connect house and connects all the parts to make an improvised pistol." - icon_state = "receiver_pistol" - w_class = WEIGHT_CLASS_SMALL - /obj/item/weaponcrafting/improvised_parts/laser_receiver - name = "energy emitter assembly" + name = "laser reciever" desc = "A mixture of components haphazardly wired together to form an energy emitter." icon_state = "laser_assembly" /obj/item/weaponcrafting/improvised_parts/shotgun_receiver - name = "break-action assembly" + name = "shotgun reciever" desc = "An improvised receiver to create a break-action breechloaded shotgun. Parts of this are still useful if you want to make another type of shotgun, however." icon_state = "receiver_shotgun" w_class = WEIGHT_CLASS_SMALL @@ -78,15 +66,3 @@ k// PARTS // name = "wooden firearm body" desc = "A crudely fashioned wooden body to help keep higher calibre improvised weapons from blowing themselves apart." icon_state = "wooden_body" - -/obj/item/weaponcrafting/improvised_parts/wooden_grip - name = "wooden pistol grip" - desc = "A nice wooden grip hollowed out for pistol magazines." - icon_state = "wooden_pistolgrip" - w_class = WEIGHT_CLASS_SMALL - -/obj/item/weaponcrafting/improvised_parts/makeshift_lens - name = "makeshift focusing lens" - desc = "A properly made lens made with actual glassworking tools would perform much better, but this will have to do." - icon_state = "focusing_lens" - w_class = WEIGHT_CLASS_TINY From 6f5066418957b151f766661fd3da696f82797f7a Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:48:10 +0000 Subject: [PATCH 07/58] removes improv handguns --- .../recipes/recipes_weapon_and_ammo.dm | 96 ------------------- 1 file changed, 96 deletions(-) diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm index 177f6fb2b6..a38d78a36b 100644 --- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm +++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm @@ -276,49 +276,6 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/ipistol - name = "Improvised Pistol (.32)" - result = /obj/item/gun/ballistic/automatic/pistol/improvised/nomag - reqs = list(/obj/item/weaponcrafting/improvised_parts/barrel_pistol = 1, - /obj/item/weaponcrafting/improvised_parts/pistol_receiver = 1, - /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, - /obj/item/weaponcrafting/improvised_parts/wooden_grip = 1, - /obj/item/stack/sheet/plastic = 15, - /obj/item/stack/sheet/plasteel = 1) - tools = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_WIRECUTTER) - time = 100 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - -/datum/crafting_recipe/ilaser - name = "Improvised Energy Gun" - result = /obj/item/gun/energy/e_gun/old/improvised - reqs = list(/obj/item/weaponcrafting/improvised_parts/laser_receiver = 1, - /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, - /obj/item/weaponcrafting/improvised_parts/makeshift_lens = 1, - /obj/item/stock_parts/cell = 1, - /obj/item/stack/sheet/metal = 10, - /obj/item/stack/sheet/plasteel = 5, - /obj/item/stack/cable_coil = 10) - tools = list(TOOL_SCREWDRIVER) - time = 100 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - -/datum/crafting_recipe/ilaser/upgraded - name = "Improvised Energy Gun Upgrade" - result = /obj/item/gun/energy/e_gun/old/improvised/upgraded - reqs = list(/obj/item/gun/energy/e_gun/old/improvised = 1, - /obj/item/glasswork/glass_base/lens = 1, - /obj/item/stock_parts/capacitor/quadratic = 2, - /obj/item/stock_parts/micro_laser/ultra = 1, - /obj/item/stock_parts/cell/bluespace = 1, - /obj/item/stack/cable_coil = 5) - tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL) - time = 100 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - ////////////////// ///AMMO CRAFTING// ////////////////// @@ -442,17 +399,6 @@ category = CAT_WEAPONRY subcategory = CAT_AMMO -/datum/crafting_recipe/m32acp - name = ".32ACP Empty Magazine" - result = /obj/item/ammo_box/magazine/m32acp/empty - reqs = list(/obj/item/stack/sheet/metal = 3, - /obj/item/stack/sheet/plasteel = 1, - /obj/item/stack/packageWrap = 1) - tools = list(TOOL_WELDER,TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - //////////////////// // PARTS CRAFTING // //////////////////// @@ -477,16 +423,6 @@ category = CAT_WEAPONRY subcategory = CAT_PARTS -/datum/crafting_recipe/pistol_barrel - name = "Improvised Pistol Barrel" - result = /obj/item/weaponcrafting/improvised_parts/barrel_pistol - reqs = list(/obj/item/pipe = 1, - /obj/item/stack/sheet/plasteel = 1) - tools = list(TOOL_WELDER,TOOL_SAW) - time = 150 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - // RECEIVERS /datum/crafting_recipe/rifle_receiver @@ -509,28 +445,6 @@ category = CAT_WEAPONRY subcategory = CAT_PARTS -/datum/crafting_recipe/pistol_receiver - name = "Improvised Pistol Receiver" - result = /obj/item/weaponcrafting/improvised_parts/pistol_receiver - reqs = list(/obj/item/stack/sheet/metal = 5, - /obj/item/stack/sheet/plasteel = 1) - tools = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_SAW) - time = 50 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - -/datum/crafting_recipe/laser_receiver - name = "Energy Weapon Assembly" - result = /obj/item/weaponcrafting/improvised_parts/laser_receiver - reqs = list(/obj/item/stack/sheet/metal = 10, - /obj/item/stock_parts/capacitor = 2, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/assembly/prox_sensor = 1) - tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL, TOOL_WELDER) // Prox sensor and multitool for the circuit board, welder for extremely ghetto soldering. - time = 150 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - // MISC /datum/crafting_recipe/trigger_assembly @@ -542,13 +456,3 @@ time = 150 category = CAT_WEAPONRY subcategory = CAT_PARTS - -/datum/crafting_recipe/makeshift_lens - name = "Makeshift Lens" - result = /obj/item/weaponcrafting/improvised_parts/makeshift_lens - reqs = list(/obj/item/stack/sheet/metal = 1, - /obj/item/stack/sheet/glass = 2) - tools = list(TOOL_WELDER) // Glassmaking lets you make non-makeshift lenses. - time = 50 - category = CAT_WEAPONRY - subcategory = CAT_PARTS From 4c460278b4accb1d7a3a1444cc687e688a085447 Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:52:09 +0000 Subject: [PATCH 08/58] removes improv handgun spawns --- code/game/objects/effects/spawners/lootdrop.dm | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 2c7f701a6e..86bcc107e9 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -668,13 +668,9 @@ loot = list("" = 50, /obj/item/weaponcrafting/improvised_parts/barrel_rifle = 10, /obj/item/weaponcrafting/improvised_parts/barrel_shotgun = 5, - /obj/item/weaponcrafting/improvised_parts/barrel_pistol = 5, /obj/item/weaponcrafting/improvised_parts/rifle_receiver = 10, /obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 3, - /obj/item/weaponcrafting/improvised_parts/pistol_receiver = 3, - /obj/item/weaponcrafting/improvised_parts/laser_receiver = 1, /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 10, - /obj/item/weaponcrafting/improvised_parts/makeshift_lens = 3, ) /obj/effect/spawner/lootdrop/weapon_parts @@ -683,11 +679,8 @@ spawn_on_turf = FALSE loot = list("" = 75, /obj/item/weaponcrafting/improvised_parts/barrel_rifle = 5, - /obj/item/weaponcrafting/improvised_parts/barrel_pistol = 5, /obj/item/weaponcrafting/improvised_parts/rifle_receiver = 5, - /obj/item/weaponcrafting/improvised_parts/pistol_receiver = 2, /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 5, - /obj/item/weaponcrafting/improvised_parts/makeshift_lens = 3, ) /obj/effect/spawner/lootdrop/ammo @@ -695,8 +688,6 @@ lootcount = 1 spawn_on_turf = FALSE loot = list("" = 25, - /obj/item/ammo_box/c32mm = 15, - /obj/item/ammo_box/r32mm = 15, /obj/item/ammo_box/magazine/wt550m9 = 1, /obj/item/ammo_casing/shotgun/buckshot = 7, /obj/item/ammo_casing/shotgun/rubbershot = 7, @@ -709,8 +700,6 @@ lootcount = 1 spawn_on_turf = FALSE loot = list("" = 50, - /obj/item/ammo_box/c32mm = 7, - /obj/item/ammo_box/r32mm = 7, /obj/item/ammo_box/magazine/wt550m9 = 2, /obj/item/ammo_casing/shotgun/buckshot = 10, /obj/item/ammo_casing/shotgun/rubbershot = 10, From ed017cc22ad97a35c9634b7bb20c99059294a627 Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:53:08 +0000 Subject: [PATCH 09/58] Update sheet_types.dm --- code/game/objects/items/stacks/sheets/sheet_types.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index f0a57fddb2..705cbae8b0 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -242,7 +242,6 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ null, \ new/datum/stack_recipe("wooden firearm body", /obj/item/weaponcrafting/improvised_parts/wooden_body, 10, time = 40), \ new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40), \ - new/datum/stack_recipe("pistol grip", /obj/item/weaponcrafting/improvised_parts/wooden_grip, 5, time = 40), \ new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \ new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wood, 2, time = 30), \ new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \ From 36592431a90d54c55c625540b3bf756d79a87a76 Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:53:54 +0000 Subject: [PATCH 10/58] Update pistol.dm --- .../projectiles/ammunition/ballistic/pistol.dm | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index 2077b108d7..07f3b4c997 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -51,17 +51,3 @@ desc = "A .50AE bullet casing." caliber = ".50" projectile_type = /obj/item/projectile/bullet/a50AE - -// .32 ACP (Improvised Pistol) - -/obj/item/ammo_casing/c32acp - name = ".32 bullet casing" - desc = "A .32 bullet casing." - caliber = "c32acp" - projectile_type = /obj/item/projectile/bullet/c32acp - -/obj/item/ammo_casing/r32acp - name = ".32 rubber bullet casing" - desc = "A .32 rubber bullet casing." - caliber = "c32acp" - projectile_type = /obj/item/projectile/bullet/r32acp From 6ec2cba2bef25fe9ade5a34f3bc51e4d1c8c5197 Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:54:42 +0000 Subject: [PATCH 11/58] Update laser.dm --- code/modules/projectiles/ammunition/energy/laser.dm | 9 --------- 1 file changed, 9 deletions(-) diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index 492b91ec2d..174645dd11 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -12,15 +12,6 @@ e_cost = 200 select_name = "kill" -/obj/item/ammo_casing/energy/lasergun/improvised - projectile_type = /obj/item/projectile/beam/weak/improvised - e_cost = 200 - select_name = "kill" - -/obj/item/ammo_casing/energy/lasergun/improvised/upgraded - projectile_type = /obj/item/projectile/beam/weak - e_cost = 100 - /obj/item/ammo_casing/energy/laser/hos e_cost = 100 From 6a48b9199f30b26d5a0ee14ab180487cb7bc31f6 Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:55:42 +0000 Subject: [PATCH 12/58] Update ammo_boxes.dm --- .../projectiles/boxes_magazines/ammo_boxes.dm | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 86d66ec354..e4674f4f4c 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -55,18 +55,6 @@ desc = "Designed to quickly reload revolvers. These rounds are manufactured within extremely tight tolerances, making them easy to show off trickshots with." ammo_type = /obj/item/ammo_casing/c38/match -/obj/item/ammo_box/c32mm - name = "ammo box (.32 acp)" - desc = "Lethal .32 acp bullets, there's forty in the box." - ammo_type = /obj/item/ammo_casing/c32acp - max_ammo = 40 - -/obj/item/ammo_box/r32mm - name = "ammo box (rubber .32 acp)" - desc = "Non-lethal .32 acp bullets, there's forty in the box." - ammo_type = /obj/item/ammo_casing/r32acp - max_ammo = 40 - /obj/item/ammo_box/c9mm name = "ammo box (9mm)" icon_state = "9mmbox" From d9e5847b8f079360da141f941be3d681f3b1da73 Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:56:13 +0000 Subject: [PATCH 13/58] Update pistol.dm --- .../projectiles/boxes_magazines/external/pistol.dm | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/code/modules/projectiles/boxes_magazines/external/pistol.dm b/code/modules/projectiles/boxes_magazines/external/pistol.dm index 1852b839f4..63b0483875 100644 --- a/code/modules/projectiles/boxes_magazines/external/pistol.dm +++ b/code/modules/projectiles/boxes_magazines/external/pistol.dm @@ -66,15 +66,3 @@ caliber = ".50" max_ammo = 7 multiple_sprites = 1 - -/obj/item/ammo_box/magazine/m32acp - name = "pistol magazine (.32)" - desc = "A crudely construction pistol magazine that holds .32 ACP rounds. It looks like it can only fit eight bullets." - icon_state = "32acp" - ammo_type = /obj/item/ammo_casing/c32acp - caliber = "c32acp" - max_ammo = 8 - multiple_sprites = 2 - -/obj/item/ammo_box/magazine/m32acp/empty - start_empty = 1 From 550aa405e58f378b1c38844857d4c30b506dccb8 Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:56:43 +0000 Subject: [PATCH 14/58] Update pistol.dm --- .../modules/projectiles/guns/ballistic/pistol.dm | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index 319ec16345..cdaadb5c3b 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -156,19 +156,3 @@ name = "Syndicate Anti Tank Pistol" desc = "A massively impractical and silly monstrosity of a pistol that fires .50 calliber rounds. The recoil is likely to dislocate a variety of joints without proper bracing." pin = /obj/item/firing_pin/implant/pindicate - -////////////Improvised Pistol//////////// - -/obj/item/gun/ballistic/automatic/pistol/improvised - name = "Improvised Pistol" - desc = "An improvised pocket-sized pistol that fires .32 calibre rounds. It looks incredibly flimsy." - icon_state = "ipistol" - item_state = "pistol" - mag_type = /obj/item/ammo_box/magazine/m32acp - fire_delay = 7.5 - can_suppress = FALSE - w_class = WEIGHT_CLASS_SMALL - spread = 15 // Keep the spread between 15 and 20. This hardlocks it into being a mid-range pistol, the magazine size means you're allowed to miss. Fills the mid-range niche that slugs/rifle and buckshot doesn't fill. - -/obj/item/gun/ballistic/automatic/pistol/improvised/nomag - spawnwithmagazine = FALSE // For crafting as you shouldn't get eight bullets for free otherwise people will reaper reload. From baf41d828a7be8a509b6ff7609ca37b7532deb7f Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:57:35 +0000 Subject: [PATCH 15/58] removes improv laser --- code/modules/projectiles/guns/energy/laser.dm | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index e64da116f3..83c143531d 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -241,19 +241,3 @@ process_fire(target, user, TRUE, params) -//////////////// -// IMPROVISED // -//////////////// - -/obj/item/gun/energy/e_gun/old/improvised - name = "improvised energy rifle" - desc = "A crude imitation of an energy gun. It works, however the beams are poorly focused and most of the energy is wasted before it reaches the target. Welp, it still burns things." - icon_state = "improvised" - ammo_x_offset = 1 - shaded_charge = 1 - ammo_type = list(/obj/item/ammo_casing/energy/lasergun/improvised) - -/obj/item/gun/energy/e_gun/old/improvised/upgraded - name = "makeshift energy rifle" - desc = "The new lens and upgraded parts gives this a higher capacity and more energy output, however, the shoddy construction still leaves it inferior to Nanotrasen's own energy weapons." - ammo_type = list(/obj/item/ammo_casing/energy/lasergun/improvised/upgraded) From a3961a642c29307e64de3b50f32aa0ef4025e52c Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:57:48 +0000 Subject: [PATCH 16/58] removes improv laser --- code/modules/projectiles/guns/energy/laser.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 83c143531d..72ac9620b5 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -240,4 +240,3 @@ chambered.BB.damage *= 5 process_fire(target, user, TRUE, params) - From 346007b4fbdf13d3d058697febd82e95357b786b Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 08:58:27 +0000 Subject: [PATCH 17/58] Update beams.dm --- code/modules/projectiles/projectile/beams.dm | 3 --- 1 file changed, 3 deletions(-) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index d95c3b5028..2f12f0f69b 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -39,9 +39,6 @@ /obj/item/projectile/beam/weak damage = 15 -/obj/item/projectile/beam/weak/improvised - damage = 10 - /obj/item/projectile/beam/weak/penetrator armour_penetration = 50 From 5c7c300bf0bf51e5cf41c82481fd39f60c51e1bd Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Wed, 1 Jul 2020 04:58:44 -0400 Subject: [PATCH 18/58] these do nothing --- .../game/objects/effects/spawners/lootdrop.dm | 87 ------------------- 1 file changed, 87 deletions(-) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 2c7f701a6e..6155454427 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -644,90 +644,3 @@ /obj/effect/spawner/lootdrop/glowstick/no_turf spawn_on_turf = FALSE - -// Random Parts - -/obj/effect/spawner/lootdrop/stock_parts - name = "random stock parts spawner" - lootcount = 1 - loot = list( - /obj/item/stock_parts/capacitor, - /obj/item/stock_parts/scanning_module, - /obj/item/stock_parts/manipulator, - /obj/item/stock_parts/micro_laser, - /obj/item/stock_parts/matter_bin, - /obj/item/stock_parts/cell - ) - -// Random Weapon Parts - -/obj/effect/spawner/lootdrop/weapon_parts - name = "random weapon parts spawner 50%" - lootcount = 1 - spawn_on_turf = FALSE - loot = list("" = 50, - /obj/item/weaponcrafting/improvised_parts/barrel_rifle = 10, - /obj/item/weaponcrafting/improvised_parts/barrel_shotgun = 5, - /obj/item/weaponcrafting/improvised_parts/barrel_pistol = 5, - /obj/item/weaponcrafting/improvised_parts/rifle_receiver = 10, - /obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 3, - /obj/item/weaponcrafting/improvised_parts/pistol_receiver = 3, - /obj/item/weaponcrafting/improvised_parts/laser_receiver = 1, - /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 10, - /obj/item/weaponcrafting/improvised_parts/makeshift_lens = 3, - ) - -/obj/effect/spawner/lootdrop/weapon_parts - name = "random weapon parts spawner 25%" - lootcount = 1 - spawn_on_turf = FALSE - loot = list("" = 75, - /obj/item/weaponcrafting/improvised_parts/barrel_rifle = 5, - /obj/item/weaponcrafting/improvised_parts/barrel_pistol = 5, - /obj/item/weaponcrafting/improvised_parts/rifle_receiver = 5, - /obj/item/weaponcrafting/improvised_parts/pistol_receiver = 2, - /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 5, - /obj/item/weaponcrafting/improvised_parts/makeshift_lens = 3, - ) - -/obj/effect/spawner/lootdrop/ammo - name = "random ammo 75%" - lootcount = 1 - spawn_on_turf = FALSE - loot = list("" = 25, - /obj/item/ammo_box/c32mm = 15, - /obj/item/ammo_box/r32mm = 15, - /obj/item/ammo_box/magazine/wt550m9 = 1, - /obj/item/ammo_casing/shotgun/buckshot = 7, - /obj/item/ammo_casing/shotgun/rubbershot = 7, - /obj/item/ammo_casing/a762 = 15, - /obj/item/ammo_box/a762 = 15, - ) - -/obj/effect/spawner/lootdrop/ammo/fiftypercent - name = "random ammo 50%" - lootcount = 1 - spawn_on_turf = FALSE - loot = list("" = 50, - /obj/item/ammo_box/c32mm = 7, - /obj/item/ammo_box/r32mm = 7, - /obj/item/ammo_box/magazine/wt550m9 = 2, - /obj/item/ammo_casing/shotgun/buckshot = 10, - /obj/item/ammo_casing/shotgun/rubbershot = 10, - /obj/item/ammo_casing/a762 = 7, - /obj/item/ammo_box/a762 = 7, - ) - -/obj/effect/spawner/lootdrop/ammo/shotgun - name = "random ammo 50%" - lootcount = 1 - spawn_on_turf = FALSE - loot = list("" = 50, - /obj/item/ammo_box/shotgun/loaded/buckshot = 5, - /obj/item/ammo_box/shotgun/loaded/beanbag = 5, - /obj/item/ammo_box/shotgun/loaded/incendiary = 5, - /obj/item/ammo_casing/shotgun/buckshot = 8, - /obj/item/ammo_casing/shotgun/rubbershot = 9, - /obj/item/ammo_casing/shotgun = 8, - /obj/item/ammo_casing/shotgun/incendiary = 10, - ) From e03112d1dc745c6381338c288a3db31048ef5486 Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Wed, 1 Jul 2020 04:59:59 -0400 Subject: [PATCH 19/58] these --- code/modules/projectiles/ammunition/energy/laser.dm | 9 --------- 1 file changed, 9 deletions(-) diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index 492b91ec2d..174645dd11 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -12,15 +12,6 @@ e_cost = 200 select_name = "kill" -/obj/item/ammo_casing/energy/lasergun/improvised - projectile_type = /obj/item/projectile/beam/weak/improvised - e_cost = 200 - select_name = "kill" - -/obj/item/ammo_casing/energy/lasergun/improvised/upgraded - projectile_type = /obj/item/projectile/beam/weak - e_cost = 100 - /obj/item/ammo_casing/energy/laser/hos e_cost = 100 From 67b5efbce089ca231b3bc7451e2923cea4b43252 Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 09:03:48 +0000 Subject: [PATCH 20/58] Update pistol.dm --- .../modules/projectiles/projectile/bullets/pistol.dm | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/code/modules/projectiles/projectile/bullets/pistol.dm b/code/modules/projectiles/projectile/bullets/pistol.dm index 62ff4adb11..38c9c9f7d9 100644 --- a/code/modules/projectiles/projectile/bullets/pistol.dm +++ b/code/modules/projectiles/projectile/bullets/pistol.dm @@ -48,15 +48,3 @@ L.Sleeping(300) else L.adjustStaminaLoss(25) - -// .32 ACP (Improvised Pistol) - -/obj/item/projectile/bullet/c32acp - name = ".32 bullet" - damage = 13 - -/obj/item/projectile/bullet/r32acp - name = ".32 rubber bullet" - damage = 3 - eyeblur = 1 - stamina = 20 From 327a36f8bd5093bb1bb9b25db5aaae0d2df85f6c Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 09:06:29 +0000 Subject: [PATCH 21/58] removes obselete autolathe designs --- .../autolathe_designs_sec_and_hacked.dm | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm index 9768d80a59..61d0594d3b 100644 --- a/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm @@ -30,14 +30,6 @@ build_path = /obj/item/ammo_box/c38 category = list("initial", "Security") -/datum/design/r32acp - name = "Rubber Pistol Bullet (.32)" - id = "r32acp" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 250) - build_path = /obj/item/ammo_casing/r32acp - category = list("initial", "Security") - ///////////////// ///Hacked Gear // ///////////////// @@ -206,22 +198,3 @@ build_path = /obj/item/clothing/head/foilhat category = list("hacked", "Misc") -/datum/design/c32acp - name = "Pistol Bullet (.32)" - id = "c32acp" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500) - build_path = /obj/item/ammo_casing/c32acp - category = list("hacked", "Security") - -///////////////// -// Magazines // -///////////////// - -/datum/design/m32acp - name = "Empty .32 Magazine" - id = "m32acp" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 10000) - build_path = /obj/item/ammo_box/magazine/m32acp/empty - category = list("hacked", "Security") From 8e25b90d54c8bdbbd9664aa8456d0c9be36fe886 Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Wed, 1 Jul 2020 09:08:01 +0000 Subject: [PATCH 22/58] removes obselete part --- .../autolathe_designs_tcomms_and_misc.dm | 8 -------- 1 file changed, 8 deletions(-) diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm index 3c9c8f9aca..539232bbcd 100644 --- a/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm @@ -289,11 +289,3 @@ materials = list(/datum/material/iron = 6500, /datum/material/glass = 50) build_path = /obj/item/weaponcrafting/improvised_parts/trigger_assembly category = list("initial", "Misc") - -/datum/design/focusing_lens - name = "Makeshift Lens" - id = "makeshift_lens" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/glass = 4000) - build_path = /obj/item/weaponcrafting/improvised_parts/makeshift_lens - category = list("initial", "Misc") From 1f38c3029cc9c7003b97865b4a425a253b55c1c8 Mon Sep 17 00:00:00 2001 From: kappa-sama Date: Wed, 1 Jul 2020 07:40:43 -0400 Subject: [PATCH 23/58] yeah ok --- .../datums/components/crafting/guncrafting.dm | 47 +----- .../recipes/recipes_weapon_and_ammo.dm | 138 ++---------------- .../items/stacks/sheets/sheet_types.dm | 4 +- code/game/objects/items/tools/saw.dm | 47 ------ .../projectiles/guns/ballistic/revolver.dm | 7 +- code/modules/projectiles/guns/energy/laser.dm | 17 --- code/modules/projectiles/projectile/beams.dm | 3 - .../autolathe_designs_tools.dm | 8 - 8 files changed, 19 insertions(+), 252 deletions(-) delete mode 100644 code/game/objects/items/tools/saw.dm diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index 4626ef69d1..32bc92b582 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -19,50 +19,21 @@ k// PARTS // /obj/item/weaponcrafting/improvised_parts name = "Eerie bunch of coloured dots." - desc = "You feel the urge to report to Central that the parent type of guncrafting, which should never appear in this reality, has appeared. Whatever that means." + desc = "This should not be here. Report this showing up as a bug on the github." icon = 'icons/obj/guns/gun_parts.dmi' icon_state = "palette" -// BARRELS - -/obj/item/weaponcrafting/improvised_parts/barrel_rifle - name = "rifle barrel" - desc = "A pipe with a diameter just the right size to fire 7.62 rounds out of." - icon_state = "barrel_rifle" - -/obj/item/weaponcrafting/improvised_parts/barrel_shotgun - name = "shotgun barrel" - desc = "A twenty bore shotgun barrel." - icon_state = "barrel_shotgun" - -/obj/item/weaponcrafting/improvised_parts/barrel_pistol - name = "pistol barrel" - desc = "A pipe with a small diameter and some holes finely cut into it. It fits .32 ACP bullets. Probably." - icon_state = "barrel_pistol" - w_class = WEIGHT_CLASS_SMALL - // RECEIVERS /obj/item/weaponcrafting/improvised_parts/rifle_receiver name = "bolt action receiver" - desc = "A crudely constructed receiver to create an improvised bolt-action breechloaded rifle. It's generic enough to modify to create other rifles, potentially." + desc = "A crudely constructed receiver to create an improvised bolt-action breechloaded rifle." // removed some text implying that the item had more uses than it does icon_state = "receiver_rifle" w_class = WEIGHT_CLASS_SMALL -/obj/item/weaponcrafting/improvised_parts/pistol_receiver - name = "pistol receiver" - desc = "A receiver to connect house and connects all the parts to make an improvised pistol." - icon_state = "receiver_pistol" - w_class = WEIGHT_CLASS_SMALL - -/obj/item/weaponcrafting/improvised_parts/laser_receiver - name = "energy emitter assembly" - desc = "A mixture of components haphazardly wired together to form an energy emitter." - icon_state = "laser_assembly" - /obj/item/weaponcrafting/improvised_parts/shotgun_receiver name = "break-action assembly" - desc = "An improvised receiver to create a break-action breechloaded shotgun. Parts of this are still useful if you want to make another type of shotgun, however." + desc = "An improvised receiver to create a break-action breechloaded shotgun." // read above icon_state = "receiver_shotgun" w_class = WEIGHT_CLASS_SMALL @@ -78,15 +49,3 @@ k// PARTS // name = "wooden firearm body" desc = "A crudely fashioned wooden body to help keep higher calibre improvised weapons from blowing themselves apart." icon_state = "wooden_body" - -/obj/item/weaponcrafting/improvised_parts/wooden_grip - name = "wooden pistol grip" - desc = "A nice wooden grip hollowed out for pistol magazines." - icon_state = "wooden_pistolgrip" - w_class = WEIGHT_CLASS_SMALL - -/obj/item/weaponcrafting/improvised_parts/makeshift_lens - name = "makeshift focusing lens" - desc = "A properly made lens made with actual glassworking tools would perform much better, but this will have to do." - icon_state = "focusing_lens" - w_class = WEIGHT_CLASS_TINY diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm index 177f6fb2b6..ac63fcae7d 100644 --- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm +++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm @@ -248,10 +248,10 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/ishotgun +/datum/crafting_recipe/ishotgun // smaller and more versatile gun requires some better materials name = "Improvised Shotgun" result = /obj/item/gun/ballistic/revolver/doublebarrel/improvised - reqs = list(/obj/item/weaponcrafting/improvised_parts/barrel_shotgun = 1, + reqs = list(/obj/item/pipe = 2, // putting a large amount of meaningless timegates by forcing people to turn base resources into upgraded resources kinda sucks /obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 1, /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, /obj/item/weaponcrafting/improvised_parts/wooden_body = 1, @@ -262,10 +262,10 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/irifle +/datum/crafting_recipe/irifle // larger and less versatile gun, but a bit easier to make name = "Improvised Rifle (7.62mm)" result = /obj/item/gun/ballistic/shotgun/boltaction/improvised - reqs = list(/obj/item/weaponcrafting/improvised_parts/barrel_rifle = 1, + reqs = list(/obj/item/pipe = 2, // above /obj/item/weaponcrafting/improvised_parts/rifle_receiver = 1, /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, /obj/item/weaponcrafting/improvised_parts/wooden_body = 1, @@ -276,49 +276,6 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/ipistol - name = "Improvised Pistol (.32)" - result = /obj/item/gun/ballistic/automatic/pistol/improvised/nomag - reqs = list(/obj/item/weaponcrafting/improvised_parts/barrel_pistol = 1, - /obj/item/weaponcrafting/improvised_parts/pistol_receiver = 1, - /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, - /obj/item/weaponcrafting/improvised_parts/wooden_grip = 1, - /obj/item/stack/sheet/plastic = 15, - /obj/item/stack/sheet/plasteel = 1) - tools = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_WIRECUTTER) - time = 100 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - -/datum/crafting_recipe/ilaser - name = "Improvised Energy Gun" - result = /obj/item/gun/energy/e_gun/old/improvised - reqs = list(/obj/item/weaponcrafting/improvised_parts/laser_receiver = 1, - /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, - /obj/item/weaponcrafting/improvised_parts/makeshift_lens = 1, - /obj/item/stock_parts/cell = 1, - /obj/item/stack/sheet/metal = 10, - /obj/item/stack/sheet/plasteel = 5, - /obj/item/stack/cable_coil = 10) - tools = list(TOOL_SCREWDRIVER) - time = 100 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - -/datum/crafting_recipe/ilaser/upgraded - name = "Improvised Energy Gun Upgrade" - result = /obj/item/gun/energy/e_gun/old/improvised/upgraded - reqs = list(/obj/item/gun/energy/e_gun/old/improvised = 1, - /obj/item/glasswork/glass_base/lens = 1, - /obj/item/stock_parts/capacitor/quadratic = 2, - /obj/item/stock_parts/micro_laser/ultra = 1, - /obj/item/stock_parts/cell/bluespace = 1, - /obj/item/stack/cable_coil = 5) - tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL) - time = 100 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - ////////////////// ///AMMO CRAFTING// ////////////////// @@ -442,94 +399,31 @@ category = CAT_WEAPONRY subcategory = CAT_AMMO -/datum/crafting_recipe/m32acp - name = ".32ACP Empty Magazine" - result = /obj/item/ammo_box/magazine/m32acp/empty - reqs = list(/obj/item/stack/sheet/metal = 3, - /obj/item/stack/sheet/plasteel = 1, - /obj/item/stack/packageWrap = 1) - tools = list(TOOL_WELDER,TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - //////////////////// // PARTS CRAFTING // //////////////////// -// BARRELS - -/datum/crafting_recipe/rifle_barrel - name = "Improvised Rifle Barrel" - result = /obj/item/weaponcrafting/improvised_parts/barrel_rifle - reqs = list(/obj/item/pipe = 2) - tools = list(TOOL_WELDER,TOOL_SAW) - time = 150 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - -/datum/crafting_recipe/shotgun_barrel - name = "Improvised Shotgun Barrel" - result = /obj/item/weaponcrafting/improvised_parts/barrel_shotgun - reqs = list(/obj/item/pipe = 2) - tools = list(TOOL_WELDER,TOOL_SAW) - time = 150 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - -/datum/crafting_recipe/pistol_barrel - name = "Improvised Pistol Barrel" - result = /obj/item/weaponcrafting/improvised_parts/barrel_pistol - reqs = list(/obj/item/pipe = 1, - /obj/item/stack/sheet/plasteel = 1) - tools = list(TOOL_WELDER,TOOL_SAW) - time = 150 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - // RECEIVERS /datum/crafting_recipe/rifle_receiver name = "Improvised Rifle Receiver" result = /obj/item/weaponcrafting/improvised_parts/rifle_receiver - reqs = list(/obj/item/stack/sheet/metal = 10, - /obj/item/stack/sheet/plasteel = 1) + reqs = list(/obj/item/stack/sheet/metal = 15) // you can carry multiple shotguns tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) - time = 50 + time = 25 category = CAT_WEAPONRY subcategory = CAT_PARTS /datum/crafting_recipe/shotgun_receiver name = "Improvised Shotgun Receiver" result = /obj/item/weaponcrafting/improvised_parts/shotgun_receiver - reqs = list(/obj/item/stack/sheet/metal = 10, - /obj/item/stack/sheet/plasteel = 1) - tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) // Dual wielding has been removed, plasteel is a soft timesink to obtain for most to make mass production harder. - time = 50 + reqs = list(/obj/item/stack/sheet/metal = 15, + /obj/item/stack/sheet/plasteel = 1) // requires access or hacking since shotgun is better + tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) + time = 25 category = CAT_WEAPONRY subcategory = CAT_PARTS -/datum/crafting_recipe/pistol_receiver - name = "Improvised Pistol Receiver" - result = /obj/item/weaponcrafting/improvised_parts/pistol_receiver - reqs = list(/obj/item/stack/sheet/metal = 5, - /obj/item/stack/sheet/plasteel = 1) - tools = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_SAW) - time = 50 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - -/datum/crafting_recipe/laser_receiver - name = "Energy Weapon Assembly" - result = /obj/item/weaponcrafting/improvised_parts/laser_receiver - reqs = list(/obj/item/stack/sheet/metal = 10, - /obj/item/stock_parts/capacitor = 2, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/assembly/prox_sensor = 1) - tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL, TOOL_WELDER) // Prox sensor and multitool for the circuit board, welder for extremely ghetto soldering. - time = 150 - category = CAT_WEAPONRY - subcategory = CAT_PARTS // MISC @@ -539,16 +433,6 @@ reqs = list(/obj/item/stack/sheet/metal = 3, /obj/item/assembly/igniter = 1) tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) - time = 150 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - -/datum/crafting_recipe/makeshift_lens - name = "Makeshift Lens" - result = /obj/item/weaponcrafting/improvised_parts/makeshift_lens - reqs = list(/obj/item/stack/sheet/metal = 1, - /obj/item/stack/sheet/glass = 2) - tools = list(TOOL_WELDER) // Glassmaking lets you make non-makeshift lenses. - time = 50 + time = 25 category = CAT_WEAPONRY subcategory = CAT_PARTS diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index f0a57fddb2..880a2e7214 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -240,8 +240,8 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, one_per_turf = TRUE, on_floor = TRUE),\ )), null, \ - new/datum/stack_recipe("wooden firearm body", /obj/item/weaponcrafting/improvised_parts/wooden_body, 10, time = 40), \ - new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40), \ + new/datum/stack_recipe("wooden firearm body", /obj/item/weaponcrafting/improvised_parts/wooden_body, 10, time = 20), \ // twice as costly to make an impro gun as before, but still takes similar amount of time + new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 20), \ new/datum/stack_recipe("pistol grip", /obj/item/weaponcrafting/improvised_parts/wooden_grip, 5, time = 40), \ new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \ new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wood, 2, time = 30), \ diff --git a/code/game/objects/items/tools/saw.dm b/code/game/objects/items/tools/saw.dm deleted file mode 100644 index aab59c00be..0000000000 --- a/code/game/objects/items/tools/saw.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/item/hatchet/saw - name = "handsaw" - desc = "A very sharp handsaw, it's compact." - icon = 'icons/obj/tools.dmi' - icon_state = "saw" - item_state = "sawhandle_greyscale" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - tool_behaviour = TOOL_SAW - force = 10 - throwforce = 8 - throw_speed = 3 - throw_range = 5 - custom_materials = list(/datum/material/iron = 5000) - attack_verb = list("sawed", "sliced", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - var/random_color = TRUE //code taken from screwdrivers.dm; cool handles are cool. - var/static/list/saw_colors = list( - "blue" = rgb(24, 97, 213), - "red" = rgb(255, 0, 0), - "pink" = rgb(213, 24, 141), - "brown" = rgb(160, 82, 18), - "green" = rgb(14, 127, 27), - "cyan" = rgb(24, 162, 213), - "yellow" = rgb(255, 165, 0) - ) - -/obj/item/hatchet/saw/Initialize() - . = ..() - if(random_color) - icon_state = "sawhandle_greyscale" - var/our_color = pick(saw_colors) - add_atom_colour(saw_colors[our_color], FIXED_COLOUR_PRIORITY) - update_icon() - if(prob(75)) - pixel_y = rand(-8, 8) - -/obj/item/hatchet/saw/update_overlays() - . = ..() - if(!random_color) //icon override - return - var/mutable_appearance/base_overlay = mutable_appearance(icon, "sawblade") - base_overlay.appearance_flags = RESET_COLOR - . += base_overlay - -// END \ No newline at end of file diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index f34dbc6abc..06b66ed73e 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -319,11 +319,11 @@ /obj/item/gun/ballistic/revolver/doublebarrel/improvised name = "improvised shotgun" - desc = "A shoddy break-action breechloaded shotgun. Its lacklustre construction will probably result in it hurting people less than a normal shotgun." + desc = "A shoddy break-action breechloaded shotgun. Its lacklustre construction shows in its lesser effectiveness." icon_state = "ishotgun" item_state = "shotgun" w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_MEDIUM + weapon_weight = WEAPON_MEDIUM // prevents shooting 2 at once, but doesn't require 2 hands force = 10 slot_flags = null mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised @@ -331,7 +331,6 @@ unique_reskin = null projectile_damage_multiplier = 0.9 var/slung = FALSE - weapon_weight = WEAPON_HEAVY /obj/item/gun/ballistic/revolver/doublebarrel/improvised/attackby(obj/item/A, mob/user, params) ..() @@ -358,7 +357,7 @@ /obj/item/gun/ballistic/revolver/doublebarrel/improvised/sawn name = "sawn-off improvised shotgun" - desc = "The barrel and stock have been sawn and filed down; it can fit in backpacks. You still need two hands to fire this, if you value unbroken wrists." + desc = "The barrel and stock have been sawn and filed down; it can fit in backpacks. You wont want to shoot two of these at once if you value your wrists." icon_state = "ishotgun" item_state = "gun" w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index e64da116f3..72ac9620b5 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -240,20 +240,3 @@ chambered.BB.damage *= 5 process_fire(target, user, TRUE, params) - -//////////////// -// IMPROVISED // -//////////////// - -/obj/item/gun/energy/e_gun/old/improvised - name = "improvised energy rifle" - desc = "A crude imitation of an energy gun. It works, however the beams are poorly focused and most of the energy is wasted before it reaches the target. Welp, it still burns things." - icon_state = "improvised" - ammo_x_offset = 1 - shaded_charge = 1 - ammo_type = list(/obj/item/ammo_casing/energy/lasergun/improvised) - -/obj/item/gun/energy/e_gun/old/improvised/upgraded - name = "makeshift energy rifle" - desc = "The new lens and upgraded parts gives this a higher capacity and more energy output, however, the shoddy construction still leaves it inferior to Nanotrasen's own energy weapons." - ammo_type = list(/obj/item/ammo_casing/energy/lasergun/improvised/upgraded) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index d95c3b5028..2f12f0f69b 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -39,9 +39,6 @@ /obj/item/projectile/beam/weak damage = 15 -/obj/item/projectile/beam/weak/improvised - damage = 10 - /obj/item/projectile/beam/weak/penetrator armour_penetration = 50 diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm index 1bb18482f3..bebf836ce0 100644 --- a/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm @@ -158,11 +158,3 @@ materials = list(/datum/material/iron = 150, /datum/material/glass = 150) build_path = /obj/item/geiger_counter category = list("initial", "Tools") - -/datum/design/saw - name = "Hand Saw" - id = "handsaw" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500) - build_path = /obj/item/hatchet/saw - category = list("initial", "Tools") From 0b0d9ff1a68527897b9623e9bdc2db08db8f7c46 Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Wed, 1 Jul 2020 07:56:55 -0400 Subject: [PATCH 24/58] this --- code/game/objects/items/stacks/sheets/sheet_types.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 3445035e88..4b1c3674f4 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -240,7 +240,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new /datum/stack_recipe("pew (right)", /obj/structure/chair/pew/right, 3, one_per_turf = TRUE, on_floor = TRUE),\ )), null, \ - new/datum/stack_recipe("wooden firearm body", /obj/item/weaponcrafting/improvised_parts/wooden_body, 10, time = 20), \ // twice as costly to make an impro gun as before, but still takes similar amount of time + new/datum/stack_recipe("wooden firearm body", /obj/item/weaponcrafting/improvised_parts/wooden_body, 10, time = 20), \ new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 20), \ new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \ new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wood, 2, time = 30), \ From 1fffd0a60888826f02010dc06f011d98e361b5d9 Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Wed, 1 Jul 2020 08:02:41 -0400 Subject: [PATCH 25/58] 45 seconds lol --- .../components/crafting/recipes/recipes_weapon_and_ammo.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm index 177f6fb2b6..c2045ca468 100644 --- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm +++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm @@ -193,7 +193,7 @@ reqs = list(/obj/item/pipe = 5, /obj/item/stack/sheet/plastic = 15, /obj/item/weaponcrafting/durathread_string = 5) - time = 450 + time = 200 category = CAT_WEAPONRY subcategory = CAT_WEAPON From 49af0d11c7e445d0689bfec5cb0c0319a9f99b7f Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Wed, 1 Jul 2020 08:09:39 -0400 Subject: [PATCH 26/58] string --- code/datums/components/crafting/guncrafting.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index 4626ef69d1..255c80f209 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -8,9 +8,9 @@ k// PARTS // custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 6) icon_state = "riflestock" -/obj/item/weaponcrafting/durathread_string - name = "durathread string" - desc = "A long piece of durathread with some resemblance to cable coil." +/obj/item/weaponcrafting/string + name = "bowstring" + desc = "A long piece of thread with some resemblance to cable coil." icon_state = "durastring" //////////////////////////////// From 9cc6f5aa91b6095221552a207cfec89abf30b2c0 Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Wed, 1 Jul 2020 08:09:43 -0400 Subject: [PATCH 27/58] durathread->string --- code/game/objects/items/stacks/sheets/sheet_types.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index f0a57fddb2..6b484a0775 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -382,6 +382,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ new/datum/stack_recipe("chemistry bag", /obj/item/storage/bag/chemistry, 4), \ new/datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4), \ null, \ + new/datum/stack_recipe("bowstring", /obj/item/weaponcrafting/string, 1, time = 40), \ new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6), \ new/datum/stack_recipe("rag", /obj/item/reagent_containers/rag, 1), \ new/datum/stack_recipe("towel", /obj/item/reagent_containers/rag/towel, 3), \ @@ -429,7 +430,6 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \ new/datum/stack_recipe("durathread beret", /obj/item/clothing/head/beret/durathread, 2, time = 40), \ new/datum/stack_recipe("durathread beanie", /obj/item/clothing/head/beanie/durathread, 2, time = 40), \ new/datum/stack_recipe("durathread bandana", /obj/item/clothing/mask/bandana/durathread, 1, time = 25), \ - new/datum/stack_recipe("durathread string", /obj/item/weaponcrafting/durathread_string, 1, time = 40), \ )) /obj/item/stack/sheet/durathread From 406af65d935d3c87a630da132fdc7ed5f81ce263 Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Wed, 1 Jul 2020 08:12:35 -0400 Subject: [PATCH 28/58] you need 5 of these --- code/game/objects/items/stacks/sheets/sheet_types.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 6b484a0775..f8786a7437 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -382,7 +382,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ new/datum/stack_recipe("chemistry bag", /obj/item/storage/bag/chemistry, 4), \ new/datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4), \ null, \ - new/datum/stack_recipe("bowstring", /obj/item/weaponcrafting/string, 1, time = 40), \ + new/datum/stack_recipe("string", /obj/item/weaponcrafting/string, 1, time = 10), \ new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6), \ new/datum/stack_recipe("rag", /obj/item/reagent_containers/rag, 1), \ new/datum/stack_recipe("towel", /obj/item/reagent_containers/rag/towel, 3), \ From 73d616b3a481553b1b2c50f3cac6562f6f24230e Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Wed, 1 Jul 2020 08:13:30 -0400 Subject: [PATCH 29/58] more accurate --- code/datums/components/crafting/guncrafting.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index 255c80f209..56e3be8524 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -9,7 +9,7 @@ k// PARTS // icon_state = "riflestock" /obj/item/weaponcrafting/string - name = "bowstring" + name = "wound thread" desc = "A long piece of thread with some resemblance to cable coil." icon_state = "durastring" From 36955950345cad154cd4dc0beb95751db343e2e0 Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Wed, 1 Jul 2020 08:17:13 -0400 Subject: [PATCH 30/58] ammunition --- .../crafting/recipes/recipes_weapon_and_ammo.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm index c2045ca468..540d608bae 100644 --- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm +++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm @@ -192,8 +192,8 @@ result = /obj/item/gun/ballistic/bow/pipe reqs = list(/obj/item/pipe = 5, /obj/item/stack/sheet/plastic = 15, - /obj/item/weaponcrafting/durathread_string = 5) - time = 200 + /obj/item/weaponcrafting/string = 5) + time = 150 category = CAT_WEAPONRY subcategory = CAT_WEAPON @@ -326,9 +326,9 @@ /datum/crafting_recipe/arrow name = "Arrow" result = /obj/item/ammo_casing/caseless/arrow/wood - time = 30 + time = 5 // these only do 15 damage reqs = list(/obj/item/stack/sheet/mineral/wood = 1, - /obj/item/stack/sheet/durathread = 1, + /obj/item/stack/sheet/cloth = 1, /obj/item/stack/rods = 1) // 1 metal sheet = 2 rods = 2 arrows category = CAT_WEAPONRY subcategory = CAT_AMMO @@ -336,7 +336,7 @@ /datum/crafting_recipe/bone_arrow name = "Bone Arrow" result = /obj/item/ammo_casing/caseless/arrow/bone - time = 30 + time = 5 always_availible = FALSE reqs = list(/obj/item/stack/sheet/bone = 1, /obj/item/stack/sheet/sinew = 1, @@ -348,7 +348,7 @@ name = "Ashen Arrow" result = /obj/item/ammo_casing/caseless/arrow/ash tools = list(TOOL_WELDER) - time = 30 + time = 10 // 1.5 seconds minimum per actually worthwhile arrow excluding interface lag always_availible = FALSE reqs = list(/obj/item/ammo_casing/caseless/arrow/wood = 1) category = CAT_WEAPONRY From ad4f909d796cbf1a835647b17f22d215a4665a22 Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Wed, 1 Jul 2020 08:19:27 -0400 Subject: [PATCH 31/58] ashwalkers --- code/datums/components/crafting/recipes/recipes_primal.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/components/crafting/recipes/recipes_primal.dm b/code/datums/components/crafting/recipes/recipes_primal.dm index e646d24018..aaae94df1d 100644 --- a/code/datums/components/crafting/recipes/recipes_primal.dm +++ b/code/datums/components/crafting/recipes/recipes_primal.dm @@ -103,7 +103,7 @@ /datum/crafting_recipe/bone_bow name = "Bone Bow" result = /obj/item/gun/ballistic/bow/ashen - time = 200 + time = 120 // 80+120 = 200 always_availible = FALSE reqs = list(/obj/item/stack/sheet/bone = 8, /obj/item/stack/sheet/sinew = 4) @@ -112,7 +112,7 @@ /datum/crafting_recipe/bow_tablet name = "Sandstone Bow Making Manual" result = /obj/item/book/granter/crafting_recipe/bone_bow - time = 600 //Scribing + time = 200 //Scribing // don't care always_availible = FALSE reqs = list(/obj/item/stack/rods = 1, /obj/item/stack/sheet/mineral/sandstone = 4) From 9a156dffc67faf83d554ba892a4398aabb3d87fa Mon Sep 17 00:00:00 2001 From: YakumoChen Date: Thu, 2 Jul 2020 09:19:53 +0000 Subject: [PATCH 32/58] remove saw from TG.dme --- tgstation.dme | 1 - 1 file changed, 1 deletion(-) diff --git a/tgstation.dme b/tgstation.dme index c43a6de0e4..3e240b3973 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1150,7 +1150,6 @@ #include "code\game\objects\items\tanks\tanks.dm" #include "code\game\objects\items\tanks\watertank.dm" #include "code\game\objects\items\tools\crowbar.dm" -#include "code\game\objects\items\tools\saw.dm" #include "code\game\objects\items\tools\screwdriver.dm" #include "code\game\objects\items\tools\weldingtool.dm" #include "code\game\objects\items\tools\wirecutters.dm" From 6240ade87de96d83005a4715f39052bea8f5e366 Mon Sep 17 00:00:00 2001 From: Sonic121x <64410541+Sonic121x@users.noreply.github.com> Date: Thu, 2 Jul 2020 23:20:01 +0800 Subject: [PATCH 33/58] Add digitigrade version of cmoturtleneck --- code/modules/clothing/under/jobs/medical.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm index f50e5161b6..78a905f897 100644 --- a/code/modules/clothing/under/jobs/medical.dm +++ b/code/modules/clothing/under/jobs/medical.dm @@ -22,7 +22,7 @@ icon_state = "cmoturtle" item_state = "w_suit" alt_covers_chest = TRUE - mutantrace_variation = USE_TAUR_CLIP_MASK + mutantrace_variation = STYLE_DIGITIGRADE|USE_TAUR_CLIP_MASK /obj/item/clothing/under/rank/medical/geneticist desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it." From 4ca695020ab6d5a261c1dbb9f5da796266f4661f Mon Sep 17 00:00:00 2001 From: Sonic121x <64410541+Sonic121x@users.noreply.github.com> Date: Thu, 2 Jul 2020 23:21:31 +0800 Subject: [PATCH 34/58] add adigitigrade version of captain's female formal outfit. --- code/modules/clothing/under/jobs/command.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/under/jobs/command.dm b/code/modules/clothing/under/jobs/command.dm index a614e2fcb3..1bc0f64373 100644 --- a/code/modules/clothing/under/jobs/command.dm +++ b/code/modules/clothing/under/jobs/command.dm @@ -46,4 +46,4 @@ icon_state = "lewdcap" item_state = "lewdcap" can_adjust = FALSE - mutantrace_variation = USE_TAUR_CLIP_MASK + mutantrace_variation = STYLE_DIGITIGRADE|USE_TAUR_CLIP_MASK From bf1544ce8755aab05e94f41b29417d0f0d39488d Mon Sep 17 00:00:00 2001 From: Sonic121x <64410541+Sonic121x@users.noreply.github.com> Date: Thu, 2 Jul 2020 23:26:18 +0800 Subject: [PATCH 35/58] Add a crshued state for soldry soda can. --- icons/obj/janitor.dmi | Bin 27617 -> 27603 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index a157d333b06d43d6ae958f8b628abdf4e5844657..1f520a42bdd5faab3606b86d128ca8566d2112a0 100644 GIT binary patch literal 27603 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 From c082fa4a2839549579450fe627f3e23128f6ff68 Mon Sep 17 00:00:00 2001 From: Sonic121x <64410541+Sonic121x@users.noreply.github.com> Date: Thu, 2 Jul 2020 23:29:21 +0800 Subject: [PATCH 36/58] add a few digitigrade version of uniform. captain's female formal outfit chief medical officer's turtleneck --- icons/mob/clothing/uniform_digi.dmi | Bin 266907 -> 269867 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/clothing/uniform_digi.dmi b/icons/mob/clothing/uniform_digi.dmi index da94f97895bafd05a5d7201867084de9debfd9f0..b1b9ded7f00abbef454e0ebeb8136d4e99372a82 100644 GIT binary patch delta 21191 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̱->i-TSp~II^oATb)-tWpJlF%i_ETcrE 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 From 6fc584518ad3b039e8b04b33ec665660879868e5 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 3 Jul 2020 00:07:30 +0200 Subject: [PATCH 37/58] Fixing (un)equip penalties from obscured inv slots. --- code/game/objects/items/storage/fancy.dm | 8 ++++---- code/modules/clothing/gloves/color.dm | 5 +++-- code/modules/mob/mob.dm | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 821fd52bd1..927a29407c 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -207,18 +207,18 @@ cig_position++ /obj/item/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!ismob(M)) - return + if(M != user || !istype(M)) + return ..() var/obj/item/clothing/mask/cigarette/cig = locate(/obj/item/clothing/mask/cigarette) in contents if(cig) - if(M == user && contents.len > 0 && !user.wear_mask) + if(!user.wear_mask && !(SLOT_WEAR_MASK in M.check_obscured_slots())) var/obj/item/clothing/mask/cigarette/W = cig SEND_SIGNAL(src, COMSIG_TRY_STORAGE_TAKE, W, M) M.equip_to_slot_if_possible(W, SLOT_WEAR_MASK) contents -= W to_chat(user, "You take \a [W] out of the pack.") else - ..() + return ..() else to_chat(user, "There are no [icon_type]s left in the pack.") diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 1b5cd6c7d2..56d6e7d38f 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -23,14 +23,15 @@ if(iscarbon(target) && proximity) var/mob/living/carbon/C = target var/mob/living/carbon/U = user - var/success = C.equip_to_slot_if_possible(new /obj/item/clothing/gloves/color/yellow/sprayon, ITEM_SLOT_GLOVES, TRUE, TRUE) + var/success = C.equip_to_slot_if_possible(new /obj/item/clothing/gloves/color/yellow/sprayon, ITEM_SLOT_GLOVES, TRUE, TRUE, clothing_check = TRUE) if(success) if(C == user) C.visible_message("[U] sprays their hands with glittery rubber!") else C.visible_message("[U] sprays glittery rubber on the hands of [C]!") else - C.visible_message("The rubber fails to stick to [C]'s hands!") + user.visible_message("The rubber fails to stick to [C]'s hands!", + "The rubber fails to stick to [C]'s [(SLOT_GLOVES in C.check_obscured_slots()) ? "unexposed" : ""] hands!") qdel(src) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 0124249baf..fd9afc91cd 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -227,7 +227,7 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA var/obj/item/W = get_active_held_item() if(istype(W)) - if(equip_to_slot_if_possible(W, slot, FALSE, FALSE, FALSE, TRUE)) + if(equip_to_slot_if_possible(W, slot, FALSE, FALSE, FALSE, FALSE, TRUE)) return TRUE if(!W) From 92c846fdbffff90fc7862f36d8d6a4c33506f5d3 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 3 Jul 2020 01:08:28 +0200 Subject: [PATCH 38/58] Improvements to the recent clothing menu toggle hardsuit helmet feature. --- code/modules/clothing/suits/toggles.dm | 20 ++++++++++++------- code/modules/mob/living/carbon/human/human.dm | 18 +++++++++-------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 639f2d3bfb..60f8cc179a 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -164,7 +164,7 @@ RemoveHelmet() ..() -/obj/item/clothing/suit/space/hardsuit/proc/RemoveHelmet() +/obj/item/clothing/suit/space/hardsuit/proc/RemoveHelmet(message = TRUE) if(!helmet) return suittoggled = FALSE @@ -174,16 +174,18 @@ helmet.attack_self(H) H.transferItemToLoc(helmet, src, TRUE) H.update_inv_wear_suit() - to_chat(H, "The helmet on the hardsuit disengages.") + if(message) + to_chat(H, "The helmet on the hardsuit disengages.") playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) else helmet.forceMove(src) + return TRUE /obj/item/clothing/suit/space/hardsuit/dropped(mob/user) ..() RemoveHelmet() -/obj/item/clothing/suit/space/hardsuit/proc/ToggleHelmet() +/obj/item/clothing/suit/space/hardsuit/proc/ToggleHelmet(message = TRUE) var/mob/living/carbon/human/H = loc if(!helmettype) return @@ -192,15 +194,19 @@ if(!suittoggled) if(ishuman(src.loc)) if(H.wear_suit != src) - to_chat(H, "You must be wearing [src] to engage the helmet!") + if(message) + to_chat(H, "You must be wearing [src] to engage the helmet!") return if(H.head) - to_chat(H, "You're already wearing something on your head!") + if(message) + to_chat(H, "You're already wearing something on your head!") return else if(H.equip_to_slot_if_possible(helmet,SLOT_HEAD,0,0,1)) - to_chat(H, "You engage the helmet on the hardsuit.") + if(message) + to_chat(H, "You engage the helmet on the hardsuit.") suittoggled = TRUE H.update_inv_wear_suit() playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) + return TRUE else - RemoveHelmet() + return RemoveHelmet(message) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 8451dc4060..a2d53f6f0a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -227,25 +227,27 @@ SEND_SIGNAL(src, COMSIG_CARBON_EMBED_RIP, I, L) return if(href_list["toggle_helmet"]) - var/hardsuit_head = head && istype(head, /obj/item/clothing/head/helmet/space/hardsuit) + if(!istype(head, /obj/item/clothing/head/helmet/space/hardsuit)) + return + var/obj/item/clothing/head/helmet/space/hardsuit/hardsuit_head = head visible_message("[usr] tries to [hardsuit_head ? "retract" : "extend"] [src]'s helmet.", \ "[usr] tries to [hardsuit_head ? "retract" : "extend"] [src]'s helmet.", \ target = usr, target_message = "You try to [hardsuit_head ? "retract" : "extend"] [src]'s helmet.") - if(!do_mob(usr, src, POCKET_STRIP_DELAY)) + if(!do_mob(usr, src, hardsuit_head ? head.strip_delay : POCKET_STRIP_DELAY)) return - visible_message("[usr] [hardsuit_head ? "retract" : "extend"] [src]'s helmet", \ - "[usr] [hardsuit_head ? "retract" : "extend"] [src]'s helmet", \ - target = usr, target_message = "You [hardsuit_head ? "retract" : "extend"] [src]'s helmet.") - if(!istype(wear_suit, /obj/item/clothing/suit/space/hardsuit)) + if(!istype(wear_suit, /obj/item/clothing/suit/space/hardsuit) || (hardsuit_head ? (!head || head != hardsuit_head) : head)) return var/obj/item/clothing/suit/space/hardsuit/hardsuit = wear_suit //This should be an hardsuit given all our checks - hardsuit.ToggleHelmet() + if(hardsuit.ToggleHelmet(FALSE)) + visible_message("[usr] [hardsuit_head ? "retract" : "extend"] [src]'s helmet", \ + "[usr] [hardsuit_head ? "retract" : "extend"] [src]'s helmet", \ + target = usr, target_message = "You [hardsuit_head ? "retract" : "extend"] [src]'s helmet.") return if(href_list["item"]) var/slot = text2num(href_list["item"]) if(slot in check_obscured_slots()) to_chat(usr, "You can't reach that! Something is covering it.") - return + return if(href_list["pockets"]) var/strip_mod = 1 var/strip_silence = FALSE From 396989f143673ffa7c253b98d6a3d550f311242a Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 3 Jul 2020 01:52:03 +0200 Subject: [PATCH 39/58] Fixes items' used skills list keys missing associated base traits. --- code/_onclick/item_attack.dm | 4 ++-- code/game/objects/items.dm | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 106db7f40a..2084ad4c4f 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -123,7 +123,7 @@ if(totitemdamage) totitemdamage = user.mind.item_action_skills_mod(I, totitemdamage, I.skill_difficulty, SKILL_ATTACK_OBJ, bad_trait) for(var/skill in I.used_skills) - if(!(I.used_skills[skill] & SKILL_TRAIN_ATTACK_OBJ)) + if(!(SKILL_TRAIN_ATTACK_OBJ in I.used_skills[skill])) continue user.mind.auto_gain_experience(skill, I.skill_gain) @@ -192,7 +192,7 @@ if(.) . = user.mind.item_action_skills_mod(I, ., I.skill_difficulty, SKILL_ATTACK_MOB, bad_trait) for(var/skill in I.used_skills) - if(!(I.used_skills[skill] & SKILL_TRAIN_ATTACK_MOB)) + if(!(SKILL_TRAIN_ATTACK_MOB in I.used_skills[skill])) continue user.mind.auto_gain_experience(skill, I.skill_gain) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 9f1b830cf0..d6596581a8 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -179,6 +179,11 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb if(damtype == "brute") hitsound = "swing_hit" + if(used_skills) + for(var/path in used_skills) + var/datum/skill/S = GLOB.skill_datums[path] + LAZYADD(used_skills[path], S.skill_traits) + /obj/item/Destroy() item_flags &= ~DROPDEL //prevent reqdels if(ismob(loc)) @@ -880,7 +885,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb for(var/skill in used_skills) if(!(SKILL_TRAINING_TOOL in used_skills[skill])) continue - user.mind.auto_gain_experience(skill, gain*skill_gain_mult, GET_STANDARD_LVL(max_level)) + user.mind.auto_gain_experience(skill, gain*skill_gain_mult, max_level) return TRUE From f5ffd7d2a998d78c9618cf5506dac3af3f350df6 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 3 Jul 2020 03:00:33 +0200 Subject: [PATCH 40/58] Easing fine tuning of the system. --- code/__DEFINES/skills/defines.dm | 13 +++++++------ code/_onclick/item_attack.dm | 3 ++- code/datums/skills/_skill.dm | 8 ++++++++ code/datums/skills/_skill_holder.dm | 10 ++++------ code/game/objects/items.dm | 5 +++-- code/game/objects/items/grenades/chem_grenade.dm | 2 +- code/game/objects/items/stacks/sheets/glass.dm | 2 +- code/modules/hydroponics/plant_genes.dm | 2 +- code/modules/mining/ores_coins.dm | 2 +- code/modules/mob/living/silicon/robot/robot.dm | 2 +- code/modules/power/lighting.dm | 2 +- code/modules/projectiles/guns/ballistic/revolver.dm | 2 +- code/modules/projectiles/guns/ballistic/shotgun.dm | 2 +- 13 files changed, 32 insertions(+), 23 deletions(-) diff --git a/code/__DEFINES/skills/defines.dm b/code/__DEFINES/skills/defines.dm index 60d2321927..47aaeeb1dc 100644 --- a/code/__DEFINES/skills/defines.dm +++ b/code/__DEFINES/skills/defines.dm @@ -8,12 +8,6 @@ /// Levels #define SKILL_PROGRESSION_LEVEL 4 - -/// Max value of skill for numerical skills -#define SKILL_NUMERICAL_MAX 100 -/// Min value of skill for numerical skills -#define SKILL_NUMERICAL_MIN 0 - // Standard values for job starting skills #define STARTING_SKILL_SURGERY_MEDICAL 35 //out of SKILL_NUMERICAL_MAX @@ -26,6 +20,13 @@ #define DEF_SKILL_GAIN 1 #define SKILL_GAIN_SURGERY_PER_STEP 0.25 +#define STD_USE_TOOL_MULT 1 +#define EASY_USE_TOOL_MULT 0.75 +#define TRIVIAL_USE_TOOL_MULT 0.5 +#define BARE_USE_TOOL_MULT 0.25 + +//multiplier of the difference of max_value and min_value. Mostly for balance purposes between numerical and level-based skills. +#define STD_NUM_SKILL_ITEM_GAIN_MULTI 0.002 //An extra point for each few seconds of delay when using a tool. Before the multiplier. #define SKILL_GAIN_DELAY_DIVISOR 3 SECONDS diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 2084ad4c4f..bef06a69e9 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -194,7 +194,8 @@ for(var/skill in I.used_skills) if(!(SKILL_TRAIN_ATTACK_MOB in I.used_skills[skill])) continue - user.mind.auto_gain_experience(skill, I.skill_gain) + var/datum/skill/S = GLOB.skill_datums[skill] + user.mind.auto_gain_experience(skill, I.skill_gain*S.item_skill_gain_multi) // Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. // Click parameters is the params string from byond Click() code, see that documentation. diff --git a/code/datums/skills/_skill.dm b/code/datums/skills/_skill.dm index e3f1d00ae6..eecf416b1b 100644 --- a/code/datums/skills/_skill.dm +++ b/code/datums/skills/_skill.dm @@ -33,6 +33,10 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums()) var/base_multiplier = 1 /// Value added to the base multiplier depending on overall competency compared to maximum value/level. var/competency_multiplier = 1 + /// Experience gain multiplier gained from using items. + var/item_skill_gain_multi = 1 + /// Skill gain quantisation + var/skill_gain_quantisation = 0.1 /// A list of ways this skill can affect or be affected through actions and skill modifiers. var/list/skill_traits = list(SKILL_SANITY, SKILL_INTELLIGENCE) /// Index of this skill in the UI @@ -108,6 +112,10 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums()) /// Min value of this skill var/min_value = 0 +/datum/skill/numerical/New() + ..() + skill_gain_quantisation = item_skill_gain_multi = item_skill_gain_multi * (max_value - min_value) * STD_NUM_SKILL_ITEM_GAIN_MULTI + /datum/skill/numerical/sanitize_value(new_value) return clamp(new_value, min_value, max_value) diff --git a/code/datums/skills/_skill_holder.dm b/code/datums/skills/_skill_holder.dm index 8357211463..73748417c3 100644 --- a/code/datums/skills/_skill_holder.dm +++ b/code/datums/skills/_skill_holder.dm @@ -91,10 +91,10 @@ CRASH("Invalid set_skill_value call. Use skill typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this. var/datum/skill/S = GLOB.skill_datums[skill] value = S.sanitize_value(value) - skill_holder.need_static_data_update = TRUE if(!isnull(value)) LAZYINITLIST(skill_holder.skills) S.set_skill_value(skill_holder, value, src, silent) + skill_holder.need_static_data_update = TRUE return TRUE return FALSE @@ -120,11 +120,9 @@ CRASH("You cannot auto increment a non numerical(experience skill!") var/current = get_skill_value(skill, FALSE) var/affinity = get_skill_affinity(skill) - var/target_value = current + (value * affinity) - if(maximum) - target_value = min(target_value, maximum) - if(target_value == maximum) //no more experience to gain, early return. - return + var/target_value = round(current + (value * affinity), S.skill_gain_quantisation) + if(maximum && target_value >= maximum) //no more experience to gain, early return. + return boost_skill_value_to(skill, target_value, silent, current) /** diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index d6596581a8..3f44876678 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -840,7 +840,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb // Called when a mob tries to use the item as a tool. // Handles most checks. -/obj/item/proc/use_tool(atom/target, mob/living/user, delay, amount=0, volume=0, datum/callback/extra_checks, skill_gain_mult = 1, max_level = INFINITY) +/obj/item/proc/use_tool(atom/target, mob/living/user, delay, amount=0, volume=0, datum/callback/extra_checks, skill_gain_mult = STD_USE_TOOL_MULT) // No delay means there is no start message, and no reason to call tool_start_check before use_tool. // Run the start check here so we wouldn't have to call it manually. if(!delay && !tool_start_check(user, amount)) @@ -885,7 +885,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb for(var/skill in used_skills) if(!(SKILL_TRAINING_TOOL in used_skills[skill])) continue - user.mind.auto_gain_experience(skill, gain*skill_gain_mult, max_level) + var/datum/skill/S = GLOB.skill_datums[skill] + user.mind.auto_gain_experience(skill, gain*skill_gain_mult*S.item_skill_gain_multi) return TRUE diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index 4ce0e811c3..f06dd634c6 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -97,7 +97,7 @@ to_chat(user, "You add [A] to the [initial(name)] assembly.") else if(stage == EMPTY && istype(I, /obj/item/stack/cable_coil)) - if (I.use_tool(src, user, 0, 1, max_level = JOB_SKILL_BASIC)) + if (I.use_tool(src, user, 0, 1, skill_gain_mult = TRIVIAL_USE_TOOL_MULT)) det_time = 50 // In case the cable_coil was removed and readded. stage_change(WIRED) to_chat(user, "You rig the [initial(name)] assembly.") diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 57af862b69..d4baea2487 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -69,7 +69,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ if (get_amount() < 1 || CC.get_amount() < 5) to_chat(user, "You attach wire to the [name].") var/obj/item/stack/light_w/new_tile = new(user.loc) diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index b18f4396d6..a666a36099 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -392,7 +392,7 @@ /datum/plant_gene/trait/battery/on_attackby(obj/item/reagent_containers/food/snacks/grown/G, obj/item/I, mob/user) if(istype(I, /obj/item/stack/cable_coil)) - if(I.use_tool(src, user, 0, 5, max_level = JOB_SKILL_EXPERT)) + if(I.use_tool(src, user, 0, 5, skill_gain_mult = TRIVIAL_USE_TOOL_MULT)) to_chat(user, "You add some cable to [G] and slide it inside the battery encasing.") var/obj/item/stock_parts/cell/potato/pocell = new /obj/item/stock_parts/cell/potato(user.loc) pocell.icon_state = G.icon_state diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index b3462773d8..8bc9cc4512 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -390,7 +390,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ to_chat(user, "There already is a string attached to this coin!") return - if (W.use_tool(src, user, 0, 1, max_level = JOB_SKILL_BASIC)) + if (W.use_tool(src, user, 0, 1, skill_gain_mult = BARE_USE_TOOL_MULT)) add_overlay("coin_string_overlay") string_attached = 1 to_chat(user, "You attach a string to the coin.") diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 633135b3d2..51cff93ceb 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -315,7 +315,7 @@ if (getFireLoss() > 0 || getToxLoss() > 0) if(src == user) to_chat(user, "You start fixing yourself...") - if(!W.use_tool(src, user, 50, 1, max_level = JOB_SKILL_TRAINED)) + if(!W.use_tool(src, user, 50, 1, skill_gain_mult = TRIVIAL_USE_TOOL_MULT)) to_chat(user, "You need more cable to repair [src]!") return adjustFireLoss(-10) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index c18eebbb55..f911a6a4e4 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -118,7 +118,7 @@ return if(istype(W, /obj/item/stack/cable_coil)) - if(W.use_tool(src, user, 0, 1, max_level = JOB_SKILL_TRAINED)) + if(W.use_tool(src, user, 0, 1, skill_gain_mult = TRIVIAL_USE_TOOL_MULT)) icon_state = "[fixture_type]-construct-stage2" stage = 2 user.visible_message("[user.name] adds wires to [src].", \ diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index f34dbc6abc..b64b1c74ba 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -336,7 +336,7 @@ /obj/item/gun/ballistic/revolver/doublebarrel/improvised/attackby(obj/item/A, mob/user, params) ..() if(istype(A, /obj/item/stack/cable_coil) && !sawn_off) - if(A.use_tool(src, user, 0, 10, max_level = JOB_SKILL_BASIC)) + if(A.use_tool(src, user, 0, 10, skill_gain_mult = EASY_USE_TOOL_MULT)) slot_flags = ITEM_SLOT_BACK to_chat(user, "You tie the lengths of cable to the shotgun, making a sling.") slung = TRUE diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index a4a4065959..873b129c8f 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -156,7 +156,7 @@ /obj/item/gun/ballistic/shotgun/boltaction/improvised/attackby(obj/item/A, mob/user, params) ..() if(istype(A, /obj/item/stack/cable_coil) && !sawn_off) - if(A.use_tool(src, user, 0, 10, max_level = JOB_SKILL_BASIC)) + if(A.use_tool(src, user, 0, 10, skill_gain_mult = EASY_USE_TOOL_MULT)) slot_flags = ITEM_SLOT_BACK to_chat(user, "You tie the lengths of cable to the rifle, making a sling.") slung = TRUE From 05591ee04c9aed13034b2774f5ed4f06e86fe1e4 Mon Sep 17 00:00:00 2001 From: kappa-sama <44128284+kappa-sama@users.noreply.github.com> Date: Fri, 3 Jul 2020 05:40:18 -0400 Subject: [PATCH 41/58] better --- code/modules/projectiles/guns/ballistic/bow.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/guns/ballistic/bow.dm b/code/modules/projectiles/guns/ballistic/bow.dm index 4bd7d34fe2..dbf249b3f8 100644 --- a/code/modules/projectiles/guns/ballistic/bow.dm +++ b/code/modules/projectiles/guns/ballistic/bow.dm @@ -59,7 +59,7 @@ /obj/item/gun/ballistic/bow/pipe name = "pipe bow" - desc = "Some sort of pipe made projectile weapon made of a durathread string and lots of bending. Used to fire arrows." + desc = "Some sort of pipe-based projectile weapon made of string and lots of bending. Used to fire arrows." icon_state = "pipebow" item_state = "pipebow" - force = 0 + force = 2 From ea8662572b08dc723ca0f69542865159ff4d7973 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Fri, 3 Jul 2020 17:37:03 +0200 Subject: [PATCH 42/58] Silences the skill panel check_rights() call. --- code/datums/skills/_check_skills.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/skills/_check_skills.dm b/code/datums/skills/_check_skills.dm index 2421bd36ff..d02a716b8a 100644 --- a/code/datums/skills/_check_skills.dm +++ b/code/datums/skills/_check_skills.dm @@ -40,7 +40,7 @@ . = list() .["playername"] = owner.name .["see_skill_mods"] = see_skill_mods - .["admin"] = check_rights(R_DEBUG) + .["admin"] = check_rights(R_DEBUG, FALSE) /datum/skill_holder/ui_act(action, params) . = ..() From bde80eb1fb4d2a9fedebe9cbbe65f60410acdbdc Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 3 Jul 2020 19:02:20 +0200 Subject: [PATCH 43/58] Fixing obscured inventory slots (un)equip block, for real. --- code/game/objects/items.dm | 15 ++++++++++++++- .../mob/living/carbon/alien/humanoid/inventory.dm | 5 ----- tgstation.dme | 1 - 3 files changed, 14 insertions(+), 7 deletions(-) delete mode 100644 code/modules/mob/living/carbon/alien/humanoid/inventory.dm diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 9f1b830cf0..e998cf69bd 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -68,6 +68,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb var/click_delay = CLICK_CD_MELEE var/slot_flags = 0 //This is used to determine on which slots an item can fit. + var/current_equipped_slot pass_flags = PASSTABLE pressure_resistance = 4 var/obj/item/master = null @@ -315,6 +316,10 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb return if(anchored) return + if(loc == user && current_equipped_slot && current_equipped_slot != SLOT_HANDS) + if(current_equipped_slot in user.check_obscured_slots()) + to_chat(src, "You are unable to unequip that while wearing other garments over it!") + return FALSE if(resistance_flags & ON_FIRE) var/mob/living/carbon/C = user @@ -336,7 +341,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb C.update_damage_overlays() return - if(acid_level > 20 && !ismob(loc))// so we can still remove the clothes on us that have acid. + if(acid_level > 20 && ismob(loc))// so we can still remove the clothes on us that have acid. var/mob/living/carbon/C = user if(istype(C)) if(!C.gloves || (!(C.gloves.resistance_flags & (UNACIDABLE|ACID_PROOF)))) @@ -379,6 +384,11 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb return if(anchored) return + if(loc == user && current_equipped_slot && current_equipped_slot != SLOT_HANDS) + if(current_equipped_slot in user.check_obscured_slots()) + to_chat(src, "You are unable to unequip that while wearing other garments over it!") + return FALSE + SEND_SIGNAL(loc, COMSIG_TRY_STORAGE_TAKE, src, user.loc, TRUE) @@ -423,6 +433,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb /obj/item/proc/dropped(mob/user) SHOULD_CALL_PARENT(TRUE) + current_equipped_slot = null for(var/X in actions) var/datum/action/A = X A.Remove(user) @@ -470,7 +481,9 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb // for items that can be placed in multiple slots // note this isn't called during the initial dressing of a player /obj/item/proc/equipped(mob/user, slot) + SHOULD_CALL_PARENT(TRUE) . = SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot) + current_equipped_slot = slot if(!(. & COMPONENT_NO_GRANT_ACTIONS)) for(var/X in actions) var/datum/action/A = X diff --git a/code/modules/mob/living/carbon/alien/humanoid/inventory.dm b/code/modules/mob/living/carbon/alien/humanoid/inventory.dm deleted file mode 100644 index e2537f0f4f..0000000000 --- a/code/modules/mob/living/carbon/alien/humanoid/inventory.dm +++ /dev/null @@ -1,5 +0,0 @@ -/mob/living/carbon/alien/humanoid/doUnEquip(obj/item/I) - . = ..() - if(!. || !I) - return - diff --git a/tgstation.dme b/tgstation.dme index c43a6de0e4..736c9de89d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2415,7 +2415,6 @@ #include "code\modules\mob\living\carbon\alien\humanoid\death.dm" #include "code\modules\mob\living\carbon\alien\humanoid\humanoid.dm" #include "code\modules\mob\living\carbon\alien\humanoid\humanoid_defense.dm" -#include "code\modules\mob\living\carbon\alien\humanoid\inventory.dm" #include "code\modules\mob\living\carbon\alien\humanoid\life.dm" #include "code\modules\mob\living\carbon\alien\humanoid\queen.dm" #include "code\modules\mob\living\carbon\alien\humanoid\update_icons.dm" From e3b1ca49426d3d8471e3c3c1743b25b918d52c93 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Fri, 3 Jul 2020 19:57:38 +0200 Subject: [PATCH 44/58] Linter. --- code/_onclick/telekinesis.dm | 3 +-- code/datums/martial/boxing.dm | 6 ++---- code/datums/martial/krav_maga.dm | 5 ++--- code/datums/martial/wrestling.dm | 8 +++----- code/game/objects/items/cigs_lighters.dm | 1 + code/game/objects/items/robot/robot_items.dm | 1 + code/modules/awaymissions/mission_code/Academy.dm | 2 ++ .../modules/mob/living/carbon/alien/special/facehugger.dm | 3 ++- 8 files changed, 14 insertions(+), 15 deletions(-) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 6cf01ec8ff..f95ebf82b5 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -102,9 +102,8 @@ //stops TK grabs being equipped anywhere but into hands /obj/item/tk_grab/equipped(mob/user, slot) if(slot == SLOT_HANDS) - return + return ..() qdel(src) - return /obj/item/tk_grab/examine(user) if (focus) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index e3c7726d61..4682595aec 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -58,12 +58,10 @@ var/datum/martial_art/boxing/style = new /obj/item/clothing/gloves/boxing/equipped(mob/user, slot) - if(!ishuman(user)) - return - if(slot == SLOT_GLOVES) + . = ..() + if(ishuman(user) && slot == SLOT_GLOVES) var/mob/living/carbon/human/H = user style.teach(H,TRUE) - return /obj/item/clothing/gloves/boxing/dropped(mob/user) . = ..() diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 50438d9d8d..c2fe24a20d 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -196,9 +196,8 @@ var/datum/martial_art/krav_maga/style = new /obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot) - if(!ishuman(user)) - return - if(slot == SLOT_GLOVES) + . = ..() + if(ishuman(user) && slot == SLOT_GLOVES) var/mob/living/carbon/human/H = user style.teach(H,1) diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index 87fcf78964..18fd8e7b18 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -377,7 +377,7 @@ var/turf/ST = null var/falling = 0 var/damage = damage_roll(A,D) - + for (var/obj/O in oview(1, A)) if (O.density == 1) if (O == A) @@ -472,12 +472,10 @@ var/datum/martial_art/wrestling/style = new /obj/item/storage/belt/champion/wrestling/equipped(mob/user, slot) - if(!ishuman(user)) - return - if(slot == SLOT_BELT) + . = ..() + if(ishuman(user) && slot == SLOT_BELT) var/mob/living/carbon/human/H = user style.teach(H,1) - return /obj/item/storage/belt/champion/wrestling/dropped(mob/user) . = ..() diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index bfbacb1a34..de32375642 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -794,6 +794,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM reagents.clear_reagents() /obj/item/clothing/mask/vape/equipped(mob/user, slot) + . = ..() if(slot == SLOT_WEAR_MASK) if(!screw) to_chat(user, "You start puffing on the vape.") diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 4b8728e426..1f69cdae2e 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -355,6 +355,7 @@ emaggedhitdamage = 0 /obj/item/borg/lollipop/equipped() + . = ..() check_amount() /obj/item/borg/lollipop/dropped(mob/user) diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index f714a86f22..129e6d7a2b 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -189,6 +189,8 @@ if(!ishuman(user) || !user.mind || (user.mind in SSticker.mode.wizards)) to_chat(user, "You feel the magic of the dice is restricted to ordinary humans! You should leave it alone.") user.dropItemToGround(src) + return + return ..() /obj/item/dice/d20/fate/proc/effect(var/mob/living/carbon/human/user,roll) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index eb1b38b9ff..e35c905539 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -88,6 +88,7 @@ Die() /obj/item/clothing/mask/facehugger/equipped(mob/M) + . = ..() Attach(M) /obj/item/clothing/mask/facehugger/Crossed(atom/target) @@ -254,7 +255,7 @@ return FALSE if(AmBloodsucker(M)) return FALSE - + if(ismonkey(M)) return 1 From 256d8bbd5cc4ee935a4954a47ef98b4291e0b463 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 3 Jul 2020 12:59:39 -0500 Subject: [PATCH 45/58] Automatic changelog generation for PR #12672 [ci skip] --- html/changelogs/AutoChangeLog-pr-12672.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-12672.yml diff --git a/html/changelogs/AutoChangeLog-pr-12672.yml b/html/changelogs/AutoChangeLog-pr-12672.yml new file mode 100644 index 0000000000..e37b452cf2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-12672.yml @@ -0,0 +1,5 @@ +author: "Sonic121x" +delete-after: True +changes: + - rscadd: "crushed Soldry sodacan" + - rscadd: "digitigrade version of chief medical officer's turtleneck and captain's female formal outfit." From a1b68748fdc8a7e9fbf9d54a321787197bfd7d22 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 4 Jul 2020 00:09:54 +0000 Subject: [PATCH 46/58] Automatic changelog compile [ci skip] --- html/changelog.html | 11 +++++++++++ html/changelogs/.all_changelog.yml | 7 +++++++ html/changelogs/AutoChangeLog-pr-12672.yml | 5 ----- html/changelogs/AutoChangeLog-pr-12683.yml | 4 ---- 4 files changed, 18 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-12672.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-12683.yml diff --git a/html/changelog.html b/html/changelog.html index cbda6271e6..1f5cda6fc7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,17 @@ -->
+

04 July 2020

+

Sonic121x updated:

+
    +
  • crushed Soldry sodacan
  • +
  • digitigrade version of chief medical officer's turtleneck and captain's female formal outfit.
  • +
+

silicons updated:

+
    +
  • blood_DNA["color"] is now a single variable instead of a list
  • +
+

03 July 2020

Arturlang updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 1faabc7eea..631dec2720 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -26232,3 +26232,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: Witchhunter hat no longer obscures mask ears ,eyes, face and mouth timothyteakettle: - bugfix: bloodpacks initialise correctly now +2020-07-04: + Sonic121x: + - rscadd: crushed Soldry sodacan + - rscadd: digitigrade version of chief medical officer's turtleneck and captain's + female formal outfit. + silicons: + - refactor: blood_DNA["color"] is now a single variable instead of a list diff --git a/html/changelogs/AutoChangeLog-pr-12672.yml b/html/changelogs/AutoChangeLog-pr-12672.yml deleted file mode 100644 index e37b452cf2..0000000000 --- a/html/changelogs/AutoChangeLog-pr-12672.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Sonic121x" -delete-after: True -changes: - - rscadd: "crushed Soldry sodacan" - - rscadd: "digitigrade version of chief medical officer's turtleneck and captain's female formal outfit." diff --git a/html/changelogs/AutoChangeLog-pr-12683.yml b/html/changelogs/AutoChangeLog-pr-12683.yml deleted file mode 100644 index 34986f29d7..0000000000 --- a/html/changelogs/AutoChangeLog-pr-12683.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "silicons" -delete-after: True -changes: - - refactor: "blood_DNA[\"color\"] is now a single variable instead of a list" From 7c21f7bd4ee1e01a6334304e37821f0dba6d6b7a Mon Sep 17 00:00:00 2001 From: BlackMajor Date: Sat, 4 Jul 2020 17:17:34 +1200 Subject: [PATCH 47/58] [s] Don't give these to your kids for christmas Someone did a fucky wucky. --- code/game/objects/items/toys.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index aa2c6d1c88..870bf5fe07 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -451,7 +451,7 @@ /obj/item/dualsaber/toy/ComponentInitialize() . = ..() - AddComponent(/datum/component/two_handed, wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg') + AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=0, wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg') /obj/item/dualsaber/toy/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) return BLOCK_NONE @@ -469,9 +469,9 @@ slowdown_wielded = 0 sharpness = IS_BLUNT -/obj/item/dualsaber/toy/ComponentInitialize() +/obj/item/dualsaber/hypereutactic/toy/ComponentInitialize() . = ..() - AddComponent(/datum/component/two_handed, wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg') + AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=0, wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg') /obj/item/dualsaber/hypereutactic/toy/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) return BLOCK_NONE From cece7ecaad855d51e92df1fe2ee95ebfe4406408 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 4 Jul 2020 02:10:33 -0500 Subject: [PATCH 48/58] Automatic changelog generation for PR #12685 [ci skip] --- html/changelogs/AutoChangeLog-pr-12685.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-12685.yml diff --git a/html/changelogs/AutoChangeLog-pr-12685.yml b/html/changelogs/AutoChangeLog-pr-12685.yml new file mode 100644 index 0000000000..09f58d55c2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-12685.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Opening the View Skill Panel shouldn't trigger messages about insufficient admin priviledges anymore." From fdfe76d0a0618b5d0bad805eff9ed8b72117aae8 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 4 Jul 2020 02:11:12 -0500 Subject: [PATCH 49/58] Automatic changelog generation for PR #12658 [ci skip] --- html/changelogs/AutoChangeLog-pr-12658.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-12658.yml diff --git a/html/changelogs/AutoChangeLog-pr-12658.yml b/html/changelogs/AutoChangeLog-pr-12658.yml new file mode 100644 index 0000000000..593cc48c54 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-12658.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - tweak: "cooking oil is now far less lethal, requiring a higher volume of the reagent to deal more damage" From 671b955b4b473578ea32353f623cf7af0162a415 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 4 Jul 2020 02:11:48 -0500 Subject: [PATCH 50/58] Automatic changelog generation for PR #12662 [ci skip] --- html/changelogs/AutoChangeLog-pr-12662.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-12662.yml diff --git a/html/changelogs/AutoChangeLog-pr-12662.yml b/html/changelogs/AutoChangeLog-pr-12662.yml new file mode 100644 index 0000000000..a7401a308f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-12662.yml @@ -0,0 +1,6 @@ +author: "kappa-sama" +delete-after: True +changes: + - rscadd: "cloth string to replace durathread string" + - rscdel: "durathread string" + - balance: "All bows and arrows have had crafting times significantly reduced, coming out at up to 6 times faster crafting speeds. Improvised bows no longer require durathread; instead, they use cloth materials." From f3f942925744333329ba616e16d2a9b363489208 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 4 Jul 2020 02:12:40 -0500 Subject: [PATCH 51/58] Automatic changelog generation for PR #12677 [ci skip] --- html/changelogs/AutoChangeLog-pr-12677.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-12677.yml diff --git a/html/changelogs/AutoChangeLog-pr-12677.yml b/html/changelogs/AutoChangeLog-pr-12677.yml new file mode 100644 index 0000000000..769426f492 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-12677.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "You can now actually gain wiring experience from using cable coils." From ae5fb008c737759defbdf9e2c385ad370e9c95fe Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Sat, 4 Jul 2020 00:13:34 -0700 Subject: [PATCH 52/58] Update client_defines.dm --- code/modules/client/client_defines.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 0402dc683f..0901c110b9 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -19,6 +19,8 @@ ///Next tick to reset the total message counter var/total_count_reset = 0 var/ircreplyamount = 0 + /// last time they tried to do an autobunker auth + var/autobunker_last_try = 0 ///////// //OTHER// From 03aa8fcc2be56615e5f8b8e1f89d4f72c6d5726e Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Sat, 4 Jul 2020 00:14:32 -0700 Subject: [PATCH 53/58] Update autobunker.dm --- code/modules/client/verbs/autobunker.dm | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/code/modules/client/verbs/autobunker.dm b/code/modules/client/verbs/autobunker.dm index 8954901eef..03200c5f0b 100644 --- a/code/modules/client/verbs/autobunker.dm +++ b/code/modules/client/verbs/autobunker.dm @@ -3,11 +3,10 @@ set desc = "Authorizes your account in the panic bunker of any servers connected to this function." set category = "OOC" - var/static/lastuse = 0 - if(lastuse + 5 SECONDS > world.time) + if(autobunker_last_try + 5 SECONDS > world.time) to_chat(src, "Function on cooldown, try again in 5 seconds.") return - lastuse = world.time + autobunker_last_try = world.time world.send_cross_server_bunker_overrides(key, src) @@ -24,9 +23,7 @@ if(!length(servers)) to_chat(C, "AUTOBUNKER: No servers are configured to receive from this one.") return - var/logtext = "[key] ([key_name(C)]) has initiated an autobunker authentication with linked servers." - message_admins(logtext) - log_admin(logtext) + log_admin("[key] ([key_name(C)]) has initiated an autobunker authentication with linked servers.") for(var/name in servers) var/returned = world.Export("[servers[name]]?[list2params(message)]") switch(returned) From afdf8c698a4cd123088dbcc0bc026ed944c6286b Mon Sep 17 00:00:00 2001 From: BlackMajor Date: Sat, 4 Jul 2020 19:30:20 +1200 Subject: [PATCH 54/58] fuck --- code/game/objects/items/toys.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 870bf5fe07..bf1eca01f9 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -450,7 +450,6 @@ sharpness = IS_BLUNT /obj/item/dualsaber/toy/ComponentInitialize() - . = ..() AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=0, wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg') /obj/item/dualsaber/toy/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) @@ -470,7 +469,6 @@ sharpness = IS_BLUNT /obj/item/dualsaber/hypereutactic/toy/ComponentInitialize() - . = ..() AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=0, wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg') /obj/item/dualsaber/hypereutactic/toy/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) From ca6fc8d81307cd7d6f6a9e96e7c16bc09bc3ad95 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Sat, 4 Jul 2020 06:48:00 -0700 Subject: [PATCH 55/58] Update revenant.dm --- code/modules/antagonists/revenant/revenant.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm index 3ddb4e67ee..c8119818b1 100644 --- a/code/modules/antagonists/revenant/revenant.dm +++ b/code/modules/antagonists/revenant/revenant.dm @@ -38,7 +38,7 @@ response_harm_continuous = "punches through" response_harm_simple = "punch through" unsuitable_atmos_damage = 0 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) //I don't know how you'd apply those, but revenants no-sell them anyway. + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) //I down't know how you'd apply those, but revenants no-sell them anyway. atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = INFINITY @@ -108,8 +108,7 @@ //Life, Stat, Hud Updates, and Say /mob/living/simple_animal/revenant/BiologicalLife(seconds, times_fired) - if(!(. = ..())) - return + . = ..() if(stasis) return if(revealed && essence <= 0) From c5b94a4d0021340d3c13beae38442058ae083ba1 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Sat, 4 Jul 2020 18:30:01 +0200 Subject: [PATCH 56/58] Update code/modules/antagonists/revenant/revenant.dm --- code/modules/antagonists/revenant/revenant.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm index c8119818b1..4e08ad2382 100644 --- a/code/modules/antagonists/revenant/revenant.dm +++ b/code/modules/antagonists/revenant/revenant.dm @@ -38,7 +38,7 @@ response_harm_continuous = "punches through" response_harm_simple = "punch through" unsuitable_atmos_damage = 0 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) //I down't know how you'd apply those, but revenants no-sell them anyway. + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) //I don't know how you'd apply those, but revenants no-sell them anyway. atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = INFINITY From c5a88f1cb700862dd918b07c98adc9bd28d72ef4 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 4 Jul 2020 11:35:25 -0500 Subject: [PATCH 57/58] Automatic changelog generation for PR #12660 [ci skip] --- html/changelogs/AutoChangeLog-pr-12660.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-12660.yml diff --git a/html/changelogs/AutoChangeLog-pr-12660.yml b/html/changelogs/AutoChangeLog-pr-12660.yml new file mode 100644 index 0000000000..6e82ac9553 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-12660.yml @@ -0,0 +1,7 @@ +author: "Yakumo Chen, kappa-sama" +delete-after: True +changes: + - rscdel: "Removes improvised handguns" + - rscdel: "removed handsaws, improvised gun barrels (you can use atmos pipes again)" + - balance: "Guncrafting is less time and resource intensive" + - tweak: "Item names in guncrafting are user-friendly." From 21209ada0352946203cb024ffdb79900d2b51807 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 4 Jul 2020 11:37:02 -0500 Subject: [PATCH 58/58] Automatic changelog generation for PR #12593 [ci skip] --- html/changelogs/AutoChangeLog-pr-12593.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-12593.yml diff --git a/html/changelogs/AutoChangeLog-pr-12593.yml b/html/changelogs/AutoChangeLog-pr-12593.yml new file mode 100644 index 0000000000..97e505ad86 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-12593.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - rscadd: "auto bunker override verb has been added"