From f9353da8559f7be8601352beecf04a7ba41d9a9d Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Fri, 16 Feb 2018 01:25:42 -0500 Subject: [PATCH 01/60] Quote the armor lists --- code/game/machinery/_machinery.dm | 2 +- code/game/machinery/ai_slipper.dm | 2 +- code/game/machinery/buttons.dm | 2 +- code/game/machinery/camera/camera.dm | 2 +- code/game/machinery/computer/_computer.dm | 2 +- code/game/machinery/deployable.dm | 2 +- code/game/machinery/doors/airlock_types.dm | 2 +- code/game/machinery/doors/door.dm | 2 +- code/game/machinery/doors/passworddoor.dm | 2 +- code/game/machinery/doors/poddoor.dm | 2 +- code/game/machinery/doors/windowdoor.dm | 2 +- code/game/machinery/firealarm.dm | 2 +- code/game/machinery/hologram.dm | 2 +- code/game/machinery/igniter.dm | 2 +- code/game/machinery/navbeacon.dm | 2 +- code/game/machinery/newscaster.dm | 2 +- .../machinery/porta_turret/portable_turret.dm | 2 +- code/game/machinery/requests_console.dm | 2 +- code/game/machinery/spaceheater.dm | 2 +- .../telecomms/machines/message_server.dm | 184 +++++++++ code/game/machinery/vending.dm | 38 +- code/game/mecha/combat/combat.dm | 2 +- code/game/mecha/combat/durand.dm | 25 ++ code/game/mecha/combat/gygax.dm | 4 +- code/game/mecha/combat/honker.dm | 2 +- code/game/mecha/combat/marauder.dm | 2 +- code/game/mecha/combat/phazon.dm | 33 ++ code/game/mecha/combat/reticence.dm | 2 +- code/game/mecha/mecha.dm | 2 +- code/game/mecha/working/ripley.dm | 4 +- code/game/objects/items/RCD.dm | 2 +- code/game/objects/items/RPD.dm | 2 +- code/game/objects/items/RSF.dm | 2 +- code/game/objects/items/cards_ids.dm | 2 +- code/game/objects/items/defib.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 2 +- .../items/devices/forcefieldprojector.dm | 2 +- code/game/objects/items/handcuffs.dm | 2 +- code/game/objects/items/kitchen.dm | 6 +- code/game/objects/items/melee/energy.dm | 2 +- code/game/objects/items/pneumaticCannon.dm | 2 +- code/game/objects/items/powerfist.dm | 2 +- code/game/objects/items/religion.dm | 8 +- code/game/objects/items/shields.dm | 2 +- code/game/objects/items/singularityhammer.dm | 115 ++++++ .../game/objects/items/stacks/sheets/glass.dm | 4 +- .../items/stacks/sheets/sheet_types.dm | 4 +- .../objects/items/stacks/tiles/tile_types.dm | 2 +- code/game/objects/items/storage/backpack.dm | 2 +- code/game/objects/items/stunbaton.dm | 2 +- code/game/objects/items/tanks/tanks.dm | 2 +- code/game/objects/items/tanks/watertank.dm | 2 +- code/game/objects/items/teleportation.dm | 2 +- code/game/objects/items/tools/crowbar.dm | 11 +- code/game/objects/items/tools/screwdriver.dm | 2 +- code/game/objects/items/tools/weldingtool.dm | 363 ++++++++++++++++++ code/game/objects/items/tools/wirecutters.dm | 2 +- code/game/objects/items/tools/wrench.dm | 14 +- code/game/objects/items/twohanded.dm | 8 +- code/game/objects/items/vending_items.dm | 2 +- code/game/objects/items/weaponry.dm | 6 +- code/game/objects/structures.dm | 2 +- code/game/objects/structures/barsigns.dm | 2 +- .../structures/crates_lockers/closets.dm | 2 +- .../closets/secure/secure_closets.dm | 2 +- .../crates_lockers/crates/secure.dm | 2 +- code/game/objects/structures/displaycase.dm | 2 +- code/game/objects/structures/fireaxe.dm | 2 +- code/game/objects/structures/grille.dm | 2 +- code/game/objects/structures/holosign.dm | 2 +- code/game/objects/structures/lattice.dm | 2 +- code/game/objects/structures/mineral_doors.dm | 2 +- code/game/objects/structures/plasticflaps.dm | 2 +- code/game/objects/structures/signs/_signs.dm | 2 +- code/game/objects/structures/tables_racks.dm | 4 +- code/game/shuttle_engines.dm | 2 +- .../abductor/equipment/abduction_gear.dm | 6 +- .../antagonists/blob/blob/blobs/core.dm | 2 +- .../antagonists/blob/blob/blobs/node.dm | 2 +- .../antagonists/blob/blob/blobs/shield.dm | 36 ++ code/modules/antagonists/blob/blob/theblob.dm | 2 +- .../changeling/powers/mutations.dm | 8 +- .../clockcult/clock_items/clockwork_armor.dm | 22 +- code/modules/antagonists/cult/cult_items.dm | 20 +- .../nukeop/equipment/nuclearbomb.dm | 2 +- code/modules/assembly/flash.dm | 2 +- .../atmospherics/machinery/airalarm.dm | 2 +- .../atmospherics/machinery/atmosmachinery.dm | 2 +- .../components/unary_devices/cryo.dm | 2 +- .../components/unary_devices/thermomachine.dm | 2 +- .../atmospherics/machinery/other/meter.dm | 2 +- .../machinery/portable/canister.dm | 2 +- .../portable/portable_atmospherics.dm | 2 +- .../awaymissions/mission_code/snowdin.dm | 2 +- code/modules/clothing/chameleon.dm | 18 +- code/modules/clothing/glasses/_glasses.dm | 2 +- code/modules/clothing/gloves/color.dm | 2 +- code/modules/clothing/gloves/miscellaneous.dm | 6 +- code/modules/clothing/head/hardhat.dm | 2 +- code/modules/clothing/head/helmet.dm | 20 +- code/modules/clothing/head/jobs.dm | 12 +- code/modules/clothing/head/misc.dm | 6 +- code/modules/clothing/head/misc_special.dm | 8 +- code/modules/clothing/head/soft_caps.dm | 2 +- code/modules/clothing/masks/gasmask.dm | 4 +- code/modules/clothing/masks/miscellaneous.dm | 2 +- code/modules/clothing/shoes/miscellaneous.dm | 6 +- .../clothing/spacesuits/_spacesuits.dm | 4 +- .../modules/clothing/spacesuits/chronosuit.dm | 4 +- .../modules/clothing/spacesuits/flightsuit.dm | 6 +- code/modules/clothing/spacesuits/hardsuit.dm | 70 ++-- .../clothing/spacesuits/miscellaneous.dm | 34 +- code/modules/clothing/spacesuits/plasmamen.dm | 4 +- code/modules/clothing/spacesuits/syndi.dm | 4 +- code/modules/clothing/suits/_suits.dm | 2 +- code/modules/clothing/suits/armor.dm | 22 +- code/modules/clothing/suits/bio.dm | 8 +- code/modules/clothing/suits/cloaks.dm | 8 +- code/modules/clothing/suits/jobs.dm | 4 +- code/modules/clothing/suits/labcoat.dm | 2 +- code/modules/clothing/suits/miscellaneous.dm | 18 +- code/modules/clothing/suits/utility.dm | 8 +- code/modules/clothing/suits/wiz_robe.dm | 16 +- code/modules/clothing/under/_under.dm | 2 +- code/modules/clothing/under/accessories.dm | 6 +- code/modules/clothing/under/jobs/civilian.dm | 2 +- .../clothing/under/jobs/engineering.dm | 4 +- code/modules/clothing/under/jobs/medsci.dm | 20 +- code/modules/clothing/under/jobs/security.dm | 8 +- code/modules/clothing/under/miscellaneous.dm | 4 +- code/modules/clothing/under/syndicate.dm | 6 +- code/modules/clothing/under/trek.dm | 2 +- code/modules/events/holiday/xmas.dm | 2 +- .../integrated_electronics/core/assemblies.dm | 2 +- code/modules/library/lib_items.dm | 2 +- .../modules/mining/equipment/explorer_gear.dm | 6 +- .../mining/equipment/marker_beacons.dm | 2 +- .../carbon/human/species_types/golems.dm | 2 +- .../computers/item/computer.dm | 2 +- code/modules/ninja/suit/head.dm | 2 +- code/modules/ninja/suit/shoes.dm | 2 +- code/modules/ninja/suit/suit.dm | 2 +- code/modules/power/apc.dm | 2 +- code/modules/power/lighting.dm | 2 +- .../power/singularity/field_generator.dm | 2 +- .../particle_accelerator.dm | 2 +- .../reagents/reagent_containers/glass.dm | 2 +- code/modules/recycling/disposal/bin.dm | 2 +- 148 files changed, 1112 insertions(+), 349 deletions(-) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 22978e9ea2..ce538e97e8 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -114,7 +114,7 @@ Class Procs: /obj/machinery/Initialize() if(!armor) - armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) + armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) . = ..() GLOB.machines += src diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index 8a4c854d76..c9d0eb0292 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -6,7 +6,7 @@ layer = PROJECTILE_HIT_THRESHHOLD_LAYER anchored = TRUE max_integrity = 200 - armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) + armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) var/uses = 20 var/cooldown = 0 diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 7379185505..35d1e040f5 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -10,7 +10,7 @@ var/device_type = null var/id = null var/initialized_button = 0 - armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 10, bio = 100, rad = 100, fire = 90, acid = 70) + armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 70) anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 2 diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 2127eb095b..0a98927802 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -14,7 +14,7 @@ resistance_flags = FIRE_PROOF - armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 90, acid = 50) + armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 50) max_integrity = 100 integrity_failure = 50 var/list/network = list("SS13") diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index 2bae3b30bd..68f279cc29 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -9,7 +9,7 @@ active_power_usage = 300 max_integrity = 200 integrity_failure = 100 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 40, acid = 20) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 20) var/processing = FALSE var/brightness_on = 2 var/icon_keyboard = "generic_key" diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 130d276184..1a3ff23c56 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -104,7 +104,7 @@ anchored = FALSE max_integrity = 180 proj_pass_rate = 20 - armor = list(melee = 10, bullet = 50, laser = 50, energy = 50, bomb = 10, bio = 100, rad = 100, fire = 10, acid = 0) + armor = list("melee" = 10, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 10, "acid" = 0) var/deploy_time = 40 var/deploy_message = TRUE diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index dc734b387d..f6d80bca49 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -489,7 +489,7 @@ desc = "An airlock hastily corrupted by blood magic, it is unusually brittle in this state." normal_integrity = 180 damage_deflection = 5 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) //Pinion airlocks: Clockwork doors that only let servants of Ratvar through. /obj/machinery/door/airlock/clockwork diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 7c14f48e2d..2de468e175 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -9,7 +9,7 @@ layer = OPEN_DOOR_LAYER power_channel = ENVIRON max_integrity = 350 - armor = list(melee = 30, bullet = 30, laser = 20, energy = 20, bomb = 10, bio = 100, rad = 100, fire = 80, acid = 70) + armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 70) CanAtmosPass = ATMOS_PASS_DENSITY flags_1 = PREVENT_CLICK_UNDER_1 diff --git a/code/game/machinery/doors/passworddoor.dm b/code/game/machinery/doors/passworddoor.dm index 7f4137d165..6a6c145079 100644 --- a/code/game/machinery/doors/passworddoor.dm +++ b/code/game/machinery/doors/passworddoor.dm @@ -6,7 +6,7 @@ explosion_block = 3 heat_proof = TRUE max_integrity = 600 - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF damage_deflection = 70 var/password = "Swordfish" diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index f42352d79d..f2441ad583 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -11,7 +11,7 @@ heat_proof = TRUE safe = FALSE max_integrity = 600 - armor = list(melee = 50, bullet = 100, laser = 100, energy = 100, bomb = 50, bio = 100, rad = 100, fire = 100, acid = 70) + armor = list("melee" = 50, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70) resistance_flags = FIRE_PROOF damage_deflection = 70 diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 3c646265f7..24c45fd1be 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -9,7 +9,7 @@ var/base_state = "left" max_integrity = 150 //If you change this, consider changing ../door/window/brigdoor/ max_integrity at the bottom of this .dm file integrity_failure = 0 - armor = list(melee = 20, bullet = 50, laser = 50, energy = 50, bomb = 10, bio = 100, rad = 100, fire = 70, acid = 100) + armor = list("melee" = 20, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 70, "acid" = 100) visible = FALSE flags_1 = ON_BORDER_1 opacity = 0 diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index bf3255385c..efc8682313 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -19,7 +19,7 @@ anchored = TRUE max_integrity = 250 integrity_failure = 100 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100, fire = 90, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30) use_power = IDLE_POWER_USE idle_power_usage = 2 active_power_usage = 6 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index d1f1774c8b..211391a56b 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -39,7 +39,7 @@ Possible to do for anyone motivated enough: idle_power_usage = 5 active_power_usage = 100 max_integrity = 300 - armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) + armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) circuit = /obj/item/circuitboard/machine/holopad var/list/masters //List of living mobs that use the holopad var/list/holorays //Holoray-mob link. diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 6c3e3d9cdc..05de03aae1 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -10,7 +10,7 @@ idle_power_usage = 2 active_power_usage = 4 max_integrity = 300 - armor = list(melee = 50, bullet = 30, laser = 70, energy = 50, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 70) + armor = list("melee" = 50, "bullet" = 30, "laser" = 70, "energy" = 50, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) resistance_flags = FIRE_PROOF /obj/machinery/igniter/attack_ai(mob/user) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index fe2926f150..a4a7419b34 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -11,7 +11,7 @@ layer = LOW_OBJ_LAYER anchored = TRUE max_integrity = 500 - armor = list(melee = 70, bullet = 70, laser = 70, energy = 70, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) + armor = list("melee" = 70, "bullet" = 70, "laser" = 70, "energy" = 70, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) var/open = FALSE // true if cover is open var/locked = TRUE // true if controls are locked diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 91eedfd904..aa724c087f 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -186,7 +186,7 @@ GLOBAL_LIST_EMPTY(allCasters) verb_say = "beeps" verb_ask = "beeps" verb_exclaim = "beeps" - armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) + armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) max_integrity = 200 integrity_failure = 50 var/screen = 0 diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 9a88febdc2..2b442401e2 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -31,7 +31,7 @@ max_integrity = 160 //the turret's health integrity_failure = 80 - armor = list(melee = 50, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 90, acid = 90) + armor = list("melee" = 50, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) var/locked = TRUE //if the turret's behaviour control access is locked var/controllock = 0 //if the turret responds to control panels diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index b24c3c1406..2ca5d83365 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -55,7 +55,7 @@ GLOBAL_LIST_EMPTY(allConsoles) var/emergency //If an emergency has been called by this device. Acts as both a cooldown and lets the responder know where it the emergency was triggered from var/receive_ore_updates = FALSE //If ore redemption machines will send an update when it receives new ores. max_integrity = 300 - armor = list(melee = 70, bullet = 30, laser = 30, energy = 30, bomb = 0, bio = 0, rad = 0, fire = 90, acid = 90) + armor = list("melee" = 70, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) /obj/machinery/requests_console/power_change() ..() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index f59925bc54..3946d03495 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -11,7 +11,7 @@ name = "space heater" desc = "Made by Space Amish using traditional space techniques, this heater/cooler is guaranteed not to set the station on fire. Warranty void if used in engines." max_integrity = 250 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100, fire = 80, acid = 10) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 10) circuit = /obj/item/circuitboard/machine/space_heater var/obj/item/stock_parts/cell/cell var/on = FALSE diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 8f0e22b7d9..5a892cec6e 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /* The equivalent of the server, for PDA and request console messages. Without it, PDA and request console messages cannot be transmitted. @@ -179,3 +180,186 @@ else priority = "Undetermined" +======= +/* + The equivalent of the server, for PDA and request console messages. + Without it, PDA and request console messages cannot be transmitted. + PDAs require the rest of the telecomms setup, but request consoles only + require the message server. +*/ + +// A decorational representation of SSblackbox, usually placed alongside the message server. +/obj/machinery/blackbox_recorder + icon = 'icons/obj/stationobjs.dmi' + icon_state = "blackbox" + name = "Blackbox Recorder" + density = TRUE + anchored = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 100 + armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) + + +// The message server itself. +/obj/machinery/telecomms/message_server + icon = 'icons/obj/machines/research.dmi' + icon_state = "server" + name = "Messaging Server" + desc = "A machine that attempts to gather the secret knowledge of the universe." + density = TRUE + anchored = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 100 + + id = "Messaging Server" + network = "tcommsat" + autolinkers = list("common") + + var/list/datum/data_pda_msg/pda_msgs = list() + var/list/datum/data_rc_msg/rc_msgs = list() + var/decryptkey + +/obj/machinery/telecomms/message_server/Initialize() + . = ..() + if (!decryptkey) + decryptkey = GenerateKey() + pda_msgs += new /datum/data_pda_msg("System Administrator", "system", "This is an automated message. The messaging system is functioning correctly.") + +/obj/machinery/telecomms/message_server/Destroy() + for(var/obj/machinery/computer/message_monitor/monitor in GLOB.telecomms_list) + if(monitor.linkedServer && monitor.linkedServer == src) + monitor.linkedServer = null + . = ..() + +/obj/machinery/telecomms/message_server/proc/GenerateKey() + var/newKey + newKey += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le") + newKey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") + newKey += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") + return newKey + +/obj/machinery/telecomms/message_server/process() + if(toggled && (stat & (BROKEN|NOPOWER))) + toggled = FALSE + update_icon() + +/obj/machinery/telecomms/message_server/receive_information(datum/signal/subspace/pda/signal, obj/machinery/telecomms/machine_from) + // can't log non-PDA signals + if(!istype(signal) || !signal.data["message"] || !toggled) + return + + // log the signal + var/datum/data_pda_msg/M = new(signal.format_target(), "[signal.data["name"]] ([signal.data["job"]])", signal.data["message"], signal.data["photo"]) + pda_msgs += M + signal.logged = M + + // pass it along to either the hub or the broadcaster + if(!relay_information(signal, /obj/machinery/telecomms/hub)) + relay_information(signal, /obj/machinery/telecomms/broadcaster) + +/obj/machinery/telecomms/message_server/update_icon() + if((stat & (BROKEN|NOPOWER))) + icon_state = "server-nopower" + else if (!toggled) + icon_state = "server-off" + else + icon_state = "server-on" + + +// PDA signal datum +/datum/signal/subspace/pda + frequency = FREQ_COMMON + server_type = /obj/machinery/telecomms/message_server + var/datum/data_pda_msg/logged + +/datum/signal/subspace/pda/New(source, data) + src.source = source + src.data = data + var/turf/T = get_turf(source) + levels = list(T.z) + +/datum/signal/subspace/pda/copy() + var/datum/signal/subspace/pda/copy = new(source, data.Copy()) + copy.original = src + copy.levels = levels + return copy + +/datum/signal/subspace/pda/proc/format_target() + if (length(data["targets"]) > 1) + return "Everyone" + return data["targets"][1] + +/datum/signal/subspace/pda/proc/format_message() + if (logged && data["photo"]) + return "\"[data["message"]]\" (Photo)" + return "\"[data["message"]]\"" + +/datum/signal/subspace/pda/broadcast() + if (!logged) // Can only go through if a message server logs it + return + for (var/obj/item/device/pda/P in GLOB.PDAs) + if ("[P.owner] ([P.ownjob])" in data["targets"]) + P.receive_message(src) + + +// Log datums stored by the message server. +/datum/data_pda_msg + var/sender = "Unspecified" + var/recipient = "Unspecified" + var/message = "Blank" // transferred message + var/icon/photo // attached photo + +/datum/data_pda_msg/New(param_rec, param_sender, param_message, param_photo) + if(param_rec) + recipient = param_rec + if(param_sender) + sender = param_sender + if(param_message) + message = param_message + if(param_photo) + photo = param_photo + +/datum/data_pda_msg/Topic(href,href_list) + ..() + if(href_list["photo"]) + var/mob/M = usr + M << browse_rsc(photo, "pda_photo.png") + M << browse("PDA Photo" \ + + "" \ + + "" \ + + "", "window=pdaphoto;size=192x192") + onclose(M, "pdaphoto") + +/datum/data_rc_msg + var/rec_dpt = "Unspecified" // receiving department + var/send_dpt = "Unspecified" // sending department + var/message = "Blank" + var/stamp = "Unstamped" + var/id_auth = "Unauthenticated" + var/priority = "Normal" + +/datum/data_rc_msg/New(param_rec, param_sender, param_message, param_stamp, param_id_auth, param_priority) + if(param_rec) + rec_dpt = param_rec + if(param_sender) + send_dpt = param_sender + if(param_message) + message = param_message + if(param_stamp) + stamp = param_stamp + if(param_id_auth) + id_auth = param_id_auth + if(param_priority) + switch(param_priority) + if(1) + priority = "Normal" + if(2) + priority = "High" + if(3) + priority = "Extreme" + else + priority = "Undetermined" + +>>>>>>> d282c60... Quote the armor lists (#35668) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 3fa3836143..69bac9b906 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -23,7 +23,7 @@ verb_exclaim = "beeps" max_integrity = 300 integrity_failure = 100 - armor = list(melee = 20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) + armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) circuit = /obj/item/circuitboard/machine/vendor var/active = 1 //No sales pitches if off! var/vend_ready = 1 //Are we ready to vend?? Is it time?? @@ -652,7 +652,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/wirecutters = 1, /obj/item/cartridge/signal = 4) contraband = list(/obj/item/device/assembly/timer = 2, /obj/item/device/assembly/voice = 2, /obj/item/device/assembly/health = 2) product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!" - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/machinery/vending/coffee @@ -714,7 +714,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/reagent_containers/food/drinks/coffee = 12, /obj/item/tank/internals/emergency_oxygen = 6, /obj/item/clothing/mask/breath = 6) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/machinery/vending/cola @@ -797,7 +797,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C products = list(/obj/item/cartridge/medical = 10, /obj/item/cartridge/engineering = 10, /obj/item/cartridge/security = 10, /obj/item/cartridge/janitor = 10, /obj/item/cartridge/signal/toxins = 10, /obj/item/device/pda/heads = 10, /obj/item/cartridge/captain = 3, /obj/item/cartridge/quartermaster = 10) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/machinery/vending/liberationstation @@ -814,7 +814,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/gun/ballistic/shotgun = 2, /obj/item/gun/ballistic/automatic/ar = 2) premium = list(/obj/item/ammo_box/magazine/smgm9mm = 2, /obj/item/ammo_box/magazine/m50 = 4, /obj/item/ammo_box/magazine/m45 = 2, /obj/item/ammo_box/magazine/m75 = 2) contraband = list(/obj/item/clothing/under/patriotsuit = 1, /obj/item/bedsheet/patriot = 3) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/machinery/vending/cigarette @@ -854,7 +854,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/reagent_containers/glass/bottle/toxin = 3, /obj/item/reagent_containers/syringe/antiviral = 6, /obj/item/reagent_containers/pill/salbutamol = 2, /obj/item/device/healthanalyzer = 4, /obj/item/device/sensor_device = 2, /obj/item/pinpointer/crew = 2) contraband = list(/obj/item/reagent_containers/pill/tox = 3, /obj/item/reagent_containers/pill/morphine = 4, /obj/item/reagent_containers/pill/charcoal = 6) premium = list(/obj/item/storage/box/hug/medical = 1, /obj/item/reagent_containers/hypospray/medipen = 3, /obj/item/storage/belt/medical = 3, /obj/item/wrench/medical = 1) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/medical @@ -877,7 +877,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/reagent_containers/pill/patch/silver_sulf = 5, /obj/item/reagent_containers/pill/charcoal = 2, /obj/item/reagent_containers/spray/medical/sterilizer = 1) contraband = list(/obj/item/reagent_containers/pill/tox = 2, /obj/item/reagent_containers/pill/morphine = 2) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/medical refill_count = 1 @@ -893,7 +893,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/reagent_containers/food/snacks/donut = 12, /obj/item/storage/box/evidence = 6, /obj/item/device/flashlight/seclite = 4, /obj/item/restraints/legcuffs/bola/energy = 7) contraband = list(/obj/item/clothing/glasses/sunglasses = 2, /obj/item/storage/fancy/donut_box = 2) premium = list(/obj/item/coin/antagtoken = 1) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/machinery/vending/security/pre_throw(obj/item/I) @@ -915,7 +915,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C products = list(/obj/item/reagent_containers/glass/bottle/nutrient/ez = 30, /obj/item/reagent_containers/glass/bottle/nutrient/l4z = 20, /obj/item/reagent_containers/glass/bottle/nutrient/rh = 10, /obj/item/reagent_containers/spray/pestspray = 20, /obj/item/reagent_containers/syringe = 5, /obj/item/storage/bag/plants = 5, /obj/item/cultivator = 3, /obj/item/shovel/spade = 3, /obj/item/device/plant_analyzer = 4) contraband = list(/obj/item/reagent_containers/glass/bottle/ammonia = 10, /obj/item/reagent_containers/glass/bottle/diethylamine = 5) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/machinery/vending/hydroseeds @@ -936,7 +936,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/seeds/plump = 2, /obj/item/seeds/reishi = 2, /obj/item/seeds/cannabis = 3, /obj/item/seeds/starthistle = 2, /obj/item/seeds/random = 2) premium = list(/obj/item/reagent_containers/spray/waterflower = 1) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/machinery/vending/magivend @@ -948,7 +948,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!" products = list(/obj/item/clothing/head/wizard = 1, /obj/item/clothing/suit/wizrobe = 1, /obj/item/clothing/head/wizard/red = 1, /obj/item/clothing/suit/wizrobe/red = 1, /obj/item/clothing/head/wizard/yellow = 1, /obj/item/clothing/suit/wizrobe/yellow = 1, /obj/item/clothing/shoes/sandal/magic = 1, /obj/item/staff = 2) contraband = list(/obj/item/reagent_containers/glass/bottle/wizarditis = 1) //No one can get to the machine to hack it anyways; for the lulz - Microwave - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/machinery/vending/autodrobe @@ -1005,7 +1005,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C icon_state = "dinnerware" products = list(/obj/item/storage/bag/tray = 8, /obj/item/kitchen/fork = 6, /obj/item/kitchen/knife = 6, /obj/item/kitchen/rollingpin = 2, /obj/item/reagent_containers/food/drinks/drinkingglass = 8, /obj/item/clothing/suit/apron/chef = 2, /obj/item/reagent_containers/food/condiment/pack/ketchup = 5, /obj/item/reagent_containers/food/condiment/pack/hotsauce = 5, /obj/item/reagent_containers/food/condiment/saltshaker = 5, /obj/item/reagent_containers/food/condiment/peppermill = 5, /obj/item/reagent_containers/glass/bowl = 20) contraband = list(/obj/item/kitchen/rollingpin = 2, /obj/item/kitchen/knife/butcher = 2) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/machinery/vending/sovietsoda @@ -1015,7 +1015,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C product_ads = "For Tsar and Country.;Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem." products = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/soda = 30) contraband = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola = 20) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/machinery/vending/tool @@ -1041,7 +1041,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/clothing/gloves/color/fyellow = 2) premium = list( /obj/item/clothing/gloves/color/yellow = 1) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) resistance_flags = FIRE_PROOF /obj/machinery/vending/engivend @@ -1053,7 +1053,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C products = list(/obj/item/clothing/glasses/meson/engine = 2, /obj/item/device/multitool = 4, /obj/item/electronics/airlock = 10, /obj/item/electronics/apc = 10, /obj/item/electronics/airalarm = 10, /obj/item/stock_parts/cell/high = 10, /obj/item/construction/rcd/loaded = 3, /obj/item/device/geiger_counter = 5, /obj/item/grenade/chem_grenade/smart_metal_foam = 10) contraband = list(/obj/item/stock_parts/cell/potato = 3) premium = list(/obj/item/storage/belt/utility = 3, /obj/item/storage/box/smart_metal_foam = 1) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF //This one's from bay12 @@ -1069,7 +1069,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/stock_parts/cell = 8, /obj/item/weldingtool = 8, /obj/item/clothing/head/welding = 8, /obj/item/light/tube = 10, /obj/item/clothing/suit/fire = 4, /obj/item/stock_parts/scanning_module = 5, /obj/item/stock_parts/micro_laser = 5, /obj/item/stock_parts/matter_bin = 5, /obj/item/stock_parts/manipulator = 5) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF //This one's from bay12 @@ -1083,7 +1083,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/stock_parts/cell/high = 12, /obj/item/device/assembly/prox_sensor = 3, /obj/item/device/assembly/signaler = 3, /obj/item/device/healthanalyzer = 3, /obj/item/scalpel = 2, /obj/item/circular_saw = 2, /obj/item/tank/internals/anesthetic = 2, /obj/item/clothing/mask/breath/medical = 5, /obj/item/screwdriver = 5, /obj/item/crowbar = 5) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF //DON'T FORGET TO CHANGE THE REFILL SIZE IF YOU CHANGE THE MACHINE'S CONTENTS! @@ -1147,7 +1147,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/toy/katana = 10, /obj/item/twohanded/dualsaber/toy = 5, /obj/item/toy/cards/deck/syndicate = 10) //Gambling and it hurts, making it a +18 item - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/donksoft @@ -1172,7 +1172,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10, /obj/item/toy/katana = 10, /obj/item/twohanded/dualsaber/toy = 5) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/donksoft diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index 5e7ddb6497..99837d2beb 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -1,7 +1,7 @@ /obj/mecha/combat force = 30 internal_damage_threshold = 50 - armor = list(melee = 30, bullet = 30, laser = 15, energy = 20, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 30, "bullet" = 30, "laser" = 15, "energy" = 20, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) /obj/mecha/combat/moved_inside(mob/living/carbon/human/H) if(..()) diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index e726853b8a..ceaea0e9d9 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/mecha/combat/durand desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms." name = "\improper Durand" @@ -20,3 +21,27 @@ ..() defense_action.Remove(user) +======= +/obj/mecha/combat/durand + desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms." + name = "\improper Durand" + icon_state = "durand" + step_in = 4 + dir_in = 1 //Facing North. + max_integrity = 400 + deflect_chance = 20 + armor = list("melee" = 40, "bullet" = 35, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + max_temperature = 30000 + infra_luminosity = 8 + force = 40 + wreckage = /obj/structure/mecha_wreckage/durand + +/obj/mecha/combat/durand/GrantActions(mob/living/user, human_occupant = 0) + ..() + defense_action.Grant(user, src) + +/obj/mecha/combat/durand/RemoveActions(mob/living/user, human_occupant = 0) + ..() + defense_action.Remove(user) + +>>>>>>> d282c60... Quote the armor lists (#35668) diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index b46bc2abf2..95137938d0 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -6,7 +6,7 @@ dir_in = 1 //Facing North. max_integrity = 250 deflect_chance = 5 - armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_temperature = 25000 infra_luminosity = 6 wreckage = /obj/structure/mecha_wreckage/gygax @@ -20,7 +20,7 @@ icon_state = "darkgygax" max_integrity = 300 deflect_chance = 15 - armor = list(melee = 40, bullet = 40, laser = 50, energy = 35, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 40, "bullet" = 40, "laser" = 50, "energy" = 35, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_temperature = 35000 leg_overload_coeff = 100 operation_req_access = list(ACCESS_SYNDICATE) diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index 7424a30fcc..0298e56089 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -6,7 +6,7 @@ max_integrity = 140 deflect_chance = 60 internal_damage_threshold = 60 - armor = list(melee = -20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_temperature = 25000 infra_luminosity = 5 operation_req_access = list(ACCESS_THEATRE) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index b82af2632e..21f8259e69 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -5,7 +5,7 @@ step_in = 5 max_integrity = 500 deflect_chance = 25 - armor = list(melee = 50, bullet = 55, laser = 40, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 50, "bullet" = 55, "laser" = 40, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_temperature = 60000 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF infra_luminosity = 3 diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 8909c635a9..4a4c33704a 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/mecha/combat/phazon desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials." name = "\improper Phazon" @@ -28,3 +29,35 @@ switch_damtype_action.Remove(user) phasing_action.Remove(user) +======= +/obj/mecha/combat/phazon + desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials." + name = "\improper Phazon" + icon_state = "phazon" + step_in = 2 + dir_in = 2 //Facing South. + step_energy_drain = 3 + max_integrity = 200 + deflect_chance = 30 + armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + max_temperature = 25000 + infra_luminosity = 3 + wreckage = /obj/structure/mecha_wreckage/phazon + add_req_access = 1 + internal_damage_threshold = 25 + force = 15 + max_equip = 3 + phase_state = "phazon-phase" + +/obj/mecha/combat/phazon/GrantActions(mob/living/user, human_occupant = 0) + ..() + switch_damtype_action.Grant(user, src) + phasing_action.Grant(user, src) + + +/obj/mecha/combat/phazon/RemoveActions(mob/living/user, human_occupant = 0) + ..() + switch_damtype_action.Remove(user) + phasing_action.Remove(user) + +>>>>>>> d282c60... Quote the armor lists (#35668) diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index 18b50d3077..4cd8c01517 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -6,7 +6,7 @@ dir_in = 1 //Facing North. max_integrity = 100 deflect_chance = 3 - armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_temperature = 15000 wreckage = /obj/structure/mecha_wreckage/reticence operation_req_access = list(ACCESS_THEATRE) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index db6ef6b6b9..61f6b64c4e 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -34,7 +34,7 @@ var/overload_step_energy_drain_min = 100 max_integrity = 300 //max_integrity is base health var/deflect_chance = 10 //chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act. - armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 20, "bullet" = 10, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) var/list/facing_modifiers = list(FRONT_ARMOUR = 1.5, SIDE_ARMOUR = 1, BACK_ARMOUR = 0.5) var/obj/item/stock_parts/cell/cell var/state = 0 diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index eaa09ff9b7..429d954451 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -9,7 +9,7 @@ max_integrity = 200 lights_power = 7 deflect_chance = 15 - armor = list(melee = 40, bullet = 20, laser = 10, energy = 20, bomb = 40, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 40, "bullet" = 20, "laser" = 10, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_equip = 6 wreckage = /obj/structure/mecha_wreckage/ripley var/list/cargo = new @@ -65,7 +65,7 @@ max_integrity = 250 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF lights_power = 7 - armor = list(melee = 40, bullet = 30, laser = 30, energy = 30, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_equip = 5 // More armor, less tools wreckage = /obj/structure/mecha_wreckage/ripley/firefighter diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 9f146b8ff3..4a911f9002 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -22,7 +22,7 @@ ARCD w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL=100000) req_access_txt = "11" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF var/datum/effect_system/spark_spread/spark_system var/matter = 0 diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index abf4b7bd6f..4169e70dc9 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -181,7 +181,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( throw_range = 5 w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL=75000, MAT_GLASS=37500) - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF var/datum/effect_system/spark_spread/spark_system var/working = 0 diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm index a01c0e7487..42d2b3dc45 100644 --- a/code/game/objects/items/RSF.dm +++ b/code/game/objects/items/RSF.dm @@ -14,7 +14,7 @@ RSF density = FALSE anchored = FALSE flags_1 = NOBLUDGEON_1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) var/matter = 0 var/mode = 1 w_class = WEIGHT_CLASS_NORMAL diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 2f506fb419..a7bd41999e 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -98,7 +98,7 @@ lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' slot_flags = SLOT_ID - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) resistance_flags = FIRE_PROOF | ACID_PROOF var/mining_points = 0 //For redeeming at mining equipment vendors var/list/access = list() diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 23840ac217..d4e59c8542 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -14,7 +14,7 @@ throwforce = 6 w_class = WEIGHT_CLASS_BULKY actions_types = list(/datum/action/item_action/toggle_paddles) - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) var/on = FALSE //if the paddles are equipped (1) or on the defib (0) var/safety = TRUE //if you can zap people with the defibs on harm mode diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 5899b7c211..db7e2993ae 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -21,7 +21,7 @@ GLOBAL_LIST_EMPTY(PDAs) flags_1 = NOBLUDGEON_1 w_class = WEIGHT_CLASS_TINY slot_flags = SLOT_ID | SLOT_BELT - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index e10c34a139..c0b32883e8 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -79,7 +79,7 @@ mouse_opacity = MOUSE_OPACITY_OPAQUE resistance_flags = INDESTRUCTIBLE CanAtmosPass = ATMOS_PASS_DENSITY - armor = list(melee = 0, bullet = 25, laser = 50, energy = 50, bomb = 25, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 0, "bullet" = 25, "laser" = 50, "energy" = 50, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) var/obj/item/device/forcefield/generator /obj/structure/projected_forcefield/Initialize(mapload, obj/item/device/forcefield/origin) diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 839082c55e..3a66268bd3 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -36,7 +36,7 @@ throw_range = 5 materials = list(MAT_METAL=500) breakouttime = 600 //Deciseconds = 60s = 1 minute - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) var/cuffsound = 'sound/weapons/handcuffs.ogg' var/trashtype = null //for disposable cuffs diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index d67a3c8333..c626ba44cc 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -26,7 +26,7 @@ flags_1 = CONDUCT_1 attack_verb = list("attacked", "stabbed", "poked") hitsound = 'sound/weapons/bladeslice.ogg' - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) var/datum/reagent/forkload //used to eat omelette /obj/item/kitchen/fork/suicide_act(mob/living/carbon/user) @@ -70,7 +70,7 @@ materials = list(MAT_METAL=12000) attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") sharpness = IS_SHARP_ACCURATE - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) var/bayonet = FALSE //Can this be attached to a gun? /obj/item/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user) @@ -155,7 +155,7 @@ throwforce = 12//fuck git materials = list() attack_verb = list("shanked", "shivved") - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/kitchen/rollingpin name = "rolling pin" diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 2f9e4231df..74ac616646 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -2,7 +2,7 @@ hitsound_on = 'sound/weapons/blade1.ogg' heat = 3500 max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) resistance_flags = FIRE_PROOF var/brightness_on = 3 diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index 4b6557fde1..10f3cbf810 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -13,7 +13,7 @@ item_state = "bulldog" lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 60, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50) var/maxWeightClass = 20 //The max weight of items that can fit into the cannon var/loadedWeightClass = 0 //The weight of items currently in the cannon var/obj/item/tank/internals/tank = null //The gas tank that is drawn from to fire things diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm index e5bc6ea715..210a6d6a33 100644 --- a/code/game/objects/items/powerfist.dm +++ b/code/game/objects/items/powerfist.dm @@ -11,7 +11,7 @@ throwforce = 10 throw_range = 7 w_class = WEIGHT_CLASS_NORMAL - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 40) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 40) resistance_flags = FIRE_PROOF var/click_delay = 1.5 var/fisto_setting = 1 diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index b25184c4b1..1a4c2f5674 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -233,7 +233,7 @@ w_class = WEIGHT_CLASS_BULKY slowdown = 2.0 //gotta pretend we're balanced. body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0, fire = 60, acid = 60) + armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) /obj/item/clothing/suit/armor/plate/crusader/red icon_state = "crusader-red" @@ -247,7 +247,7 @@ icon_state = "crusader" w_class = WEIGHT_CLASS_NORMAL flags_inv = HIDEHAIR|HIDEEARS|HIDEFACE - armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0, fire = 60, acid = 60) + armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) /obj/item/clothing/head/helmet/plate/crusader/blue icon_state = "crusader-blue" @@ -261,7 +261,7 @@ desc = "A religious-looking hat." alternate_worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' flags_1 = 0 - armor = list(melee = 60, bullet = 60, laser = 60, energy = 50, bomb = 70, bio = 50, rad = 50, fire = 60, acid = 60) //religion protects you from disease and radiation, honk. + armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 50, "bomb" = 70, "bio" = 50, "rad" = 50, "fire" = 60, "acid" = 60) //religion protects you from disease and radiation, honk. worn_x_dimension = 64 worn_y_dimension = 64 @@ -320,7 +320,7 @@ desc = "Metal boots, they look heavy." icon_state = "crusader" w_class = WEIGHT_CLASS_NORMAL - armor = list(melee = 50, bullet = 50, laser = 50, energy = 40, bomb = 60, bio = 0, rad = 0, fire = 60, acid = 60) //does this even do anything on boots? + armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //does this even do anything on boots? flags_1 = NOSLIP_1 cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 8baa73368e..628ffe4de0 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -1,7 +1,7 @@ /obj/item/shield name = "shield" block_chance = 50 - armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 80, acid = 70) + armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) /obj/item/shield/riot name = "riot shield" diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm index 38a5ba4cec..9c120dae5d 100644 --- a/code/game/objects/items/singularityhammer.dm +++ b/code/game/objects/items/singularityhammer.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/item/twohanded/singularityhammer name = "singularity hammer" desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows." @@ -110,3 +111,117 @@ /obj/item/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons. icon_state = "mjollnir[wielded]" return +======= +/obj/item/twohanded/singularityhammer + name = "singularity hammer" + desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows." + icon_state = "mjollnir0" + lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' + flags_1 = CONDUCT_1 + slot_flags = SLOT_BACK + force = 5 + force_unwielded = 5 + force_wielded = 20 + throwforce = 15 + throw_range = 1 + w_class = WEIGHT_CLASS_HUGE + var/charged = 5 + armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + resistance_flags = FIRE_PROOF | ACID_PROOF + force_string = "LORD SINGULOTH HIMSELF" + +/obj/item/twohanded/singularityhammer/New() + ..() + START_PROCESSING(SSobj, src) + +/obj/item/twohanded/singularityhammer/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/twohanded/singularityhammer/process() + if(charged < 5) + charged++ + return + +/obj/item/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons. + icon_state = "mjollnir[wielded]" + return + +/obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder) + for(var/atom/X in orange(5,pull)) + if(ismovableatom(X)) + var/atom/movable/A = X + if(A == wielder) + continue + if(A && !A.anchored && !ishuman(X)) + step_towards(A,pull) + step_towards(A,pull) + step_towards(A,pull) + else if(ishuman(X)) + var/mob/living/carbon/human/H = X + if(istype(H.shoes, /obj/item/clothing/shoes/magboots)) + var/obj/item/clothing/shoes/magboots/M = H.shoes + if(M.magpulse) + continue + H.apply_effect(20, KNOCKDOWN, 0) + step_towards(H,pull) + step_towards(H,pull) + step_towards(H,pull) + return + +/obj/item/twohanded/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) + if(!proximity) + return + if(wielded) + if(charged == 5) + charged = 0 + if(istype(A, /mob/living/)) + var/mob/living/Z = A + Z.take_bodypart_damage(20,0) + playsound(user, 'sound/weapons/marauder.ogg', 50, 1) + var/turf/target = get_turf(A) + vortex(target,user) + +/obj/item/twohanded/mjollnir + name = "Mjolnir" + desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy." + icon_state = "mjollnir0" + lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' + flags_1 = CONDUCT_1 + slot_flags = SLOT_BACK + force = 5 + force_unwielded = 5 + force_wielded = 25 + throwforce = 30 + throw_range = 7 + w_class = WEIGHT_CLASS_HUGE + +/obj/item/twohanded/mjollnir/proc/shock(mob/living/target) + target.Stun(60) + var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread + s.set_up(5, 1, target.loc) + s.start() + target.visible_message("[target.name] was shocked by [src]!", \ + "You feel a powerful shock course through your body sending you flying!", \ + "You hear a heavy electrical crack!") + var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) + target.throw_at(throw_target, 200, 4) + return + +/obj/item/twohanded/mjollnir/attack(mob/living/M, mob/user) + ..() + if(wielded) + playsound(src.loc, "sparks", 50, 1) + shock(M) + +/obj/item/twohanded/mjollnir/throw_impact(atom/target) + . = ..() + if(isliving(target)) + shock(target) + +/obj/item/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons. + icon_state = "mjollnir[wielded]" + return +>>>>>>> d282c60... Quote the armor lists (#35668) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index c0045c721b..d344f5eeda 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -19,7 +19,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ singular_name = "glass sheet" icon_state = "sheet-glass" materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/glass grind_results = list("silicon" = 20) @@ -131,7 +131,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ singular_name = "reinforced glass sheet" icon_state = "sheet-rglass" materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT/2, MAT_GLASS=MINERAL_MATERIAL_AMOUNT) - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/rglass grind_results = list("silicon" = 20, "iron" = 10) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 0c0b942083..91b3ebeb55 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -157,7 +157,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list ( \ materials = list(MAT_METAL=2000, MAT_PLASMA=2000) throwforce = 10 flags_1 = CONDUCT_1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 80) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 80) resistance_flags = FIRE_PROOF merge_type = /obj/item/stack/sheet/plasteel grind_results = list("iron" = 20, "plasma" = 20) @@ -208,7 +208,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ icon_state = "sheet-wood" icon = 'icons/obj/stack_objects.dmi' sheettype = "wood" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) resistance_flags = FLAMMABLE merge_type = /obj/item/stack/sheet/mineral/wood novariants = TRUE diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 4e15cea273..2231207556 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -206,7 +206,7 @@ flags_1 = CONDUCT_1 turf_type = /turf/open/floor/plasteel mineralType = "metal" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) resistance_flags = FIRE_PROOF /obj/item/stack/tile/plasteel/cyborg diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 6691462888..26c2c0b9db 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -42,7 +42,7 @@ flags_2 = NO_MAT_REDEMPTION_2 var/pshoom = 'sound/items/pshoom.ogg' var/alt_sound = 'sound/items/pshoom_2.ogg' - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 60, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50) /obj/item/storage/backpack/holding/suicide_act(mob/living/user) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index 05599597af..9f42a7c370 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -10,7 +10,7 @@ throwforce = 7 w_class = WEIGHT_CLASS_NORMAL attack_verb = list("beaten") - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 50, bio = 0, rad = 0, fire = 80, acid = 80) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) var/stunforce = 140 var/status = 0 diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 4b20b9695f..2e512c3ec4 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -13,7 +13,7 @@ throw_range = 4 materials = list(MAT_METAL = 500) actions_types = list(/datum/action/item_action/set_internals) - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 80, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 30) var/datum/gas_mixture/air_contents = null var/distribute_pressure = ONE_ATMOSPHERE var/integrity = 3 diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index dc0540307e..2d54eec334 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -10,7 +10,7 @@ slowdown = 1 actions_types = list(/datum/action/item_action/toggle_mister) max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) resistance_flags = FIRE_PROOF var/obj/item/noz diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index 44c44281c6..2ef3e52ff1 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -140,7 +140,7 @@ Frequency: throw_speed = 3 throw_range = 5 materials = list(MAT_METAL=10000) - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/list/active_portal_pairs var/max_portal_pairs = 3 diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index cf2baba081..ed6233a0b6 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -11,11 +11,12 @@ force = 5 throwforce = 7 w_class = WEIGHT_CLASS_SMALL - materials = list(MAT_METAL=50) + materials = list(MAT_METAL=50) + attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") tool_behaviour = TOOL_CROWBAR toolspeed = 1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) /obj/item/crowbar/suicide_act(mob/user) user.visible_message("[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -39,7 +40,8 @@ icon = 'icons/obj/abductor.dmi' usesound = 'sound/weapons/sonic_jackhammer.ogg' icon_state = "crowbar" - toolspeed = 0.1 + toolspeed = 0.1 + /obj/item/crowbar/large name = "crowbar" @@ -67,7 +69,8 @@ item_state = "jawsoflife" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) + usesound = 'sound/items/jaws_pry.ogg' force = 15 toolspeed = 0.25 diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index ea7a762b1e..530580fab5 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -19,7 +19,7 @@ usesound = list('sound/items/screwdriver.ogg', 'sound/items/screwdriver2.ogg') tool_behaviour = TOOL_SCREWDRIVER toolspeed = 1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) var/random_color = TRUE //if the screwdriver uses random coloring var/static/list/screwdriver_colors = list( "blue" = rgb(24, 97, 213), diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 7425835764..d7dd57fd2b 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD #define WELDER_FUEL_BURN_INTERVAL 13 /obj/item/weldingtool name = "welding tool" @@ -358,4 +359,366 @@ nextrefueltick = world.time + 10 reagents.add_reagent("welding_fuel", 1) +======= +#define WELDER_FUEL_BURN_INTERVAL 13 +/obj/item/weldingtool + name = "welding tool" + desc = "A standard edition welder provided by Nanotrasen." + icon = 'icons/obj/tools.dmi' + icon_state = "welder" + item_state = "welder" + lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + flags_1 = CONDUCT_1 + slot_flags = SLOT_BELT + force = 3 + throwforce = 5 + hitsound = "swing_hit" + usesound = list('sound/items/welder.ogg', 'sound/items/welder2.ogg') + var/acti_sound = 'sound/items/welderactivate.ogg' + var/deac_sound = 'sound/items/welderdeactivate.ogg' + throw_speed = 3 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) + resistance_flags = FIRE_PROOF + + materials = list(MAT_METAL=70, MAT_GLASS=30) + var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2) + var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower) + var/max_fuel = 20 //The max amount of fuel the welder can hold + var/change_icons = 1 + var/can_off_process = 0 + var/light_intensity = 2 //how powerful the emitted light is when used. + var/burned_fuel_for = 0 //when fuel was last removed + heat = 3800 + tool_behaviour = TOOL_WELDER + toolspeed = 1 + +/obj/item/weldingtool/Initialize() + . = ..() + create_reagents(max_fuel) + reagents.add_reagent("welding_fuel", max_fuel) + update_icon() + + +/obj/item/weldingtool/proc/update_torch() + if(welding) + add_overlay("[initial(icon_state)]-on") + item_state = "[initial(item_state)]1" + else + item_state = "[initial(item_state)]" + + +/obj/item/weldingtool/update_icon() + cut_overlays() + if(change_icons) + var/ratio = get_fuel() / max_fuel + ratio = CEILING(ratio*4, 1) * 25 + add_overlay("[initial(icon_state)][ratio]") + update_torch() + return + + +/obj/item/weldingtool/process() + switch(welding) + if(0) + force = 3 + damtype = "brute" + update_icon() + if(!can_off_process) + STOP_PROCESSING(SSobj, src) + return + //Welders left on now use up fuel, but lets not have them run out quite that fast + if(1) + force = 15 + damtype = "fire" + ++burned_fuel_for + if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL) + use(1) + update_icon() + + //This is to start fires. process() is only called if the welder is on. + open_flame() + + +/obj/item/weldingtool/suicide_act(mob/user) + user.visible_message("[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!") + return (FIRELOSS) + + +/obj/item/weldingtool/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/screwdriver)) + flamethrower_screwdriver(I, user) + else if(istype(I, /obj/item/stack/rods)) + flamethrower_rods(I, user) + else + . = ..() + update_icon() + +/obj/item/weldingtool/proc/explode() + var/turf/T = get_turf(loc) + var/plasmaAmount = reagents.get_reagent_amount("plasma") + dyn_explosion(T, plasmaAmount/5)//20 plasma in a standard welder has a 4 power explosion. no breaches, but enough to kill/dismember holder + qdel(src) + +/obj/item/weldingtool/attack(mob/living/carbon/human/H, mob/user) + if(!istype(H)) + return ..() + + var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected)) + + if(affecting && affecting.status == BODYPART_ROBOTIC && user.a_intent != INTENT_HARM) + if(src.use_tool(H, user, 0, volume=50, amount=1)) + if(user == H) + user.visible_message("[user] starts to fix some of the dents on [H]'s [affecting.name].", + "You start fixing some of the dents on [H]'s [affecting.name].") + if(!do_mob(user, H, 50)) + return + item_heal_robotic(H, user, 15, 0) + else + return ..() + + +/obj/item/weldingtool/afterattack(atom/O, mob/user, proximity) + if(!proximity) + return + if(!status && O.is_refillable()) + reagents.trans_to(O, reagents.total_volume) + to_chat(user, "You empty [src]'s fuel tank into [O].") + update_icon() + if(isOn()) + use(1) + var/turf/location = get_turf(user) + location.hotspot_expose(700, 50, 1) + if(get_fuel() <= 0) + set_light(0) + + if(isliving(O)) + var/mob/living/L = O + if(L.IgniteMob()) + message_admins("[key_name_admin(user)] set [key_name_admin(L)] on fire") + log_game("[key_name(user)] set [key_name(L)] on fire") + + +/obj/item/weldingtool/attack_self(mob/user) + if(src.reagents.has_reagent("plasma")) + message_admins("[key_name_admin(user)] activated a rigged welder.") + explode() + switched_on(user) + if(welding) + set_light(light_intensity) + + update_icon() + + +// Returns the amount of fuel in the welder +/obj/item/weldingtool/proc/get_fuel() + return reagents.get_reagent_amount("welding_fuel") + + +// Uses fuel from the welding tool. +/obj/item/weldingtool/use(used = 0) + if(!isOn() || !check_fuel()) + return FALSE + + if(used) + burned_fuel_for = 0 + if(get_fuel() >= used) + reagents.remove_reagent("welding_fuel", used) + check_fuel() + return TRUE + else + return FALSE + + +//Turns off the welder if there is no more fuel (does this really need to be its own proc?) +/obj/item/weldingtool/proc/check_fuel(mob/user) + if(get_fuel() <= 0 && welding) + switched_on(user) + update_icon() + //mob icon update + if(ismob(loc)) + var/mob/M = loc + M.update_inv_hands(0) + + return 0 + return 1 + +//Switches the welder on +/obj/item/weldingtool/proc/switched_on(mob/user) + if(!status) + to_chat(user, "[src] can't be turned on while unsecured!") + return + welding = !welding + if(welding) + if(get_fuel() >= 1) + to_chat(user, "You switch [src] on.") + playsound(loc, acti_sound, 50, 1) + force = 15 + damtype = "fire" + hitsound = 'sound/items/welder.ogg' + update_icon() + START_PROCESSING(SSobj, src) + else + to_chat(user, "You need more fuel!") + switched_off(user) + else + to_chat(user, "You switch [src] off.") + playsound(loc, deac_sound, 50, 1) + switched_off(user) + +//Switches the welder off +/obj/item/weldingtool/proc/switched_off(mob/user) + welding = 0 + set_light(0) + + force = 3 + damtype = "brute" + hitsound = "swing_hit" + update_icon() + + +/obj/item/weldingtool/examine(mob/user) + ..() + to_chat(user, "It contains [get_fuel()] unit\s of fuel out of [max_fuel].") + +/obj/item/weldingtool/is_hot() + return welding * heat + +//Returns whether or not the welding tool is currently on. +/obj/item/weldingtool/proc/isOn() + return welding + +// When welding is about to start, run a normal tool_use_check, then flash a mob if it succeeds. +/obj/item/weldingtool/tool_start_check(mob/living/user, amount=0) + . = tool_use_check(user, amount) + if(. && user) + user.flash_act(light_intensity) + +// If welding tool ran out of fuel during a construction task, construction fails. +/obj/item/weldingtool/tool_use_check(mob/living/user, amount) + if(!isOn() || !check_fuel()) + to_chat(user, "[src] has to be on to complete this task!") + return FALSE + + if(get_fuel() >= amount) + return TRUE + else + to_chat(user, "You need more welding fuel to complete this task!") + return FALSE + + +/obj/item/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user) + if(welding) + to_chat(user, "Turn it off first!") + return + status = !status + if(status) + to_chat(user, "You resecure [src] and close the fuel tank.") + container_type = NONE + else + to_chat(user, "[src] can now be attached, modified, and refuelled.") + container_type = OPENCONTAINER + add_fingerprint(user) + +/obj/item/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user) + if(!status) + var/obj/item/stack/rods/R = I + if (R.use(1)) + var/obj/item/flamethrower/F = new /obj/item/flamethrower(user.loc) + if(!remove_item_from_storage(F)) + user.transferItemToLoc(src, F, TRUE) + F.weldtool = src + add_fingerprint(user) + to_chat(user, "You add a rod to a welder, starting to build a flamethrower.") + user.put_in_hands(F) + else + to_chat(user, "You need one rod to start building a flamethrower!") + +/obj/item/weldingtool/ignition_effect(atom/A, mob/user) + if(use_tool(A, user, 0, amount=1)) + return "[user] casually lights [A] with [src], what a badass." + else + return "" + +/obj/item/weldingtool/largetank + name = "industrial welding tool" + desc = "A slightly larger welder with a larger tank." + icon_state = "indwelder" + max_fuel = 40 + materials = list(MAT_GLASS=60) + +/obj/item/weldingtool/largetank/cyborg + name = "integrated welding tool" + desc = "An advanced welder designed to be used in robotic systems." + toolspeed = 0.5 + +/obj/item/weldingtool/largetank/flamethrower_screwdriver() + return + + +/obj/item/weldingtool/mini + name = "emergency welding tool" + desc = "A miniature welder used during emergencies." + icon_state = "miniwelder" + max_fuel = 10 + w_class = WEIGHT_CLASS_TINY + materials = list(MAT_METAL=30, MAT_GLASS=10) + change_icons = 0 + +/obj/item/weldingtool/mini/flamethrower_screwdriver() + return + +/obj/item/weldingtool/abductor + name = "alien welding tool" + desc = "An alien welding tool. Whatever fuel it uses, it never runs out." + icon = 'icons/obj/abductor.dmi' + icon_state = "welder" + toolspeed = 0.1 + light_intensity = 0 + change_icons = 0 + +/obj/item/weldingtool/abductor/process() + if(get_fuel() <= max_fuel) + reagents.add_reagent("welding_fuel", 1) + ..() + +/obj/item/weldingtool/hugetank + name = "upgraded industrial welding tool" + desc = "An upgraded welder based of the industrial welder." + icon_state = "upindwelder" + item_state = "upindwelder" + max_fuel = 80 + materials = list(MAT_METAL=70, MAT_GLASS=120) + +/obj/item/weldingtool/experimental + name = "experimental welding tool" + desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes." + icon_state = "exwelder" + item_state = "exwelder" + max_fuel = 40 + materials = list(MAT_METAL=70, MAT_GLASS=120) + var/last_gen = 0 + change_icons = 0 + can_off_process = 1 + light_intensity = 1 + toolspeed = 0.5 + var/nextrefueltick = 0 + +/obj/item/weldingtool/experimental/brass + name = "brass welding tool" + desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch." + resistance_flags = FIRE_PROOF | ACID_PROOF + icon_state = "brasswelder" + item_state = "brasswelder" + + +/obj/item/weldingtool/experimental/process() + ..() + if(get_fuel() < max_fuel && nextrefueltick < world.time) + nextrefueltick = world.time + 10 + reagents.add_reagent("welding_fuel", 1) + +>>>>>>> d282c60... Quote the armor lists (#35668) #undef WELDER_FUEL_BURN_INTERVAL \ No newline at end of file diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index de5eb557dc..d2981fc839 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -19,7 +19,7 @@ tool_behaviour = TOOL_WIRECUTTER toolspeed = 1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) var/random_color = TRUE var/static/list/wirecutter_colors = list( "blue" = "#1861d5", diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 2b3c6e7bbe..6e399c0909 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -11,11 +11,12 @@ throwforce = 7 w_class = WEIGHT_CLASS_SMALL usesound = 'sound/items/ratchet.ogg' - materials = list(MAT_METAL=150) + materials = list(MAT_METAL=150) + attack_verb = list("bashed", "battered", "bludgeoned", "whacked") tool_behaviour = TOOL_WRENCH toolspeed = 1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) /obj/item/wrench/suicide_act(mob/user) user.visible_message("[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -40,7 +41,8 @@ icon = 'icons/obj/abductor.dmi' icon_state = "wrench" usesound = 'sound/effects/empulse.ogg' - toolspeed = 0.1 + toolspeed = 0.1 + /obj/item/wrench/power name = "hand drill" @@ -50,7 +52,8 @@ lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' usesound = 'sound/items/drill_use.ogg' - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) //done for balance reasons, making them high value for research, but harder to get + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) + //done for balance reasons, making them high value for research, but harder to get force = 8 //might or might not be too high, subject to change w_class = WEIGHT_CLASS_SMALL throwforce = 8 @@ -73,7 +76,8 @@ desc = "A medical wrench with common(medical?) uses. Can be found in your hand." icon_state = "wrench_medical" force = 2 //MEDICAL - throwforce = 4 + throwforce = 4 + attack_verb = list("wrenched", "medicaled", "tapped", "jabbed", "whacked") /obj/item/wrench/medical/suicide_act(mob/living/user) diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index a6f4a52f69..8962e7248d 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -231,7 +231,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) resistance_flags = FIRE_PROOF /obj/item/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. @@ -280,7 +280,7 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 75 max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) resistance_flags = FIRE_PROOF var/hacked = FALSE var/brightness_on = 6 //TWICE AS BRIGHT AS A REGULAR ESWORD @@ -466,7 +466,7 @@ attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") sharpness = IS_SHARP max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) var/obj/item/grenade/explosive = null var/war_cry = "AAAAARGH!!!" @@ -650,7 +650,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' sharpness = IS_SHARP max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) resistance_flags = FIRE_PROOF /obj/item/twohanded/pitchfork/demonic diff --git a/code/game/objects/items/vending_items.dm b/code/game/objects/items/vending_items.dm index 9321cfc3f0..42b8757b7e 100644 --- a/code/game/objects/items/vending_items.dm +++ b/code/game/objects/items/vending_items.dm @@ -14,7 +14,7 @@ throw_speed = 1 throw_range = 7 w_class = WEIGHT_CLASS_BULKY - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30) var/charges = list(0, 0, 0) //how many restocking "charges" the refill has for standard/contraband/coin products var/init_charges = list(0, 0, 0) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 34260eafe0..c476611ff9 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -11,7 +11,7 @@ throw_range = 7 attack_verb = list("banned") max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 70) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) resistance_flags = FIRE_PROOF /obj/item/banhammer/suicide_act(mob/user) @@ -63,7 +63,7 @@ block_chance = 50 sharpness = IS_SHARP max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/item/claymore/suicide_act(mob/user) @@ -210,7 +210,7 @@ block_chance = 50 sharpness = IS_SHARP max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF /obj/item/katana/cursed diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 56b5469c86..39ad436b05 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -10,7 +10,7 @@ /obj/structure/Initialize() if (!armor) - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) . = ..() if(smooth) queue_smooth(src) diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm index c9c9e8c931..41ab647897 100644 --- a/code/game/objects/structures/barsigns.dm +++ b/code/game/objects/structures/barsigns.dm @@ -6,7 +6,7 @@ req_access = list(ACCESS_BAR) max_integrity = 500 integrity_failure = 250 - armor = list(melee = 20, bullet = 20, laser = 20, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) buildable_sign = 0 var/list/barsigns=list() var/list/hiddensigns diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 3ebac6f65f..52fe7b9bf9 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -15,7 +15,7 @@ var/wall_mounted = 0 //never solid (You can always pass over it) max_integrity = 200 integrity_failure = 50 - armor = list(melee = 20, bullet = 10, laser = 10, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 70, acid = 60) + armor = list("melee" = 20, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60) var/breakout_time = 1200 var/message_cooldown var/can_weld_shut = TRUE diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 215384054b..dd503d76f7 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -4,7 +4,7 @@ locked = TRUE icon_state = "secure" max_integrity = 250 - armor = list(melee = 30, bullet = 50, laser = 50, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) + armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) secure = TRUE /obj/structure/closet/secure_closet/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) diff --git a/code/game/objects/structures/crates_lockers/crates/secure.dm b/code/game/objects/structures/crates_lockers/crates/secure.dm index 57cc82662e..d52bd183ac 100644 --- a/code/game/objects/structures/crates_lockers/crates/secure.dm +++ b/code/game/objects/structures/crates_lockers/crates/secure.dm @@ -5,7 +5,7 @@ secure = TRUE locked = TRUE max_integrity = 500 - armor = list(melee = 30, bullet = 50, laser = 50, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) + armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) var/tamperproof = 0 /obj/structure/closet/crate/secure/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index a4efc89701..94e6d62747 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -6,7 +6,7 @@ density = TRUE anchored = TRUE resistance_flags = ACID_PROOF - armor = list(melee = 30, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0, fire = 70, acid = 100) + armor = list("melee" = 30, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100) max_integrity = 200 integrity_failure = 50 var/obj/item/showpiece = null diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index a75056c31a..b9f0da2b1b 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -6,7 +6,7 @@ icon_state = "fireaxe" anchored = TRUE density = FALSE - armor = list(melee = 50, bullet = 20, laser = 0, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 90, acid = 50) + armor = list("melee" = 50, "bullet" = 20, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) var/locked = TRUE var/open = FALSE max_integrity = 150 diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 733ec9952b..f9828ea52a 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -8,7 +8,7 @@ flags_1 = CONDUCT_1 pressure_resistance = 5*ONE_ATMOSPHERE layer = BELOW_OBJ_LAYER - armor = list(melee = 50, bullet = 70, laser = 70, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 0, acid = 0) + armor = list("melee" = 50, "bullet" = 70, "laser" = 70, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0) max_integrity = 50 integrity_failure = 20 var/rods_type = /obj/item/stack/rods diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index 38981d1d99..b9a750d2df 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -6,7 +6,7 @@ icon = 'icons/effects/effects.dmi' anchored = TRUE max_integrity = 1 - armor = list(melee = 0, bullet = 50, laser = 50, energy = 50, bomb = 0, bio = 0, rad = 0, fire = 20, acid = 20) + armor = list("melee" = 0, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20) var/obj/item/holosign_creator/projector /obj/structure/holosign/New(loc, source_projector) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 83549a56d2..c6273f3049 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -5,7 +5,7 @@ icon_state = "lattice" density = FALSE anchored = TRUE - armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 50) + armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) max_integrity = 50 layer = LATTICE_LAYER //under pipes var/number_of_rods = 1 diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 35d1008474..7ae10816a6 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -15,7 +15,7 @@ var/isSwitchingStates = 0 var/close_delay = -1 //-1 if does not auto close. max_integrity = 200 - armor = list(melee = 10, bullet = 0, laser = 0, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 50, acid = 50) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 50, "acid" = 50) var/sheetType = /obj/item/stack/sheet/metal var/sheetAmount = 7 var/openSound = 'sound/effects/stonedoor_openclose.ogg' diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index 99903901bd..bd2c888b3c 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -3,7 +3,7 @@ desc = "Definitely can't get past those. No way." icon = 'icons/obj/stationobjs.dmi' icon_state = "plasticflaps" - armor = list(melee = 100, bullet = 80, laser = 80, energy = 100, bomb = 50, bio = 100, rad = 100, fire = 50, acid = 50) + armor = list("melee" = 100, "bullet" = 80, "laser" = 80, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 50, "acid" = 50) density = FALSE anchored = TRUE layer = ABOVE_MOB_LAYER diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index c3547116fd..5a3488225e 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -5,7 +5,7 @@ density = FALSE layer = SIGN_LAYER max_integrity = 100 - armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) var/buildable_sign = 1 //unwrenchable and modifiable /obj/structure/sign/ComponentInitialize() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 7cb73ba52b..09ad92e396 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -159,7 +159,7 @@ canSmoothWith = null max_integrity = 70 resistance_flags = ACID_PROOF - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) var/list/debris = list() /obj/structure/table/glass/New() @@ -292,7 +292,7 @@ canSmoothWith = list(/obj/structure/table/reinforced, /obj/structure/table) max_integrity = 200 integrity_failure = 50 - armor = list(melee = 10, bullet = 30, laser = 30, energy = 100, bomb = 20, bio = 0, rad = 0, fire = 80, acid = 70) + armor = list("melee" = 10, "bullet" = 30, "laser" = 30, "energy" = 100, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) /obj/structure/table/reinforced/deconstruction_hints(mob/user) if(deconstruction_ready) diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index 257ae07a55..b169fc0b2c 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -8,7 +8,7 @@ icon = 'icons/turf/shuttle.dmi' resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF max_integrity = 500 - armor = list(melee = 100, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) //default + ignores melee + armor = list("melee" = 100, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) //default + ignores melee /obj/structure/shuttle/engine name = "engine" diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index 26452e0945..dcc8be412f 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -13,7 +13,7 @@ icon_state = "vest_stealth" item_state = "armor" blood_overlay_type = "armor" - armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15, fire = 70, acid = 70) + armor = list("melee" = 15, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 15, "bio" = 15, "rad" = 15, "fire" = 70, "acid" = 70) actions_types = list(/datum/action/item_action/hands_free/activate) allowed = list( /obj/item/device/abductor, @@ -26,8 +26,8 @@ var/stealth_active = 0 var/combat_cooldown = 10 var/datum/icon_snapshot/disguise - var/stealth_armor = list(melee = 15, bullet = 15, laser = 15, energy = 15, bomb = 15, bio = 15, rad = 15, fire = 70, acid = 70) - var/combat_armor = list(melee = 50, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 50, rad = 50, fire = 90, acid = 90) + var/stealth_armor = list("melee" = 15, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 15, "bio" = 15, "rad" = 15, "fire" = 70, "acid" = 70) + var/combat_armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 90, "acid" = 90) /obj/item/clothing/suit/armor/abductor/vest/proc/toggle_nodrop() flags_1 ^= NODROP_1 diff --git a/code/modules/antagonists/blob/blob/blobs/core.dm b/code/modules/antagonists/blob/blob/blobs/core.dm index 9412e8582f..1140f540c4 100644 --- a/code/modules/antagonists/blob/blob/blobs/core.dm +++ b/code/modules/antagonists/blob/blob/blobs/core.dm @@ -4,7 +4,7 @@ icon_state = "blank_blob" desc = "A huge, pulsating yellow mass." max_integrity = 400 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 75, acid = 90) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 90) explosion_block = 6 point_return = -1 health_regen = 0 //we regen in Life() instead of when pulsed diff --git a/code/modules/antagonists/blob/blob/blobs/node.dm b/code/modules/antagonists/blob/blob/blobs/node.dm index a6bcd359a8..7d38ccd17f 100644 --- a/code/modules/antagonists/blob/blob/blobs/node.dm +++ b/code/modules/antagonists/blob/blob/blobs/node.dm @@ -4,7 +4,7 @@ icon_state = "blank_blob" desc = "A large, pulsating yellow mass." max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 65, acid = 90) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 65, "acid" = 90) health_regen = 3 point_return = 25 diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm index 551ec5d418..87dcd7bfdf 100644 --- a/code/modules/antagonists/blob/blob/blobs/shield.dm +++ b/code/modules/antagonists/blob/blob/blobs/shield.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/structure/blob/shield name = "strong blob" icon = 'icons/mob/blob.dmi' @@ -31,3 +32,38 @@ desc = initial(desc) atmosblock = TRUE air_update_turf(1) +======= +/obj/structure/blob/shield + name = "strong blob" + icon = 'icons/mob/blob.dmi' + icon_state = "blob_shield" + desc = "A solid wall of slightly twitching tendrils." + max_integrity = 150 + brute_resist = 0.25 + explosion_block = 3 + point_return = 4 + atmosblock = TRUE + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) + +/obj/structure/blob/shield/scannerreport() + if(atmosblock) + return "Will prevent the spread of atmospheric changes." + return "N/A" + +/obj/structure/blob/shield/core + point_return = 0 + +/obj/structure/blob/shield/update_icon() + ..() + if(obj_integrity <= 75) + icon_state = "blob_shield_damaged" + name = "weakened strong blob" + desc = "A wall of twitching tendrils." + atmosblock = FALSE + else + icon_state = initial(icon_state) + name = initial(name) + desc = initial(desc) + atmosblock = TRUE + air_update_turf(1) +>>>>>>> d282c60... Quote the armor lists (#35668) diff --git a/code/modules/antagonists/blob/blob/theblob.dm b/code/modules/antagonists/blob/blob/theblob.dm index c110ef272c..80d24bb080 100644 --- a/code/modules/antagonists/blob/blob/theblob.dm +++ b/code/modules/antagonists/blob/blob/theblob.dm @@ -11,7 +11,7 @@ CanAtmosPass = ATMOS_PASS_PROC var/point_return = 0 //How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed. max_integrity = 30 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 70) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) var/health_regen = 2 //how much health this blob regens when pulsed var/pulse_timestamp = 0 //we got pulsed when? var/heal_timestamp = 0 //we got healed when? diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index 118c692bc0..dce13f0aaa 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -446,7 +446,7 @@ desc = "A huge, bulky mass of pressure and temperature-resistant organic tissue, evolved to facilitate space travel." flags_1 = STOPSPRESSUREDMAGE_1 | NODROP_1 | DROPDEL_1 //Not THICKMATERIAL_1 because it's organic tissue, so if somebody tries to inject something into it, it still ends up in your blood. (also balance but muh fluff) allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/oxygen) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 90, acid = 90) //No armor at all. + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) //No armor at all. /obj/item/clothing/suit/space/changeling/Initialize() . = ..() @@ -464,7 +464,7 @@ icon_state = "lingspacehelmet" desc = "A covering of pressure and temperature-resistant organic tissue with a glass-like chitin front." flags_1 = STOPSPRESSUREDMAGE_1 | NODROP_1 | DROPDEL_1 //Again, no THICKMATERIAL_1. - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 90, acid = 90) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH /***************************************\ @@ -490,7 +490,7 @@ icon_state = "lingarmor" flags_1 = NODROP_1 | DROPDEL_1 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 10, bio = 4, rad = 0, fire = 90, acid = 90) + armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 10, "bio" = 4, "rad" = 0, "fire" = 90, "acid" = 90) flags_inv = HIDEJUMPSUIT cold_protection = 0 heat_protection = 0 @@ -505,5 +505,5 @@ desc = "A tough, hard covering of black chitin with transparent chitin in front." icon_state = "lingarmorhelmet" flags_1 = NODROP_1 | DROPDEL_1 - armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 10, bio = 4, rad = 0, fire = 90, acid = 90) + armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 10, "bio" = 4, "rad" = 0, "fire" = 90, "acid" = 90) flags_inv = HIDEEARS|HIDEHAIR|HIDEEYES|HIDEFACIALHAIR|HIDEFACE diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm index df83ff4890..95ae8ff65f 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm @@ -7,7 +7,7 @@ w_class = WEIGHT_CLASS_NORMAL resistance_flags = FIRE_PROOF | ACID_PROOF flags_inv = HIDEEARS|HIDEHAIR|HIDEFACE - armor = list(melee = 50, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 50, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) /obj/item/clothing/head/helmet/clockwork/Initialize() . = ..() @@ -20,17 +20,17 @@ /obj/item/clothing/head/helmet/clockwork/ratvar_act() if(GLOB.ratvar_awakens) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) flags_1 |= STOPSPRESSUREDMAGE_1 max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT else if(GLOB.ratvar_approaches) - armor = list(melee = 70, bullet = 80, laser = -15, energy = 25, bomb = 70, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 70, "bullet" = 80, "laser" = -15, "energy" = 25, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) flags_1 |= STOPSPRESSUREDMAGE_1 max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT else - armor = list(melee = 60, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) flags_1 &= ~STOPSPRESSUREDMAGE_1 max_heat_protection_temperature = initial(max_heat_protection_temperature) min_cold_protection_temperature = initial(min_cold_protection_temperature) @@ -67,7 +67,7 @@ cold_protection = CHEST|GROIN|LEGS heat_protection = CHEST|GROIN|LEGS resistance_flags = FIRE_PROOF | ACID_PROOF - armor = list(melee = 60, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/device/mmi/posibrain/soul_vessel) /obj/item/clothing/suit/armor/clockwork/Initialize() @@ -81,17 +81,17 @@ /obj/item/clothing/suit/armor/clockwork/ratvar_act() if(GLOB.ratvar_awakens) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) flags_1 |= STOPSPRESSUREDMAGE_1 max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT else if(GLOB.ratvar_approaches) - armor = list(melee = 70, bullet = 80, laser = -15, energy = 25, bomb = 70, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 70, "bullet" = 80, "laser" = -15, "energy" = 25, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) flags_1 |= STOPSPRESSUREDMAGE_1 max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT else - armor = list(melee = 60, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) flags_1 &= ~STOPSPRESSUREDMAGE_1 max_heat_protection_temperature = initial(max_heat_protection_temperature) min_cold_protection_temperature = initial(min_cold_protection_temperature) @@ -134,7 +134,7 @@ siemens_coefficient = 0 permeability_coefficient = 0.05 resistance_flags = FIRE_PROOF | ACID_PROOF - armor = list(melee = 80, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 80, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) /obj/item/clothing/gloves/clockwork/Initialize() . = ..() @@ -147,12 +147,12 @@ /obj/item/clothing/gloves/clockwork/ratvar_act() if(GLOB.ratvar_awakens) - armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) flags_1 |= STOPSPRESSUREDMAGE_1 max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT else - armor = list(melee = 80, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 80, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) flags_1 &= ~STOPSPRESSUREDMAGE_1 max_heat_protection_temperature = initial(max_heat_protection_temperature) min_cold_protection_temperature = initial(min_cold_protection_temperature) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 6d4a5fce18..459aaa9f2d 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -275,7 +275,7 @@ desc = "A torn, dust-caked hood. Strange letters line the inside." flags_inv = HIDEFACE|HIDEHAIR|HIDEEARS flags_cover = HEADCOVERSEYES - armor = list(melee = 40, bullet = 30, laser = 40,energy = 20, bomb = 25, bio = 10, rad = 0, fire = 10, acid = 10) + armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT heat_protection = HEAD @@ -288,7 +288,7 @@ item_state = "cultrobes" body_parts_covered = CHEST|GROIN|LEGS|ARMS allowed = list(/obj/item/tome, /obj/item/melee/cultblade) - armor = list(melee = 40, bullet = 30, laser = 40,energy = 20, bomb = 25, bio = 10, rad = 0, fire = 10, acid = 10) + armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) flags_inv = HIDEJUMPSUIT cold_protection = CHEST|GROIN|LEGS|ARMS min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT @@ -321,7 +321,7 @@ item_state = "magus" desc = "A helm worn by the followers of Nar-Sie." flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDEEARS|HIDEEYES - armor = list(melee = 30, bullet = 30, laser = 30,energy = 20, bomb = 0, bio = 0, rad = 0, fire = 10, acid = 10) + armor = list("melee" = 30, "bullet" = 30, "laser" = 30,"energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 10) flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH /obj/item/clothing/suit/magusred @@ -331,7 +331,7 @@ item_state = "magusred" body_parts_covered = CHEST|GROIN|LEGS|ARMS allowed = list(/obj/item/tome, /obj/item/melee/cultblade) - armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0, fire = 10, acid = 10) + armor = list("melee" = 50, "bullet" = 30, "laser" = 50,"energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT /obj/item/clothing/head/helmet/space/hardsuit/cult @@ -339,7 +339,7 @@ desc = "A heavily-armored helmet worn by warriors of the Nar-Sien cult. It can withstand hard vacuum." icon_state = "cult_helmet" item_state = "cult_helmet" - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 40, acid = 75) + armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 40, "acid" = 75) brightness_on = 0 actions_types = list() @@ -350,7 +350,7 @@ desc = "A heavily-armored exosuit worn by warriors of the Nar-Sien cult. It can withstand hard vacuum." w_class = WEIGHT_CLASS_BULKY allowed = list(/obj/item/tome, /obj/item/melee/cultblade, /obj/item/tank/internals/) - armor = list(melee = 70, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 40, acid = 75) + armor = list("melee" = 70, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 40, "acid" = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/cult /obj/item/sharpener/cult @@ -374,7 +374,7 @@ icon_state = "cult_armor" item_state = "cult_armor" w_class = WEIGHT_CLASS_BULKY - armor = list(melee = 50, bullet = 40, laser = 50,energy = 30, bomb = 50, bio = 30, rad = 30, fire = 50, acid = 60) + armor = list("melee" = 50, "bullet" = 40, "laser" = 50,"energy" = 30, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 50, "acid" = 60) body_parts_covered = CHEST|GROIN|LEGS|ARMS allowed = list(/obj/item/tome, /obj/item/melee/cultblade) var/current_charges = 3 @@ -384,7 +384,7 @@ name = "empowered cultist armor" desc = "Empowered garb which creates a powerful shield around the user." icon_state = "cult_hoodalt" - armor = list(melee = 50, bullet = 40, laser = 50,energy = 30, bomb = 50, bio = 30, rad = 30, fire = 50, acid = 50) + armor = list("melee" = 50, "bullet" = 40, "laser" = 50,"energy" = 30, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 50, "acid" = 50) body_parts_covered = HEAD flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS @@ -428,7 +428,7 @@ flags_inv = HIDEJUMPSUIT allowed = list(/obj/item/tome, /obj/item/melee/cultblade) body_parts_covered = CHEST|GROIN|LEGS|ARMS - armor = list(melee = -50, bullet = -50, laser = -50,energy = -50, bomb = -50, bio = -50, rad = -50, fire = 0, acid = 0) + armor = list("melee" = -50, "bullet" = -50, "laser" = -50,"energy" = -50, "bomb" = -50, "bio" = -50, "rad" = -50, "fire" = 0, "acid" = 0) slowdown = -1 hoodtype = /obj/item/clothing/head/hooded/berserkerhood @@ -438,7 +438,7 @@ icon_state = "culthood" body_parts_covered = HEAD flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - armor = list(melee = -50, bullet = -50, laser = -50, energy = -50, bomb = -50, bio = -50, rad = -50, fire = 0, acid = 0) + armor = list("melee" = -50, "bullet" = -50, "laser" = -50, "energy" = -50, "bomb" = -50, "bio" = -50, "rad" = -50, "fire" = 0, "acid" = 0) /obj/item/clothing/suit/hooded/cultrobes/berserker/equipped(mob/living/user, slot) ..() diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index 910caa7fca..e540525405 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -513,7 +513,7 @@ This is here to make the tiles around the station mininuke change when it's arme icon_state = "nucleardisk" persistence_replacement = /obj/item/disk/nuclear/fake max_integrity = 250 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/fake = FALSE diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index b20a395e6d..9f5b21962a 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -245,7 +245,7 @@ materials = list(MAT_GLASS=7500, MAT_METAL=1000) attack_verb = list("shoved", "bashed") block_chance = 50 - armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 30, bio = 0, rad = 0, fire = 80, acid = 70) + armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) /obj/item/device/assembly/flash/shield/flash_recharge(interval=10) if(times_used >= 4) diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index bb8f89812a..f757dbb7b3 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -69,7 +69,7 @@ req_access = list(ACCESS_ATMOSPHERICS) max_integrity = 250 integrity_failure = 80 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 90, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30) resistance_flags = FIRE_PROOF var/danger_level = 0 diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 0f57bd85e9..03f487a2f7 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -53,7 +53,7 @@ Pipelines + Other Objects -> Pipe network normalize_cardinal_directions() nodes = new(device_type) if (!armor) - armor = list(melee = 25, bullet = 10, laser = 10, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 100, acid = 70) + armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70) ..() if(process) SSair.atmos_machinery += src diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index df76a47b82..e0f89a374e 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -7,7 +7,7 @@ density = TRUE anchored = TRUE max_integrity = 350 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 30, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 30, "acid" = 30) layer = ABOVE_WINDOW_LAYER state_open = FALSE circuit = /obj/item/circuitboard/machine/cryo_tube diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index f52483f1ae..ce532f9ed8 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -8,7 +8,7 @@ density = TRUE anchored = TRUE max_integrity = 300 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 80, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 30) layer = OBJ_LAYER circuit = /obj/item/circuitboard/machine/thermomachine pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 6582dad6df..fd3b82dfa5 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -12,7 +12,7 @@ idle_power_usage = 2 active_power_usage = 4 max_integrity = 150 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 40, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 40, "acid" = 0) var/target_layer = PIPING_LAYER_DEFAULT /obj/machinery/meter/Destroy() diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 13649a742a..56fe498603 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -17,7 +17,7 @@ var/can_max_release_pressure = (ONE_ATMOSPHERE * 10) var/can_min_release_pressure = (ONE_ATMOSPHERE / 10) - armor = list(melee = 50, bullet = 50, laser = 50, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 80, acid = 50) + armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 50) max_integrity = 250 integrity_failure = 100 pressure_resistance = 7 * ONE_ATMOSPHERE diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index f21e005b9a..a584c2ceef 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/atmos.dmi' use_power = NO_POWER_USE max_integrity = 250 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 60, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 60, "acid" = 30) var/datum/gas_mixture/air_contents diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 707f004eb1..21c19fab5e 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -559,7 +559,7 @@ /obj/item/clothing/under/syndicate/coldres name = "insulated tactical turtleneck" desc = "A non-descript and slightly suspicious-looking turtleneck with digital camouflage cargo pants. The interior has been padded with special insulation for both warmth and protection." - armor = list(melee = 20, bullet = 10, laser = 0,energy = 5, bomb = 0, bio = 0, rad = 0, fire = 25, acid = 25) + armor = list("melee" = 20, "bullet" = 10, "laser" = 0,"energy" = 5, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 25, "acid" = 25) cold_protection = CHEST|GROIN|ARMS|LEGS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT /obj/item/clothing/shoes/combat/coldres diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 1fd046babb..609d341243 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -180,7 +180,7 @@ random_sensor = FALSE resistance_flags = NONE can_adjust = FALSE - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) var/datum/action/item_action/chameleon/change/chameleon_action @@ -213,7 +213,7 @@ item_state = "armor" blood_overlay_type = "armor" resistance_flags = NONE - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) var/datum/action/item_action/chameleon/change/chameleon_action @@ -238,7 +238,7 @@ icon_state = "meson" item_state = "meson" resistance_flags = NONE - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) var/datum/action/item_action/chameleon/change/chameleon_action @@ -264,7 +264,7 @@ item_state = "ygloves" resistance_flags = NONE - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) var/datum/action/item_action/chameleon/change/chameleon_action @@ -290,7 +290,7 @@ item_color = "grey" resistance_flags = NONE - armor = list(melee = 5, bullet = 5, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) var/datum/action/item_action/chameleon/change/chameleon_action @@ -313,7 +313,7 @@ // The camohat, I mean, holographic hat projection, is part of the // drone itself. flags_1 = NODROP_1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) // which means it offers no protection, it's just air and light /obj/item/clothing/head/chameleon/drone/Initialize() @@ -330,7 +330,7 @@ icon_state = "gas_alt" item_state = "gas_alt" resistance_flags = NONE - armor = list(melee = 5, bullet = 5, laser = 5, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) flags_1 = BLOCK_GAS_SMOKE_EFFECT_1 | MASKINTERNALS_1 flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR @@ -365,7 +365,7 @@ /obj/item/clothing/mask/chameleon/drone //Same as the drone chameleon hat, undroppable and no protection flags_1 = NODROP_1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) // Can drones use the voice changer part? Let's not find out. vchange = 0 @@ -388,7 +388,7 @@ permeability_coefficient = 0.05 resistance_flags = NONE pockets = /obj/item/storage/internal/pocket/shoes - armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) var/datum/action/item_action/chameleon/change/chameleon_action diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index a439511fe2..0cf375c8dd 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -97,7 +97,7 @@ actions_types = list(/datum/action/item_action/toggle_research_scanner) glass_colour_type = /datum/client_colour/glass_colour/purple resistance_flags = ACID_PROOF - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) /obj/item/clothing/glasses/science/item_action_slot_check(slot) if(slot == slot_glasses) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 171310add9..1a0404430e 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -154,7 +154,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT strip_delay = 60 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 50) /obj/item/clothing/gloves/color/latex name = "latex gloves" diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 97afd78c38..70274c45d7 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -22,7 +22,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30) /obj/item/clothing/gloves/combat name = "combat gloves" @@ -37,7 +37,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) /obj/item/clothing/gloves/bracer @@ -54,4 +54,4 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor = list(melee = 15, bullet = 35, laser = 35, energy = 20, bomb = 35, bio = 35, rad = 35, fire = 0, acid = 0) + armor = list("melee" = 15, "bullet" = 35, "laser" = 35, "energy" = 20, "bomb" = 35, "bio" = 35, "rad" = 35, "fire" = 0, "acid" = 0) diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 51a1131f1c..db3dda1dd2 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -6,7 +6,7 @@ var/brightness_on = 4 //luminosity when on var/on = FALSE item_color = "yellow" //Determines used sprites: hardhat[on]_[item_color] and hardhat[on]_[item_color]2 (lying down sprite) - armor = list(melee = 15, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20, fire = 100, acid = 50) + armor = list("melee" = 15, "bullet" = 5, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50) flags_inv = 0 actions_types = list(/datum/action/item_action/toggle_helmet_light) resistance_flags = FIRE_PROOF diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index f6482063ea..b231ac9df6 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -3,7 +3,7 @@ desc = "Standard Security gear. Protects the head from impacts." icon_state = "helmet" item_state = "helmet" - armor = list(melee = 35, bullet = 30, laser = 30,energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 35, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) flags_inv = HIDEEARS cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT @@ -41,7 +41,7 @@ desc = "A bulletproof combat helmet that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." icon_state = "helmetalt" item_state = "helmetalt" - armor = list(melee = 15, bullet = 60, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 15, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) can_flashlight = 1 dog_fashion = null @@ -62,7 +62,7 @@ toggle_message = "You pull the visor down on" alt_toggle_message = "You push the visor up on" can_toggle = 1 - armor = list(melee = 45, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 45, "bullet" = 15, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 2, "rad" = 0, "fire" = 50, "acid" = 50) flags_inv = HIDEEARS|HIDEFACE strip_delay = 80 actions_types = list(/datum/action/item_action/toggle) @@ -117,7 +117,7 @@ desc = "An extremely robust, space-worthy helmet in a nefarious red and black stripe pattern." icon_state = "swatsyndie" item_state = "swatsyndie" - armor = list(melee = 40, bullet = 30, laser = 30,energy = 30, bomb = 50, bio = 90, rad = 20, fire = 50, acid = 50) + armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 50, "acid" = 50) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD @@ -138,7 +138,7 @@ flags_inv = HIDEEARS|HIDEHAIR icon_state = "thunderdome" item_state = "thunderdome" - armor = list(melee = 40, bullet = 30, laser = 25,energy = 10, bomb = 25, bio = 10, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 40, "bullet" = 30, "laser" = 25,"energy" = 10, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 50) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD @@ -151,7 +151,7 @@ desc = "An ancient helmet made of bronze and leather." flags_inv = HIDEEARS|HIDEHAIR flags_cover = HEADCOVERSEYES - armor = list(melee = 25, bullet = 0, laser = 25, energy = 10, bomb = 10, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 25, "bullet" = 0, "laser" = 25, "energy" = 10, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF icon_state = "roman" item_state = "roman" @@ -179,7 +179,7 @@ icon_state = "redtaghelm" flags_cover = HEADCOVERSEYES item_state = "redtaghelm" - armor = list(melee = 15, bullet = 10, laser = 20,energy = 10, bomb = 20, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list("melee" = 15, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) // Offer about the same protection as a hardhat. dog_fashion = null @@ -189,7 +189,7 @@ icon_state = "bluetaghelm" flags_cover = HEADCOVERSEYES item_state = "bluetaghelm" - armor = list(melee = 15, bullet = 10, laser = 20,energy = 10, bomb = 20, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list("melee" = 15, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) // Offer about the same protection as a hardhat. dog_fashion = null @@ -198,7 +198,7 @@ desc = "A classic metal helmet." icon_state = "knight_green" item_state = "knight_green" - armor = list(melee = 41, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0, fire = 0, acid = 50) + armor = list("melee" = 41, "bullet" = 15, "laser" = 5,"energy" = 5, "bomb" = 5, "bio" = 2, "rad" = 0, "fire" = 0, "acid" = 50) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH strip_delay = 80 @@ -232,7 +232,7 @@ desc = "An intimidating tribal helmet, it doesn't look very comfortable." flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE flags_cover = HEADCOVERSEYES - armor = list(melee = 25, bullet = 25, laser = 25, energy = 10, bomb = 10, bio = 5, rad = 20, fire = 40, acid = 20) + armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 10, "bio" = 5, "rad" = 20, "fire" = 40, "acid" = 20) icon_state = "skull" item_state = "skull" strip_delay = 100 diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 0a1adb1dca..37e392b7d8 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -26,7 +26,7 @@ icon_state = "captain" item_state = "that" flags_inv = 0 - armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) strip_delay = 60 dog_fashion = /datum/dog_fashion/head/captain @@ -44,7 +44,7 @@ name = "head of personnel's cap" icon_state = "hopcap" desc = "The symbol of true bureaucratic micromanagement." - armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) dog_fashion = /datum/dog_fashion/head/hop //Chaplain @@ -123,7 +123,7 @@ name = "head of security cap" desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge." icon_state = "hoscap" - armor = list(melee = 40, bullet = 30, laser = 25, energy = 10, bomb = 25, bio = 10, rad = 0, fire = 50, acid = 60) + armor = list("melee" = 40, "bullet" = 30, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 60) strip_delay = 80 dynamic_hair_suffix = "" @@ -144,7 +144,7 @@ name = "warden's police hat" desc = "It's a special armored hat issued to the Warden of a security force. Protects the head from impacts." icon_state = "policehelm" - armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 30, acid = 60) + armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 60) strip_delay = 60 dog_fashion = /datum/dog_fashion/head/warden @@ -152,7 +152,7 @@ name = "security beret" desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficent protection." icon_state = "beret_badge" - armor = list(melee = 40, bullet = 30, laser = 30,energy = 10, bomb = 25, bio = 0, rad = 0, fire = 20, acid = 50) + armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50) strip_delay = 60 dog_fashion = null @@ -165,7 +165,7 @@ name = "warden's beret" desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." icon_state = "wardenberet" - armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 30, acid = 50) + armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 50) strip_delay = 60 /obj/item/clothing/head/beret/sec/navyofficer diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 544d9e7b12..0e4acfe983 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -6,7 +6,7 @@ desc = "It's good to be emperor." item_state = "that" flags_inv = 0 - armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) strip_delay = 80 /obj/item/clothing/head/powdered_wig @@ -185,7 +185,7 @@ name = "fedora" icon_state = "fedora" item_state = "fedora" - armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 50) + armor = list("melee" = 25, "bullet" = 5, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 50) desc = "A really cool hat if you're a mobster. A really lame hat if you're not." pockets = /obj/item/storage/internal/pocket/small @@ -279,7 +279,7 @@ name = "crown" desc = "A crown fit for a king, a petty king maybe." icon_state = "crown" - armor = list(melee = 15, bullet = 0, laser = 0,energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50) + armor = list("melee" = 15, "bullet" = 0, "laser" = 0,"energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF dynamic_hair_suffix = "" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 43ea1928fc..fe238f3ab7 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -20,7 +20,7 @@ materials = list(MAT_METAL=1750, MAT_GLASS=400) flash_protect = 2 tint = 2 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 60) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 60) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE actions_types = list(/datum/action/item_action/toggle) visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE @@ -42,7 +42,7 @@ item_color = "cakehat" hitsound = 'sound/weapons/tap.ogg' flags_inv = HIDEEARS|HIDEHAIR - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) brightness_on = 2 //luminosity when on flags_cover = HEADCOVERSEYES heat = 1000 @@ -112,7 +112,7 @@ item_state = "hardhat0_pumpkin" item_color = "pumpkin" flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) brightness_on = 2 //luminosity when on flags_cover = HEADCOVERSEYES @@ -149,7 +149,7 @@ item_state = "hardhat0_reindeer" item_color = "reindeer" flags_inv = 0 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) brightness_on = 1 //luminosity when on dynamic_hair_suffix = "" diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 6c5f0cb529..5c7514541d 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -119,7 +119,7 @@ desc = "It's a robust baseball hat in tasteful red colour." icon_state = "secsoft" item_color = "sec" - armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 20, acid = 50) + armor = list("melee" = 30, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50) strip_delay = 60 dog_fashion = null diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index e7894a586c..694c290f4b 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -20,7 +20,7 @@ materials = list(MAT_METAL=4000, MAT_GLASS=2000) flash_protect = 2 tint = 2 - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 55) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 55) actions_types = list(/datum/action/item_action/toggle) flags_inv = HIDEEARS|HIDEEYES|HIDEFACE flags_cover = MASKCOVERSEYES @@ -40,7 +40,7 @@ desc = "A modernised version of the classic design, this mask will not only filter out toxins but it can also be connected to an air supply." icon_state = "plaguedoctor" item_state = "gas_mask" - armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 2,"energy" = 2, "bomb" = 0, "bio" = 75, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/mask/gas/syndicate name = "syndicate mask" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 446a15c547..c0200d889c 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -28,7 +28,7 @@ visor_flags_cover = MASKCOVERSMOUTH gas_transfer_coefficient = 0.9 permeability_coefficient = 0.01 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 25, "rad" = 0, "fire" = 0, "acid" = 0) actions_types = list(/datum/action/item_action/adjust) /obj/item/clothing/mask/surgical/attack_self(mob/user) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index b33ac3e688..f4c37b281d 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -13,7 +13,7 @@ item_state = "jackboots" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - armor = list(melee = 25, bullet = 25, laser = 25, energy = 25, bomb = 50, bio = 10, rad = 0, fire = 70, acid = 50) + armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50) strip_delay = 70 resistance_flags = NONE permeability_coefficient = 0.05 //Thick soles, and covers the ankle @@ -24,7 +24,7 @@ desc = "High speed, no drag combat boots." permeability_coefficient = 0.01 flags_1 = NOSLIP_1 - armor = list(melee = 40, bullet = 30, laser = 25, energy = 25, bomb = 50, bio = 30, rad = 30, fire = 90, acid = 50) + armor = list("melee" = 40, "bullet" = 30, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 90, "acid" = 50) /obj/item/clothing/shoes/sandal desc = "A pair of rather plain, wooden sandals." @@ -55,7 +55,7 @@ strip_delay = 50 equip_delay_other = 50 resistance_flags = NONE - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 40, acid = 75) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 75) /obj/item/clothing/shoes/galoshes/dry name = "absorbent galoshes" diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index f9a53a1551..a2cd5bce75 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -7,7 +7,7 @@ flags_1 = STOPSPRESSUREDMAGE_1 | THICKMATERIAL_1 item_state = "spaceold" permeability_coefficient = 0.01 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR dynamic_hair_suffix = "" dynamic_fhair_suffix = "" @@ -34,7 +34,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals) slowdown = 1 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 1d126d43b2..94553b3964 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -4,7 +4,7 @@ icon_state = "chronohelmet" item_state = "chronohelmet" slowdown = 1 - armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90, fire = 100, acid = 100) + armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 90, "rad" = 90, "fire" = 100, "acid" = 100) resistance_flags = FIRE_PROOF | ACID_PROOF var/obj/item/clothing/suit/space/chronos/suit = null @@ -24,7 +24,7 @@ icon_state = "chronosuit" item_state = "chronosuit" actions_types = list(/datum/action/item_action/toggle) - armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 30, bio = 90, rad = 90, fire = 100, acid = 1000) + armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 90, "rad" = 90, "fire" = 100, "acid" = 1000) resistance_flags = FIRE_PROOF | ACID_PROOF var/list/chronosafe_items = list(/obj/item/chrono_eraser, /obj/item/gun/energy/chrono_gun) var/list/hands_nodrop = list() diff --git a/code/modules/clothing/spacesuits/flightsuit.dm b/code/modules/clothing/spacesuits/flightsuit.dm index f515dacc74..fa992d8c40 100644 --- a/code/modules/clothing/spacesuits/flightsuit.dm +++ b/code/modules/clothing/spacesuits/flightsuit.dm @@ -19,7 +19,7 @@ icon_state = FLIGHTPACK_SPRITE_BASE item_state = FLIGHTPACK_SPRITE_BASE actions_types = list(/datum/action/item_action/flightpack/toggle_flight, /datum/action/item_action/flightpack/engage_boosters, /datum/action/item_action/flightpack/toggle_stabilizers, /datum/action/item_action/flightpack/change_power, /datum/action/item_action/flightpack/toggle_airbrake) - armor = list(melee = 20, bullet = 20, laser = 20, energy = 10, bomb = 30, bio = 100, rad = 75, fire = 100, acid = 75) + armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 10, "bomb" = 30, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75) w_class = WEIGHT_CLASS_BULKY slot_flags = SLOT_BACK resistance_flags = FIRE_PROOF @@ -758,7 +758,7 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/flightsuit jetpack = null actions_types = list(/datum/action/item_action/flightsuit/toggle_helmet, /datum/action/item_action/flightsuit/toggle_boots, /datum/action/item_action/flightsuit/toggle_flightpack, /datum/action/item_action/flightsuit/lock_suit) - armor = list(melee = 20, bullet = 20, laser = 20, energy = 10, bomb = 30, bio = 100, rad = 75, fire = 100, acid = 100) + armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 10, "bomb" = 30, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 100) max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT var/locked_strip_delay = 80 var/obj/item/device/flightpack/pack = null @@ -1078,7 +1078,7 @@ resistance_flags = FIRE_PROOF | ACID_PROOF brightness_on = 7 light_color = "#30ffff" - armor = list(melee = 20, bullet = 20, laser = 20, energy = 10, bomb = 30, bio = 100, rad = 75, fire = 100, acid = 100) + armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 10, "bomb" = 30, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 100) max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT var/list/datahuds = list(DATA_HUD_SECURITY_ADVANCED, DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC_BASIC) var/zoom_range = 12 diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index ae3fb11fbe..0e0008e2ea 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -5,7 +5,7 @@ icon_state = "hardsuit0-engineering" item_state = "eng_helm" max_integrity = 300 - armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 50, acid = 75) + armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75) var/basestate = "hardsuit" var/brightness_on = 4 //luminosity when on var/on = FALSE @@ -96,7 +96,7 @@ icon_state = "hardsuit-engineering" item_state = "eng_hardsuit" max_integrity = 300 - armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 50, acid = 75) + armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75) allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/device/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser) siemens_coefficient = 0 var/obj/item/clothing/head/helmet/space/hardsuit/helmet @@ -166,7 +166,7 @@ desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." icon_state = "hardsuit0-engineering" item_state = "eng_helm" - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 100, acid = 75) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75) item_color = "engineering" resistance_flags = FIRE_PROOF @@ -175,7 +175,7 @@ desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding." icon_state = "hardsuit-engineering" item_state = "eng_hardsuit" - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 100, acid = 75) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine resistance_flags = FIRE_PROOF @@ -186,7 +186,7 @@ icon_state = "hardsuit0-atmospherics" item_state = "atmo_helm" item_color = "atmospherics" - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 25, fire = 100, acid = 75) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 25, "fire" = 100, "acid" = 75) heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT @@ -195,7 +195,7 @@ desc = "A special suit that protects against hazardous, low pressure environments. Has thermal shielding." icon_state = "hardsuit-atmospherics" item_state = "atmo_hardsuit" - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 25, fire = 100, acid = 75) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 25, "fire" = 100, "acid" = 75) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos @@ -208,7 +208,7 @@ icon_state = "hardsuit0-white" item_state = "ce_helm" item_color = "white" - armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 90, fire = 100, acid = 90) + armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 90, "fire" = 100, "acid" = 90) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT @@ -217,7 +217,7 @@ name = "advanced hardsuit" desc = "An advanced suit that protects against hazardous, low pressure environments. Shines with a high polish." item_state = "ce_hardsuit" - armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 90, fire = 100, acid = 90) + armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 90, "fire" = 100, "acid" = 90) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite @@ -233,7 +233,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF heat_protection = HEAD - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 75) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75) brightness_on = 7 allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator) @@ -245,7 +245,7 @@ item_state = "mining_hardsuit" max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 75) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75) allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -258,7 +258,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_helm" item_color = "syndi" - armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50, fire = 50, acid = 90) + armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) on = TRUE var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null actions_types = list(/datum/action/item_action/toggle_helmet_mode) @@ -336,7 +336,7 @@ item_state = "syndie_hardsuit" item_color = "syndi" w_class = WEIGHT_CLASS_NORMAL - armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50, fire = 50, acid = 90) + armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi jetpack = /obj/item/tank/jetpack/suit @@ -348,7 +348,7 @@ alt_desc = "An elite version of the syndicate helmet, with improved armour and fireproofing. It is in combat mode. Property of Gorlex Marauders." icon_state = "hardsuit0-syndielite" item_color = "syndielite" - armor = list(melee = 60, bullet = 60, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70, fire = 100, acid = 100) + armor = list("melee" = 60, "bullet" = 60, "laser" = 50, "energy" = 25, "bomb" = 55, "bio" = 100, "rad" = 70, "fire" = 100, "acid" = 100) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT visor_flags_inv = 0 @@ -364,7 +364,7 @@ icon_state = "hardsuit0-syndielite" item_color = "syndielite" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite - armor = list(melee = 60, bullet = 60, laser = 50, energy = 25, bomb = 55, bio = 100, rad = 70, fire = 100, acid = 100) + armor = list("melee" = 60, "bullet" = 60, "laser" = 50, "energy" = 25, "bomb" = 55, "bio" = 100, "rad" = 70, "fire" = 100, "acid" = 100) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -399,7 +399,7 @@ item_state = "wiz_helm" item_color = "wiz" resistance_flags = FIRE_PROOF | ACID_PROOF //No longer shall our kind be foiled by lone chemists with spray bottles! - armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 35, bio = 100, rad = 50, fire = 100, acid = 100) + armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT @@ -410,7 +410,7 @@ item_state = "wiz_hardsuit" w_class = WEIGHT_CLASS_NORMAL resistance_flags = FIRE_PROOF | ACID_PROOF - armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 35, bio = 100, rad = 50, fire = 100, acid = 100) + armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) allowed = list(/obj/item/teleportation_scroll, /obj/item/tank/internals) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT @@ -425,7 +425,7 @@ item_state = "medical_helm" item_color = "medical" flash_protect = 0 - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 60, fire = 60, acid = 75) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) scan_reagents = 1 /obj/item/clothing/suit/space/hardsuit/medical @@ -434,7 +434,7 @@ desc = "A special suit that protects against hazardous, low pressure environments. Built with lightweight materials for easier movement." item_state = "medical_hardsuit" allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/device/healthanalyzer, /obj/item/stack/medical) - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 60, fire = 60, acid = 75) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical //Research Director hardsuit @@ -445,7 +445,7 @@ item_color = "rd" resistance_flags = ACID_PROOF | FIRE_PROOF max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 100, bio = 100, rad = 60, fire = 60, acid = 80) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80) var/obj/machinery/doppler_array/integrated/bomb_radar scan_reagents = 1 actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_research_scanner) @@ -475,7 +475,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT //Same as an emergency firesuit. Not ideal for extended exposure. allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/gun/energy/wormhole_projector, /obj/item/hand_tele, /obj/item/device/aicard) - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 100, bio = 100, rad = 60, fire = 60, acid = 80) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/rd @@ -487,7 +487,7 @@ icon_state = "hardsuit0-sec" item_state = "sec_helm" item_color = "sec" - armor = list(melee = 35, bullet = 15, laser = 30,energy = 10, bomb = 10, bio = 100, rad = 50, fire = 75, acid = 75) + armor = list("melee" = 35, "bullet" = 15, "laser" = 30,"energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) /obj/item/clothing/suit/space/hardsuit/security @@ -495,7 +495,7 @@ name = "security hardsuit" desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor." item_state = "sec_hardsuit" - armor = list(melee = 35, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50, fire = 75, acid = 75) + armor = list("melee" = 35, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security /obj/item/clothing/suit/space/hardsuit/security/Initialize() @@ -508,14 +508,14 @@ desc = "A special bulky helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor." icon_state = "hardsuit0-hos" item_color = "hos" - armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50, fire = 95, acid = 95) + armor = list("melee" = 45, "bullet" = 25, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 95, "acid" = 95) /obj/item/clothing/suit/space/hardsuit/security/hos icon_state = "hardsuit-hos" name = "head of security's hardsuit" desc = "A special bulky suit that protects against hazardous, low pressure environments. Has an additional layer of armor." - armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50, fire = 95, acid = 95) + armor = list("melee" = 45, "bullet" = 25, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 95, "acid" = 95) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos jetpack = /obj/item/tank/jetpack/suit @@ -525,7 +525,7 @@ icon_state = "capspace" item_state = "capspacehelmet" desc = "A tactical SWAT helmet MK.II boasting better protection and a horrible fashion sense." - armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100) + armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 25, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) resistance_flags = FIRE_PROOF | ACID_PROOF flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR //we want to see the mask heat_protection = HEAD @@ -540,7 +540,7 @@ desc = "A MK.II SWAT suit with streamlined joints and armor made out of superior materials, insulated against intense heat. The most advanced tactical armor available Usually reserved for heavy hitter corporate security, this one has a regal finish in Nanotrasen company colors. Better not let the assistants get a hold of it." icon_state = "caparmor" item_state = "capspacesuit" - armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100) + armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 25, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) resistance_flags = FIRE_PROOF | ACID_PROOF heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT //this needed to be added a long fucking time ago @@ -556,7 +556,7 @@ desc = "A special helmet designed for work in a hazardous, low-humor environment. Has radiation shielding." icon_state = "hardsuit0-clown" item_state = "hardsuit0-clown" - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 60, acid = 30) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 30) item_color = "clown" /obj/item/clothing/suit/space/hardsuit/clown @@ -564,7 +564,7 @@ desc = "A special suit that protects against hazardous, low humor environments. Has radiation shielding. Only a true clown can wear it." icon_state = "hardsuit-clown" item_state = "clown_hardsuit" - armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75, fire = 60, acid = 30) + armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 30) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/clown /obj/item/clothing/suit/space/hardsuit/clown/mob_can_equip(mob/M, slot) @@ -615,7 +615,7 @@ icon_state = "hardsuit-hos" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos allowed = null - armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50, fire = 100, acid = 100) + armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) resistance_flags = FIRE_PROOF | ACID_PROOF var/current_charges = 3 var/max_charges = 3 //How many charges total the shielding has @@ -682,7 +682,7 @@ item_color = "ert_medical" flags_1 = STOPSPRESSUREDMAGE_1 | THICKMATERIAL_1 | NODROP_1 //Dont want people changing into the other teams gear helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf - armor = list(melee = 0, bullet = 30, laser = 30, energy = 30, bomb = 50, bio = 100, rad = 100, fire = 95, acid = 95) + armor = list("melee" = 0, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 95) slowdown = 0 max_charges = 5 @@ -710,7 +710,7 @@ icon_state = "hardsuit0-ert_medical" item_state = "hardsuit0-ert_medical" item_color = "ert_medical" - armor = list(melee = 0, bullet = 30, laser = 30, energy = 30, bomb = 50, bio = 100, rad = 100, fire = 95, acid = 95) + armor = list("melee" = 0, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 95) /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red @@ -737,7 +737,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_hardsuit" item_color = "syndi" - armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50, fire = 100, acid = 100) + armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi slowdown = 0 @@ -753,7 +753,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_helm" item_color = "syndi" - armor = list(melee = 40, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 50, fire = 100, acid = 100) + armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) ///SWAT version /obj/item/clothing/suit/space/hardsuit/shielded/swat @@ -765,7 +765,7 @@ max_charges = 4 current_charges = 4 recharge_delay = 15 - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/swat @@ -777,7 +777,7 @@ icon_state = "deathsquad" item_state = "deathsquad" item_color = "syndi" - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT actions_types = list() diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index e88b33e993..79c208f8c2 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -20,7 +20,7 @@ Contains: desc = "An advanced tactical space helmet." icon_state = "deathsquad" item_state = "deathsquad" - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -35,7 +35,7 @@ Contains: icon_state = "deathsquad" item_state = "swat_suit" allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -49,7 +49,7 @@ Contains: icon_state = "heavy" item_state = "swat_suit" allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) - armor = list(melee = 40, bullet = 30, laser = 30,energy = 30, bomb = 50, bio = 90, rad = 20, fire = 100, acid = 100) + armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 100, "acid" = 100) strip_delay = 120 resistance_flags = FIRE_PROOF | ACID_PROOF @@ -61,7 +61,7 @@ Contains: dynamic_fhair_suffix = "+generic" flags_1 = STOPSPRESSUREDMAGE_1 flags_inv = 0 - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -76,7 +76,7 @@ Contains: flags_inv = 0 w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -135,7 +135,7 @@ Contains: desc = "Yarr." icon_state = "pirate" item_state = "pirate" - armor = list(melee = 30, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 60, acid = 75) + armor = list("melee" = 30, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 60, "acid" = 75) flags_1 = STOPSPRESSUREDMAGE_1 flags_inv = HIDEHAIR strip_delay = 40 @@ -156,7 +156,7 @@ Contains: flags_inv = 0 allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/transforming/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum) slowdown = 0 - armor = list(melee = 30, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 60, acid = 75) + armor = list("melee" = 30, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 60, "acid" = 75) strip_delay = 40 equip_delay_other = 20 @@ -167,7 +167,7 @@ Contains: icon_state = "hardsuit0-ert_commander" item_state = "hardsuit0-ert_commander" item_color = "ert_commander" - armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100, fire = 80, acid = 80) + armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80) strip_delay = 130 flags_1 = STOPSPRESSUREDMAGE_1 | THICKMATERIAL_1 | NODROP_1 brightness_on = 7 @@ -179,7 +179,7 @@ Contains: item_state = "ert_command" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100, fire = 80, acid = 80) + armor = list("melee" = 65, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80) slowdown = 0 strip_delay = 130 @@ -228,7 +228,7 @@ Contains: icon_state = "space" item_state = "s_suit" desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies." - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20, fire = 50, acid = 65) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 65) /obj/item/clothing/head/helmet/space/eva name = "EVA helmet" @@ -236,14 +236,14 @@ Contains: item_state = "space" desc = "A lightweight space helmet with the basic ability to protect the wearer from the vacuum of space during emergencies." flash_protect = 0 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20, fire = 50, acid = 65) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 65) /obj/item/clothing/head/helmet/space/freedom name = "eagle helmet" desc = "An advanced, space-proof helmet. It appears to be modeled after an old-world eagle." icon_state = "griffinhat" item_state = "griffinhat" - armor = list(melee = 20, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100, fire = 80, acid = 80) + armor = list("melee" = 20, "bullet" = 40, "laser" = 30, "energy" = 25, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT resistance_flags = ACID_PROOF | FIRE_PROOF @@ -254,7 +254,7 @@ Contains: icon_state = "freedom" item_state = "freedom" allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list(melee = 20, bullet = 40, laser = 30,energy = 25, bomb = 100, bio = 100, rad = 100, fire = 80, acid = 80) + armor = list("melee" = 20, "bullet" = 40, "laser" = 30,"energy" = 25, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 80) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT resistance_flags = ACID_PROOF | FIRE_PROOF @@ -266,7 +266,7 @@ Contains: desc = "Spaceworthy and it looks like a space carp's head, smells like one too." icon_state = "carp_helm" item_state = "syndicate" - armor = list(melee = -20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 75, fire = 60, acid = 75) //As whimpy as a space carp + armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 75) //As whimpy as a space carp brightness_on = 0 //luminosity when on actions_types = list() flags_1 = STOPSPRESSUREDMAGE_1 | THICKMATERIAL_1 | NODROP_1 @@ -278,7 +278,7 @@ Contains: icon_state = "carp_suit" item_state = "space_suit_syndicate" slowdown = 0 //Space carp magic, never stop believing - armor = list(melee = -20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 75, fire = 60, acid = 75) //As whimpy whimpy whoo + armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 75) //As whimpy whimpy whoo allowed = list(/obj/item/tank/internals, /obj/item/gun/ballistic/automatic/speargun) //I'm giving you a hint here helmettype = /obj/item/clothing/head/helmet/space/hardsuit/carp @@ -335,7 +335,7 @@ Contains: desc = "A bulky, air-tight helmet meant to protect the user during emergency situations. It doesn't look very durable." icon_state = "syndicate-helm-orange" item_state = "syndicate-helm-orange" - armor = list(melee = 5, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10, fire = 0, acid = 0) + armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 0, "acid" = 0) strip_delay = 65 /obj/item/clothing/suit/space/fragile @@ -345,7 +345,7 @@ Contains: icon_state = "syndicate-orange" item_state = "syndicate-orange" slowdown = 2 - armor = list(melee = 5, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10, fire = 0, acid = 0) + armor = list("melee" = 5, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 0, "acid" = 0) strip_delay = 65 /obj/item/clothing/suit/space/fragile/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index a56afb94ae..d8c3b55048 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -5,7 +5,7 @@ name = "EVA plasma envirosuit" desc = "A special plasma containment suit designed to be space-worthy, as well as worn over other clothing. Like its smaller counterpart, it can automatically extinguish the wearer in a crisis, and holds twice as many charges." allowed = list(/obj/item/gun, /obj/item/ammo_casing, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank) - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0, fire = 100, acid = 75) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75) resistance_flags = FIRE_PROOF icon_state = "plasmaman_suit" item_state = "plasmaman_suit" @@ -41,7 +41,7 @@ icon_state = "plasmaman-helm" item_state = "plasmaman-helm" strip_delay = 80 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0, fire = 100, acid = 75) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75) resistance_flags = FIRE_PROOF var/brightness_on = 4 //luminosity when the light is on var/on = FALSE diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index 41d40eddf8..6d42b2d78f 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -4,7 +4,7 @@ icon_state = "syndicate" item_state = "syndicate" desc = "Has a tag on it: Totally not property of an enemy corporation, honest!" - armor = list(melee = 40, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 80, acid = 85) + armor = list("melee" = 40, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 80, "acid" = 85) /obj/item/clothing/suit/space/syndicate name = "red space suit" @@ -13,7 +13,7 @@ desc = "Has a tag on it: Totally not property of an enemy corporation, honest!" w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) - armor = list(melee = 40, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 80, acid = 85) + armor = list("melee" = 40, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 80, "acid" = 85) //Green syndicate space suit diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index 43b30b383e..1cf1d4640d 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -3,7 +3,7 @@ name = "suit" var/fire_resist = T0C+100 allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) slot_flags = SLOT_OCLOTHING var/blood_overlay_type = "suit" var/togglename = null diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 3e044108fb..f3ce410933 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -9,7 +9,7 @@ equip_delay_other = 40 max_integrity = 250 resistance_flags = NONE - armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) /obj/item/clothing/suit/armor/Initialize() . = ..() @@ -46,7 +46,7 @@ icon_state = "hos" item_state = "greatcoat" body_parts_covered = CHEST|GROIN|ARMS|LEGS - armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 70, acid = 90) + armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90) cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS strip_delay = 80 @@ -92,7 +92,7 @@ icon_state = "capcarapace" item_state = "armor" body_parts_covered = CHEST|GROIN - armor = list(melee = 50, bullet = 40, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 100, acid = 90) + armor = list("melee" = 50, "bullet" = 40, "laser" = 50, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90) dog_fashion = null resistance_flags = FIRE_PROOF @@ -115,7 +115,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) + armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) strip_delay = 80 equip_delay_other = 60 @@ -125,7 +125,7 @@ icon_state = "bonearmor" item_state = "bonearmor" blood_overlay_type = "armor" - armor = list(melee = 35, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 35, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS /obj/item/clothing/suit/armor/bulletproof @@ -134,7 +134,7 @@ icon_state = "bulletproof" item_state = "armor" blood_overlay_type = "armor" - armor = list(melee = 15, bullet = 60, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 15, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) strip_delay = 70 equip_delay_other = 50 @@ -144,7 +144,7 @@ icon_state = "armor_reflec" item_state = "armor_reflec" blood_overlay_type = "armor" - armor = list(melee = 10, bullet = 10, laser = 60, energy = 50, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 10, "bullet" = 10, "laser" = 60, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/hit_reflect_chance = 40 @@ -175,7 +175,7 @@ icon_state = "reactiveoff" item_state = "reactiveoff" blood_overlay_type = "armor" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) actions_types = list(/datum/action/item_action/toggle) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF hit_reaction_chance = 50 @@ -361,7 +361,7 @@ min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 90, acid = 90) + armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90) /obj/item/clothing/suit/armor/heavy name = "heavy armor" @@ -374,7 +374,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 3 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 90, acid = 90) + armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90) /obj/item/clothing/suit/armor/tdome body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -382,7 +382,7 @@ flags_1 = THICKMATERIAL_1 cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100, fire = 90, acid = 90) + armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90) /obj/item/clothing/suit/armor/tdome/red name = "thunderdome suit" diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index bfd4415b3a..bb6a6ca070 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -5,7 +5,7 @@ desc = "A hood that protects the head and face from biological comtaminants." permeability_coefficient = 0.01 flags_1 = THICKMATERIAL_1 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 80, fire = 30, acid = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE resistance_flags = ACID_PROOF flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH @@ -22,7 +22,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 1 allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pen, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 80, fire = 30, acid = 100) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT strip_delay = 70 equip_delay_other = 70 @@ -46,11 +46,11 @@ //Security biosuit, grey with red stripe across the chest /obj/item/clothing/head/bio_hood/security - armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 100, rad = 80, fire = 30, acid = 100) + armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) icon_state = "bio_security" /obj/item/clothing/suit/bio_suit/security - armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 100, rad = 80, fire = 30, acid = 100) + armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) icon_state = "bio_security" diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 537dd86639..03f549fbe8 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -61,7 +61,7 @@ icon_state = "goliath_cloak" desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits." allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival) - armor = list(melee = 35, bullet = 10, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 60, acid = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot + armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath body_parts_covered = CHEST|GROIN|ARMS @@ -69,7 +69,7 @@ name = "goliath cloak hood" icon_state = "golhood" desc = "A protective & concealing hood." - armor = list(melee = 35, bullet = 10, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 60, acid = 60) + armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR /obj/item/clothing/suit/hooded/cloak/drake @@ -77,7 +77,7 @@ icon_state = "dragon" desc = "A suit of armour fashioned from the remains of an ash drake." allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/spear) - armor = list(melee = 70, bullet = 30, laser = 50, energy = 40, bomb = 70, bio = 60, rad = 50, fire = 100, acid = 100) + armor = list("melee" = 70, "bullet" = 30, "laser" = 50, "energy" = 40, "bomb" = 70, "bio" = 60, "rad" = 50, "fire" = 100, "acid" = 100) hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -88,7 +88,7 @@ name = "drake helm" icon_state = "dragon" desc = "The skull of a dragon." - armor = list(melee = 70, bullet = 30, laser = 50, energy = 40, bomb = 70, bio = 60, rad = 50, fire = 100, acid = 100) + armor = list("melee" = 70, "bullet" = 30, "laser" = 50, "energy" = 40, "bomb" = 70, "bio" = 60, "rad" = 50, "fire" = 100, "acid" = 100) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index e6331eb8b8..08338d1e7c 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -94,7 +94,7 @@ item_state = "det_suit" blood_overlay_type = "coat" body_parts_covered = CHEST|GROIN|LEGS|ARMS - armor = list(melee = 25, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 45) + armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS @@ -187,6 +187,6 @@ blood_overlay_type = "coat" body_parts_covered = CHEST|ARMS allowed = list(/obj/item/tank/internals, /obj/item/melee/curator_whip) - armor = list(melee = 25, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 45) + armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) cold_protection = CHEST|ARMS heat_protection = CHEST|ARMS diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 7c7599af3d..b89d0c464b 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -6,7 +6,7 @@ blood_overlay_type = "coat" body_parts_covered = CHEST|ARMS allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/device/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50) togglename = "buttons" species_exception = list(/datum/species/golem) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 5a2e5ade3c..154f1bffdd 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -381,7 +381,7 @@ desc = "A thick jacket with a rubbery, water-resistant shell." icon_state = "pufferjacket" item_state = "hostrench" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/suit/jacket/puffer/vest name = "puffer vest" @@ -390,7 +390,7 @@ item_state = "armor" body_parts_covered = CHEST|GROIN cold_protection = CHEST|GROIN - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 30, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/suit/jacket/miljacket name = "military jacket" @@ -469,7 +469,7 @@ body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) /obj/item/clothing/head/hooded/winterhood @@ -485,7 +485,7 @@ name = "captain's winter coat" icon_state = "coatcaptain" item_state = "coatcaptain" - armor = list(melee = 25, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 50) + armor = list("melee" = 25, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) hoodtype = /obj/item/clothing/head/hooded/winterhood/captain /obj/item/clothing/suit/hooded/wintercoat/captain/Initialize() @@ -499,7 +499,7 @@ name = "security winter coat" icon_state = "coatsecurity" item_state = "coatsecurity" - armor = list(melee = 25, bullet = 15, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 0, acid = 45) + armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/security /obj/item/clothing/suit/hooded/wintercoat/security/Initialize() @@ -514,7 +514,7 @@ icon_state = "coatmedical" item_state = "coatmedical" allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 0, acid = 45) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/medical /obj/item/clothing/head/hooded/winterhood/medical @@ -525,7 +525,7 @@ icon_state = "coatscience" item_state = "coatscience" allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/science /obj/item/clothing/head/hooded/winterhood/science @@ -535,7 +535,7 @@ name = "engineering winter coat" icon_state = "coatengineer" item_state = "coatengineer" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20, fire = 30, acid = 45) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/device/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering @@ -575,7 +575,7 @@ icon_state = "coatminer" item_state = "coatminer" allowed = list(/obj/item/pickaxe, /obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) - armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/miner /obj/item/clothing/head/hooded/winterhood/miner diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 22b5ee421b..9fce4145b7 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -57,7 +57,7 @@ desc = "Use in case of bomb." icon_state = "bombsuit" flags_1 = THICKMATERIAL_1 - armor = list(melee = 20, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0, fire = 80, acid = 50) + armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) flags_inv = HIDEFACE|HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR dynamic_hair_suffix = "" dynamic_fhair_suffix = "" @@ -82,7 +82,7 @@ flags_1 = THICKMATERIAL_1 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 2 - armor = list(melee = 20, bullet = 0, laser = 20,energy = 10, bomb = 100, bio = 0, rad = 0, fire = 80, acid = 50) + armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) flags_inv = HIDEJUMPSUIT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT @@ -121,7 +121,7 @@ desc = "A hood with radiation protective properties. The label reads, 'Made with lead. Please do not consume insulation.'" flags_1 = THICKMATERIAL_1 flags_inv = HIDEMASK|HIDEEARS|HIDEFACE|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100, fire = 30, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30) strip_delay = 60 equip_delay_other = 60 flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH @@ -143,7 +143,7 @@ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/device/geiger_counter) slowdown = 1.5 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100, fire = 30, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30) strip_delay = 60 equip_delay_other = 60 flags_inv = HIDEJUMPSUIT diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 008ced69ea..0ac6dba14e 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -4,7 +4,7 @@ icon_state = "wizard" gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE permeability_coefficient = 0.01 - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20, fire = 100, acid = 100) + armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) strip_delay = 50 equip_delay_other = 50 resistance_flags = FIRE_PROOF | ACID_PROOF @@ -34,7 +34,7 @@ icon_state = "wizard-fake" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) resistance_flags = FLAMMABLE dog_fashion = /datum/dog_fashion/head/blue_wizard @@ -66,7 +66,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 body_parts_covered = CHEST|GROIN|ARMS|LEGS - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20, fire = 100, acid = 100) + armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) allowed = list(/obj/item/teleportation_scroll) flags_inv = HIDEJUMPSUIT strip_delay = 50 @@ -123,7 +123,7 @@ item_state = "wizrobe" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) resistance_flags = FLAMMABLE /obj/item/clothing/head/wizard/marisa/fake @@ -132,7 +132,7 @@ icon_state = "marisa" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) resistance_flags = FLAMMABLE /obj/item/clothing/suit/wizrobe/marisa/fake @@ -142,7 +142,7 @@ item_state = "marisarobe" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) resistance_flags = FLAMMABLE /obj/item/clothing/suit/wizrobe/paper @@ -194,7 +194,7 @@ min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20, fire = 100, acid = 100) + armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) slowdown = 0 resistance_flags = FIRE_PROOF | ACID_PROOF @@ -205,7 +205,7 @@ item_state = "battlemage" min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20, fire = 100, acid = 100) + armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) actions_types = null //No inbuilt light resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 62fd5b5f5a..dd290fdaa2 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -4,7 +4,7 @@ body_parts_covered = CHEST|GROIN|LEGS|ARMS permeability_coefficient = 0.9 slot_flags = SLOT_ICLOTHING - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) var/fitted = FEMALE_UNIFORM_FULL // For use in alternate clothing styles for women var/has_sensor = HAS_SENSORS // For the crew computer var/random_sensor = TRUE diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index df0783e4e7..946769ba41 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -207,7 +207,7 @@ icon_state = "plasma" item_color = "plasma" medaltype = "medal-plasma" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = -10, acid = 0) //It's made of plasma. Of course it's flammable. + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = -10, "acid" = 0) //It's made of plasma. Of course it's flammable. materials = list(MAT_PLASMA=1000) /obj/item/clothing/accessory/medal/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) @@ -318,7 +318,7 @@ desc = "A hunter's talisman, some say the old gods smile on those who wear it." icon_state = "talisman" item_color = "talisman" - armor = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 20, bio = 20, rad = 5, fire = 0, acid = 25) + armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25) /obj/item/clothing/accessory/skullcodpiece @@ -327,4 +327,4 @@ icon_state = "skull" item_color = "skull" above_suit = TRUE - armor = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 20, bio = 20, rad = 5, fire = 0, acid = 25) + armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25) diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 6d522a3706..1115d822ed 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -92,7 +92,7 @@ name = "janitor's jumpsuit" icon_state = "janitor" item_color = "janitor" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/under/lawyer desc = "Slick threads." diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index cd69aec17e..4ee0963a64 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -5,7 +5,7 @@ icon_state = "chiefengineer" item_state = "gy_suit" item_color = "chief" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10, fire = 80, acid = 40) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 80, "acid" = 40) resistance_flags = NONE /obj/item/clothing/under/rank/atmospheric_technician @@ -22,7 +22,7 @@ icon_state = "engine" item_state = "engi_suit" item_color = "engine" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10, fire = 60, acid = 20) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 60, "acid" = 20) resistance_flags = NONE /obj/item/clothing/under/rank/roboticist diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 553424de71..e506f726df 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -7,7 +7,7 @@ icon_state = "director" item_state = "lb_suit" item_color = "director" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 10, rad = 0, fire = 0, acid = 35) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 35) can_adjust = FALSE /obj/item/clothing/under/rank/research_director/alt @@ -16,7 +16,7 @@ icon_state = "rdwhimsy" item_state = "rdwhimsy" item_color = "rdwhimsy" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) can_adjust = TRUE alt_covers_chest = TRUE @@ -26,7 +26,7 @@ icon_state = "rdturtle" item_state = "p_suit" item_color = "rdturtle" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 10, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) can_adjust = TRUE alt_covers_chest = TRUE @@ -37,7 +37,7 @@ item_state = "w_suit" item_color = "toxinswhite" permeability_coefficient = 0.5 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/under/rank/chemist @@ -47,7 +47,7 @@ item_state = "w_suit" item_color = "chemistrywhite" permeability_coefficient = 0.5 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 50, acid = 65) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 65) /* * Medical @@ -59,7 +59,7 @@ item_state = "w_suit" item_color = "cmo" permeability_coefficient = 0.5 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/under/rank/geneticist desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it." @@ -68,7 +68,7 @@ item_state = "w_suit" item_color = "geneticswhite" permeability_coefficient = 0.5 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/under/rank/virologist desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it." @@ -77,7 +77,7 @@ item_state = "w_suit" item_color = "virologywhite" permeability_coefficient = 0.5 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/under/rank/nursesuit desc = "It's a jumpsuit commonly worn by nursing staff in the medical department." @@ -86,7 +86,7 @@ item_state = "w_suit" item_color = "nursesuit" permeability_coefficient = 0.5 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) fitted = NO_FEMALE_UNIFORM can_adjust = FALSE @@ -97,7 +97,7 @@ item_state = "w_suit" item_color = "medical" permeability_coefficient = 0.5 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/under/rank/medical/blue name = "medical scrubs" diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 0fdb155526..be8a113f22 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -15,7 +15,7 @@ icon_state = "rsecurity" item_state = "r_suit" item_color = "rsecurity" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 30) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) strip_delay = 50 alt_covers_chest = TRUE sensor_mode = SENSOR_COORDS @@ -35,7 +35,7 @@ icon_state = "rwarden" item_state = "r_suit" item_color = "rwarden" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 30) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) strip_delay = 50 alt_covers_chest = TRUE sensor_mode = 3 @@ -57,7 +57,7 @@ icon_state = "detective" item_state = "det" item_color = "detective" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 30, acid = 30) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) strip_delay = 50 alt_covers_chest = TRUE sensor_mode = 3 @@ -80,7 +80,7 @@ icon_state = "rhos" item_state = "r_suit" item_color = "rhos" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) strip_delay = 60 alt_covers_chest = TRUE sensor_mode = 3 diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 1fccac5c43..18ec26a9a5 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -144,7 +144,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100) + armor = list("melee" = 100, "bullet" = 100, "laser" = 100,"energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -617,7 +617,7 @@ icon_state = "plasmaman" item_state = "plasmaman" item_color = "plasmaman" - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0, fire = 95, acid = 95) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95) body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS can_adjust = FALSE strip_delay = 80 diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 0db0ea11e9..34ba1b8bb1 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -5,7 +5,7 @@ item_state = "bl_suit" item_color = "syndicate" has_sensor = NO_SENSORS - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 40) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) alt_covers_chest = TRUE /obj/item/clothing/under/syndicate/tacticool @@ -14,7 +14,7 @@ icon_state = "tactifool" item_state = "bl_suit" item_color = "tactifool" - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 40) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) /obj/item/clothing/under/syndicate/sniper name = "Tactical turtleneck suit" @@ -36,7 +36,7 @@ icon_state = "trackpants" item_color = "trackpants" can_adjust = FALSE - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) resistance_flags = NONE /obj/item/clothing/under/syndicate/combat diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm index e4069a7fad..9564d03909 100644 --- a/code/modules/clothing/under/trek.dm +++ b/code/modules/clothing/under/trek.dm @@ -19,7 +19,7 @@ icon_state = "trek_engsec" item_color = "trek_engsec" item_state = "r_suit" - armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) //more sec than eng, but w/e. + armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) //more sec than eng, but w/e. strip_delay = 50 /obj/item/clothing/under/trek/medsci diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index 8986c6a44b..ce6c167dde 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -37,7 +37,7 @@ icon_state = "xmashat" desc = "A crappy paper hat that you are REQUIRED to wear." flags_inv = 0 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) /obj/effect/landmark/xmastree name = "christmas tree spawner" diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 362342942b..510d7da94e 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -21,7 +21,7 @@ var/charge_delay = 4 var/use_cyborg_cell = TRUE max_integrity = 50 - armor = list(melee = 50, bullet = 70, laser = 70, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 0, acid = 0) + armor = list("melee" = 50, "bullet" = 70, "laser" = 70, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0) /obj/item/device/electronic_assembly/proc/check_interactivity(mob/user) return user.canUseTopic(src, BE_CLOSE) diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 7ecb0529ba..92122411e4 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -20,7 +20,7 @@ opacity = 0 resistance_flags = FLAMMABLE max_integrity = 200 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) var/state = 0 var/list/allowed_books = list(/obj/item/book, /obj/item/spellbook, /obj/item/storage/book) //Things allowed in the bookcase diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 57754cfb45..fc26fac0bc 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -10,7 +10,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT heat_protection = CHEST|GROIN|LEGS|ARMS hoodtype = /obj/item/clothing/head/hooded/explorer - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 50) + armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50) allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe) resistance_flags = FIRE_PROOF @@ -22,7 +22,7 @@ flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 50) + armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50) resistance_flags = FIRE_PROOF /obj/item/clothing/mask/gas/explorer @@ -33,7 +33,7 @@ visor_flags_inv = HIDEFACIALHAIR visor_flags_cover = MASKCOVERSMOUTH actions_types = list(/datum/action/item_action/adjust) - armor = list(melee = 10, bullet = 5, laser = 5, energy = 5, bomb = 0, bio = 50, rad = 0, fire = 20, acid = 40) + armor = list("melee" = 10, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 20, "acid" = 40) resistance_flags = FIRE_PROOF /obj/item/clothing/mask/gas/explorer/attack_self(mob/user) diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index e93e3713c3..b1a4d522de 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -72,7 +72,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( icon = 'icons/obj/lighting.dmi' icon_state = "marker" layer = BELOW_OPEN_DOOR_LAYER - armor = list(melee = 50, bullet = 75, laser = 75, energy = 75, bomb = 25, bio = 100, rad = 100, fire = 25, acid = 0) + armor = list("melee" = 50, "bullet" = 75, "laser" = 75, "energy" = 75, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 25, "acid" = 0) max_integrity = 50 anchored = TRUE light_range = 2 diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 2fd9812340..621eeb609a 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -696,7 +696,7 @@ name = "pile of bandages" desc = "It emits a strange aura, as if there was still life within it..." max_integrity = 50 - armor = list(melee = 90, bullet = 90, laser = 25, energy = 80, bomb = 50, bio = 100, fire = -50, acid = -50) + armor = list("melee" = 90, "bullet" = 90, "laser" = 25, "energy" = 80, "bomb" = 50, "bio" = 100, "fire" = -50, "acid" = -50) icon = 'icons/obj/items_and_weapons.dmi' icon_state = "pile_bandages" resistance_flags = FLAMMABLE diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index e1cc2f3cb6..2d50d4a186 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -31,7 +31,7 @@ integrity_failure = 50 max_integrity = 100 - armor = list(melee = 0, bullet = 20, laser = 20, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0) // Important hardware (must be installed for computer to work) diff --git a/code/modules/ninja/suit/head.dm b/code/modules/ninja/suit/head.dm index 7ada5de3ea..a62f871f56 100644 --- a/code/modules/ninja/suit/head.dm +++ b/code/modules/ninja/suit/head.dm @@ -5,7 +5,7 @@ name = "ninja hood" icon_state = "s-ninja" item_state = "s-ninja_mask" - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25, fire = 100, acid = 100) + armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 25, "fire" = 100, "acid" = 100) strip_delay = 12 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF blockTracking = 1//Roughly the only unique thing about this helmet. diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm index 4cc0bc86c9..df8caf0291 100644 --- a/code/modules/ninja/suit/shoes.dm +++ b/code/modules/ninja/suit/shoes.dm @@ -7,7 +7,7 @@ permeability_coefficient = 0.01 flags_1 = NOSLIP_1 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 100, acid = 100) + armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100) strip_delay = 120 cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index 4e7ad477e2..ff539b8c29 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -19,7 +19,7 @@ Contents: allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/stock_parts/cell) slowdown = 1 resistance_flags = LAVA_PROOF | ACID_PROOF - armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 100, acid = 100) + armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100) strip_delay = 12 actions_types = list(/datum/action/item_action/initialize_ninja_suit, /datum/action/item_action/ninjasmoke, /datum/action/item_action/ninjaboost, /datum/action/item_action/ninjapulse, /datum/action/item_action/ninjastar, /datum/action/item_action/ninjanet, /datum/action/item_action/ninja_sword_recall, /datum/action/item_action/ninja_stealth, /datum/action/item_action/toggle_glove) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index c68b2bedb0..fcc0d3a7b3 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -116,7 +116,7 @@ if (!req_access) req_access = list(ACCESS_ENGINE_EQUIP) if (!armor) - armor = list(melee = 20, bullet = 20, laser = 10, energy = 100, bomb = 30, bio = 100, rad = 100, fire = 90, acid = 50) + armor = list("melee" = 20, "bullet" = 20, "laser" = 10, "energy" = 100, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) ..() GLOB.apcs_list += src diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 022b1f7d5b..719aa082ca 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -43,7 +43,7 @@ anchored = TRUE layer = WALL_OBJ_LAYER max_integrity = 200 - armor = list(melee = 50, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 50) + armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) var/stage = 1 var/fixture_type = "tube" diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 4f39d34954..4315cf70b5 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -28,7 +28,7 @@ field_generator power level display use_power = NO_POWER_USE max_integrity = 500 //100% immune to lasers and energy projectiles since it absorbs their energy. - armor = list(melee = 25, bullet = 10, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) + armor = list("melee" = 25, "bullet" = 10, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) var/const/num_power_levels = 6 // Total number of power level icon has var/power_level = 0 var/active = FG_OFFLINE diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index b7808abc1f..9f7c3ba05a 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -27,7 +27,7 @@ anchored = FALSE density = TRUE max_integrity = 500 - armor = list(melee = 30, bullet = 20, laser = 20, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 90, acid = 80) + armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 80) var/obj/machinery/particle_accelerator/control_box/master = null var/construction_state = PA_CONSTRUCTION_UNSECURED diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 9d26b65151..f8a01b16f0 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -230,7 +230,7 @@ flags_inv = HIDEHAIR slot_flags = SLOT_HEAD resistance_flags = NONE - armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 75, acid = 50) //Weak melee protection, because you can wear it on your head + armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 50) //Weak melee protection, because you can wear it on your head slot_equipment_priority = list( \ slot_back, slot_wear_id,\ slot_w_uniform, slot_wear_suit,\ diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 71235045f3..5b9212339a 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -6,7 +6,7 @@ icon = 'icons/obj/atmospherics/pipes/disposal.dmi' anchored = TRUE density = TRUE - armor = list(melee = 25, bullet = 10, laser = 10, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 90, acid = 30) + armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30) max_integrity = 200 resistance_flags = FIRE_PROOF interact_open = TRUE From 482c21b296e77165a1abbdf87498077b9cf0d69c Mon Sep 17 00:00:00 2001 From: Chayse Ramsay Date: Fri, 16 Feb 2018 12:44:23 +0000 Subject: [PATCH 02/60] Slimepeople Rework --- .../carbon/human/species_types/jellypeople.dm | 124 +++++++++++++++++- config/game_options.txt | 2 +- icons/mob/human_parts_greyscale.dmi | Bin 56853 -> 61257 bytes 3 files changed, 119 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 0299d64621..db27cf81b8 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -4,11 +4,12 @@ id = "jelly" default_color = "00FF90" say_mod = "chirps" - species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,NOBLOOD,VIRUSIMMUNE,TOXINLOVER) + species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,TOXINLOVER) meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime exotic_blood = "slimejelly" damage_overlay_type = "" var/datum/action/innate/regenerate_limbs/regenerate_limbs + var/datum/action/innate/slime_change/slime_change liked_food = MEAT coldmod = 6 // = 3x cold damage heatmod = 0.5 // = 1/4x heat damage @@ -28,6 +29,8 @@ if(ishuman(C)) regenerate_limbs = new regenerate_limbs.Grant(C) + slime_change = new + slime_change.Grant(C) C.faction |= "slime" /datum/species/jelly/spec_life(mob/living/carbon/human/H) @@ -103,15 +106,123 @@ return to_chat(H, "...but there is not enough of you to go around! You must attain more mass to heal!") +/datum/action/innate/slime_change + name = "Alter Form" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimesplit" //placeholder + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + +/datum/action/innate/slime_change/Activate() + var/mob/living/carbon/human/H = owner + if(!isjellyperson(H)) + return + else + H.visible_message("[owner] gains a look of \ + concentration while standing perfectly still.\ + Their body seems to shift and starts getting more goo-like.", + "You focus intently on altering your body while \ + standing perfectly still...") + change_form() + +/datum/action/innate/slime_change/proc/change_form() + var/mob/living/carbon/human/H = owner + var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Ears", "Taur body", "Cancel") + if(select_alteration == "Hair Style") + if(H.gender == MALE) + var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list + if(new_style) + H.facial_hair_style = new_style + else + H.facial_hair_style = "Shaved" + //handle normal hair + var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list + if(new_style) + H.hair_style = new_style + H.update_hair() + else if (select_alteration == "Genitals") + var/list/organs = list() + var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel") + switch(operation) + if("add sexual organ") + var/new_organ = input("Select sexual organ:", "Organ Manipulation") in list("Penis", "Testicles", "Breasts", "Vagina", "Womb", "Cancel") + if(new_organ == "Penis") + H.give_penis() + else if(new_organ == "Testicles") + H.give_balls() + else if(new_organ == "Breasts") + H.give_breasts() + else if(new_organ == "Vagina") + H.give_vagina() + else if(new_organ == "Womb") + H.give_womb() + else + return + if("remove sexual organ") + for(var/obj/item/organ/genital/X in H.internal_organs) + var/obj/item/organ/I = X + organs["[I.name] ([I.type])"] = I + var/obj/item/organ = input("Select sexual organ:", "Organ Manipulation", null) in organs + organ = organs[organ] + if(!organ) + return + var/obj/item/organ/genital/O + if(isorgan(organ)) + O = organ + O.Remove(H) + organ.forceMove(get_turf(H)) + qdel(organ) + H.update_body() + else if (select_alteration == "Ears") + var/new_ears + new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in GLOB.mam_ears_list + if(new_ears) + H.dna.features["mam_ears"] = new_ears + H.update_body() + else if (select_alteration == "Tail") + var/new_tail + new_tail = input(owner, "Choose your character's tail:", "Tail Alteration") as null|anything in GLOB.mam_tails_list + if(new_tail) + H.dna.features["mam_tail"] = new_tail + if(new_tail != "None") + H.dna.features["taur"] = "None" + H.update_body() + else if (select_alteration == "Taur body") + var/new_taur + new_taur = input(owner, "Choose your character's tauric body:", "Taur Body Alteration") as null|anything in GLOB.taur_list + if(new_taur) + H.dna.features["taur"] = new_taur + if(new_taur != "None") + H.dna.features["mam_tail"] = "None" + H.dna.features["xenotail"] = "None" + H.update_body() + else + return + ////////////////////////////////////////////////////////SLIMEPEOPLE/////////////////////////////////////////////////////////////////// +/datum/species/jelly/roundstartslime + name = "Slimeperson" + id = "slimeperson" + default_color = "00FFFF" + species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD,TOXINLOVER) + mutant_bodyparts = list("mam_tail", "mam_ears", "taur") + default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None") + say_mod = "says" + hair_color = "mutcolor" + hair_alpha = 180 + liked_food = MEAT + coldmod = 12 + //Slime people are able to split like slimes, retaining a single mind that can swap between bodies at will, even after death. /datum/species/jelly/slime - name = "Slimeperson" + name = "Xenobiological Slimeperson" id = "slime" default_color = "00FFFF" species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD,TOXINLOVER) + mutant_bodyparts = list("mam_tail", "mam_ears", "taur") + default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None") say_mod = "says" hair_color = "mutcolor" hair_alpha = 150 @@ -121,23 +232,23 @@ var/datum/action/innate/swap_body/swap_body /datum/species/jelly/slime/on_species_loss(mob/living/carbon/C) -/* if(slime_split) + if(slime_split) slime_split.Remove(C) if(swap_body) swap_body.Remove(C) bodies -= C // This means that the other bodies maintain a link // so if someone mindswapped into them, they'd still be shared. - bodies = null */ + bodies = null C.blood_volume = min(C.blood_volume, BLOOD_VOLUME_NORMAL) ..() /datum/species/jelly/slime/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() if(ishuman(C)) - /* slime_split = new + slime_split = new slime_split.Grant(C) swap_body = new - swap_body.Grant(C)*/ + swap_body.Grant(C) if(!bodies || !bodies.len) bodies = list(C) @@ -718,3 +829,4 @@ else to_chat(H, "You can't seem to link [target]'s mind...") to_chat(target, "The foreign presence leaves your mind.") + diff --git a/config/game_options.txt b/config/game_options.txt index a3c6399013..bd39305cf7 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -405,7 +405,7 @@ ROUNDSTART_RACES plasmaman ## Races that are straight upgrades. If these are on expect powergamers to always pick them #ROUNDSTART_RACES skeleton #ROUNDSTART_RACES zombie -#ROUNDSTART_RACES slime +ROUNDSTART_RACES slimeperson #ROUNDSTART_RACES pod #ROUNDSTART_RACES military_synth #ROUNDSTART_RACES agent diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index c65a2149328567735b52297ef7210bebf0324459..63596ad09461e9e46b7d19b24283168a339d5405 100644 GIT binary patch literal 61257 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 boFl0TWG;;@$}@m#N2y%b#1vn(y#N0ID=<$6 literal 56853 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

d#Jdtjo2Y{)Y?j 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℘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 D(6>tb From 28e7e980d721696331c2e32e318871693f9c8a1b Mon Sep 17 00:00:00 2001 From: Chayse Ramsay Date: Fri, 16 Feb 2018 12:46:56 +0000 Subject: [PATCH 03/60] Correcting a species_traits flag issue --- .../mob/living/carbon/human/species_types/jellypeople.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index db27cf81b8..1dac05cbae 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -4,7 +4,7 @@ id = "jelly" default_color = "00FF90" say_mod = "chirps" - species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,TOXINLOVER) + species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,NOBLOOD,VIRUSIMMUNE,FACEHAIR,TOXINLOVER) meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime exotic_blood = "slimejelly" damage_overlay_type = "" From 665a7f0a4ba56c7bfb09b92f992b2adaf0f07c81 Mon Sep 17 00:00:00 2001 From: Chayse Ramsay Date: Fri, 16 Feb 2018 12:47:49 +0000 Subject: [PATCH 04/60] Correcting the roundstart slimeperson heat and burn mod --- .../mob/living/carbon/human/species_types/jellypeople.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 1dac05cbae..5bf2f884e4 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -213,6 +213,8 @@ hair_alpha = 180 liked_food = MEAT coldmod = 12 + heatmod = 1 + burnmod = 1 //Slime people are able to split like slimes, retaining a single mind that can swap between bodies at will, even after death. From f66931142c968ab4a29ad092b044d95661131617 Mon Sep 17 00:00:00 2001 From: Chayse Ramsay Date: Fri, 16 Feb 2018 12:49:47 +0000 Subject: [PATCH 05/60] More corrections --- .../mob/living/carbon/human/species_types/jellypeople.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 5bf2f884e4..53f0b07dd1 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -4,7 +4,7 @@ id = "jelly" default_color = "00FF90" say_mod = "chirps" - species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,NOBLOOD,VIRUSIMMUNE,FACEHAIR,TOXINLOVER) + species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,NOBLOOD,VIRUSIMMUNE,HAIR,FACEHAIR,TOXINLOVER) meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime exotic_blood = "slimejelly" damage_overlay_type = "" From 8b2e073841af348f6408ccf06cd098c381bb33be Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 16 Feb 2018 07:53:54 -0600 Subject: [PATCH 06/60] Update message_server.dm --- .../telecomms/machines/message_server.dm | 185 ------------------ 1 file changed, 185 deletions(-) diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 5a892cec6e..239bbd5c60 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -1,186 +1,3 @@ -<<<<<<< HEAD -/* - The equivalent of the server, for PDA and request console messages. - Without it, PDA and request console messages cannot be transmitted. - PDAs require the rest of the telecomms setup, but request consoles only - require the message server. -*/ - -// A decorational representation of SSblackbox, usually placed alongside the message server. -/obj/machinery/blackbox_recorder - icon = 'icons/obj/stationobjs.dmi' - icon_state = "blackbox" - name = "Blackbox Recorder" - density = TRUE - anchored = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 100 - armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) - - -// The message server itself. -/obj/machinery/telecomms/message_server - icon = 'icons/obj/machines/research.dmi' - icon_state = "server" - name = "Messaging Server" - desc = "A machine that attempts to gather the secret knowledge of the universe." - density = TRUE - anchored = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 100 - - id = "Messaging Server" - network = "tcommsat" - autolinkers = list("common") - - var/list/datum/data_pda_msg/pda_msgs = list() - var/list/datum/data_rc_msg/rc_msgs = list() - var/decryptkey - -/obj/machinery/telecomms/message_server/Initialize() - . = ..() - if (!decryptkey) - decryptkey = GenerateKey() - pda_msgs += new /datum/data_pda_msg("System Administrator", "system", "This is an automated message. The messaging system is functioning correctly.") - -/obj/machinery/telecomms/message_server/Destroy() - for(var/obj/machinery/computer/message_monitor/monitor in GLOB.telecomms_list) - if(monitor.linkedServer && monitor.linkedServer == src) - monitor.linkedServer = null - . = ..() - -/obj/machinery/telecomms/message_server/proc/GenerateKey() - var/newKey - newKey += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le") - newKey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") - newKey += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") - return newKey - -/obj/machinery/telecomms/message_server/process() - if(toggled && (stat & (BROKEN|NOPOWER))) - toggled = FALSE - update_icon() - -/obj/machinery/telecomms/message_server/receive_information(datum/signal/subspace/pda/signal, obj/machinery/telecomms/machine_from) - // can't log non-PDA signals - if(!istype(signal) || !signal.data["message"] || !toggled) - return - - // log the signal - var/datum/data_pda_msg/M = new(signal.format_target(), "[signal.data["name"]] ([signal.data["job"]])", signal.data["message"], signal.data["photo"]) - pda_msgs += M - signal.logged = M - - // pass it along to either the hub or the broadcaster - if(!relay_information(signal, /obj/machinery/telecomms/hub)) - relay_information(signal, /obj/machinery/telecomms/broadcaster) - -/obj/machinery/telecomms/message_server/update_icon() - if((stat & (BROKEN|NOPOWER))) - icon_state = "server-nopower" - else if (!toggled) - icon_state = "server-off" - else - icon_state = "server-on" - - -// PDA signal datum -/datum/signal/subspace/pda - frequency = FREQ_COMMON - server_type = /obj/machinery/telecomms/message_server - var/datum/data_pda_msg/logged - -/datum/signal/subspace/pda/New(source, data) - src.source = source - src.data = data - var/turf/T = get_turf(source) - levels = list(T.z) - -/datum/signal/subspace/pda/copy() - var/datum/signal/subspace/pda/copy = new(source, data.Copy()) - copy.original = src - copy.levels = levels - return copy - -/datum/signal/subspace/pda/proc/format_target() - if (length(data["targets"]) > 1) - return "Everyone" - return data["targets"][1] - -/datum/signal/subspace/pda/proc/format_message() - if (logged && data["photo"]) - return "\"[data["message"]]\" (Photo)" - return "\"[data["message"]]\"" - -/datum/signal/subspace/pda/broadcast() - if (!logged) // Can only go through if a message server logs it - return - for (var/obj/item/device/pda/P in GLOB.PDAs) - if ("[P.owner] ([P.ownjob])" in data["targets"]) - P.receive_message(src) - - -// Log datums stored by the message server. -/datum/data_pda_msg - var/sender = "Unspecified" - var/recipient = "Unspecified" - var/message = "Blank" // transferred message - var/icon/photo // attached photo - -/datum/data_pda_msg/New(param_rec, param_sender, param_message, param_photo) - if(param_rec) - recipient = param_rec - if(param_sender) - sender = param_sender - if(param_message) - message = param_message - if(param_photo) - photo = param_photo - -/datum/data_pda_msg/Topic(href,href_list) - ..() - if(href_list["photo"]) - var/mob/M = usr - M << browse_rsc(photo, "pda_photo.png") - M << browse("PDA Photo" \ - + "" \ - + "" \ - + "", "window=pdaphoto;size=192x192") - onclose(M, "pdaphoto") - -/datum/data_rc_msg - var/rec_dpt = "Unspecified" // receiving department - var/send_dpt = "Unspecified" // sending department - var/message = "Blank" - var/stamp = "Unstamped" - var/id_auth = "Unauthenticated" - var/priority = "Normal" - -/datum/data_rc_msg/New(param_rec, param_sender, param_message, param_stamp, param_id_auth, param_priority) - if(param_rec) - rec_dpt = param_rec - if(param_sender) - send_dpt = param_sender - if(param_message) - message = param_message - if(param_stamp) - stamp = param_stamp - if(param_id_auth) - id_auth = param_id_auth - if(param_priority) - switch(param_priority) - if(1) - priority = "Normal" - if(2) - priority = "High" - if(3) - priority = "Extreme" - else - priority = "Undetermined" - -======= /* The equivalent of the server, for PDA and request console messages. Without it, PDA and request console messages cannot be transmitted. @@ -361,5 +178,3 @@ priority = "Extreme" else priority = "Undetermined" - ->>>>>>> d282c60... Quote the armor lists (#35668) From 1983e62c1be967a0c26738794bc4fe8120be8eb5 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 16 Feb 2018 07:54:03 -0600 Subject: [PATCH 07/60] Update durand.dm --- code/game/mecha/combat/durand.dm | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index ceaea0e9d9..caaa3e3a00 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -1,27 +1,3 @@ -<<<<<<< HEAD -/obj/mecha/combat/durand - desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms." - name = "\improper Durand" - icon_state = "durand" - step_in = 4 - dir_in = 1 //Facing North. - max_integrity = 400 - deflect_chance = 20 - armor = list(melee = 40, bullet = 35, laser = 15, energy = 10, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100) - max_temperature = 30000 - infra_luminosity = 8 - force = 40 - wreckage = /obj/structure/mecha_wreckage/durand - -/obj/mecha/combat/durand/GrantActions(mob/living/user, human_occupant = 0) - ..() - defense_action.Grant(user, src) - -/obj/mecha/combat/durand/RemoveActions(mob/living/user, human_occupant = 0) - ..() - defense_action.Remove(user) - -======= /obj/mecha/combat/durand desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms." name = "\improper Durand" @@ -43,5 +19,3 @@ /obj/mecha/combat/durand/RemoveActions(mob/living/user, human_occupant = 0) ..() defense_action.Remove(user) - ->>>>>>> d282c60... Quote the armor lists (#35668) From 420f889c9d22695738e9ef61df68f1348b8a41b0 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 16 Feb 2018 07:54:10 -0600 Subject: [PATCH 08/60] Update phazon.dm --- code/game/mecha/combat/phazon.dm | 34 -------------------------------- 1 file changed, 34 deletions(-) diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 4a4c33704a..15b865c1e9 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -1,35 +1,3 @@ -<<<<<<< HEAD -/obj/mecha/combat/phazon - desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials." - name = "\improper Phazon" - icon_state = "phazon" - step_in = 2 - dir_in = 2 //Facing South. - step_energy_drain = 3 - max_integrity = 200 - deflect_chance = 30 - armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100) - max_temperature = 25000 - infra_luminosity = 3 - wreckage = /obj/structure/mecha_wreckage/phazon - add_req_access = 1 - internal_damage_threshold = 25 - force = 15 - max_equip = 3 - phase_state = "phazon-phase" - -/obj/mecha/combat/phazon/GrantActions(mob/living/user, human_occupant = 0) - ..() - switch_damtype_action.Grant(user, src) - phasing_action.Grant(user, src) - - -/obj/mecha/combat/phazon/RemoveActions(mob/living/user, human_occupant = 0) - ..() - switch_damtype_action.Remove(user) - phasing_action.Remove(user) - -======= /obj/mecha/combat/phazon desc = "This is a Phazon exosuit. The pinnacle of scientific research and pride of Nanotrasen, it uses cutting edge bluespace technology and expensive materials." name = "\improper Phazon" @@ -59,5 +27,3 @@ ..() switch_damtype_action.Remove(user) phasing_action.Remove(user) - ->>>>>>> d282c60... Quote the armor lists (#35668) From 8b1e818b2d6f7e946d14e25516391f0395581a06 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 16 Feb 2018 07:54:19 -0600 Subject: [PATCH 09/60] Update singularityhammer.dm --- code/game/objects/items/singularityhammer.dm | 115 ------------------- 1 file changed, 115 deletions(-) diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm index 9c120dae5d..365395f1ee 100644 --- a/code/game/objects/items/singularityhammer.dm +++ b/code/game/objects/items/singularityhammer.dm @@ -1,117 +1,3 @@ -<<<<<<< HEAD -/obj/item/twohanded/singularityhammer - name = "singularity hammer" - desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows." - icon_state = "mjollnir0" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = SLOT_BACK - force = 5 - force_unwielded = 5 - force_wielded = 20 - throwforce = 15 - throw_range = 1 - w_class = WEIGHT_CLASS_HUGE - var/charged = 5 - armor = list(melee = 50, bullet = 50, laser = 50, energy = 0, bomb = 50, bio = 0, rad = 0, fire = 100, acid = 100) - resistance_flags = FIRE_PROOF | ACID_PROOF - force_string = "LORD SINGULOTH HIMSELF" - -/obj/item/twohanded/singularityhammer/New() - ..() - START_PROCESSING(SSobj, src) - -/obj/item/twohanded/singularityhammer/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/twohanded/singularityhammer/process() - if(charged < 5) - charged++ - return - -/obj/item/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "mjollnir[wielded]" - return - -/obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder) - for(var/atom/X in orange(5,pull)) - if(ismovableatom(X)) - var/atom/movable/A = X - if(A == wielder) - continue - if(A && !A.anchored && !ishuman(X)) - step_towards(A,pull) - step_towards(A,pull) - step_towards(A,pull) - else if(ishuman(X)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes, /obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/M = H.shoes - if(M.magpulse) - continue - H.apply_effect(20, KNOCKDOWN, 0) - step_towards(H,pull) - step_towards(H,pull) - step_towards(H,pull) - return - -/obj/item/twohanded/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - if(!proximity) - return - if(wielded) - if(charged == 5) - charged = 0 - if(istype(A, /mob/living/)) - var/mob/living/Z = A - Z.take_bodypart_damage(20,0) - playsound(user, 'sound/weapons/marauder.ogg', 50, 1) - var/turf/target = get_turf(A) - vortex(target,user) - -/obj/item/twohanded/mjollnir - name = "Mjolnir" - desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy." - icon_state = "mjollnir0" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = SLOT_BACK - force = 5 - force_unwielded = 5 - force_wielded = 25 - throwforce = 30 - throw_range = 7 - w_class = WEIGHT_CLASS_HUGE - -/obj/item/twohanded/mjollnir/proc/shock(mob/living/target) - target.Stun(60) - var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread - s.set_up(5, 1, target.loc) - s.start() - target.visible_message("[target.name] was shocked by [src]!", \ - "You feel a powerful shock course through your body sending you flying!", \ - "You hear a heavy electrical crack!") - var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) - target.throw_at(throw_target, 200, 4) - return - -/obj/item/twohanded/mjollnir/attack(mob/living/M, mob/user) - ..() - if(wielded) - playsound(src.loc, "sparks", 50, 1) - shock(M) - -/obj/item/twohanded/mjollnir/throw_impact(atom/target) - . = ..() - if(isliving(target)) - shock(target) - -/obj/item/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "mjollnir[wielded]" - return -======= /obj/item/twohanded/singularityhammer name = "singularity hammer" desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows." @@ -224,4 +110,3 @@ /obj/item/twohanded/mjollnir/update_icon() //Currently only here to fuck with the on-mob icons. icon_state = "mjollnir[wielded]" return ->>>>>>> d282c60... Quote the armor lists (#35668) From 84f12df08e0de1536162633ef66d4a21289af91d Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 16 Feb 2018 07:54:39 -0600 Subject: [PATCH 10/60] Update weldingtool.dm --- code/game/objects/items/tools/weldingtool.dm | 369 +------------------ 1 file changed, 3 insertions(+), 366 deletions(-) diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index d7dd57fd2b..61b44d658e 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -1,4 +1,3 @@ -<<<<<<< HEAD #define WELDER_FUEL_BURN_INTERVAL 13 /obj/item/weldingtool name = "welding tool" @@ -19,7 +18,7 @@ throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_SMALL - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 30) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) resistance_flags = FIRE_PROOF materials = list(MAT_METAL=70, MAT_GLASS=30) @@ -358,367 +357,5 @@ if(get_fuel() < max_fuel && nextrefueltick < world.time) nextrefueltick = world.time + 10 reagents.add_reagent("welding_fuel", 1) - -======= -#define WELDER_FUEL_BURN_INTERVAL 13 -/obj/item/weldingtool - name = "welding tool" - desc = "A standard edition welder provided by Nanotrasen." - icon = 'icons/obj/tools.dmi' - icon_state = "welder" - item_state = "welder" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = SLOT_BELT - force = 3 - throwforce = 5 - hitsound = "swing_hit" - usesound = list('sound/items/welder.ogg', 'sound/items/welder2.ogg') - var/acti_sound = 'sound/items/welderactivate.ogg' - var/deac_sound = 'sound/items/welderdeactivate.ogg' - throw_speed = 3 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) - resistance_flags = FIRE_PROOF - - materials = list(MAT_METAL=70, MAT_GLASS=30) - var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2) - var/status = TRUE //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower) - var/max_fuel = 20 //The max amount of fuel the welder can hold - var/change_icons = 1 - var/can_off_process = 0 - var/light_intensity = 2 //how powerful the emitted light is when used. - var/burned_fuel_for = 0 //when fuel was last removed - heat = 3800 - tool_behaviour = TOOL_WELDER - toolspeed = 1 - -/obj/item/weldingtool/Initialize() - . = ..() - create_reagents(max_fuel) - reagents.add_reagent("welding_fuel", max_fuel) - update_icon() - - -/obj/item/weldingtool/proc/update_torch() - if(welding) - add_overlay("[initial(icon_state)]-on") - item_state = "[initial(item_state)]1" - else - item_state = "[initial(item_state)]" - - -/obj/item/weldingtool/update_icon() - cut_overlays() - if(change_icons) - var/ratio = get_fuel() / max_fuel - ratio = CEILING(ratio*4, 1) * 25 - add_overlay("[initial(icon_state)][ratio]") - update_torch() - return - - -/obj/item/weldingtool/process() - switch(welding) - if(0) - force = 3 - damtype = "brute" - update_icon() - if(!can_off_process) - STOP_PROCESSING(SSobj, src) - return - //Welders left on now use up fuel, but lets not have them run out quite that fast - if(1) - force = 15 - damtype = "fire" - ++burned_fuel_for - if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL) - use(1) - update_icon() - - //This is to start fires. process() is only called if the welder is on. - open_flame() - - -/obj/item/weldingtool/suicide_act(mob/user) - user.visible_message("[user] welds [user.p_their()] every orifice closed! It looks like [user.p_theyre()] trying to commit suicide!") - return (FIRELOSS) - - -/obj/item/weldingtool/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/screwdriver)) - flamethrower_screwdriver(I, user) - else if(istype(I, /obj/item/stack/rods)) - flamethrower_rods(I, user) - else - . = ..() - update_icon() - -/obj/item/weldingtool/proc/explode() - var/turf/T = get_turf(loc) - var/plasmaAmount = reagents.get_reagent_amount("plasma") - dyn_explosion(T, plasmaAmount/5)//20 plasma in a standard welder has a 4 power explosion. no breaches, but enough to kill/dismember holder - qdel(src) - -/obj/item/weldingtool/attack(mob/living/carbon/human/H, mob/user) - if(!istype(H)) - return ..() - - var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected)) - - if(affecting && affecting.status == BODYPART_ROBOTIC && user.a_intent != INTENT_HARM) - if(src.use_tool(H, user, 0, volume=50, amount=1)) - if(user == H) - user.visible_message("[user] starts to fix some of the dents on [H]'s [affecting.name].", - "You start fixing some of the dents on [H]'s [affecting.name].") - if(!do_mob(user, H, 50)) - return - item_heal_robotic(H, user, 15, 0) - else - return ..() - - -/obj/item/weldingtool/afterattack(atom/O, mob/user, proximity) - if(!proximity) - return - if(!status && O.is_refillable()) - reagents.trans_to(O, reagents.total_volume) - to_chat(user, "You empty [src]'s fuel tank into [O].") - update_icon() - if(isOn()) - use(1) - var/turf/location = get_turf(user) - location.hotspot_expose(700, 50, 1) - if(get_fuel() <= 0) - set_light(0) - - if(isliving(O)) - var/mob/living/L = O - if(L.IgniteMob()) - message_admins("[key_name_admin(user)] set [key_name_admin(L)] on fire") - log_game("[key_name(user)] set [key_name(L)] on fire") - - -/obj/item/weldingtool/attack_self(mob/user) - if(src.reagents.has_reagent("plasma")) - message_admins("[key_name_admin(user)] activated a rigged welder.") - explode() - switched_on(user) - if(welding) - set_light(light_intensity) - - update_icon() - - -// Returns the amount of fuel in the welder -/obj/item/weldingtool/proc/get_fuel() - return reagents.get_reagent_amount("welding_fuel") - - -// Uses fuel from the welding tool. -/obj/item/weldingtool/use(used = 0) - if(!isOn() || !check_fuel()) - return FALSE - - if(used) - burned_fuel_for = 0 - if(get_fuel() >= used) - reagents.remove_reagent("welding_fuel", used) - check_fuel() - return TRUE - else - return FALSE - - -//Turns off the welder if there is no more fuel (does this really need to be its own proc?) -/obj/item/weldingtool/proc/check_fuel(mob/user) - if(get_fuel() <= 0 && welding) - switched_on(user) - update_icon() - //mob icon update - if(ismob(loc)) - var/mob/M = loc - M.update_inv_hands(0) - - return 0 - return 1 - -//Switches the welder on -/obj/item/weldingtool/proc/switched_on(mob/user) - if(!status) - to_chat(user, "[src] can't be turned on while unsecured!") - return - welding = !welding - if(welding) - if(get_fuel() >= 1) - to_chat(user, "You switch [src] on.") - playsound(loc, acti_sound, 50, 1) - force = 15 - damtype = "fire" - hitsound = 'sound/items/welder.ogg' - update_icon() - START_PROCESSING(SSobj, src) - else - to_chat(user, "You need more fuel!") - switched_off(user) - else - to_chat(user, "You switch [src] off.") - playsound(loc, deac_sound, 50, 1) - switched_off(user) - -//Switches the welder off -/obj/item/weldingtool/proc/switched_off(mob/user) - welding = 0 - set_light(0) - - force = 3 - damtype = "brute" - hitsound = "swing_hit" - update_icon() - - -/obj/item/weldingtool/examine(mob/user) - ..() - to_chat(user, "It contains [get_fuel()] unit\s of fuel out of [max_fuel].") - -/obj/item/weldingtool/is_hot() - return welding * heat - -//Returns whether or not the welding tool is currently on. -/obj/item/weldingtool/proc/isOn() - return welding - -// When welding is about to start, run a normal tool_use_check, then flash a mob if it succeeds. -/obj/item/weldingtool/tool_start_check(mob/living/user, amount=0) - . = tool_use_check(user, amount) - if(. && user) - user.flash_act(light_intensity) - -// If welding tool ran out of fuel during a construction task, construction fails. -/obj/item/weldingtool/tool_use_check(mob/living/user, amount) - if(!isOn() || !check_fuel()) - to_chat(user, "[src] has to be on to complete this task!") - return FALSE - - if(get_fuel() >= amount) - return TRUE - else - to_chat(user, "You need more welding fuel to complete this task!") - return FALSE - - -/obj/item/weldingtool/proc/flamethrower_screwdriver(obj/item/I, mob/user) - if(welding) - to_chat(user, "Turn it off first!") - return - status = !status - if(status) - to_chat(user, "You resecure [src] and close the fuel tank.") - container_type = NONE - else - to_chat(user, "[src] can now be attached, modified, and refuelled.") - container_type = OPENCONTAINER - add_fingerprint(user) - -/obj/item/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user) - if(!status) - var/obj/item/stack/rods/R = I - if (R.use(1)) - var/obj/item/flamethrower/F = new /obj/item/flamethrower(user.loc) - if(!remove_item_from_storage(F)) - user.transferItemToLoc(src, F, TRUE) - F.weldtool = src - add_fingerprint(user) - to_chat(user, "You add a rod to a welder, starting to build a flamethrower.") - user.put_in_hands(F) - else - to_chat(user, "You need one rod to start building a flamethrower!") - -/obj/item/weldingtool/ignition_effect(atom/A, mob/user) - if(use_tool(A, user, 0, amount=1)) - return "[user] casually lights [A] with [src], what a badass." - else - return "" - -/obj/item/weldingtool/largetank - name = "industrial welding tool" - desc = "A slightly larger welder with a larger tank." - icon_state = "indwelder" - max_fuel = 40 - materials = list(MAT_GLASS=60) - -/obj/item/weldingtool/largetank/cyborg - name = "integrated welding tool" - desc = "An advanced welder designed to be used in robotic systems." - toolspeed = 0.5 - -/obj/item/weldingtool/largetank/flamethrower_screwdriver() - return - - -/obj/item/weldingtool/mini - name = "emergency welding tool" - desc = "A miniature welder used during emergencies." - icon_state = "miniwelder" - max_fuel = 10 - w_class = WEIGHT_CLASS_TINY - materials = list(MAT_METAL=30, MAT_GLASS=10) - change_icons = 0 - -/obj/item/weldingtool/mini/flamethrower_screwdriver() - return - -/obj/item/weldingtool/abductor - name = "alien welding tool" - desc = "An alien welding tool. Whatever fuel it uses, it never runs out." - icon = 'icons/obj/abductor.dmi' - icon_state = "welder" - toolspeed = 0.1 - light_intensity = 0 - change_icons = 0 - -/obj/item/weldingtool/abductor/process() - if(get_fuel() <= max_fuel) - reagents.add_reagent("welding_fuel", 1) - ..() - -/obj/item/weldingtool/hugetank - name = "upgraded industrial welding tool" - desc = "An upgraded welder based of the industrial welder." - icon_state = "upindwelder" - item_state = "upindwelder" - max_fuel = 80 - materials = list(MAT_METAL=70, MAT_GLASS=120) - -/obj/item/weldingtool/experimental - name = "experimental welding tool" - desc = "An experimental welder capable of self-fuel generation and less harmful to the eyes." - icon_state = "exwelder" - item_state = "exwelder" - max_fuel = 40 - materials = list(MAT_METAL=70, MAT_GLASS=120) - var/last_gen = 0 - change_icons = 0 - can_off_process = 1 - light_intensity = 1 - toolspeed = 0.5 - var/nextrefueltick = 0 - -/obj/item/weldingtool/experimental/brass - name = "brass welding tool" - desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch." - resistance_flags = FIRE_PROOF | ACID_PROOF - icon_state = "brasswelder" - item_state = "brasswelder" - - -/obj/item/weldingtool/experimental/process() - ..() - if(get_fuel() < max_fuel && nextrefueltick < world.time) - nextrefueltick = world.time + 10 - reagents.add_reagent("welding_fuel", 1) - ->>>>>>> d282c60... Quote the armor lists (#35668) -#undef WELDER_FUEL_BURN_INTERVAL \ No newline at end of file + +#undef WELDER_FUEL_BURN_INTERVAL From e0cb508207bf66a05d9585ccd208def508ee533c Mon Sep 17 00:00:00 2001 From: LetterJay Date: Fri, 16 Feb 2018 07:54:48 -0600 Subject: [PATCH 11/60] Update shield.dm --- .../antagonists/blob/blob/blobs/shield.dm | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm index 87dcd7bfdf..a83f4294b2 100644 --- a/code/modules/antagonists/blob/blob/blobs/shield.dm +++ b/code/modules/antagonists/blob/blob/blobs/shield.dm @@ -1,38 +1,3 @@ -<<<<<<< HEAD -/obj/structure/blob/shield - name = "strong blob" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_shield" - desc = "A solid wall of slightly twitching tendrils." - max_integrity = 150 - brute_resist = 0.25 - explosion_block = 3 - point_return = 4 - atmosblock = TRUE - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 90, acid = 90) - -/obj/structure/blob/shield/scannerreport() - if(atmosblock) - return "Will prevent the spread of atmospheric changes." - return "N/A" - -/obj/structure/blob/shield/core - point_return = 0 - -/obj/structure/blob/shield/update_icon() - ..() - if(obj_integrity <= 75) - icon_state = "blob_shield_damaged" - name = "weakened strong blob" - desc = "A wall of twitching tendrils." - atmosblock = FALSE - else - icon_state = initial(icon_state) - name = initial(name) - desc = initial(desc) - atmosblock = TRUE - air_update_turf(1) -======= /obj/structure/blob/shield name = "strong blob" icon = 'icons/mob/blob.dmi' @@ -66,4 +31,3 @@ desc = initial(desc) atmosblock = TRUE air_update_turf(1) ->>>>>>> d282c60... Quote the armor lists (#35668) From b233e05bfee6f7fe2a71cd4735652c82808cae94 Mon Sep 17 00:00:00 2001 From: Chayse Ramsay Date: Fri, 16 Feb 2018 15:06:13 +0000 Subject: [PATCH 12/60] Altering coldmod to make it a little less ridiculous. Now back the original value but with no heat or burn protection. --- .../mob/living/carbon/human/species_types/jellypeople.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 53f0b07dd1..cf7df00ab1 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -11,9 +11,9 @@ var/datum/action/innate/regenerate_limbs/regenerate_limbs var/datum/action/innate/slime_change/slime_change liked_food = MEAT - coldmod = 6 // = 3x cold damage - heatmod = 0.5 // = 1/4x heat damage - burnmod = 0.5 // = 1/2x generic burn damage + coldmod = 6 + heatmod = 0.5 + burnmod = 0.5 /datum/species/jelly/on_species_loss(mob/living/carbon/C) if(regenerate_limbs) @@ -212,7 +212,7 @@ hair_color = "mutcolor" hair_alpha = 180 liked_food = MEAT - coldmod = 12 + coldmod = 6 heatmod = 1 burnmod = 1 From e040e5523fdafb8e49cf5d62a997f9c473701282 Mon Sep 17 00:00:00 2001 From: Chayse Ramsay Date: Fri, 16 Feb 2018 15:14:31 +0000 Subject: [PATCH 13/60] Requested Changes Part 1 --- .../carbon/human/species_types/furrypeople.dm | 110 +++++++++++++++++ .../carbon/human/species_types/jellypeople.dm | 114 +----------------- 2 files changed, 113 insertions(+), 111 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 0e00975a5a..54cf0598ba 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -240,3 +240,113 @@ attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' + + + +/datum/species/jelly/roundstartslime + name = "Slimeperson" + id = "slimeperson" + default_color = "00FFFF" + species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD,TOXINLOVER) + mutant_bodyparts = list("mam_tail", "mam_ears", "taur") + default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None") + say_mod = "says" + hair_color = "mutcolor" + hair_alpha = 180 + liked_food = MEAT + coldmod = 6 + heatmod = 1 + burnmod = 1 + +/datum/action/innate/slime_change + name = "Alter Form" + check_flags = AB_CHECK_CONSCIOUS + button_icon_state = "slimesplit" //placeholder + icon_icon = 'icons/mob/actions/actions_slime.dmi' + background_icon_state = "bg_alien" + +/datum/action/innate/slime_change/Activate() + var/mob/living/carbon/human/H = owner + if(!isjellyperson(H)) + return + else + H.visible_message("[owner] gains a look of \ + concentration while standing perfectly still.\ + Their body seems to shift and starts getting more goo-like.", + "You focus intently on altering your body while \ + standing perfectly still...") + change_form() + +/datum/action/innate/slime_change/proc/change_form() + var/mob/living/carbon/human/H = owner + var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Ears", "Taur body", "Cancel") + if(select_alteration == "Hair Style") + if(H.gender == MALE) + var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list + if(new_style) + H.facial_hair_style = new_style + else + H.facial_hair_style = "Shaved" + //handle normal hair + var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list + if(new_style) + H.hair_style = new_style + H.update_hair() + else if (select_alteration == "Genitals") + var/list/organs = list() + var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel") + switch(operation) + if("add sexual organ") + var/new_organ = input("Select sexual organ:", "Organ Manipulation") in list("Penis", "Testicles", "Breasts", "Vagina", "Womb", "Cancel") + if(new_organ == "Penis") + H.give_penis() + else if(new_organ == "Testicles") + H.give_balls() + else if(new_organ == "Breasts") + H.give_breasts() + else if(new_organ == "Vagina") + H.give_vagina() + else if(new_organ == "Womb") + H.give_womb() + else + return + if("remove sexual organ") + for(var/obj/item/organ/genital/X in H.internal_organs) + var/obj/item/organ/I = X + organs["[I.name] ([I.type])"] = I + var/obj/item/organ = input("Select sexual organ:", "Organ Manipulation", null) in organs + organ = organs[organ] + if(!organ) + return + var/obj/item/organ/genital/O + if(isorgan(organ)) + O = organ + O.Remove(H) + organ.forceMove(get_turf(H)) + qdel(organ) + H.update_body() + else if (select_alteration == "Ears") + var/new_ears + new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in GLOB.mam_ears_list + if(new_ears) + H.dna.features["mam_ears"] = new_ears + H.update_body() + else if (select_alteration == "Tail") + var/new_tail + new_tail = input(owner, "Choose your character's tail:", "Tail Alteration") as null|anything in GLOB.mam_tails_list + if(new_tail) + H.dna.features["mam_tail"] = new_tail + if(new_tail != "None") + H.dna.features["taur"] = "None" + H.update_body() + else if (select_alteration == "Taur body") + var/new_taur + new_taur = input(owner, "Choose your character's tauric body:", "Taur Body Alteration") as null|anything in GLOB.taur_list + if(new_taur) + H.dna.features["taur"] = new_taur + if(new_taur != "None") + H.dna.features["mam_tail"] = "None" + H.dna.features["xenotail"] = "None" + H.update_body() + else + return diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index cf7df00ab1..df80b725e6 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -11,9 +11,9 @@ var/datum/action/innate/regenerate_limbs/regenerate_limbs var/datum/action/innate/slime_change/slime_change liked_food = MEAT - coldmod = 6 - heatmod = 0.5 - burnmod = 0.5 + coldmod = 6 // = 3x cold damage + heatmod = 0.5 // = 1/4x heat damage + burnmod = 0.5 // = 1/2x generic burn damage /datum/species/jelly/on_species_loss(mob/living/carbon/C) if(regenerate_limbs) @@ -106,116 +106,8 @@ return to_chat(H, "...but there is not enough of you to go around! You must attain more mass to heal!") -/datum/action/innate/slime_change - name = "Alter Form" - check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "slimesplit" //placeholder - icon_icon = 'icons/mob/actions/actions_slime.dmi' - background_icon_state = "bg_alien" - -/datum/action/innate/slime_change/Activate() - var/mob/living/carbon/human/H = owner - if(!isjellyperson(H)) - return - else - H.visible_message("[owner] gains a look of \ - concentration while standing perfectly still.\ - Their body seems to shift and starts getting more goo-like.", - "You focus intently on altering your body while \ - standing perfectly still...") - change_form() - -/datum/action/innate/slime_change/proc/change_form() - var/mob/living/carbon/human/H = owner - var/select_alteration = input(owner, "Select what part of your form to alter", "Form Alteration", "cancel") in list("Hair Style", "Genitals", "Tail", "Ears", "Taur body", "Cancel") - if(select_alteration == "Hair Style") - if(H.gender == MALE) - var/new_style = input(owner, "Select a facial hair style", "Hair Alterations") as null|anything in GLOB.facial_hair_styles_list - if(new_style) - H.facial_hair_style = new_style - else - H.facial_hair_style = "Shaved" - //handle normal hair - var/new_style = input(owner, "Select a hair style", "Hair Alterations") as null|anything in GLOB.hair_styles_list - if(new_style) - H.hair_style = new_style - H.update_hair() - else if (select_alteration == "Genitals") - var/list/organs = list() - var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add sexual organ", "remove sexual organ", "cancel") - switch(operation) - if("add sexual organ") - var/new_organ = input("Select sexual organ:", "Organ Manipulation") in list("Penis", "Testicles", "Breasts", "Vagina", "Womb", "Cancel") - if(new_organ == "Penis") - H.give_penis() - else if(new_organ == "Testicles") - H.give_balls() - else if(new_organ == "Breasts") - H.give_breasts() - else if(new_organ == "Vagina") - H.give_vagina() - else if(new_organ == "Womb") - H.give_womb() - else - return - if("remove sexual organ") - for(var/obj/item/organ/genital/X in H.internal_organs) - var/obj/item/organ/I = X - organs["[I.name] ([I.type])"] = I - var/obj/item/organ = input("Select sexual organ:", "Organ Manipulation", null) in organs - organ = organs[organ] - if(!organ) - return - var/obj/item/organ/genital/O - if(isorgan(organ)) - O = organ - O.Remove(H) - organ.forceMove(get_turf(H)) - qdel(organ) - H.update_body() - else if (select_alteration == "Ears") - var/new_ears - new_ears = input(owner, "Choose your character's ears:", "Ear Alteration") as null|anything in GLOB.mam_ears_list - if(new_ears) - H.dna.features["mam_ears"] = new_ears - H.update_body() - else if (select_alteration == "Tail") - var/new_tail - new_tail = input(owner, "Choose your character's tail:", "Tail Alteration") as null|anything in GLOB.mam_tails_list - if(new_tail) - H.dna.features["mam_tail"] = new_tail - if(new_tail != "None") - H.dna.features["taur"] = "None" - H.update_body() - else if (select_alteration == "Taur body") - var/new_taur - new_taur = input(owner, "Choose your character's tauric body:", "Taur Body Alteration") as null|anything in GLOB.taur_list - if(new_taur) - H.dna.features["taur"] = new_taur - if(new_taur != "None") - H.dna.features["mam_tail"] = "None" - H.dna.features["xenotail"] = "None" - H.update_body() - else - return - ////////////////////////////////////////////////////////SLIMEPEOPLE/////////////////////////////////////////////////////////////////// -/datum/species/jelly/roundstartslime - name = "Slimeperson" - id = "slimeperson" - default_color = "00FFFF" - species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD,TOXINLOVER) - mutant_bodyparts = list("mam_tail", "mam_ears", "taur") - default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None") - say_mod = "says" - hair_color = "mutcolor" - hair_alpha = 180 - liked_food = MEAT - coldmod = 6 - heatmod = 1 - burnmod = 1 - //Slime people are able to split like slimes, retaining a single mind that can swap between bodies at will, even after death. /datum/species/jelly/slime From a8dcbd0dd4f78a429ef485107f6fa9750e535b1c Mon Sep 17 00:00:00 2001 From: Chayse Ramsay Date: Fri, 16 Feb 2018 15:26:00 +0000 Subject: [PATCH 14/60] Gives Jellypeople and subtypes the ability to actually SPEAK slime, not just understand it. Upstream oversight corrected. --- .../mob/living/carbon/human/species_types/jellypeople.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index df80b725e6..6a260d520f 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -18,14 +18,14 @@ /datum/species/jelly/on_species_loss(mob/living/carbon/C) if(regenerate_limbs) regenerate_limbs.Remove(C) - C.remove_language(/datum/language/slime, TRUE) + C.remove_language(/datum/language/slime) C.faction -= "slime" ..() C.faction -= "slime" /datum/species/jelly/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() - C.grant_language(/datum/language/slime, TRUE) + C.grant_language(/datum/language/slime) if(ishuman(C)) regenerate_limbs = new regenerate_limbs.Grant(C) From 7565f1e1f10c4e44f2109f0df9a75cc4f1aaa871 Mon Sep 17 00:00:00 2001 From: Chayse Ramsay Date: Fri, 16 Feb 2018 15:36:20 +0000 Subject: [PATCH 15/60] Undoing what should be an upstream fix --- .../mob/living/carbon/human/species_types/jellypeople.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 6a260d520f..df80b725e6 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -18,14 +18,14 @@ /datum/species/jelly/on_species_loss(mob/living/carbon/C) if(regenerate_limbs) regenerate_limbs.Remove(C) - C.remove_language(/datum/language/slime) + C.remove_language(/datum/language/slime, TRUE) C.faction -= "slime" ..() C.faction -= "slime" /datum/species/jelly/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() - C.grant_language(/datum/language/slime) + C.grant_language(/datum/language/slime, TRUE) if(ishuman(C)) regenerate_limbs = new regenerate_limbs.Grant(C) From 47e9b2fe632734c2d7d30fd332da39d32a7a6fc1 Mon Sep 17 00:00:00 2001 From: Chayse Ramsay Date: Fri, 16 Feb 2018 15:52:28 +0000 Subject: [PATCH 16/60] More Requested Changes --- .../carbon/human/species_types/jellypeople.dm | 15 +++++++-------- .../carbon/human/species_types/jellypeople.dm | 2 ++ tgstation.dme | 1 + 3 files changed, 10 insertions(+), 8 deletions(-) create mode 100644 modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index df80b725e6..e73427d43d 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -4,12 +4,14 @@ id = "jelly" default_color = "00FF90" say_mod = "chirps" - species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,NOBLOOD,VIRUSIMMUNE,HAIR,FACEHAIR,TOXINLOVER) + species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,NOBLOOD,VIRUSIMMUNE,HAIR,FACEHAIR,TOXINLOVER) //CIT CHANGE - adds HAIR and FACEHAIR to species traits + mutant_bodyparts = list("mam_tail", "mam_ears", "taur") //CIT CHANGE + default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None") //CIT CHANGE meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime exotic_blood = "slimejelly" damage_overlay_type = "" var/datum/action/innate/regenerate_limbs/regenerate_limbs - var/datum/action/innate/slime_change/slime_change + var/datum/action/innate/slime_change/slime_change //CIT CHANGE liked_food = MEAT coldmod = 6 // = 3x cold damage heatmod = 0.5 // = 1/4x heat damage @@ -29,8 +31,8 @@ if(ishuman(C)) regenerate_limbs = new regenerate_limbs.Grant(C) - slime_change = new - slime_change.Grant(C) + slime_change = new //CIT CHANGE + slime_change.Grant(C) //CIT CHANGE C.faction |= "slime" /datum/species/jelly/spec_life(mob/living/carbon/human/H) @@ -111,12 +113,9 @@ //Slime people are able to split like slimes, retaining a single mind that can swap between bodies at will, even after death. /datum/species/jelly/slime - name = "Xenobiological Slimeperson" + name = "Slimeperson" id = "slime" default_color = "00FFFF" - species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD,TOXINLOVER) - mutant_bodyparts = list("mam_tail", "mam_ears", "taur") - default_features = list("mcolor" = "FFF", "mam_tail" = "None", "mam_ears" = "None") say_mod = "says" hair_color = "mutcolor" hair_alpha = 150 diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm new file mode 100644 index 0000000000..5e3f58e26c --- /dev/null +++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -0,0 +1,2 @@ +/datum/species/jelly/slime + name = "Xenobiological Slimeperson" diff --git a/tgstation.dme b/tgstation.dme index cf7f7923c3..a9c2075554 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2568,6 +2568,7 @@ #include "modular_citadel\code\modules\mining\mine_items.dm" #include "modular_citadel\code\modules\mob\living\carbon\human\human_defense.dm" #include "modular_citadel\code\modules\mob\living\carbon\human\life.dm" +#include "modular_citadel\code\modules\mob\living\carbon\human\species_types\jellypeople.dm" #include "modular_citadel\code\modules\mob\living\silicon\robot\robot_modules.dm" #include "modular_citadel\code\modules\mob\living\simple_animal\banana_spider.dm" #include "modular_citadel\code\modules\mob\living\simple_animal\kiwi.dm" From cbe47342163a5792dc47b1d8c6e136aeff635524 Mon Sep 17 00:00:00 2001 From: Slignerd Date: Fri, 16 Feb 2018 17:33:25 +0100 Subject: [PATCH 17/60] Changes a number of HUD icons (#35704) * Updates hud.dmi * Makes clown's nose big again * Updates contraband balloons * Changes HUD icons and HUD-themed balloons --- icons/mob/hud.dmi | Bin 13298 -> 13261 bytes icons/mob/inhands/antag/balloons_lefthand.dmi | Bin 934 -> 1013 bytes .../mob/inhands/antag/balloons_righthand.dmi | Bin 1006 -> 1021 bytes icons/obj/items_and_weapons.dmi | Bin 119243 -> 119323 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 5e33807ec7987dd1926bc0a9921cc92a2c1af3a9..c275e66752b408975379b4be80318182bc3b8a9a 100644 GIT binary patch literal 13261 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

pcle)&9m;vpB?B;Rlc~dTb#4(xSMMnp*Lz9 z5W@wWwJ0r>olB1@O>o=6f_g06o zN1bTOdxEGyb$|(yO~)NsBWccH3Q>Ea$p)`Jk**7-aG(-&e@_3T2A@qJiaXVXQk9_3 delta 12163 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 G5&s{RN-(Pc diff --git a/icons/mob/inhands/antag/balloons_lefthand.dmi b/icons/mob/inhands/antag/balloons_lefthand.dmi index 06f68a1cb16bf0c52413b4eada43c5e7c4e2895a..1e1171822c21f934f0ab5fbde1b7f7067e198988 100644 GIT binary patch delta 847 zcmZ3+{*`^g=6YrwPZ!6KiaBrR`sUqs;Au^Fi~B88I?Xa*zRLmgl=< z%GtMfW@WtI6PI2R_rCVcUA|>zy3%IoL{FFPmTBCZp;sMSzv$X`f#}11+w`o( zESahV)fqfJ=P=|ij?jEsbwi?ZOX8a8!&ER%=^`EcR*14k zy@`18;a%(gr2l$JeUs;}k2T-7;o`N_<4W!c`daEuZ+0B*R0wBuV_)?(&Sl=(S9y%x zI`{rQxb0A&!C)c6Aj8GL$6C+O&eY({IA=rEZ#AX!Td!4jU*F==!B9Qxq3n#Fhmr>v zU!RmdU(fY@=7D~*$J%E(($sRaW;|(eh8qCUe_$cQg8&Aoxz~R)y*iv)JTJ2D-c?($ z2kvrjKMxdh-8c80S$5st7%$DG8Lu{ZFF3oqe(K>Q`Rc;`#xI^8|5LvFc>i^f^HcN> ztz-1-f3G-=>D^jTsCLACP!gE4p?YIGTmIa0kWjhUeL?ZSCQ!I3RS8O*!bS}^`_*B z%8SGc`(MqgdlM7hW|SLSrc=c7uv^{ul48bw*25{)V^;q z%a$t^nwAPgAKWTkD)XbP0l+XkK DMPPX7 delta 767 zcmey$zKngs=6a^Po-U3d6?5L+b%r9AA37a(NPmfs~cYKy! z*Md#9)7b*&kjkkWv^q_M}lkIm; zDayTjsq)>$6B}Lh&1Ok!pKAU4mdiON`uSWpzQb`_Y(+RuK z;y;cHrJHnX%HI6`{J$*w^`6To5^r>;F&9X*`7K))S^Td&c=5J#8zU>F^A2x*f2uTl z!NjGR_B(iZ`WQJts2)NwHq6YJ-Z;xL?Ed7PjA8N-5)H-|*%loAw|<*?|GOVq%*+fB z@WA8odWrY%YdUN1pIr@dV6MKDoy4Z|_v`-7S@YwEVx-HGb?1HyTzNM4)WVIum9y+6 zzx=EEd-L?|$EEi&pKN&3dh+nX>DK@MMe&7z17dZ3+=sab9{BVzOmE*3JsA=@tK(+O zXYzW!eJ5DYtJa^I51y{o3&@>YE@c_@ZP8DLD}OedKQ{&jcf_|QX~$L9%9T$9ZDDtI zsjz3*lg!YBgc8(lr7HBd_q$Zv#I!J42cjW$eOP|~d92sYZFw(kzGpm%SS0=|o4x+#JU=B(+YnGB0-eco;9E%$ zIHE%JbFQW9uPwhV>X*6|in>kWXW1JL|2Mk5;_5$lHXj#v| WktF$(NlJSP$k(2(elF{r5}E+-!f_A) diff --git a/icons/mob/inhands/antag/balloons_righthand.dmi b/icons/mob/inhands/antag/balloons_righthand.dmi index e417c1cfed879313011c436c702be1a02711a8a5..3d026d516d05ba9b180ddb2c16a7504ebe3571b4 100644 GIT binary patch delta 854 zcmaFI{+E5imU|9x~4bUBn)OPDJ zpPb0>#Dk$og~3v&L8hM5p^qivz?pkVJ^kCyUG#eUG&_vp$|7%t`1ARleGH-tY89hW z&YxqcvdcJs$6Gc!K*ZsWy%f_4WHUfUD7Z6CP-X-P^C-3m%=bI`GvW8w4Y%hzPXBPN z^-lk_H-iwcyIt;rD?@$r+4nY-`)rm^uw7AR?l?7n!Rtf z|7^Sd&kYO3FRw*UW47pO3rniy=u6;_7;svppJEFTCTiTl|$V z4ax6Y><;u)uT19NV#i=fz}E@(YHM5Mq^D0xnLp36zIA`?e4ApqhfhJ?nfK=8*@d5< zpOrgi*uq!81RNr>-gGjw7v8BiyV?uozkIy(`G2{--Lmg)fknFBOlCOwkm-ZxO-oQ3 zTCDnei|VI^>st8!rs}PV`I#zk#R@)q2Gf!Bo*dT)%x$tzu b>2S{8OJVoipT1Fv3_#%N>gTe~DWM4f8DW_9 delta 839 zcmey%{*HaZmU>lB7srr_IdA8B=RGzMaJeaT-R^kG?B>)7!Yn%vuoQ31Den7d<#zs* z*BX9Tvo#SpORaFA08ajp^_BW}|X2y(xJ&ZM-YN8%-to(+ex3W$Z|~Zlbj&T1 zY`EA_c&759k-?&U6J7_d{QGGAeQ8-c`|YAXnq6uYuP+Y!{YaqTjO4izUXUpong6>w zBdvPQ&sv&%|9t&w7sXfHJLPz9`3gH;-<`+5CChxi=jNHVyMF(ky7lgy4*e%lS2C_A zD_C+dAftLqt^-`}{^h0hZ@+fY>+R#$ISc{5(;e#O-52`GAiChLfNtXaxtu*U7v}90 zmyZtMY1mP3!ZKko15PwK*z4q*trqfc{%yKF-x1`+b?&Rb<$Qa!|KFZ9buZ@mo`;6X z!?O$epJ&!TZr`rGYPTRbTrSS@?zNi-37B>6Ys+dmRh}qcBi{v7pU<`28V(> zBTl5gyk)O%6lboqdFrCt8^v{v^|kgli{&1I{q6Gm(Y=G|e9MEqWWRZUy&d(o^3nr7 zuoKsQJ3Zsf-}>wuW!87D3WI#$_12joZ8y(_yPNid`C@OKy`Q{W*Rt!sQG8(Jk5qvp zWiM4hY2)GoTYmMlUA!e=&Z@h2WUC%6Zc%Gm*0VLcwt;uuP3|aphc%1PBWcZpgnYL7 z7k@D*PniFFyNj&@YlgW)%Qbe1LVde!4zHOfELLogVa18&{68pieQj=7TOtDxc)I$z JtaD0e0ssKhi*Nt{ diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi index 43a6a127cedb5f12731f44dec0f8ae7137ecd882..2787cfd8e01224d406af2db99a7183213499e649 100644 GIT binary patch literal 119323 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%0AO8;vaQsXk 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

1FxmR-Dhbq`At)Tit?v+N1-es1d5gVwpgy2* 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 literal 119243 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

}ys;PPT$Pm##=_7%yB7Y9*ookk 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 Date: Fri, 16 Feb 2018 21:14:55 +0000 Subject: [PATCH 19/60] New UI icon --- .../carbon/human/species_types/furrypeople.dm | 4 ++-- icons/mob/actions/actions_slime.dmi | Bin 4717 -> 5394 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index 54cf0598ba..7e30abd49c 100644 --- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -241,7 +241,7 @@ attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' - +//##########SLIMEPEOPLE########## /datum/species/jelly/roundstartslime name = "Slimeperson" @@ -261,7 +261,7 @@ /datum/action/innate/slime_change name = "Alter Form" check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "slimesplit" //placeholder + button_icon_state = "alter_form" //placeholder icon_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" diff --git a/icons/mob/actions/actions_slime.dmi b/icons/mob/actions/actions_slime.dmi index acf7a31c6ed9f353ddd8c63149619c3c4d8ff8b6..23fd6e3e8afc65027a2d6cd78ee93131a7a4ed80 100644 GIT binary patch literal 5394 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 literal 4717 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 From 24ab7e0a84418f10f6f2ad9fe409155594b2ab5e Mon Sep 17 00:00:00 2001 From: BordListian Date: Sat, 17 Feb 2018 07:46:32 +0100 Subject: [PATCH 20/60] Adds rainbow slime clusterbangs (#35707) * - slime - yes * - Adds a volatile reaction * - There is no escape from the standards that live within - Can't wait for the experimentor review --- .../objects/items/grenades/clusterbuster.dm | 93 +++++++++++++----- .../chemistry/recipes/slime_extracts.dm | 30 +++++- icons/obj/grenade.dmi | Bin 12945 -> 24053 bytes 3 files changed, 93 insertions(+), 30 deletions(-) diff --git a/code/game/objects/items/grenades/clusterbuster.dm b/code/game/objects/items/grenades/clusterbuster.dm index 167c3114ec..7064bf6015 100644 --- a/code/game/objects/items/grenades/clusterbuster.dm +++ b/code/game/objects/items/grenades/clusterbuster.dm @@ -6,28 +6,31 @@ name = "clusterbang" icon = 'icons/obj/grenade.dmi' icon_state = "clusterbang" + var/base_state = "clusterbang" var/payload = /obj/item/grenade/flashbang/cluster + var/payload_spawner = /obj/effect/payload_spawner + var/prime_sound = 'sound/weapons/armbomb.ogg' + var/min_spawned = 4 + var/max_spawned = 8 + var/segment_chance = 35 /obj/item/grenade/clusterbuster/prime() update_mob() - var/numspawned = rand(4,8) + var/numspawned = rand(min_spawned,max_spawned) var/again = 0 for(var/more = numspawned,more > 0,more--) - if(prob(35)) + if(prob(segment_chance)) again++ numspawned-- - for(var/loop = again ,loop > 0, loop--) - new /obj/item/grenade/clusterbuster/segment(loc, payload)//Creates 'segments' that launches a few more payloads - - new /obj/effect/payload_spawner(loc, payload, numspawned)//Launches payload - - playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) + for(var/loop in 1 to again) + new /obj/item/grenade/clusterbuster/segment(drop_location(), src)//Creates 'segments' that launches a few more payloads + new payload_spawner(drop_location(), payload, numspawned)//Launches payload + playsound(src, prime_sound, 75, 1, -3) qdel(src) - ////////////////////// //Clusterbang segment ////////////////////// @@ -36,38 +39,64 @@ name = "clusterbang segment" icon = 'icons/obj/grenade.dmi' icon_state = "clusterbang_segment" + base_state = "clusterbang_segment" -/obj/item/grenade/clusterbuster/segment/New(var/loc, var/payload_type = /obj/item/grenade/flashbang/cluster) - ..() - icon_state = "clusterbang_segment_active" - payload = payload_type - active = 1 +/obj/item/grenade/clusterbuster/segment/Initialize(mapload, obj/item/grenade/clusterbuster/base) + . = ..() + if(base) + name = "[base.name] segment" + base_state = "[base.base_state]_segment" + icon_state = base_state + payload_spawner = base.payload_spawner + payload = base.payload + prime_sound = base.prime_sound + min_spawned = base.min_spawned + max_spawned = base.max_spawned + icon_state = "[base_state]_active" + active = TRUE walk_away(src,loc,rand(1,4)) addtimer(CALLBACK(src, .proc/prime), rand(15,60)) /obj/item/grenade/clusterbuster/segment/prime() - - new /obj/effect/payload_spawner(loc, payload, rand(4,8)) - - playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3) - + new payload_spawner(drop_location(), payload, rand(min_spawned,max_spawned)) + playsound(src, prime_sound, 75, 1, -3) qdel(src) ////////////////////////////////// //The payload spawner effect ///////////////////////////////// -/obj/effect/payload_spawner/New(var/turf/newloc,var/type, var/numspawned as num) +/obj/effect/payload_spawner/Initialize(mapload, type, numspawned) + ..() + spawn_payload(type, numspawned) + return INITIALIZE_HINT_QDEL - for(var/loop = numspawned ,loop > 0, loop--) +/obj/effect/payload_spawner/proc/spawn_payload(type, numspawned) + for(var/loop in 1 to numspawned) var/obj/item/grenade/P = new type(loc) - P.active = 1 + if(istype(P)) + P.active = TRUE + addtimer(CALLBACK(P, /obj/item/grenade/proc/prime), rand(15,60)) walk_away(P,loc,rand(1,4)) - spawn(rand(15,60)) - if(P && !QDELETED(P)) - P.prime() - qdel(src) +/obj/effect/payload_spawner/random_slime + var/volatile = FALSE +/obj/effect/payload_spawner/random_slime/volatile + volatile = TRUE + +/obj/item/slime_extract/proc/activate_slime() + var/list/slime_chems = list("plasma","water","blood") + for(var/i in 1 to slime_chems.len) + if(!QDELETED(src)) + reagents.add_reagent(pick_n_take(slime_chems),5) //Add them in random order so we get all effects + +/obj/effect/payload_spawner/random_slime/spawn_payload(type, numspawned) + for(var/loop = numspawned ,loop > 0, loop--) + var/chosen = pick(subtypesof(/obj/item/slime_extract)) + var/obj/item/slime_extract/P = new chosen(loc) + if(volatile) + addtimer(CALLBACK(P, /obj/item/slime_extract/proc/activate_slime), rand(15,60)) + walk_away(P,loc,rand(1,4)) ////////////////////////////////// //Custom payload clusterbusters @@ -127,7 +156,6 @@ name = "WELCOME TO HELL" payload = /obj/item/grenade/chem_grenade/clf3 - //random clusterbuster spawner /obj/item/grenade/clusterbuster/random icon_state = "random_clusterbang" @@ -136,3 +164,14 @@ var/real_type = pick(subtypesof(/obj/item/grenade/clusterbuster)) new real_type(loc) qdel(src) + +//rainbow slime effect +/obj/item/grenade/clusterbuster/slime + name = "Blorble Blorble" + icon_state = "slimebang" + base_state = "slimebang" + payload_spawner = /obj/effect/payload_spawner/random_slime + prime_sound = 'sound/effects/bubbles.ogg' + +/obj/item/grenade/clusterbuster/slime/volatile + payload_spawner = /obj/effect/payload_spawner/random_slime/volatile diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 52d12e8eb1..bf698300e8 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -609,9 +609,33 @@ required_other = 1 required_container = /obj/item/slime_extract/rainbow -/datum/chemical_reaction/slime/slimeRNG/on_reaction(datum/reagents/holder) - var/mob/living/simple_animal/slime/random/S = new (get_turf(holder.my_atom)) - S.visible_message("Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!") +/datum/chemical_reaction/slime/slimeRNG/on_reaction(datum/reagents/holder, created_volume) + if(created_volume >= 5) + var/obj/item/grenade/clusterbuster/slime/S = new (holder.my_atom.loc) + S.visible_message("Infused with plasma, the core begins to expand uncontrollably!") + S.icon_state = "[S.base_state]_active" + S.active = TRUE + addtimer(CALLBACK(S, /obj/item/grenade.proc/prime), rand(15,60)) + qdel(holder.my_atom) //deleto + else + var/mob/living/simple_animal/slime/random/S = new (holder.my_atom.loc) + S.visible_message("Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!") + ..() + +/datum/chemical_reaction/slime/slimebomb + name = "Clusterblorble" + id = "slimebomb" + required_reagents = list("slimejelly" = 1) + required_other = 1 + required_container = /obj/item/slime_extract/rainbow + +/datum/chemical_reaction/slime/slimebomb/on_reaction(datum/reagents/holder, created_volume) + var/obj/item/grenade/clusterbuster/slime/volatile/S = new (holder.my_atom.loc) + S.visible_message("Infused with slime jelly, the core begins to expand uncontrollably!") + S.icon_state = "[S.base_state]_active" + S.active = TRUE + addtimer(CALLBACK(S, /obj/item/grenade.proc/prime), rand(15,60)) + qdel(holder.my_atom) //deleto ..() /datum/chemical_reaction/slime/slime_transfer diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi index 7f4d65e081c83dedab10dabf287151b9e636005b..9be47e5ef271622f57c48314d5aedd89477a2fb1 100644 GIT binary patch literal 24053 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 Ktx`?9$o~SV0?zON From 48f6e722933da96d8c422073fd562cf5f84abb71 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sat, 17 Feb 2018 01:47:19 -0500 Subject: [PATCH 22/60] Merge pull request #35716 from AnturK/slipspace Fixes wet space. --- code/game/turfs/space/space.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index e446eb3b2c..ba93f18a8d 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -149,6 +149,10 @@ stoplag()//Let a diagonal move finish, if necessary A.newtonian_move(A.inertia_dir) + +/turf/open/space/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0) + return + /turf/open/space/handle_slip() return From cbb11e81e636d0fd95493947bd20666e7ab5efc0 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Sat, 17 Feb 2018 01:47:09 -0500 Subject: [PATCH 24/60] Merge pull request #35717 from AnturK/robolove Fixes AI dating --- code/game/gamemodes/objective.dm | 8 ++++++-- code/modules/antagonists/valentines/valentine.dm | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 3fd5d2277e..15ddee2669 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -221,8 +221,9 @@ GLOBAL_LIST_EMPTY(objectives) explanation_text = "Free Objective" /datum/objective/protect//The opposite of killing a dude. - var/target_role_type=0 martyr_compatible = 1 + var/target_role_type = 0 + var/human_check = TRUE /datum/objective/protect/find_target_by_role(role, role_type=0, invert=0) if(!invert) @@ -231,7 +232,7 @@ GLOBAL_LIST_EMPTY(objectives) return target /datum/objective/protect/check_completion() - return !target || considered_alive(target) + return !target || considered_alive(target, enforce_human = human_check) /datum/objective/protect/update_explanation_text() ..() @@ -240,6 +241,9 @@ GLOBAL_LIST_EMPTY(objectives) else explanation_text = "Free Objective" +/datum/objective/protect/nonhuman + human_check = FALSE + /datum/objective/hijack explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody." team_explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody. Leave no team member behind." diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm index 1ca8e39318..b29c4d6bf3 100644 --- a/code/modules/antagonists/valentines/valentine.dm +++ b/code/modules/antagonists/valentines/valentine.dm @@ -8,6 +8,8 @@ var/datum/objective/protect/protect_objective = new /datum/objective/protect protect_objective.owner = owner protect_objective.target = date + if(!ishuman(date.current)) + protect_objective.human_check = FALSE protect_objective.explanation_text = "Protect [date.name], your date." objectives += protect_objective owner.objectives += objectives From a918a0647877f79e96aa4e403ea4c2d41913619c Mon Sep 17 00:00:00 2001 From: TankNut Date: Fri, 16 Feb 2018 20:50:15 +0100 Subject: [PATCH 26/60] Map spawned corpses start with their suit sensors turned off --- code/modules/awaymissions/corpse.dm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 57cce8a656..f62d5ff15e 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -181,6 +181,15 @@ var/obj/item/device/pda/PDA = locate(/obj/item/device/pda) in H if(PDA) PDA.toff = TRUE +<<<<<<< HEAD +======= + if(disable_sensors) + // Using crew monitors to find corpses while creative makes finding certain ruins too easy. + var/obj/item/clothing/under/C = H.wear_suit + if(C) + C.sensor_mode = NO_SENSORS + +>>>>>>> b8b5084... Swaps locate for direct assignment var/obj/item/card/id/W = H.wear_id if(W) if(id_access) From f0be955c17721d124f2e1e7ce6277672fe4cbf16 Mon Sep 17 00:00:00 2001 From: yorii Date: Sat, 17 Feb 2018 16:37:18 +0100 Subject: [PATCH 27/60] Adds Modafinil properly this time. (#34908) * Adds modafinil, a sleep suppressant * Adds recipe for modafinil Yes I'm afraid of git now * Fixed modafinil sleepimmune ids and OD to 15u During testing 10u was simply much too low * Change OD sleeping proc to use ignore_sleepimmune * Fixed stuff to modafinil --- .../chemistry/reagents/medicine_reagents.dm | 68 +++++++++++++++++++ .../reagents/chemistry/recipes/medicine.dm | 7 ++ 2 files changed, 75 insertions(+) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 789b92a9b9..ee25eed30d 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1207,3 +1207,71 @@ /datum/reagent/medicine/muscle_stimulant/on_mob_delete(mob/living/M) . = ..() M.remove_trait(TRAIT_IGNORESLOWDOWN, id) + +/datum/reagent/medicine/modafinil + name = "Modafinil" + id = "modafinil" + description = "Long-lasting sleep suppressant that very slightly reduces stun and knockdown times. Overdosing has horrendous side effects and deals lethal oxygen damage, will knock you unconscious if not dealt with." + reagent_state = LIQUID + color = "#BEF7D8" // palish blue white + metabolization_rate = 0.1 * REAGENTS_METABOLISM + overdose_threshold = 20 // with the random effects this might be awesome or might kill you at less than 10u (extensively tested) + taste_description = "salt" // it actually does taste salty + var/overdose_progress = 0 // to track overdose progress + +/datum/reagent/medicine/modafinil/on_mob_add(mob/living/M) + M.add_trait(TRAIT_SLEEPIMMUNE, id) + ..() + +/datum/reagent/medicine/modafinil/on_mob_delete(mob/living/M) + M.remove_trait(TRAIT_SLEEPIMMUNE, id) + ..() + +/datum/reagent/medicine/modafinil/on_mob_life(mob/living/M) + if(!overdosed) // We do not want any effects on OD + overdose_threshold = overdose_threshold + rand(-10,10)/10 // for extra fun + M.AdjustStun(-5, 0) + M.AdjustKnockdown(-5, 0) + M.AdjustUnconscious(-5, 0) + M.adjustStaminaLoss(-0.5*REM, 0) + M.Jitter(1) + metabolization_rate = 0.01 * REAGENTS_METABOLISM * rand(5,20) // randomizes metabolism between 0.02 and 0.08 per tick + . = 1 + ..() + +/datum/reagent/medicine/modafinil/overdose_start(mob/living/M) + to_chat(M, "You feel awfully out of breath and jittery!") + metabolization_rate = 0.025 * REAGENTS_METABOLISM // sets metabolism to 0.01 per tick on overdose + +/datum/reagent/medicine/modafinil/overdose_process(mob/living/M) + overdose_progress++ + switch(overdose_progress) + if(1 to 40) + M.jitteriness = min(M.jitteriness+1, 10) + M.stuttering = min(M.stuttering+1, 10) + M.Dizzy(5) + if(prob(50)) + M.losebreath++ + if(41 to 80) + M.adjustOxyLoss(0.1*REM, 0) + M.adjustStaminaLoss(0.1*REM, 0) + M.jitteriness = min(M.jitteriness+1, 20) + M.stuttering = min(M.stuttering+1, 20) + M.Dizzy(10) + if(prob(50)) + M.losebreath++ + if(prob(20)) + to_chat(M, "You have a sudden fit!") + M.emote("moan") + M.Knockdown(20, 1, 0) // you should be in a bad spot at this point unless epipen has been used + if(81) + to_chat(M, "You feel too exhausted to continue!") // at this point you will eventually die unless you get charcoal + M.adjustOxyLoss(0.1*REM, 0) + M.adjustStaminaLoss(0.1*REM, 0) + if(82 to INFINITY) + M.Sleeping(100, 0, TRUE) + M.adjustOxyLoss(1.5*REM, 0) + M.adjustStaminaLoss(1.5*REM, 0) + ..() + . = 1 + diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index f80f4114b5..dc7c32d925 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -245,3 +245,10 @@ results = list("morphine" = 2) required_reagents = list("carbon" = 2, "hydrogen" = 2, "ethanol" = 1, "oxygen" = 1) required_temp = 480 + +/datum/chemical_reaction/modafinil + name = "Modafinil" + id = "modafinil" + results = list("modafinil" = 5) + required_reagents = list("diethylamine" = 1, "ammonia" = 1, "phenol" = 1, "acetone" = 1, "sacid" = 1) + required_catalysts = list("bromine" = 1) // as close to the real world synthesis as possible From 7214836012fd9299be4b54a5d443a21b1a2d1660 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Sat, 17 Feb 2018 17:38:57 +0200 Subject: [PATCH 29/60] Merge pull request #35734 from ShizCalev/path-cleanup Cleans up unused /area paths --- code/game/area/Space_Station_13_areas.dm | 186 ---------------------- code/game/area/areas/mining.dm | 6 - code/game/area/areas/misc.dm | 122 -------------- code/game/area/areas/space_content.dm | 98 ------------ code/game/objects/items/blueprints.dm | 3 +- code/game/turfs/simulated/dirtystation.dm | 3 - tgstation.dme | 2 - 7 files changed, 1 insertion(+), 419 deletions(-) delete mode 100644 code/game/area/areas/misc.dm delete mode 100644 code/game/area/areas/space_content.dm diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index 15504ebab0..d65d28507c 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -95,16 +95,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station . = ..() set_dynamic_lighting() -/area/planet/clown - name = "Clown Planet" - icon_state = "honk" - requires_power = FALSE - -/area/telesciareas - name = "Cosmic Anomaly" - icon_state = "telesci" - requires_power = FALSE - //STATION13 @@ -258,105 +248,10 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon_state = "disposal" /area/maintenance/disposal/incinerator -// /area/maintenance/incinerator name = "Incinerator" icon_state = "disposal" -//Cere / Asteroid Specific - -/area/maintenance/asteroid/aft/science - name = "Aft Maintenance" - icon_state = "amaint" - -/area/maintenance/asteroid/aft/arrivals - name = "Aft Maintenance" - icon_state = "amaint" - -/area/maintenance/asteroid/central - name = "Central Asteroid Maintenance" - icon_state = "maintcentral" - -/area/maintenance/asteroid/disposal - icon_state = "disposal" - -/area/maintenance/asteroid/disposal/north - name = "Northern Disposal" - -/area/maintenance/asteroid/disposal/north/east - name = "North-Eastern Disposal" - -/area/maintenance/asteroid/disposal/north/west - name = "North-Western Disposal" - -/area/maintenance/asteroid/disposal/east - name = "Eastern Disposal" - -/area/maintenance/asteroid/disposal/west - name = "Western Disposal" - -/area/maintenance/asteroid/disposal/west/secondary - name = "Secondary Western Disposal" - -/area/maintenance/asteroid/disposal/south - name = "Southern Disposal" - -/area/maintenance/asteroid/disposal/south/west - name = "South-Western Disposal" - -/area/maintenance/asteroid/disposal/external/east - name = "Eastern External Waste Belt" - -/area/maintenance/asteroid/disposal/external/north - name = "Northern External Waste Belt" - -/area/maintenance/asteroid/disposal/external/southeast - name = "South-Eastern External Waste Belt" - -/area/maintenance/asteroid/disposal/external/southwest - name = "South-Western External Waste Belt" - -/area/maintenance/asteroid/fore/cargo_west - name = "Fore Asteroid Maintenance" - icon_state = "fmaint" - -/area/maintenance/asteroid/fore/cargo_south - name = "Fore Asteroid Maintenance" - icon_state = "fmaint" - -/area/maintenance/asteroid/fore/com_west - name = "Fore Asteroid Maintenance" - icon_state = "fmaint" - -/area/maintenance/asteroid/fore/com_north - name = "Fore Asteroid Maintenance" - icon_state = "fmaint" - -/area/maintenance/asteroid/fore/com_east - name = "Fore Asteroid Maintenance" - icon_state = "fmaint" - -/area/maintenance/asteroid/fore/com_south - name = "Fore Asteroid Maintenance" - icon_state = "fmaint" - -/area/maintenance/asteroid/port/neast - name = "Port Asteroid Maintenance" - icon_state = "pmaint" - -/area/maintenance/asteroid/port/east - name = "Port Asteroid Maintenance" - icon_state = "pmaint" - -/area/maintenance/asteroid/port/west - name = "Port Asteroid Maintenance" - icon_state = "pmaint" - -/area/maintenance/asteroid/starboard - name = "Starboard Asteroid Maintenance" - icon_state = "smaint" - - //Hallway /area/hallway/primary/aft @@ -419,42 +314,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Service Hallway" icon_state = "hall_service" -/area/hallway/secondary/bridges/cargo_ai - name = "Cargo-AI-Command Bridge" - icon_state = "yellow" - -/area/hallway/secondary/bridges/com_engi - name = "Command-Engineering Bridge" - icon_state = "yellow" - -/area/hallway/secondary/bridges/com_serv - name = "Command-Service Bridge" - icon_state = "yellow" - -/area/hallway/secondary/bridges/dock_med - name = "Docking-Medical Bridge" - icon_state = "yellow" - -/area/hallway/secondary/bridges/engi_med - name = "Engineering-Medical Bridge" - icon_state = "yellow" - -/area/hallway/secondary/bridges/med_cargo - name = "Medical-Cargo Bridge" - icon_state = "yellow" - -/area/hallway/secondary/bridges/sci_dock - name = "Science-Docking Bridge" - icon_state = "yellow" - -/area/hallway/secondary/bridges/serv_engi - name = "Service-Engineering Bridge" - icon_state = "yellow" - -/area/hallway/secondary/bridges/serv_sci - name = "Service-Science Bridge" - icon_state = "yellow" - //Command /area/bridge @@ -745,18 +604,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station flags_1 = NONE ambientsounds = ENGINEERING -/area/solar/asteroid/aft - name = "Aft Asteroid Solar" - icon_state = "panelsA" - -/area/solar/asteroid/command - name = "Command Asteroid Solar" - icon_state = "panelsA" - -/area/solar/asteroid/fore - name = "Fore Asteroid Solar" - icon_state = "panelsA" - /area/solar/fore name = "Fore Solar Array" icon_state = "yellow" @@ -804,18 +651,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Solar Maintenance" icon_state = "yellow" -/area/maintenance/solars/asteroid/aft - name = "Aft Asteroid Solar Maintenance" - icon_state = "SolarcontrolA" - -/area/maintenance/solars/asteroid/command - name = "Command Asteroid Solar Maintenance" - icon_state = "SolarcontrolP" - -/area/maintenance/solars/asteroid/fore - name = "Fore Asteroid Solar Maintenance" - icon_state = "SolarcontrolP" - /area/maintenance/solars/port name = "Port Solar Maintenance" icon_state = "SolarcontrolP" @@ -872,22 +707,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station music = "signal" ambientsounds = ENGINEERING -/area/teleporter/quantum/cargo - name = "Cargo Quantum Pad" - icon_state = "teleporter" - -/area/teleporter/quantum/docking - name = "Docking Quantum Pad" - icon_state = "teleporter" - -/area/teleporter/quantum/research - name = "Research Quantum Pad" - icon_state = "teleporter" - -/area/teleporter/quantum/security - name = "Security Quantum Pad" - icon_state = "teleporter" - /area/gateway name = "Gateway" icon_state = "gateway" @@ -1458,11 +1277,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "AI Sat Ext" icon_state = "storage" -/area/ai_monitored/turret_protected/NewAIMain - name = "AI Main New" - icon_state = "storage" - - // Telecommunications Satellite diff --git a/code/game/area/areas/mining.dm b/code/game/area/areas/mining.dm index bf5642b7af..493f36dd8d 100644 --- a/code/game/area/areas/mining.dm +++ b/code/game/area/areas/mining.dm @@ -65,12 +65,6 @@ /area/mine/sleeper name = "Mining Station Emergency Sleeper" -/area/mine/north_outpost - name = "North Mining Outpost" - -/area/mine/west_outpost - name = "West Mining Outpost" - /area/mine/laborcamp name = "Labor Camp" diff --git a/code/game/area/areas/misc.dm b/code/game/area/areas/misc.dm deleted file mode 100644 index 7faeb6b51a..0000000000 --- a/code/game/area/areas/misc.dm +++ /dev/null @@ -1,122 +0,0 @@ - -// Hell -/area/hell - name = "Hell Lobby" - //icon = "ICON FILENAME" - //icon_state = "NAME OF ICON" - requires_power = FALSE - ambientsounds = SPOOKY - -/area/hell/trial1 - name = "Hell Trial1" - //icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) - -/area/hell/trial1 - name = "Hell Trial2" - //icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) - -/area/hell/trial1 - name = "Hell Trial3" - //icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) - - - -//Misc - -/area/generic - name = "Unknown" - icon_state = "storage" - - - -//PRISON -/area/prison - name = "Prison Station" - icon_state = "brig" - ambientsounds = HIGHSEC - -/area/prison/arrival_airlock - name = "Prison Station Airlock" - icon_state = "green" - requires_power = FALSE - -/area/prison/control - name = "Prison Security Checkpoint" - icon_state = "security" - -/area/prison/crew_quarters - name = "Prison Security Quarters" - icon_state = "security" - -/area/prison/rec_room - name = "Prison Rec Room" - icon_state = "green" - -/area/prison/closet - name = "Prison Supply Closet" - icon_state = "dk_yellow" - -/area/prison/hallway/fore - name = "Prison Fore Hallway" - icon_state = "yellow" - -/area/prison/hallway/aft - name = "Prison Aft Hallway" - icon_state = "yellow" - -/area/prison/hallway/port - name = "Prison Port Hallway" - icon_state = "yellow" - -/area/prison/hallway/starboard - name = "Prison Starboard Hallway" - icon_state = "yellow" - -/area/prison/morgue - name = "Prison Morgue" - icon_state = "morgue" - ambientsounds = SPOOKY - -/area/prison/medical_research - name = "Prison Genetic Research" - icon_state = "medresearch" - -/area/prison/medical - name = "Prison Medbay" - icon_state = "medbay" - -/area/prison/solar - name = "Prison Solar Array" - icon_state = "storage" - requires_power = FALSE - -/area/prison/podbay - name = "Prison Podbay" - icon_state = "dk_yellow" - -/area/prison/solar_control - name = "Prison Solar Array Control" - icon_state = "dk_yellow" - -/area/prison/solitary - name = "Solitary Confinement" - icon_state = "brig" - -/area/prison/execution_room - name = "Prisoner Education Chamber" - icon_state = "execution_room" - -/area/prison/cell_block/a -// /area/prison/cell_block/A - name = "Prison Cell Block A" - icon_state = "brig" - -/area/prison/cell_block/b -// /area/prison/cell_block/B - name = "Prison Cell Block B" - icon_state = "brig" - -/area/prison/cell_block/c -// /area/prison/cell_block/C - name = "Prison Cell Block C" - icon_state = "brig" diff --git a/code/game/area/areas/space_content.dm b/code/game/area/areas/space_content.dm deleted file mode 100644 index e605faa6e5..0000000000 --- a/code/game/area/areas/space_content.dm +++ /dev/null @@ -1,98 +0,0 @@ - - -/area/spacecontent - name = "space" - ambientsounds = AWAY_MISSION - -/area/spacecontent/a1 - icon_state = "spacecontent1" - -/area/spacecontent/a2 - icon_state = "spacecontent2" - -/area/spacecontent/a3 - icon_state = "spacecontent3" - -/area/spacecontent/a4 - icon_state = "spacecontent4" - -/area/spacecontent/a5 - icon_state = "spacecontent5" - -/area/spacecontent/a6 - icon_state = "spacecontent6" - -/area/spacecontent/a7 - icon_state = "spacecontent7" - -/area/spacecontent/a8 - icon_state = "spacecontent8" - -/area/spacecontent/a9 - icon_state = "spacecontent9" - -/area/spacecontent/a10 - icon_state = "spacecontent10" - -/area/spacecontent/a11 - icon_state = "spacecontent11" - -/area/spacecontent/a11 - icon_state = "spacecontent12" - -/area/spacecontent/a12 - icon_state = "spacecontent13" - -/area/spacecontent/a13 - icon_state = "spacecontent14" - -/area/spacecontent/a14 - icon_state = "spacecontent14" - -/area/spacecontent/a15 - icon_state = "spacecontent15" - -/area/spacecontent/a16 - icon_state = "spacecontent16" - -/area/spacecontent/a17 - icon_state = "spacecontent17" - -/area/spacecontent/a18 - icon_state = "spacecontent18" - -/area/spacecontent/a19 - icon_state = "spacecontent19" - -/area/spacecontent/a20 - icon_state = "spacecontent20" - -/area/spacecontent/a21 - icon_state = "spacecontent21" - -/area/spacecontent/a22 - icon_state = "spacecontent22" - -/area/spacecontent/a23 - icon_state = "spacecontent23" - -/area/spacecontent/a24 - icon_state = "spacecontent24" - -/area/spacecontent/a25 - icon_state = "spacecontent25" - -/area/spacecontent/a26 - icon_state = "spacecontent26" - -/area/spacecontent/a27 - icon_state = "spacecontent27" - -/area/spacecontent/a28 - icon_state = "spacecontent28" - -/area/spacecontent/a29 - icon_state = "spacecontent29" - -/area/spacecontent/a30 - icon_state = "spacecontent30" diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 958b9ff8b0..e3c74a4ddf 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -146,8 +146,7 @@ /area/centcom, /area/asteroid, /area/tdome, - /area/wizard_station, - /area/prison + /area/wizard_station ) for (var/type in SPECIALS) if ( istype(A,type) ) diff --git a/code/game/turfs/simulated/dirtystation.dm b/code/game/turfs/simulated/dirtystation.dm index c411d4b6b1..e29d75a248 100644 --- a/code/game/turfs/simulated/dirtystation.dm +++ b/code/game/turfs/simulated/dirtystation.dm @@ -28,8 +28,6 @@ var/static/list/high_dirt_areas = typecacheof(list(/area/science/test_area, /area/mine/production, /area/mine/living_quarters, - /area/mine/north_outpost, - /area/mine/west_outpost, /area/ruin/space)) if(is_type_in_typecache(A, high_dirt_areas)) new /obj/effect/decal/cleanable/dirt(src) //vanilla, but it works @@ -84,7 +82,6 @@ //Areas where gibs will be present. Robusting probably happened some time ago. var/static/list/gib_covered_areas = typecacheof(list(/area/ai_monitored/turret_protected, - /area/prison, /area/security, /area/crew_quarters/heads/hos)) if(is_type_in_typecache(A, gib_covered_areas)) diff --git a/tgstation.dme b/tgstation.dme index 2534f97c3e..cefa598147 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -482,9 +482,7 @@ #include "code\game\area\areas\centcom.dm" #include "code\game\area\areas\holodeck.dm" #include "code\game\area\areas\mining.dm" -#include "code\game\area\areas\misc.dm" #include "code\game\area\areas\shuttles.dm" -#include "code\game\area\areas\space_content.dm" #include "code\game\area\areas\ruins\_ruins.dm" #include "code\game\area\areas\ruins\lavaland.dm" #include "code\game\area\areas\ruins\space.dm" From 22fb75d2a64b9c2cc7e3380e71ba5537ee6a9fa6 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Sat, 17 Feb 2018 17:38:17 +0200 Subject: [PATCH 31/60] Merge pull request #35735 from coiax/fire-proof-hands RESISTHOT species can put out fires with their hands --- code/game/objects/items.dm | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 9ac53cc85b..697c84ee0c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -245,18 +245,23 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(resistance_flags & ON_FIRE) var/mob/living/carbon/C = user - if(istype(C)) - if(C.gloves && (C.gloves.max_heat_protection_temperature > 360)) - extinguish() - to_chat(user, "You put out the fire on [src].") - else - to_chat(user, "You burn your hand on [src]!") - var/obj/item/bodypart/affecting = C.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") - if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage - C.update_damage_overlays() - return - else + var/can_handle_hot = FALSE + if(!istype(C)) + can_handle_hot = TRUE + else if(C.gloves && (C.gloves.max_heat_protection_temperature > 360)) + can_handle_hot = TRUE + else if(RESISTHOT in C.dna.species.species_traits) + can_handle_hot = TRUE + + if(can_handle_hot) extinguish() + to_chat(user, "You put out the fire on [src].") + else + to_chat(user, "You burn your hand on [src]!") + var/obj/item/bodypart/affecting = C.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") + if(affecting && affecting.receive_damage( 0, 5 )) // 5 burn damage + C.update_damage_overlays() + return if(acid_level > 20 && !ismob(loc))// so we can still remove the clothes on us that have acid. var/mob/living/carbon/C = user From 6784d463ab51bdababb8f2c6e9a6aeba381a6135 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 17 Feb 2018 09:56:53 -0600 Subject: [PATCH 33/60] Automatic changelog generation for PR #5540 [ci skip] --- html/changelogs/AutoChangeLog-pr-5540.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5540.yml diff --git a/html/changelogs/AutoChangeLog-pr-5540.yml b/html/changelogs/AutoChangeLog-pr-5540.yml new file mode 100644 index 0000000000..858331ade5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5540.yml @@ -0,0 +1,4 @@ +author: "Modafinil" +delete-after: True +changes: + - rscadd: "Adds new medicine chem that suppresses sleep and very lightly reduces stunrates, has a very low metabolic rate which is randomized and a low overdose treshold. Overdosing is a lethal oxyloss unless treated. (With epipen urgently and with charcoal/calomel before it puts you to sleep)" From 06dd2e2aa5534d0273c7321538dbc2a1f6fc0ddc Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 17 Feb 2018 09:58:42 -0600 Subject: [PATCH 34/60] Update corpse.dm --- code/modules/awaymissions/corpse.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index f62d5ff15e..d57ea83e8f 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -181,15 +181,11 @@ var/obj/item/device/pda/PDA = locate(/obj/item/device/pda) in H if(PDA) PDA.toff = TRUE -<<<<<<< HEAD -======= if(disable_sensors) // Using crew monitors to find corpses while creative makes finding certain ruins too easy. var/obj/item/clothing/under/C = H.wear_suit if(C) C.sensor_mode = NO_SENSORS - ->>>>>>> b8b5084... Swaps locate for direct assignment var/obj/item/card/id/W = H.wear_id if(W) if(id_access) From c64a8a8d6bc69e849a115449205afff9ec2448aa Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Sat, 17 Feb 2018 17:59:54 +0200 Subject: [PATCH 35/60] Merge pull request #35604 from ACCount12/construction_datum_refactor Refactors mech construction datums --- .../helper_datums/construction_datum.dm | 140 +- code/game/mecha/mecha.dm | 3 +- code/game/mecha/mecha_construction_paths.dm | 3000 +++++++++-------- code/game/mecha/mecha_parts.dm | 45 +- 4 files changed, 1588 insertions(+), 1600 deletions(-) diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index 95d2b612d0..d457c60ade 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -1,44 +1,50 @@ -#define FORWARD -1 -#define BACKWARD 1 +#define FORWARD 1 +#define BACKWARD -1 + +#define ITEM_DELETE "delete" +#define ITEM_MOVE_INSIDE "move_inside" + /datum/construction var/list/steps var/atom/holder var/result - var/list/steps_desc + var/index = 1 /datum/construction/New(atom) ..() holder = atom if(!holder) //don't want this without a holder qdel(src) - set_desc(steps.len) - return + update_holder(index) -/datum/construction/proc/next_step() - steps.len-- - if(!steps.len) +/datum/construction/proc/on_step() + if(index > steps.len) spawn_result() else - set_desc(steps.len) - return + update_holder(index) -/datum/construction/proc/action(obj/item/I, mob/user) - return +/datum/construction/proc/action(obj/item/I, mob/living/user) + return check_step(I, user) -/datum/construction/proc/check_step(obj/item/I, mob/user) //check last step only - var/valid_step = is_right_key(I) - if(valid_step) - if(custom_action(valid_step, I, user)) - next_step() - return 1 - return 0 +/datum/construction/proc/update_index(diff) + index += diff + on_step() -/datum/construction/proc/is_right_key(obj/item/I) // returns current step num if I is of the right type. - var/list/L = steps[steps.len] +/datum/construction/proc/check_step(obj/item/I, mob/living/user) + var/diff = is_right_key(I) + if(diff && custom_action(I, user, diff)) + update_index(diff) + return TRUE + return FALSE + +/datum/construction/proc/is_right_key(obj/item/I) // returns index step + var/list/L = steps[index] if(check_used_item(I, L["key"])) - return steps.len - return 0 + return FORWARD //to the first step -> forward + else if(check_used_item(I, L["back_key"])) + return BACKWARD //to the last step -> backwards + return FALSE /datum/construction/proc/check_used_item(obj/item/I, key) if(!key) @@ -52,77 +58,47 @@ return FALSE - -/datum/construction/proc/custom_action(step, obj/item/I, user) - return 1 - -/datum/construction/proc/check_all_steps(obj/item/I, mob/user) //check all steps, remove matching one. - for(var/i=1;i<=steps.len;i++) - var/list/L = steps[i] - if(check_used_item(I, L["key"])) - if(custom_action(i, I, user)) - steps[i] = null//stupid byond list from list removal... - listclearnulls(steps) - if(!steps.len) - spawn_result() - return 1 - return 0 - +/datum/construction/proc/custom_action(obj/item/I, mob/living/user, diff) + return TRUE /datum/construction/proc/spawn_result() if(result) - new result(get_turf(holder)) + new result(drop_location()) qdel(holder) - return -/datum/construction/proc/spawn_mecha_result() - if(result) - var/obj/mecha/m = new result(get_turf(holder)) - var/obj/item/oldcell = locate (/obj/item/stock_parts/cell) in m - QDEL_NULL(oldcell) - m.CheckParts(holder.contents) - SSblackbox.record_feedback("tally", "mechas_created", 1, m.name) - QDEL_NULL(holder) +/datum/construction/proc/update_holder(step_index) + var/list/step = steps[step_index] -/datum/construction/proc/set_desc(index as num) - var/list/step = steps[index] - holder.desc = step["desc"] - return + if(step["desc"]) + holder.desc = step["desc"] + + if(step["icon_state"]) + holder.icon_state = step["icon_state"] /datum/construction/proc/drop_location() return holder.drop_location() -/datum/construction/reversible - var/index -/datum/construction/reversible/New(atom) - ..() - index = steps.len - return -/datum/construction/reversible/proc/update_index(diff as num) - index+=diff - if(index==0) - spawn_result() - else - set_desc(index) - return - -/datum/construction/reversible/is_right_key(obj/item/I) // returns index step - var/list/L = steps[index] - if(check_used_item(I, L["key"])) - return FORWARD //to the first step -> forward - else if(check_used_item(I, L["backkey"])) - return BACKWARD //to the last step -> backwards +// Unordered construction. +// Takes a list of part types, to be added in any order, as steps. +// Calls spawn_result() when every type has been added. +/datum/construction/unordered/check_step(obj/item/I, mob/living/user) + for(var/typepath in steps) + if(istype(I, typepath) && custom_action(I, user, typepath)) + steps -= typepath + on_step() + return TRUE return FALSE -/datum/construction/reversible/check_step(obj/item/I, mob/user) - var/diff = is_right_key(I) - if(diff) - if(custom_action(index, diff, I, user)) - update_index(diff) - return 1 - return 0 +/datum/construction/unordered/on_step() + if(!steps.len) + spawn_result() + else + update_holder(steps.len) -/datum/construction/reversible/custom_action(index, diff, obj/item/I, user) - return 1 +/datum/construction/unordered/update_holder(steps_left) + return + +/datum/construction/unordered/custom_action(obj/item/I, mob/living/user, typepath) + return TRUE diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index db6ef6b6b9..b1d4e065c4 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -206,8 +206,7 @@ /obj/mecha/CheckParts(list/parts_list) ..() - var/obj/item/C = locate(/obj/item/stock_parts/cell) in contents - cell = C + cell = locate(/obj/item/stock_parts/cell) in contents var/obj/item/stock_parts/scanning_module/SM = locate() in contents var/obj/item/stock_parts/capacitor/CP = locate() in contents if(SM) diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index f691586a1b..b8a5cca70e 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -1,1788 +1,1816 @@ //////////////////////////////// ///// Construction datums ////// //////////////////////////////// +/datum/construction/mecha + var/base_icon -/datum/construction/mecha/custom_action(step, obj/item/I, mob/user) - if(I.tool_behaviour == TOOL_WELDER) - if(I.use_tool(holder, user, 0)) - playsound(holder, 'sound/items/welder2.ogg', 50, 1) - else - return FALSE +/datum/construction/mecha/custom_action(obj/item/I, mob/living/user, diff) + var/target_index = index + diff + var/list/current_step = steps[index] + var/list/target_step - else if(I.tool_behaviour) - return I.use_tool(holder, user, 0, volume=50) + if(target_index > 0 && target_index <= steps.len) + target_step = steps[target_index] - else if(istype(I, /obj/item/stack)) - return I.use_tool(holder, user, 0, volume=50, amount=5) + . = TRUE - return TRUE + if(I.tool_behaviour) + . = I.use_tool(holder, user, 0, volume=50) -/datum/construction/reversible/mecha/custom_action(index as num, diff as num, obj/item/I, mob/user) - if(I.tool_behaviour == TOOL_WELDER) - if(I.use_tool(holder, user, 0)) - playsound(holder, 'sound/items/welder2.ogg', 50, 1) - else - return FALSE + else if(diff == FORWARD) + switch(current_step["action"]) + if(ITEM_DELETE) + . = user.transferItemToLoc(I, holder) + if(.) + qdel(I) - else if(I.tool_behaviour) - return I.use_tool(holder, user, 0, volume=50) + if(ITEM_MOVE_INSIDE) + . = user.transferItemToLoc(I, holder) - else if(istype(I, /obj/item/stack)) - return I.use_tool(holder, user, 0, volume=50, amount=5) - - return TRUE + else if(istype(I, /obj/item/stack)) + . = I.use_tool(holder, user, 0, volume=50, amount=current_step["amount"]) -/datum/construction/mecha/ripley_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso), //1 - list("key"=/obj/item/mecha_parts/part/ripley_left_arm), //2 - list("key"=/obj/item/mecha_parts/part/ripley_right_arm), //3 - list("key"=/obj/item/mecha_parts/part/ripley_left_leg), //4 - list("key"=/obj/item/mecha_parts/part/ripley_right_leg)//5 - ) + // Going backwards? Undo the last action. Drop/respawn the items used in last action, if any. + if(. && diff == BACKWARD && target_step && !target_step["no_refund"]) + var/target_step_key = target_step["key"] -/datum/construction/mecha/ripley_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder].") - holder.add_overlay(used_atom.icon_state+"+o") - qdel(used_atom) - return TRUE + switch(target_step["action"]) + if(ITEM_DELETE) + new target_step_key(drop_location()) -/datum/construction/mecha/ripley_chassis/action(atom/used_atom,mob/user) - return check_all_steps(used_atom,user) + if(ITEM_MOVE_INSIDE) + var/obj/item/located_item = locate(target_step_key) in holder + if(located_item) + located_item.forceMove(drop_location()) -/datum/construction/mecha/ripley_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/ripley(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "ripley0" - const_holder.density = TRUE - const_holder.cut_overlays(TRUE) + else if(ispath(target_step_key, /obj/item/stack)) + new target_step_key(drop_location(), target_step["amount"]) + + +/datum/construction/mecha/spawn_result() + if(!result) + return + + // Remove default mech power cell, as we replace it with a new one. + var/obj/mecha/M = new result(drop_location()) + QDEL_NULL(M.cell) + + M.CheckParts(holder.contents) + + SSblackbox.record_feedback("tally", "mechas_created", 1, M.name) + QDEL_NULL(holder) + +/datum/construction/mecha/update_holder(step_index) + ..() + // By default, each step in mech construction has a single icon_state: + // "[base_icon][index - 1]" + // For example, Ripley's step 1 icon_state is "ripley0". + if(!steps[index]["icon_state"] && base_icon) + holder.icon_state = "[base_icon][index - 1]" + +/datum/construction/unordered/mecha_chassis/custom_action(obj/item/I, mob/living/user, typepath) + . = user.transferItemToLoc(I, holder) + if(.) + user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder].") + holder.add_overlay(I.icon_state+"+o") + qdel(I) + +/datum/construction/unordered/mecha_chassis/spawn_result() + holder.icon = 'icons/mecha/mech_construction.dmi' + holder.density = TRUE + holder.cut_overlays() + + var/obj/item/mecha_parts/chassis/chassis = holder + chassis.construct = new result(holder) qdel(src) -/datum/construction/reversible/mecha/ripley - result = /obj/mecha/working/ripley + + +/datum/construction/unordered/mecha_chassis/ripley + result = /datum/construction/mecha/ripley steps = list( - //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. - list("desc"="You shouldn't be able to see this."), + /obj/item/mecha_parts/part/ripley_torso, + /obj/item/mecha_parts/part/ripley_left_arm, + /obj/item/mecha_parts/part/ripley_right_arm, + /obj/item/mecha_parts/part/ripley_left_leg, + /obj/item/mecha_parts/part/ripley_right_leg + ) - //1 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="External armor is wrenched."), - //2 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/stack/sheet/plasteel, - "backkey"=/obj/item/weldingtool, - "desc"="Internal armor is welded."), - //4 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="Internal armor is wrenched."), - //5 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="Internal armor is installed."), - //6 - list("key"=/obj/item/stack/sheet/metal, - "backkey"=/obj/item/screwdriver, - "desc"="The power cell is secured."), - //7 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="The power cell is installed."), - //8 - list("key"=/obj/item/stock_parts/cell, - "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), - //9 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed."), - //10 - list("key"=/obj/item/circuitboard/mecha/ripley/peripherals, - "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), - //11 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), - //12 - list("key"=/obj/item/circuitboard/mecha/ripley/main, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is adjusted."), - //13 - list("key"=/obj/item/wirecutters, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is added."), - //14 - list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/screwdriver, - "desc"="The hydraulic systems are active."), - //15 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/wrench, - "desc"="The hydraulic systems are connected."), - //16 - list("key"=/obj/item/wrench, - "desc"="The hydraulic systems are disconnected.") +/datum/construction/mecha/ripley + result = /obj/mecha/working/ripley + base_icon = "ripley" + steps = list( + //1 + list( + "key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are disconnected." + ), - ) + //2 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are connected." + ), -/datum/construction/reversible/mecha/ripley/action(atom/used_atom,mob/user) - return check_step(used_atom,user) + //3 + list( + "key" = /obj/item/stack/cable_coil, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The hydraulic systems are active." + ), -/datum/construction/reversible/mecha/ripley/custom_action(index, diff, atom/used_atom, mob/user) + //4 + list( + "key" = TOOL_WIRECUTTER, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is added." + ), + + //5 + list( + "key" = /obj/item/circuitboard/mecha/ripley/main, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is adjusted." + ), + + //6 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Central control module is installed." + ), + + //7 + list( + "key" = /obj/item/circuitboard/mecha/ripley/peripherals, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Central control module is secured." + ), + + //8 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Peripherals control module is installed." + ), + + //9 + list( + "key" = /obj/item/stock_parts/cell, + "action" = ITEM_MOVE_INSIDE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Peripherals control module is secured." + ), + + //10 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "The power cell is installed." + ), + + //11 + list( + "key" = /obj/item/stack/sheet/metal, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The power cell is secured." + ), + + //12 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "Internal armor is installed." + ), + + //13 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "Internal armor is wrenched." + ), + + //14 + list( + "key" = /obj/item/stack/sheet/plasteel, + "amount" = 5, + "back_key" = TOOL_WELDER, + "desc" = "Internal armor is welded." + ), + + //15 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "External armor is installed." + ), + + //16 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "External armor is wrenched." + ), + ) + +/datum/construction/mecha/ripley/custom_action(obj/item/I, mob/living/user, diff) if(!..()) return FALSE - //TODO: better messages. switch(index) - if(17) - user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") - holder.icon_state = "ripley1" - if(16) - if(diff==FORWARD) - user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") - holder.icon_state = "ripley2" - else - user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") - holder.icon_state = "ripley0" - if(15) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") - holder.icon_state = "ripley3" - else - user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") - holder.icon_state = "ripley1" - if(14) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") - holder.icon_state = "ripley4" - else - user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 - holder.icon_state = "ripley2" - if(13) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") - qdel(used_atom) - holder.icon_state = "ripley5" - else - user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") - holder.icon_state = "ripley3" - if(12) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "ripley6" - else - user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") - new /obj/item/circuitboard/mecha/ripley/main(get_turf(holder)) - holder.icon_state = "ripley4" - if(11) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") - qdel(used_atom) - holder.icon_state = "ripley7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "ripley5" - if(10) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "ripley8" - else - user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") - new /obj/item/circuitboard/mecha/ripley/peripherals(get_turf(holder)) - holder.icon_state = "ripley6" - if(9) - if(diff==FORWARD) - user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "ripley9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "ripley7" - if(8) - if(diff==FORWARD) - user.visible_message("[user] secures the power cell.", "You secure the power cell.") - holder.icon_state = "ripley10" - else - user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder - I.forceMove(holder.drop_location()) - holder.icon_state = "ripley8" - if(7) - if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") - holder.icon_state = "ripley11" - else - user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") - holder.icon_state = "ripley9" - if(6) - if(diff==FORWARD) - user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "ripley12" - else - user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") - var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "ripley10" - if(5) - if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") - holder.icon_state = "ripley13" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "ripley11" - if(4) - if(diff==FORWARD) - user.visible_message("[user] installs the external reinforced armor layer to the [holder].", "You install the external reinforced armor layer to the [holder].") - holder.icon_state = "ripley14" - else - user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") - holder.icon_state = "ripley12" - if(3) - if(diff==FORWARD) - user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") - holder.icon_state = "ripley15" - else - user.visible_message("[user] pries external armor layer from the [holder].", "You pry external armor layer from the [holder].") - var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "ripley13" + if(1) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") if(2) if(diff==FORWARD) - user.visible_message("[user] welds the external armor layer to the [holder].", "You weld the external armor layer to the [holder].") - spawn_mecha_result() + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + if(3) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + if(4) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + if(5) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + if(6) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + if(7) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + if(8) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + if(9) + if(diff==FORWARD) + user.visible_message("[user] installs the power cell into [holder].", "You install the power cell into [holder].") + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + if(10) + if(diff==FORWARD) + user.visible_message("[user] secures the power cell.", "You secure the power cell.") + else + user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") + if(11) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].") + else + user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") + if(12) + if(diff==FORWARD) + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") + else + user.visible_message("[user] pries internal armor layer from [holder].", "You pry internal armor layer from [holder].") + if(13) + if(diff==FORWARD) + user.visible_message("[user] welds the internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the external reinforced armor layer to [holder].", "You install the external reinforced armor layer to [holder].") + else + user.visible_message("[user] cuts the internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") + else + user.visible_message("[user] pries external armor layer from [holder].", "You pry external armor layer from [holder].") + if(16) + if(diff==FORWARD) + user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].") else user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "ripley14" return TRUE -/datum/construction/mecha/gygax_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/gygax_torso), //1 - list("key"=/obj/item/mecha_parts/part/gygax_left_arm), //2 - list("key"=/obj/item/mecha_parts/part/gygax_right_arm), //3 - list("key"=/obj/item/mecha_parts/part/gygax_left_leg), //4 - list("key"=/obj/item/mecha_parts/part/gygax_right_leg), //5 - list("key"=/obj/item/mecha_parts/part/gygax_head) - ) - -/datum/construction/mecha/gygax_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder].") - holder.add_overlay(used_atom.icon_state+"+o") - qdel(used_atom) - return TRUE - -/datum/construction/mecha/gygax_chassis/action(atom/used_atom,mob/user) - return check_all_steps(used_atom,user) - -/datum/construction/mecha/gygax_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/gygax(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "gygax0" - const_holder.density = TRUE - qdel(src) - -/datum/construction/reversible/mecha/gygax - result = /obj/mecha/combat/gygax +/datum/construction/unordered/mecha_chassis/gygax + result = /datum/construction/mecha/gygax steps = list( - //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. - list("desc"="You shouldn't be able to see this."), + /obj/item/mecha_parts/part/gygax_torso, + /obj/item/mecha_parts/part/gygax_left_arm, + /obj/item/mecha_parts/part/gygax_right_arm, + /obj/item/mecha_parts/part/gygax_left_leg, + /obj/item/mecha_parts/part/gygax_right_leg, + /obj/item/mecha_parts/part/gygax_head + ) - //1 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="External armor is wrenched."), - //2 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/mecha_parts/part/gygax_armor, - "backkey"=/obj/item/weldingtool, - "desc"="Internal armor is welded."), - //4 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="Internal armor is wrenched."), - //5 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="Internal armor is installed."), - //6 - list("key"=/obj/item/stack/sheet/metal, - "backkey"=/obj/item/screwdriver, - "desc"="The power cell is secured."), - //7 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="The power cell is installed."), - //8 - list("key"=/obj/item/stock_parts/cell, - "backkey"=/obj/item/screwdriver, - "desc"="Advanced capacitor is secured."), - //9 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Advanced capacitor is installed."), - //10 - list("key"=/obj/item/stock_parts/capacitor, - "backkey"=/obj/item/screwdriver, - "desc"="Advanced scanner module is secured."), - //11 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Advanced scanner module is installed."), - //12 - list("key"=/obj/item/stock_parts/scanning_module, - "backkey"=/obj/item/screwdriver, - "desc"="Weapon control module is secured."), - //13 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Weapon control module is installed."), - //14 - list("key"=/obj/item/circuitboard/mecha/gygax/targeting, - "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), - //15 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed."), - //16 - list("key"=/obj/item/circuitboard/mecha/gygax/peripherals, - "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), - //17 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), - //18 - list("key"=/obj/item/circuitboard/mecha/gygax/main, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is adjusted."), - //19 - list("key"=/obj/item/wirecutters, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is added."), - //20 - list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/screwdriver, - "desc"="The hydraulic systems are active."), - //21 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/wrench, - "desc"="The hydraulic systems are connected."), - //22 - list("key"=/obj/item/wrench, - "desc"="The hydraulic systems are disconnected.") - ) +/datum/construction/mecha/gygax + result = /obj/mecha/combat/gygax + base_icon = "gygax" + steps = list( + //1 + list( + "key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are disconnected." + ), -/datum/construction/reversible/mecha/gygax/action(atom/used_atom,mob/user) + //2 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are connected." + ), + + //3 + list( + "key" = /obj/item/stack/cable_coil, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The hydraulic systems are active." + ), + + //4 + list( + "key" = TOOL_WIRECUTTER, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is added." + ), + + //5 + list( + "key" = /obj/item/circuitboard/mecha/gygax/main, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is adjusted." + ), + + //6 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Central control module is installed." + ), + + //7 + list( + "key" = /obj/item/circuitboard/mecha/gygax/peripherals, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Central control module is secured." + ), + + //8 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Peripherals control module is installed." + ), + + //9 + list( + "key" = /obj/item/circuitboard/mecha/gygax/targeting, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Peripherals control module is secured." + ), + + //10 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Weapon control module is installed." + ), + + //11 + list( + "key" = /obj/item/stock_parts/scanning_module, + "action" = ITEM_MOVE_INSIDE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Weapon control module is secured." + ), + + //12 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Advanced scanner module is installed." + ), + + //13 + list( + "key" = /obj/item/stock_parts/capacitor, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Advanced scanner module is secured." + ), + + //14 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Advanced capacitor is installed." + ), + + //15 + list( + "key" = /obj/item/stock_parts/cell, + "action" = ITEM_MOVE_INSIDE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Advanced capacitor is secured." + ), + + //16 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "The power cell is installed." + ), + + //17 + list( + "key" = /obj/item/stack/sheet/metal, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The power cell is secured." + ), + + //18 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "Internal armor is installed." + ), + + //19 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "Internal armor is wrenched." + ), + + //20 + list( + "key" = /obj/item/mecha_parts/part/gygax_armor, + "action" = ITEM_DELETE, + "back_key" = TOOL_WELDER, + "desc" = "Internal armor is welded." + ), + + //21 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "External armor is installed." + ), + + //22 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "External armor is wrenched." + ), + + ) + +/datum/construction/mecha/gygax/action(atom/used_atom,mob/user) return check_step(used_atom,user) -/datum/construction/reversible/mecha/gygax/custom_action(index, diff, atom/used_atom, mob/user) +/datum/construction/mecha/gygax/custom_action(obj/item/I, mob/living/user, diff) if(!..()) return FALSE - //TODO: better messages. switch(index) - if(23) - user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") - holder.icon_state = "gygax1" - if(22) + if(1) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + if(2) if(diff==FORWARD) - user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") - holder.icon_state = "gygax2" + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") else - user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") - holder.icon_state = "gygax0" - if(21) + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + if(3) if(diff==FORWARD) - user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") - holder.icon_state = "gygax3" + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") else - user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") - holder.icon_state = "gygax1" - if(20) + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + if(4) if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") - holder.icon_state = "gygax4" + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") else - user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 - holder.icon_state = "gygax2" - if(19) + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + if(5) if(diff==FORWARD) - user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") - qdel(used_atom) - holder.icon_state = "gygax5" + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") else - user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") - holder.icon_state = "gygax3" - if(18) + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + if(6) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "gygax6" else - user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") - new /obj/item/circuitboard/mecha/gygax/main(get_turf(holder)) - holder.icon_state = "gygax4" - if(17) + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + if(7) if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") - qdel(used_atom) - holder.icon_state = "gygax7" + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") else user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "gygax5" - if(16) + if(8) if(diff==FORWARD) user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "gygax8" else - user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") - new /obj/item/circuitboard/mecha/gygax/peripherals(get_turf(holder)) - holder.icon_state = "gygax6" - if(15) + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + if(9) if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") - qdel(used_atom) - holder.icon_state = "gygax9" + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "gygax7" - if(14) + if(10) if(diff==FORWARD) user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") - holder.icon_state = "gygax10" else - user.visible_message("[user] removes the weapon control module from the [holder].", "You remove the weapon control module from the [holder].") - new /obj/item/circuitboard/mecha/gygax/targeting(get_turf(holder)) - holder.icon_state = "gygax8" - if(13) + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + if(11) if(diff==FORWARD) - user.visible_message("[user] installs scanner module to the [holder].", "You install scanner module to the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "gygax11" + user.visible_message("[user] installs scanner module to [holder].", "You install scanner module to [holder].") else user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") - holder.icon_state = "gygax9" if(12) if(diff==FORWARD) user.visible_message("[user] secures the advanced scanner module.", "You secure the scanner module.") - holder.icon_state = "gygax12" else - user.visible_message("[user] removes the advanced scanner module from the [holder].", "You remove the scanner module from the [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/scanning_module) in holder - I.forceMove(get_turf(holder)) - holder.icon_state = "gygax10" - if(11) + user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the scanner module from [holder].") + if(13) if(diff==FORWARD) - user.visible_message("[user] installs capacitor to the [holder].", "You install capacitor to the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "gygax13" + user.visible_message("[user] installs capacitor to [holder].", "You install capacitor to [holder].") else user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.") - holder.icon_state = "gygax11" - if(10) + if(14) if(diff==FORWARD) - user.visible_message("[user] secures the capacitor.", "You secure the capacitor.") - holder.icon_state = "gygax14" + user.visible_message("[user] secures the capacitor.", "You secure the capacitor.") else - user.visible_message("[user] removes the capacitor from the [holder].", "You remove the capacitor from the [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/capacitor) in holder - I.forceMove(holder.drop_location()) - holder.icon_state = "gygax12" - if(9) + user.visible_message("[user] removes the capacitor from [holder].", "You remove the capacitor from [holder].") + if(15) if(diff==FORWARD) - user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "gygax15" + user.visible_message("[user] installs the power cell into [holder].", "You install the power cell into [holder].") else user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.") - holder.icon_state = "gygax13" - if(8) + if(16) if(diff==FORWARD) user.visible_message("[user] secures the power cell.", "You secure the power cell.") - holder.icon_state = "gygax16" else user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder - I.forceMove(holder.drop_location()) - holder.icon_state = "gygax14" - if(7) + if(17) if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") - holder.icon_state = "gygax17" + user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].") else user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") - holder.icon_state = "gygax15" - if(6) + if(18) if(diff==FORWARD) user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "gygax18" else - user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") - var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "gygax16" - if(5) + user.visible_message("[user] pries internal armor layer from [holder].", "You pry internal armor layer from [holder].") + if(19) if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") - holder.icon_state = "gygax19" + user.visible_message("[user] welds the internal armor layer to [holder].", "You weld the internal armor layer to [holder].") else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "gygax17" - if(4) + if(20) if(diff==FORWARD) - user.visible_message("[user] installs Gygax Armor Plates to the [holder].", "You install Gygax Armor Plates to the [holder].") - qdel(used_atom) - holder.icon_state = "gygax20" + user.visible_message("[user] installs Gygax Armor Plates to [holder].", "You install Gygax Armor Plates to [holder].") else - user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") - holder.icon_state = "gygax18" - if(3) + user.visible_message("[user] cuts the internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + if(21) if(diff==FORWARD) user.visible_message("[user] secures Gygax Armor Plates.", "You secure Gygax Armor Plates.") - holder.icon_state = "gygax21" else - user.visible_message("[user] pries Gygax Armor Plates from the [holder].", "You pry Gygax Armor Plates from the [holder].") - new /obj/item/mecha_parts/part/gygax_armor(get_turf(holder)) - holder.icon_state = "gygax19" - if(2) + user.visible_message("[user] pries Gygax Armor Plates from [holder].", "You pry Gygax Armor Plates from [holder].") + if(22) if(diff==FORWARD) - user.visible_message("[user] welds Gygax Armor Plates to the [holder].", "You weld Gygax Armor Plates to the [holder].") - spawn_mecha_result() + user.visible_message("[user] welds Gygax Armor Plates to [holder].", "You weld Gygax Armor Plates to [holder].") else user.visible_message("[user] unfastens Gygax Armor Plates.", "You unfasten Gygax Armor Plates.") - holder.icon_state = "gygax20" return TRUE -/datum/construction/mecha/firefighter_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso), //1 - list("key"=/obj/item/mecha_parts/part/ripley_left_arm), //2 - list("key"=/obj/item/mecha_parts/part/ripley_right_arm), //3 - list("key"=/obj/item/mecha_parts/part/ripley_left_leg), //4 - list("key"=/obj/item/mecha_parts/part/ripley_right_leg), //5 - list("key"=/obj/item/clothing/suit/fire)//6 - ) - -/datum/construction/mecha/firefighter_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder].") - holder.add_overlay(used_atom.icon_state+"+o") - qdel(used_atom) - return TRUE - -/datum/construction/mecha/firefighter_chassis/action(atom/used_atom,mob/user) - return check_all_steps(used_atom,user) - -/datum/construction/mecha/firefighter_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/firefighter(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "fireripley0" - const_holder.density = TRUE - qdel(src) - - -/datum/construction/reversible/mecha/firefighter - result = /obj/mecha/working/ripley/firefighter +/datum/construction/unordered/mecha_chassis/firefighter + result = /datum/construction/mecha/firefighter steps = list( - //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. - list("desc"="You shouldn't be able to see this."), + /obj/item/mecha_parts/part/ripley_torso, + /obj/item/mecha_parts/part/ripley_left_arm, + /obj/item/mecha_parts/part/ripley_right_arm, + /obj/item/mecha_parts/part/ripley_left_leg, + /obj/item/mecha_parts/part/ripley_right_leg, + /obj/item/clothing/suit/fire + ) - //1 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="External armor is wrenched."), - //2 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/stack/sheet/plasteel, - "backkey"=/obj/item/crowbar, - "desc"="External armor is being installed."), - //4 - list("key"=/obj/item/stack/sheet/plasteel, - "backkey"=/obj/item/weldingtool, - "desc"="Internal armor is welded."), - //5 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="Internal armor is wrenched."), - //6 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="Internal armor is installed."), - //7 - list("key"=/obj/item/stack/sheet/plasteel, - "backkey"=/obj/item/screwdriver, - "desc"="The power cell is secured."), - //8 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="The power cell is installed."), - //9 - list("key"=/obj/item/stock_parts/cell, - "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), - //10 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed."), - //11 - list("key"=/obj/item/circuitboard/mecha/ripley/peripherals, - "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), - //12 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), - //13 - list("key"=/obj/item/circuitboard/mecha/ripley/main, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is adjusted."), - //14 - list("key"=/obj/item/wirecutters, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is added."), - //15 - list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/screwdriver, - "desc"="The hydraulic systems are active."), - //16 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/wrench, - "desc"="The hydraulic systems are connected."), - //17 - list("key"=/obj/item/wrench, - "desc"="The hydraulic systems are disconnected.") - ) +/datum/construction/mecha/firefighter + result = /obj/mecha/working/ripley/firefighter + base_icon = "fireripley" + steps = list( + //1 + list( + "key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are disconnected." + ), -/datum/construction/reversible/mecha/firefighter/action(atom/used_atom,mob/user) - return check_step(used_atom,user) + //2 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are connected." + ), -/datum/construction/reversible/mecha/firefighter/custom_action(index, diff, atom/used_atom, mob/user) + //3 + list( + "key" = /obj/item/stack/cable_coil, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The hydraulic systems are active." + ), + + //4 + list( + "key" = TOOL_WIRECUTTER, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is added." + ), + + //5 + list( + "key" = /obj/item/circuitboard/mecha/ripley/main, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is adjusted." + ), + + //6 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Central control module is installed." + ), + + //7 + list( + "key" = /obj/item/circuitboard/mecha/ripley/peripherals, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Central control module is secured." + ), + + //8 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Peripherals control module is installed." + ), + + //9 + list( + "key" = /obj/item/stock_parts/cell, + "action" = ITEM_MOVE_INSIDE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Peripherals control module is secured." + ), + + //10 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "The power cell is installed." + ), + + //11 + list( + "key" = /obj/item/stack/sheet/plasteel, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The power cell is secured." + ), + + //12 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "Internal armor is installed." + ), + + //13 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "Internal armor is wrenched." + ), + + //14 + list( + "key" = /obj/item/stack/sheet/plasteel, + "amount" = 5, + "back_key" = TOOL_WELDER, + "desc" = "Internal armor is welded." + ), + + //15 + list( + "key" = /obj/item/stack/sheet/plasteel, + "amount" = 5, + "back_key" = TOOL_CROWBAR, + "desc" = "External armor is being installed." + ), + + //16 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "External armor is installed." + ), + + //17 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "External armor is wrenched." + ), + ) + +/datum/construction/mecha/firefighter/custom_action(obj/item/I, mob/living/user, diff) if(!..()) return FALSE //TODO: better messages. switch(index) - if(18) - user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") - holder.icon_state = "fireripley1" - if(17) - if(diff==FORWARD) - user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") - holder.icon_state = "fireripley2" - else - user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") - holder.icon_state = "fireripley0" - if(16) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") - holder.icon_state = "fireripley3" - else - user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") - holder.icon_state = "fireripley1" - if(15) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") - holder.icon_state = "fireripley4" - else - user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 - holder.icon_state = "fireripley2" - if(14) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") - qdel(used_atom) - holder.icon_state = "fireripley5" - else - user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") - holder.icon_state = "fireripley3" - if(13) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "fireripley6" - else - user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") - new /obj/item/circuitboard/mecha/ripley/main(get_turf(holder)) - holder.icon_state = "fireripley4" - if(12) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") - qdel(used_atom) - holder.icon_state = "fireripley7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "fireripley5" - if(11) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "fireripley8" - else - user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") - new /obj/item/circuitboard/mecha/ripley/peripherals(get_turf(holder)) - holder.icon_state = "fireripley6" - if(10) - if(diff==FORWARD) - user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "fireripley9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "fireripley7" - if(9) - if(diff==FORWARD) - user.visible_message("[user] secures the power cell.", "You secure the power cell.") - holder.icon_state = "fireripley10" - else - user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder - I.forceMove(holder.drop_location()) - holder.icon_state = "fireripley8" - if(8) - if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") - holder.icon_state = "fireripley11" - else - user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") - holder.icon_state = "fireripley9" - if(7) - if(diff==FORWARD) - user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "fireripley12" - else - user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") - var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "fireripley10" - if(6) - if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") - holder.icon_state = "fireripley13" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "fireripley11" - if(5) - if(diff==FORWARD) - user.visible_message("[user] starts to install the external armor layer to the [holder].", "You install the external armor layer to the [holder].") - holder.icon_state = "fireripley14" - else - user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") - holder.icon_state = "fireripley12" - if(4) - if(diff==FORWARD) - user.visible_message("[user] installs the external reinforced armor layer to the [holder].", "You install the external reinforced armor layer to the [holder].") - holder.icon_state = "fireripley15" - else - user.visible_message("[user] removes the external armor from the [holder].", "You remove the external armor from the [holder].") - var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "fireripley13" - if(3) - if(diff==FORWARD) - user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") - holder.icon_state = "fireripley16" - else - user.visible_message("[user] pries external armor layer from the [holder].", "You pry external armor layer from the [holder].") - var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "fireripley14" + if(1) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") if(2) if(diff==FORWARD) - user.visible_message("[user] welds the external armor layer to the [holder].", "You weld the external armor layer to the [holder].") - spawn_mecha_result() + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + if(3) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + if(4) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + if(5) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + if(6) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + if(7) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + if(8) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + if(9) + if(diff==FORWARD) + user.visible_message("[user] installs the power cell into [holder].", "You install the power cell into [holder].") + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + if(10) + if(diff==FORWARD) + user.visible_message("[user] secures the power cell.", "You secure the power cell.") + else + user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") + if(11) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].") + else + user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") + if(12) + if(diff==FORWARD) + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") + else + user.visible_message("[user] pries internal armor layer from [holder].", "You pry internal armor layer from [holder].") + if(13) + if(diff==FORWARD) + user.visible_message("[user] welds the internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + if(14) + if(diff==FORWARD) + user.visible_message("[user] starts to install the external armor layer to [holder].", "You install the external armor layer to [holder].") + else + user.visible_message("[user] cuts the internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + if(15) + if(diff==FORWARD) + user.visible_message("[user] installs the external reinforced armor layer to [holder].", "You install the external reinforced armor layer to [holder].") + else + user.visible_message("[user] removes the external armor from [holder].", "You remove the external armor from [holder].") + if(16) + if(diff==FORWARD) + user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") + else + user.visible_message("[user] pries external armor layer from [holder].", "You pry external armor layer from [holder].") + if(17) + if(diff==FORWARD) + user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].") else user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "fireripley15" return TRUE -/datum/construction/mecha/honker_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/honker_torso), //1 - list("key"=/obj/item/mecha_parts/part/honker_left_arm), //2 - list("key"=/obj/item/mecha_parts/part/honker_right_arm), //3 - list("key"=/obj/item/mecha_parts/part/honker_left_leg), //4 - list("key"=/obj/item/mecha_parts/part/honker_right_leg), //5 - list("key"=/obj/item/mecha_parts/part/honker_head) - ) - -/datum/construction/mecha/honker_chassis/action(atom/used_atom,mob/user) - return check_all_steps(used_atom,user) - -/datum/construction/mecha/honker_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder].") - holder.add_overlay(used_atom.icon_state+"+o") - qdel(used_atom) - return TRUE - -/datum/construction/mecha/honker_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/mecha/honker(const_holder) - const_holder.density = TRUE - qdel(src) +/datum/construction/unordered/mecha_chassis/honker + result = /datum/construction/mecha/honker + steps = list( + /obj/item/mecha_parts/part/honker_torso, + /obj/item/mecha_parts/part/honker_left_arm, + /obj/item/mecha_parts/part/honker_right_arm, + /obj/item/mecha_parts/part/honker_left_leg, + /obj/item/mecha_parts/part/honker_right_leg, + /obj/item/mecha_parts/part/honker_head + ) /datum/construction/mecha/honker result = /obj/mecha/combat/honker steps = list( - list("desc"="You shouldn't be able to see this."), //0, note steps in the construction path are +1 to the ones here - list("key"=/obj/item/bikehorn), //1 - list("key"=/obj/item/clothing/shoes/clown_shoes), //2 - list("key"=/obj/item/bikehorn), //3 - list("key"=/obj/item/clothing/mask/gas/clown_hat), //4 - list("key"=/obj/item/bikehorn), //5 - list("key"=/obj/item/stock_parts/cell), //6 - list("key"=/obj/item/bikehorn), //7 - list("key"=/obj/item/circuitboard/mecha/honker/targeting), //8 - list("key"=/obj/item/bikehorn), //9 - list("key"=/obj/item/circuitboard/mecha/honker/peripherals), //10 - list("key"=/obj/item/bikehorn), //11 - list("key"=/obj/item/circuitboard/mecha/honker/main), //12 - list("key"=/obj/item/bikehorn), //13 - ) + //1 + list( + "key" = /obj/item/bikehorn + ), -/datum/construction/mecha/honker/action(atom/used_atom,mob/user) - return check_step(used_atom,user) + //2 + list( + "key" = /obj/item/circuitboard/mecha/honker/main, + "action" = ITEM_DELETE + ), -/datum/construction/mecha/honker/custom_action(step, atom/used_atom, mob/user) + //3 + list( + "key" = /obj/item/bikehorn + ), + + //4 + list( + "key" = /obj/item/circuitboard/mecha/honker/peripherals, + "action" = ITEM_DELETE + ), + + //5 + list( + "key" = /obj/item/bikehorn + ), + + //6 + list( + "key" = /obj/item/circuitboard/mecha/honker/targeting, + "action" = ITEM_DELETE + ), + + //7 + list( + "key" = /obj/item/bikehorn + ), + + //8 + list( + "key" = /obj/item/stock_parts/cell, + "action" = ITEM_MOVE_INSIDE + ), + + //9 + list( + "key" = /obj/item/bikehorn + ), + + //10 + list( + "key" = /obj/item/clothing/mask/gas/clown_hat, + "action" = ITEM_DELETE + ), + + //11 + list( + "key" = /obj/item/bikehorn + ), + + //12 + list( + "key" = /obj/item/clothing/shoes/clown_shoes, + "action" = ITEM_DELETE + ), + + //13 + list( + "key" = /obj/item/bikehorn + ), + ) + +// HONK doesn't have any construction step icons, so we just set an icon once. +/datum/construction/mecha/honker/update_holder(step_index) + if(step_index == 1) + holder.icon = 'icons/mecha/mech_construct.dmi' + holder.icon_state = "honker_chassis" + ..() + +/datum/construction/mecha/honker/custom_action(obj/item/I, mob/living/user, diff) if(!..()) return FALSE - if(istype(used_atom, /obj/item/bikehorn)) + if(istype(I, /obj/item/bikehorn)) playsound(holder, 'sound/items/bikehorn.ogg', 50, 1) user.visible_message("HONK!") - if(step==2) - spawn_mecha_result() - //TODO: better messages. - switch(step) - if(13) - user.visible_message("[user] installs the central control module into the [holder].", "You install the central control module into the [holder].") - qdel(used_atom) - if(11) - user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") - qdel(used_atom) - if(9) - user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") - qdel(used_atom) - if(7) - user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - if(5) - user.visible_message("[user] puts clown wig and mask on the [holder].", "You put clown wig and mask on the [holder].") - qdel(used_atom) - if(3) - user.visible_message("[user] puts clown boots on the [holder].", "You put clown boots on the [holder].") - qdel(used_atom) + switch(index) + if(2) + user.visible_message("[user] installs the central control module into [holder].", "You install the central control module into [holder].") + if(4) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + if(6) + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") + if(8) + user.visible_message("[user] installs the power cell into [holder].", "You install the power cell into [holder].") + if(10) + user.visible_message("[user] puts clown wig and mask on [holder].", "You put clown wig and mask on [holder].") + if(12) + user.visible_message("[user] puts clown boots on [holder].", "You put clown boots on [holder].") return TRUE -/datum/construction/mecha/durand_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/durand_torso), //1 - list("key"=/obj/item/mecha_parts/part/durand_left_arm), //2 - list("key"=/obj/item/mecha_parts/part/durand_right_arm), //3 - list("key"=/obj/item/mecha_parts/part/durand_left_leg), //4 - list("key"=/obj/item/mecha_parts/part/durand_right_leg), //5 - list("key"=/obj/item/mecha_parts/part/durand_head) - ) - -/datum/construction/mecha/durand_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder]") - holder.add_overlay(used_atom.icon_state+"+o") - qdel(used_atom) - return TRUE - -/datum/construction/mecha/durand_chassis/action(atom/used_atom,mob/user) - return check_all_steps(used_atom,user) - -/datum/construction/mecha/durand_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/durand(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "durand0" - const_holder.density = TRUE - qdel(src) - -/datum/construction/reversible/mecha/durand - result = /obj/mecha/combat/durand +/datum/construction/unordered/mecha_chassis/durand + result = /datum/construction/mecha/durand steps = list( - //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. - list("desc"="You shouldn't be able to see this."), + /obj/item/mecha_parts/part/durand_torso, + /obj/item/mecha_parts/part/durand_left_arm, + /obj/item/mecha_parts/part/durand_right_arm, + /obj/item/mecha_parts/part/durand_left_leg, + /obj/item/mecha_parts/part/durand_right_leg, + /obj/item/mecha_parts/part/durand_head + ) - //1 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="External armor is wrenched."), - //2 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/mecha_parts/part/durand_armor, - "backkey"=/obj/item/weldingtool, - "desc"="Internal armor is welded."), - //4 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="Internal armor is wrenched."), - //5 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="Internal armor is installed."), - //6 - list("key"=/obj/item/stack/sheet/metal, - "backkey"=/obj/item/screwdriver, - "desc"="The power cell is secured."), - //7 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="The power cell is installed."), - //8 - list("key"=/obj/item/stock_parts/cell, - "backkey"=/obj/item/screwdriver, - "desc"="Super capacitor is secured."), - //9 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Super capacitor is installed."), - //10 - list("key"=/obj/item/stock_parts/capacitor, - "backkey"=/obj/item/screwdriver, - "desc"="Phasic scanner module is secured."), - //11 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Phasic scanner module is installed."), - //12 - list("key"=/obj/item/stock_parts/scanning_module, - "backkey"=/obj/item/screwdriver, - "desc"="Weapon control module is secured."), - //13 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Weapon control module is installed."), - //14 - list("key"=/obj/item/circuitboard/mecha/durand/targeting, - "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), - //15 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed."), - //16 - list("key"=/obj/item/circuitboard/mecha/durand/peripherals, - "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), - //17 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), - //18 - list("key"=/obj/item/circuitboard/mecha/durand/main, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is adjusted."), - //19 - list("key"=/obj/item/wirecutters, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is added."), - //20 - list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/screwdriver, - "desc"="The hydraulic systems are active."), - //21 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/wrench, - "desc"="The hydraulic systems are connected."), - //22 - list("key"=/obj/item/wrench, - "desc"="The hydraulic systems are disconnected.") - ) +/datum/construction/mecha/durand + result = /obj/mecha/combat/durand + base_icon = "durand" + steps = list( + //1 + list( + "key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are disconnected." + ), + + //2 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are connected." + ), + + //3 + list( + "key" = /obj/item/stack/cable_coil, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The hydraulic systems are active." + ), + + //4 + list( + "key" = TOOL_WIRECUTTER, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is added." + ), + + //5 + list( + "key" = /obj/item/circuitboard/mecha/durand/main, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is adjusted." + ), + + //6 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Central control module is installed." + ), + + //7 + list( + "key" = /obj/item/circuitboard/mecha/durand/peripherals, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Central control module is secured." + ), + + //8 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Peripherals control module is installed." + ), + + //9 + list( + "key" = /obj/item/circuitboard/mecha/durand/targeting, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Peripherals control module is secured." + ), + + //10 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Weapon control module is installed." + ), + + //11 + list( + "key" = /obj/item/stock_parts/scanning_module, + "action" = ITEM_MOVE_INSIDE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Weapon control module is secured." + ), + + //12 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Phasic scanner module is installed." + ), + + //13 + list( + "key" = /obj/item/stock_parts/capacitor, + "action" = ITEM_MOVE_INSIDE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Phasic scanner module is secured." + ), + + //14 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Super capacitor is installed." + ), + + //15 + list( + "key" = /obj/item/stock_parts/cell, + "action" = ITEM_MOVE_INSIDE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Super capacitor is secured." + ), + + //16 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "The power cell is installed." + ), + + //17 + list( + "key" = /obj/item/stack/sheet/metal, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The power cell is secured." + ), + + //18 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "Internal armor is installed." + ), + + //19 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "Internal armor is wrenched." + ), + + //20 + list( + "key" = /obj/item/mecha_parts/part/durand_armor, + "action" = ITEM_DELETE, + "back_key" = TOOL_WELDER, + "desc" = "Internal armor is welded." + ), + + //21 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "External armor is installed." + ), + + //22 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "External armor is wrenched." + ), + ) -/datum/construction/reversible/mecha/durand/action(atom/used_atom,mob/user) - return check_step(used_atom,user) - -/datum/construction/reversible/mecha/durand/custom_action(index, diff, atom/used_atom, mob/user) +/datum/construction/mecha/durand/custom_action(obj/item/I, mob/living/user, diff) if(!..()) return FALSE //TODO: better messages. switch(index) - if(23) - user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") - holder.icon_state = "durand1" - if(22) + if(1) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + if(2) if(diff==FORWARD) - user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") - holder.icon_state = "durand2" + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") else - user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") - holder.icon_state = "durand0" - if(21) + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + if(3) if(diff==FORWARD) - user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") - holder.icon_state = "durand3" + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") else - user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") - holder.icon_state = "durand1" - if(20) + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + if(4) if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") - holder.icon_state = "durand4" + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") else - user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 - holder.icon_state = "durand2" - if(19) + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + if(5) if(diff==FORWARD) - user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") - qdel(used_atom) - holder.icon_state = "durand5" + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") else - user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") - holder.icon_state = "durand3" - if(18) + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + if(6) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "durand6" else - user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") - new /obj/item/circuitboard/mecha/durand/main(get_turf(holder)) - holder.icon_state = "durand4" - if(17) + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + if(7) if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") - qdel(used_atom) - holder.icon_state = "durand7" + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") else user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "durand5" - if(16) + if(8) if(diff==FORWARD) user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "durand8" else - user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") - new /obj/item/circuitboard/mecha/durand/peripherals(get_turf(holder)) - holder.icon_state = "durand6" - if(15) + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + if(9) if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") - qdel(used_atom) - holder.icon_state = "durand9" + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "durand7" - if(14) + if(10) if(diff==FORWARD) user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") - holder.icon_state = "durand10" else - user.visible_message("[user] removes the weapon control module from the [holder].", "You remove the weapon control module from the [holder].") - new /obj/item/circuitboard/mecha/durand/targeting(get_turf(holder)) - holder.icon_state = "durand8" - if(13) + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + if(11) if(diff==FORWARD) - user.visible_message("[user] installs scanner module to the [holder].", "You install phasic scanner module to the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "durand11" + user.visible_message("[user] installs scanner module to [holder].", "You install phasic scanner module to [holder].") else user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") - holder.icon_state = "durand9" if(12) if(diff==FORWARD) user.visible_message("[user] secures the scanner module.", "You secure the scanner module.") - holder.icon_state = "durand12" else - user.visible_message("[user] removes the scanner module from the [holder].", "You remove the scanner module from the [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/scanning_module) in holder - I.forceMove(holder.drop_location()) - holder.icon_state = "durand10" - if(11) + user.visible_message("[user] removes the scanner module from [holder].", "You remove the scanner module from [holder].") + if(13) if(diff==FORWARD) - user.visible_message("[user] installs capacitor to the [holder].", "You install capacitor to the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "durand13" + user.visible_message("[user] installs capacitor to [holder].", "You install capacitor to [holder].") else user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.") - holder.icon_state = "durand11" - if(10) + if(14) if(diff==FORWARD) user.visible_message("[user] secures the capacitor.", "You secure the capacitor.") - holder.icon_state = "durand14" else - user.visible_message("[user] removes the super capacitor from the [holder].", "You remove the capacitor from the [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/capacitor) in holder - I.forceMove(holder.drop_location()) - holder.icon_state = "durand12" - if(9) + user.visible_message("[user] removes the super capacitor from [holder].", "You remove the capacitor from [holder].") + if(15) if(diff==FORWARD) - user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "durand15" + user.visible_message("[user] installs the power cell into [holder].", "You install the power cell into [holder].") else user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.") - holder.icon_state = "durand13" - if(8) + if(16) if(diff==FORWARD) user.visible_message("[user] secures the power cell.", "You secure the power cell.") - holder.icon_state = "durand16" else user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder - I.forceMove(holder.drop_location()) - holder.icon_state = "durand14" - if(7) + if(17) if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") - holder.icon_state = "durand17" + user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].") else user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") - holder.icon_state = "durand15" - if(6) + if(18) if(diff==FORWARD) user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "durand18" else - user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") - var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "durand16" - if(5) + user.visible_message("[user] pries internal armor layer from [holder].", "You pry internal armor layer from [holder].") + if(19) if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") - holder.icon_state = "durand19" + user.visible_message("[user] welds the internal armor layer to [holder].", "You weld the internal armor layer to [holder].") else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "durand17" - if(4) + if(20) if(diff==FORWARD) - user.visible_message("[user] installs Durand Armor Plates to the [holder].", "You install Durand Armor Plates to the [holder].") - qdel(used_atom) - holder.icon_state = "durand20" + user.visible_message("[user] installs Durand Armor Plates to [holder].", "You install Durand Armor Plates to [holder].") else - user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") - holder.icon_state = "durand18" - if(3) + user.visible_message("[user] cuts the internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + if(21) if(diff==FORWARD) user.visible_message("[user] secures Durand Armor Plates.", "You secure Durand Armor Plates.") - holder.icon_state = "durand21" else - user.visible_message("[user] pries Durand Armor Plates from the [holder].", "You pry Durand Armor Plates from the [holder].") - new /obj/item/mecha_parts/part/durand_armor(get_turf(holder)) - holder.icon_state = "durand19" - if(2) + user.visible_message("[user] pries Durand Armor Plates from [holder].", "You pry Durand Armor Plates from [holder].") + if(22) if(diff==FORWARD) - user.visible_message("[user] welds Durand Armor Plates to the [holder].", "You weld Durand Armor Plates to the [holder].") - spawn_mecha_result() + user.visible_message("[user] welds Durand Armor Plates to [holder].", "You weld Durand Armor Plates to [holder].") else user.visible_message("[user] unfastens Durand Armor Plates.", "You unfasten Durand Armor Plates.") - holder.icon_state = "durand20" return TRUE //PHAZON -/datum/construction/mecha/phazon_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/phazon_torso), //1 - list("key"=/obj/item/mecha_parts/part/phazon_left_arm), //2 - list("key"=/obj/item/mecha_parts/part/phazon_right_arm), //3 - list("key"=/obj/item/mecha_parts/part/phazon_left_leg), //4 - list("key"=/obj/item/mecha_parts/part/phazon_right_leg), //5 - list("key"=/obj/item/mecha_parts/part/phazon_head) - ) - -/datum/construction/mecha/phazon_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder].") - holder.add_overlay(used_atom.icon_state+"+o") - qdel(used_atom) - return TRUE - -/datum/construction/mecha/phazon_chassis/action(atom/used_atom,mob/user) - return check_all_steps(used_atom,user) - -/datum/construction/mecha/phazon_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/phazon(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "phazon0" - const_holder.density = TRUE - qdel(src) - -/datum/construction/reversible/mecha/phazon - result = /obj/mecha/combat/phazon +/datum/construction/unordered/mecha_chassis/phazon + result = /datum/construction/mecha/phazon steps = list( - //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. - list("desc"="You shouldn't be able to see this."), + /obj/item/mecha_parts/part/phazon_torso, + /obj/item/mecha_parts/part/phazon_left_arm, + /obj/item/mecha_parts/part/phazon_right_arm, + /obj/item/mecha_parts/part/phazon_left_leg, + /obj/item/mecha_parts/part/phazon_right_leg, + /obj/item/mecha_parts/part/phazon_head + ) - //1 - list("key"=/obj/item/device/assembly/signaler/anomaly, - "backkey"=null, //Cannot remove the anomaly core once it's in - "desc"="Anomaly core socket is open and awaiting connection."), - //2 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="External armor is wrenched."), - //3 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="External armor is installed."), - //4 - list("key"=/obj/item/mecha_parts/part/phazon_armor, - "backkey"=/obj/item/weldingtool, - "desc"="Phase armor is welded."), - //5 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="Phase armor is wrenched."), - //6 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="Phase armor is installed."), - //7 - list("key"=/obj/item/stack/sheet/plasteel, - "backkey"=/obj/item/screwdriver, - "desc"="The power cell is secured."), - //8 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="The power cell is installed."), - //9 - list("key"=/obj/item/stock_parts/cell, - "backkey"=/obj/item/screwdriver, - "desc"="The bluespace crystal is engaged."), - //10 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/wirecutters, - "desc"="The bluespace crystal is connected."), - //11 - list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/crowbar, - "desc"="The bluespace crystal is installed."), - //12 - list("key"=/obj/item/stack/ore/bluespace_crystal, - "backkey"=/obj/item/screwdriver, - "desc"="Super capacitor is secured."), - //13 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Super capacitor is installed."), - //14 - list("key"=/obj/item/stock_parts/capacitor, - "backkey"=/obj/item/screwdriver, - "desc"="Phasic scanner module is secured."), - //15 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Phasic scanner module is installed."), - //16 - list("key"=/obj/item/stock_parts/scanning_module, - "backkey"=/obj/item/screwdriver, - "desc"="Weapon control module is secured."), - //17 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Weapon control is installed."), - //18 - list("key"=/obj/item/circuitboard/mecha/phazon/targeting, - "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), - //19 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed"), - //20 - list("key"=/obj/item/circuitboard/mecha/phazon/peripherals, - "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), - //21 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), - //22 - list("key"=/obj/item/circuitboard/mecha/phazon/main, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is adjusted."), - //23 - list("key"=/obj/item/wirecutters, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is added."), - //24 - list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/screwdriver, - "desc"="The hydraulic systems are active."), - //25 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/wrench, - "desc"="The hydraulic systems are connected."), - //26 - list("key"=/obj/item/wrench, - "desc"="The hydraulic systems are disconnected.") - ) +/datum/construction/mecha/phazon + result = /obj/mecha/combat/phazon + base_icon = "phazon" + steps = list( + //1 + list( + "key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are disconnected." + ), + + //2 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are connected." + ), + + //3 + list( + "key" = /obj/item/stack/cable_coil, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The hydraulic systems are active." + ), + + //4 + list( + "key" = TOOL_WIRECUTTER, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is added." + ), + + //5 + list( + "key" = /obj/item/circuitboard/mecha/phazon/main, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is adjusted." + ), + + //6 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Central control module is installed." + ), + + //7 + list( + "key" = /obj/item/circuitboard/mecha/phazon/peripherals, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Central control module is secured." + ), + + //8 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Peripherals control module is installed" + ), + + //9 + list( + "key" = /obj/item/circuitboard/mecha/phazon/targeting, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Peripherals control module is secured." + ), + + //10 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Weapon control is installed." + ), + + //11 + list( + "key" = /obj/item/stock_parts/scanning_module, + "action" = ITEM_MOVE_INSIDE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Weapon control module is secured." + ), + + //12 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Phasic scanner module is installed." + ), + + //13 + list( + "key" = /obj/item/stock_parts/capacitor, + "action" = ITEM_MOVE_INSIDE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Phasic scanner module is secured." + ), + + //14 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Super capacitor is installed." + ), + + //15 + list( + "key" = /obj/item/stack/ore/bluespace_crystal, + "amount" = 1, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Super capacitor is secured." + ), + + //16 + list( + "key" = /obj/item/stack/cable_coil, + "amount" = 5, + "back_key" = TOOL_CROWBAR, + "desc" = "The bluespace crystal is installed." + ), + + //17 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_WIRECUTTER, + "desc" = "The bluespace crystal is connected." + ), + + //18 + list( + "key" = /obj/item/stock_parts/cell, + "action" = ITEM_MOVE_INSIDE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The bluespace crystal is engaged." + ), + + //19 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "The power cell is installed.", + "icon_state" = "phazon17" + // This is the point where a step icon is skipped, so "icon_state" had to be set manually starting from here. + ), + + //20 + list( + "key" = /obj/item/stack/sheet/plasteel, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The power cell is secured.", + "icon_state" = "phazon18" + ), + + //21 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "Phase armor is installed.", + "icon_state" = "phazon19" + ), + + //22 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "Phase armor is wrenched.", + "icon_state" = "phazon20" + ), + + //23 + list( + "key" = /obj/item/mecha_parts/part/phazon_armor, + "action" = ITEM_DELETE, + "back_key" = TOOL_WELDER, + "desc" = "Phase armor is welded.", + "icon_state" = "phazon21" + ), + + //24 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "External armor is installed.", + "icon_state" = "phazon22" + ), + + //25 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "External armor is wrenched.", + "icon_state" = "phazon23" + ), + + //26 + list( + "key" = /obj/item/device/assembly/signaler/anomaly, + "action" = ITEM_DELETE, + "back_key" = TOOL_WELDER, + "desc" = "Anomaly core socket is open.", + "icon_state" = "phazon24" + ), + ) -/datum/construction/reversible/mecha/phazon/action(atom/used_atom,mob/user) - return check_step(used_atom,user) - -/datum/construction/reversible/mecha/phazon/custom_action(index, diff, atom/used_atom, mob/user) +/datum/construction/mecha/phazon/custom_action(obj/item/I, mob/living/user, diff) if(!..()) return FALSE //TODO: better messages. switch(index) - if(27) - user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") - holder.icon_state = "phazon1" - if(26) + if(1) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") + if(2) if(diff==FORWARD) - user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") - holder.icon_state = "phazon2" + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") else - user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") - holder.icon_state = "phazon0" - if(25) + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + if(3) if(diff==FORWARD) - user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") - holder.icon_state = "phazon3" + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") else - user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") - holder.icon_state = "phazon1" - if(24) + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + if(4) if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") - holder.icon_state = "phazon4" + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") else - user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 - holder.icon_state = "phazon2" - if(23) + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + if(5) if(diff==FORWARD) - user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") - qdel(used_atom) - holder.icon_state = "phazon5" + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") else - user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") - holder.icon_state = "phazon3" - if(22) + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + if(6) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "phazon6" else - user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") - new /obj/item/circuitboard/mecha/phazon/main(get_turf(holder)) - holder.icon_state = "phazon4" - if(21) + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + if(7) if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") - qdel(used_atom) - holder.icon_state = "phazon7" + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") else user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "phazon5" - if(20) + if(8) if(diff==FORWARD) user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "phazon8" else - user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") - new /obj/item/circuitboard/mecha/phazon/peripherals(get_turf(holder)) - holder.icon_state = "phazon6" - if(19) + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + if(9) if(diff==FORWARD) - user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") - qdel(used_atom) - holder.icon_state = "phazon9" + user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].") else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "phazon7" - if(18) + if(10) if(diff==FORWARD) user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") - holder.icon_state = "phazon10" else - user.visible_message("[user] removes the weapon control module from the [holder].", "You remove the weapon control module from the [holder].") - new /obj/item/circuitboard/mecha/phazon/targeting(get_turf(holder)) - holder.icon_state = "phazon8" - if(17) + user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].") + if(11) if(diff==FORWARD) - user.visible_message("[user] installs phasic scanner module to the [holder].", "You install scanner module to the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "phazon11" + user.visible_message("[user] installs phasic scanner module to [holder].", "You install scanner module to [holder].") else user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") - holder.icon_state = "phazon9" - if(16) + if(12) if(diff==FORWARD) user.visible_message("[user] secures the phasic scanner module.", "You secure the scanner module.") - holder.icon_state = "phazon12" else - user.visible_message("[user] removes the phasic scanner module from the [holder].", "You remove the scanner module from the [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/scanning_module) in holder - I.forceMove(holder.drop_location()) - holder.icon_state = "phazon10" - if(15) + user.visible_message("[user] removes the phasic scanner module from [holder].", "You remove the scanner module from [holder].") + if(13) if(diff==FORWARD) - user.visible_message("[user] installs super capacitor to the [holder].", "You install capacitor to the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "phazon13" + user.visible_message("[user] installs super capacitor to [holder].", "You install capacitor to [holder].") else user.visible_message("[user] unfastens the phasic scanner module.", "You unfasten the scanner module.") - holder.icon_state = "phazon11" if(14) if(diff==FORWARD) user.visible_message("[user] secures the super capacitor.", "You secure the capacitor.") - holder.icon_state = "phazon14" else - user.visible_message("[user] removes the super capacitor from the [holder].", "You remove the capacitor from the [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/capacitor) in holder - I.forceMove(holder.drop_location()) - holder.icon_state = "phazon12" - if(13) + user.visible_message("[user] removes the super capacitor from [holder].", "You remove the capacitor from [holder].") + if(15) if(diff==FORWARD) user.visible_message("[user] installs the bluespace crystal.", "You install the bluespace crystal.") - qdel(used_atom) - holder.icon_state = "phazon15" else - user.visible_message("[user] unsecures the super capacitor from the [holder].", "You unsecure the capacitor from the [holder].") - holder.icon_state = "phazon13" - if(12) + user.visible_message("[user] unsecures the super capacitor from [holder].", "You unsecure the capacitor from [holder].") + if(16) if(diff==FORWARD) user.visible_message("[user] connects the bluespace crystal.", "You connect the bluespace crystal.") - holder.icon_state = "phazon16" else - user.visible_message("[user] removes the bluespace crystal from the [holder].", "You remove the bluespace crystal from the [holder].") - new /obj/item/stack/ore/bluespace_crystal(get_turf(holder)) - holder.icon_state = "phazon14" - if(11) + user.visible_message("[user] removes the bluespace crystal from [holder].", "You remove the bluespace crystal from [holder].") + if(17) if(diff==FORWARD) user.visible_message("[user] engages the bluespace crystal.", "You engage the bluespace crystal.") - holder.icon_state = "phazon17" else - user.visible_message("[user] disconnects the bluespace crystal from the [holder].", "You disconnect the bluespace crystal from the [holder].") - holder.icon_state = "phazon15" - if(10) + user.visible_message("[user] disconnects the bluespace crystal from [holder].", "You disconnect the bluespace crystal from [holder].") + if(18) if(diff==FORWARD) - user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "phazon18" + user.visible_message("[user] installs the power cell into [holder].", "You install the power cell into [holder].") else user.visible_message("[user] disengages the bluespace crystal.", "You disengage the bluespace crystal.") - holder.icon_state = "phazon16" - if(9) + if(19) if(diff==FORWARD) user.visible_message("[user] secures the power cell.", "You secure the power cell.") - holder.icon_state = "phazon19" else user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder - I.forceMove(holder.drop_location()) - holder.icon_state = "phazon17" - if(8) + if(20) if(diff==FORWARD) - user.visible_message("[user] installs the phase armor layer to the [holder].", "You install the phase armor layer to the [holder].") - holder.icon_state = "phazon20" + user.visible_message("[user] installs the phase armor layer to [holder].", "You install the phase armor layer to [holder].") else user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") - holder.icon_state = "durand18" - if(7) + if(21) if(diff==FORWARD) user.visible_message("[user] secures the phase armor layer.", "You secure the phase armor layer.") - holder.icon_state = "phazon21" else - user.visible_message("[user] pries the phase armor layer from the [holder].", "You pry the phase armor layer from the [holder].") - var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "phazon19" - if(6) + user.visible_message("[user] pries the phase armor layer from [holder].", "You pry the phase armor layer from [holder].") + if(22) if(diff==FORWARD) - user.visible_message("[user] welds the phase armor layer to the [holder].", "You weld the phase armor layer to the [holder].") - holder.icon_state = "phazon22" + user.visible_message("[user] welds the phase armor layer to [holder].", "You weld the phase armor layer to [holder].") else user.visible_message("[user] unfastens the phase armor layer.", "You unfasten the phase armor layer.") - holder.icon_state = "phazon20" - if(5) + if(23) if(diff==FORWARD) - user.visible_message("[user] installs Phazon Armor Plates to the [holder].", "You install Phazon Armor Plates to the [holder].") - qdel(used_atom) - holder.icon_state = "phazon23" + user.visible_message("[user] installs Phazon Armor Plates to [holder].", "You install Phazon Armor Plates to [holder].") else - user.visible_message("[user] cuts phase armor layer from the [holder].", "You cut the phase armor layer from the [holder].") - holder.icon_state = "phazon21" - if(4) + user.visible_message("[user] cuts phase armor layer from [holder].", "You cut the phase armor layer from [holder].") + if(24) if(diff==FORWARD) user.visible_message("[user] secures Phazon Armor Plates.", "You secure Phazon Armor Plates.") - holder.icon_state = "phazon24" else - user.visible_message("[user] pries Phazon Armor Plates from the [holder].", "You pry Phazon Armor Plates from the [holder].") - new /obj/item/mecha_parts/part/phazon_armor(get_turf(holder)) - holder.icon_state = "phazon22" - if(3) + user.visible_message("[user] pries Phazon Armor Plates from [holder].", "You pry Phazon Armor Plates from [holder].") + if(25) if(diff==FORWARD) - user.visible_message("[user] welds Phazon Armor Plates to the [holder].", "You weld Phazon Armor Plates to the [holder].") + user.visible_message("[user] welds Phazon Armor Plates to [holder].", "You weld Phazon Armor Plates to [holder].") else user.visible_message("[user] unfastens Phazon Armor Plates.", "You unfasten Phazon Armor Plates.") - holder.icon_state = "phazon23" - if(2) + if(26) if(diff==FORWARD) - user.visible_message("[user] carefully inserts the anomaly core into \the [holder] and secures it.", "You slowly place the anomaly core into its socket and close its chamber.") - qdel(used_atom) - spawn_mecha_result() + user.visible_message("[user] carefully inserts the anomaly core into [holder] and secures it.", + "You slowly place the anomaly core into its socket and close its chamber.") return TRUE //ODYSSEUS -/datum/construction/mecha/odysseus_chassis - steps = list(list("key"=/obj/item/mecha_parts/part/odysseus_torso), //1 - list("key"=/obj/item/mecha_parts/part/odysseus_head), //2 - list("key"=/obj/item/mecha_parts/part/odysseus_left_arm), //3 - list("key"=/obj/item/mecha_parts/part/odysseus_right_arm), //4 - list("key"=/obj/item/mecha_parts/part/odysseus_left_leg), //5 - list("key"=/obj/item/mecha_parts/part/odysseus_right_leg)//6 - ) - -/datum/construction/mecha/odysseus_chassis/custom_action(step, atom/used_atom, mob/user) - user.visible_message("[user] has connected [used_atom] to the [holder].", "You connect [used_atom] to the [holder].") - holder.add_overlay(used_atom.icon_state+"+o") - qdel(used_atom) - return TRUE - -/datum/construction/mecha/odysseus_chassis/action(atom/used_atom,mob/user) - return check_all_steps(used_atom,user) - -/datum/construction/mecha/odysseus_chassis/spawn_result() - var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/reversible/mecha/odysseus(const_holder) - const_holder.icon = 'icons/mecha/mech_construction.dmi' - const_holder.icon_state = "odysseus0" - const_holder.density = TRUE - qdel(src) - - -/datum/construction/reversible/mecha/odysseus - result = /obj/mecha/medical/odysseus +/datum/construction/unordered/mecha_chassis/odysseus + result = /datum/construction/mecha/odysseus steps = list( - //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. - list("desc"="You shouldn't be able to see this."), + /obj/item/mecha_parts/part/odysseus_torso, + /obj/item/mecha_parts/part/odysseus_head, + /obj/item/mecha_parts/part/odysseus_left_arm, + /obj/item/mecha_parts/part/odysseus_right_arm, + /obj/item/mecha_parts/part/odysseus_left_leg, + /obj/item/mecha_parts/part/odysseus_right_leg + ) - //1 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="External armor is wrenched."), - //2 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="External armor is installed."), - //3 - list("key"=/obj/item/stack/sheet/plasteel, - "backkey"=/obj/item/weldingtool, - "desc"="Internal armor is welded."), - //4 - list("key"=/obj/item/weldingtool, - "backkey"=/obj/item/wrench, - "desc"="Internal armor is wrenched."), - //5 - list("key"=/obj/item/wrench, - "backkey"=/obj/item/crowbar, - "desc"="Internal armor is installed."), - //6 - list("key"=/obj/item/stack/sheet/metal, - "backkey"=/obj/item/screwdriver, - "desc"="The power cell is secured."), - //7 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="The power cell is installed."), - //8 - list("key"=/obj/item/stock_parts/cell, - "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), - //9 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed."), - //10 - list("key"=/obj/item/circuitboard/mecha/odysseus/peripherals, - "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), - //11 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), - //12 - list("key"=/obj/item/circuitboard/mecha/odysseus/main, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is adjusted."), - //13 - list("key"=/obj/item/wirecutters, - "backkey"=/obj/item/screwdriver, - "desc"="The wiring is added."), - //14 - list("key"=/obj/item/stack/cable_coil, - "backkey"=/obj/item/screwdriver, - "desc"="The hydraulic systems are active."), - //15 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/wrench, - "desc"="The hydraulic systems are connected."), - //16 - list("key"=/obj/item/wrench, - "desc"="The hydraulic systems are disconnected.") - ) +/datum/construction/mecha/odysseus + result = /obj/mecha/medical/odysseus + base_icon = "odysseus" + steps = list( + //1 + list( + "key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are disconnected." + ), -/datum/construction/reversible/mecha/odysseus/action(atom/used_atom,mob/user) - return check_step(used_atom,user) + //2 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_WRENCH, + "desc" = "The hydraulic systems are connected." + ), -/datum/construction/reversible/mecha/odysseus/custom_action(index, diff, atom/used_atom, mob/user) + //3 + list( + "key" = /obj/item/stack/cable_coil, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The hydraulic systems are active." + ), + + //4 + list( + "key" = TOOL_WIRECUTTER, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is added." + ), + + //5 + list( + "key" = /obj/item/circuitboard/mecha/odysseus/main, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The wiring is adjusted." + ), + + //6 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Central control module is installed." + ), + + //7 + list( + "key" = /obj/item/circuitboard/mecha/odysseus/peripherals, + "action" = ITEM_DELETE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Central control module is secured." + ), + + //8 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "Peripherals control module is installed." + ), + + //9 + list( + "key" = /obj/item/stock_parts/cell, + "action" = ITEM_MOVE_INSIDE, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "Peripherals control module is secured." + ), + + //10 + list( + "key" = TOOL_SCREWDRIVER, + "back_key" = TOOL_CROWBAR, + "desc" = "The power cell is installed." + ), + + //11 + list( + "key" = /obj/item/stack/sheet/metal, + "amount" = 5, + "back_key" = TOOL_SCREWDRIVER, + "desc" = "The power cell is secured." + ), + + //12 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "Internal armor is installed." + ), + + //13 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "Internal armor is wrenched." + ), + + //14 + list( + "key" = /obj/item/stack/sheet/plasteel, + "amount" = 5, + "back_key" = TOOL_WELDER, + "desc" = "Internal armor is welded." + ), + + //15 + list( + "key" = TOOL_WRENCH, + "back_key" = TOOL_CROWBAR, + "desc" = "External armor is installed." + ), + + //16 + list( + "key" = TOOL_WELDER, + "back_key" = TOOL_WRENCH, + "desc" = "External armor is wrenched." + ), + ) + +/datum/construction/mecha/odysseus/custom_action(obj/item/I, mob/living/user, diff) if(!..()) return FALSE //TODO: better messages. switch(index) - if(17) - user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") - holder.icon_state = "odysseus1" - if(16) - if(diff==FORWARD) - user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") - holder.icon_state = "odysseus2" - else - user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") - holder.icon_state = "odysseus0" - if(15) - if(diff==FORWARD) - user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") - holder.icon_state = "odysseus3" - else - user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") - holder.icon_state = "odysseus1" - if(14) - if(diff==FORWARD) - user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") - holder.icon_state = "odysseus4" - else - user.visible_message("[user] removes the wiring from the [holder].", "You remove the wiring from the [holder].") - var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) - coil.amount = 4 - holder.icon_state = "odysseus2" - if(13) - if(diff==FORWARD) - user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") - qdel(used_atom) - holder.icon_state = "odysseus5" - else - user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") - holder.icon_state = "odysseus3" - if(12) - if(diff==FORWARD) - user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") - holder.icon_state = "odysseus6" - else - user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") - new /obj/item/circuitboard/mecha/odysseus/main(get_turf(holder)) - holder.icon_state = "odysseus4" - if(11) - if(diff==FORWARD) - user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") - qdel(used_atom) - holder.icon_state = "odysseus7" - else - user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") - holder.icon_state = "odysseus5" - if(10) - if(diff==FORWARD) - user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") - holder.icon_state = "odysseus8" - else - user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") - new /obj/item/circuitboard/mecha/odysseus/peripherals(get_turf(holder)) - holder.icon_state = "odysseus6" - if(9) - if(diff==FORWARD) - user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") - var/obj/item/I = used_atom - user.transferItemToLoc(I, holder, TRUE) - holder.icon_state = "odysseus9" - else - user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") - holder.icon_state = "odysseus7" - if(8) - if(diff==FORWARD) - user.visible_message("[user] secures the power cell.", "You secure the power cell.") - holder.icon_state = "odysseus10" - else - user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") - var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder - I.forceMove(holder.drop_location()) - holder.icon_state = "odysseus8" - if(7) - if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") - holder.icon_state = "odysseus11" - else - user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") - holder.icon_state = "odysseus9" - if(6) - if(diff==FORWARD) - user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "odysseus12" - else - user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") - var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) - MS.amount = 5 - holder.icon_state = "odysseus10" - if(5) - if(diff==FORWARD) - user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") - holder.icon_state = "odysseus13" - else - user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "odysseus11" - if(4) - if(diff==FORWARD) - user.visible_message("[user] installs [used_atom] layer to the [holder].", "You install the external reinforced armor layer to the [holder].") - - holder.icon_state = "odysseus14" - else - user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") - holder.icon_state = "odysseus12" - if(3) - if(diff==FORWARD) - user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") - holder.icon_state = "odysseus15" - else - var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) - MS.amount = 5 - user.visible_message("[user] pries [MS] from the [holder].", "You pry [MS] from the [holder].") - holder.icon_state = "odysseus13" + if(1) + user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.") if(2) if(diff==FORWARD) - user.visible_message("[user] welds the external armor layer to the [holder].", "You weld the external armor layer to the [holder].") - spawn_mecha_result() + user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.") + else + user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.") + if(3) + if(diff==FORWARD) + user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].") + else + user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.") + if(4) + if(diff==FORWARD) + user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].") + else + user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].") + if(5) + if(diff==FORWARD) + user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].") + else + user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].") + if(6) + if(diff==FORWARD) + user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") + else + user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].") + if(7) + if(diff==FORWARD) + user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].") + else + user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") + if(8) + if(diff==FORWARD) + user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") + else + user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].") + if(9) + if(diff==FORWARD) + user.visible_message("[user] installs the power cell into [holder].", "You install the power cell into [holder].") + else + user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") + if(10) + if(diff==FORWARD) + user.visible_message("[user] secures the power cell.", "You secure the power cell.") + else + user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") + if(11) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].") + else + user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") + if(12) + if(diff==FORWARD) + user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") + else + user.visible_message("[user] pries internal armor layer from [holder].", "You pry internal armor layer from [holder].") + if(13) + if(diff==FORWARD) + user.visible_message("[user] welds the internal armor layer to [holder].", "You weld the internal armor layer to [holder].") + else + user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") + if(14) + if(diff==FORWARD) + user.visible_message("[user] installs the external armor layer to [holder].", "You install the external reinforced armor layer to [holder].") + else + user.visible_message("[user] cuts the internal armor layer from [holder].", "You cut the internal armor layer from [holder].") + if(15) + if(diff==FORWARD) + user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") + else + user.visible_message("[user] pries the external armor layer from [holder].", "You pry the external armor layer from [holder].") + if(16) + if(diff==FORWARD) + user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].") else user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "odysseus14" return TRUE diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index d62926e3d0..566be391cc 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -10,9 +10,15 @@ flags_1 = CONDUCT_1 /obj/item/mecha_parts/chassis - name="Mecha Chassis" + name = "Mecha Chassis" icon_state = "backbone" var/datum/construction/construct + var/construct_type + +/obj/item/mecha_parts/chassis/Initialize() + . = ..() + if(construct_type) + construct = new construct_type(src) /obj/item/mecha_parts/chassis/attackby(obj/item/W, mob/user, params) if(!construct || !construct.action(W, user)) @@ -25,10 +31,7 @@ /obj/item/mecha_parts/chassis/ripley name = "\improper Ripley chassis" - -/obj/item/mecha_parts/chassis/ripley/Initialize() - . = ..() - construct = new /datum/construction/mecha/ripley_chassis(src) + construct_type = /datum/construction/unordered/mecha_chassis/ripley /obj/item/mecha_parts/part/ripley_torso name = "\improper Ripley torso" @@ -59,10 +62,7 @@ /obj/item/mecha_parts/chassis/odysseus name = "\improper Odysseus chassis" - -/obj/item/mecha_parts/chassis/odysseus/Initialize() - . = ..() - construct = new /datum/construction/mecha/odysseus_chassis(src) + construct_type = /datum/construction/unordered/mecha_chassis/odysseus /obj/item/mecha_parts/part/odysseus_head name = "\improper Odysseus head" @@ -98,10 +98,7 @@ /obj/item/mecha_parts/chassis/gygax name = "\improper Gygax chassis" - -/obj/item/mecha_parts/chassis/gygax/Initialize() - . = ..() - construct = new /datum/construction/mecha/gygax_chassis(src) + construct_type = /datum/construction/unordered/mecha_chassis/gygax /obj/item/mecha_parts/part/gygax_torso name = "\improper Gygax torso" @@ -144,10 +141,7 @@ /obj/item/mecha_parts/chassis/durand name = "\improper Durand chassis" - -/obj/item/mecha_parts/chassis/durand/Initialize() - . = ..() - construct = new /datum/construction/mecha/durand_chassis(src) + construct_type = /datum/construction/unordered/mecha_chassis/durand /obj/item/mecha_parts/part/durand_torso name = "\improper Durand torso" @@ -188,21 +182,15 @@ ////////// Firefighter /obj/item/mecha_parts/chassis/firefighter - name = "Firefighter chassis" - -/obj/item/mecha_parts/chassis/firefighter/Initialize() - . = ..() - construct = new /datum/construction/mecha/firefighter_chassis(src) + name = "\improper Firefighter chassis" + construct_type = /datum/construction/unordered/mecha_chassis/firefighter ////////// HONK /obj/item/mecha_parts/chassis/honker name = "\improper H.O.N.K chassis" - -/obj/item/mecha_parts/chassis/honker/Initialize() - . = ..() - construct = new /datum/construction/mecha/honker_chassis(src) + construct_type = /datum/construction/unordered/mecha_chassis/honker /obj/item/mecha_parts/part/honker_torso name = "\improper H.O.N.K torso" @@ -239,10 +227,7 @@ /obj/item/mecha_parts/chassis/phazon name = "\improper Phazon chassis" - -/obj/item/mecha_parts/chassis/phazon/Initialize() - . = ..() - construct = new /datum/construction/mecha/phazon_chassis(src) + construct_type = /datum/construction/unordered/mecha_chassis/phazon /obj/item/mecha_parts/part/phazon_torso name="\improper Phazon torso" From e4b037d6af43ad3da7033606555a7775e9e06195 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Sat, 17 Feb 2018 18:03:37 +0200 Subject: [PATCH 37/60] Merge pull request #35720 from LetterN/patch-1 Pulling claw grammar fix --- code/modules/integrated_electronics/subtypes/manipulation.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index 047df39e70..f150e9cfcd 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -356,7 +356,7 @@ name = "pulling claw" desc = "Circuit which can pull things.." icon_state = "pull_claw" - extended_desc = "The circuit accepts a reference to thing to be pulled. Modes: 0 for release.1 for pull. 2 for gressive grab." + extended_desc = "The circuit accepts a reference to thing to be pulled. Modes: 0 for release. 1 for pull." w_class = WEIGHT_CLASS_SMALL size = 3 From 40e2685a7c4d32a9293176b9fd1fd5d3228bc9e3 Mon Sep 17 00:00:00 2001 From: coiax Date: Sat, 17 Feb 2018 16:05:19 +0000 Subject: [PATCH 39/60] Removes abstract shotgun from Summon Guns list (#35736) * Fixes abstract shotgun from Summon Guns list Fixes #34962. Looking at the old summon gun list, the comment says this typepath was supposed to be a Bulldog. * Removes duplicate bulldog --- code/modules/spells/spell_types/rightandwrong.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index 2d5ac40c8b..c69b9b1e86 100644 --- a/code/modules/spells/spell_types/rightandwrong.dm +++ b/code/modules/spells/spell_types/rightandwrong.dm @@ -25,7 +25,6 @@ GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/energy/kinetic_accelerator/crossbow/large, /obj/item/gun/energy/e_gun/nuclear, /obj/item/gun/ballistic/automatic/proto, - /obj/item/gun/ballistic/automatic/shotgun/bulldog, /obj/item/gun/ballistic/automatic/c20r, /obj/item/gun/ballistic/automatic/l6_saw, /obj/item/gun/ballistic/automatic/m90, @@ -39,7 +38,7 @@ GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/energy/plasmacutter/adv, /obj/item/gun/energy/wormhole_projector, /obj/item/gun/ballistic/automatic/wt550, - /obj/item/gun/ballistic/automatic/shotgun, + /obj/item/gun/ballistic/automatic/shotgun/bulldog, /obj/item/gun/ballistic/revolver/grenadelauncher, /obj/item/gun/ballistic/revolver/golden, /obj/item/gun/ballistic/automatic/sniper_rifle, From cec7acc0eae96a17ff94dfd35cf85064a67a7524 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Sat, 17 Feb 2018 18:04:24 +0200 Subject: [PATCH 41/60] Merge pull request #35725 from jakeramsay007/slimepeoplefixes Jellypeople (and all subtypes) now can actually speak Slime, as intended --- .../mob/living/carbon/human/species_types/jellypeople.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 0299d64621..cca5e1e785 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -17,14 +17,14 @@ /datum/species/jelly/on_species_loss(mob/living/carbon/C) if(regenerate_limbs) regenerate_limbs.Remove(C) - C.remove_language(/datum/language/slime, TRUE) + C.remove_language(/datum/language/slime) C.faction -= "slime" ..() C.faction -= "slime" /datum/species/jelly/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() - C.grant_language(/datum/language/slime, TRUE) + C.grant_language(/datum/language/slime) if(ishuman(C)) regenerate_limbs = new regenerate_limbs.Grant(C) From d368c42a980741b65e0cdd8be0320201c5204cbe Mon Sep 17 00:00:00 2001 From: Dax Dupont Date: Sat, 17 Feb 2018 17:12:08 +0100 Subject: [PATCH 43/60] Fixes extremely thicc robots (#35722) * Fixes extremely fat robots * grasp --- code/game/objects/items/robot/robot_upgrades.dm | 3 ++- code/modules/mob/living/silicon/robot/robot.dm | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 808063d0e2..82fbab128c 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -397,7 +397,7 @@ if(..()) return - if(locate(/obj/item/borg/upgrade/expand, R)) + if(R.hasExpanded) to_chat(usr, "This unit already has an expand module installed!") return @@ -417,5 +417,6 @@ R.anchored = FALSE R.notransform = FALSE R.resize = 2 + R.hasExpanded = TRUE R.update_transform() return TRUE diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3b8f35de5a..2e57fb929b 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -77,6 +77,7 @@ var/list/upgrades = list() + var/hasExpanded = FALSE var/obj/item/hat var/hat_offset = -3 var/list/equippable_hats = list(/obj/item/clothing/head/caphat, @@ -976,6 +977,11 @@ shown_robot_modules = FALSE if(hud_used) hud_used.update_robot_modules_display() + + if (hasExpanded) + resize = 0.5 + hasExpanded = FALSE + update_transform() module.transform_to(/obj/item/robot_module) // Remove upgrades. From dbdb29d913cc6504a0d8cb0eea54a2f3a2b03f03 Mon Sep 17 00:00:00 2001 From: BordListian Date: Sat, 17 Feb 2018 17:13:08 +0100 Subject: [PATCH 45/60] - Makes lava not burn unconstructed heat-exhanging pipes (#35705) --- code/game/machinery/pipe/construction.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index bc192a05de..5a1a759d07 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -83,6 +83,8 @@ Buildable meters var/obj/machinery/atmospherics/fakeA = pipe_type name = "[initial(fakeA.name)] fitting" icon_state = initial(fakeA.pipe_state) + if(ispath(pipe_type,/obj/machinery/atmospherics/pipe/heat_exchanging)) + resistance_flags |= FIRE_PROOF | LAVA_PROOF /obj/item/pipe/verb/flip() set category = "Object" From 92526a4a9409cbee07f38b2c56a3582a76c86cbc Mon Sep 17 00:00:00 2001 From: LetterJay Date: Sat, 17 Feb 2018 11:47:24 -0600 Subject: [PATCH 47/60] Update corpse.dm --- code/modules/awaymissions/corpse.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index d57ea83e8f..e59c17cafc 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -106,6 +106,7 @@ var/mob_species = null //Set to make them a mutant race such as lizard or skeleton. Uses the datum typepath instead of the ID. var/datum/outfit/outfit = /datum/outfit //If this is a path, it will be instanced in Initialize() var/disable_pda = TRUE + var/disable_sensors = TRUE //All of these only affect the ID that the outfit has placed in the ID slot var/id_job = null //Such as "Clown" or "Chef." This just determines what the ID reads as, not their access var/id_access = null //This is for access. See access.dm for which jobs give what access. Use "Captain" if you want it to be all access. @@ -186,6 +187,7 @@ var/obj/item/clothing/under/C = H.wear_suit if(C) C.sensor_mode = NO_SENSORS + var/obj/item/card/id/W = H.wear_id if(W) if(id_access) From 1deb5d10f7e07b144e94ddb6d5b15693b273335d Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 17 Feb 2018 11:47:38 -0600 Subject: [PATCH 48/60] Automatic changelog generation for PR #5542 [ci skip] --- html/changelogs/AutoChangeLog-pr-5542.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5542.yml diff --git a/html/changelogs/AutoChangeLog-pr-5542.yml b/html/changelogs/AutoChangeLog-pr-5542.yml new file mode 100644 index 0000000000..941c3c2a57 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5542.yml @@ -0,0 +1,5 @@ +author: "coiax" +delete-after: True +changes: + - bugfix: "Species with RESISTHOT (golems, skeletons) can extinguish burning +items as if they were wearing fireproof gloves." From 4d882e1818be14f6877d0fc8f9d9e4dbd0963bad Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 17 Feb 2018 11:48:53 -0600 Subject: [PATCH 49/60] Automatic changelog generation for PR #5546 [ci skip] --- html/changelogs/AutoChangeLog-pr-5546.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5546.yml diff --git a/html/changelogs/AutoChangeLog-pr-5546.yml b/html/changelogs/AutoChangeLog-pr-5546.yml new file mode 100644 index 0000000000..0c26141b42 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5546.yml @@ -0,0 +1,4 @@ +author: "jakeramsay007" +delete-after: True +changes: + - bugfix: "Jellypeople/Slimepeople now are able to speak their Slime language, as intended when it was added." From e535428bf3961a1001bfac170280abc8be1e843f Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 17 Feb 2018 11:49:17 -0600 Subject: [PATCH 50/60] Automatic changelog generation for PR #5547 [ci skip] --- html/changelogs/AutoChangeLog-pr-5547.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5547.yml diff --git a/html/changelogs/AutoChangeLog-pr-5547.yml b/html/changelogs/AutoChangeLog-pr-5547.yml new file mode 100644 index 0000000000..b9174386ca --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5547.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - bugfix: "After an incident where a very eager roboticist kept expanding a borg's size leading to a structural collapse of the entire station proper safety limitations have been implemented." From 9bfe0ec64e65873c95652a41707df60f63623f9a Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 17 Feb 2018 11:49:51 -0600 Subject: [PATCH 51/60] Automatic changelog generation for PR #5548 [ci skip] --- html/changelogs/AutoChangeLog-pr-5548.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5548.yml diff --git a/html/changelogs/AutoChangeLog-pr-5548.yml b/html/changelogs/AutoChangeLog-pr-5548.yml new file mode 100644 index 0000000000..f3695c5649 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5548.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "fixes lava and fire burning HE-pipes" From f1d33ec520b9159e33f14c53ec8cc35a66703bdf Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 17 Feb 2018 11:51:47 -0600 Subject: [PATCH 52/60] Automatic changelog generation for PR #5525 [ci skip] --- html/changelogs/AutoChangeLog-pr-5525.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5525.yml diff --git a/html/changelogs/AutoChangeLog-pr-5525.yml b/html/changelogs/AutoChangeLog-pr-5525.yml new file mode 100644 index 0000000000..8fffeb931d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5525.yml @@ -0,0 +1,7 @@ +author: "RealDonaldTrump" +delete-after: True +changes: + - rscadd: "Slimepeople (And all types, including Jelly, Xenobio Slimeperson, Stargazer and Luminescent) now have the ability to utilise the 'Alter Form' ability, allowing them to change most things about their body's form." + - rscadd: "Re-added the slime split and bodyswap ability to Xenobiological Slimepeople, only obtainable through xenobio." + - rscadd: "Slimepeople can now select tails, taur bodies and ears at roundstart. YOU WILL NEED TO SET YOUR COLOURS; otherwise you'll be rainbow coloured and not exactly slime-like. And nobody wants that." + - config: "Changed the ID for the roundstart slimepeople (Without the body swap and slime split abilities) to slimeperson. This will need set in the config on Jay's end." From f03905ebde6978ca28f71e564acee9ad859a0a98 Mon Sep 17 00:00:00 2001 From: yorii Date: Sat, 17 Feb 2018 20:15:54 +0100 Subject: [PATCH 53/60] fixes poddoor examine message (#35732) examining a blast door do longer gives the regular door examination about the maintenance panel. --- code/game/machinery/doors/door.dm | 4 +++- code/game/machinery/doors/poddoor.dm | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 7c14f48e2d..70181ba138 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -33,6 +33,7 @@ var/damage_deflection = 10 var/real_explosion_block //ignore this, just use explosion_block var/red_alert_access = FALSE //if TRUE, this door will always open on red alert + var/poddoor = FALSE /obj/machinery/door/examine(mob/user) ..() @@ -41,7 +42,8 @@ to_chat(user, "Due to a security threat, its access requirements have been lifted!") else to_chat(user, "In the event of a red alert, its access requirements will automatically lift.") - to_chat(user, "Its maintenance panel is screwed in place.") + if(!poddoor) + to_chat(user, "Its maintenance panel is screwed in place.") /obj/machinery/door/check_access(access) if(red_alert_access && GLOB.security_level >= SEC_LEVEL_RED) diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index f42352d79d..6daa7b89d6 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -14,6 +14,7 @@ armor = list(melee = 50, bullet = 100, laser = 100, energy = 100, bomb = 50, bio = 100, rad = 100, fire = 100, acid = 70) resistance_flags = FIRE_PROOF damage_deflection = 70 + poddoor = TRUE /obj/machinery/door/poddoor/preopen icon_state = "open" From f31df38f839c96de586b7e4649465c9460fc71ba Mon Sep 17 00:00:00 2001 From: Dax Dupont Date: Sat, 17 Feb 2018 20:17:11 +0100 Subject: [PATCH 55/60] Reflectors now reset the range of a projectile like before! (#35726) * Reflectors now reset the range of a projectile. * how about dem apples --- code/game/objects/structures/reflector.dm | 2 ++ code/modules/projectiles/projectile.dm | 2 ++ 2 files changed, 4 insertions(+) diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index a6e8135dc5..35cb82c697 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -72,6 +72,8 @@ /obj/structure/reflector/proc/auto_reflect(obj/item/projectile/P, pdir, turf/ploc, pangle) P.ignore_source_check = TRUE + P.range = P.decayedRange + P.decayedRange = max(P.decayedRange--, 0) return -1 /obj/structure/reflector/attackby(obj/item/W, mob/user, params) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 3c8092307a..6da6f8629f 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -65,6 +65,7 @@ var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb var/projectile_type = /obj/item/projectile var/range = 50 //This will de-increment every step. When 0, it will deletze the projectile. + var/decayedRange var/is_reflectable = FALSE // Can it be reflected or not? //Effects var/stun = 0 @@ -85,6 +86,7 @@ /obj/item/projectile/Initialize() . = ..() permutated = list() + decayedRange = range /obj/item/projectile/proc/Range() range-- From d017dc051707dad4f5ea0bdc3125d830b5e2998e Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 17 Feb 2018 13:31:22 -0600 Subject: [PATCH 57/60] Automatic changelog generation for PR #5535 [ci skip] --- html/changelogs/AutoChangeLog-pr-5535.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5535.yml diff --git a/html/changelogs/AutoChangeLog-pr-5535.yml b/html/changelogs/AutoChangeLog-pr-5535.yml new file mode 100644 index 0000000000..c74dec1e9d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5535.yml @@ -0,0 +1,6 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "added a subreaction for rainbow slime cores, injecting 5u of plasma now makes them explode into random slimecores." + - rscadd: "added a slimejelly reaction to rainbow slime cores that does the above but all the cores that spawn get 5u each of plasma, water and blood injected. (aka chaos)" + - code_imp: "improved clusterbuster code with Initialize, addtimer, vars for sounds and payload spawners, etc" From 07f88892ad5fb5df3635124bd33269834dd05b0c Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 17 Feb 2018 13:31:36 -0600 Subject: [PATCH 58/60] Automatic changelog generation for PR #5539 [ci skip] --- html/changelogs/AutoChangeLog-pr-5539.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5539.yml diff --git a/html/changelogs/AutoChangeLog-pr-5539.yml b/html/changelogs/AutoChangeLog-pr-5539.yml new file mode 100644 index 0000000000..f0d826d2dc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5539.yml @@ -0,0 +1,4 @@ +author: "TankNut" +delete-after: True +changes: + - tweak: "Corpses spawned in ruins have their suit sensors disabled" From 39d92847156a8ed4c454df649fa18d386785c5d1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 17 Feb 2018 13:31:49 -0600 Subject: [PATCH 59/60] Automatic changelog generation for PR #5549 [ci skip] --- html/changelogs/AutoChangeLog-pr-5549.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5549.yml diff --git a/html/changelogs/AutoChangeLog-pr-5549.yml b/html/changelogs/AutoChangeLog-pr-5549.yml new file mode 100644 index 0000000000..fddb207ee1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5549.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "removes the maintenance panel examination message on poddoors (blast doors)" From bd6345ffd5dc67c9ae22ce180158e6e80167f4e8 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Sat, 17 Feb 2018 14:44:08 -0600 Subject: [PATCH 60/60] Automatic changelog generation for PR #5550 [ci skip] --- html/changelogs/AutoChangeLog-pr-5550.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-5550.yml diff --git a/html/changelogs/AutoChangeLog-pr-5550.yml b/html/changelogs/AutoChangeLog-pr-5550.yml new file mode 100644 index 0000000000..9e3ae64528 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5550.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - rscadd: "Nanotrasen has invested in better reflective materials for it's reflectors. You can now make complex laser shows again."