diff --git a/aurorastation.dme b/aurorastation.dme index 4b6ad85ff87..0f732889bb8 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -19,6 +19,7 @@ #include "code\__defines\_compile_options.dm" #include "code\__defines\_layers.dm" #include "code\__defines\_macros.dm" +#include "code\__defines\accessories.dm" #include "code\__defines\admin.dm" #include "code\__defines\antagonist.dm" #include "code\__defines\armor.dm" @@ -1394,7 +1395,6 @@ #include "code\modules\clothing\factions\vysoka.dm" #include "code\modules\clothing\glasses\glasses.dm" #include "code\modules\clothing\glasses\hud.dm" -#include "code\modules\clothing\gloves\arm_guard.dm" #include "code\modules\clothing\gloves\boxing.dm" #include "code\modules\clothing\gloves\color.dm" #include "code\modules\clothing\gloves\miscellaneous.dm" @@ -1423,7 +1423,6 @@ #include "code\modules\clothing\sets\captain.dm" #include "code\modules\clothing\shoes\colour.dm" #include "code\modules\clothing\shoes\jobs.dm" -#include "code\modules\clothing\shoes\leg_guard.dm" #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" #include "code\modules\clothing\shoes\vaurca.dm" @@ -1465,6 +1464,7 @@ #include "code\modules\clothing\suits\jobs.dm" #include "code\modules\clothing\suits\labcoat.dm" #include "code\modules\clothing\suits\miscellaneous.dm" +#include "code\modules\clothing\suits\modular_armor.dm" #include "code\modules\clothing\suits\overlay.dm" #include "code\modules\clothing\suits\storage.dm" #include "code\modules\clothing\suits\utility.dm" @@ -1477,6 +1477,7 @@ #include "code\modules\clothing\under\syndicate.dm" #include "code\modules\clothing\under\accessories\accessory.dm" #include "code\modules\clothing\under\accessories\armband.dm" +#include "code\modules\clothing\under\accessories\armor.dm" #include "code\modules\clothing\under\accessories\badges.dm" #include "code\modules\clothing\under\accessories\holster.dm" #include "code\modules\clothing\under\accessories\lockets.dm" diff --git a/code/__defines/accessories.dm b/code/__defines/accessories.dm new file mode 100644 index 00000000000..90de1a5df9b --- /dev/null +++ b/code/__defines/accessories.dm @@ -0,0 +1,9 @@ +#define ACCESSORY_SLOT_GENERIC "decor" +#define ACCESSORY_SLOT_UTILITY "utility" +#define ACCESSORY_SLOT_CAPE "cape" +#define ACCESSORY_SLOT_ARMBAND "armband" +#define ACCESSORY_SLOT_ARMOR_PLATE "armor plate" +#define ACCESSORY_SLOT_LEG_GUARDS "leg guards" +#define ACCESSORY_SLOT_ARM_GUARDS "arm guards" +#define ACCESSORY_SLOT_ARMOR_PIN "armor pin" +#define ACCESSORY_SLOT_ARMOR_POCKETS "armor pockets" \ No newline at end of file diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 37ea129680e..be78ab8d8c6 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -55,6 +55,8 @@ #define ui_morph_resist "EAST-2:26,SOUTH:5" #define ui_acti "EAST-2:26,SOUTH:5" #define ui_movi "EAST-3:24,SOUTH:5" +#define ui_burstfire "EAST-4:20,SOUTH:14" +#define ui_uniqueaction "EAST-4:20,SOUTH:5" #define ui_zonesel "EAST-1:28,SOUTH:5" #define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12) diff --git a/code/_onclick/hud/gun_mode.dm b/code/_onclick/hud/gun_mode.dm index 676788ee1d7..e3cb6c6d383 100644 --- a/code/_onclick/hud/gun_mode.dm +++ b/code/_onclick/hud/gun_mode.dm @@ -64,3 +64,45 @@ user.aiming.toggle_permission(TARGET_CAN_RADIO) return 1 return 0 + +/obj/screen/gun/burstfire + name = "Toggle Firing Mode" + desc = "This can be used in a macro as toggle-firing-mode." + icon_state = "toggle_burst_fire" + screen_loc = ui_burstfire + +/obj/screen/gun/burstfire/Click(location, control, params) + if(..()) + var/mob/living/user = usr + if(istype(user)) + var/obj/item/gun/dakka = user.get_active_hand() + if(istype(dakka)) + dakka.toggle_firing_mode(user) + else + if(istype(user.loc, /mob/living/heavy_vehicle)) //may God forgive me for this + var/mob/living/heavy_vehicle/snowflake = user.loc + var/obj/item/mecha_equipment/mounted_system/MS = snowflake.selected_system + dakka = MS.holding + if(istype(dakka)) + dakka.toggle_firing_mode(user) + +/obj/screen/gun/uniqueaction + name = "Unique Action" + desc = "This can be used in a macro as unique-action." + icon_state = "unique_action" + screen_loc = ui_uniqueaction + +/obj/screen/gun/uniqueaction/Click(location, control, params) + if(..()) + var/mob/living/user = usr + if(istype(user)) + var/obj/item/gun/dakka = user.get_active_hand() + if(istype(dakka)) + dakka.unique_action(user) + else + if(istype(user.loc, /mob/living/heavy_vehicle)) //may God forgive me for this + var/mob/living/heavy_vehicle/snowflake = user.loc + var/obj/item/mecha_equipment/mounted_system/MS = snowflake.selected_system + dakka = MS.holding + if(istype(dakka)) + dakka.unique_action(user) \ No newline at end of file diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 4572fbe19cc..68f2a4c6ba3 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -369,6 +369,18 @@ mymob.radio_use_icon.color = ui_color mymob.radio_use_icon.alpha = ui_alpha + mymob.toggle_firing_mode = new /obj/screen/gun/burstfire(null) + mymob.toggle_firing_mode.icon = ui_style + mymob.toggle_firing_mode.color = ui_color + mymob.toggle_firing_mode.alpha = ui_alpha + hud_elements |= mymob.toggle_firing_mode + + mymob.unique_action_icon = new /obj/screen/gun/uniqueaction(null) + mymob.unique_action_icon.icon = ui_style + mymob.unique_action_icon.color = ui_color + mymob.unique_action_icon.alpha = ui_alpha + hud_elements |= mymob.unique_action_icon + mymob.client.screen = null mymob.client.screen += hud_elements diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index c77c5ea1417..9181b1b8dc1 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -130,6 +130,8 @@ var/obj/screen/robot_inventory mymob.item_use_icon = new /obj/screen/gun/item(null) mymob.gun_move_icon = new /obj/screen/gun/move(null) mymob.radio_use_icon = new /obj/screen/gun/radio(null) + mymob.toggle_firing_mode = new /obj/screen/gun/burstfire(null) + mymob.unique_action_icon = new /obj/screen/gun/uniqueaction(null) mymob.client.screen = null @@ -143,7 +145,10 @@ var/obj/screen/robot_inventory mymob.pullin, robot_inventory, mymob.gun_setting_icon, - r.computer) + mymob.toggle_firing_mode, + mymob.unique_action_icon, + r.computer + ) mymob.client.screen += src.adding + src.other return diff --git a/code/controllers/subsystems/economy.dm b/code/controllers/subsystems/economy.dm index d4b4df5027e..8ab96ca86e9 100644 --- a/code/controllers/subsystems/economy.dm +++ b/code/controllers/subsystems/economy.dm @@ -95,13 +95,14 @@ var/datum/controller/subsystem/economy/SSeconomy return TRUE //Create a "normal" player account -/datum/controller/subsystem/economy/proc/create_account(var/new_owner_name = "Default user", var/starting_funds = 0, var/datum/computer_file/program/account_db/source_db) +/datum/controller/subsystem/economy/proc/create_account(var/new_owner_name = "Default user", var/starting_funds = 0, var/datum/computer_file/program/account_db/source_db, var/account_public = TRUE) //create a new account var/datum/money_account/M = new() M.owner_name = new_owner_name M.remote_access_pin = rand(1111, 111111) M.money = starting_funds M.account_number = next_account_number + M.public_account = account_public next_account_number += rand(1,25) //create an entry in the account transaction log for when it was created @@ -149,6 +150,13 @@ var/datum/controller/subsystem/economy/SSeconomy return M +/datum/controller/subsystem/economy/proc/get_public_accounts() + var/list/public_accounts = list() + for(var/account in all_money_accounts) + var/datum/money_account/M = all_money_accounts[account] + if(M.public_account) + public_accounts += account // yes, we're passing the number + return public_accounts //Charge a account /datum/controller/subsystem/economy/proc/charge_to_account(var/attempt_account_number, var/source_name, var/purpose, var/terminal_id, var/amount) @@ -278,6 +286,7 @@ var/datum/controller/subsystem/economy/SSeconomy /datum/money_account var/owner_name = "" var/account_number = 0 + var/public_account = TRUE var/remote_access_pin = 0 var/money = 0 var/list/transactions = list() diff --git a/code/datums/outfits/outfit_antag.dm b/code/datums/outfits/outfit_antag.dm index 2035fbe8476..898f925d594 100644 --- a/code/datums/outfits/outfit_antag.dm +++ b/code/datums/outfits/outfit_antag.dm @@ -389,7 +389,7 @@ ) belt = null - suit = /obj/item/clothing/suit/armor/bulletproof + suit = /obj/item/clothing/suit/armor/carrier/ballistic shoes = list( /obj/item/clothing/shoes/laceup/all_species, diff --git a/code/datums/trading/weaponry.dm b/code/datums/trading/weaponry.dm index 78be7cbade3..092c80d773e 100644 --- a/code/datums/trading/weaponry.dm +++ b/code/datums/trading/weaponry.dm @@ -144,9 +144,9 @@ ) possible_trading_items = list( - /obj/item/clothing/suit/armor/riot = TRADER_THIS_TYPE, - /obj/item/clothing/suit/armor/bulletproof = TRADER_THIS_TYPE, - /obj/item/clothing/suit/armor/laserproof = TRADER_THIS_TYPE, + /obj/item/clothing/suit/armor/carrier/riot = TRADER_THIS_TYPE, + /obj/item/clothing/suit/armor/carrier/ballistic = TRADER_THIS_TYPE, + /obj/item/clothing/suit/armor/carrier/ablative = TRADER_THIS_TYPE, /obj/item/clothing/suit/armor/tactical = TRADER_THIS_TYPE, /obj/item/clothing/suit/storage/vest = TRADER_THIS_TYPE, /obj/item/clothing/head/helmet = TRADER_THIS_TYPE, diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 8571cc3b32a..f4d978caaa6 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -435,7 +435,7 @@ datum/objective/steal "a head of personnel's jumpsuit" = /obj/item/clothing/under/rank/head_of_personnel, "the hypospray" = /obj/item/reagent_containers/hypospray, "the captain's pinpointer" = /obj/item/pinpointer, - "an ablative armor vest" = /obj/item/clothing/suit/armor/laserproof + "an ablative armor vest" = /obj/item/clothing/suit/armor/carrier/ablative ) var/global/possible_items_special[] = list( diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 26b8383a1ec..70aac935904 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -26,6 +26,8 @@ var/latejoin_at_spawnpoints = FALSE //If this job should use roundstart spawnpoints for latejoin (offstation jobs etc) var/account_allowed = TRUE // Does this job type come with a station account? + var/public_account = TRUE // does this account appear on account terminals? + var/initial_funds_override = 0 // if set to anything else, the initial account balance will be set to this instead var/economic_modifier = 2 // With how much does this job modify the initial account amount? var/create_record = TRUE // Do we announce/make records for people who spawn on this job? @@ -92,8 +94,8 @@ var/datum/species/human_species = global.all_species[SPECIES_HUMAN] species_modifier = human_species.economic_modifier - var/money_amount = (rand(5,50) + rand(5, 50)) * loyalty * economic_modifier * species_modifier - var/datum/money_account/M = SSeconomy.create_account(H.real_name, money_amount, null) + var/money_amount = initial_funds_override ? initial_funds_override : (rand(5,50) + rand(5, 50)) * loyalty * economic_modifier * species_modifier + var/datum/money_account/M = SSeconomy.create_account(H.real_name, money_amount, null, public_account) if(H.mind) var/remembered_info = "" remembered_info += "Your account number is: #[M.account_number]
" diff --git a/code/game/jobs/job/outsider/merchant.dm b/code/game/jobs/job/outsider/merchant.dm index 3b2de4ddea7..296b4949b5a 100644 --- a/code/game/jobs/job/outsider/merchant.dm +++ b/code/game/jobs/job/outsider/merchant.dm @@ -9,8 +9,11 @@ minimal_player_age = 10 economic_modifier = 5 ideal_character_age = 30 - create_record = 0 - account_allowed = 0 + + create_record = FALSE + account_allowed = TRUE + public_account = FALSE + initial_funds_override = 2500 access = list(access_merchant) minimal_access = list(access_merchant) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 2e628452aa1..966c5c96bf6 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -301,7 +301,9 @@ update_flag valve_open = !valve_open /obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/W as obj, var/mob/user as mob) - if(!W.iswrench() && !istype(W, /obj/item/tank) && !istype(W, /obj/item/device/analyzer) && !istype(W, /obj/item/modular_computer) && !issignaler(W) && !(W.iswirecutter() && signaler)) + if(istype(W, /obj/item/mecha_equipment/clamp)) + return + if(!W.iswrench() && !is_type_in_list(W, list(/obj/item/tank, /obj/item/device/analyzer, /obj/item/modular_computer)) && !issignaler(W) && !(W.iswirecutter() && signaler)) if(W.flags & NOBLUDGEON) return visible_message(SPAN_WARNING("\The [user] hits \the [src] with \the [W]!"), SPAN_NOTICE("You hit \the [src] with \the [W].")) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 8ea748f052f..1e22261e75a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -39,6 +39,7 @@ var/permeability_coefficient = 1 // for chemicals/diseases var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit) var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up + var/slowdown_accessory = 0 // Updated on accessory add/remove. This is how much the current accessories slow you down. var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N var/can_embed = 1//If zero, this item/weapon cannot become embedded in people when you hit them with it var/list/allowed = null //suit storage stuff. diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index e68fd6e5f83..ba60b2f0b66 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -71,7 +71,14 @@ src.name = "body bag - " src.name += t playsound(src, pick('sound/bureaucracy/pen1.ogg','sound/bureaucracy/pen2.ogg'), 20) - add_overlay("bodybag_label") + if(istype(buckled_to, /obj/structure/bed/roller)) + var/obj/structure/bed/roller/R = buckled_to + if(R.bag_strap) + LAZYREMOVE(overlays, image(R.icon, R.bag_strap)) + LAZYADD(overlays, image(icon, "bodybag_label")) + LAZYADD(overlays, image(R.icon, R.bag_strap)) + else + LAZYADD(overlays, image(icon, "bodybag_label")) else src.name = "body bag" return @@ -79,7 +86,7 @@ to_chat(user, "You cut the tag off the bodybag.") playsound(src.loc, 'sound/items/wirecutter.ogg', 50, 1) src.name = "body bag" - cut_overlays() + LAZYREMOVE(overlays, image(icon, "bodybag_label")) /obj/structure/closet/body_bag/store_mobs(var/stored_units) contains_body = ..() diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index e7e2e4d0d51..006a57651a1 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -193,13 +193,13 @@ /obj/item/stack/tile/floor name = "floor tile" singular_name = "floor tile" - desc = "Those could work as a pretty decent throwing weapon" //why? + desc = "Used to cover up your horrible art." icon_state = "tile" - force = 6.0 + force = 6 matter = list(DEFAULT_WALL_MATERIAL = TILE_MATERIAL_AMOUNT) - throwforce = 15.0 + throwforce = 6 throw_speed = 5 - throw_range = 20 + throw_range = 10 flags = CONDUCT /obj/item/stack/tile/floor_red diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index c80c7672bf0..d630e4e3570 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -220,8 +220,8 @@ starts_with = list(/obj/item/rig_module/electrowarfare_suite = 1, /obj/item/rig_module/voice = 1) /obj/item/storage/box/syndie_kit/armor - name = "boxed armor kit" - starts_with = list(/obj/item/clothing/suit/storage/vest/merc = 1, /obj/item/clothing/head/helmet/merc = 1, /obj/item/clothing/gloves/arm_guard/mercs = 1, /obj/item/clothing/shoes/leg_guard/merc = 1) + name = "boxed heavy armor kit" + starts_with = list(/obj/item/clothing/suit/armor/carrier/heavy = 1, /obj/item/clothing/head/helmet/merc = 1) /obj/item/storage/secure/briefcase/money starts_with = list(/obj/item/spacecash/c1000 = 10) diff --git a/code/game/objects/items/weapons/vaurca_items.dm b/code/game/objects/items/weapons/vaurca_items.dm index d9c351b5028..0515fa3bd8a 100644 --- a/code/game/objects/items/weapons/vaurca_items.dm +++ b/code/game/objects/items/weapons/vaurca_items.dm @@ -428,7 +428,7 @@ tension = 1 ..() -/obj/item/gun/launcher/crossbow/vaurca/attack_self(mob/living/user as mob) +/obj/item/gun/launcher/crossbow/vaurca/unique_action(mob/living/user) pump(user) /obj/item/gun/launcher/crossbow/vaurca/proc/pump(mob/M as mob) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 49aa536c50f..3d9e871bf11 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -16,7 +16,7 @@ new /obj/item/storage/backpack/satchel_cap(src) // Armor new /obj/item/clothing/head/helmet(src) - new /obj/item/clothing/suit/storage/vest(src) + new /obj/item/clothing/suit/armor/carrier/generic(src) //Tools new /obj/item/device/radio/headset/heads/captain(src) new /obj/item/device/radio/headset/heads/captain/alt(src) @@ -72,7 +72,7 @@ new /obj/item/storage/box/ids( src ) //Appearance new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/clothing/suit/storage/vest(src) + new /obj/item/clothing/suit/armor/carrier/generic(src) new /obj/item/clothing/head/helmet(src) //Tools new /obj/item/device/radio/headset/heads/hop(src) @@ -124,7 +124,9 @@ new /obj/item/storage/backpack/security(src) else new /obj/item/storage/backpack/satchel_sec(src) - new /obj/item/clothing/suit/storage/vest/hos(src) + new /obj/item/clothing/suit/armor/carrier/hos(src) + new /obj/item/clothing/accessory/leg_guard(src) + new /obj/item/clothing/accessory/arm_guard(src) if(prob(50)) new /obj/item/clothing/under/rank/head_of_security(src) new /obj/item/clothing/head/beret/security/hos(src) @@ -176,7 +178,9 @@ new /obj/item/storage/backpack/security(src) else new /obj/item/storage/backpack/satchel_sec(src) - new /obj/item/clothing/suit/storage/vest/hos(src) + new /obj/item/clothing/suit/armor/carrier/hos(src) + new /obj/item/clothing/accessory/leg_guard(src) + new /obj/item/clothing/accessory/arm_guard(src) if(prob(50)) // chance to spawn either corporate or regular outfit. to prevent locker bloat which makes it lag when right clicked new /obj/item/clothing/under/rank/head_of_security(src) new /obj/item/clothing/head/beret/security/hos(src) @@ -217,7 +221,9 @@ new /obj/item/storage/backpack/security(src) else new /obj/item/storage/backpack/satchel_sec(src) - new /obj/item/clothing/suit/storage/vest/warden(src) + new /obj/item/clothing/suit/armor/carrier/officer(src) + new /obj/item/clothing/accessory/arm_guard(src) + new /obj/item/clothing/accessory/leg_guard(src) if(prob(50)) if(prob(50)) new /obj/item/clothing/under/rank/warden(src) @@ -229,7 +235,7 @@ new /obj/item/clothing/under/rank/warden/corp(src) new /obj/item/clothing/head/beret/security/corp(src) new /obj/item/clothing/head/warden/corp(src) - new /obj/item/clothing/head/helmet(src) + new /obj/item/clothing/head/helmet/security(src) new /obj/item/clothing/suit/security/warden(src) new /obj/item/clothing/accessory/badge/warden(src) new /obj/item/clothing/gloves/black_leather(src) @@ -302,7 +308,9 @@ new /obj/item/storage/backpack/security(src) else new /obj/item/storage/backpack/satchel_sec(src) - new /obj/item/clothing/suit/storage/vest/officer(src) + new /obj/item/clothing/suit/armor/carrier/officer(src) + new /obj/item/clothing/accessory/arm_guard(src) + new /obj/item/clothing/accessory/leg_guard(src) if(prob(50)) if(prob(50)) new /obj/item/clothing/under/rank/security(src) @@ -314,7 +322,7 @@ new /obj/item/clothing/under/rank/security/corp(src) new /obj/item/clothing/head/beret/security/corp(src) new /obj/item/clothing/head/softcap/security/corp(src) - new /obj/item/clothing/head/helmet(src) + new /obj/item/clothing/head/helmet/security(src) new /obj/item/clothing/suit/security/officer(src) new /obj/item/clothing/accessory/badge/officer(src) new /obj/item/clothing/mask/gas/alt(src) @@ -383,7 +391,7 @@ //Tools new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/device/radio/headset/headset_sec/alt(src) - new /obj/item/clothing/suit/storage/vest/detective(src) + new /obj/item/clothing/suit/armor/carrier/generic(src) new /obj/item/gun/energy/disruptorpistol/miniature/security(src) new /obj/item/taperoll/police(src) //Belts @@ -403,7 +411,7 @@ //Appearance new /obj/item/clothing/gloves/black(src) new /obj/item/clothing/suit/storage/toggle/forensics(src) - new /obj/item/clothing/suit/storage/vest/ft(src) + new /obj/item/clothing/suit/armor/carrier/generic(src) new /obj/item/clothing/under/det/forensics(src) new /obj/item/clothing/under/det/black(src) new /obj/item/clothing/under/det/classic(src) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 092aeb85fd5..ee9e1c63cd4 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -256,7 +256,7 @@ iv.pixel_y = 6 overlays += iv if(bag_strap && istype(buckled, /obj/structure/closet/body_bag)) - buckled.overlays += image(icon, bag_strap) + LAZYADD(buckled.overlays, image(icon, bag_strap)) /obj/structure/bed/roller/attackby(obj/item/I, mob/user) if(iswrench(I) || istype(I, /obj/item/stack) || iswirecutter(I)) @@ -364,8 +364,7 @@ if(iv_attached) detach_iv(M, usr) else - MA.overlays.Cut() //Remove straps - MA.update_icon() //Add label back (if it had one) + LAZYREMOVE(MA.overlays, image(icon, bag_strap)) //Remove straps density = FALSE MA.pixel_y = 0 update_icon() diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 8ffbaf59b95..54e671e11d5 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -217,7 +217,7 @@ name = "Bridge Officer" corpseradio = /obj/item/device/radio/headset/heads/hop corpseuniform = /obj/item/clothing/under/rank/centcom_officer - corpsesuit = /obj/item/clothing/suit/armor/bulletproof + corpsesuit = /obj/item/clothing/suit/armor/carrier/ballistic corpseshoes = /obj/item/clothing/shoes/black corpseglasses = /obj/item/clothing/glasses/sunglasses corpseid = 1 @@ -227,7 +227,7 @@ /obj/effect/landmark/corpse/commander name = "Commander" corpseuniform = /obj/item/clothing/under/rank/centcom_captain - corpsesuit = /obj/item/clothing/suit/armor/bulletproof + corpsesuit = /obj/item/clothing/suit/armor/carrier/ballistic corpseradio = /obj/item/device/radio/headset/heads/captain corpseglasses = /obj/item/clothing/glasses/eyepatch corpsemask = /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 14425365548..a6ba99a0fb5 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -791,7 +791,7 @@ w_class = ITEMSIZE_NORMAL species_restricted = list("exclude",BODYTYPE_VAURCA_BREEDER,BODYTYPE_VAURCA_WARFORM) - valid_accessory_slots = list("armband","decor", "over") + valid_accessory_slots = list(ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_GENERIC, ACCESSORY_SLOT_CAPE) /obj/item/clothing/suit/return_own_image() var/image/our_image @@ -843,8 +843,8 @@ //convenience var for defining the icon state for the overlay used when the clothing is worn. //Also used by rolling/unrolling. var/worn_state = null - valid_accessory_slots = list("utility","armband","decor", "over") - restricted_accessory_slots = list("utility") + valid_accessory_slots = list(ACCESSORY_SLOT_UTILITY, ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_GENERIC, ACCESSORY_SLOT_CAPE) + restricted_accessory_slots = list(ACCESSORY_SLOT_UTILITY) /obj/item/clothing/under/attack_hand(var/mob/user) diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm index 5ec7264c512..c9f7725f657 100644 --- a/code/modules/clothing/clothing_accessories.dm +++ b/code/modules/clothing/clothing_accessories.dm @@ -97,11 +97,17 @@ for(var/obj/item/clothing/accessory/A in accessories) to_chat(user, "\A [A] is attached to it.") +/obj/item/clothing/proc/update_accessory_slowdown() + slowdown_accessory = 0 + for(var/obj/item/clothing/accessory/bling in accessories) + slowdown_accessory += bling.slowdown + /obj/item/clothing/proc/attach_accessory(mob/user, obj/item/clothing/accessory/A) LAZYADD(accessories, A) A.on_attached(src, user) src.verbs |= /obj/item/clothing/proc/removetie_verb update_clothing_icon() + update_accessory_slowdown() /obj/item/clothing/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A) if(!(A in accessories)) @@ -110,22 +116,32 @@ A.on_removed(user) LAZYREMOVE(accessories, A) update_clothing_icon() + update_accessory_slowdown() /obj/item/clothing/proc/removetie_verb() set name = "Remove Accessory" set category = "Object" set src in usr - if(!istype(usr, /mob/living)) return - if(usr.stat) return - if(!LAZYLEN(accessories)) return + + if(!isliving(usr)) + return + + var/mob/living/M = usr + + if(use_check_and_message(M)) + return + + if(!LAZYLEN(accessories)) + return + var/obj/item/clothing/accessory/A if(LAZYLEN(accessories) > 1) - A = input("Select an accessory to remove from [src]") as null|anything in accessories + A = input("Select an accessory to remove.") as null|anything in accessories else A = accessories[1] - src.remove_accessory(usr,A) + remove_accessory(usr,A) if(!LAZYLEN(accessories)) - src.verbs -= /obj/item/clothing/proc/removetie_verb + verbs -= /obj/item/clothing/proc/removetie_verb /obj/item/clothing/emp_act(severity) if(LAZYLEN(accessories)) diff --git a/code/modules/clothing/gloves/arm_guard.dm b/code/modules/clothing/gloves/arm_guard.dm deleted file mode 100644 index 80e4c0f9721..00000000000 --- a/code/modules/clothing/gloves/arm_guard.dm +++ /dev/null @@ -1,74 +0,0 @@ -/obj/item/clothing/gloves/arm_guard - name = "arm guards" - desc = "These arm guards will protect your hands and arms." - icon_state = "arm_guards_riot" - body_parts_covered = HANDS|ARMS - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_MINOR, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_MINOR - ) - punch_force = 3 - w_class = ITEMSIZE_NORMAL - siemens_coefficient = 0.35 - drop_sound = 'sound/items/drop/axe.ogg' - pickup_sound = 'sound/items/pickup/axe.ogg' - -/obj/item/clothing/gloves/arm_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) - if(..()) //This will only run if no other problems occured when equiping. - if(H.wear_suit) - if(H.wear_suit.body_parts_covered & ARMS) - to_chat(H, "You can't wear \the [src] with \the [H.wear_suit], it's in the way.") - return 0 - return 1 - -/obj/item/clothing/gloves/arm_guard/laserproof - name = "ablative arm guards" - desc = "These arm guards will protect your hands and arms from energy weapons." - icon_state = "arm_guards_laser" - siemens_coefficient = 0 - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_RIFLES, - energy = ARMOR_ENERGY_RESISTANT - ) - -/obj/item/clothing/gloves/arm_guard/bulletproof - name = "ballistic arm guards" - desc = "These arm guards will protect your hands and arms from ballistic weapons." - icon_state = "arm_guards_bullet" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR - ) - -/obj/item/clothing/gloves/arm_guard/riot - name = "riot arm guards" - desc = "These arm guards will protect your hands and arms from close combat weapons." - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR - ) - -/obj/item/clothing/gloves/arm_guard/mercs - name = "heavy arm guards" - desc = "These arm guards will protect your hands and arms from harm." - icon = 'icons/clothing/kit/heavy_armor.dmi' - item_state = "armguards" - icon_state = "armguards" - contained_sprite = TRUE - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - species_restricted = null diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 7d496d433e2..2612fe5fa31 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -65,8 +65,10 @@ name = "head of security helmet" desc = "A special Internal Security Division helmet designed to protect the precious craniums of important installation security officers." desc_fluff = "What the heck did you just hecking say about me, you little honker? I'll have you know I graduated top of my class in the Sol Army, and I've been involved in numerous secret raids on the Jargon Federation, and I have over 300 confirmed kills. I am trained in gorilla warfare and I'm the top sniper in the entire Sol armed forces. You are nothing to me but just another target. I will wipe you the heck out with precision the likes of which has never been seen before on Biesel, mark my hecking words." - icon_state = "hoshelmet" - item_state = "hoshelmet" + icon = 'icons/clothing/kit/modular_armor.dmi' + contained_sprite = TRUE + icon_state = "helm_sec_commander" + item_state = "helm_sec_commander" /obj/item/clothing/head/helmet/hos/dermal name = "dermal armor patch" @@ -89,7 +91,10 @@ /obj/item/clothing/head/helmet/riot name = "riot helmet" desc = "It's a helmet specifically designed to protect against close range attacks." - icon_state = "riot" + icon = 'icons/clothing/kit/modular_armor.dmi' + contained_sprite = TRUE + icon_state = "helm_riot_up" + item_state = "helm_riot_up" body_parts_covered = HEAD|FACE|EYES //face shield armor = list( melee = ARMOR_MELEE_VERY_HIGH, @@ -103,20 +108,26 @@ if (use_check_and_message(user)) return - if(src.icon_state == initial(icon_state)) - src.icon_state = "[icon_state]-up" - to_chat(user, "You raise the visor on \the [src].") - body_parts_covered = HEAD - else - src.icon_state = initial(icon_state) - to_chat(user, "You lower the visor on \the [src].") + if(icon_state == initial(icon_state)) + icon_state = "helm_riot_down" + item_state = "helm_riot_down" + to_chat(user, SPAN_NOTICE("You lower the visor on \the [src].")) body_parts_covered = HEAD|FACE|EYES + else + icon_state = initial(icon_state) + item_state = initial(item_state) + to_chat(user, SPAN_NOTICE("You raise the visor on \the [src].")) + body_parts_covered = HEAD update_clothing_icon() + /obj/item/clothing/head/helmet/ablative name = "ablative helmet" desc = "A helmet made from advanced materials which protects against concentrated energy weapons." - icon_state = "helmet_reflect" + icon = 'icons/clothing/kit/modular_armor.dmi' + contained_sprite = TRUE + icon_state = "helm_ablative" + item_state = "helm_ablative" armor = list( melee = ARMOR_MELEE_SMALL, bullet = ARMOR_BALLISTIC_MINOR, @@ -128,7 +139,10 @@ /obj/item/clothing/head/helmet/ballistic name = "ballistic helmet" desc = "A helmet with reinforced plating to protect against ballistic projectiles." - icon_state = "helmet_bulletproof" + icon = 'icons/clothing/kit/modular_armor.dmi' + contained_sprite = TRUE + icon_state = "helm_ballistic" + item_state = "helm_ballistic" armor = list( melee = ARMOR_MELEE_MINOR, bullet = ARMOR_BALLISTIC_AP, @@ -140,9 +154,10 @@ /obj/item/clothing/head/helmet/merc name = "combat helmet" desc = "A tan helmet made from advanced ceramic." - icon = 'icons/clothing/kit/heavy_armor.dmi' - item_state = "helmet" - icon_state = "helmet" + icon = 'icons/clothing/kit/modular_armor.dmi' + contained_sprite = TRUE + icon_state = "helm_heavy" + item_state = "helm_heavy" contained_sprite = TRUE armor = list( melee = ARMOR_MELEE_VERY_HIGH, diff --git a/code/modules/clothing/shoes/jobs.dm b/code/modules/clothing/shoes/jobs.dm index 109534e2c8d..5618fa581e3 100644 --- a/code/modules/clothing/shoes/jobs.dm +++ b/code/modules/clothing/shoes/jobs.dm @@ -42,6 +42,8 @@ desc = "Modified pair of boots, particularly friendly to those species whose toes hold claws." icon_state = "jackboots_toeless" species_restricted = null + sprite_sheets = list( + BODYTYPE_TAJARA = 'icons/mob/species/tajaran/shoes.dmi') /obj/item/clothing/shoes/jackboots/toeless/knee name = "knee-high toeless black boots" @@ -78,6 +80,8 @@ desc = "A pair of toeless work boots designed for use in industrial settings. Modified for species whose toes have claws." icon_state = "workboots_toeless" species_restricted = null + sprite_sheets = list( + BODYTYPE_TAJARA = 'icons/mob/species/tajaran/shoes.dmi') /obj/item/clothing/shoes/workboots/grey name = "grey workboots" diff --git a/code/modules/clothing/shoes/leg_guard.dm b/code/modules/clothing/shoes/leg_guard.dm deleted file mode 100644 index bb8fc28515f..00000000000 --- a/code/modules/clothing/shoes/leg_guard.dm +++ /dev/null @@ -1,78 +0,0 @@ -/obj/item/clothing/shoes/leg_guard - name = "leg guards" - desc = "These will protect your legs and feet." - icon_state = "leg_guards_riot" - item_state = "jackboots" - body_parts_covered = LEGS|FEET - w_class = ITEMSIZE_NORMAL - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.35 - force = 3 - drop_sound = 'sound/items/drop/boots.ogg' - pickup_sound = 'sound/items/pickup/boots.ogg' - -/obj/item/clothing/shoes/leg_guard/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) - if(..()) //This will only run if no other problems occured when equiping. - if(H.wear_suit) - if(H.wear_suit.body_parts_covered & LEGS) - to_chat(H, "You can't wear \the [src] with \the [H.wear_suit], it's in the way.") - return 0 - return 1 - -/obj/item/clothing/shoes/leg_guard/laserproof - name = "ablative leg guards" - desc = "These will protect your legs and feet from energy weapons." - icon_state = "leg_guards_laser" - siemens_coefficient = 0 - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_RIFLES, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - -/obj/item/clothing/shoes/leg_guard/bulletproof - name = "ballistic leg guards" - desc = "These will protect your legs and feet from ballistic weapons." - icon_state = "leg_guards_bullet" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - -/obj/item/clothing/shoes/leg_guard/riot - name = "riot leg guards" - desc = "These will protect your legs and feet from close combat weapons." - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - -/obj/item/clothing/shoes/leg_guard/merc - name = "heavy leg guards" - desc = "These leg guards will protect your legs and feet from harm." - icon = 'icons/clothing/kit/heavy_armor.dmi' - item_state = "legguards" - icon_state = "legguards" - contained_sprite = TRUE - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_HANDGUNS, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - species_restricted = null diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 9c9d287242f..8015178fc83 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -236,6 +236,8 @@ obj/item/clothing/shoes/sandal/clogs icon_state = "winterboots_toeless" item_state = "winterboots_toeless" species_restricted = null + sprite_sheets = list( + BODYTYPE_TAJARA = 'icons/mob/species/tajaran/shoes.dmi') /obj/item/clothing/shoes/caligae name = "caligae" diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm index d409939f0d9..42734e5bee2 100644 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm @@ -144,7 +144,7 @@ if("cell") if(cell) - to_chat(user, "You detatch \the [cell] from \the [src]'s battery mount.") + to_chat(user, "You detach \the [cell] from \the [src]'s battery mount.") for(var/obj/item/rig_module/module in installed_modules) module.deactivate() if(user.r_hand && user.l_hand) @@ -172,7 +172,7 @@ return var/obj/item/rig_module/removed = possible_removals[removal_choice] - to_chat(user, "You detatch \the [removed] from \the [src].") + to_chat(user, "You detach \the [removed] from \the [src].") removed.forceMove(get_turf(src)) removed.removed() installed_modules -= removed diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 2e4e89e6153..de02afc1f23 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -99,73 +99,6 @@ pockets.max_w_class = ITEMSIZE_SMALL pockets.max_storage_space = 8 -/obj/item/clothing/suit/armor/riot - name = "riot vest" - desc = "A vest of armor with heavy padding to protect against melee attacks. Looks like it might impair movement." - icon_state = "riot_vest" - item_state = "riot_vest" - slowdown = 1 - armor = list( - melee = ARMOR_MELEE_VERY_HIGH, - bullet = ARMOR_BALLISTIC_SMALL, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.35 - pocket_slots = 4 - -/obj/item/clothing/suit/armor/bulletproof - name = "ballistic vest" - desc = "A vest that excels in protecting the wearer against high-velocity solid projectiles." - icon_state = "bulletproof_armor" - item_state = "bulletproof_armor" - blood_overlay_type = "armor" - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_AP, - laser = ARMOR_LASER_SMALL, - energy = ARMOR_ENERGY_MINOR, - bomb = ARMOR_BOMB_PADDED - ) - siemens_coefficient = 0.35 - pocket_slots = 4 - -/obj/item/clothing/suit/armor/laserproof - name = "ablative armor vest" - desc = "A vest that excels in protecting the wearer against energy projectiles." - icon_state = "armor_reflec" - item_state = "armor_reflec" - blood_overlay_type = "armor" - armor = list( - melee = ARMOR_MELEE_KNIVES, - bullet = ARMOR_BALLISTIC_PISTOL, - laser = ARMOR_LASER_RIFLES, - energy = ARMOR_ENERGY_RESISTANT - ) - siemens_coefficient = 0 - pocket_slots = 4 - -/obj/item/clothing/suit/armor/laserproof/handle_shield(mob/user, var/on_back, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") - if(istype(damage_source, /obj/item/projectile/energy) || istype(damage_source, /obj/item/projectile/beam)) - var/obj/item/projectile/P = damage_source - - var/reflectchance = 40 - round(damage/3) - if(!(def_zone in list(BP_CHEST, BP_GROIN))) - reflectchance /= 2 - if(P.starting && prob(reflectchance)) - visible_message("\The [user]'s [src.name] reflects [attack_text]!") - - // Find a turf near or on the original location to bounce to - var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) - - // redirect the projectile - P.firer = user - P.old_style_target(locate(new_x, new_y, P.z)) - - return PROJECTILE_CONTINUE // complete projectile permutation - /obj/item/clothing/suit/armor/swat name = "swat suit" desc = "A heavily armored suit that protects against moderate damage. Used in special operations." @@ -353,7 +286,6 @@ desc = "A set of armor worn by medical members of the Emergency Response Team. Has red and white highlights." icon_state = "ertarmor_med" -//New Vests /obj/item/clothing/suit/storage/vest name = "armor vest" desc = "A simple kevlar plate carrier." @@ -396,6 +328,7 @@ item_state = "hosvest_nobadge" icon_badge = "hosvest_badge" icon_nobadge = "hosvest_nobadge" + /obj/item/clothing/suit/storage/vest/pcrc name = "PCRC armor vest" desc = "A simple kevlar plate carrier belonging to Proxima Centauri Risk Control. This one has a PCRC crest clipped to the chest." @@ -433,21 +366,6 @@ bomb = ARMOR_BOMB_MINOR ) -/obj/item/clothing/suit/storage/vest/heavy - name = "heavy armor vest" - desc = "A heavy kevlar plate carrier with webbing attached." - icon_state = "webvest" - item_state = "webvest" - armor = list( - melee = ARMOR_MELEE_MAJOR, - bullet = ARMOR_BALLISTIC_RESISTANT, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_SMALL, - bomb = ARMOR_BOMB_PADDED, - ) - slowdown = 1 - siemens_coefficient = 0.35 - /obj/item/clothing/suit/storage/vest/heavy/officer name = "officer heavy armor vest" desc = "A heavy kevlar plate carrier belonging to Nanotrasen with webbing attached. This one has a security holobadge clipped to the chest." @@ -487,23 +405,6 @@ icon_badge = "pcrcwebvest_badge" icon_nobadge = "pcrcwebvest_nobadge" -//Provides the protection of a merc voidsuit, but only covers the chest/groin, and also takes up a suit slot. In exchange it has no slowdown and provides storage. -/obj/item/clothing/suit/storage/vest/merc - name = "heavy armor vest" - desc = "A high-quality armor vest in a fetching tan. It is surprisingly flexible and light, even with the added webbing and armor plating." - icon = 'icons/clothing/kit/heavy_armor.dmi' - item_state = "vest" - icon_state = "vest" - contained_sprite = TRUE - armor = list( - melee = ARMOR_MELEE_RESISTANT, - bullet = ARMOR_BALLISTIC_RIFLE, - laser = ARMOR_LASER_MAJOR, - energy = ARMOR_ENERGY_RESISTANT, - bomb = ARMOR_BOMB_PADDED - ) - body_parts_covered = UPPER_TORSO|LOWER_TORSO - //ert related armor /obj/item/clothing/suit/storage/vest/heavy/ert diff --git a/code/modules/clothing/suits/modular_armor.dm b/code/modules/clothing/suits/modular_armor.dm new file mode 100644 index 00000000000..246cd9470d5 --- /dev/null +++ b/code/modules/clothing/suits/modular_armor.dm @@ -0,0 +1,218 @@ +/obj/item/clothing/suit/armor/carrier + name = "plate carrier" + desc = "A plate carrier that can be decked out with various armor plates and accessories." + icon = 'icons/clothing/kit/modular_armor.dmi' + contained_sprite = TRUE + icon_state = "plate_carrier" + item_state = "plate_carrier" + blood_overlay_type = "armor" + w_class = ITEMSIZE_NORMAL + restricted_accessory_slots = list(ACCESSORY_SLOT_ARMOR_PLATE, ACCESSORY_SLOT_ARM_GUARDS, ACCESSORY_SLOT_LEG_GUARDS, ACCESSORY_SLOT_ARMOR_POCKETS, ACCESSORY_SLOT_ARMOR_PIN, ACCESSORY_SLOT_CAPE) + valid_accessory_slots = list(ACCESSORY_SLOT_ARMOR_PLATE, ACCESSORY_SLOT_ARM_GUARDS, ACCESSORY_SLOT_LEG_GUARDS, ACCESSORY_SLOT_ARMOR_POCKETS, ACCESSORY_SLOT_ARMOR_PIN, ACCESSORY_SLOT_CAPE) + +/obj/item/clothing/suit/armor/carrier/officer + starting_accessories = list( + /obj/item/clothing/accessory/armor_plate + ) + +/obj/item/clothing/suit/armor/carrier/hos + starting_accessories = list( + /obj/item/clothing/accessory/armor_plate/hos + ) + +/obj/item/clothing/suit/armor/carrier/generic + starting_accessories = list( + /obj/item/clothing/accessory/armor_plate/generic + ) + +/obj/item/clothing/suit/armor/carrier/riot + starting_accessories = list( + /obj/item/clothing/accessory/armor_plate/riot, + /obj/item/clothing/accessory/leg_guard/riot, + /obj/item/clothing/accessory/arm_guard/riot + ) + +/obj/item/clothing/suit/armor/carrier/ballistic + starting_accessories = list( + /obj/item/clothing/accessory/armor_plate/ballistic, + /obj/item/clothing/accessory/leg_guard/ballistic, + /obj/item/clothing/accessory/arm_guard/ballistic + ) + +/obj/item/clothing/suit/armor/carrier/ablative + starting_accessories = list( + /obj/item/clothing/accessory/armor_plate/ablative, + /obj/item/clothing/accessory/leg_guard/ablative, + /obj/item/clothing/accessory/arm_guard/ablative + ) + +/obj/item/clothing/suit/armor/carrier/military + starting_accessories = list( + /obj/item/clothing/accessory/armor_plate/military, + /obj/item/clothing/accessory/leg_guard/military, + /obj/item/clothing/accessory/arm_guard/military + ) + +/obj/item/clothing/suit/armor/carrier/heavy + starting_accessories = list( + /obj/item/clothing/accessory/armor_plate/heavy, + /obj/item/clothing/accessory/leg_guard/heavy, + /obj/item/clothing/accessory/arm_guard/heavy + ) + +/obj/item/clothing/suit/armor/carrier/heavy/sec + starting_accessories = list( + /obj/item/clothing/accessory/armor_plate/heavy/sec, + /obj/item/clothing/accessory/leg_guard/heavy/sec, + /obj/item/clothing/accessory/arm_guard/heavy/sec + ) + +/obj/item/clothing/accessory/armor_plate + name = "corporate armor plate" + desc = "A particularly light-weight armor plate in stylish corporate black. Unfortunately, not very good if you hold it with your hands." + desc_info = "These items must be hooked onto plate carriers for them to work!" + icon = 'icons/clothing/kit/modular_armor.dmi' + icon_state = "plate_sec" + item_state = "plate_sec" + contained_sprite = TRUE + slot = ACCESSORY_SLOT_ARMOR_PLATE + body_parts_covered = UPPER_TORSO|LOWER_TORSO + w_class = ITEMSIZE_NORMAL + armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_PISTOL, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED + ) + +/obj/item/clothing/accessory/armor_plate/generic + name = "kevlar armor plate" + desc = "A light-weight kevlar armor plate in drab black colors. A galactic favourite of Zavodskoi fans." + icon_state = "plate_generic" + item_state = "plate_generic" + +/obj/item/clothing/accessory/armor_plate/hos + name = "commander armor plate" + desc = "A particularly light-weight armor plate with really cool gold bands. Even more stylish when the gold bands are covered in the blood of your goons!" + icon_state = "plate_sec_commander" + item_state = "plate_sec_commander" + +/obj/item/clothing/accessory/armor_plate/ballistic + name = "ballistic armor plate" + desc = "A heavy alloy ballistic armor plate in gunmetal grey. Shockingly stylish, but also shockingly tiring to wear!" + icon_state = "plate_ballistic" + item_state = "plate_ballistic" + armor = list( + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_AP, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED + ) + slowdown = 0.5 + +/obj/item/clothing/accessory/armor_plate/riot + name = "riot armor plate" + desc = "A heavily padded riot armor plate. Many Biesellites wish they had these for Black Friday!" + icon_state = "plate_riot" + item_state = "plate_riot" + armor = list( + melee = ARMOR_MELEE_VERY_HIGH, + bullet = ARMOR_BALLISTIC_SMALL, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED + ) + slowdown = 0.5 + +/obj/item/clothing/accessory/armor_plate/ablative + name = "ablative armor plate" + desc = "A heavy ablative armor plate. Shine like a diamond!" + icon_state = "plate_ablative" + item_state = "plate_ablative" + armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_PISTOL, + laser = ARMOR_LASER_RIFLES, + energy = ARMOR_ENERGY_RESISTANT + ) + slowdown = 0.5 + siemens_coefficient = 0 + +/obj/item/clothing/accessory/armor_plate/military + name = "military armor plate" + desc = "A heavy military armor plate. Worn by Solarian fanatics everywhere since the 2100s." + icon_state = "plate_military" + item_state = "plate_military" + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_MAJOR, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED, + ) + slowdown = 0.5 + +/obj/item/clothing/accessory/armor_plate/heavy + name = "heavy armor plate" + desc = "A heavy and menacing armor plate. Tan armor plates went out of style centuries ago!" + icon_state = "plate_heavy" + item_state = "plate_heavy" + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_MAJOR, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED, + ) + slowdown = 0.5 + +/obj/item/clothing/accessory/armor_plate/heavy/sec + name = "heavy corporate armor plate" + desc = "A heavy and stylish armor plate with blue highlights. That prevents teamkills, right?" + icon_state = "plate_sec_heavy" + item_state = "plate_sec_heavy" + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_HANDGUNS, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED + ) + +/obj/item/clothing/head/helmet/security + name = "corporate helmet" + desc = "A shiny helmet in corporate black! Goes well with the respective plate carrier." + icon = 'icons/clothing/kit/modular_armor.dmi' + contained_sprite = TRUE + icon_state = "helm_sec" + item_state = "helm_sec" + +/obj/item/clothing/head/helmet/security/heavy + name = "corporate heavy helmet" + desc = "A shiny and heavy helmet in corporate black! Goes well with the respective plate carrier." + icon_state = "helm_sec_heavy" + item_state = "helm_sec_heavy" + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_HANDGUNS, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED + ) + +/obj/item/clothing/head/helmet/military + name = "military helmet" + desc = "A helmet in drab olive. Used by Solarian fanatics since the 2100s. You really had to pick the least original kit, didn't you?" + icon = 'icons/clothing/kit/modular_armor.dmi' + contained_sprite = TRUE + icon_state = "helm_military" + item_state = "helm_military" + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_MAJOR, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED, + ) \ No newline at end of file diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 765d07c11ca..b5e6cda29d0 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -63,7 +63,7 @@ icon_state = "[initial(icon_state)][opened ? "_open" : ""]" item_state = icon_state -/obj/item/clothing/suit/storage/vest/merc/Initialize() +/obj/item/clothing/suit/armor/carrier/heavy/Initialize() . = ..() pockets = new/obj/item/storage/internal(src) pockets.storage_slots = 4 diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 66d10e0a8f4..0bbc8eb3130 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -7,7 +7,7 @@ overlay_state = null slot_flags = SLOT_TIE w_class = ITEMSIZE_SMALL - var/slot = "decor" + var/slot = ACCESSORY_SLOT_GENERIC var/obj/item/clothing/has_suit = null //the suit the tie may be attached to var/image/inv_overlay = null //overlay used when attached to clothing. var/image/mob_overlay = null @@ -268,7 +268,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS siemens_coefficient = 0.9 w_class = ITEMSIZE_NORMAL - slot = "over" + slot = ACCESSORY_SLOT_CAPE var/allow_tail_hiding = TRUE //in case if you want to allow someone to switch the HIDETAIL var or not /obj/item/clothing/accessory/poncho/verb/toggle_hide_tail() @@ -488,11 +488,11 @@ overlay_state = "galaxycape" /obj/item/clothing/accessory/poncho/trinary - name = "trinary perfection cape" - desc = "A brilliant red and brown cape, commonly worn by those who serve the Trinary Perfection." - icon_state = "trinary_cape" - item_state = "trinary_cape" - overlay_state = "trinary_cape" + name = "trinary perfection cape" + desc = "A brilliant red and brown cape, commonly worn by those who serve the Trinary Perfection." + icon_state = "trinary_cape" + item_state = "trinary_cape" + overlay_state = "trinary_cape" //tau ceti legion ribbons /obj/item/clothing/accessory/legion @@ -501,8 +501,8 @@ icon_state = "senior_ribbon" item_state = "senior_ribbon" overlay_state = "senior_ribbon" - slot = "over" - flippable = 1 + slot = ACCESSORY_SLOT_CAPE + flippable = TRUE /obj/item/clothing/accessory/legion/specialist name = "specialist medallion" @@ -516,7 +516,7 @@ desc = "A series of complex tubing meant to dissipate heat from the skin passively." icon_state = "venter" item_state = "venter" - slot = "over" + slot = ACCESSORY_SLOT_CAPE /obj/item/clothing/accessory/offworlder/bracer name = "legbrace" diff --git a/code/modules/clothing/under/accessories/armband.dm b/code/modules/clothing/under/accessories/armband.dm index abc23cd9e22..f8f9976872b 100644 --- a/code/modules/clothing/under/accessories/armband.dm +++ b/code/modules/clothing/under/accessories/armband.dm @@ -2,8 +2,8 @@ name = "red armband" desc = "A fancy red armband!" icon_state = "red" - slot = "armband" - flippable = 1 + slot = ACCESSORY_SLOT_ARMBAND + flippable = TRUE /obj/item/clothing/accessory/armband/sec name = "security armband" @@ -49,7 +49,7 @@ name = "science exo-stellar ribbon" desc = "Durable cloth meant to be worn over or attached to the chest pieces of the ESS modules. This one is purple." icon_state = "ribbon_sci" - slot = "over" + slot = ACCESSORY_SLOT_CAPE flippable = 0 /obj/item/clothing/accessory/armband/offworlder/engineering diff --git a/code/modules/clothing/under/accessories/armor.dm b/code/modules/clothing/under/accessories/armor.dm new file mode 100644 index 00000000000..f122803a3d3 --- /dev/null +++ b/code/modules/clothing/under/accessories/armor.dm @@ -0,0 +1,197 @@ +//Leg guards. +/obj/item/clothing/accessory/leg_guard + name = "corporate leg guards" + desc = "These will protect your legs and feet." + desc_info = "These items must be hooked onto plate carriers for them to work!" + icon = 'icons/clothing/kit/modular_armor.dmi' + icon_state = "legguards_sec" + item_state = "legguards_sec" + contained_sprite = TRUE + slot = ACCESSORY_SLOT_LEG_GUARDS + w_class = ITEMSIZE_NORMAL + armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_PISTOL, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED + ) + body_parts_covered = LEGS|FEET + contained_sprite = TRUE + drop_sound = 'sound/items/drop/boots.ogg' + pickup_sound = 'sound/items/pickup/boots.ogg' + +/obj/item/clothing/accessory/leg_guard/ablative + name = "ablative leg guards" + desc = "These will protect your legs and feet from energy weapons." + icon_state = "legguards_ablative" + item_state = "legguards_ablative" + armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_SMALL, + laser = ARMOR_LASER_RIFLES, + energy = ARMOR_ENERGY_RESISTANT, + bomb = ARMOR_BOMB_PADDED + ) + siemens_coefficient = 0 + +/obj/item/clothing/accessory/leg_guard/ballistic + name = "ballistic leg guards" + desc = "These will protect your legs and feet from ballistic weapons." + icon_state = "legguards_ballistic" + item_state = "legguards_ballistic" + armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_RIFLE, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED + ) + +/obj/item/clothing/accessory/leg_guard/riot + name = "riot leg guards" + desc = "These will protect your legs and feet from close combat weapons." + icon_state = "legguards_riot" + item_state = "legguards_riot" + armor = list( + melee = ARMOR_MELEE_VERY_HIGH, + bullet = ARMOR_BALLISTIC_SMALL, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED + ) + +/obj/item/clothing/accessory/leg_guard/military + name = "military leg guards" + desc = "These will protect your legs and feet from most things." + icon_state = "legguards_military" + item_state = "legguards_military" + armor = list( + melee = ARMOR_MELEE_VERY_HIGH, + bullet = ARMOR_BALLISTIC_SMALL, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_PADDED + ) + +/obj/item/clothing/accessory/leg_guard/heavy + name = "heavy leg guards" + desc = "These leg guards will protect your legs and feet from most things." + icon_state = "legguards_heavy" + item_state = "legguards_heavy" + armor = list( + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_PISTOL, + laser = ARMOR_LASER_HANDGUNS, + energy = ARMOR_ENERGY_RESISTANT, + bomb = ARMOR_BOMB_PADDED + ) + +/obj/item/clothing/accessory/leg_guard/heavy/sec + name = "heavy corporate leg guards" + icon_state = "legguards_sec_heavy" + item_state = "legguards_sec_heavy" + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_HANDGUNS, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED + ) + +//Arm guards. +/obj/item/clothing/accessory/arm_guard + name = "corporate arm guards" + desc = "These arm guards will protect your hands and arms." + icon = 'icons/clothing/kit/modular_armor.dmi' + icon_state = "armguards_sec" + item_state = "armguards_sec" + contained_sprite = TRUE + slot = ACCESSORY_SLOT_ARM_GUARDS + body_parts_covered = HANDS|ARMS + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_MINOR, + laser = ARMOR_LASER_MAJOR, + energy = ARMOR_ENERGY_MINOR, + bomb = ARMOR_BOMB_MINOR + ) + w_class = ITEMSIZE_NORMAL + contained_sprite = TRUE + drop_sound = 'sound/items/drop/axe.ogg' + pickup_sound = 'sound/items/pickup/axe.ogg' + +/obj/item/clothing/accessory/arm_guard/ablative + name = "ablative arm guards" + desc = "These arm guards will protect your hands and arms from energy weapons." + icon_state = "armguards_ablative" + item_state = "armguards_ablative" + armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_SMALL, + laser = ARMOR_LASER_RIFLES, + energy = ARMOR_ENERGY_RESISTANT + ) + siemens_coefficient = 0 + +/obj/item/clothing/accessory/arm_guard/ballistic + name = "ballistic arm guards" + desc = "These arm guards will protect your hands and arms from ballistic weapons." + icon_state = "armguards_ballistic" + item_state = "armguards_ballistic" + armor = list( + melee = ARMOR_MELEE_KNIVES, + bullet = ARMOR_BALLISTIC_RIFLE, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_MINOR + ) + +/obj/item/clothing/accessory/arm_guard/riot + name = "riot arm guards" + desc = "These arm guards will protect your hands and arms from close combat weapons." + icon_state = "armguards_riot" + item_state = "armguards_riot" + armor = list( + melee = ARMOR_MELEE_VERY_HIGH, + bullet = ARMOR_BALLISTIC_SMALL, + laser = ARMOR_LASER_SMALL, + energy = ARMOR_ENERGY_MINOR + ) + +/obj/item/clothing/accessory/arm_guard/military + name = "military arm guards" + desc = "These arm guards will protect your hands and arms from most things." + icon_state = "armguards_military" + item_state = "armguards_military" + armor = list( + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_PISTOL, + laser = ARMOR_LASER_HANDGUNS, + energy = ARMOR_ENERGY_RESISTANT, + bomb = ARMOR_BOMB_PADDED + ) + +/obj/item/clothing/accessory/arm_guard/heavy + name = "heavy arm guards" + desc = "These arm guards will protect your hands and arms from most things." + icon_state = "armguards_heavy" + item_state = "armguards_heavy" + armor = list( + melee = ARMOR_MELEE_RESISTANT, + bullet = ARMOR_BALLISTIC_PISTOL, + laser = ARMOR_LASER_HANDGUNS, + energy = ARMOR_ENERGY_RESISTANT, + bomb = ARMOR_BOMB_PADDED + ) + +/obj/item/clothing/accessory/arm_guard/heavy/sec + name = "heavy corporate arm guards" + icon_state = "armguards_sec_heavy" + item_state = "armguards_sec_heavy" + armor = list( + melee = ARMOR_MELEE_MAJOR, + bullet = ARMOR_BALLISTIC_RESISTANT, + laser = ARMOR_LASER_HANDGUNS, + energy = ARMOR_ENERGY_SMALL, + bomb = ARMOR_BOMB_PADDED + ) diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index 0f8e9d4775e..cf7d43cc2fe 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -2,7 +2,7 @@ name = "shoulder holster" desc = "A handgun holster." icon_state = "holster" - slot = "utility" + slot = ACCESSORY_SLOT_UTILITY var/obj/item/holstered = null var/sound_in = 'sound/weapons/holster/holsterin.ogg' var/sound_out = 'sound/weapons/holster/holsterout.ogg' diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index b4a4c51280e..d3ede838aba 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -2,7 +2,7 @@ name = "load bearing equipment" desc = "Used to hold things when you don't have enough hands." icon_state = "webbing" - slot = "utility" + slot = ACCESSORY_SLOT_UTILITY var/slots = 3 var/obj/item/storage/internal/hold w_class = ITEMSIZE_NORMAL diff --git a/code/modules/custom_ka/core.dm b/code/modules/custom_ka/core.dm index 25835cbc80b..ec85d0b1d6e 100644 --- a/code/modules/custom_ka/core.dm +++ b/code/modules/custom_ka/core.dm @@ -372,7 +372,7 @@ accuracy = round(recoil_increase*0.25) accuracy_wielded = accuracy * 0.5 -/obj/item/gun/custom_ka/attack_self(mob/user as mob) +/obj/item/gun/custom_ka/unique_action(mob/user) . = ..() if(!wielded) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 743578d6706..d82f160d5f8 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -1648,9 +1648,9 @@ All custom items with worn sprites must follow the contained sprite system: http contained_sprite = TRUE /obj/item/fluff/cress_book //Lyric Book - Emily Cress - mattatlas - name = "lyric book" - desc = "An old, faded folder containing various alphabetically organized lyrics of several songs, including musical sheets for guitars. A dark purple H is scribbled on the center, along with half a heart on the \ - left and a cut on the bottom right. The lyrics inside have two copies each: one in Sol Common and one in Tau Ceti Basic. It generally looks to be hard rock." + name = "lyric folder" + desc = "An old, slightly faded folder containing various alphabetically organized lyrics of several songs, including musical sheets for guitars. The name on the folder reads \"Hyo\". \ + The lyrics inside have two copies each: one in Sol Common and one in Tau Ceti Basic. It generally looks to be hard rock or metal, with overall somber lyrics." icon = 'icons/obj/custom_items/cress_items.dmi' icon_state = "cress_book" w_class = ITEMSIZE_SMALL @@ -1660,9 +1660,9 @@ All custom items with worn sprites must follow the contained sprite system: http /obj/item/fluff/cress_book/attack_self(mob/user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.visible_message("[user] begins searching through \the [src] pages.") + user.visible_message("[user] begins searching through \the [src]'s pages...") if(do_after(user, 25)) - to_chat(user, "You read on the pages of \the [src]: [pick(lyrics)]") + to_chat(user, "You pick out a song in the folder and read the lyrics: [pick(lyrics)]") /obj/item/modular_computer/laptop/fluff/harrow_laptop //Developer's Laptop - Danny Harrow - brainos diff --git a/code/modules/item_worth/worths_list.dm b/code/modules/item_worth/worths_list.dm index ac7e1a360be..aeca3f4cfbd 100644 --- a/code/modules/item_worth/worths_list.dm +++ b/code/modules/item_worth/worths_list.dm @@ -485,12 +485,12 @@ var/list/worths = list( /obj/item/clothing/suit/unathi/mantle = 80, /obj/item/clothing/suit/cultrobes = 200, /obj/item/clothing/suit/storage/vest/heavy/ert = 2500, - /obj/item/clothing/suit/storage/vest/merc = 3000, + /obj/item/clothing/suit/armor/carrier/heavy = 3000, /obj/item/clothing/suit/armor/vest/ert = 2500, /obj/item/clothing/suit/armor/vest = 550, - /obj/item/clothing/suit/armor/riot = 700, - /obj/item/clothing/suit/armor/bulletproof = 700, - /obj/item/clothing/suit/armor/laserproof = 700, + /obj/item/clothing/suit/armor/carrier/riot = 700, + /obj/item/clothing/suit/armor/carrier/ballistic = 700, + /obj/item/clothing/suit/armor/carrier/ablative = 700, /obj/item/clothing/suit/armor/reactive = 5000, /obj/item/clothing/suit/armor/centcomm = 2000, /obj/item/clothing/suit/armor/heavy = 1000, diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index 4e803d555a4..674885a7014 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -13,7 +13,7 @@ new /datum/stack_recipe("[display_name] sword hilt", /obj/item/material/sword_hilt, 10, time = 100, one_per_turf = 0, on_floor = 1, supplied_material = "[name]"), new /datum/stack_recipe("[display_name] sword blade", /obj/item/material/sword_blade, 15, time = 100, one_per_turf = 0, on_floor = 1, supplied_material = "[name]"), new /datum/stack_recipe("[display_name] ring", /obj/item/clothing/ring/material, 1, on_floor = 1, supplied_material = "[name]"), - new /datum/stack_recipe("[display_name] armor plate", /obj/item/material/armor_plating, 3, time = 20, on_floor = 1, supplied_material = "[name]") + new /datum/stack_recipe("[display_name] armor plating", /obj/item/material/armor_plating, 3, time = 20, on_floor = 1, supplied_material = "[name]") )) if(integrity >= 50) diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 5e692f2080a..066b6c65181 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -2,7 +2,7 @@ icon_state = "miningdrone" mod_type = "Mining" law_type = /datum/ai_laws/mining_drone - module_type = /obj/item/robot_module/mining_drone/basic + module_type = /obj/item/robot_module/mining_drone holder_type = /obj/item/holder/drone/mining maxHealth = 45 health = 45 @@ -15,7 +15,6 @@ var/seeking_player = FALSE var/health_upgrade var/ranged_upgrade - var/melee_upgrade var/drill_upgrade /mob/living/silicon/robot/drone/mining/Initialize() @@ -47,6 +46,20 @@ update_icon() density = FALSE +/mob/living/silicon/robot/drone/mining/examine(mob/user) + . = ..() + if(health_upgrade) + to_chat(user, SPAN_NOTICE("\The [src] appears to have a reinforced chassis.")) + if(ranged_upgrade || drill_upgrade) + var/output_text = "\The [src]'s lights indicates it has" + if(ranged_upgrade && drill_upgrade) + output_text += " fully upgraded mining equipment." + else if(ranged_upgrade) + output_text += " a stationbound class KA mounted to it." + else if(drill_upgrade) + output_text += " a jackhammer drill mounted to it." + to_chat(user, SPAN_NOTICE(output_text)) + /mob/living/silicon/robot/drone/mining/updatename() real_name = "NT-I-[rand(100,999)]" name = real_name @@ -87,6 +100,11 @@ to_chat(user, SPAN_WARNING("\The [src] is not compatible with \the [W].")) return + if(istype(W, /obj/item/device/mine_bot_upgrade)) + var/obj/item/device/mine_bot_upgrade/MBU = W + MBU.upgrade_bot(src, user) + return + else if (W.GetID()) if(!allowed(user)) to_chat(user, SPAN_WARNING("Access denied.")) @@ -130,29 +148,22 @@ icon_state = "mainboard" icon = 'icons/obj/module.dmi' -/obj/item/device/mine_bot_upgrade/afterattack(var/mob/living/silicon/robot/drone/mining/M, mob/user, proximity) - if(!istype(M) || !proximity) - return - if(upgrade_bot(M, user)) - to_chat(user, SPAN_NOTICE("You successfully install \the [src] into \the [M].")) - /obj/item/device/mine_bot_upgrade/proc/upgrade_bot(var/mob/living/silicon/robot/drone/mining/M, mob/user) - if(M.melee_upgrade) + if(M.drill_upgrade) to_chat(user, SPAN_WARNING("[src] already has a drill upgrade installed!")) return M.mod_type = initial(M.mod_type) M.uneq_all() - qdel(M.module) - M.module = null + QDEL_NULL(M.module) if(M.ranged_upgrade) - new /obj/item/robot_module/mining_drone/drillandka(M) + M.module = new /obj/item/robot_module/mining_drone/drillandka(M, M) else - new /obj/item/robot_module/mining_drone/drill(M) - M.melee_upgrade = TRUE + M.module = new /obj/item/robot_module/mining_drone/drill(M, M) + M.drill_upgrade = TRUE M.module.rebuild() M.recalculate_synth_capacities() + to_chat(user, SPAN_NOTICE("You successfully install \the [src] into \the [M].")) qdel(src) - return TRUE /obj/item/device/mine_bot_upgrade/health name = "minebot chassis upgrade" @@ -168,8 +179,8 @@ var/datum/robot_component/C = M.components[V] C.max_damage = 30 M.health_upgrade = TRUE + to_chat(user, SPAN_NOTICE("You successfully install \the [src] into \the [M].")) qdel(src) - return TRUE /obj/item/device/mine_bot_upgrade/ka name = "minebot kinetic accelerator upgrade" @@ -180,17 +191,16 @@ return M.mod_type = initial(M.mod_type) M.uneq_all() - qdel(M.module) - M.module = null - if(M.melee_upgrade) - new /obj/item/robot_module/mining_drone/drillandka(M) + QDEL_NULL(M.module) + if(M.drill_upgrade) + M.module = new /obj/item/robot_module/mining_drone/drillandka(M, M) else - new /obj/item/robot_module/mining_drone/ka(M) + M.module = new /obj/item/robot_module/mining_drone/ka(M, M) M.ranged_upgrade = TRUE M.module.rebuild() M.recalculate_synth_capacities() + to_chat(user, SPAN_NOTICE("You successfully install \the [src] into \the [M].")) qdel(src) - return TRUE /mob/living/silicon/robot/drone/mining/roundstart/Initialize() . = ..() diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index d0076f23ccb..99707d22266 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -150,7 +150,7 @@ //buckled_to if(buckled_to) - msg += "[get_pronoun("He")] [get_pronoun("is")] [icon2html(buckled_to, user)] buckled_to to [buckled_to]!\n" + msg += "[get_pronoun("He")] [get_pronoun("is")] [icon2html(buckled_to, user)] buckled to [buckled_to]!\n" //belt if(belt) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 3bc283ca2e4..d9e15e8b585 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -183,6 +183,7 @@ /mob/living/carbon/human/proc/ClothesSlowdown() for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, wear_mask, shoes, l_ear, r_ear, glasses, belt)) . += I.slowdown + . += I.slowdown_accessory /mob/living/carbon/human/get_pulling_movement_delay() . = ..() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 3b5f6fb3131..d8dbed0c88b 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -967,9 +967,14 @@ var/global/list/robot_modules = list( no_slip = TRUE networks = list(NETWORK_MINE) -/obj/item/robot_module/mining_drone/proc/set_up_default(var/mob/living/silicon/robot/R) +/obj/item/robot_module/mining_drone/Initialize(mapload, mob/living/silicon/robot/R) + . = ..() + set_up_default(R) + +/obj/item/robot_module/mining_drone/proc/set_up_default(var/mob/living/silicon/robot/R, var/has_drill = TRUE) modules += new /obj/item/device/flash(src) - modules += new /obj/item/pickaxe/drill(src) + if(has_drill) + modules += new /obj/item/pickaxe/drill(src) modules += new /obj/item/storage/bag/ore/drone(src) modules += new /obj/item/storage/bag/sheetsnatcher/borg(src) modules += new /obj/item/gripper/miner(src) @@ -996,23 +1001,16 @@ var/global/list/robot_modules = list( emag = new /obj/item/gun/energy/plasmacutter/mounted(src) emag.name = "Mounted Plasma Cutter" -/obj/item/robot_module/mining_drone/basic/Initialize(mapload, mob/living/silicon/robot/robot) - . = ..() - set_up_default(src) - -/obj/item/robot_module/mining_drone/drill/Initialize(mapload, mob/living/silicon/robot/robot) - . = ..() - set_up_default(src, FALSE) +/obj/item/robot_module/mining_drone/drill/set_up_default(mob/living/silicon/robot/R) + ..(R, FALSE) modules += new /obj/item/pickaxe/jackhammer(src) -/obj/item/robot_module/mining_drone/ka/Initialize(mapload, mob/living/silicon/robot/robot) - . = ..() - set_up_default(src) +/obj/item/robot_module/mining_drone/ka/set_up_default(mob/living/silicon/robot/R) + ..(R) modules += new /obj/item/gun/custom_ka/cyborg(src) -/obj/item/robot_module/mining_drone/drillandka/Initialize(mapload, mob/living/silicon/robot/robot) - . = ..() - set_up_default(src, FALSE) +/obj/item/robot_module/mining_drone/drillandka/set_up_default(mob/living/silicon/robot/R) + ..(R, FALSE) modules += new /obj/item/pickaxe/jackhammer(src) modules += new /obj/item/gun/custom_ka/cyborg(src) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 03ac137bf11..6ad1ea8e798 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1335,6 +1335,18 @@ set hidden = 1 set_face_dir(client.client_dir(WEST)) +/mob/living/verb/unique_action() + set hidden = 1 + var/obj/item/gun/dakka = get_active_hand() + if(istype(dakka)) + dakka.unique_action(src) + +/mob/living/verb/toggle_firing_mode() + set hidden = 1 + var/obj/item/gun/dakka = get_active_hand() + if(istype(dakka)) + dakka.toggle_firing_mode(src) + /mob/proc/adjustEarDamage() return diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index fd5f5a6b81f..3a9b5ae5f7e 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -35,6 +35,8 @@ var/obj/screen/gun/move/gun_move_icon = null var/obj/screen/gun/run/gun_run_icon = null var/obj/screen/gun/mode/gun_setting_icon = null + var/obj/screen/gun/unique_action_icon = null + var/obj/screen/gun/toggle_firing_mode = null var/obj/screen/up_hint = null //spells hud icons - this interacts with add_spell and remove_spell diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index 837b35e2889..95b86ec9d3a 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -79,7 +79,7 @@ verbs += /obj/item/modular_computer/proc/eject_usb if(battery_module && battery_module.hotswappable) verbs += /obj/item/modular_computer/proc/eject_battery - if(ai_slot && ai_slot.stored_card) + if(ai_slot) verbs += /obj/item/modular_computer/proc/eject_ai if(personal_ai) verbs += /obj/item/modular_computer/proc/eject_personal_ai diff --git a/code/modules/modular_computers/computers/subtypes/preset_console.dm b/code/modules/modular_computers/computers/subtypes/preset_console.dm index 048df45c28c..f93e2f51d18 100644 --- a/code/modules/modular_computers/computers/subtypes/preset_console.dm +++ b/code/modules/modular_computers/computers/subtypes/preset_console.dm @@ -80,6 +80,10 @@ _app_preset_type = /datum/modular_computer_app_presets/command/account enrolled = 1 +/obj/item/modular_computer/console/preset/command/account/centcomm + name = "centcomm accounts database" + _app_preset_type = /datum/modular_computer_app_presets/command/account/centcomm + // Security /obj/item/modular_computer/console/preset/security name = "security console" diff --git a/code/modules/modular_computers/file_system/programs/app_presets.dm b/code/modules/modular_computers/file_system/programs/app_presets.dm index 71c1fb6f837..e01c4218db5 100644 --- a/code/modules/modular_computers/file_system/programs/app_presets.dm +++ b/code/modules/modular_computers/file_system/programs/app_presets.dm @@ -325,6 +325,19 @@ ) return _prg_list +/datum/modular_computer_app_presets/command/account/centcomm/return_install_programs(obj/item/modular_computer/comp) + var/list/_prg_list = list( + new /datum/computer_file/program/ntnetdownload(comp), + new /datum/computer_file/program/filemanager(comp), + new /datum/computer_file/program/newsbrowser(comp), + new /datum/computer_file/program/manifest(comp), + new /datum/computer_file/program/civilian/cargoorder(comp), + new /datum/computer_file/program/civilian/cargocontrol(comp), + new /datum/computer_file/program/records/employment(comp), + new /datum/computer_file/program/account_db(comp, TRUE) + ) + return _prg_list + /datum/modular_computer_app_presets/security name = "security" display_name = "Security" diff --git a/code/modules/modular_computers/file_system/programs/command/account_database.dm b/code/modules/modular_computers/file_system/programs/command/account_database.dm index 8a426c10aa9..f8ed6f6a675 100644 --- a/code/modules/modular_computers/file_system/programs/command/account_database.dm +++ b/code/modules/modular_computers/file_system/programs/command/account_database.dm @@ -12,14 +12,17 @@ color = LIGHT_COLOR_BLUE var/machine_id = "" + var/centcomm_db = FALSE -/datum/computer_file/program/account_db/New() +/datum/computer_file/program/account_db/New(obj/item/modular_computer/comp, var/is_centcomm_db = FALSE) ..() if(current_map) machine_id = "[station_name()] Acc. DB #[SSeconomy.num_financial_terminals++]" else machine_id = "NT-Net Relay Back-up Software DB" // created during map generation inside the ntnet relay, not used by players + centcomm_db = is_centcomm_db + /datum/computer_file/program/account_db/proc/get_held_card() var/obj/item/card/id/held_card if(computer.card_slot?.stored_card) @@ -84,7 +87,8 @@ data["accounts"] = list() if(get_access_level()) - for(var/M in SSeconomy.all_money_accounts) + var/list/SSeconomy_accounts = centcomm_db ? SSeconomy.all_money_accounts : SSeconomy.get_public_accounts() + for(var/M in SSeconomy_accounts) var/datum/money_account/D = SSeconomy.get_account(M) var/account_number = "[M]" data["accounts"][account_number] = list() @@ -234,7 +238,8 @@ "} - for(var/M in SSeconomy.all_money_accounts) + var/list/SSeconomy_accounts = centcomm_db ? SSeconomy.all_money_accounts : SSeconomy.get_public_accounts() + for(var/M in SSeconomy_accounts) var/datum/money_account/D = SSeconomy.get_account(M) text += {" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 3440a738620..124c68daab2 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -148,8 +148,6 @@ if(istype(loc, /obj/item/rig_module)) has_safety = FALSE - update_wield_verb() - queue_icon_update() /obj/item/gun/update_icon() @@ -179,6 +177,17 @@ update_held_icon() +/obj/item/gun/proc/unique_action(var/mob/user) + return + +/obj/item/gun/proc/toggle_firing_mode(var/mob/user, var/list/message_mobs) + var/datum/firemode/new_mode = switch_firemodes(user) + if(new_mode) + playsound(user, safetyoff_sound, 25) + to_chat(user, SPAN_NOTICE("\The [src] is now set to [new_mode.name].")) + for(var/M in message_mobs) + to_chat(M, SPAN_NOTICE("[user] has set \the [src] to [new_mode.name].")) + //Checks whether a given mob can use the gun //Any checks that shouldn't result in handle_click_empty() being called if they fail should go here. //Otherwise, if you want handle_click_empty() to be called, check in consume_next_projectile() and return null there. @@ -233,29 +242,6 @@ else return TRUE -/obj/item/gun/verb/wield_gun() - set name = "Wield Firearm" - set category = "Object" - set src in usr - - if(is_wieldable) - toggle_wield(usr) - update_held_icon() - else - to_chat(usr, SPAN_WARNING("You can't wield \the [src]!")) - -/obj/item/gun/ui_action_click() - if(src in usr) - wield_gun() - -/obj/item/gun/proc/update_wield_verb() - if(is_wieldable) //If the gun is marked as wieldable, make the action button appear and add the verb. - action_button_name = "Wield Firearm" - verbs += /obj/item/gun/verb/wield_gun - else - action_button_name = "" - verbs -= /obj/item/gun/verb/wield_gun - /obj/item/gun/afterattack(atom/A, mob/living/user, adjacent, params) if(adjacent) return //A is adjacent, is the user, or is on the user's person @@ -656,12 +642,12 @@ return new_mode -/obj/item/gun/attack_self(mob/user, var/list/message_mobs) - var/datum/firemode/new_mode = switch_firemodes(user) - if(new_mode) - to_chat(user, SPAN_NOTICE("\The [src] is now set to [new_mode.name].")) - for(var/M in message_mobs) - to_chat(M, SPAN_NOTICE("[user] has set \the [src] to [new_mode.name].")) +/obj/item/gun/attack_self(mob/user) + if(is_wieldable) + toggle_wield(usr) + update_held_icon() + else + to_chat(usr, SPAN_WARNING("You can't wield \the [src]!")) // Safety Procs diff --git a/code/modules/projectiles/guns/energy/crank.dm b/code/modules/projectiles/guns/energy/crank.dm index 8610f5d000e..23471a711fc 100644 --- a/code/modules/projectiles/guns/energy/crank.dm +++ b/code/modules/projectiles/guns/energy/crank.dm @@ -29,7 +29,7 @@ concentrated energy are used by high ranking soldiers or special operatives of the Republican army, but their durability is dubious in comparison to the mass-produced, \ single shot or bolt action rifles that the majority of Tajaran soldiers use." -/obj/item/gun/energy/rifle/icelance/attack_self(mob/living/user as mob) +/obj/item/gun/energy/rifle/icelance/unique_action(mob/living/user) if(is_charging) to_chat(user, "You are already charging \the [src].") return diff --git a/code/modules/projectiles/guns/energy/lawgiver.dm b/code/modules/projectiles/guns/energy/lawgiver.dm index b2f04dc003a..c66a80a90d3 100644 --- a/code/modules/projectiles/guns/energy/lawgiver.dm +++ b/code/modules/projectiles/guns/energy/lawgiver.dm @@ -106,7 +106,7 @@ message_enabled = 0 message_disable = 0 -/obj/item/gun/energy/lawgiver/attack_self(mob/living/carbon/user as mob) //can probably remove this in favor of the DNA locked firing pins. not touching that now though. edit: lol nevermind snowflake code of the year +/obj/item/gun/energy/lawgiver/unique_action(mob/living/carbon/user) //can probably remove this in favor of the DNA locked firing pins. not touching that now though. edit: lol nevermind snowflake code of the year if(dna != null) return else diff --git a/code/modules/projectiles/guns/energy/magic.dm b/code/modules/projectiles/guns/energy/magic.dm index 10cf3a48f7b..38e0ad0dafa 100644 --- a/code/modules/projectiles/guns/energy/magic.dm +++ b/code/modules/projectiles/guns/energy/magic.dm @@ -133,7 +133,7 @@ obj/item/gun/energy/staff/focus/special_check(var/mob/living/user) return 1 -obj/item/gun/energy/staff/focus/attack_self(mob/living/user as mob) +obj/item/gun/energy/staff/focus/toggle_firing_mode(mob/living/user) if(projectile_type == /obj/item/projectile/forcebolt) charge_cost = 400 to_chat(user, "The [src.name] will now strike a small area.") diff --git a/code/modules/projectiles/guns/energy/modular.dm b/code/modules/projectiles/guns/energy/modular.dm index f171b7c4232..d23d9ff5391 100644 --- a/code/modules/projectiles/guns/energy/modular.dm +++ b/code/modules/projectiles/guns/energy/modular.dm @@ -139,7 +139,6 @@ slot_flags = SLOT_BACK item_state = "large_3" is_wieldable = TRUE - update_wield_verb() /obj/item/gun/energy/laser/prototype/proc/handle_mod() for(var/obj/item/laser_components/modifier/modifier in gun_mods) diff --git a/code/modules/projectiles/guns/energy/rifle.dm b/code/modules/projectiles/guns/energy/rifle.dm index 661f830fef1..63d280c30eb 100644 --- a/code/modules/projectiles/guns/energy/rifle.dm +++ b/code/modules/projectiles/guns/energy/rifle.dm @@ -136,7 +136,7 @@ secondary_projectile_type = null secondary_fire_sound = null -/obj/item/gun/energy/rifle/pulse/destroyer/attack_self(mob/living/user as mob) +/obj/item/gun/energy/rifle/pulse/destroyer/toggle_firing_mode(mob/living/user) to_chat(user, "[src.name] has three settings, and they are all DESTROY.") /obj/item/gun/energy/rifle/laser/tachyon diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 6bcbf4d2a45..a0cc5085d76 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -370,8 +370,6 @@ is_wieldable = TRUE - action_button_name = "Wield thermal lance" - /obj/item/gun/energy/vaurca/typec/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob) user.setClickCooldown(16) ..() @@ -462,8 +460,6 @@ list(mode_name="point-burst auto", can_autofire = TRUE, burst = 1, fire_delay = 1, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.2)) ) - action_button_name = "Wield thermal drill" - needspin = FALSE /obj/item/gun/energy/vaurca/thermaldrill/special_check(var/mob/user) diff --git a/code/modules/projectiles/guns/launcher/crossbow.dm b/code/modules/projectiles/guns/launcher/crossbow.dm index 36624dcb911..dfcd529bbba 100644 --- a/code/modules/projectiles/guns/launcher/crossbow.dm +++ b/code/modules/projectiles/guns/launcher/crossbow.dm @@ -85,7 +85,7 @@ update_icon() ..() -/obj/item/gun/launcher/crossbow/attack_self(mob/living/user) +/obj/item/gun/launcher/crossbow/unique_action(mob/living/user) if(tension) if(bolt) user.visible_message("[user] relaxes the tension on \the [src]'s string and removes \the [bolt].", SPAN_NOTICE("You relax the tension on \the [src]'s string and remove \the [bolt].")) @@ -319,7 +319,7 @@ playsound(loc, 'sound/items/rfd_empty.ogg', 50, FALSE) flick("[icon_state]-empty", src) -/obj/item/gun/launcher/crossbow/RFD/attack_self(mob/living/user as mob) +/obj/item/gun/launcher/crossbow/RFD/unique_action(mob/living/user as mob) if(tension) user.visible_message("[user] relaxes the tension on \the [src]'s string.", SPAN_NOTICE("You relax the tension on \the [src]'s string.")) playsound(loc, 'sound/weapons/holster/tactiholsterout.ogg', 50, FALSE) diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm index 01d5ece787a..1e738238b6e 100644 --- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm +++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm @@ -78,7 +78,7 @@ return FALSE return TRUE -/obj/item/gun/launcher/grenade/attack_self(mob/user) +/obj/item/gun/launcher/grenade/unique_action(mob/user) pump(user) /obj/item/gun/launcher/grenade/attackby(obj/item/I, mob/user) @@ -116,9 +116,6 @@ force = 5 max_grenades = 0 -/obj/item/gun/launcher/grenade/underslung/attack_self() - return - //load and unload directly into chambered /obj/item/gun/launcher/grenade/underslung/load(obj/item/grenade/G, mob/user) if(chambered) diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm index 489be91a0f0..a83e331a7a3 100644 --- a/code/modules/projectiles/guns/launcher/pneumatic.dm +++ b/code/modules/projectiles/guns/launcher/pneumatic.dm @@ -74,7 +74,7 @@ else if(istype(W) && item_storage.can_be_inserted(W)) item_storage.handle_item_insertion(W) -/obj/item/gun/launcher/pneumatic/attack_self(mob/user as mob) +/obj/item/gun/launcher/pneumatic/unique_action(mob/user) eject_tank(user) /obj/item/gun/launcher/pneumatic/consume_next_projectile(mob/user=null) diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm index 6901676f227..e28eb24ef0a 100644 --- a/code/modules/projectiles/guns/launcher/syringe_gun.dm +++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm @@ -95,7 +95,7 @@ darts -= next next = null -/obj/item/gun/launcher/syringe/attack_self(mob/living/user as mob) +/obj/item/gun/launcher/syringe/unique_action(mob/living/user) if(next) user.visible_message("[user] unlatches and carefully relaxes the bolt on [src].", "You unlatch and carefully relax the bolt on [src], unloading the spring.") playsound(src.loc, 'sound/weapons/blade_close.ogg', 50, 1) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index a4760cd80f2..c34de1b0a38 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -214,7 +214,7 @@ ..() load_ammo(A, user) -/obj/item/gun/projectile/attack_self(mob/user) +/obj/item/gun/projectile/toggle_firing_mode(mob/user) if(jam_num) playsound(src.loc, 'sound/weapons/click.ogg', 50, TRUE) jam_num-- diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 820229bbaf1..ad8bbabf32c 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -279,11 +279,14 @@ playsound(user, 'sound/weapons/sawclose.ogg', 60, 1) update_icon() -/obj/item/gun/projectile/automatic/rifle/l6_saw/attack_self(mob/user as mob) +/obj/item/gun/projectile/automatic/rifle/l6_saw/unique_action(mob/user) + toggle_cover(user) + +/obj/item/gun/projectile/automatic/rifle/l6_saw/toggle_firing_mode(mob/user) if(cover_open) - toggle_cover(user) //close the cover - else - return ..() //once closed, behave like normal + to_chat(user, SPAN_WARNING("The cover must be closed!")) + return + ..() /obj/item/gun/projectile/automatic/rifle/l6_saw/attack_hand(mob/user as mob) if(!cover_open && user.get_inactive_hand() == src) diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm index e4bd0b20d0d..fb4b0105e27 100644 --- a/code/modules/projectiles/guns/projectile/dartgun.dm +++ b/code/modules/projectiles/guns/projectile/dartgun.dm @@ -128,7 +128,7 @@ for(var/obj/item/reagent_containers/glass/beaker/B in mixing) B.reagents.trans_to_obj(dart, mix_amount) -/obj/item/gun/projectile/dartgun/attack_self(mob/user) +/obj/item/gun/projectile/dartgun/unique_action(mob/user) user.set_machine(src) var/dat = "[src] mixing control:

" diff --git a/code/modules/projectiles/guns/projectile/rifle.dm b/code/modules/projectiles/guns/projectile/rifle.dm index 71dfe05bf5f..18aa81fabb4 100644 --- a/code/modules/projectiles/guns/projectile/rifle.dm +++ b/code/modules/projectiles/guns/projectile/rifle.dm @@ -115,7 +115,7 @@ return 0 return ..() -/obj/item/gun/projectile/contender/attack_self(mob/user as mob) +/obj/item/gun/projectile/contender/unique_action(mob/user as mob) if(chambered) chambered.forceMove(get_turf(src)) chambered = null @@ -176,7 +176,7 @@ var/open_bolt = 0 var/obj/item/ammo_magazine/boltaction/vintage/has_clip -/obj/item/gun/projectile/shotgun/pump/rifle/vintage/attack_self(mob/living/user as mob) +/obj/item/gun/projectile/shotgun/pump/rifle/vintage/unique_action(mob/living/user as mob) if(wielded) if(world.time >= recentpump + 10) pump(user) diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index ac34dad3c90..be7c41d0ee2 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -26,6 +26,8 @@ if(do_after(user, 30, act_target = src)) //SHIT IS STEALTHY EYYYYY sawing_in_progress = FALSE saw_off(user, A) + else + sawing_in_progress = FALSE else ..() @@ -38,7 +40,7 @@ name = "pump shotgun" desc = "An ubiquitous unbranded shotgun. Useful for sweeping alleys." desc_info = "This is a ballistic weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \ - then click where you want to fire. After firing, you will need to pump the gun, by clicking on the gun in your hand. To reload, load more shotgun \ + then click where you want to fire. After firing, you will need to pump the gun, by using the unique-action verb. To reload, load more shotgun \ shells into the gun." icon = 'icons/obj/guns/shotgun.dmi' icon_state = "shotgun" @@ -64,9 +66,9 @@ return chambered.BB return null -/obj/item/gun/projectile/shotgun/pump/attack_self(mob/living/user) +/obj/item/gun/projectile/shotgun/pump/unique_action(mob/living/user) if(jam_num) - return ..() + return else if(unjam_cooldown + 2 SECONDS > world.time) return if(world.time >= recentpump + 10) @@ -146,7 +148,7 @@ can_sawoff = TRUE sawnoff_workmsg = "shorten the barrel" -/obj/item/gun/projectile/shotgun/doublebarrel/attack_self(mob/user) +/obj/item/gun/projectile/shotgun/doublebarrel/unique_action(mob/user) unload_ammo(user, TRUE) /obj/item/gun/projectile/shotgun/doublebarrel/AltClick(mob/user) @@ -229,7 +231,7 @@ to_chat(user, "You [folded ? "fold" : "unfold"] \the [src].") update_icon() -/obj/item/gun/projectile/shotgun/foldable/attack_self(mob/living/user) +/obj/item/gun/projectile/shotgun/foldable/unique_action(mob/living/user) toggle_folded(user) /obj/item/gun/projectile/shotgun/foldable/special_check(mob/user) diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index b3cceb25542..2c48c73a952 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -38,7 +38,7 @@ else icon_state = "heavysniper" -/obj/item/gun/projectile/heavysniper/attack_self(mob/user as mob) +/obj/item/gun/projectile/heavysniper/unique_action(mob/user as mob) bolt_open = !bolt_open if(bolt_open) playsound(src.loc, 'sound/weapons/blade_open.ogg', 50, 1) diff --git a/code/modules/random_map/drop/drop_types.dm b/code/modules/random_map/drop/drop_types.dm index c7d06804da5..142456a2db6 100644 --- a/code/modules/random_map/drop/drop_types.dm +++ b/code/modules/random_map/drop/drop_types.dm @@ -107,17 +107,17 @@ var/global/list/datum/supply_drop_loot/supply_drop ..() contents = list( /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, + /obj/item/clothing/suit/armor/carrier/riot, /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, + /obj/item/clothing/suit/armor/carrier/riot, /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/suit/armor/riot, + /obj/item/clothing/suit/armor/carrier/riot, /obj/item/clothing/suit/armor/vest, /obj/item/clothing/suit/armor/vest, /obj/item/clothing/suit/storage/vest, /obj/item/clothing/suit/storage/vest, - /obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/bulletproof) + /obj/item/clothing/suit/armor/carrier/ablative, + /obj/item/clothing/suit/armor/carrier/ballistic) /datum/supply_drop_loot/materials name = "Materials" diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 840d33430f0..d52b25279e3 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -316,7 +316,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, updateUsrDialog() else if(href_list["imprinter_category"]) - var/choice = input("Which category do you wish to display?") as null|anything in designs_protolathe_categories+"All" + var/choice = input("Which category do you wish to display?") as null|anything in designs_imprinter_categories+"All" if(!choice) return imprinter_category = choice diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 25b7ed23b57..d6b26c61e54 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -214,16 +214,16 @@ playsound(telepad.loc, 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5) var/total_lifespawn = 25 * crystals.len - var/total_failchance = crystals.len var/obj/effect/portal/origin = new /obj/effect/portal(dest, null, null, total_lifespawn, 0) var/obj/effect/portal/destination = new /obj/effect/portal(source, null, null, total_lifespawn, 0) + origin.target = destination destination.target = origin + origin.has_failed = FALSE + destination.has_failed = FALSE - origin.failchance = total_failchance - destination.failchance = total_failchance if (dd_hassuffix(log_msg, ", ")) log_msg = dd_limittext(log_msg, length(log_msg) - 2) diff --git a/html/changelog.html b/html/changelog.html index 1c9e99f826f..780358863f9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -35,6 +35,56 @@ -->
+

21 February 2021

+

Geeves updated:

+ +

MattAtlas updated:

+ +

WickedCybs updated:

+ + +

20 February 2021

+

Geeves updated:

+ +

Lady Fowl updated:

+ +

MattAtlas updated:

+ +

Sparky_hotdog updated:

+ +

19 February 2021

Arrow768 updated: