From b1688405d9faa96e7d4c8a165a66182efeb649e0 Mon Sep 17 00:00:00 2001 From: deathride58 Date: Mon, 2 Jul 2018 01:19:37 -0400 Subject: [PATCH] and finally, the modules folder. Now I can publish and take a break --- code/modules/NTNet/network.dm | 16 +- code/modules/VR/vr_sleeper.dm | 2 +- code/modules/admin/DB_ban/functions.dm | 39 ++- code/modules/admin/IsBanned.dm | 3 + code/modules/admin/admin.dm | 17 +- code/modules/admin/admin_investigate.dm | 2 +- code/modules/admin/admin_ranks.dm | 4 +- code/modules/admin/admin_verbs.dm | 1 - code/modules/admin/banjob.dm | 7 +- code/modules/admin/chat_commands.dm | 6 +- code/modules/admin/create_poll.dm | 14 +- code/modules/admin/fun_balloon.dm | 2 +- code/modules/admin/ipintel.dm | 5 +- code/modules/admin/permissionedit.dm | 77 +++++- code/modules/admin/secrets.dm | 15 +- code/modules/admin/sql_message_system.dm | 61 ++++- code/modules/admin/topic.dm | 24 +- code/modules/admin/verbs/adminhelp.dm | 4 +- code/modules/admin/verbs/adminpm.dm | 16 +- code/modules/admin/verbs/adminsay.dm | 4 +- code/modules/admin/verbs/manipulate_organs.dm | 16 +- code/modules/admin/verbs/one_click_antag.dm | 8 +- code/modules/admin/verbs/pray.dm | 2 +- .../antagonists/_common/antag_datum.dm | 6 +- .../antagonists/_common/antag_spawner.dm | 6 +- .../abductor/equipment/abduction_gear.dm | 7 +- .../abductor/equipment/abduction_outfits.dm | 2 +- .../antagonists/abductor/machinery/console.dm | 2 +- .../modules/antagonists/blob/blob/overmind.dm | 2 +- .../antagonists/changeling/changeling.dm | 2 +- .../antagonists/changeling/powers/absorb.dm | 7 - .../changeling/powers/augmented_eyesight.dm | 4 +- .../changeling/powers/digitalcamo.dm | 2 +- .../changeling/powers/mutations.dm | 17 +- .../changeling/powers/pheromone_receptors.dm | 57 +++++ .../changeling/powers/tiny_prick.dm | 2 +- .../changeling/powers/transform.dm | 16 +- .../clock_helpers/fabrication_helpers.dm | 16 +- .../clockcult/clock_helpers/slab_abilities.dm | 2 +- .../clockcult/clock_items/clockwork_armor.dm | 4 +- .../clockcult/clock_items/clockwork_slab.dm | 2 +- .../clockcult/clock_items/integration_cog.dm | 2 +- .../clock_items/replica_fabricator.dm | 2 +- .../clock_items/wraith_spectacles.dm | 2 +- .../clock_scriptures/scripture_drivers.dm | 2 +- code/modules/antagonists/cult/blood_magic.dm | 13 +- code/modules/antagonists/cult/cult.dm | 6 +- code/modules/antagonists/cult/cult_items.dm | 15 +- code/modules/antagonists/cult/runes.dm | 14 +- code/modules/antagonists/devil/imp/imp.dm | 2 +- .../devil/true_devil/_true_devil.dm | 2 +- .../antagonists/disease/disease_abilities.dm | 24 +- .../antagonists/disease/disease_mob.dm | 6 +- .../antagonists/highlander/highlander.dm | 2 +- .../nukeop/equipment/nuclear_challenge.dm | 4 +- .../nukeop/equipment/pinpointer.dm | 6 +- code/modules/antagonists/official/official.dm | 2 +- .../traitor/IAA/internal_affairs.dm | 7 +- .../traitor/equipment/Malf_Modules.dm | 6 +- .../antagonists/valentines/valentine.dm | 9 + .../antagonists/wizard/equipment/artefact.dm | 6 +- .../antagonists/wizard/equipment/soulstone.dm | 31 +-- .../antagonists/wizard/equipment/spellbook.dm | 18 +- code/modules/assembly/flash.dm | 4 +- code/modules/assembly/igniter.dm | 2 +- code/modules/assembly/infrared.dm | 11 +- code/modules/assembly/signaler.dm | 12 +- .../atmospherics/environmental/LINDA_fire.dm | 9 +- .../environmental/LINDA_turf_tile.dm | 20 +- .../atmospherics/gasmixtures/gas_mixture.dm | 10 +- .../atmospherics/gasmixtures/reactions.dm | 9 +- .../components/binary_devices/dp_vent_pump.dm | 2 +- .../components/binary_devices/pump.dm | 8 +- .../components/binary_devices/valve.dm | 1 - .../components/unary_devices/vent_pump.dm | 4 +- .../atmospherics/machinery/datum_pipeline.dm | 2 +- code/modules/awaymissions/capture_the_flag.dm | 4 +- code/modules/awaymissions/corpse.dm | 2 + .../awaymissions/mission_code/Academy.dm | 2 +- .../awaymissions/mission_code/caves.dm | 6 +- .../mission_code/moonoutpost19.dm | 12 +- .../awaymissions/mission_code/snowdin.dm | 37 +-- code/modules/cargo/bounties/special.dm | 2 +- code/modules/cargo/bounties/virus.dm | 2 +- code/modules/cargo/export_scanner.dm | 2 +- code/modules/cargo/exports/weapons.dm | 34 +-- code/modules/cargo/packs.dm | 64 ++--- code/modules/client/client_procs.dm | 28 ++- code/modules/client/preferences.dm | 81 +++--- code/modules/client/preferences_savefile.dm | 8 +- code/modules/client/verbs/ooc.dm | 60 ++++- code/modules/client/verbs/suicide.dm | 5 +- code/modules/clothing/chameleon.dm | 6 +- code/modules/clothing/ears/_ears.dm | 100 ++++---- code/modules/clothing/glasses/_glasses.dm | 2 +- code/modules/clothing/head/helmet.dm | 8 +- code/modules/clothing/head/jobs.dm | 4 +- code/modules/clothing/head/misc.dm | 10 +- code/modules/clothing/masks/hailer.dm | 2 +- code/modules/clothing/masks/miscellaneous.dm | 2 +- code/modules/clothing/outfits/event.dm | 2 +- code/modules/clothing/outfits/standard.dm | 10 +- code/modules/clothing/outfits/vr.dm | 2 +- code/modules/clothing/shoes/miscellaneous.dm | 10 +- .../modules/clothing/spacesuits/chronosuit.dm | 14 +- .../modules/clothing/spacesuits/flightsuit.dm | 10 +- code/modules/clothing/spacesuits/hardsuit.dm | 2 +- .../clothing/spacesuits/miscellaneous.dm | 4 +- code/modules/clothing/suits/armor.dm | 2 +- code/modules/clothing/suits/bio.dm | 2 +- code/modules/clothing/suits/cloaks.dm | 2 +- code/modules/clothing/suits/labcoat.dm | 4 +- code/modules/clothing/suits/miscellaneous.dm | 4 +- code/modules/clothing/suits/wiz_robe.dm | 2 +- code/modules/clothing/under/accessories.dm | 2 +- code/modules/clothing/under/color.dm | 2 +- code/modules/clothing/under/miscellaneous.dm | 6 +- code/modules/crafting/craft.dm | 3 +- code/modules/detectivework/evidence.dm | 4 +- .../detectivework/footprints_and_rag.dm | 4 +- code/modules/detectivework/scanner.dm | 5 +- code/modules/events/aurora_caelus.dm | 4 +- code/modules/events/disease_outbreak.dm | 22 +- code/modules/events/wizard/curseditems.dm | 2 +- code/modules/events/wizard/rpgloot.dm | 4 +- code/modules/fields/gravity.dm | 17 ++ code/modules/fields/turf_objects.dm | 2 +- code/modules/flufftext/Hallucination.dm | 4 +- code/modules/food_and_drinks/drinks/drinks.dm | 5 + code/modules/food_and_drinks/food.dm | 6 +- .../food_and_drinks/food/customizables.dm | 4 +- code/modules/food_and_drinks/food/snacks.dm | 2 +- .../food_and_drinks/food/snacks_pastry.dm | 4 +- .../food_and_drinks/food/snacks_pie.dm | 2 +- .../kitchen_machinery/deep_fryer.dm | 2 +- .../kitchen_machinery/food_cart.dm | 2 +- .../kitchen_machinery/gibber.dm | 2 +- .../kitchen_machinery/microwave.dm | 2 +- .../kitchen_machinery/processor.dm | 6 +- .../kitchen_machinery/smartfridge.dm | 9 +- code/modules/goonchat/browserOutput.dm | 25 +- .../browserassets/js/browserOutput.js | 66 ++++- code/modules/holiday/easter.dm | 4 +- code/modules/holodeck/computer.dm | 2 +- code/modules/holodeck/holo_effect.dm | 5 + code/modules/hydroponics/biogenerator.dm | 2 +- code/modules/hydroponics/grown/towercap.dm | 4 +- code/modules/hydroponics/hydroponics.dm | 2 +- code/modules/hydroponics/seeds.dm | 2 +- .../integrated_electronics/core/assemblies.dm | 21 +- .../integrated_electronics/core/debugger.dm | 3 +- .../integrated_electronics/core/detailer.dm | 5 +- .../core/integrated_circuit.dm | 2 +- .../integrated_electronics/core/pins.dm | 1 + .../integrated_electronics/core/printer.dm | 44 ++-- .../integrated_electronics/subtypes/input.dm | 69 +++++- .../subtypes/manipulation.dm | 10 +- .../integrated_electronics/subtypes/output.dm | 20 +- .../integrated_electronics/subtypes/power.dm | 2 +- .../subtypes/reagents.dm | 2 +- code/modules/jobs/access.dm | 2 +- code/modules/jobs/job_exp.dm | 12 +- code/modules/jobs/job_types/civilian.dm | 4 +- code/modules/jobs/job_types/job.dm | 4 +- code/modules/jobs/job_types/silicon.dm | 4 +- code/modules/keybindings/bindings_human.dm | 4 +- code/modules/library/lib_items.dm | 2 +- code/modules/library/lib_machines.dm | 42 ++-- code/modules/library/random_books.dm | 3 +- code/modules/lighting/lighting_atom.dm | 2 +- code/modules/mapping/reader.dm | 2 +- code/modules/mining/aux_base.dm | 5 +- code/modules/mining/equipment/goliath_hide.dm | 4 +- .../mining/equipment/kinetic_crusher.dm | 2 +- code/modules/mining/equipment/mining_tools.dm | 3 +- .../mining/equipment/regenerative_core.dm | 2 +- code/modules/mining/equipment/survival_pod.dm | 2 +- .../mining/equipment/wormhole_jaunter.dm | 22 +- code/modules/mining/fulton.dm | 2 +- .../mining/lavaland/necropolis_chests.dm | 4 +- code/modules/mining/machine_processing.dm | 2 +- code/modules/mining/machine_vending.dm | 2 +- code/modules/mining/minebot.dm | 2 +- code/modules/mining/ores_coins.dm | 2 +- code/modules/mining/satchel_ore_boxdm.dm | 4 +- .../modules/mob/dead/new_player/new_player.dm | 19 +- code/modules/mob/dead/new_player/poll.dm | 79 +++++- .../mob/dead/new_player/sprite_accessories.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 2 +- code/modules/mob/inventory.dm | 17 +- code/modules/mob/living/bloodcrawl.dm | 2 +- code/modules/mob/living/brain/posibrain.dm | 6 +- .../carbon/alien/humanoid/caste/praetorian.dm | 2 +- .../living/carbon/alien/humanoid/humanoid.dm | 2 +- .../mob/living/carbon/alien/humanoid/queen.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 35 +-- .../mob/living/carbon/carbon_defense.dm | 6 +- code/modules/mob/living/carbon/examine.dm | 2 +- .../mob/living/carbon/human/examine.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 57 +++-- .../mob/living/carbon/human/human_defense.dm | 4 +- .../mob/living/carbon/human/human_movement.dm | 6 +- code/modules/mob/living/carbon/human/life.dm | 6 +- .../mob/living/carbon/human/species.dm | 55 ++-- .../carbon/human/species_types/humans.dm | 5 - .../carbon/human/species_types/jellypeople.dm | 2 + .../human/species_types/shadowpeople.dm | 4 +- code/modules/mob/living/carbon/inventory.dm | 5 +- code/modules/mob/living/carbon/life.dm | 4 +- .../mob/living/carbon/monkey/combat.dm | 4 +- code/modules/mob/living/carbon/monkey/life.dm | 16 +- .../modules/mob/living/carbon/status_procs.dm | 4 +- .../modules/mob/living/carbon/update_icons.dm | 19 +- code/modules/mob/living/death.dm | 2 +- code/modules/mob/living/emote.dm | 2 + code/modules/mob/living/inhand_holder.dm | 2 +- code/modules/mob/living/life.dm | 27 +- code/modules/mob/living/living.dm | 48 ++-- code/modules/mob/living/living_defense.dm | 2 +- code/modules/mob/living/silicon/ai/ai.dm | 4 +- code/modules/mob/living/silicon/pai/pai.dm | 2 +- .../mob/living/silicon/pai/pai_shell.dm | 2 +- .../mob/living/silicon/pai/software.dm | 2 +- .../mob/living/silicon/robot/inventory.dm | 14 +- .../modules/mob/living/silicon/robot/robot.dm | 18 +- .../mob/living/silicon/robot/robot_defense.dm | 2 +- .../mob/living/silicon/robot/robot_modules.dm | 2 +- code/modules/mob/living/silicon/silicon.dm | 5 +- .../mob/living/simple_animal/bot/bot.dm | 4 +- .../mob/living/simple_animal/bot/floorbot.dm | 2 +- .../mob/living/simple_animal/friendly/dog.dm | 4 +- .../simple_animal/friendly/drone/_drone.dm | 8 +- .../friendly/drone/drones_as_items.dm | 2 +- .../friendly/drone/extra_drone_types.dm | 6 +- .../friendly/drone/interaction.dm | 6 +- .../friendly/drone/visuals_icons.dm | 2 +- .../living/simple_animal/friendly/mouse.dm | 8 +- .../simple_animal/guardian/types/dextrous.dm | 4 +- .../simple_animal/guardian/types/support.dm | 12 +- .../mob/living/simple_animal/hostile/alien.dm | 2 +- .../simple_animal/hostile/giant_spider.dm | 4 +- .../hostile/jungle/mega_arachnid.dm | 3 +- .../hostile/megafauna/colossus.dm | 2 +- .../hostile/megafauna/swarmer.dm | 2 +- .../hostile/mining_mobs/goliath.dm | 2 +- .../living/simple_animal/hostile/skeleton.dm | 2 +- .../living/simple_animal/hostile/syndicate.dm | 2 +- .../simple_animal/hostile/wumborian_fugu.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 2 +- .../mob/living/simple_animal/slime/emote.dm | 2 +- .../mob/living/simple_animal/slime/life.dm | 2 +- .../mob/living/simple_animal/slime/slime.dm | 2 +- code/modules/mob/living/taste.dm | 2 +- code/modules/mob/login.dm | 1 + code/modules/mob/mob.dm | 8 +- code/modules/mob/say.dm | 8 +- code/modules/mob/transform_procs.dm | 2 +- .../modular_computers/file_system/program.dm | 2 +- .../file_system/programs/alarm.dm | 7 +- code/modules/ninja/suit/gloves.dm | 2 +- code/modules/ninja/suit/suit.dm | 18 +- code/modules/paperwork/contract.dm | 4 +- code/modules/paperwork/folders.dm | 4 +- code/modules/paperwork/pen.dm | 9 +- code/modules/power/gravitygenerator.dm | 6 + code/modules/power/lighting.dm | 2 +- code/modules/power/singularity/emitter.dm | 4 +- .../particle_accelerator/particle_emitter.dm | 2 +- code/modules/power/solar.dm | 6 +- code/modules/power/supermatter/supermatter.dm | 8 +- code/modules/power/tesla/energy_ball.dm | 3 + .../ammunition/ballistic/shotgun.dm | 7 +- .../boxes_magazines/external/smg.dm | 4 +- .../boxes_magazines/internal/_internal.dm | 3 +- .../boxes_magazines/internal/revolver.dm | 4 +- .../projectiles/guns/ballistic/pistol.dm | 6 +- .../projectiles/guns/ballistic/revolver.dm | 6 +- .../projectiles/guns/ballistic/shotgun.dm | 3 +- code/modules/projectiles/guns/energy/laser.dm | 4 +- code/modules/projectiles/guns/magic/wand.dm | 4 + .../projectiles/guns/misc/beam_rifle.dm | 4 +- code/modules/projectiles/pins.dm | 2 +- code/modules/projectiles/projectile.dm | 2 +- code/modules/projectiles/projectile/beams.dm | 2 +- .../projectile/bullets/_incendiary.dm | 2 +- .../projectiles/projectile/bullets/shotgun.dm | 4 - .../projectile/energy/net_snare.dm | 196 +++++++-------- .../projectiles/projectile/energy/stun.dm | 2 +- .../projectile/special/temperature.dm | 9 +- code/modules/reagents/chemistry/holder.dm | 87 ++++--- .../chemistry/machinery/chem_dispenser.dm | 8 +- .../chemistry/machinery/chem_heater.dm | 11 +- .../chemistry/machinery/chem_master.dm | 2 +- .../reagents/chemistry/machinery/pandemic.dm | 2 +- .../chemistry/machinery/reagentgrinder.dm | 4 +- code/modules/reagents/chemistry/reagents.dm | 21 +- .../chemistry/reagents/alcohol_reagents.dm | 13 +- .../chemistry/reagents/drug_reagents.dm | 6 +- .../chemistry/reagents/other_reagents.dm | 18 +- .../chemistry/reagents/toxin_reagents.dm | 1 + .../reagents/reagent_containers/borghydro.dm | 4 +- .../reagents/reagent_containers/bottle.dm | 28 +-- .../reagents/reagent_containers/medspray.dm | 2 +- .../reagents/reagent_containers/spray.dm | 2 +- code/modules/recycling/conveyor2.dm | 2 +- code/modules/recycling/disposal/bin.dm | 2 +- .../recycling/disposal/construction.dm | 2 +- code/modules/recycling/disposal/pipe.dm | 2 +- .../research/designs/autolathe_designs.dm | 5 +- .../research/designs/electronics_designs.dm | 2 +- .../research/designs/machine_designs.dm | 2 +- .../designs/mechfabricator_designs.dm | 38 ++- .../research/designs/medical_designs.dm | 14 +- .../research/designs/mining_designs.dm | 2 +- .../modules/research/designs/power_designs.dm | 2 +- .../research/designs/weapon_designs.dm | 2 +- .../modules/research/machinery/_production.dm | 2 +- .../departmental_circuit_imprinter.dm | 2 +- .../machinery/departmental_protolathe.dm | 2 +- code/modules/research/rdmachines.dm | 4 + code/modules/research/techweb/_techweb.dm | 12 +- code/modules/research/techweb/all_nodes.dm | 10 +- .../xenobiology/crossbreeding/_corecross.dm | 2 +- .../crossbreeding/_status_effects.dm | 1 + .../xenobiology/crossbreeding/charged.dm | 10 +- .../xenobiology/crossbreeding/recurring.dm | 1 + .../xenobiology/crossbreeding/reproductive.dm | 2 +- .../crossbreeding/selfsustaining.dm | 3 +- .../xenobiology/crossbreeding/stabilized.dm | 2 +- .../research/xenobiology/xenobiology.dm | 10 +- .../ruins/spaceruin_code/listeningstation.dm | 4 +- .../ruins/spaceruin_code/oldstation.dm | 6 +- code/modules/shuttle/assault_pod.dm | 2 +- code/modules/shuttle/emergency.dm | 14 +- code/modules/shuttle/ferry.dm | 2 +- code/modules/shuttle/shuttle_rotate.dm | 2 +- code/modules/shuttle/special.dm | 2 +- code/modules/shuttle/supply.dm | 2 +- code/modules/spells/spell.dm | 2 +- code/modules/spells/spell_types/barnyard.dm | 2 +- .../spells/spell_types/construct_spells.dm | 2 +- code/modules/spells/spell_types/godhand.dm | 7 +- code/modules/spells/spell_types/lichdom.dm | 4 +- code/modules/spells/spell_types/mime.dm | 17 +- code/modules/spells/spell_types/summonitem.dm | 8 +- code/modules/station_goals/dna_vault.dm | 2 +- .../surgery/bodyparts/dismemberment.dm | 4 +- code/modules/surgery/bodyparts/helpers.dm | 2 +- code/modules/surgery/cavity_implant.dm | 6 +- code/modules/surgery/organs/augments_arms.dm | 2 +- code/modules/surgery/organs/augments_chest.dm | 2 +- .../surgery/organs/augments_internal.dm | 6 +- code/modules/surgery/organs/eyes.dm | 2 +- code/modules/surgery/organs/stomach.dm | 10 +- code/modules/surgery/organs/vocal_cords.dm | 2 +- .../modules/surgery/remove_embedded_object.dm | 2 +- code/modules/tgui/states/default.dm | 2 +- code/modules/uplink/uplink_devices.dm | 54 ++-- code/modules/uplink/uplink_items.dm | 4 +- code/modules/vending/_vending.dm | 234 +++++++++--------- code/modules/vending/autodrobe.dm | 10 +- code/modules/vending/boozeomat.dm | 25 +- code/modules/vending/cigarette.dm | 2 - code/modules/vending/clothesmate.dm | 2 - code/modules/vending/coffee.dm | 6 +- code/modules/vending/cola.dm | 2 - code/modules/vending/engineering.dm | 2 +- code/modules/vending/engivend.dm | 2 +- code/modules/vending/games.dm | 4 +- code/modules/vending/liberation.dm | 16 +- code/modules/vending/liberation_toy.dm | 3 +- code/modules/vending/medical.dm | 32 ++- code/modules/vending/medical_wall.dm | 7 +- code/modules/vending/robotics.dm | 2 +- code/modules/vending/security.dm | 2 +- code/modules/vending/snack.dm | 6 +- code/modules/vending/toys.dm | 34 +-- code/modules/vending/wardrobes.dm | 37 +-- code/modules/vending/youtool.dm | 1 - code/modules/zombie/items.dm | 2 +- 380 files changed, 2204 insertions(+), 1588 deletions(-) create mode 100644 code/modules/antagonists/changeling/powers/pheromone_receptors.dm create mode 100644 code/modules/fields/gravity.dm diff --git a/code/modules/NTNet/network.dm b/code/modules/NTNet/network.dm index 68b158dd65..ae8948dafb 100644 --- a/code/modules/NTNet/network.dm +++ b/code/modules/NTNet/network.dm @@ -102,20 +102,20 @@ return FALSE data.network_id = src log_data_transfer(data) - var/list/datum/component/ntnet_interface/recieving = list() + var/list/datum/component/ntnet_interface/receiving = list() if((length(data.recipient_ids == 1) && data.recipient_ids[1] == NETWORK_BROADCAST_ID) || data.recipient_ids == NETWORK_BROADCAST_ID) data.broadcast = TRUE for(var/i in connected_interfaces_by_id) - recieving |= connected_interfaces_by_id[i] + receiving |= connected_interfaces_by_id[i] else for(var/i in data.recipient_ids) - var/datum/component/ntnet_interface/reciever = find_interface_id(i) - recieving |= reciever + var/datum/component/ntnet_interface/receiver = find_interface_id(i) + receiving |= receiver - for(var/i in recieving) - var/datum/component/ntnet_interface/reciever = i - if(reciever) - reciever.__network_recieve(data) + for(var/i in receiving) + var/datum/component/ntnet_interface/receiver = i + if(receiver) + receiver.__network_receive(data) for(var/i in services_by_id) var/datum/ntnet_service/serv = services_by_id[i] diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm index dd89a08c9e..c36f0f040b 100644 --- a/code/modules/VR/vr_sleeper.dm +++ b/code/modules/VR/vr_sleeper.dm @@ -144,7 +144,7 @@ data["isoccupant"] = (user == occupant) return data -/obj/machinery/vr_sleeper/proc/get_vr_spawnpoint() //proc so it can be overriden for team games or something +/obj/machinery/vr_sleeper/proc/get_vr_spawnpoint() //proc so it can be overridden for team games or something return safepick(GLOB.vr_spawnpoints[vr_category]) /obj/machinery/vr_sleeper/proc/build_spawnpoints() // used to rebuild the list for admins if need be diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index 09d0d5d2e2..fd95783525 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -74,12 +74,20 @@ ckey = ckey(banckey) computerid = bancid ip = banip + + var/had_banned_mob = banned_mob != null + var/client/banned_client = banned_mob?.client + var/banned_mob_guest_key = had_banned_mob && IsGuestKey(banned_mob.key) + banned_mob = null var/datum/DBQuery/query_add_ban_get_ckey = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[ckey]'") if(!query_add_ban_get_ckey.warn_execute()) + qdel(query_add_ban_get_ckey) return - if(!query_add_ban_get_ckey.NextRow()) - if(!banned_mob || (banned_mob && !IsGuestKey(banned_mob.key))) + var/seen_before = query_add_ban_get_ckey.NextRow() + qdel(query_add_ban_get_ckey) + if(!seen_before) + if(!had_banned_mob || (had_banned_mob && !banned_mob_guest_key)) if(alert(usr, "[ckey] has not been seen before, are you sure you want to create a ban for them?", "Unknown ckey", "Yes", "No", "Cancel") != "Yes") return @@ -116,6 +124,7 @@ if(maxadminbancheck) var/datum/DBQuery/query_check_adminban_amt = SSdbcore.NewQuery("SELECT count(id) AS num FROM [format_table_name("ban")] WHERE (a_ckey = '[a_ckey]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") if(!query_check_adminban_amt.warn_execute()) + qdel(query_check_adminban_amt) return if(query_check_adminban_amt.NextRow()) var/adm_bans = text2num(query_check_adminban_amt.item[1]) @@ -124,7 +133,9 @@ max_bans = MAX_ADMIN_BANS_PER_HEADMIN if(adm_bans >= max_bans) to_chat(usr, "You already logged [max_bans] admin ban(s) or more. Do not abuse this function!") + qdel(query_check_adminban_amt) return + qdel(query_check_adminban_amt) if(!computerid) computerid = "0" if(!ip) @@ -132,7 +143,9 @@ var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`round_id`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', INET_ATON('[ip]'), '[a_ckey]', '[a_computerid]', INET_ATON('[a_ip]'), '[who]', '[adminwho]')" var/datum/DBQuery/query_add_ban = SSdbcore.NewQuery(sql) if(!query_add_ban.warn_execute()) + qdel(query_add_ban) return + qdel(query_add_ban) to_chat(usr, "Ban saved to database.") var/msg = "[key_name_admin(usr)] has added a [bantype_str] for [ckey] [(job)?"([job])":""] [(duration > 0)?"([duration] minutes)":""] with the reason: \"[reason]\" to the ban database." message_admins(msg,1) @@ -144,8 +157,8 @@ if(kickbannedckey) if(AH) AH.Resolve() //with prejudice - if(banned_mob && banned_mob.client && banned_mob.client.ckey == banckey) - qdel(banned_mob.client) + if(banned_client && banned_client.ckey == banckey) + qdel(banned_client) return 1 /datum/admins/proc/DB_ban_unban(ckey, bantype, job = "") @@ -204,10 +217,12 @@ var/datum/DBQuery/query_unban_get_id = SSdbcore.NewQuery(sql) if(!query_unban_get_id.warn_execute()) + qdel(query_unban_get_id) return while(query_unban_get_id.NextRow()) ban_id = query_unban_get_id.item[1] ban_number++; + qdel(query_unban_get_id) if(ban_number == 0) to_chat(usr, "Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.") @@ -236,6 +251,7 @@ var/datum/DBQuery/query_edit_ban_get_details = SSdbcore.NewQuery("SELECT ckey, duration, reason FROM [format_table_name("ban")] WHERE id = [banid]") if(!query_edit_ban_get_details.warn_execute()) + qdel(query_edit_ban_get_details) return var/eckey = usr.ckey //Editing admin ckey @@ -249,7 +265,9 @@ reason = query_edit_ban_get_details.item[3] else to_chat(usr, "Invalid ban id. Contact the database admin") + qdel(query_edit_ban_get_details) return + qdel(query_edit_ban_get_details) reason = sanitizeSQL(reason) var/value @@ -265,7 +283,9 @@ var/datum/DBQuery/query_edit_ban_reason = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET reason = '[value]', edits = CONCAT(edits,'- [eckey] changed ban reason from \\\"[reason]\\\" to \\\"[value]\\\"
') WHERE id = [banid]") if(!query_edit_ban_reason.warn_execute()) + qdel(query_edit_ban_reason) return + qdel(query_edit_ban_reason) message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s reason from [reason] to [value]") if("duration") if(!value) @@ -276,7 +296,9 @@ var/datum/DBQuery/query_edit_ban_duration = SSdbcore.NewQuery("UPDATE [format_table_name("ban")] SET duration = [value], edits = CONCAT(edits,'- [eckey] changed ban duration from [duration] to [value]
'), expiration_time = DATE_ADD(bantime, INTERVAL [value] MINUTE) WHERE id = [banid]") if(!query_edit_ban_duration.warn_execute()) + qdel(query_edit_ban_duration) return + qdel(query_edit_ban_duration) message_admins("[key_name_admin(usr)] has edited a ban for [pckey]'s duration from [duration] to [value]") if("unban") if(alert("Unban [pckey]?", "Unban?", "Yes", "No") == "Yes") @@ -304,10 +326,12 @@ var/pckey var/datum/DBQuery/query_unban_get_ckey = SSdbcore.NewQuery(sql) if(!query_unban_get_ckey.warn_execute()) + qdel(query_unban_get_ckey) return while(query_unban_get_ckey.NextRow()) pckey = query_unban_get_ckey.item[1] ban_number++; + qdel(query_unban_get_ckey) if(ban_number == 0) to_chat(usr, "Database update failed due to a ban id not being present in the database.") @@ -327,7 +351,9 @@ var/sql_update = "UPDATE [format_table_name("ban")] SET unbanned = 1, unbanned_datetime = Now(), unbanned_ckey = '[unban_ckey]', unbanned_computerid = '[unban_computerid]', unbanned_ip = INET_ATON('[unban_ip]') WHERE id = [id]" var/datum/DBQuery/query_unban = SSdbcore.NewQuery(sql_update) if(!query_unban.warn_execute()) + qdel(query_unban) return + qdel(query_unban) message_admins("[key_name_admin(usr)] has lifted [pckey]'s ban.") /client/proc/DB_ban_panel() @@ -422,9 +448,11 @@ page = text2num(page) var/datum/DBQuery/query_count_bans = SSdbcore.NewQuery("SELECT COUNT(id) FROM [format_table_name("ban")] WHERE [search]") if(!query_count_bans.warn_execute()) + qdel(query_count_bans) return if(query_count_bans.NextRow()) bancount = text2num(query_count_bans.item[1]) + qdel(query_count_bans) if(bancount > bansperpage) output += "
Page: " while(bancount > 0) @@ -448,6 +476,7 @@ var/limit = " LIMIT [bansperpage * page], [bansperpage]" var/datum/DBQuery/query_search_bans = SSdbcore.NewQuery("SELECT id, bantime, bantype, reason, job, duration, expiration_time, ckey, a_ckey, unbanned, unbanned_ckey, unbanned_datetime, edits, round_id FROM [format_table_name("ban")] WHERE [search] ORDER BY bantime DESC[limit]") if(!query_search_bans.warn_execute()) + qdel(query_search_bans) return while(query_search_bans.NextRow()) @@ -511,7 +540,7 @@ output += "" output += " " output += "" - + qdel(query_search_bans) output += "" usr << browse(output,"window=lookupbans;size=900x500") diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 097076fc74..a3f83ef3ba 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -80,6 +80,7 @@ var/datum/DBQuery/query_ban_check = SSdbcore.NewQuery("SELECT ckey, a_ckey, reason, expiration_time, duration, bantime, bantype, id, round_id FROM [format_table_name("ban")] WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)") if(!query_ban_check.Execute()) + qdel(query_ban_check) return while(query_ban_check.NextRow()) var/pckey = query_ban_check.item[1] @@ -117,7 +118,9 @@ log_access("Failed Login: [key] [computer_id] [address] - Banned (#[banid]) [.["reason"]]") + qdel(query_ban_check) return . + qdel(query_ban_check) var/list/ban = ..() //default pager ban stuff if (ban) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 8cce9bc4f4..d9ab979686 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1,11 +1,11 @@ //////////////////////////////// /proc/message_admins(msg) - msg = "ADMIN LOG: [msg]" + msg = "ADMIN LOG: [msg]" to_chat(GLOB.admins, msg) /proc/relay_msg_admins(msg) - msg = "RELAY: [msg]" + msg = "RELAY: [msg]" to_chat(GLOB.admins, msg) @@ -77,14 +77,19 @@ body += "Ban | " body += "Jobban | " body += "Identity Ban | " + var/rm = REF(M) if(jobban_isbanned(M, "OOC")) - body+= "OOCBan | " + body+= "OOCBan | " else - body+= "OOCBan | " + body+= "OOCBan | " + if(QDELETED(M) || QDELETED(usr)) + return if(jobban_isbanned(M, "emote")) - body+= "EmoteBan | " + body+= "EmoteBan | " else - body+= "Emoteban | " + body+= "Emoteban | " + if(QDELETED(M) || QDELETED(usr)) + return body += "Notes | Messages | Watchlist | " if(M.client) diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index b5fead892f..94efce6059 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -4,7 +4,7 @@ var/F = file("[GLOB.log_directory]/[subject].html") WRITE_FILE(F, "[time_stamp()] [REF(src)] ([x],[y],[z]) || [src] [message]
") -/client/proc/investigate_show(subject in list("notes, memos, watchlist", INVESTIGATE_RESEARCH, INVESTIGATE_EXONET, INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS, INVESTIGATE_RADIATION) ) +/client/proc/investigate_show(subject in list("notes, memos, watchlist", INVESTIGATE_RESEARCH, INVESTIGATE_EXONET, INVESTIGATE_PORTAL, INVESTIGATE_SINGULO, INVESTIGATE_WIRES, INVESTIGATE_TELESCI, INVESTIGATE_GRAVITY, INVESTIGATE_RECORDS, INVESTIGATE_CARGO, INVESTIGATE_SUPERMATTER, INVESTIGATE_ATMOS, INVESTIGATE_EXPERIMENTOR, INVESTIGATE_BOTANY, INVESTIGATE_HALLUCINATIONS, INVESTIGATE_RADIATION, INVESTIGATE_CIRCUIT) ) set name = "Investigate" set category = "Admin" if(!holder) diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 4aab13dbe5..b6824cc1a0 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -146,7 +146,7 @@ GLOBAL_PROTECT(protected_ranks) var/sql_exclude_flags = sanitizeSQL(R.exclude_rights) var/sql_can_edit_flags = sanitizeSQL(R.can_edit_rights) sql_ranks += list(list("rank" = "'[sql_rank]'", "flags" = "[sql_flags]", "exclude_flags" = "[sql_exclude_flags]", "can_edit_flags" = "[sql_can_edit_flags]")) - SSdbcore.MassInsert(format_table_name("admin_ranks"), sql_ranks, duplicate_key = TRUE) + SSdbcore.MassInsert(format_table_name("admin_ranks"), sql_ranks, duplicate_key = TRUE, blocking = TRUE) else var/datum/DBQuery/query_load_admin_ranks = SSdbcore.NewQuery("SELECT rank, flags, exclude_flags, can_edit_flags FROM [format_table_name("admin_ranks")]") if(!query_load_admin_ranks.Execute()) @@ -169,6 +169,7 @@ GLOBAL_PROTECT(protected_ranks) if(!R) continue GLOB.admin_ranks += R + qdel(query_load_admin_ranks) //load ranks from backup file if(dbfail) var/backup_file = file("data/admins_backup.json") @@ -247,6 +248,7 @@ GLOBAL_PROTECT(protected_ranks) skip = 1 if(!skip) new /datum/admins(rank_names[admin_rank], admin_ckey) + qdel(query_load_admins) //load admins from backup file if(dbfail) var/backup_file = file("data/admins_backup.json") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 21642784a3..6104658e23 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1,5 +1,4 @@ //admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless -//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless //the procs are cause you can't put the comments in the GLOB var define GLOBAL_PROTECT(admin_verbs_default) GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault()) diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 7e200c3aa2..fbb97fcea7 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -6,12 +6,14 @@ if(!M.client) //no cache. fallback to a datum/DBQuery var/datum/DBQuery/query_jobban_check_ban = SSdbcore.NewQuery("SELECT reason FROM [format_table_name("ban")] WHERE ckey = '[sanitizeSQL(M.ckey)]' AND (bantype = 'JOB_PERMABAN' OR (bantype = 'JOB_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned) AND job = '[sanitizeSQL(rank)]'") if(!query_jobban_check_ban.warn_execute()) + qdel(query_jobban_check_ban) return if(query_jobban_check_ban.NextRow()) var/reason = query_jobban_check_ban.item[1] + qdel(query_jobban_check_ban) return reason ? reason : TRUE //we don't want to return "" if there is no ban reason, as that would evaluate to false - else - return FALSE + qdel(query_jobban_check_ban) + return FALSE if(!M.client.jobbancache) jobban_buildcache(M.client) @@ -31,6 +33,7 @@ return while(query_jobban_build_cache.NextRow()) C.jobbancache[query_jobban_build_cache.item[1]] = query_jobban_build_cache.item[2] + qdel(query_jobban_build_cache) /proc/ban_unban_log_save(var/formatted_log) text2file(formatted_log,"data/ban_unban_log.txt") diff --git a/code/modules/admin/chat_commands.dm b/code/modules/admin/chat_commands.dm index dbeb6fce7f..c4e5679c76 100644 --- a/code/modules/admin/chat_commands.dm +++ b/code/modules/admin/chat_commands.dm @@ -110,6 +110,10 @@ GLOBAL_LIST(round_end_notifiees) admin_only = TRUE /datum/tgs_chat_command/reload_admins/Run(datum/tgs_chat_user/sender, params) - load_admins() + ReloadAsync() log_admin("[sender.friendly_name] reloaded admins via chat command.") return "Admins reloaded." + +/datum/tgs_chat_command/reload_admins/proc/ReloadAsync() + set waitfor = FALSE + load_admins() \ No newline at end of file diff --git a/code/modules/admin/create_poll.dm b/code/modules/admin/create_poll.dm index 90fd6c66c9..f098dc1f05 100644 --- a/code/modules/admin/create_poll.dm +++ b/code/modules/admin/create_poll.dm @@ -36,7 +36,8 @@ return endtime = sanitizeSQL(endtime) var/datum/DBQuery/query_validate_time = SSdbcore.NewQuery("SELECT IF(STR_TO_DATE('[endtime]','%Y-%c-%d %T') > NOW(), STR_TO_DATE('[endtime]','%Y-%c-%d %T'), 0)") - if(!query_validate_time.warn_execute()) + if(!query_validate_time.warn_execute() || QDELETED(usr) || !src) + qdel(query_validate_time) return if(query_validate_time.NextRow()) var/checktime = text2num(query_validate_time.item[1]) @@ -44,6 +45,7 @@ to_chat(src, "Datetime entered is improperly formatted or not later than current server time.") return endtime = query_validate_time.item[1] + qdel(query_validate_time) var/adminonly switch(alert("Admin only poll?",,"Yes","No","Cancel")) if("Yes") @@ -124,18 +126,24 @@ add_option = 0 else return 0 + var/m1 = "[key_name(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"] - Question: [question]" + var/m2 = "[key_name_admin(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"]
Question: [question]" var/datum/DBQuery/query_polladd_question = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_question")] (polltype, starttime, endtime, question, adminonly, multiplechoiceoptions, createdby_ckey, createdby_ip, dontshow) VALUES ('[polltype]', '[starttime]', '[endtime]', '[question]', '[adminonly]', '[choice_amount]', '[sql_ckey]', INET_ATON('[address]'), '[dontshow]')") if(!query_polladd_question.warn_execute()) + qdel(query_polladd_question) return + qdel(query_polladd_question) if(polltype != POLLTYPE_TEXT) var/pollid = 0 var/datum/DBQuery/query_get_id = SSdbcore.NewQuery("SELECT LAST_INSERT_ID()") if(!query_get_id.warn_execute()) + qdel(query_get_id) return if(query_get_id.NextRow()) pollid = query_get_id.item[1] + qdel(query_get_id) for(var/list/i in sql_option_list) i |= list("pollid" = "'[pollid]'") SSdbcore.MassInsert(format_table_name("poll_option"), sql_option_list, warn = 1) - log_admin("[key_name(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"] - Question: [question]") - message_admins("[key_name_admin(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"]
Question: [question]") + log_admin(m1) + message_admins(m2) diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index 85feb3026c..c88c610841 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -177,5 +177,5 @@ /area/shuttle_arena name = "arena" - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY requires_power = FALSE diff --git a/code/modules/admin/ipintel.dm b/code/modules/admin/ipintel.dm index fa9951f276..e0056b3e40 100644 --- a/code/modules/admin/ipintel.dm +++ b/code/modules/admin/ipintel.dm @@ -51,6 +51,7 @@ )) "}) if(!query_get_ip_intel.Execute()) + qdel(query_get_ip_intel) return if (query_get_ip_intel.NextRow()) res.cache = TRUE @@ -59,14 +60,16 @@ res.cacheminutesago = text2num(query_get_ip_intel.item[3]) res.cacherealtime = world.realtime - (text2num(query_get_ip_intel.item[3])*10*60) SSipintel.cache[ip] = res + qdel(query_get_ip_intel) return + qdel(query_get_ip_intel) res.intel = ip_intel_query(ip) if (updatecache && res.intel >= 0) SSipintel.cache[ip] = res if(SSdbcore.Connect()) var/datum/DBQuery/query_add_ip_intel = SSdbcore.NewQuery("INSERT INTO [format_table_name("ipintel")] (ip, intel) VALUES (INET_ATON('[ip]'), [res.intel]) ON DUPLICATE KEY UPDATE intel = VALUES(intel), date = NOW()") query_add_ip_intel.Execute() - + qdel(query_add_ip_intel) /proc/ip_intel_query(ip, var/retryed=0) diff --git a/code/modules/admin/permissionedit.dm b/code/modules/admin/permissionedit.dm index 8c608a6e5e..ac55eac872 100644 --- a/code/modules/admin/permissionedit.dm +++ b/code/modules/admin/permissionedit.dm @@ -31,9 +31,11 @@ page = text2num(page) var/datum/DBQuery/query_count_admin_logs = SSdbcore.NewQuery("SELECT COUNT(id) FROM [format_table_name("admin_log")][search]") if(!query_count_admin_logs.warn_execute()) + qdel(query_count_admin_logs) return if(query_count_admin_logs.NextRow()) logcount = text2num(query_count_admin_logs.item[1]) + qdel(query_count_admin_logs) if(logcount > logssperpage) output += "
Page: " while(logcount > 0) @@ -44,6 +46,7 @@ var/limit = " LIMIT [logssperpage * page], [logssperpage]" var/datum/DBQuery/query_search_admin_logs = SSdbcore.NewQuery("SELECT datetime, round_id, adminckey, operation, target, log FROM [format_table_name("admin_log")][search] ORDER BY datetime DESC[limit]") if(!query_search_admin_logs.warn_execute()) + qdel(query_search_admin_logs) return while(query_search_admin_logs.NextRow()) var/datetime = query_search_admin_logs.item[1] @@ -53,19 +56,23 @@ target = query_search_admin_logs.item[5] var/log = query_search_admin_logs.item[6] output += "

[datetime] | Round ID [round_id] | Admin [admin_ckey] | Operation [operation] on [target]
[log]


" + qdel(query_search_admin_logs) if(action == 2) output += "

Admin ckeys with invalid ranks

" var/datum/DBQuery/query_check_admin_errors = SSdbcore.NewQuery("SELECT ckey, [format_table_name("admin")].rank FROM [format_table_name("admin")] LEFT JOIN [format_table_name("admin_ranks")] ON [format_table_name("admin_ranks")].rank = [format_table_name("admin")].rank WHERE [format_table_name("admin_ranks")].rank IS NULL") if(!query_check_admin_errors.warn_execute()) + qdel(query_check_admin_errors) return while(query_check_admin_errors.NextRow()) var/admin_ckey = query_check_admin_errors.item[1] var/admin_rank = query_check_admin_errors.item[2] - output += "[admin_ckey] has non-existant rank [admin_rank] | \[Change Rank\] | \[Remove\]" + output += "[admin_ckey] has non-existent rank [admin_rank] | \[Change Rank\] | \[Remove\]" output += "
" + qdel(query_check_admin_errors) output += "

Unused ranks

" var/datum/DBQuery/query_check_unused_rank = SSdbcore.NewQuery("SELECT [format_table_name("admin_ranks")].rank, flags, exclude_flags, can_edit_flags FROM [format_table_name("admin_ranks")] LEFT JOIN [format_table_name("admin")] ON [format_table_name("admin")].rank = [format_table_name("admin_ranks")].rank WHERE [format_table_name("admin")].rank IS NULL") if(!query_check_unused_rank.warn_execute()) + qdel(query_check_unused_rank) return while(query_check_unused_rank.NextRow()) var/admin_rank = query_check_unused_rank.item[1] @@ -74,6 +81,7 @@
Denied: [rights2text(text2num(query_check_unused_rank.item[3])," ", "-")]
Allowed to edit: [rights2text(text2num(query_check_unused_rank.item[4])," ", "*")]
"} + qdel(query_check_unused_rank) else if(!action) output += {" Permissions Panel @@ -108,6 +116,8 @@ output += "[rights2text(D.rank.can_edit_rights," ", "*")]" output += "" output += "
Search:
" + if(QDELETED(usr)) + return usr << browse("[jointext(output, "")]","window=editrights;size=1000x650") /datum/admins/proc/edit_rights_topic(list/href_list) @@ -153,6 +163,8 @@ admin_ckey = sanitizeSQL(admin_ckey) else use_db = FALSE + if(QDELETED(usr)) + return if(task != "add") D = GLOB.admin_datums[admin_ckey] if(!D) @@ -198,16 +210,23 @@ //if an admin exists without a datum they won't be caught by the above var/datum/DBQuery/query_admin_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("admin")] WHERE ckey = '[.]'") if(!query_admin_in_db.warn_execute()) + qdel(query_admin_in_db) return FALSE if(query_admin_in_db.NextRow()) + qdel(query_admin_in_db) to_chat(usr, "[.] already listed in admin database. Check the Management tab if they don't appear in the list of admins.") return FALSE + qdel(query_admin_in_db) var/datum/DBQuery/query_add_admin = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin")] (ckey, rank) VALUES ('[.]', 'NEW ADMIN')") if(!query_add_admin.warn_execute()) + qdel(query_add_admin) return FALSE + qdel(query_add_admin) var/datum/DBQuery/query_add_admin_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'add admin', '[.]', 'New admin added: [.]')") if(!query_add_admin_log.warn_execute()) + qdel(query_add_admin_log) return FALSE + qdel(query_add_admin_log) /datum/admins/proc/remove_admin(admin_ckey, use_db, datum/admins/D) if(alert("Are you sure you want to remove [admin_ckey]?","Confirm Removal","Do it","Cancel") == "Do it") @@ -215,16 +234,22 @@ GLOB.deadmins -= admin_ckey if(D) D.disassociate() + var/m1 = "[key_name_admin(usr)] removed [admin_ckey] from the admins list [use_db ? "permanently" : "temporarily"]" + var/m2 = "[key_name(usr)] removed [admin_ckey] from the admins list [use_db ? "permanently" : "temporarily"]" if(use_db) var/datum/DBQuery/query_add_rank = SSdbcore.NewQuery("DELETE FROM [format_table_name("admin")] WHERE ckey = '[admin_ckey]'") if(!query_add_rank.warn_execute()) + qdel(query_add_rank) return + qdel(query_add_rank) var/datum/DBQuery/query_add_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'remove admin', '[admin_ckey]', 'Admin removed: [admin_ckey]')") if(!query_add_rank_log.warn_execute()) + qdel(query_add_rank_log) return + qdel(query_add_rank_log) sync_lastadminrank(admin_ckey) - message_admins("[key_name_admin(usr)] removed [admin_ckey] from the admins list [use_db ? "permanently" : "temporarily"]") - log_admin("[key_name(usr)] removed [admin_ckey] from the admins list [use_db ? "permanently" : "temporarily"]") + message_admins(m1) + log_admin(m2) /datum/admins/proc/force_readmin(admin_ckey, datum/admins/D) if(!D || !D.deadmined) @@ -260,35 +285,50 @@ else R = new(new_rank) //blank new admin_rank GLOB.admin_ranks += R + var/m1 = "[key_name_admin(usr)] edited the admin rank of [admin_ckey] to [new_rank] [use_db ? "permanently" : "temporarily"]" + var/m2 = "[key_name(usr)] edited the admin rank of [admin_ckey] to [new_rank] [use_db ? "permanently" : "temporarily"]" if(use_db) new_rank = sanitizeSQL(new_rank) //if a player was tempminned before having a permanent change made to their rank they won't yet be in the db var/old_rank var/datum/DBQuery/query_admin_in_db = SSdbcore.NewQuery("SELECT rank FROM [format_table_name("admin")] WHERE ckey = '[admin_ckey]'") if(!query_admin_in_db.warn_execute()) + qdel(query_admin_in_db) return if(!query_admin_in_db.NextRow()) add_admin(admin_ckey, TRUE) old_rank = "NEW ADMIN" else old_rank = query_admin_in_db.item[1] + qdel(query_admin_in_db) //similarly if a temp rank is created it won't be in the db if someone is permanently changed to it var/datum/DBQuery/query_rank_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("admin_ranks")] WHERE rank = '[new_rank]'") if(!query_rank_in_db.warn_execute()) + qdel(query_rank_in_db) return if(!query_rank_in_db.NextRow()) + QDEL_NULL(query_rank_in_db) var/datum/DBQuery/query_add_rank = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_ranks")] (rank, flags, exclude_flags, can_edit_flags) VALUES ('[new_rank]', '0', '0', '0')") if(!query_add_rank.warn_execute()) + qdel(query_add_rank) return + qdel(query_add_rank) var/datum/DBQuery/query_add_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'add rank', '[new_rank]', 'New rank added: [new_rank]')") if(!query_add_rank_log.warn_execute()) + qdel(query_add_rank_log) return + qdel(query_add_rank_log) + qdel(query_rank_in_db) var/datum/DBQuery/query_change_rank = SSdbcore.NewQuery("UPDATE [format_table_name("admin")] SET rank = '[new_rank]' WHERE ckey = '[admin_ckey]'") if(!query_change_rank.warn_execute()) + qdel(query_change_rank) return + qdel(query_change_rank) var/datum/DBQuery/query_change_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'change admin rank', '[admin_ckey]', 'Rank of [admin_ckey] changed from [old_rank] to [new_rank]')") if(!query_change_rank_log.warn_execute()) + qdel(query_change_rank_log) return + qdel(query_change_rank_log) if(D) //they were previously an admin D.disassociate() //existing admin needs to be disassociated D.rank = R //set the admin_rank as our rank @@ -296,8 +336,8 @@ D.associate(C) else D = new(R, admin_ckey, TRUE) //new admin - message_admins("[key_name_admin(usr)] edited the admin rank of [admin_ckey] to [new_rank] [use_db ? "permanently" : "temporarily"]") - log_admin("[key_name(usr)] edited the admin rank of [admin_ckey] to [new_rank] [use_db ? "permanently" : "temporarily"]") + message_admins(m1) + log_admin(m2) /datum/admins/proc/change_admin_flags(admin_ckey, use_db, datum/admins/D, legacy_only) var/new_flags = input_bitfield(usr, "Include permission flags
[use_db ? "This will affect ALL admins with this rank." : "This will affect only the current admin [admin_ckey]"]", "admin_flags", D.rank.include_rights, 350, 590, allowed_edit_list = usr.client.holder.rank.can_edit_rights) @@ -309,23 +349,31 @@ var/new_can_edit_flags = input_bitfield(usr, "Editable permission flags
These are the flags this rank is allowed to edit if they have access to the permissions panel.
They will be unable to modify admins to a rank that has a flag not included here.
[use_db ? "This will affect ALL admins with this rank." : "This will affect only the current admin [admin_ckey]"]", "admin_flags", D.rank.can_edit_rights, 350, 710, allowed_edit_list = usr.client.holder.rank.can_edit_rights) if(isnull(new_can_edit_flags)) return + var/m1 = "[key_name_admin(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]" + var/m2 = "[key_name(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]" if(use_db || legacy_only) var/old_flags var/old_exclude_flags var/old_can_edit_flags var/datum/DBQuery/query_get_rank_flags = SSdbcore.NewQuery("SELECT flags, exclude_flags, can_edit_flags FROM [format_table_name("admin_ranks")] WHERE rank = '[D.rank.name]'") if(!query_get_rank_flags.warn_execute()) + qdel(query_get_rank_flags) return if(query_get_rank_flags.NextRow()) old_flags = text2num(query_get_rank_flags.item[1]) old_exclude_flags = text2num(query_get_rank_flags.item[2]) old_can_edit_flags = text2num(query_get_rank_flags.item[3]) + qdel(query_get_rank_flags) var/datum/DBQuery/query_change_rank_flags = SSdbcore.NewQuery("UPDATE [format_table_name("admin_ranks")] SET flags = '[new_flags]', exclude_flags = '[new_exclude_flags]', can_edit_flags = '[new_can_edit_flags]' WHERE rank = '[D.rank.name]'") if(!query_change_rank_flags.warn_execute()) + qdel(query_change_rank_flags) return + qdel(query_change_rank_flags) var/datum/DBQuery/query_change_rank_flags_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'change rank flags', '[D.rank.name]', 'Permissions of [D.rank.name] changed from[rights2text(old_flags," ")][rights2text(old_exclude_flags," ", "-")][rights2text(old_can_edit_flags," ", "*")] to[rights2text(new_flags," ")][rights2text(new_exclude_flags," ", "-")][rights2text(new_can_edit_flags," ", "*")]')") if(!query_change_rank_flags_log.warn_execute()) + qdel(query_change_rank_flags_log) return + qdel(query_change_rank_flags_log) for(var/datum/admin_rank/R in GLOB.admin_ranks) if(R.name != D.rank.name) continue @@ -356,8 +404,8 @@ D.rank.can_edit_rights = new_can_edit_flags var/client/C = GLOB.directory[admin_ckey] //find the client with the specified ckey (if they are logged in) D.associate(C) //link up with the client and add verbs - message_admins("[key_name_admin(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]") - log_admin("[key_name(usr)] edited the permissions of [use_db ? " rank [D.rank.name] permanently" : "[admin_ckey] temporarily"]") + message_admins(m1) + log_admin(m2) /datum/admins/proc/remove_rank(admin_rank) if(!admin_rank) @@ -375,19 +423,28 @@ admin_rank = sanitizeSQL(admin_rank) var/datum/DBQuery/query_admins_with_rank = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("admin")] WHERE rank = '[admin_rank]'") if(!query_admins_with_rank.warn_execute()) + qdel(query_admins_with_rank) return if(query_admins_with_rank.NextRow()) + qdel(query_admins_with_rank) to_chat(usr, "Error: Rank deletion attempted while rank still used; Tell a coder, this shouldn't happen.") return + qdel(query_admins_with_rank) if(alert("Are you sure you want to remove [admin_rank]?","Confirm Removal","Do it","Cancel") == "Do it") + var/m1 = "[key_name_admin(usr)] removed rank [admin_rank] permanently" + var/m2 = "[key_name(usr)] removed rank [admin_rank] permanently" var/datum/DBQuery/query_add_rank = SSdbcore.NewQuery("DELETE FROM [format_table_name("admin_ranks")] WHERE rank = '[admin_rank]'") if(!query_add_rank.warn_execute()) + qdel(query_add_rank) return + qdel(query_add_rank) var/datum/DBQuery/query_add_rank_log = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin_log")] (datetime, round_id, adminckey, adminip, operation, target, log) VALUES ('[SQLtime()]', '[GLOB.round_id]', '[sanitizeSQL(usr.ckey)]', INET_ATON('[sanitizeSQL(usr.client.address)]'), 'remove rank', '[admin_rank]', 'Rank removed: [admin_rank]')") if(!query_add_rank_log.warn_execute()) + qdel(query_add_rank_log) return - message_admins("[key_name_admin(usr)] removed rank [admin_rank] permanently") - log_admin("[key_name(usr)] removed rank [admin_rank] permanently") + qdel(query_add_rank_log) + message_admins(m1) + log_admin(m2) /datum/admins/proc/sync_lastadminrank(admin_ckey, datum/admins/D) var/sqlrank = "Player" @@ -396,5 +453,7 @@ admin_ckey = sanitizeSQL(admin_ckey) var/datum/DBQuery/query_sync_lastadminrank = SSdbcore.NewQuery("UPDATE [format_table_name("player")] SET lastadminrank = '[sqlrank]' WHERE ckey = '[admin_ckey]'") if(!query_sync_lastadminrank.warn_execute()) + qdel(query_sync_lastadminrank) return + qdel(query_sync_lastadminrank) to_chat(usr, "Sync of [admin_ckey] successful.") diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index a3f7823b58..95e040ebd5 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -7,7 +7,6 @@ dat +={" General Secrets

- Show Job Debug
Admin Log
Mentor Log
Show Admin List
@@ -111,18 +110,6 @@ if("mentor_log") CitadelMentorLogSecret() - - if("list_job_debug") - var/dat = "Job Debug info.
" - for(var/line in SSjob.job_debug) - dat += "[line]
" - dat+= "*******

" - for(var/datum/job/job in SSjob.occupations) - if(!job) - continue - dat += "job: [job.title], current_positions: [job.current_positions], total_positions: [job.total_positions]
" - usr << browse(dat, "window=jobdebug;size=600x500") - if("show_admins") var/dat = "Current admins:
" if(GLOB.admin_datums) @@ -433,7 +420,7 @@ H.equip_to_slot_or_del(I, SLOT_W_UNIFORM) qdel(olduniform) if(droptype == "Yes") - I.flags_1 |= NODROP_1 + I.item_flags |= NODROP else to_chat(H, "You're not kawaii enough for this.") diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index d4dd5951d2..7f2fa5b938 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -11,11 +11,16 @@ new_ckey = sanitizeSQL(new_ckey) var/datum/DBQuery/query_find_ckey = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE ckey = '[new_ckey]'") if(!query_find_ckey.warn_execute()) + qdel(query_find_ckey) return if(!query_find_ckey.NextRow()) if(alert(usr, "[new_ckey] has not been seen before, are you sure you want to create a [type] for them?", "Unknown ckey", "Yes", "No", "Cancel") != "Yes") + qdel(query_find_ckey) return + qdel(query_find_ckey) target_ckey = new_ckey + if(QDELETED(usr)) + return if(target_ckey) target_ckey = sanitizeSQL(target_ckey) if(!admin_ckey) @@ -46,11 +51,14 @@ else return var/datum/DBQuery/query_create_message = SSdbcore.NewQuery("INSERT INTO [format_table_name("messages")] (type, targetckey, adminckey, text, timestamp, server, server_ip, server_port, round_id, secret) VALUES ('[type]', '[target_ckey]', '[admin_ckey]', '[text]', '[timestamp]', '[server]', INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]','[secret]')") + var/pm = "[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]: [text]" + var/header = "[key_name_admin(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]" if(!query_create_message.warn_execute()) + qdel(query_create_message) return + qdel(query_create_message) if(logged) - log_admin_private("[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]: [text]") - var/header = "[key_name_admin(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""]" + log_admin_private(pm) message_admins("[header]:
[text]") admin_ticket_log(target_ckey, "[header]") admin_ticket_log(target_ckey, text) @@ -69,19 +77,25 @@ var/type var/target_ckey var/text + var/m1 = "[key_name(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]: [text]" + var/m2 = "[key_name_admin(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]:
[text]" var/datum/DBQuery/query_find_del_message = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") if(!query_find_del_message.warn_execute()) + qdel(query_find_del_message) return if(query_find_del_message.NextRow()) type = query_find_del_message.item[1] target_ckey = query_find_del_message.item[2] text = query_find_del_message.item[4] + qdel(query_find_del_message) var/datum/DBQuery/query_del_message = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET deleted = 1 WHERE id = [message_id]") if(!query_del_message.warn_execute()) + qdel(query_del_message) return + qdel(query_del_message) if(logged) - log_admin_private("[key_name(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]: [text]") - message_admins("[key_name_admin(usr)] has deleted a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for" : " made by"] [target_ckey]:
[text]") + log_admin_private(m1) + message_admins(m2) if(browse) browse_messages("[type]") else @@ -96,6 +110,7 @@ return var/datum/DBQuery/query_find_edit_message = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") if(!query_find_edit_message.warn_execute()) + qdel(query_find_edit_message) return if(query_find_edit_message.NextRow()) var/type = query_find_edit_message.item[1] @@ -105,11 +120,13 @@ var/editor_ckey = sanitizeSQL(usr.ckey) var/new_text = input("Input new [type]", "New [type]", "[old_text]") as null|message if(!new_text) + qdel(query_find_edit_message) return new_text = sanitizeSQL(new_text) var/edit_text = sanitizeSQL("Edited by [editor_ckey] on [SQLtime()] from
[old_text]
to
[new_text]
") var/datum/DBQuery/query_edit_message = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET text = '[new_text]', lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id] AND deleted = 0") if(!query_edit_message.warn_execute()) + qdel(query_find_edit_message) return log_admin_private("[key_name(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from [old_text] to [new_text]") message_admins("[key_name_admin(usr)] has edited a [type] [(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_ckey]" : ""] made by [admin_ckey] from
[old_text]
to
[new_text]") @@ -117,6 +134,7 @@ browse_messages("[type]") else browse_messages(target_ckey = target_ckey, agegate = TRUE) + qdel(query_find_edit_message) /proc/toggle_message_secrecy(message_id) if(!SSdbcore.Connect()) @@ -125,22 +143,30 @@ message_id = text2num(message_id) if(!message_id) return + var/editor_ckey = usr.ckey + var/kn = key_name(usr) + var/kna = key_name_admin(usr) var/datum/DBQuery/query_find_message_secret = SSdbcore.NewQuery("SELECT type, targetckey, adminckey, secret FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") if(!query_find_message_secret.warn_execute()) + qdel(query_find_message_secret) return if(query_find_message_secret.NextRow()) var/type = query_find_message_secret.item[1] var/target_ckey = query_find_message_secret.item[2] var/admin_ckey = query_find_message_secret.item[3] var/secret = text2num(query_find_message_secret.item[4]) - var/editor_ckey = sanitizeSQL(usr.ckey) + editor_ckey = sanitizeSQL(editor_ckey) var/edit_text = "Made [secret ? "not secret" : "secret"] by [editor_ckey] on [SQLtime()]
" var/datum/DBQuery/query_message_secret = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET secret = NOT secret, lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id]") if(!query_message_secret.warn_execute()) + qdel(query_find_message_secret) + qdel(query_message_secret) return - log_admin_private("[key_name(usr)] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") - message_admins("[key_name_admin(usr)] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") + qdel(query_message_secret) + log_admin_private("[kn] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") + message_admins("[kna] has toggled [target_ckey]'s [type] made by [admin_ckey] to [secret ? "not secret" : "secret"]") browse_messages(target_ckey = target_ckey, agegate = TRUE) + qdel(query_find_message_secret) /proc/browse_messages(type, target_ckey, index, linkless = FALSE, filter, agegate = FALSE) if(!SSdbcore.Connect()) @@ -173,8 +199,11 @@ output += ruler var/datum/DBQuery/query_get_type_messages = SSdbcore.NewQuery("SELECT id, targetckey, adminckey, text, timestamp, server, lasteditor FROM [format_table_name("messages")] WHERE type = '[type]' AND deleted = 0") if(!query_get_type_messages.warn_execute()) + qdel(query_get_type_messages) return while(query_get_type_messages.NextRow()) + if(QDELETED(usr)) + return var/id = query_get_type_messages.item[1] var/t_ckey = query_get_type_messages.item[2] if(type == "watchlist entry" && filter && !(t_ckey in GLOB.directory)) @@ -193,16 +222,20 @@ if(editor_ckey) output += " Last edit by [editor_ckey] (Click here to see edit log)" output += "
[text]
" + qdel(query_get_type_messages) if(target_ckey) target_ckey = sanitizeSQL(target_ckey) var/datum/DBQuery/query_get_messages = SSdbcore.NewQuery("SELECT type, secret, id, adminckey, text, timestamp, server, lasteditor, DATEDIFF(NOW(), timestamp) AS `age` FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' AND deleted = 0 ORDER BY timestamp DESC") if(!query_get_messages.warn_execute()) + qdel(query_get_messages) return var/list/messagedata = list() var/list/watchdata = list() var/list/notedata = list() var/skipped = 0 while(query_get_messages.NextRow()) + if(QDELETED(usr)) + return type = query_get_messages.item[1] if(type == "memo") continue @@ -253,6 +286,7 @@ watchdata += data if("note") notedata += data + qdel(query_get_messages) output += "

[target_ckey]

" if(!linkless) output += "\[Add note\]" @@ -296,16 +330,20 @@ search = "^[index]" var/datum/DBQuery/query_list_messages = SSdbcore.NewQuery("SELECT DISTINCT targetckey FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey REGEXP '[search]' AND deleted = 0 ORDER BY targetckey") if(!query_list_messages.warn_execute()) + qdel(query_list_messages) return while(query_list_messages.NextRow()) + if(QDELETED(usr)) + return index_ckey = query_list_messages.item[1] output += "[index_ckey]
" + qdel(query_list_messages) else if(!type && !target_ckey && !index) output += "
\[Add message\]\[Add watchlist entry\]\[Add note\]
" output += ruler usr << browse({"[jointext(output, "")]"}, "window=browse_messages;size=900x500") -proc/get_message_output(type, target_ckey) +/proc/get_message_output(type, target_ckey) if(!SSdbcore.Connect()) to_chat(usr, "Failed to establish database connection.") return @@ -319,6 +357,7 @@ proc/get_message_output(type, target_ckey) query += " AND targetckey = '[target_ckey]'" var/datum/DBQuery/query_get_message_output = SSdbcore.NewQuery(query) if(!query_get_message_output.warn_execute()) + qdel(query_get_message_output) return while(query_get_message_output.NextRow()) var/message_id = query_get_message_output.item[1] @@ -332,7 +371,10 @@ proc/get_message_output(type, target_ckey) output += "
[text]
" var/datum/DBQuery/query_message_read = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET type = 'message sent' WHERE id = [message_id]") if(!query_message_read.warn_execute()) + qdel(query_get_message_output) + qdel(query_message_read) return + qdel(query_message_read) if("watchlist entry") message_admins("Notice: [key_name_admin(target_ckey)] has been on the watchlist since [timestamp] and has just connected - Reason: [text]") send2irc_adminless_only("Watchlist", "[key_name(target_ckey)] is on the watchlist and has just connected - Reason: [text]") @@ -341,6 +383,7 @@ proc/get_message_output(type, target_ckey) if(editor_ckey) output += "
Last edit by [editor_ckey] (Click here to see edit log)" output += "
[text]
" + qdel(query_get_message_output) return output #define NOTESFILE "data/player_notes.sav" @@ -365,9 +408,11 @@ proc/get_message_output(type, target_ckey) var/admin_ckey = note.group[3] var/datum/DBQuery/query_convert_time = SSdbcore.NewQuery("SELECT ADDTIME(STR_TO_DATE('[timestamp]','%d-%b-%Y'), '0')") if(!query_convert_time.Execute()) + qdel(query_convert_time) return if(query_convert_time.NextRow()) timestamp = query_convert_time.item[1] + qdel(query_convert_time) if(ckey && notetext && timestamp && admin_ckey && server) create_message("note", ckey, admin_ckey, notetext, timestamp, server, 1, 0) notesfile.cd = "/" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index d5349c3e2f..7cba469019 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -74,7 +74,7 @@ message_admins("[key_name_admin(usr)] tried to create traitors. Unfortunately, there were no candidates available.") log_admin("[key_name(usr)] failed to create traitors.") if("changelings") - if(src.makeChanglings()) + if(src.makeChangelings()) message_admins("[key_name(usr)] created changelings.") log_admin("[key_name(usr)] created changelings.") else @@ -447,6 +447,8 @@ if("Yes") delmob = 1 + log_admin("[key_name(usr)] has used rudimentary transformation on [key_name(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]") + message_admins("[key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]") switch(href_list["simplemake"]) if("observer") M.change_mob_type( /mob/dead/observer , null, null, delmob ) @@ -499,8 +501,6 @@ M.change_mob_type( /mob/living/simple_animal/hostile/construct/wraith , null, null, delmob ) if("shade") M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob ) - log_admin("[key_name(usr)] has used rudimentary transformation on [key_name(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]") - message_admins("[key_name_admin(usr)] has used rudimentary transformation on [key_name_admin(M)]. Transforming to [href_list["simplemake"]].; deletemob=[delmob]") /////////////////////////////////////new ban stuff @@ -1200,10 +1200,13 @@ var/message_id = sanitizeSQL("[href_list["messageedits"]]") var/datum/DBQuery/query_get_message_edits = SSdbcore.NewQuery("SELECT edits FROM [format_table_name("messages")] WHERE id = '[message_id]'") if(!query_get_message_edits.warn_execute()) + qdel(query_get_message_edits) return if(query_get_message_edits.NextRow()) var/edit_log = query_get_message_edits.item[1] - usr << browse(edit_log,"window=noteedits") + if(!QDELETED(usr)) + usr << browse(edit_log,"window=noteedits") + qdel(query_get_message_edits) else if(href_list["newban"]) if(!check_rights(R_BAN)) @@ -1822,18 +1825,7 @@ usr.client.smite(H) else if(href_list["CentComReply"]) - var/mob/living/carbon/human/H = locate(href_list["CentComReply"]) in GLOB.mob_list - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human") - return - if(!istype(H.ears, /obj/item/radio/headset)) - to_chat(usr, "The person you are trying to contact is not wearing a headset.") - return - - message_admins("[src.owner] has started answering [key_name(H)]'s CentCom request.") - var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via their headset.","Outgoing message from CentCom", "") - if(!input) - message_admins("[src.owner] decided not to answer [key_name(H)]'s CentCom request.") + if(!check_rights(R_ADMIN)) return var/mob/M = locate(href_list["CentComReply"]) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index f385cdc1bd..bef39c29ca 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -256,7 +256,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /datum/admin_help/proc/MessageNoRecipient(msg) var/ref_src = "[REF(src)]" //Message to be sent to all admins - var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [keywords_lookup(msg)]" + var/admin_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [keywords_lookup(msg)]" AddInteraction("[LinkedReplyName(ref_src)]: [msg]") @@ -268,7 +268,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) to_chat(X, admin_msg) //show it to the person adminhelping too - to_chat(initiator, "PM to-Admins: [msg]") + to_chat(initiator, "PM to-Admins: [msg]") //Reopen a closed ticket /datum/admin_help/proc/Reopen() diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 179595866f..4d72f0a8e2 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -145,15 +145,15 @@ var/keywordparsedmsg = keywords_lookup(msg) if(irc) - to_chat(src, "PM to-Admins: [rawmsg]") + to_chat(src, "PM to-Admins: [rawmsg]") var/datum/admin_help/AH = admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to IRC: [keywordparsedmsg]") ircreplyamount-- send2irc("[AH ? "#[AH.id] " : ""]Reply: [ckey]", rawmsg) else if(recipient.holder) if(holder) //both are admins - to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") - to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]") + to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]") + to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]") //omg this is dumb, just fill in both their tickets var/interaction_message = "PM from-[key_name(src, recipient, 1)] to-[key_name(recipient, src, 1)]: [keywordparsedmsg]" @@ -162,12 +162,12 @@ admin_ticket_log(recipient, interaction_message) else //recipient is an admin but sender is not - var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]" + var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]" admin_ticket_log(src, replymsg) to_chat(recipient, replymsg) - to_chat(src, "PM to-Admins: [msg]") + to_chat(src, "PM to-Admins: [msg]") - //play the recieving admin the adminhelp sound (if they have them enabled) + //play the receiving admin the adminhelp sound (if they have them enabled) if(recipient.prefs.toggles & SOUND_ADMINHELP) SEND_SOUND(recipient, sound('sound/effects/adminhelp.ogg')) @@ -177,9 +177,9 @@ new /datum/admin_help(msg, recipient, TRUE) to_chat(recipient, "-- Administrator private message --") - to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]") + to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]") to_chat(recipient, "Click on the administrator's name to reply.") - to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]") + to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]") admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]") diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 82bbc27abc..bf39288511 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -12,10 +12,10 @@ log_talk(mob,"[key_name(src)] : [msg]",LOGASAY) msg = keywords_lookup(msg) if(check_rights(R_ADMIN,0)) - msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" + msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" to_chat(GLOB.admins, msg) else - msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" + msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" to_chat(GLOB.admins, msg) SSblackbox.record_feedback("tally", "admin_verb", 1, "Asay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/manipulate_organs.dm b/code/modules/admin/verbs/manipulate_organs.dm index 4d1de50e47..a3b7e4247c 100644 --- a/code/modules/admin/verbs/manipulate_organs.dm +++ b/code/modules/admin/verbs/manipulate_organs.dm @@ -1,7 +1,9 @@ /client/proc/manipulate_organs(mob/living/carbon/C in world) set name = "Manipulate Organs" set category = "Debug" - var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") in list("add organ", "add implant", "drop organ/implant", "remove organ/implant", "cancel") + var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") as null|anything in list("add organ", "add implant", "drop organ/implant", "remove organ/implant", "cancel") + if (!operation) + return var/list/organs = list() switch(operation) @@ -10,7 +12,9 @@ var/dat = replacetext("[path]", "/obj/item/organ/", ":") organs[dat] = path - var/obj/item/organ/organ = input("Select organ type:", "Organ Manipulation", null) in organs + var/obj/item/organ/organ = input("Select organ type:", "Organ Manipulation", null) as null|anything in organs + if(!organ) + return organ = organs[organ] organ = new organ organ.Insert(C) @@ -22,7 +26,9 @@ var/dat = replacetext("[path]", "/obj/item/implant/", ":") organs[dat] = path - var/obj/item/implant/organ = input("Select implant type:", "Organ Manipulation", null) in organs + var/obj/item/implant/organ = input("Select implant type:", "Organ Manipulation", null) as null|anything in organs + if(!organ) + return organ = organs[organ] organ = new organ organ.implant(C) @@ -38,7 +44,9 @@ var/obj/item/implant/I = X organs["[I.name] ([I.type])"] = I - var/obj/item/organ = input("Select organ/implant:", "Organ Manipulation", null) in organs + var/obj/item/organ = input("Select organ/implant:", "Organ Manipulation", null) as null|anything in organs + if(!organ) + return organ = organs[organ] if(!organ) return diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index daa1ce473a..190ddd7e63 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -76,7 +76,7 @@ return 0 -/datum/admins/proc/makeChanglings() +/datum/admins/proc/makeChangelings() var/datum/game_mode/changeling/temp = new if(CONFIG_GET(flag/protect_roles_from_antagonist)) @@ -95,11 +95,11 @@ candidates += applicant if(candidates.len) - var/numChanglings = min(candidates.len, 3) + var/numChangelings = min(candidates.len, 3) - for(var/i = 0, i[ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]: [msg]" + msg = "[icon2html(cross, GLOB.admins)][prayer_type][deity ? " (to [deity])" : ""]: [ADMIN_FULLMONTY(src)] [ADMIN_SC(src)]: [msg]" for(var/client/C in GLOB.admins) if(C.prefs.chat_toggles & CHAT_PRAYER) diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 1e7d3303d6..50281d54b4 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/proc/is_banned(mob/M) if(!M) return FALSE - . = (jobban_isbanned(M, ROLE_SYNDICATE) || (job_rank && jobban_isbanned(M,job_rank))) + . = (jobban_isbanned(M, ROLE_SYNDICATE) || QDELETED(M) || (job_rank && (jobban_isbanned(M,job_rank) || QDELETED(M)))) /datum/antagonist/proc/replace_banned_player() set waitfor = FALSE @@ -110,12 +110,12 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/antagonist/proc/give_antag_moodies() if(!antag_moodlet) return - owner.current.SendSignal(COMSIG_ADD_MOOD_EVENT, "antag_moodlet", antag_moodlet) + SEND_SIGNAL(owner.current, COMSIG_ADD_MOOD_EVENT, "antag_moodlet", antag_moodlet) /datum/antagonist/proc/clear_antag_moodies() if(!antag_moodlet) return - owner.current.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "antag_moodlet") + SEND_SIGNAL(owner.current, COMSIG_CLEAR_MOOD_EVENT, "antag_moodlet") //Returns the team antagonist belongs to if any. /datum/antagonist/proc/get_team() diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 0a000c4bf0..ca87b94d5b 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -58,6 +58,8 @@ return var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src) if(LAZYLEN(candidates)) + if(QDELETED(src)) + return if(used) to_chat(H, "You already used this contract!") return @@ -121,7 +123,7 @@ to_chat(user, "You activate [src] and wait for confirmation.") var/list/nuke_candidates = pollGhostCandidates("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE) if(LAZYLEN(nuke_candidates)) - if(!(check_usability(user))) + if(QDELETED(src) || !check_usability(user)) return used = TRUE var/mob/dead/observer/G = pick(nuke_candidates) @@ -235,7 +237,7 @@ return var/list/candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", ROLE_ALIEN, null, ROLE_ALIEN, 50, src) if(LAZYLEN(candidates)) - if(used) + if(used || QDELETED(src)) return used = TRUE var/mob/dead/observer/C = pick(candidates) diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index e7cdb4d00c..f19521e821 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -30,9 +30,9 @@ 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 + item_flags ^= NODROP if(ismob(loc)) - to_chat(loc, "Your vest is now [flags_1 & NODROP_1 ? "locked" : "unlocked"].") + to_chat(loc, "Your vest is now [item_flags & NODROP ? "locked" : "unlocked"].") /obj/item/clothing/suit/armor/abductor/vest/proc/flip_mode() switch(mode) @@ -589,9 +589,10 @@ Congratulations! You are now trained for invasive xenobiology research!"} righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' breakouttime = 450 trashtype = /obj/item/restraints/handcuffs/energy/used + flags_1 = NONE /obj/item/restraints/handcuffs/energy/used - flags_1 = DROPDEL_1 + item_flags = DROPDEL /obj/item/restraints/handcuffs/energy/used/dropped(mob/user) user.visible_message("[user]'s [name] breaks in a discharge of energy!", \ diff --git a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm index 8b8851ec18..e2b881d147 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_outfits.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_outfits.dm @@ -17,7 +17,7 @@ var/obj/item/clothing/suit/armor/abductor/vest/V = locate() in H if(V) console.AddVest(V) - V.flags_1 |= NODROP_1 + V.item_flags |= NODROP var/obj/item/storage/backpack/B = locate() in H if(B) diff --git a/code/modules/antagonists/abductor/machinery/console.dm b/code/modules/antagonists/abductor/machinery/console.dm index 6bc8fc0d5d..a14b667069 100644 --- a/code/modules/antagonists/abductor/machinery/console.dm +++ b/code/modules/antagonists/abductor/machinery/console.dm @@ -75,7 +75,7 @@ dat+="
" dat += "Select Agent Vest Disguise
" - dat += "[vest.flags_1 & NODROP_1 ? "Unlock" : "Lock"] Vest
" + dat += "[vest.item_flags & NODROP ? "Unlock" : "Lock"] Vest
" else dat += "NO AGENT VEST DETECTED" var/datum/browser/popup = new(user, "computer", "Abductor Console", 400, 500) diff --git a/code/modules/antagonists/blob/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm index 9d31852d28..3483c3a557 100644 --- a/code/modules/antagonists/blob/blob/overmind.dm +++ b/code/modules/antagonists/blob/blob/overmind.dm @@ -123,7 +123,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) else L.fully_heal() - for(var/V in GLOB.sortedAreas) + for(var/V in GLOB.the_station_areas) var/area/A = V if(!A.blob_allowed) continue diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index a42ae6ef4f..ab6dd3607d 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -451,7 +451,7 @@ /datum/antagonist/changeling/proc/update_changeling_icons_added() var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING] hud.join_hud(owner.current) - set_antag_hud(owner.current, "changling") + set_antag_hud(owner.current, "changeling") /datum/antagonist/changeling/proc/update_changeling_icons_removed() var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING] diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index 199bc6636b..a8bec72771 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -112,10 +112,3 @@ target.death(0) target.Drain() return TRUE - - - -//Absorbs the target DNA. -//datum/changeling/proc/absorb_dna(mob/living/carbon/T, mob/user) - -//datum/changeling/proc/store_dna(datum/dna/new_dna, mob/user) diff --git a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm index f48464700f..5ec5440a2b 100644 --- a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm +++ b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm @@ -1,4 +1,4 @@ -//Augmented Eyesight: Gives you x-ray vision or protection from flashes. Also, high DNA cost because of how powerful it is. +//Augmented Eyesight: Gives you X-ray vision or protection from flashes. Also, high DNA cost because of how powerful it is. //Possible todo: make a custom message for directing a penlight/flashlight at the eyes - not sure what would display though. /obj/effect/proc_holder/changeling/augmented_eyesight @@ -41,7 +41,7 @@ return 1 -/obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user) //Get rid of x-ray vision and flash protection when the user refunds this ability +/obj/effect/proc_holder/changeling/augmented_eyesight/on_refund(mob/user) //Get rid of X-ray vision and flash protection when the user refunds this ability var/obj/item/organ/eyes/E = user.getorganslot(ORGAN_SLOT_EYES) if(E) if (active) diff --git a/code/modules/antagonists/changeling/powers/digitalcamo.dm b/code/modules/antagonists/changeling/powers/digitalcamo.dm index afb4e0bef7..68a1fa4add 100644 --- a/code/modules/antagonists/changeling/powers/digitalcamo.dm +++ b/code/modules/antagonists/changeling/powers/digitalcamo.dm @@ -1,6 +1,6 @@ /obj/effect/proc_holder/changeling/digitalcamo name = "Digital Camouflage" - desc = "By evolving the ability to distort our form and proprotions, we defeat common altgorithms used to detect lifeforms on cameras." + desc = "By evolving the ability to distort our form and proportions, we defeat common algorithms used to detect lifeforms on cameras." helptext = "We cannot be tracked by camera or seen by AI units while using this skill. However, humans looking at us will find us... uncanny." dna_cost = 1 diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index dbc8446fca..08fe6bd0ce 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -29,7 +29,7 @@ /obj/effect/proc_holder/changeling/weapon/proc/check_weapon(mob/user, obj/item/hand_item) if(istype(hand_item, weapon_type)) - user.temporarilyRemoveItemFromInventory(hand_item, TRUE) //DROPDEL_1 will delete the item + user.temporarilyRemoveItemFromInventory(hand_item, TRUE) //DROPDEL will delete the item if(!silent) playsound(user, 'sound/effects/blobattack.ogg', 30, 1) user.visible_message("With a sickening crunch, [user] reforms [user.p_their()] [weapon_name_simple] into an arm!", "We assimilate the [weapon_name_simple] back into our body.", "We search for the scent of any nearby changelings.") + changeling.chem_recharge_slowdown += 0.5 + user.apply_status_effect(/datum/status_effect/agent_pinpointer/changeling) + else + to_chat(user, "We stop searching for now.") + changeling.chem_recharge_slowdown -= 0.5 + user.remove_status_effect(/datum/status_effect/agent_pinpointer/changeling) + + receptors_active = !receptors_active + +//Modified IA pinpointer - Points to the NEAREST changeling, but will only get you within a few tiles of the target. +//You'll still have to rely on intuition and observation to make the identification. Lings can 'hide' in public places. +/datum/status_effect/agent_pinpointer/changeling + alert_type = /obj/screen/alert/status_effect/agent_pinpointer/changeling + minimum_range = CHANGELING_PHEROMONE_MIN_DISTANCE + tick_interval = CHANGELING_PHEROMONE_PING_TIME + range_fuzz_factor = 0 + +/datum/status_effect/agent_pinpointer/changeling/scan_for_target() + var/turf/my_loc = get_turf(owner) + + var/list/mob/living/carbon/changelings = list() + + for(var/mob/living/carbon/C in GLOB.alive_mob_list) + if(C != owner && C.mind) + var/datum/antagonist/changeling/antag_datum = C.mind.has_antag_datum(/datum/antagonist/changeling) + if(istype(antag_datum)) + var/their_loc = get_turf(C) + var/distance = get_dist_euclidian(my_loc, their_loc) + if (distance < CHANGELING_PHEROMONE_MAX_DISTANCE) + changelings[C] = (CHANGELING_PHEROMONE_MAX_DISTANCE ** 2) - (distance ** 2) + + if(changelings.len) + scan_target = pickweight(changelings) //Point at a 'random' changeling, biasing heavily towards closer ones. + else + scan_target = null + + +/obj/screen/alert/status_effect/agent_pinpointer/changeling + name = "Pheromone Scent" + desc = "The nose always knows." \ No newline at end of file diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm index 1d0a4cf143..a801c87ac2 100644 --- a/code/modules/antagonists/changeling/powers/tiny_prick.dm +++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm @@ -134,7 +134,7 @@ return 1 /obj/effect/proc_holder/changeling/sting/false_armblade/sting_action(mob/user, mob/target) - add_logs(user, target, "stung", object="falso armblade sting") + add_logs(user, target, "stung", object="false armblade sting") var/obj/item/held = target.get_active_held_item() if(held && !target.dropItemToGround(held)) diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm index 2929b5743e..1e2b22cdae 100644 --- a/code/modules/antagonists/changeling/powers/transform.dm +++ b/code/modules/antagonists/changeling/powers/transform.dm @@ -8,7 +8,7 @@ /obj/item/clothing/glasses/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/glasses/changeling/attack_hand(mob/user) @@ -20,7 +20,7 @@ /obj/item/clothing/under/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/under/changeling/attack_hand(mob/user) @@ -32,7 +32,7 @@ /obj/item/clothing/suit/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP allowed = list(/obj/item/changeling) //ATTACK HAND IGNORING PARENT RETURN VALUE @@ -45,7 +45,7 @@ /obj/item/clothing/head/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/head/changeling/attack_hand(mob/user) @@ -57,7 +57,7 @@ /obj/item/clothing/shoes/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/shoes/changeling/attack_hand(mob/user) @@ -69,7 +69,7 @@ /obj/item/clothing/gloves/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/gloves/changeling/attack_hand(mob/user) @@ -81,7 +81,7 @@ /obj/item/clothing/mask/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/item/clothing/mask/changeling/attack_hand(mob/user) @@ -93,7 +93,7 @@ /obj/item/changeling name = "flesh" - flags_1 = NODROP_1 + item_flags = NODROP slot_flags = ALL allowed = list(/obj/item/changeling) diff --git a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm index b32345fa69..bd986bac25 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm @@ -254,8 +254,8 @@ var/list/repair_values = list() if(!fabricator.fabricator_repair_checks(repair_values, src, user)) return - user.visible_message("[user]'s [fabricator.name] starts coverin[src == user ? "g [user.p_them()]" : "g [src]"] in glowing orange energy...", \ - "You start repairin[src == user ? "g yourself" : "g [src]"]...") + user.visible_message("[user]'s [fabricator.name] starts covering [src == user ? "[user.p_them()]" : "[src]"] in glowing orange energy...", \ + "You start repairing [src == user ? "yourself" : "[src]"]...") fabricator.repairing = src while(fabricator && user && src) if(!do_after(user, repair_values["healing_for_cycle"] * fabricator.speed_multiplier, target = src, \ @@ -283,7 +283,7 @@ if(health == maxHealth) //if we're at maximum health, replace the turf under us return FALSE else if(fabricator_heal(user, fabricator) && user) - user.visible_message("[user]'s [fabricator.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \ + user.visible_message("[user]'s [fabricator.name] stops covering [src == user ? "[user.p_them()]" : "[src]"] with glowing orange energy.", \ "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_theyre(TRUE)]"] now at [abs(HEALTH_THRESHOLD_DEAD - health)]/[abs(HEALTH_THRESHOLD_DEAD - maxHealth)] health.") //Same with clockwork mobs. @@ -292,7 +292,7 @@ if(health == maxHealth) //if we're at maximum health, replace the turf under us return FALSE else if(fabricator_heal(user, fabricator) && user) - user.visible_message("[user]'s [fabricator.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \ + user.visible_message("[user]'s [fabricator.name] stops covering [src == user ? "[user.p_them()]" : "[src]"] with glowing orange energy.", \ "You finish repairin[src == user ? "g yourself. You are":"g [src]. [p_theyre(TRUE)]"] now at [health]/[maxHealth] health.") //Cogscarabs get special interaction because they're drones and have innate self-heals/revives. @@ -304,13 +304,13 @@ if(health == maxHealth) return FALSE else if(!(flags_1 & GODMODE)) - user.visible_message("[user]'s [fabricator.name] starts coverin[src == user ? "g [user.p_them()]" : "g [src]"] in glowing orange energy...", \ - "You start repairin[src == user ? "g yourself" : "g [src]"]...") + user.visible_message("[user]'s [fabricator.name] starts covering [src == user ? "[user.p_them()]" : "[src]"] in glowing orange energy...", \ + "You start repairing [src == user ? "yourself" : "[src]"]...") fabricator.repairing = src if(do_after(user, (maxHealth - health)*2, target=src)) adjustHealth(-maxHealth) - user.visible_message("[user]'s [fabricator.name] stops coverin[src == user ? "g [user.p_them()]" : "g [src]"] with glowing orange energy.", \ - "You finish repairin[src == user ? "g yourself" : "g [src]"].") + user.visible_message("[user]'s [fabricator.name] stops covering [src == user ? "[user.p_them()]" : "[src]"] with glowing orange energy.", \ + "You finish repairing [src == user ? "yourself" : "[src]"].") if(fabricator) fabricator.repairing = null diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm index d39656c8d8..aaeb871e5d 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm @@ -67,7 +67,7 @@ name = "replicant manacles" desc = "Heavy manacles made out of freezing-cold metal. It looks like brass, but feels much more solid." icon_state = "brass_manacles" - flags_1 = DROPDEL_1 + item_flags = DROPDEL /obj/item/restraints/handcuffs/clockwork/dropped(mob/user) user.visible_message("[user]'s [name] come apart at the seams!", \ diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm index d32eeee84b..8ed8edae8a 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm @@ -106,13 +106,13 @@ if(slot == SLOT_WEAR_SUIT && !is_servant_of_ratvar(user)) if(!iscultist(user)) to_chat(user, "\"Now now, this is for my servants, not you.\"") - user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] body!", "The curiass flickers off your body, leaving only nausea!") + user.visible_message("As [user] puts [src] on, it flickers off [user.p_their()] body!", "The cuirass flickers off your body, leaving only nausea!") if(iscarbon(user)) var/mob/living/carbon/C = user C.vomit(20) else to_chat(user, "\"I think this armor is too hot for you to handle.\"") - to_chat(user, "The curiass emits a burst of flame as you scramble to get it off!") + to_chat(user, "The cuirass emits a burst of flame as you scramble to get it off!") user.emote("scream") user.apply_damage(15, BURN, BODY_ZONE_CHEST) user.adjust_fire_stacks(2) diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm index c464656150..1cdc05a07a 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm @@ -278,7 +278,7 @@ dat += "Items
" dat += "Slab: A clockwork slab, a Servant's most important tool. You're holding one! Keep it safe and hidden.
" dat += "Visor: A judicial visor, which is a pair of glasses that can smite an area for a brief stun and delayed explosion.
" - dat += "Wraith Specs: Wraith spectacles, which provide true sight (x-ray, night vision) but damage the wearer's eyes.
" + dat += "Wraith Specs: Wraith spectacles, which provide true sight (X-ray, night vision) but damage the wearer's eyes.
" dat += "Spear: A Ratvarian spear, which is a very powerful melee weapon that produces Vitality.
" dat += "Fabricator: A replica fabricator, which converts objects into clockwork versions.

" dat += "Constructs
" diff --git a/code/modules/antagonists/clockcult/clock_items/integration_cog.dm b/code/modules/antagonists/clockcult/clock_items/integration_cog.dm index 4e4aff5569..0ce70336fe 100644 --- a/code/modules/antagonists/clockcult/clock_items/integration_cog.dm +++ b/code/modules/antagonists/clockcult/clock_items/integration_cog.dm @@ -9,7 +9,7 @@ Siphons 5 W of power per second while in an APC." icon_state = "wall_gear" w_class = WEIGHT_CLASS_TINY - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/obj/machinery/power/apc/apc /obj/item/clockwork/integration_cog/Initialize() diff --git a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm index c89a04c932..741b251a4f 100644 --- a/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm +++ b/code/modules/antagonists/clockcult/clock_items/replica_fabricator.dm @@ -8,7 +8,7 @@ righthand_file = 'icons/mob/inhands/antag/clockwork_righthand.dmi' w_class = WEIGHT_CLASS_NORMAL force = 5 - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/speed_multiplier = 1 //The speed ratio the fabricator operates at var/uses_power = TRUE var/repairing = null //what we're currently repairing, if anything diff --git a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm index dab12dc304..6fda25a1b5 100644 --- a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm +++ b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm @@ -1,4 +1,4 @@ -//Wraith spectacles: Grants x-ray and night vision at the eventual cost of the wearer's sight if worn too long. Nar-Sian cultists are instantly blinded. +//Wraith spectacles: Grants X-ray and night vision at the eventual cost of the wearer's sight if worn too long. Nar-Sian cultists are instantly blinded. /obj/item/clothing/glasses/wraith_spectacles name = "antique spectacles" desc = "Unnerving glasses with opaque yellow lenses." diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm index ad4062598e..e78a6e4623 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm @@ -29,7 +29,7 @@ descname = "Trap, Stunning" name = "Sigil of Transgression" desc = "Wards a tile with a sigil, which will briefly stun the next non-Servant to cross it and apply Belligerent to them." - invocations = list("Divinity, smite...", "...those who tresspass here!") + invocations = list("Divinity, smite...", "...those who trespass here!") channel_time = 50 power_cost = 50 whispered = TRUE diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 5459e4c45e..847b49c354 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -339,7 +339,8 @@ icon = 'icons/obj/items_and_weapons.dmi' icon_state = "disintegrate" item_state = null - flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1 + item_flags = NEEDS_PERMIT | ABSTRACT | NODROP | DROPDEL + w_class = WEIGHT_CLASS_HUGE throwforce = 0 throw_range = 0 @@ -519,7 +520,7 @@ name = "shadow shackles" desc = "Shackles that bind the wrists with sinister magic." trashtype = /obj/item/restraints/handcuffs/energy/used - flags_1 = DROPDEL_1 + item_flags = DROPDEL /obj/item/restraints/handcuffs/energy/cult/used/dropped(mob/user) user.visible_message("[user]'s shackles shatter in a discharge of dark magic!", \ @@ -541,7 +542,7 @@ var/obj/item/stack/sheet/candidate = target if(candidate.use(50)) uses-- - to_chat(user, "A dark cloud eminates from your hand and swirls around the metal, twisting it into a construct shell!") + to_chat(user, "A dark cloud emanates from your hand and swirls around the metal, twisting it into a construct shell!") new /obj/structure/constructshell(T) SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) else @@ -552,12 +553,12 @@ if(candidate.use(quantity)) uses -- new /obj/item/stack/sheet/runed_metal(T,quantity) - to_chat(user, "A dark cloud eminates from you hand and swirls around the plasteel, transforming it into runed metal!") + to_chat(user, "A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal!") SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) else if(istype(target,/mob/living/silicon/robot)) var/mob/living/silicon/robot/candidate = target if(candidate.mmi) - user.visible_message("A dark cloud eminates from [user]'s hand and swirls around [candidate]!") + user.visible_message("A dark cloud emanates from [user]'s hand and swirls around [candidate]!") playsound(T, 'sound/machines/airlock_alien_prying.ogg', 80, 1) var/prev_color = candidate.color candidate.color = "black" @@ -580,7 +581,7 @@ candidate.color = prev_color else uses-- - to_chat(user, "A dark cloud eminates from you hand and swirls around [candidate] - twisting it into a construct shell!") + to_chat(user, "A dark cloud emanates from you hand and swirls around [candidate] - twisting it into a construct shell!") new /obj/structure/constructshell(T) SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) else if(istype(target,/obj/machinery/door/airlock)) diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index f8a3d84576..8ea391d2ca 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -95,7 +95,7 @@ else to_chat(mob, "You have a [item_name] in your [where].") if(where == "backpack") - mob.back.SendSignal(COMSIG_TRY_STORAGE_SHOW, mob) + SEND_SIGNAL(mob.back, COMSIG_TRY_STORAGE_SHOW, mob) return TRUE /datum/antagonist/cult/apply_innate_effects(mob/living/mob_override) @@ -228,7 +228,7 @@ target_candidates += player.mind if(target_candidates.len == 0) - message_admins("Cult Sacrifice: Could not find unconvertable target, checking for convertable target.") + message_admins("Cult Sacrifice: Could not find unconvertible target, checking for convertible target.") for(var/mob/living/carbon/human/player in GLOB.player_list) if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && player.stat != DEAD) target_candidates += player.mind @@ -248,7 +248,7 @@ objectives += sac_objective else - message_admins("Cult Sacrifice: Could not find unconvertable or convertable target. WELP!") + message_admins("Cult Sacrifice: Could not find unconvertible or convertible target. WELP!") //SUMMON OBJECTIVE diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 7678cdcfb3..e1710dae96 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -64,7 +64,8 @@ /obj/item/melee/cultblade/ghost name = "eldritch sword" force = 19 //can't break normal airlocks - flags_1 = NODROP_1|DROPDEL_1 + item_flags = NEEDS_PERMIT | NODROP | DROPDEL + flags_1 = NONE /obj/item/melee/cultblade/pickup(mob/living/user) ..() @@ -301,7 +302,7 @@ item_state = "cult_hoodalt" /obj/item/clothing/head/culthood/alt/ghost - flags_1 = NODROP_1|DROPDEL_1 + item_flags = NODROP | DROPDEL /obj/item/clothing/suit/cultrobes/alt name = "cultist robes" @@ -310,7 +311,7 @@ item_state = "cultrobesalt" /obj/item/clothing/suit/cultrobes/alt/ghost - flags_1 = NODROP_1|DROPDEL_1 + item_flags = NODROP | DROPDEL /obj/item/clothing/head/magus @@ -333,7 +334,7 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT /obj/item/clothing/head/helmet/space/hardsuit/cult - name = "nar-sien hardened helmet" + name = "\improper Nar-Sien hardened helmet" 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" @@ -342,7 +343,7 @@ actions_types = list() /obj/item/clothing/suit/space/hardsuit/cult - name = "nar-sien hardened armor" + name = "\improper Nar-Sien hardened armor" icon_state = "cult_armor" item_state = "cult_armor" desc = "A heavily-armored exosuit worn by warriors of the Nar-Sien cult. It can withstand hard vacuum." @@ -754,7 +755,7 @@ guns_left = 24 mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood fire_sound = 'sound/magic/wand_teleport.ogg' - flags_1 = NOBLUDGEON_1 | DROPDEL_1 + item_flags = NEEDS_PERMIT | NOBLUDGEON | DROPDEL /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood @@ -792,7 +793,7 @@ icon = 'icons/obj/items_and_weapons.dmi' icon_state = "disintegrate" item_state = null - flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1 + item_flags = ABSTRACT | NODROP | DROPDEL w_class = WEIGHT_CLASS_HUGE throwforce = 0 throw_range = 0 diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 4f4cc6c751..df4715bc69 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -804,7 +804,7 @@ structure_check() searches for nearby cultist structures required for the invoca construct_invoke = FALSE color = RUNE_COLOR_DARKRED var/mob/living/affecting = null - var/ghost_limit = 4 + var/ghost_limit = 3 var/ghosts = 0 /obj/effect/rune/manifest/Initialize() @@ -834,10 +834,15 @@ structure_check() searches for nearby cultist structures required for the invoca if(A.map_name == "Space" || is_mining_level(T.z)) to_chat(user, "The veil is not weak enough here to manifest spirits, you must be on station!") return + if(ghosts >= ghost_limit) + to_chat(user, "You are sustaining too many ghosts to summon more!") + fail_invoke() + log_game("Manifest rune failed - too many summoned ghosts") + return list() notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src) var/list/ghosts_on_rune = list() for(var/mob/dead/observer/O in T) - if(O.client && !jobban_isbanned(O, ROLE_CULTIST)) + if(O.client && !jobban_isbanned(O, ROLE_CULTIST) && !QDELETED(src) && !QDELETED(O)) ghosts_on_rune += O if(!ghosts_on_rune.len) to_chat(user, "There are no spirits near [src]!") @@ -852,11 +857,6 @@ structure_check() searches for nearby cultist structures required for the invoca new_human.apply_status_effect(STATUS_EFFECT_SUMMONEDGHOST) //ghosts can't summon more ghosts new_human.see_invisible = SEE_INVISIBLE_OBSERVER ghosts++ - if(ghosts >= ghost_limit) - to_chat(user, "You are sustaining too many ghosts to summon more!") - fail_invoke() - log_game("Manifest rune failed - too many summoned ghosts") - return list() playsound(src, 'sound/magic/exit_blood.ogg', 50, 1) visible_message("A cloud of red mist forms above [src], and from within steps... a [new_human.gender == FEMALE ? "wo":""]man.") to_chat(user, "Your blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely...") diff --git a/code/modules/antagonists/devil/imp/imp.dm b/code/modules/antagonists/devil/imp/imp.dm index 7752d0449f..da51a5d698 100644 --- a/code/modules/antagonists/devil/imp/imp.dm +++ b/code/modules/antagonists/devil/imp/imp.dm @@ -36,7 +36,7 @@ var/boost = 0 bloodcrawl = BLOODCRAWL_EAT var/list/consumed_mobs = list() - var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \ + var/playstyle_string = "You are an imp, a mischievous creature from hell. You are the lowest rank on the hellish totem pole \ Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \ of intentionally harming a fellow devil." diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm index 72b945600b..4e1175c13e 100644 --- a/code/modules/antagonists/devil/true_devil/_true_devil.dm +++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm @@ -67,7 +67,7 @@ //Left hand items for(var/obj/item/I in held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) msg += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" //Braindead diff --git a/code/modules/antagonists/disease/disease_abilities.dm b/code/modules/antagonists/disease/disease_abilities.dm index 9a792749a0..07cd3030b1 100644 --- a/code/modules/antagonists/disease/disease_abilities.dm +++ b/code/modules/antagonists/disease/disease_abilities.dm @@ -54,7 +54,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( stage_speed += initial(S.stage_speed) transmittable += initial(S.transmittable) threshold_block += "

[initial(S.threshold_desc)]" - stat_block = "Resistance: [resistance]
Stealth: [stealth]
Stage Speed: [stage_speed]
Transmittability: [transmittable]

" + stat_block = "Resistance: [resistance]
Stealth: [stealth]
Stage Speed: [stage_speed]
Transmissibility: [transmittable]

" /datum/disease_ability/proc/CanBuy(mob/camera/disease/D) if(world.time < D.next_adaptation_time) @@ -130,14 +130,14 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( required_total_points = 0 start_with = TRUE short_desc = "Force the host you are following to cough, spreading your infection to those nearby." - long_desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmitability is low.
Cooldown: 10 seconds" + long_desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmissibility is low.
Cooldown: 10 seconds" /datum/action/cooldown/disease_cough name = "Cough" icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "cough" - desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmitability is low.
Cooldown: 10 seconds" + desc = "Force the host you are following to cough with extra force, spreading your infection to those within two meters of your host even if your transmissibility is low.
Cooldown: 10 seconds" cooldown_time = 100 /datum/action/cooldown/disease_cough/Trigger() @@ -148,7 +148,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( if(!L) return FALSE if(L.stat != CONSCIOUS) - to_chat(D, "Your host must be concious to cough.") + to_chat(D, "Your host must be conscious to cough.") return FALSE to_chat(D, "You force [L.real_name] to cough.") L.emote("cough") @@ -170,7 +170,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( name = "Sneeze" icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' button_icon_state = "sneeze" - desc = "Force the host you are following to sneeze with extra force, spreading your infection to any victims in a 4 meter cone in front of your host even if your transmitability is low.
Cooldown: 20 seconds" + desc = "Force the host you are following to sneeze with extra force, spreading your infection to any victims in a 4 meter cone in front of your host even if your transmissibility is low.
Cooldown: 20 seconds" cooldown_time = 200 /datum/action/cooldown/disease_sneeze/Trigger() @@ -181,7 +181,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( if(!L) return FALSE if(L.stat != CONSCIOUS) - to_chat(D, "Your host must be concious to sneeze.") + to_chat(D, "Your host must be conscious to sneeze.") return FALSE to_chat(D, "You force [L.real_name] to sneeze.") L.emote("sneeze") @@ -243,7 +243,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 2 required_total_points = 4 short_desc = "Cause victims to cough intermittently." - long_desc = "Cause victims to cough intermittently, spreading your infection if your transmitability is high." + long_desc = "Cause victims to cough intermittently, spreading your infection if your transmissibility is high." /datum/disease_ability/symptom/sneeze name = "Involuntary Sneezing" @@ -251,7 +251,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 2 required_total_points = 4 short_desc = "Cause victims to sneeze intermittently." - long_desc = "Cause victims to sneeze intermittently, spreading your infection and also increasing transmitability and resistance, at the cost of stealth." + long_desc = "Cause victims to sneeze intermittently, spreading your infection and also increasing transmissibility and resistance, at the cost of stealth." /datum/disease_ability/symptom/beard //I don't think I need to justify the fact that this is the best symptom @@ -277,7 +277,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 4 required_total_points = 8 short_desc = "Cause victims to choke." - long_desc = "Cause victims to choke, threatening asphyxiation. Decreases stats, especially transmittability." + long_desc = "Cause victims to choke, threatening asphyxiation. Decreases stats, especially transmissibility." /datum/disease_ability/symptom/confusion @@ -295,7 +295,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 4 required_total_points = 8 short_desc = "Cause victims to become eternally young." - long_desc = "Cause victims to become eternally young. Provides boosts to all stats except transmittability." + long_desc = "Cause victims to become eternally young. Provides boosts to all stats except transmissibility." /datum/disease_ability/symptom/vomit @@ -304,7 +304,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 4 required_total_points = 8 short_desc = "Cause victims to vomit." - long_desc = "Cause victims to vomit. Slightly increases transmittability. Vomiting also also causes the victims to lose nutrition and removes some toxin damage." + long_desc = "Cause victims to vomit. Slightly increases transmissibility. Vomiting also also causes the victims to lose nutrition and removes some toxin damage." /datum/disease_ability/symptom/voice_change @@ -367,7 +367,7 @@ GLOBAL_LIST_INIT(disease_ability_singletons, list( cost = 4 required_total_points = 8 short_desc = "Cause victims to lose weight." - long_desc = "Cause victims to lose weight, and make it almost immpossible for them to gain nutrition from food. Reduced nutrition allows your infection to spread more easily from hosts, especially by sneezing." + long_desc = "Cause victims to lose weight, and make it almost impossible for them to gain nutrition from food. Reduced nutrition allows your infection to spread more easily from hosts, especially by sneezing." /datum/disease_ability/symptom/metabolism_heal diff --git a/code/modules/antagonists/disease/disease_mob.dm b/code/modules/antagonists/disease/disease_mob.dm index bf035e1f21..6908c5eebf 100644 --- a/code/modules/antagonists/disease/disease_mob.dm +++ b/code/modules/antagonists/disease/disease_mob.dm @@ -81,7 +81,7 @@ the new instance inside the host to be updated to the template's stats. /mob/camera/disease/Login() ..() if(freemove) - to_chat(src, "You have [round((freemove_end - world.time)/10)] seconds to select your first host. Click on a human to select your host.") + to_chat(src, "You have [DisplayTimeText(freemove_end - world.time)] to select your first host. Click on a human to select your host.") /mob/camera/disease/Stat() @@ -285,7 +285,7 @@ the new instance inside the host to be updated to the template's stats. ..() /mob/camera/disease/proc/adapt_cooldown() - to_chat(src, "You have altered your genetic structure. You will be unable to adapt again for [adaptation_cooldown/10] seconds.") + to_chat(src, "You have altered your genetic structure. You will be unable to adapt again for [DisplayTimeText(adaptation_cooldown)].") next_adaptation_time = world.time + adaptation_cooldown addtimer(CALLBACK(src, .proc/notify_adapt_ready), adaptation_cooldown) @@ -310,7 +310,7 @@ the new instance inside the host to be updated to the template's stats. Resistance: [DT.totalResistance()]
\ Stealth: [DT.totalStealth()]
\ Stage Speed: [DT.totalStageSpeed()]
\ - Transmittability: [DT.totalTransmittable()]
\ + Transmissibility: [DT.totalTransmittable()]
\ Cure: [DT.cure_text]" dat += "

Adaptations

\ Points: [points] / [total_points]\ diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm index 4e511d7fac..62da2df87f 100644 --- a/code/modules/antagonists/highlander/highlander.dm +++ b/code/modules/antagonists/highlander/highlander.dm @@ -59,7 +59,7 @@ W.access += get_all_centcom_access() W.assignment = "Highlander" W.registered_name = H.real_name - W.flags_1 |= NODROP_1 + W.item_flags |= NODROP W.update_label(H.real_name) H.equip_to_slot_or_del(W, SLOT_WEAR_ID) diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm index b3c5ae3b30..df04059f99 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -16,7 +16,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) Such a brazen move will attract the attention of powerful benefactors within the Syndicate, who will supply your team with a massive amount of bonus telecrystals. \ Must be used within five minutes, or your benefactors will lose interest." var/declaring_war = FALSE - var/uplink_type = /obj/item/radio/uplink/nuclear + var/uplink_type = /obj/item/uplink/nuclear /obj/item/nuclear_challenge/attack_self(mob/living/user) if(!check_allowed(user)) @@ -88,7 +88,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) return TRUE /obj/item/nuclear_challenge/clownops - uplink_type = /obj/item/radio/uplink/clownop + uplink_type = /obj/item/uplink/clownop #undef CHALLENGE_TELECRYSTALS #undef CHALLENGE_TIME_LIMIT diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm index 1cdc356559..d8dc709975 100644 --- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm +++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm @@ -52,7 +52,7 @@ /obj/item/pinpointer/nuke/proc/switch_mode_to(new_mode) if(isliving(loc)) var/mob/living/L = loc - to_chat(L, "Your [name] beeps as it reconfigures its tracking algorithms.") + to_chat(L, "Your [name] beeps as it reconfigures it's tracking algorithms.") playsound(L, 'sound/machines/triple_beep.ogg', 50, 1) mode = new_mode scan_for_target() @@ -65,7 +65,8 @@ /obj/item/pinpointer/syndicate_cyborg // Cyborg pinpointers just look for a random operative. name = "cyborg syndicate pinpointer" desc = "An integrated tracking device, jury-rigged to search for living Syndicate operatives." - flags_1 = NODROP_1 + item_flags = NODROP + flags_1 = NONE /obj/item/pinpointer/syndicate_cyborg/scan_for_target() target = null @@ -79,4 +80,3 @@ if(closest_operative) target = closest_operative ..() - diff --git a/code/modules/antagonists/official/official.dm b/code/modules/antagonists/official/official.dm index 4b867585ae..23bf472422 100644 --- a/code/modules/antagonists/official/official.dm +++ b/code/modules/antagonists/official/official.dm @@ -31,7 +31,7 @@ else if (!mission) var/datum/objective/missionobj = new missionobj.owner = owner - missionobj.explanation_text = "Conduct a routine preformance review of [station_name()] and its Captain." + missionobj.explanation_text = "Conduct a routine performance review of [station_name()] and its Captain." missionobj.completed = 1 mission = missionobj objectives |= mission diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm index e17d1a23b4..5213c679ca 100644 --- a/code/modules/antagonists/traitor/IAA/internal_affairs.dm +++ b/code/modules/antagonists/traitor/IAA/internal_affairs.dm @@ -44,6 +44,7 @@ tick_interval = PINPOINTER_PING_TIME alert_type = /obj/screen/alert/status_effect/agent_pinpointer var/minimum_range = PINPOINTER_MINIMUM_RANGE + var/range_fuzz_factor = PINPOINTER_EXTRA_RANDOM_RANGE var/mob/scan_target = null /obj/screen/alert/status_effect/agent_pinpointer @@ -61,7 +62,7 @@ if(here.z != there.z) linked_alert.icon_state = "pinonnull" return - if(get_dist_euclidian(here,there)<=minimum_range + rand(0, PINPOINTER_EXTRA_RANDOM_RANGE)) + if(get_dist_euclidian(here,there)<=minimum_range + rand(0, range_fuzz_factor)) linked_alert.icon_state = "pinondirect" else linked_alert.setDir(get_dir(here, there)) @@ -228,14 +229,14 @@ /datum/antagonist/traitor/internal_affairs/forge_traitor_objectives() forge_iaa_objectives() - + var/objtype = traitor_kind == TRAITOR_HUMAN ? /datum/objective/escape : /datum/objective/survive var/datum/objective/escape_objective = new objtype escape_objective.owner = owner add_objective(escape_objective) /datum/antagonist/traitor/internal_affairs/proc/greet_iaa() - var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "recieving bribes", "malpractice", "worship of prohbited life forms", "possession of profane texts", "murder", "arson", "insulting their manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence") + var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "receiving bribes", "malpractice", "worship of prohibited life forms", "possession of profane texts", "murder", "arson", "insulting their manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence") to_chat(owner.current, "You are the [special_role].") if(syndicate) diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm index f574412b4c..ff4f7276bc 100644 --- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm +++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm @@ -532,7 +532,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( if(!is_station_level(AA.z)) continue AA.obj_flags |= EMAGGED - to_chat(owner, "All air alarm safeties on the station have been overriden. Air alarms may now use the Flood environmental mode.") + to_chat(owner, "All air alarm safeties on the station have been overridden. Air alarms may now use the Flood environmental mode.") owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0) @@ -625,7 +625,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( to_chat(ranged_ability_user, "You can only animate machines!") return if(!target.can_be_overridden() || is_type_in_typecache(target, GLOB.blacklisted_malf_machines)) - to_chat(ranged_ability_user, "That machine can't be overriden!") + to_chat(ranged_ability_user, "That machine can't be overridden!") return ranged_ability_user.playsound_local(ranged_ability_user, 'sound/misc/interference.ogg', 50, 0) attached_action.adjust_uses(-1) @@ -806,7 +806,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( desc = "[initial(desc)] There are [uses] reactivations remaining." -//Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them x-ray vision. +//Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them X-ray vision. /datum/AI_Module/large/upgrade_cameras module_name = "Upgrade Camera Network" mod_pick_name = "upgradecam" diff --git a/code/modules/antagonists/valentines/valentine.dm b/code/modules/antagonists/valentines/valentine.dm index 7e1effbaff..31e69b32c2 100644 --- a/code/modules/antagonists/valentines/valentine.dm +++ b/code/modules/antagonists/valentines/valentine.dm @@ -16,8 +16,17 @@ /datum/antagonist/valentine/on_gain() forge_objectives() + if(isliving(owner)) + var/mob/living/L = owner + L.apply_status_effect(STATUS_EFFECT_INLOVE, date) . = ..() +/datum/antagonist/valentine/on_removal() + . = ..() + if(isliving(owner)) + var/mob/living/L = owner + L.remove_status_effect(STATUS_EFFECT_INLOVE) + /datum/antagonist/valentine/greet() to_chat(owner, "You're on a date with [date.name]! Protect [date.p_them()] at all costs. This takes priority over all other loyalties.") diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 5afd1ca3c3..415d1318cb 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -109,6 +109,10 @@ move() eat() return + +/obj/singularity/wizard/mapped/admin_investigate_setup() + return + /////////////////////////////////////////Scrying/////////////////// /obj/item/scrying @@ -205,7 +209,7 @@ for(var/obj/item/I in H) H.dropItemToGround(I) - var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) + var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionnaire) H.equip_to_slot_or_del(new hat(H), SLOT_HEAD) H.equip_to_slot_or_del(new /obj/item/clothing/under/roman(H), SLOT_W_UNIFORM) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), SLOT_SHOES) diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index 9a5f41baee..50bc4f54a4 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -9,7 +9,7 @@ desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefact's power." w_class = WEIGHT_CLASS_TINY slot_flags = ITEM_SLOT_BELT - var/usability = 0 + var/usability = FALSE var/old_shard = FALSE var/spent = FALSE @@ -23,7 +23,7 @@ whatever spark it once held long extinguished." /obj/item/soulstone/anybody - usability = 1 + usability = TRUE /obj/item/soulstone/anybody/chaplain name = "mysterious old shard" @@ -63,8 +63,9 @@ if(!ishuman(M))//If target is not a human. return ..() if(iscultist(M)) - to_chat(user, "\"Come now, do not capture your bretheren's soul.\"") - return + if(iscultist(user)) + to_chat(user, "\"Come now, do not capture your bretheren's soul.\"") + return add_logs(user, M, "captured [M.name]'s soul", src) transfer_soul("VICTIM", M, user) @@ -82,7 +83,7 @@ /obj/item/soulstone/proc/release_shades(mob/user) for(var/mob/living/simple_animal/shade/A in src) A.status_flags &= ~GODMODE - A.canmove = 1 + A.canmove = TRUE A.forceMove(get_turf(user)) A.cancel_camera() icon_state = "soulstone" @@ -128,15 +129,15 @@ switch(choice) if("FORCE") if(!iscarbon(target)) //TODO: Add sacrifice stoning for non-organics, just because you have no body doesnt mean you dont have a soul - return 0 + return FALSE if(contents.len) - return 0 + return FALSE var/mob/living/carbon/T = target if(T.client != null) for(var/obj/item/W in T) T.dropItemToGround(W) init_shade(T, user) - return 1 + return TRUE else to_chat(user, "Capture failed!: The soul has already fled its mortal frame. You attempt to bring it back...") return getCultGhost(T,user) @@ -149,7 +150,7 @@ to_chat(user, "\"This soul is mine. SACRIFICE THEM!\"") else to_chat(user, "The soulstone seems to reject this soul.") - return 0 + return FALSE if(contents.len) to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") else @@ -172,7 +173,7 @@ else T.forceMove(src) //put shade in stone T.status_flags |= GODMODE - T.canmove = 0 + T.canmove = FALSE T.health = T.maxHealth icon_state = "soulstone2" name = "soulstone: Shade of [T.real_name]" @@ -239,7 +240,7 @@ T.dust_animation() var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src) S.status_flags |= GODMODE //So they won't die inside the stone somehow - S.canmove = 0//Can't move out of the soul stone + S.canmove = FALSE//Can't move out of the soul stone S.name = "Shade of [T.real_name]" S.real_name = "Shade of [T.real_name]" S.key = T.key @@ -272,15 +273,15 @@ if(consenting_candidates.len) chosen_ghost = pick(consenting_candidates) if(!T) - return 0 + return FALSE if(!chosen_ghost) to_chat(U, "There were no spirits willing to become a shade.") - return 0 + return FALSE if(contents.len) //If they used the soulstone on someone else in the meantime - return 0 + return FALSE T.ckey = chosen_ghost.ckey for(var/obj/item/W in T) T.dropItemToGround(W) init_shade(T, U) qdel(T) - return 1 + return TRUE diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 3f94c65437..afefaa68c1 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -318,7 +318,7 @@ /datum/spellbook_entry/item/scryingorb name = "Scrying Orb" - desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you x-ray vision." + desc = "An incandescent orb of crackling energy, using it will allow you to ghost while alive, allowing you to spy upon the station with ease. In addition, buying it will permanently grant you X-ray vision." item_path = /obj/item/scrying category = "Defensive" @@ -409,7 +409,7 @@ /datum/spellbook_entry/item/battlemage name = "Battlemage Armour" - desc = "An ensorcelled suit of armour, protected by a powerful shield. The shield can completly negate sixteen attacks before being permanently depleted." + desc = "An ensorceled suit of armour, protected by a powerful shield. The shield can completely negate sixteen attacks before being permanently depleted." item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard limit = 1 category = "Defensive" @@ -452,7 +452,7 @@ /datum/spellbook_entry/summon/ghosts name = "Summon Ghosts" - desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilties to frustrate you." + desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilities to frustrate you." cost = 0 /datum/spellbook_entry/summon/ghosts/IsAvailible() @@ -589,22 +589,22 @@ switch(category) if("Offensive") dat += "Spells and items geared towards debilitating and destroying.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased.
" dat += "For spells: the number after the spell name is the cooldown time.
" dat += "You can reduce this number by spending more points on the spell.
" if("Defensive") - dat += "Spells and items geared towards improving your survivabilty or reducing foes' ability to attack.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "Spells and items geared towards improving your survivability or reducing foes' ability to attack.

" + dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased.
" dat += "For spells: the number after the spell name is the cooldown time.
" dat += "You can reduce this number by spending more points on the spell.
" if("Mobility") dat += "Spells and items geared towards improving your ability to move. It is a good idea to take at least one.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased.
" dat += "For spells: the number after the spell name is the cooldown time.
" dat += "You can reduce this number by spending more points on the spell.
" if("Assistance") - dat += "Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilties.

" - dat += "Items are not bound to you and can be stolen. Additionaly they cannot typically be returned once purchased.
" + dat += "Spells and items geared towards bringing in outside forces to aid you or improving upon your other items and abilities.

" + dat += "Items are not bound to you and can be stolen. Additionally they cannot typically be returned once purchased.
" dat += "For spells: the number after the spell name is the cooldown time.
" dat += "You can reduce this number by spending more points on the spell.
" if("Challenges") diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index ececaf683f..b5a7c5d3c5 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -161,7 +161,7 @@ AOE_flash() burn_out() -/obj/item/assembly/flash/activate()//AOE flash on signal recieved +/obj/item/assembly/flash/activate()//AOE flash on signal received if(!..()) return AOE_flash() @@ -210,7 +210,7 @@ /obj/item/assembly/flash/armimplant name = "photon projector" - desc = "A high-powered photon projector implant normally used for lighting purposes, but also doubles as a flashbulb weapon. Self-repair protocals fix the flashbulb if it ever burns out." + desc = "A high-powered photon projector implant normally used for lighting purposes, but also doubles as a flashbulb weapon. Self-repair protocols fix the flashbulb if it ever burns out." var/flashcd = 20 var/overheat = 0 var/obj/item/organ/cyberimp/arm/flash/I = null diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 2aae7db5e2..1f62bfaaef 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -26,7 +26,7 @@ return FALSE//Cooldown check var/turf/location = get_turf(loc) if(location) - location.hotspot_expose(1000,1000) + location.hotspot_expose(700,10) sparks.start() return TRUE diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index fe6e94605b..94359f0a10 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -171,6 +171,10 @@ return if(offender == src || istype(offender,/obj/effect/beam/i_beam)) return + if (offender && isitem(offender)) + var/obj/item/I = offender + if (I.item_flags & ABSTRACT) + return return refreshBeam() /obj/item/assembly/infra/ui_interact(mob/user)//TODO: change this this to the wire control panel @@ -219,10 +223,13 @@ var/obj/item/assembly/infra/master anchored = TRUE density = FALSE - flags_1 = ABSTRACT_1 pass_flags = PASSTABLE|PASSGLASS|PASSGRILLE|LETPASSTHROW /obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj) - if(istype(AM, /obj/effect/beam) || (AM.flags_1 & ABSTRACT_1)) + if(istype(AM, /obj/effect/beam)) return + if (isitem(AM)) + var/obj/item/I = AM + if (I.item_flags & ABSTRACT) + return master.trigger_beam(AM, get_turf(src)) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 0a1394bf04..8959029b9b 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -24,7 +24,7 @@ return MANUAL_SUICIDE /obj/item/assembly/signaler/proc/manual_suicide(mob/living/carbon/user) - user.visible_message("[user]'s \the [src] recieves a signal, killing [user.p_them()] instantly!") + user.visible_message("[user]'s \the [src] receives a signal, killing [user.p_them()] instantly!") user.adjustOxyLoss(200)//it sends an electrical pulse to their heart, killing them. or something. user.death(0) @@ -158,21 +158,21 @@ Code: // Embedded signaller used in grenade construction. // It's necessary because the signaler doens't have an off state. // Generated during grenade construction. -Sayu -/obj/item/assembly/signaler/reciever +/obj/item/assembly/signaler/receiver var/on = FALSE -/obj/item/assembly/signaler/reciever/proc/toggle_safety() +/obj/item/assembly/signaler/receiver/proc/toggle_safety() on = !on -/obj/item/assembly/signaler/reciever/activate() +/obj/item/assembly/signaler/receiver/activate() toggle_safety() return TRUE -/obj/item/assembly/signaler/reciever/examine(mob/user) +/obj/item/assembly/signaler/receiver/examine(mob/user) ..() to_chat(user, "The radio receiver is [on?"on":"off"].") -/obj/item/assembly/signaler/reciever/receive_signal(datum/signal/signal) +/obj/item/assembly/signaler/receiver/receive_signal(datum/signal/signal) if(!on) return return ..(signal) diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index a3c9c68d55..ede69a6b22 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -42,6 +42,11 @@ active_hotspot.just_spawned = (current_cycle < SSair.times_fired) //remove just_spawned protection if no longer processing this cell SSair.add_to_active(src, 0) + else + var/datum/gas_mixture/heating = air_contents.remove_ratio(exposed_volume/air_contents.volume) + heating.temperature = exposed_temperature + heating.react() + assume_air(heating) return igniting //This is the icon for fire on turfs, also helps for nurturing small fires until they are full tile @@ -231,7 +236,7 @@ else chance_of_deletion = 100 if(prob(chance_of_deletion)) - T.ScrapeAway() + T.Melt() else T.to_be_destroyed = FALSE T.max_fire_temperature_sustained = 0 @@ -256,4 +261,4 @@ . = ..() if(!isliving(loc)) return INITIALIZE_HINT_QDEL -#undef INSUFFICIENT \ No newline at end of file +#undef INSUFFICIENT diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index db489d04fe..104879b168 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -100,28 +100,38 @@ if (atmos_overlay_types) for(var/overlay in atmos_overlay_types-new_overlay_types) //doesn't remove overlays that would only be added - vars["vis_contents"] -= overlay + vis_contents -= overlay - if (new_overlay_types.len) + if (length(new_overlay_types)) if (atmos_overlay_types) - vars["vis_contents"] += new_overlay_types - atmos_overlay_types //don't add overlays that already exist + vis_contents += new_overlay_types - atmos_overlay_types //don't add overlays that already exist else - vars["vis_contents"] += new_overlay_types + vis_contents += new_overlay_types UNSETEMPTY(new_overlay_types) src.atmos_overlay_types = new_overlay_types /turf/open/proc/tile_graphic() - . = new /list + var/static/list/nonoverlaying_gases = typecache_of_gases_with_no_overlays() if(air) + . = new /list var/list/gases = air.gases for(var/id in gases) + if (nonoverlaying_gases[id]) + continue var/gas = gases[id] var/gas_meta = gas[GAS_META] var/gas_overlay = gas_meta[META_GAS_OVERLAY] if(gas_overlay && gas[MOLES] > gas_meta[META_GAS_MOLES_VISIBLE]) . += gas_overlay +/proc/typecache_of_gases_with_no_overlays() + . = list() + for (var/gastype in subtypesof(/datum/gas)) + var/datum/gas/gasvar = gastype + if (!initial(gasvar.gas_overlay)) + .[gastype] = TRUE + /////////////////////////////SIMULATION/////////////////////////////////// #define LAST_SHARE_CHECK \ diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index 6e78256c87..f2bb51159c 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -285,8 +285,6 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) return 1 /datum/gas_mixture/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4) - if(!sharer) - return 0 var/list/cached_gases = gases var/list/sharer_gases = sharer.gases @@ -322,7 +320,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) if(delta > 0) heat_capacity_self_to_sharer += gas_heat_capacity else - heat_capacity_sharer_to_self -= gas_heat_capacity //subtract here instead of adding the absolute value because we know that delta is negative. saves a proc call. + heat_capacity_sharer_to_self -= gas_heat_capacity //subtract here instead of adding the absolute value because we know that delta is negative. gas[MOLES] -= delta sharergas[MOLES] += delta @@ -348,8 +346,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.1) // <10% change in sharer heat capacity temperature_share(sharer, OPEN_HEAT_TRANSFER_COEFFICIENT) - var/list/unique_gases = cached_gases ^ sharer_gases - if(unique_gases.len) //if all gases were present in both mixtures, we know that no gases are 0 + if(length(cached_gases ^ sharer_gases)) //if all gases were present in both mixtures, we know that no gases are 0 garbage_collect(cached_gases - sharer_gases) //any gases the sharer had, we are guaranteed to have. gases that it didn't have we are not. sharer.garbage_collect(sharer_gases - cached_gases) //the reverse is equally true sharer.after_share(src, atmos_adjacent_turfs) @@ -358,8 +355,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) TOTAL_MOLES(cached_gases,our_moles) var/their_moles TOTAL_MOLES(sharer_gases,their_moles) - var/delta_pressure = temperature_archived*(our_moles + moved_moles) - sharer.temperature_archived*(their_moles - moved_moles) - return delta_pressure * R_IDEAL_GAS_EQUATION / volume + return (temperature_archived*(our_moles + moved_moles) - sharer.temperature_archived*(their_moles - moved_moles)) * R_IDEAL_GAS_EQUATION / volume /datum/gas_mixture/after_share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4) return diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 5bd8c548f7..67836746fa 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -88,7 +88,7 @@ /datum/gas_reaction/nobliumsupression priority = INFINITY - name = "Hyper-Noblium Reaction Supression" + name = "Hyper-Noblium Reaction Suppression" id = "nobstop" /datum/gas_reaction/nobliumsupression/init_reqs() @@ -402,13 +402,13 @@ var/pressure = air.return_pressure() var/old_heat_capacity = air.heat_capacity() - var/reaction_efficency = min(1/((pressure/(0.1*ONE_ATMOSPHERE))*(max(cached_gases[/datum/gas/plasma][MOLES]/cached_gases[/datum/gas/tritium][MOLES],1))),cached_gases[/datum/gas/tritium][MOLES],cached_gases[/datum/gas/plasma][MOLES]/2) + var/reaction_efficency = min(1/((pressure/(0.1*ONE_ATMOSPHERE))*(max(cached_gases[/datum/gas/plasma][MOLES]/cached_gases[/datum/gas/nitrous_oxide][MOLES],1))),cached_gases[/datum/gas/nitrous_oxide][MOLES],cached_gases[/datum/gas/plasma][MOLES]/2) var/energy_released = 2*reaction_efficency*FIRE_CARBON_ENERGY_RELEASED - if ((cached_gases[/datum/gas/tritium][MOLES] - reaction_efficency < 0 )|| (cached_gases[/datum/gas/plasma][MOLES] - (2*reaction_efficency) < 0)) //Shouldn't produce gas from nothing. + if ((cached_gases[/datum/gas/nitrous_oxide][MOLES] - reaction_efficency < 0 )|| (cached_gases[/datum/gas/plasma][MOLES] - (2*reaction_efficency) < 0)) //Shouldn't produce gas from nothing. return NO_REACTION ASSERT_GAS(/datum/gas/bz,air) cached_gases[/datum/gas/bz][MOLES] += reaction_efficency - cached_gases[/datum/gas/tritium][MOLES] -= reaction_efficency + cached_gases[/datum/gas/nitrous_oxide][MOLES] -= reaction_efficency cached_gases[/datum/gas/plasma][MOLES] -= 2*reaction_efficency @@ -422,6 +422,7 @@ priority = 5 name = "Stimulum formation" id = "stimformation" + /datum/gas_reaction/stimformation/init_reqs() min_requirements = list( /datum/gas/tritium = 30, diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index a737b3c688..879668e4d7 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -227,7 +227,7 @@ Acts like a normal vent, but has an input AND output. pressure_checks &= ~1 pump_direction = 0 - if("stabalize" in signal.data) + if("stabilize" in signal.data) pressure_checks |= 1 pump_direction = 1 diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 4fb1de3527..e7df188f70 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -27,7 +27,7 @@ Thus, the two variables affect pump operation are set in New(): construction_type = /obj/item/pipe/directional pipe_state = "pump" - + /obj/machinery/atmospherics/components/binary/pump/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -41,7 +41,7 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/components/binary/pump/on on = TRUE icon_state = "pump_on_map" - + /obj/machinery/atmospherics/components/binary/pump/on/layer1 piping_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -51,7 +51,7 @@ Thus, the two variables affect pump operation are set in New(): piping_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X pixel_y = PIPING_LAYER_P_Y - + /obj/machinery/atmospherics/components/binary/pump/Destroy() SSradio.remove_object(src,frequency) if(radio_connection) @@ -132,8 +132,8 @@ Thus, the two variables affect pump operation are set in New(): switch(action) if("power") on = !on - investigate_log("Pump, [src.name], was turned [on ? "on" : "off"] by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS) message_admins("Pump, [src.name], turned [on ? "on" : "off"] by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]") + investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS) . = TRUE if("pressure") var/pressure = params["pressure"] diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index fb6539828e..f22ac62106 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -13,7 +13,6 @@ It's like a regular ol' straight pipe, but you can turn it on and off. var/frequency = 0 var/id = null - var/open = FALSE var/valve_type = "m" //lets us have a nice, clean, OOP update_icon_nopipes() construction_type = /obj/item/pipe/binary diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 861821349c..ced4855b1a 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -341,7 +341,7 @@ pressure_checks &= ~EXT_BOUND pump_direction = SIPHONING - if("stabalize" in signal.data) + if("stabilize" in signal.data) pressure_checks |= EXT_BOUND pump_direction = RELEASING @@ -399,7 +399,7 @@ user.visible_message("[user] welds the vent shut.", "You weld the vent shut.", "You hear welding.") welded = TRUE else - user.visible_message("[user] unwelds the vent.", "You unweld the vent.", "You hear welding.") + user.visible_message("[user] unwelded the vent.", "You unweld the vent.", "You hear welding.") welded = FALSE update_icon() pipe_vision_img = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index bc034ec506..cfaef38f6c 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -60,7 +60,7 @@ warning("build_pipeline(): [item.type] added to a pipenet while still having one. (pipes leading to the same spot stacking in one turf) Nearby: ([item.x], [item.y], [item.z])") pipenetwarnings -= 1 if(pipenetwarnings == 0) - warning("build_pipeline(): further messages about pipenets will be supressed") + warning("build_pipeline(): further messages about pipenets will be suppressed") members += item possible_expansions += item diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index c65fc0960e..56f5d63b0c 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -494,14 +494,14 @@ W.registered_name = H.real_name W.update_label(W.registered_name, W.assignment) - // The shielded hardsuit is already NODROP_1 + // The shielded hardsuit is already NODROP no_drops += H.get_item_by_slot(SLOT_GLOVES) no_drops += H.get_item_by_slot(SLOT_SHOES) no_drops += H.get_item_by_slot(SLOT_W_UNIFORM) no_drops += H.get_item_by_slot(SLOT_EARS) for(var/i in no_drops) var/obj/item/I = i - I.flags_1 |= NODROP_1 + I.item_flags |= NODROP /datum/outfit/ctf/instagib r_hand = /obj/item/gun/energy/laser/instakill diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 92704833ef..0ee182d9f8 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -37,6 +37,8 @@ if(jobban_isbanned(user, banType)) to_chat(user, "You are jobanned!") return + if(QDELETED(src) || QDELETED(user)) + return var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No") if(ghost_role == "No" || !loc) return diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index b233235d81..57d8420fa8 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -58,7 +58,7 @@ /obj/item/paper/fluff/awaymissions/academy/grade/failure name = "Pyromancy Evaluation" - info = "Current Grade: F. Educator's Notes: No improvement shown despite multiple private lessons. Suggest additional tutilage." + info = "Current Grade: F. Educator's Notes: No improvement shown despite multiple private lessons. Suggest additional tutelage." /obj/singularity/academy diff --git a/code/modules/awaymissions/mission_code/caves.dm b/code/modules/awaymissions/mission_code/caves.dm index fd2f8f18af..fd2735678d 100644 --- a/code/modules/awaymissions/mission_code/caves.dm +++ b/code/modules/awaymissions/mission_code/caves.dm @@ -31,14 +31,14 @@ //caves papers /obj/item/paper/crumpled/awaymissions/caves/unsafe_area - info = "
WARNING


Majority of this area is consitered 'unsafe' past this point. Theres an outpost directly south of here where you can get your bearing and travel further down if needed. Traveling in groups is HIGHLY advised, the shit out there can be extremely deadly if you're alone.
" + info = "
WARNING


Majority of this area is considered 'unsafe' past this point. Theres an outpost directly south of here where you can get your bearing and travel further down if needed. Traveling in groups is HIGHLY advised, the shit out there can be extremely deadly if you're alone.
" /obj/item/paper/fluff/awaymissions/caves/omega name = "Subject Omega Notes" info = "
Testing Notes


Subject appears unresponsive to most interactions, refusing to move away from the corners or face any scientists. Subject appears to move between the two back corners every observation. A strange humming can be heard from inside the cell, appears to be originating from the subject itself, further testing is necessary to confirm or deny this.
" /obj/item/paper/fluff/awaymissions/caves/magma - info = "
Mining is hell down here, you can feel the heat of the magma no matter how thick the suit is. Conditions are barely managble as is, restless nights and horrid work conditions. The ore maybe rich down here, but we've already lost a few men to the faults shifting, god knows how much longer till it all just collapses down and consumes everyone with it.
" + info = "
Mining is hell down here, you can feel the heat of the magma no matter how thick the suit is. Conditions are barely manageable as is, restless nights and horrid work conditions. The ore maybe rich down here, but we've already lost a few men to the faults shifting, god knows how much longer till it all just collapses down and consumes everyone with it.
" /obj/item/paper/fluff/awaymissions/caves/work_notice name = "work notice" @@ -48,7 +48,7 @@ name = "shipment notice" info = "
We were suppose to get a shipment of these special laser rifles and a couple 'nades to help combat the wildlife down here, but its been weeks since we last heard from the caravan carrying the shit down here. At this point we can only assume they fell victim to one of the monster nests or the dumbasses managed to trip into the lava. So much for that shipment, I guess.
" -/obj/item/paper/fluff/awaymissions/caves/saftey_notice +/obj/item/paper/fluff/awaymissions/caves/safety_notice name = "safety notice" info = "
Some of the miners have gone to laying some mine traps among the lower levels of the mine to keep the monsters at bay. This probably isn't the smartest idea in a cavern like this but the boys seem to get a chuckle out of every distant blast they hear go off, so I guess it works
" diff --git a/code/modules/awaymissions/mission_code/moonoutpost19.dm b/code/modules/awaymissions/mission_code/moonoutpost19.dm index 92d25bfee3..c0af9cd08c 100644 --- a/code/modules/awaymissions/mission_code/moonoutpost19.dm +++ b/code/modules/awaymissions/mission_code/moonoutpost19.dm @@ -44,7 +44,7 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_social name = "Larva Xenomorph Social Interactions & Capturing Procedure" - info = "Researcher: Dr. Sakuma Sano
Date: 04/06/2554

Report:
As expected, all that is left of the monkeys we sent in earlier is a group of xenomorph larvae. It is quite clear that the facehuggers are not selective in their hosts, and so far the gestation process has been shown to have a 100% success rate.

The larvae themselves have been behaving very differently from the lone larva we first observed, and despite shying away from humans they are clearly comfortable with others of their kind. Our previous suspicions on larvae have been confirmed with their demonstration of playfulness: they are not nearly as aggressive or violent when young, before molting to adulthood.

The majority of the play we observed involved a sort of hide-and-seek, and occasionally wrestling by tangling themselves and struggling out of it. While normally we would write these off as instinctual play for honing their skills when they molt, their growth period is so incredibly fast and they are still such adept killers that it would serve no practical purpose. The only explanation for this is perhaps to create bonds and friendships with each other, if that is even possible for such an incredibly hostile race. It may be that they are much more reasonable with each other than other life forms.

It had become clear that now was the best time to extract a xenomorph for dissecting, as these were all still larvae and the queen was still attached to its ovipositor and would be immobile. With the approval of the research director, we sent in our medical robot that had been dubbed 'Head Surgeon' into the containment pen, dropping the shields for only a fraction of a second to allow it entry. The larvae were cautious, but the curiosity of one had him within grabbing range of our robot. It was brought out and quickly euthanized through lethal injection, courtesy of our mechanical doctor." + info = "Researcher: Dr. Sakuma Sano
Date: 04/06/2554

Report:
As expected, all that is left of the monkeys we sent in earlier is a group of xenomorph larvae. It is quite clear that the facehuggers are not selective in their hosts, and so far the gestation process has been shown to have a 100% success rate.

The larvae themselves have been behaving very differently from the lone larva we first observed, and despite shying away from humans they are clearly comfortable with others of their kind. Our previous suspicions on larvae have been confirmed with their demonstration of playfulness: they are not nearly as aggressive or violent when young, before molting to adulthood.

The majority of the play we observed involved a sort of hide-and-seek, and occasionally wrestling by tangling themselves and struggling out of it. While normally we would write these off as instinctual play for honing their skills when they molt, their growth period is so incredibly fast and they are still such adept killers that it would serve no practical purpose. The only explanation for this is perhaps to create bonds and friendships with each other, if that is even possible for such an incredibly hostile race. It may be that they are much more reasonable with each other than other life forms.

It had become clear that now was the best time to extract a xenomorph for dissecting, as these were all still larvae and the queen was still attached to its ovipositor and would be immobile. With the approval of the research director, we sent in our medical robot that had been dubbed 'Head Surgeon' into the containment pen, dropping the shields for only a fraction of a second to allow it entry. The larvae were cautious, but the curiosity of one had him within grabbing range of our robot. It was brought out and quickly euthanized through lethal injection, courtesy of our mechanical doctor." /obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_queen name = "Queen Xenomorph Physiology & Behavior Observation" @@ -65,7 +65,7 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_hivemind name = "The Hivemind Hypothesis" info = "Researcher: Dr. Mark Douglas
Date: 17/06/2554

Report:
Earlier today we have observed a new phenomenon with our subjects. While feeding them our last monkey subject and throwing out the box, the aliens merely looked at us instead of infecting the monkey right away. They looked to be collectively distressed as they would no longer be given hosts, where instead we would move to the next phase of the experiment. When I glanced at the gas tanks and piping leading to their cell, I looked back to see all of them were up against the glass, even the queen! It was as if they all understood what was going to happen, even though we knew only the queen had the cognitive capability to do so.

The only explanation for this is a form of communication between the aliens, but we have seen no such action take place anywhere in the cell until now. We also know that regular drone and hunter xenomorphs have no personality or instinct to survive by themselves. Perhaps the queen has a direct link to them? A form of a commander or overseer that controls their every move? A hivemind?" - + /obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_behavior name = "A Preliminary Study of Alien Behavior" info = "Researcher: Dr. Sakuma Sano
Date: 08/06/2554

Report:
The xenomorphs we have come to study here are a remarkable species. They are almost universally aggressive across all castes, showing no remorse or guilt or pause before or after acts of violence. They appear to be a species entirely designed to kill. Oddly enough, even their method of reproduction is a brutal two-for-one method of birthing a new xenomorph and killing its host.

The lone xenomorph we studied only five days ago showed little sign of intelligence. Only a simple drone that flung itself at the safety glass and shields repeatedly and thankfully without success. Once the drone molted into a queen, it became much more calm and calculating, merely looking at us and waiting while building its nest. As the hive grew in size and in numbers, so too did the intelligence of the common hunter and drone. We are still researching how they can communicate with one another and the relationship between the different castes and the queen. We will continue to update our research as we learn more about the species." @@ -80,11 +80,11 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/research/evacuation name = "Evacuation Procedure" - info = "

In The Event of Xenobiology Breach: Evacuate staff, Lock down Xenobiology, Notify on-site superiors and/or Central Command immediatly.



Current Xenobiology Containment Level:Secure RUN

" + info = "

In The Event of Xenobiology Breach: Evacuate staff, Lock down Xenobiology, Notify on-site superiors and/or Central Command immediately.



Current Xenobiology Containment Level:Secure RUN

" /obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal name = "Personal Log" - info = "Log 1:
We got our promised supply drop today. We were only meant to get it, what, a week ago? This bloody gateway keeps desyncing itself, and that means subsisting off recycled water and carb packs. No clue where the damn thing connects to on its off days, and HQ say we are 'not to touch it if it isn't linking to command.' We dumped off the assload of crates Jim filled, got our boxes of oxygen, food and drink, and closed the portal.

Log 2:
Damn thing is acting up again. Three days no contact this time. I thought I heard clanking noises from it yesterday. Jim is going on about the NT base or some shit. We've been over this before - They don't know we're here, that engineer was too drunk to recognise his suit, especially since I had it painted orange. He's starting to get annoying. We're safe.

Log 3:
Gateway synced itself up automatically today. I opened it for an instant to spy through it, got a glimpse of the inside of a transport container. Either HQ's redecorating or something, or there's more than two of these things." + info = "Log 1:
We got our promised supply drop today. We were only meant to get it, what, a week ago? This bloody gateway keeps desyncing itself, and that means subsisting off recycled water and carb packs. No clue where the damn thing connects to on its off days, and HQ say we are 'not to touch it if it isn't linking to command.' We dumped off the assload of crates Jim filled, got our boxes of oxygen, food and drink, and closed the portal.

Log 2:
Damn thing is acting up again. Three days no contact this time. I thought I heard clanking noises from it yesterday. Jim is going on about the NT base or some shit. We've been over this before - They don't know we're here, that engineer was too drunk to recognize his suit, especially since I had it painted orange. He's starting to get annoying. We're safe.

Log 3:
Gateway synced itself up automatically today. I opened it for an instant to spy through it, got a glimpse of the inside of a transport container. Either HQ's redecorating or something, or there's more than two of these things." /obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal_2 name = "Personal Log" @@ -100,7 +100,7 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/log/ivan name = "Personal Log - Ivan Volodin" - info = "Ivan Volodin Stories:

Entry Won - 28/05/2554:
Hello. I am Crazy Ivan. Boss say I must write. I do good job fixing outpost. Is very good job. Much better than mines. Many nice people. I cause no trouble.

Entry Too - 05/06/2554:
I am finding problem with Booze-O-Mat. Is not problem. I solve very easy. Use yellow tool to make purple light go off. I am good engineer! Bartender will be very happy.

Entry Tree - 08/06/2554:
Bartender is not happy. Security man is not happy. Cannot feel legs, is very cold in freezer. Is not good. Table is jammed into door, have no tools. Is very not good. But, on bright side, found meat! Shall chew to keep spirits up.

Entry Fore - 12/06/2554:
Big nasty purple bug looked at me today. Make nervous. Blue wall wire can be broken, then bad thing happens. Very very bad thing. Man in orange spacesuit wave at me today too. He seem nice. Wonder who was?

Entry Fiv - 15/06/2554:
I eat cornflakes today. Is good day. Sun shine for a while. Was nice. I also take ride on disposals chute. Was fun, but tiny. Get clog out of pipes, was vodka bottle. Is empty. This make many sads.

Entry Sex: 19/06/2554:
Purple bugs jumpy today. When waved, get hiss. Maybe very bad. Maybe just ill. Do not know. Is science problem, is not engineer problem. I eat sandwich. Is glorious job. Wish to never end." + info = "Ivan Volodin Stories:

Entry Won - 28/05/2554:
Hello. I am Crazy Ivan. Boss say I must write. I do good job fixing outpost. Is very good job. Much better than mines. Many nice people. I cause no trouble.

Entry Too - 05/06/2554:
I am finding problem with Booze-O-Mat. Is not problem. I solve very easy. Use yellow tool to make purple light go off. I am good engineer! Bartender will be very happy.

Entry Tree - 08/06/2554:
Bartender is not happy. Security man is not happy. Cannot feel legs, is very cold in freezer. Is not good. Table is jammed into door, have no tools. Is very not good. But, on bright side, found meat! Shall chew to keep spirits up.

Entry Fore - 12/06/2554:
Big nasty purple bug looked at me today. Make nervous. Blue wall wire can be broken, then bad thing happens. Very very bad thing. Man in orange spacesuit wave at me today too. He seem nice. Wonder who was?

Entry Fiv - 15/06/2554:
I eat cornflakes today. Is good day. Sun shine for a while. Was nice. I also take ride on disposals chute. Was fun, but tiny. Get clog out of pipes, was vodka bottle. Is empty. This make many sads.

Entry Sex: 19/06/2554:
Purple bugs jumpy today. When waved, get hiss. Maybe very bad. Maybe just ill. Do not know. Is science problem, is not engineer problem. I eat sandwich. Is glorious job. Wish to never end." /obj/item/paper/fluff/awaymissions/moonoutpost19/log/gerald name = "Personal Log - Gerald Rosswell" @@ -117,5 +117,5 @@ /obj/item/paper/fluff/awaymissions/moonoutpost19/goodbye_note name = "Note" info = "Bugs break out. I run to here and lock door. I hear door next to me break open and screams. All nice people here dead now. I no want to be eaten, and bottle always said to be coward way out, but person who say that is stupid. Mira, there is no escape for me, tell Alexis and Elena that father will never come home, and that I love you all." - + diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index f64b1fe838..b3018d9d1c 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -89,7 +89,7 @@ icon_state = "awaycontent22" /area/awaymission/snowdin/post/broken_shuttle - name = "Snowdin Outpost - Broken Transist Shuttle" + name = "Snowdin Outpost - Broken Transit Shuttle" icon_state = "awaycontent20" requires_power = FALSE @@ -223,8 +223,9 @@ var/list/plasma_parts = list()//a list of the organic parts to be turned into plasma limbs var/list/robo_parts = list()//keep a reference of robotic parts so we know if we can turn them into a plasmaman var/mob/living/carbon/human/PP = L - if(istype(PP.dna.species, /datum/species/plasmaman || /datum/species/android || /datum/species/synth)) //ignore plasmamen/robotic species - return + var/S = PP.dna.species + if(istype(S, /datum/species/plasmaman) || istype(S, /datum/species/android) || istype(S, /datum/species/synth)) //ignore plasmamen/robotic species + continue for(var/BP in PP.bodyparts) var/obj/item/bodypart/NN = BP @@ -263,7 +264,7 @@ /obj/item/paper/crumpled/ruins/snowdin/foreshadowing name = "scribbled note" - info = {"Somnethings gone VERY wrong here. Jouslen has been mumbling about some weird shit in his cabin during the night and he seems always tired when we're working. I tried to confront him about it and he blew up on me, + info = {"Something's gone VERY wrong here. Jouslen has been mumbling about some weird shit in his cabin during the night and he seems always tired when we're working. I tried to confront him about it and he blew up on me, telling me to mind my own business. I reported him to the officer, said he'd look into it. We only got another 2 months here before we're pulled for another assignment, so this shit can't go any quicker.."} /obj/item/paper/crumpled/ruins/snowdin/misc1 @@ -283,58 +284,58 @@ /obj/item/paper/fluff/awaymissions/snowdin/research_feed name = "Research Feed" - info = {"A page full of graphs and other detailed infomation on the seismic activity of the surrounding area."} + info = {"A page full of graphs and other detailed information on the seismic activity of the surrounding area."} //profile of each of the old crewmembers for the outpost /obj/item/paper/fluff/awaymissions/snowdin/profile/overseer name = "Personnel Record AOP#01" - info = {"
Personnel Log


Name:Caleb Reed
Age:38
Gender:Male
On-Site Profession:Outpost Overseer

Infomation

Caleb Reed lead several expeditions + info = {"
Personnel Log


Name:Caleb Reed
Age:38
Gender:Male
On-Site Profession:Outpost Overseer

Information

Caleb Reed lead several expeditions among uncharted planets in search of plasma for Nanotrasen, scouring from hot savanas to freezing arctics. Track record is fairly clean with only incidient including the loss of two researchers during the expedition of _______, where mis-used of explosive ordinance for tunneling causes a cave-in."} /obj/item/paper/fluff/awaymissions/snowdin/profile/sec1 name = "Personnel Record AOP#02" - info = {"
Personnel Log


Name:James Reed
Age:43
Gender:Male
On-Site Profession:Outpost Security

Infomation

James Reed has been a part + info = {"
Personnel Log


Name:James Reed
Age:43
Gender:Male
On-Site Profession:Outpost Security

Information

James Reed has been a part of Nanotrasen's security force for over 20 years, first joining in 22XX. A clean record and unwavering loyalty to the corperation through numerous deployments to various sites makes him a valuable asset to Natotrasen when it comes to keeping the peace while prioritizing Nanotrasen privacy matters. "} /obj/item/paper/fluff/awaymissions/snowdin/profile/hydro1 name = "Personnel Record AOP#03" - info = {"
Personnel Log


Name:Katherine Esterdeen
Age:27
Gender:Female
On-Site Profession:Outpost Botanist

Infomation

Katherine Esterdeen is a recent + info = {"
Personnel Log


Name:Katherine Esterdeen
Age:27
Gender:Female
On-Site Profession:Outpost Botanist

Information

Katherine Esterdeen is a recent graduate with a major in Botany and a PH.D in Ecology. Having a clean record and eager to work, Esterdeen seems to be the right fit for maintaining plants in the middle of nowhere."} /obj/item/paper/fluff/awaymissions/snowdin/profile/engi1 name = "Personnel Record AOP#04" - info = {"
Personnel Log


Name:Rachel Migro
Age:35
Gender:Female
On-Site Profession:Outpost Engineer

Infomation

Recently certified to be a full-time Journeyman, Rachel has + info = {"
Personnel Log


Name:Rachel Migro
Age:35
Gender:Female
On-Site Profession:Outpost Engineer

Information

Recently certified to be a full-time Journeyman, Rachel has been assigned various construction projects in the past 5 years. Competent and has no past infractions, should be of little concern."} /obj/item/paper/fluff/awaymissions/snowdin/profile/research1 name = "Personnel Record AOP#05" - info = {"
Personnel Log


Name:Jacob Ullman
Age:27
Gender:Male
On-Site Profession:Outpost Researcher

Infomation

"} + info = {"
Personnel Log


Name:Jacob Ullman
Age:27
Gender:Male
On-Site Profession:Outpost Researcher

Information

"} /obj/item/paper/fluff/awaymissions/snowdin/profile/research2 name = "Personnel Record AOP#06" - info = {"
Personnel Log


Name:Elizabeth Queef
Age:28
Gender:Female
On-Site Profession:Outpost Researcher

Infomation

"} + info = {"
Personnel Log


Name:Elizabeth Queef
Age:28
Gender:Female
On-Site Profession:Outpost Researcher

Information

"} /obj/item/paper/fluff/awaymissions/snowdin/profile/research3 name = "Personnel Record AOP#07" - info = {"
Personnel Log


Name:Jouslen McGee
Age:38
Gender:Male
On-Site Profession:Outpost Researcher

Infomation

"} + info = {"
Personnel Log


Name:Jouslen McGee
Age:38
Gender:Male
On-Site Profession:Outpost Researcher

Information

"} /obj/item/paper/fluff/awaymissions/snowdin/secnotice name = "Security Notice" - info = {"YOu have been assigned to this Arctic Post with intention of protecting Nanotrasen assets and ensuring vital infomation is kept secure while the stationed crew obeys protocal. The picked + info = {"YOu have been assigned to this Arctic Post with intention of protecting Nanotrasen assets and ensuring vital information is kept secure while the stationed crew obeys protocol. The picked staff for this post have been pre-screened with no prior incidients on record, but incase of an issue you have been given a single holding cell and instructions to contact Central to terminate the offending crewmember."} /obj/item/paper/fluff/awaymissions/snowdin/mining name = "Assignment Notice" - info = {"This cold-ass planet is the new-age equivilant of striking gold. Huge deposits of plasma and literal streams of plasma run through the caverns under all this ice and we're here to mine it all.\ + info = {"This cold-ass planet is the new-age equivalent of striking gold. Huge deposits of plasma and literal streams of plasma run through the caverns under all this ice and we're here to mine it all.\ Nanotrasen pays by the pound, so get minin' boys!"} /obj/item/paper/crumpled/ruins/snowdin/lootstructures name = "scribbled note" - info = {"There's some ruins scattered along the cavern, their walls seem to be made of some sort of super-condensned mixture of ice and snow. We've already barricaded up the ones we've found so far, + info = {"There's some ruins scattered along the cavern, their walls seem to be made of some sort of super-condensed mixture of ice and snow. We've already barricaded up the ones we've found so far, since we keep hearing some strange noises from inside. Besides, what sort of fool would wrecklessly run into ancient ruins full of monsters for some old gear, anyway?"} /obj/item/paper/crumpled/ruins/snowdin/shovel @@ -388,7 +389,7 @@ DELAY 30 SAY Nanotrasen is pleased to have you working in one of the many top-of-the-line research posts within the $%@!! sector! DELAY 30 - SAY Further job assignment infomation can be found at your local security post! Have a secure day! + SAY Further job assignment information can be found at your local security post! Have a secure day! DELAY 20;"} /obj/item/disk/holodisk/snowdin/overrun @@ -529,7 +530,7 @@ /obj/item/gun/ballistic/automatic/c20r/unrestricted = 16, /obj/item/gun/magic/wand/resurrection/inert = 15, /obj/item/gun/magic/wand/resurrection = 10, - /obj/item/radio/uplink/old = 2, + /obj/item/uplink/old = 2, /obj/item/book/granter/spell/charge = 12, /obj/item/grenade/clusterbuster/spawner_manhacks = 15, /obj/item/book/granter/spell/fireball = 10, @@ -558,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." + desc = "A nondescript 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) cold_protection = CHEST|GROIN|ARMS|LEGS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT diff --git a/code/modules/cargo/bounties/special.dm b/code/modules/cargo/bounties/special.dm index 8d0157ad86..42c9ab8202 100644 --- a/code/modules/cargo/bounties/special.dm +++ b/code/modules/cargo/bounties/special.dm @@ -1,6 +1,6 @@ /datum/bounty/item/alien_organs name = "Alien Organs" - description = "Nanotrasen is interested in studying Xenomorph biology. Ship a set of organs to be thouroughly compensated." + description = "Nanotrasen is interested in studying Xenomorph biology. Ship a set of organs to be thoroughly compensated." reward = 25000 required_count = 3 wanted_types = list(/obj/item/organ/brain/alien, /obj/item/organ/alien, /obj/item/organ/body_egg/alien_embryo) diff --git a/code/modules/cargo/bounties/virus.dm b/code/modules/cargo/bounties/virus.dm index e046e09af2..8f078a2668 100644 --- a/code/modules/cargo/bounties/virus.dm +++ b/code/modules/cargo/bounties/virus.dm @@ -73,7 +73,7 @@ return A.totalStealth() == stat_value /datum/bounty/virus/transmit - stat_name = "transmittable" + stat_name = "transmissible" /datum/bounty/virus/transmit/accepts_virus(V) var/datum/disease/advance/A = V diff --git a/code/modules/cargo/export_scanner.dm b/code/modules/cargo/export_scanner.dm index e493f96c6e..2113696e90 100644 --- a/code/modules/cargo/export_scanner.dm +++ b/code/modules/cargo/export_scanner.dm @@ -6,7 +6,7 @@ item_state = "radio" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL siemens_coefficient = 1 var/obj/machinery/computer/cargo/cargo_console = null diff --git a/code/modules/cargo/exports/weapons.dm b/code/modules/cargo/exports/weapons.dm index 28b55a2c8f..0d363f7132 100644 --- a/code/modules/cargo/exports/weapons.dm +++ b/code/modules/cargo/exports/weapons.dm @@ -69,29 +69,29 @@ unit_name = "pair" message = "of handcuffs" export_types = list(/obj/item/restraints/handcuffs) - + // relics of lavaland /datum/export/weapon/hierophant cost = 40000 unit_name = "Hierophant Club" export_types = list(/obj/item/hierophant_club) - + /datum/export/weapon/lava cost = 40000 unit_name = "Lava Staff" export_types = list(/obj/item/lava_staff) - + /datum/export/weapon/cleaving_saw cost = 40000 unit_name = "Cleaving Saw" export_types = list(/obj/item/melee/transforming/cleaving_saw) - + /datum/export/weapon/mayhem cost = 40000 unit_name = "Mayhem in a bottle" export_types = list(/obj/item/mayhem) - + /datum/export/weapon/blood_contract cost = 40000 unit_name = "Blood Contract" @@ -103,22 +103,22 @@ cost = 10000 unit_name = "Immortality Talisman" export_types = list(/obj/item/immortality_talisman) - + /datum/export/weapon/babel cost = 10000 unit_name = "Book of Babel" export_types = list(/obj/item/book_of_babel) - + /datum/export/weapon/hook cost = 10000 unit_name = "Meat hook" export_types = list(/obj/item/gun/magic/hook) - + /datum/export/weapon/shipbottle //the price for not breaking the bottle. cost = 20000 unit_name = "Ship in a bottle" export_types = list(/obj/item/ship_in_a_bottle) - + /datum/export/weapon/tarot //price for sacraficing a very profitiable ally cost = 20000 unit_name = "Tarot cards" @@ -128,37 +128,37 @@ cost = 5000 unit_name = "Red Cube" export_types = list(/obj/item/warp_cube/red) - + /datum/export/weapon/blue //first half of telecube cost = 5000 unit_name = "Blue Cube" export_types = list(/obj/item/warp_cube) - + /datum/export/weapon/wisplantern //thermals on lavaland cost = 10000 unit_name = "Wisp Lantern" export_types = list(/obj/item/wisp_lantern) - + /datum/export/weapon/flight //if xenobiology ever reaches the point to get these without shuttle being called they deserve it cost = 10000 - unit_name = "Strange Elixer" + unit_name = "Strange Elixir" export_types = list(/obj/item/reagent_containers/glass/bottle/potion/flight) - + /datum/export/weapon/cheart //is a very powerfull healing artifact in the robust hands cost = 10000 unit_name = "Cursed Heart" export_types = list(/obj/item/organ/heart/cursed/wizard) - + /datum/export/weapon/ckatana cost = 10000 unit_name = "Katana" export_types = list(/obj/item/katana/cursed) - + /datum/export/weapon/geye //xray cost = 10000 unit_name = "God eye" export_types = list(/obj/item/clothing/glasses/godeye) - + /datum/export/weapon/spectral cost = 10000 unit_name = "Spectral Sword" diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index cffd954b0e..e27cb8f56e 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -60,15 +60,6 @@ crate_name = "Biker Kit" crate_type = /obj/structure/closet/crate/large -/datum/supply_pack/emergency/droneshells - name = "Drone Shell Crate" - desc = "The station's little helpers. Contains three Drone Shells." - cost = 1000 - contains = list(/obj/item/drone_shell, - /obj/item/drone_shell, - /obj/item/drone_shell) - crate_name = "drone shell crate" - /datum/supply_pack/emergency/equipment name = "Emergency Bot/Internals Crate" desc = "Explosions got you down? These supplies are guaranteed to patch up holes, in stations and people alike! Comes with two floorbots, two medbots, five oxygen masks and five small oxygen tanks." @@ -181,7 +172,7 @@ /datum/supply_pack/emergency/radiation name = "Radiation Protection Crate" - desc = "Survive the Nuclear Apocalypse and Supermatter Engine alike with two sets of Radiation suits. Each set contains a helmet, suit, and geiger counter. We'll even throw in a bottle of vodka and some glasses too, considering the life-expectancy of people who order this." + desc = "Survive the Nuclear Apocalypse and Supermatter Engine alike with two sets of Radiation suits. Each set contains a helmet, suit, and Geiger counter. We'll even throw in a bottle of vodka and some glasses too, considering the life-expectancy of people who order this." cost = 1000 contains = list(/obj/item/clothing/head/radiation, /obj/item/clothing/head/radiation, @@ -225,7 +216,7 @@ /datum/supply_pack/emergency/weedcontrol name = "Weed Control Crate" - desc = "Keep those invasive species OUT. Contains a scythe, gasmask, and two anti-weed chemical grenades. Warrenty void if used on ambrosia. Requires Hydroponics access to open." + desc = "Keep those invasive species OUT. Contains a scythe, gasmask, and two anti-weed chemical grenades. Warranty void if used on ambrosia. Requires Hydroponics access to open." cost = 1500 access = ACCESS_HYDROPONICS contains = list(/obj/item/scythe, @@ -631,7 +622,7 @@ /datum/supply_pack/engineering/shuttle_engine name = "Shuttle Engine Crate" - desc = "Through advanced bluespace-shenanigins, our engineers have managed to fit an entire shuttle engine into one tiny little crate. Requires CE access to open." + desc = "Through advanced bluespace-shenanigans, our engineers have managed to fit an entire shuttle engine into one tiny little crate. Requires CE access to open." cost = 5000 access = ACCESS_CE contains = list(/obj/structure/shuttle/engine/propulsion/burst/cargo) @@ -1134,24 +1125,24 @@ desc = "Contains refills for medical vending machines." cost = 2000 contains = list(/obj/item/vending_refill/medical, - /obj/item/vending_refill/medical, - /obj/item/vending_refill/medical) + /obj/item/vending_refill/wallmed) crate_name = "medical vending crate" /datum/supply_pack/medical/virus name = "Virus Crate" - desc = "Contains twelve different bottles, each filled with a different chemical compound, each useful for virology. Also includes seven beakers and syringes. Balled-up jeans not included. Requires CMO access to open." + desc = "Contains twelve different bottles, containing several viral samples for virology research. Also includes seven beakers and syringes. Balled-up jeans not included. Requires CMO access to open." cost = 2500 access = ACCESS_CMO contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion, /obj/item/reagent_containers/glass/bottle/cold, - /obj/item/reagent_containers/glass/bottle/epiglottis_virion, - /obj/item/reagent_containers/glass/bottle/liver_enhance_virion, + /obj/item/reagent_containers/glass/bottle/random_virus, + /obj/item/reagent_containers/glass/bottle/random_virus, + /obj/item/reagent_containers/glass/bottle/random_virus, + /obj/item/reagent_containers/glass/bottle/random_virus, /obj/item/reagent_containers/glass/bottle/fake_gbs, /obj/item/reagent_containers/glass/bottle/magnitis, /obj/item/reagent_containers/glass/bottle/pierrot_throat, /obj/item/reagent_containers/glass/bottle/brainrot, - /obj/item/reagent_containers/glass/bottle/hallucigen_virion, /obj/item/reagent_containers/glass/bottle/anxiety, /obj/item/reagent_containers/glass/bottle/beesease, /obj/item/storage/box/syringes, @@ -1367,53 +1358,41 @@ /datum/supply_pack/service/vending/bartending name = "Bartending Supply Crate" - desc = "Bring on the booze with six vending machine refills, as well as a free book containing the well-kept secrets to the bartending trade!" + desc = "Bring on the booze with vending machine refills, as well as a free book containing the well-kept secrets to the bartending trade!" cost = 2000 contains = list(/obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/coffee, - /obj/item/vending_refill/coffee, /obj/item/vending_refill/coffee, /obj/item/book/granter/action/drink_fling) crate_name = "bartending supply crate" /datum/supply_pack/service/vending/cigarette name = "Cigarette Supply Crate" - desc = "Don't believe the reports - smoke today! Contains cigarette vending machine refills." + desc = "Don't believe the reports - smoke today! Contains a cigarette vending machine refill." cost = 1500 - contains = list(/obj/item/vending_refill/cigarette, - /obj/item/vending_refill/cigarette, - /obj/item/vending_refill/cigarette) + contains = list(/obj/item/vending_refill/cigarette) crate_name = "cigarette supply crate" crate_type = /obj/structure/closet/crate /datum/supply_pack/service/vending/games name = "Games Supply Crate" - desc = "Get your game on with these three game vending machine refills." + desc = "Get your game on with this game vending machine refill." cost = 1000 - contains = list(/obj/item/vending_refill/games, - /obj/item/vending_refill/games, - /obj/item/vending_refill/games) + contains = list(/obj/item/vending_refill/games) crate_name = "games supply crate" crate_type = /obj/structure/closet/crate /datum/supply_pack/service/vending/snack name = "Snack Supply Crate" - desc = "Three vending machine refills of cavity-bringin' goodness! The number one dentist recommended order!" + desc = "One vending machine refill of cavity-bringin' goodness! The number one dentist recommended order!" cost = 1500 - contains = list(/obj/item/vending_refill/snack, - /obj/item/vending_refill/snack, - /obj/item/vending_refill/snack) + contains = list(/obj/item/vending_refill/snack) crate_name = "snacks supply crate" /datum/supply_pack/service/vending/cola name = "Softdrinks Supply Crate" - desc = "Got whacked by a toolbox, but you still have those pesky teeth? Get rid of those pearly whites with these three soda machine refills, today!" + desc = "Got whacked by a toolbox, but you still have those pesky teeth? Get rid of those pearly whites with this soda machine refill, today!" cost = 1500 - contains = list(/obj/item/vending_refill/cola, - /obj/item/vending_refill/cola, - /obj/item/vending_refill/cola) + contains = list(/obj/item/vending_refill/cola) crate_name = "soft drinks supply crate" ////////////////////////////////////////////////////////////////////////////// @@ -1957,10 +1936,9 @@ /datum/supply_pack/costumes_toys/wardrobes/autodrobe name = "Autodrobe Supply Crate" - desc = "Autodrobe missing your favorite dress? Solve that issue today with these two autodrobe refills." + desc = "Autodrobe missing your favorite dress? Solve that issue today with this autodrobe refill." cost = 1500 - contains = list(/obj/item/vending_refill/autodrobe, - /obj/item/vending_refill/autodrobe) + contains = list(/obj/item/vending_refill/autodrobe) crate_name = "autodrobe supply crate" /datum/supply_pack/costumes_toys/wardrobes/cargo @@ -2083,7 +2061,7 @@ /datum/supply_pack/misc/paper name = "Bureaucracy Crate" - desc = "High stacks of papers on your desk Are a big problem - make it Pea-sized with these bureacratic supplies! Contains six pens, some camera film, hand labeler supplies, a paper bin, three folders, two clipboards and two stamps."//that was too forced + desc = "High stacks of papers on your desk Are a big problem - make it Pea-sized with these bureaucratic supplies! Contains six pens, some camera film, hand labeler supplies, a paper bin, three folders, two clipboards and two stamps."//that was too forced cost = 1500 contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled, /obj/item/camera_film, diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index fdcb27ad75..2ae00f9348 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -217,7 +217,9 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) new /datum/admins(localhost_rank, ckey, 1, 1) //preferences datum - also holds some persistent data for the client (because we may as well keep these datums to a minimum) prefs = GLOB.preferences_datums[ckey] - if(!prefs) + if(prefs) + prefs.parent = src + else prefs = new /datum/preferences(src) GLOB.preferences_datums[ckey] = prefs prefs.last_ip = address //these are gonna be used for banning @@ -465,12 +467,14 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) related_accounts_ip = "" while(query_get_related_ip.NextRow()) related_accounts_ip += "[query_get_related_ip.item[1]], " + qdel(query_get_related_ip) var/datum/DBQuery/query_get_related_cid = SSdbcore.NewQuery("SELECT ckey FROM [format_table_name("player")] WHERE computerid = '[computer_id]' AND ckey != '[sql_ckey]'") if(!query_get_related_cid.Execute()) return related_accounts_cid = "" while (query_get_related_cid.NextRow()) related_accounts_cid += "[query_get_related_cid.item[1]], " + qdel(query_get_related_cid) var/admin_rank = "Player" if (src.holder && src.holder.rank) admin_rank = src.holder.rank.name @@ -483,6 +487,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) var/new_player var/datum/DBQuery/query_client_in_db = SSdbcore.NewQuery("SELECT 1 FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") if(!query_client_in_db.Execute()) + qdel(query_client_in_db) return if(!query_client_in_db.NextRow()) if (CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey]) @@ -496,6 +501,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) to_chat(src, "Sending you to [panic_name ? panic_name : panic_addr].") winset(src, null, "command=.options") src << link("[panic_addr]?redirect=1") + qdel(query_client_in_db) qdel(src) return @@ -503,12 +509,17 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) account_join_date = sanitizeSQL(findJoinDate()) var/datum/DBQuery/query_add_player = SSdbcore.NewQuery("INSERT INTO [format_table_name("player")] (`ckey`, `firstseen`, `firstseen_round_id`, `lastseen`, `lastseen_round_id`, `ip`, `computerid`, `lastadminrank`, `accountjoindate`) VALUES ('[sql_ckey]', Now(), '[GLOB.round_id]', Now(), '[GLOB.round_id]', INET_ATON('[sql_ip]'), '[sql_computerid]', '[sql_admin_rank]', [account_join_date ? "'[account_join_date]'" : "NULL"])") if(!query_add_player.Execute()) + qdel(query_client_in_db) + qdel(query_add_player) return + qdel(query_add_player) if(!account_join_date) account_join_date = "Error" account_age = -1 + qdel(query_client_in_db) var/datum/DBQuery/query_get_client_age = SSdbcore.NewQuery("SELECT firstseen, DATEDIFF(Now(),firstseen), accountjoindate, DATEDIFF(Now(),accountjoindate) FROM [format_table_name("player")] WHERE ckey = '[sql_ckey]'") if(!query_get_client_age.Execute()) + qdel(query_get_client_age) return if(query_get_client_age.NextRow()) player_join_date = query_get_client_age.item[1] @@ -523,17 +534,23 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) else var/datum/DBQuery/query_datediff = SSdbcore.NewQuery("SELECT DATEDIFF(Now(),'[account_join_date]')") if(!query_datediff.Execute()) + qdel(query_datediff) return if(query_datediff.NextRow()) account_age = text2num(query_datediff.item[1]) + qdel(query_datediff) + qdel(query_get_client_age) if(!new_player) var/datum/DBQuery/query_log_player = SSdbcore.NewQuery("UPDATE [format_table_name("player")] SET lastseen = Now(), lastseen_round_id = '[GLOB.round_id]', ip = INET_ATON('[sql_ip]'), computerid = '[sql_computerid]', lastadminrank = '[sql_admin_rank]', accountjoindate = [account_join_date ? "'[account_join_date]'" : "NULL"] WHERE ckey = '[sql_ckey]'") if(!query_log_player.Execute()) + qdel(query_log_player) return + qdel(query_log_player) if(!account_join_date) account_join_date = "Error" var/datum/DBQuery/query_log_connection = SSdbcore.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`round_id`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')),'[world.port]','[GLOB.round_id]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')") query_log_connection.Execute() + qdel(query_log_connection) if(new_player) player_age = -1 . = player_age @@ -569,6 +586,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) var/lastcid if (query_cidcheck.NextRow()) lastcid = query_cidcheck.item[1] + qdel(query_cidcheck) var/oldcid = cidcheck[ckey] if (oldcid) @@ -642,16 +660,22 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) //check to see if we noted them in the last day. var/datum/DBQuery/query_get_notes = SSdbcore.NewQuery("SELECT id FROM [format_table_name("messages")] WHERE type = 'note' AND targetckey = '[sql_ckey]' AND adminckey = '[sql_system_ckey]' AND timestamp + INTERVAL 1 DAY < NOW() AND deleted = 0") if(!query_get_notes.Execute()) + qdel(query_get_notes) return if(query_get_notes.NextRow()) + qdel(query_get_notes) return + qdel(query_get_notes) //regardless of above, make sure their last note is not from us, as no point in repeating the same note over and over. query_get_notes = SSdbcore.NewQuery("SELECT adminckey FROM [format_table_name("messages")] WHERE targetckey = '[sql_ckey]' AND deleted = 0 ORDER BY timestamp DESC LIMIT 1") if(!query_get_notes.Execute()) + qdel(query_get_notes) return if(query_get_notes.NextRow()) if (query_get_notes.item[1] == system_ckey) + qdel(query_get_notes) return + qdel(query_get_notes) create_message("note", ckey, system_ckey, message, null, null, 0, 0) @@ -797,6 +821,8 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) if (isliving(mob)) var/mob/living/M = mob M.update_damage_hud() + if (prefs.auto_fit_viewport) + fit_viewport() /client/proc/generate_clickcatcher() if(!void) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 5c6c0a8229..088c75a1b5 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -36,7 +36,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) //autocorrected this round, not that you'd need to check that. - var/UI_style = "Midnight" + var/UI_style = null var/buttons_locked = FALSE var/hotkeys = FALSE var/tgui_fancy = TRUE @@ -121,6 +121,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/parallax var/ambientocclusion = TRUE + var/auto_fit_viewport = FALSE var/uplink_spawn_loc = UPLINK_PDA @@ -133,9 +134,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) parent = C custom_names["human"] = random_unique_name() custom_names["ai"] = pick(GLOB.ai_names) - custom_names["cyborg"] = pick(GLOB.ai_names) + custom_names["cyborg"] = DEFAULT_CYBORG_NAME custom_names["clown"] = pick(GLOB.clown_names) custom_names["mime"] = pick(GLOB.mime_names) + UI_style = GLOB.available_ui_styles[1] if(istype(C)) if(!IsGuestKey(C.key)) load_path(C.ckey) @@ -213,10 +215,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Special Names:
" dat += "Backup Human Name: [custom_names["human"]] " + dat += "
" dat += "Clown: [custom_names["clown"]] " - dat += "Mime:[custom_names["mime"]]
" + dat += "Mime: [custom_names["mime"]]" + dat += "
" dat += "AI: [custom_names["ai"]] " - dat += "Cyborg: [custom_names["cyborg"]]
" + dat += "Cyborg: [custom_names["cyborg"]]" + dat += "
" dat += "Chaplain religion: [custom_names["religion"]] " dat += "Chaplain deity: [custom_names["deity"]]
" @@ -457,24 +462,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) button_name = GHOST_OTHERS_SIMPLE_NAME dat += "Ghosts of Others: [button_name]
" - - if (CONFIG_GET(flag/maprotation)) - var/p_map = preferred_map - if (!p_map) - p_map = "Default" - if (config.defaultmap) - p_map += " ([config.defaultmap.map_name])" - else - if (p_map in config.maplist) - var/datum/map_config/VM = config.maplist[p_map] - if (!VM) - p_map += " (No longer exists)" - else - p_map = VM.map_name - else - p_map += " (No longer exists)" - if(CONFIG_GET(flag/allow_map_voting)) - dat += "Preferred Map: [p_map]
" + dat += "
" dat += "FPS: [clientfps]
" @@ -493,6 +481,25 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" dat += "Ambient Occlusion: [ambientocclusion ? "Enabled" : "Disabled"]
" + dat += "Fit Viewport: [auto_fit_viewport ? "Auto" : "Manual"]
" + + if (CONFIG_GET(flag/maprotation)) + var/p_map = preferred_map + if (!p_map) + p_map = "Default" + if (config.defaultmap) + p_map += " ([config.defaultmap.map_name])" + else + if (p_map in config.maplist) + var/datum/map_config/VM = config.maplist[p_map] + if (!VM) + p_map += " (No longer exists)" + else + p_map = VM.map_name + else + p_map += " (No longer exists)" + if(CONFIG_GET(flag/allow_map_voting)) + dat += "Preferred Map: [p_map]
" dat += "" @@ -1101,11 +1108,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_age) age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN) - if("metadata") - var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null - if(new_metadata) - metadata = sanitize(copytext(new_metadata,1,MAX_MESSAGE_LEN)) - /* if("hair") var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference","#"+hair_color) as color|null if(new_hair) @@ -1326,7 +1328,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, 0-9, -, ' and .") if("cyborg_name") - var/new_cyborg_name = reject_bad_name( input(user, "Choose your character's cyborg name:", "Character Preference") as text|null, 1 ) + var/raw_name = input(user, "Choose your character's cyborg name (Leave empty to use default naming scheme):", "Character Preference") as text|null + var/new_cyborg_name + if(!raw_name) + new_cyborg_name = DEFAULT_CYBORG_NAME + else + new_cyborg_name = reject_bad_name(raw_name,1 ) if(new_cyborg_name) custom_names["cyborg"] = new_cyborg_name else @@ -1372,13 +1379,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if (!isnull(desiredfps)) clientfps = desiredfps parent.fps = desiredfps - else - clientfps = 0 - parent.fps = 0 if("ui") - var/pickedui = input(user, "Choose your UI style.", "Character Preference") as null|anything in list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "Clockwork") + var/pickedui = input(user, "Choose your UI style.", "Character Preference", UI_style) as null|anything in GLOB.available_ui_styles if(pickedui) UI_style = pickedui + if (parent && parent.mob && parent.mob.hud_used) + parent.mob.hud_used.update_ui_style(ui_style2icon(UI_style)) if("pda_style") var/pickedPDAStyle = input(user, "Choose your PDA style.", "Character Preference", pda_style) as null|anything in GLOB.pda_styles if(pickedPDAStyle) @@ -1468,6 +1474,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) toggles ^= SOUND_ADMINHELP if("announce_login") toggles ^= ANNOUNCE_LOGIN + if("combohud_lighting") + toggles ^= COMBOHUD_LIGHTING if("be_special") var/be_special_type = href_list["be_special_type"] @@ -1487,7 +1495,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("lobby_music") toggles ^= SOUND_LOBBY - if((toggles & SOUND_LOBBY) && user.client) + if((toggles & SOUND_LOBBY) && user.client && isnewplayer(user)) user.client.playtitlemusic() else user.stop_sound_channel(CHANNEL_LOBBYMUSIC) @@ -1539,6 +1547,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/obj/screen/plane_master/game_world/PM = locate(/obj/screen/plane_master/game_world) in parent.screen PM.backdrop(parent.mob) + if("auto_fit_viewport") + auto_fit_viewport = !auto_fit_viewport + if(auto_fit_viewport && parent) + parent.fit_viewport() + if("save") save_preferences() save_character() @@ -1600,7 +1613,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(be_random_body) random_character(gender) - if(CONFIG_GET(flag/humans_need_surnames)) + if(CONFIG_GET(flag/humans_need_surnames) && (pref_species.id == "human")) var/firstspace = findtext(real_name, " ") var/name_length = length(real_name) if(!firstspace) //we need a surname diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index ad53f8f0dd..4c2cdbb074 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -131,6 +131,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["clientfps"] >> clientfps S["parallax"] >> parallax S["ambientocclusion"] >> ambientocclusion + S["auto_fit_viewport"] >> auto_fit_viewport S["menuoptions"] >> menuoptions S["enable_tips"] >> enable_tips S["tip_delay"] >> tip_delay @@ -151,7 +152,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car //Sanitize ooccolor = sanitize_ooccolor(sanitize_hexcolor(ooccolor, 6, 1, initial(ooccolor))) lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) - UI_style = sanitize_inlist(UI_style, list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "Clockwork"), initial(UI_style)) + UI_style = sanitize_inlist(UI_style, GLOB.available_ui_styles, GLOB.available_ui_styles[1]) hotkeys = sanitize_integer(hotkeys, 0, 1, initial(hotkeys)) tgui_fancy = sanitize_integer(tgui_fancy, 0, 1, initial(tgui_fancy)) tgui_lock = sanitize_integer(tgui_lock, 0, 1, initial(tgui_lock)) @@ -162,6 +163,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car clientfps = sanitize_integer(clientfps, 0, 1000, 0) parallax = sanitize_integer(parallax, PARALLAX_INSANE, PARALLAX_DISABLE, null) ambientocclusion = sanitize_integer(ambientocclusion, 0, 1, initial(ambientocclusion)) + auto_fit_viewport = sanitize_integer(auto_fit_viewport, 0, 1, initial(auto_fit_viewport)) ghost_form = sanitize_inlist(ghost_form, GLOB.ghost_forms, initial(ghost_form)) ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit)) ghost_accs = sanitize_inlist(ghost_accs, GLOB.ghost_accs_options, GHOST_ACCS_DEFAULT_OPTION) @@ -213,6 +215,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["clientfps"], clientfps) WRITE_FILE(S["parallax"], parallax) WRITE_FILE(S["ambientocclusion"], ambientocclusion) + WRITE_FILE(S["auto_fit_viewport"], auto_fit_viewport) WRITE_FILE(S["menuoptions"], menuoptions) WRITE_FILE(S["enable_tips"], enable_tips) WRITE_FILE(S["tip_delay"], tip_delay) @@ -260,7 +263,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["features["mcolor"]"] , "#FFF") //Character - S["OOC_Notes"] >> metadata S["real_name"] >> real_name S["name_is_always_random"] >> be_random_name S["body_is_always_random"] >> be_random_body @@ -374,7 +376,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car update_character(needs_update, S) //needs_update == savefile_version if we need an update (positive integer) //Sanitize - metadata = sanitize_text(metadata, initial(metadata)) real_name = reject_bad_name(real_name) if(!features["mcolor"] || features["mcolor"] == "#000") features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F") @@ -444,7 +445,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //load_character will sanitize any bad data, so assume up-to-date.) //Character - WRITE_FILE(S["OOC_Notes"] , metadata) WRITE_FILE(S["real_name"] , real_name) WRITE_FILE(S["name_is_always_random"] , be_random_name) WRITE_FILE(S["body_is_always_random"] , be_random_body) diff --git a/code/modules/client/verbs/ooc.dm b/code/modules/client/verbs/ooc.dm index 0bcfac811e..2f4922fddf 100644 --- a/code/modules/client/verbs/ooc.dm +++ b/code/modules/client/verbs/ooc.dm @@ -22,6 +22,8 @@ if(jobban_isbanned(src.mob, "OOC")) to_chat(src, "You have been banned from OOC.") return + if(QDELETED(src)) + return msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) var/raw_msg = msg @@ -56,21 +58,19 @@ if(prefs.unlock_content) if(prefs.toggles & MEMBER_PUBLIC) keyname = "[icon2html('icons/member_content.dmi', world, "blag")][keyname]" - + //The linkify span classes and linkify=TRUE below make ooc text get clickable chat href links if you pass in something resembling a url for(var/client/C in GLOB.clients) if(C.prefs.chat_toggles & CHAT_OOC) if(holder) if(!holder.fakekey || C.holder) if(check_rights_for(src, R_ADMIN)) - to_chat(C, "[CONFIG_GET(flag/allow_admin_ooccolor) && prefs.ooccolor ? "" :"" ]OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") + to_chat(C, "[CONFIG_GET(flag/allow_admin_ooccolor) && prefs.ooccolor ? "" :"" ]OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") else - to_chat(C, "OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") + to_chat(C, "OOC: [keyname][holder.fakekey ? "/([holder.fakekey])" : ""]: [msg]") else - to_chat(C, "OOC: [holder.fakekey ? holder.fakekey : key]: [msg]") - else if(is_mentor()) // Citadel Mentors - to_chat(C, "OOC: [keyname]: [msg]") // hippie end + to_chat(C, "OOC: [holder.fakekey ? holder.fakekey : key]: [msg]") else if(!(key in C.prefs.ignoring)) - to_chat(C, "OOC: [keyname]: [msg]") + to_chat(C, "OOC: [keyname]: [msg]") /proc/toggle_ooc(toggle = null) if(toggle != null) //if we're specifically en/disabling ooc @@ -301,3 +301,49 @@ GLOBAL_VAR_INIT(normal_ooc_colour, OOC_COLOR) set desc = "View the last round end report you've seen" SSticker.show_roundend_report(src, TRUE) + +/client/verb/fit_viewport() + set name = "Fit Viewport" + set category = "OOC" + set desc = "Fit the width of the map window to match the viewport" + + // Fetch aspect ratio + var/view_size = getviewsize(view) + var/aspect_ratio = view_size[1] / view_size[2] + + // Calculate desired pixel width using window size and aspect ratio + var/sizes = params2list(winget(src, "mainwindow.split;mapwindow", "size")) + var/map_size = splittext(sizes["mapwindow.size"], "x") + var/height = text2num(map_size[2]) + var/desired_width = round(height * aspect_ratio) + if (text2num(map_size[1]) == desired_width) + // Nothing to do + return + + var/split_size = splittext(sizes["mainwindow.split.size"], "x") + var/split_width = text2num(split_size[1]) + + // Calculate and apply a best estimate + // +4 pixels are for the width of the splitter's handle + var/pct = 100 * (desired_width + 4) / split_width + winset(src, "mainwindow.split", "splitter=[pct]") + + // Apply an ever-lowering offset until we finish or fail + var/delta + for(var/safety in 1 to 10) + var/after_size = winget(src, "mapwindow", "size") + map_size = splittext(after_size, "x") + var/got_width = text2num(map_size[1]) + + if (got_width == desired_width) + // success + return + else if (isnull(delta)) + // calculate a probable delta value based on the difference + delta = 100 * (desired_width - got_width) / split_width + else if ((delta > 0 && got_width > desired_width) || (delta < 0 && got_width < desired_width)) + // if we overshot, halve the delta and reverse direction + delta = -delta/2 + + pct += delta + winset(src, "mainwindow.split", "splitter=[pct]") diff --git a/code/modules/client/verbs/suicide.dm b/code/modules/client/verbs/suicide.dm index 06e555bb32..6b273cb818 100644 --- a/code/modules/client/verbs/suicide.dm +++ b/code/modules/client/verbs/suicide.dm @@ -19,7 +19,7 @@ if(damagetype & SHAME) adjustStaminaLoss(200) suiciding = FALSE - SendSignal(COMSIG_ADD_MOOD_EVENT, "shameful_suicide", /datum/mood_event/shameful_suicide) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "shameful_suicide", /datum/mood_event/shameful_suicide) return suicide_log() @@ -219,7 +219,4 @@ if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide to_chat(src, "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))") return -// if(has_brain_worms()) -// to_chat(src, "You can't bring yourself to commit suicide!") -// return return TRUE diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 9d4983ed57..e4cc477f11 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -170,7 +170,7 @@ for(var/V in typesof(chameleon_type)) if(ispath(V) && ispath(V, /obj/item)) var/obj/item/I = V - if(chameleon_blacklist[V] || (initial(I.flags_1) & ABSTRACT_1) || !initial(I.icon_state)) + if(chameleon_blacklist[V] || (initial(I.item_flags) & ABSTRACT) || !initial(I.icon_state)) continue var/chameleon_item_name = "[initial(I.name)] ([initial(I.icon_state)])" chameleon_list[chameleon_item_name] = I @@ -405,7 +405,7 @@ /obj/item/clothing/head/chameleon/drone // The camohat, I mean, holographic hat projection, is part of the // drone itself. - flags_1 = NODROP_1 + item_flags = NODROP 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 @@ -459,7 +459,7 @@ /obj/item/clothing/mask/chameleon/drone //Same as the drone chameleon hat, undroppable and no protection - flags_1 = NODROP_1 + item_flags = NODROP 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 diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index bb2a489030..1dcaeb35fa 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -1,50 +1,50 @@ - -//Ears: currently only used for headsets and earmuffs -/obj/item/clothing/ears - name = "ears" - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - slot_flags = ITEM_SLOT_EARS - resistance_flags = NONE - -/obj/item/clothing/ears/earmuffs - name = "earmuffs" - desc = "Protects your hearing from loud noises, and quiet ones as well." - icon_state = "earmuffs" - item_state = "earmuffs" - strip_delay = 15 - equip_delay_other = 25 - resistance_flags = FLAMMABLE - -/obj/item/clothing/ears/earmuffs/ComponentInitialize() - . = ..() - AddComponent(/datum/component/earhealing) - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) - -/obj/item/clothing/ears/headphones - name = "headphones" - desc = "Unce unce unce unce. Boop!" - icon = 'icons/obj/clothing/accessories.dmi' - icon_state = "headphones" - item_state = "headphones" - slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want! - actions_types = list(/datum/action/item_action/toggle_headphones) - var/headphones_on = FALSE - -/obj/item/clothing/ears/headphones/Initialize() - . = ..() - update_icon() - -/obj/item/clothing/ears/headphones/update_icon() - icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]" - item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]" - -/obj/item/clothing/ears/headphones/proc/toggle(owner) - headphones_on = !headphones_on - update_icon() - var/mob/living/carbon/human/H = owner - if(istype(H)) - H.update_inv_ears() - H.update_inv_neck() - H.update_inv_head() - to_chat(owner, "You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]") + +//Ears: currently only used for headsets and earmuffs +/obj/item/clothing/ears + name = "ears" + w_class = WEIGHT_CLASS_TINY + throwforce = 0 + slot_flags = ITEM_SLOT_EARS + resistance_flags = NONE + +/obj/item/clothing/ears/earmuffs + name = "earmuffs" + desc = "Protects your hearing from loud noises, and quiet ones as well." + icon_state = "earmuffs" + item_state = "earmuffs" + strip_delay = 15 + equip_delay_other = 25 + resistance_flags = FLAMMABLE + +/obj/item/clothing/ears/earmuffs/ComponentInitialize() + . = ..() + AddComponent(/datum/component/earhealing) + AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS)) + +/obj/item/clothing/ears/headphones + name = "headphones" + desc = "Unce unce unce unce. Boop!" + icon = 'icons/obj/clothing/accessories.dmi' + icon_state = "headphones" + item_state = "headphones" + slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want! + actions_types = list(/datum/action/item_action/toggle_headphones) + var/headphones_on = FALSE + +/obj/item/clothing/ears/headphones/Initialize() + . = ..() + update_icon() + +/obj/item/clothing/ears/headphones/update_icon() + icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]" + item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]" + +/obj/item/clothing/ears/headphones/proc/toggle(owner) + headphones_on = !headphones_on + update_icon() + var/mob/living/carbon/human/H = owner + if(istype(H)) + H.update_inv_ears() + H.update_inv_neck() + H.update_inv_head() + to_chat(owner, "You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]") diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index c64ecc0e0f..bbb8d687d9 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -367,7 +367,7 @@ vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS darkness_view = 8 scan_reagents = 1 - flags_1 = NODROP_1 + item_flags = NODROP lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE resistance_flags = LAVA_PROOF | FIRE_PROOF diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 2d60c7d236..25e0dbe886 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -150,7 +150,7 @@ dog_fashion = null /obj/item/clothing/head/helmet/roman - name = "roman helmet" + name = "\improper Roman helmet" desc = "An ancient helmet made of bronze and leather." flags_inv = HIDEEARS|HIDEHAIR flags_cover = HEADCOVERSEYES @@ -165,13 +165,13 @@ desc = "An ancient helmet made of plastic and leather." armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -/obj/item/clothing/head/helmet/roman/legionaire - name = "roman legionaire helmet" +/obj/item/clothing/head/helmet/roman/legionnaire + name = "\improper Roman legionnaire helmet" desc = "An ancient helmet made of bronze and leather. Has a red crest on top of it." icon_state = "roman_c" item_state = "roman_c" -/obj/item/clothing/head/helmet/roman/legionaire/fake +/obj/item/clothing/head/helmet/roman/legionnaire/fake desc = "An ancient helmet made of plastic and leather. Has a red crest on top of it." armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 18521b7dc9..faa3ebdb0f 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -100,7 +100,7 @@ /obj/item/clothing/head/beret/highlander desc = "That was white fabric. Was." - flags_1 = NODROP_1 + item_flags = NODROP dog_fashion = null //THIS IS FOR SLAUGHTER, NOT PUPPIES //Security @@ -136,7 +136,7 @@ /obj/item/clothing/head/beret/sec name = "security beret" - desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficent protection." + desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient 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) strip_delay = 60 diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index d7a7e7f5e2..ba23338415 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -221,7 +221,7 @@ icon_state = "shamebrero" item_state = "shamebrero" desc = "Once it's on, it never comes off." - flags_1 = NODROP_1 + item_flags = NODROP dog_fashion = null /obj/item/clothing/head/cone @@ -305,8 +305,8 @@ icon_state = "drfreeze_hat" flags_inv = HIDEHAIR -/obj/item/clothing/head/pharoah - name = "pharoah hat" +/obj/item/clothing/head/pharaoh + name = "pharaoh hat" desc = "Walk like an Egyptian." icon_state = "pharoah_hat" icon_state = "pharoah_hat" @@ -318,7 +318,7 @@ dynamic_hair_suffix = "" /obj/item/clothing/head/nemes - name = "headress of Nemes" + name = "headdress of Nemes" desc = "Lavish space tomb not included." icon_state = "nemes_headdress" icon_state = "nemes_headdress" @@ -344,4 +344,4 @@ if(prob(3)) M += pick(" Honh honh honh!"," Honh!"," Zut Alors!") - return trim(M) \ No newline at end of file + return trim(M) diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index 0d78e11874..3f21780f15 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -3,7 +3,7 @@ /obj/item/clothing/mask/gas/sechailer name = "security gas mask" - desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device. Plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you taze them. Do not tamper with the device." + desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device. Plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you tase them. Do not tamper with the device." actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/adjust) icon_state = "sechailer" item_state = "sechailer" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 667bc7fc78..c0d41aeb68 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -123,7 +123,7 @@ return message /obj/item/clothing/mask/frog/cursed - flags_1 = NODROP_1 //reee!! + item_flags = NODROP //reee!! /obj/item/clothing/mask/frog/cursed/attack_self(mob/user) return //no voicebox to alter. diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm index 37a06046b5..347fc5c2d7 100644 --- a/code/modules/clothing/outfits/event.dm +++ b/code/modules/clothing/outfits/event.dm @@ -26,5 +26,5 @@ var/obj/item/storage/backpack/bag = H.back var/obj/item/a_gift/gift = new(H) - while(bag.SendSignal(COMSIG_TRY_STORAGE_INSERT, gift, null, TRUE, FALSE)) + while(SEND_SIGNAL(bag, COMSIG_TRY_STORAGE_INSERT, gift, null, TRUE, FALSE)) gift = new(H) diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 88752f7415..88b51963e5 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -182,11 +182,11 @@ for(var/obj/item/briefcase_item in sec_briefcase) qdel(briefcase_item) for(var/i = 3 to 0 step -1) - sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/stack/spacecash/c1000, null, TRUE, TRUE) - sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/energy/kinetic_accelerator/crossbow, null, TRUE, TRUE) - sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/ballistic/revolver/mateba, null, TRUE, TRUE) - sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE) - sec_briefcase.SendSignal(COMSIG_TRY_STORAGE_INSERT, new /obj/item/grenade/plastic/x4, null, TRUE, TRUE) + SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/stack/spacecash/c1000, null, TRUE, TRUE) + SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/energy/kinetic_accelerator/crossbow, null, TRUE, TRUE) + SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/ballistic/revolver/mateba, null, TRUE, TRUE) + SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE) + SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/grenade/plastic/x4, null, TRUE, TRUE) var/obj/item/pda/heads/pda = H.belt pda.owner = H.real_name diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm index 48b69c9568..cd8930641f 100644 --- a/code/modules/clothing/outfits/vr.dm +++ b/code/modules/clothing/outfits/vr.dm @@ -27,7 +27,7 @@ /datum/outfit/vr/syndicate/post_equip(mob/living/carbon/human/H) . = ..() - var/obj/item/radio/uplink/U = new /obj/item/radio/uplink/nuclear_restricted(H, H.key, 80) + var/obj/item/uplink/U = new /obj/item/uplink/nuclear_restricted(H, H.key, 80) H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK) var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H) W.implant(H) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 9f0d8358ac..c81505d8e8 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -1,5 +1,5 @@ /obj/item/clothing/shoes/proc/step_action() //this was made to rewrite clown shoes squeaking - SendSignal(COMSIG_SHOES_STEP_ACTION) + SEND_SIGNAL(src, COMSIG_SHOES_STEP_ACTION) /obj/item/clothing/shoes/sneakers/mime name = "mime shoes" @@ -64,7 +64,7 @@ /obj/item/clothing/shoes/galoshes/dry/step_action() var/turf/open/t_loc = get_turf(src) - t_loc.SendSignal(COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY) + SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY) /obj/item/clothing/shoes/clown_shoes desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" @@ -82,12 +82,12 @@ /obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot) . = ..() if(user.mind && user.mind.assigned_role == "Clown") - user.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "noshoes") + SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "noshoes") /obj/item/clothing/shoes/clown_shoes/dropped(mob/user) . = ..() if(user.mind && user.mind.assigned_role == "Clown") - user.SendSignal(COMSIG_ADD_MOOD_EVENT, "noshoes", /datum/mood_event/noshoes) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "noshoes", /datum/mood_event/noshoes) /obj/item/clothing/shoes/clown_shoes/jester name = "jester shoes" @@ -157,7 +157,7 @@ icon_state = "cultalt" /obj/item/clothing/shoes/cult/alt/ghost - flags_1 = NODROP_1|DROPDEL_1 + item_flags = NODROP | DROPDEL /obj/item/clothing/shoes/cyborg name = "cyborg boots" diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index b3b74446ec..d0820304fe 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -98,7 +98,7 @@ teleporting = 0 for(var/obj/item/I in user.held_items) if(I in hands_nodrop) - I.flags_1 &= ~NODROP_1 + I.item_flags &= ~NODROP if(camera) camera.remove_target_ui() camera.forceMove(user) @@ -133,9 +133,9 @@ hands_nodrop = list() for(var/obj/item/I in user.held_items) - if(!(I.flags_1 & NODROP_1)) + if(!(I.item_flags & NODROP)) hands_nodrop += I - I.flags_1 |= NODROP_1 + I.item_flags |= NODROP user.animate_movement = NO_STEPS user.changeNext_move(8 + phase_in_ds) user.notransform = 1 @@ -194,9 +194,9 @@ if(user.head && istype(user.head, /obj/item/clothing/head/helmet/space/chronos)) to_chat(user, "\[ ok \] Mounting /dev/helm") helmet = user.head - helmet.flags_1 |= NODROP_1 + helmet.item_flags |= NODROP helmet.suit = src - src.flags_1 |= NODROP_1 + src.item_flags |= NODROP to_chat(user, "\[ ok \] Starting brainwave scanner") to_chat(user, "\[ ok \] Starting ui display driver") to_chat(user, "\[ ok \] Initializing chronowalk4-view") @@ -215,7 +215,7 @@ activating = 1 var/mob/living/carbon/human/user = src.loc var/hard_landing = teleporting && force - src.flags_1 &= ~NODROP_1 + item_flags &= ~NODROP cooldown = world.time + cooldowntime * 1.5 activated = 0 activating = 0 @@ -236,7 +236,7 @@ to_chat(user, "\[ ok \] Unmounting /dev/helmet") to_chat(user, "logout") if(helmet) - helmet.flags_1 &= ~NODROP_1 + helmet.item_flags &= ~NODROP helmet.suit = null helmet = null if(camera) diff --git a/code/modules/clothing/spacesuits/flightsuit.dm b/code/modules/clothing/spacesuits/flightsuit.dm index d117bf482b..176bc81665 100644 --- a/code/modules/clothing/spacesuits/flightsuit.dm +++ b/code/modules/clothing/spacesuits/flightsuit.dm @@ -302,7 +302,7 @@ if(suit && !suit.deployedshoes && (brake || stabilizer)) brake = FALSE stabilizer = FALSE - usermessage("Warning: Sensor data is not being recieved from flight shoes. Stabilizers and airbrake modules deactivated!", "boldwarning") + usermessage("Warning: Sensor data is not being received from flight shoes. Stabilizers and airbrake modules deactivated!", "boldwarning") /obj/item/flightpack/process() @@ -897,7 +897,7 @@ usermessage("You're already wearing something on your back!", "boldwarning") return FALSE user.equip_to_slot_if_possible(pack,SLOT_BACK,0,0,1) - pack.flags_1 |= NODROP_1 + pack.item_flags |= NODROP resync() user.visible_message("A [pack.name] extends from [user]'s [name] and clamps to [user.p_their()] back!") user.update_inv_wear_suit() @@ -911,7 +911,7 @@ return FALSE if(pack.flight && forced) pack.disable_flight(1) - pack.flags_1 &= ~NODROP_1 + pack.item_flags &= ~NODROP resync() if(user) user.transferItemToLoc(pack, src, TRUE) @@ -935,14 +935,14 @@ usermessage("You're already wearing something on your feet!", "boldwarning") return FALSE user.equip_to_slot_if_possible(shoes,SLOT_SHOES,0,0,1) - shoes.flags_1 |= NODROP_1 + shoes.item_flags |= NODROP user.visible_message("[user]'s [name] extends a pair of [shoes.name] over [user.p_their()] feet!") user.update_inv_wear_suit() playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) deployedshoes = TRUE /obj/item/clothing/suit/space/hardsuit/flightsuit/proc/retract_flightshoes(forced = FALSE) - shoes.flags_1 &= ~NODROP_1 + shoes.item_flags &= ~NODROP playsound(src, 'sound/mecha/mechmove03.ogg', 50, 1) if(user) user.transferItemToLoc(shoes, src, TRUE) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 0667f2be6f..2e5896098f 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -713,7 +713,7 @@ icon_state = "ert_medical" item_state = "ert_medical" item_color = "ert_medical" - flags_1 = NODROP_1 //Dont want people changing into the other teams gear + item_flags = NODROP //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) slowdown = 0 diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index f3975d1f81..a4b82c8234 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -165,7 +165,7 @@ Contains: item_color = "ert_commander" 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 = NODROP_1 + item_flags = NODROP brightness_on = 7 /obj/item/clothing/suit/space/hardsuit/ert @@ -265,7 +265,7 @@ Contains: 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 = NODROP_1 + item_flags = NODROP /obj/item/clothing/suit/space/hardsuit/carp diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index ea300aaf13..f73ca30fb0 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -53,7 +53,7 @@ /obj/item/clothing/suit/armor/hos/trenchcoat name = "armored trenchoat" - desc = "A trenchcoat enchanced with a special lightweight kevlar. The epitome of tactical plainclothes." + desc = "A trenchcoat enhanced with a special lightweight kevlar. The epitome of tactical plainclothes." icon_state = "hostrench" item_state = "hostrench" flags_inv = 0 diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index d38c625ee2..1c24ee17a7 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -2,7 +2,7 @@ /obj/item/clothing/head/bio_hood name = "bio hood" icon_state = "bio" - desc = "A hood that protects the head and face from biological comtaminants." + desc = "A hood that protects the head and face from biological contaminants." permeability_coefficient = 0.01 clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 8b87cf6f6e..85767852e4 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -15,7 +15,7 @@ icon_state = "golhood" desc = "A hood for a cloak." body_parts_covered = HEAD - flags_1 = NODROP_1 + item_flags = NODROP flags_inv = HIDEHAIR|HIDEEARS /obj/item/clothing/neck/cloak/suicide_act(mob/user) diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 1b28c71c4b..a598bd0959 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -17,13 +17,13 @@ item_state = "labcoat_cmo" /obj/item/clothing/suit/toggle/labcoat/emt - name = "EMT's jacket" + name = "\improper EMT's jacket" desc = "A dark blue jacket with reflective strips for emergency medical technicians." icon_state = "labcoat_emt" item_state = "labcoat_cmo" /obj/item/clothing/suit/toggle/labcoat/mad - name = "\improper The Mad's labcoat" + name = "\proper The Mad's labcoat" desc = "It makes you look capable of konking someone on the noggin and shooting them into space." icon_state = "labgreen" item_state = "labgreen" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index f6cb6a44ad..112a2790af 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -222,7 +222,7 @@ desc = "Forced to live on your shameful acting as a fake Mexican, you and your poncho have grown inseparable. Literally." icon_state = "ponchoshame" item_state = "ponchoshame" - flags_1 = NODROP_1 + item_flags = NODROP /obj/item/clothing/suit/whitedress name = "white dress" @@ -311,7 +311,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR /obj/item/clothing/suit/security/officer/russian - name = "russian officer's jacket" + name = "\improper Russian officer's jacket" desc = "This jacket is for those special occasions when a russian officer isn't required to wear their armor." icon_state = "officertanjacket" item_state = "officertanjacket" diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 0ac6dba14e..59f7a1c387 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -81,7 +81,7 @@ /obj/item/clothing/suit/wizrobe/yellow name = "yellow wizard robe" - desc = "A magnificant yellow gem-lined robe that seems to radiate power." + desc = "A magnificent yellow gem-lined robe that seems to radiate power." icon_state = "yellowwizard" item_state = "yellowwizrobe" diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 235eac6704..8d250ab766 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -14,7 +14,7 @@ /obj/item/clothing/accessory/proc/attach(obj/item/clothing/under/U, user) GET_COMPONENT(storage, /datum/component/storage) if(storage) - if(U.SendSignal(COMSIG_CONTAINS_STORAGE)) + if(SEND_SIGNAL(U, COMSIG_CONTAINS_STORAGE)) return FALSE U.TakeComponent(storage) detached_pockets = storage diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index afb9bff1c1..324c16fec7 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -22,7 +22,7 @@ resistance_flags = NONE /obj/item/clothing/under/color/black/ghost - flags_1 = NODROP_1|DROPDEL_1 + item_flags = NODROP | DROPDEL /obj/item/clothing/under/color/grey name = "grey jumpsuit" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 8c85f414e6..57ead15de8 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -38,7 +38,7 @@ can_adjust = FALSE /obj/item/clothing/under/roman - name = "roman armor" + name = "\improper Roman armor" desc = "Ancient Roman armor. Made of metallic and leather straps." icon_state = "roman" item_color = "roman" @@ -388,7 +388,7 @@ /obj/item/clothing/under/kilt/highlander desc = "You're the only one worthy of this kilt." - flags_1 = NODROP_1 + item_flags = NODROP /obj/item/clothing/under/sexymime name = "sexy mime outfit" @@ -667,7 +667,7 @@ icon = 'icons/obj/device.dmi' /obj/item/clothing/under/rank/security/navyblue/russian - name = "russian officer's uniform" + name = "\improper Russian officer's uniform" desc = "The latest in fashionable russian outfits." icon_state = "hostanclothes" item_state = "hostanclothes" diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index 7d309bd9c7..ea1db981e5 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -100,6 +100,7 @@ .["other"][I.type] += S.amount else if(I.tool_behaviour) .["tool_behaviour"] += I.tool_behaviour + .["other"][I.type] += 1 else if(istype(I, /obj/item/reagent_containers)) var/obj/item/reagent_containers/RC = I @@ -182,7 +183,7 @@ After its done loop over deletion list and delete all the shit that wasnt taken by parts loop - del_reqs return the list of parts resulting object will recieve as argument of CheckParts proc, on the atom level it will add them all to the contents, on all other levels it calls ..() and does whatever is needed afterwards but from contents list already + del_reqs return the list of parts resulting object will receive as argument of CheckParts proc, on the atom level it will add them all to the contents, on all other levels it calls ..() and does whatever is needed afterwards but from contents list already */ /datum/personal_crafting/proc/del_reqs(datum/crafting_recipe/R, mob/user) diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index d17090816c..a97758e294 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -40,8 +40,8 @@ return if(!isturf(I.loc)) //If it isn't on the floor. Do some checks to see if it's in our hands or a box. Otherwise give up. - if(I.loc.SendSignal(COMSIG_CONTAINS_STORAGE)) //in a container. - I.loc.SendSignal(COMSIG_TRY_STORAGE_TAKE, I, src) + if(SEND_SIGNAL(I.loc, COMSIG_CONTAINS_STORAGE)) //in a container. + SEND_SIGNAL(I.loc, COMSIG_TRY_STORAGE_TAKE, I, src) if(!user.dropItemToGround(I)) return diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index 5f4603e35e..50a845a689 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -12,7 +12,7 @@ w_class = WEIGHT_CLASS_TINY icon = 'icons/obj/toy.dmi' icon_state = "rag" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON container_type = OPENCONTAINER amount_per_transfer_from_this = 5 possible_transfer_amounts = list() @@ -46,5 +46,5 @@ user.visible_message("[user] starts to wipe down [A] with [src]!", "You start to wipe down [A] with [src]...") if(do_after(user,30, target = A)) user.visible_message("[user] finishes wiping off [A]!", "You finish wiping off [A].") - A.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) + SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) return diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index c323f1edf2..e8847adb11 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -11,7 +11,8 @@ item_state = "electronic" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON slot_flags = ITEM_SLOT_BELT var/scanning = 0 var/list/log = list() @@ -200,4 +201,4 @@ return to_chat(user, "Scanner Report") for(var/iterLog in log) - to_chat(user, iterLog) \ No newline at end of file + to_chat(user, iterLog) diff --git a/code/modules/events/aurora_caelus.dm b/code/modules/events/aurora_caelus.dm index 745e8a6ac3..89a84d3494 100644 --- a/code/modules/events/aurora_caelus.dm +++ b/code/modules/events/aurora_caelus.dm @@ -14,8 +14,8 @@ announceWhen = 1 startWhen = 9 endWhen = 50 - var/list/aurora_colors = list("#A2FF80", "#A2FF8B", "#A2FF96", "#A2FFA5", "#A2FFB6", "#A2FFC7", "#A2FFDE") - var/aurora_progress = 0 //this cycles from 1 to 7, slowly changing colors from gentle green to gentle blue + var/list/aurora_colors = list("#A2FF80", "#A2FF8B", "#A2FF96", "#A2FFA5", "#A2FFB6", "#A2FFC7", "#A2FFDE", "#A2FFEE") + var/aurora_progress = 0 //this cycles from 1 to 8, slowly changing colors from gentle green to gentle blue /datum/round_event/aurora_caelus/announce() priority_announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull. Nanotrasen has approved a short break for all employees to relax and observe this very rare event. During this time, starlight will be bright but gentle, shifting between quiet green and blue colors. Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space. We hope you enjoy the lights.", diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 81e93244ea..f09c0481f6 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -61,7 +61,7 @@ else D = new virus_type() else - D = make_virus(max_severity, max_severity) + D = new /datum/disease/advance/random(max_severity, max_severity) D.carrier = TRUE H.ForceContractDisease(D, FALSE, TRUE) @@ -73,23 +73,3 @@ message_admins("An event has triggered a random advanced virus outbreak on [ADMIN_LOOKUPFLW(H)]! It has these symptoms: [english_list(name_symptoms)]") log_game("An event has triggered a random advanced virus outbreak on [key_name(H)]! It has these symptoms: [english_list(name_symptoms)]") break - -/datum/round_event/disease_outbreak/proc/make_virus(max_symptoms, max_level) - if(max_symptoms > VIRUS_SYMPTOM_LIMIT) - max_symptoms = VIRUS_SYMPTOM_LIMIT - var/datum/disease/advance/A = new /datum/disease/advance() - var/list/datum/symptom/possible_symptoms = list() - for(var/symptom in subtypesof(/datum/symptom)) - var/datum/symptom/S = symptom - if(initial(S.level) > max_level) - continue - if(initial(S.level) <= 0) //unobtainable symptoms - continue - possible_symptoms += S - for(var/i in 1 to max_symptoms) - var/datum/symptom/chosen_symptom = pick_n_take(possible_symptoms) - if(chosen_symptom) - var/datum/symptom/S = new chosen_symptom - A.symptoms += S - A.Refresh() //just in case someone already made and named the same disease - return A diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm index 180589b4f1..a6e08fbd8c 100644 --- a/code/modules/events/wizard/curseditems.dm +++ b/code/modules/events/wizard/curseditems.dm @@ -50,7 +50,7 @@ var/obj/item/I = new J //dumb but required because of byond throwing a fit anytime new gets too close to a list H.dropItemToGround(H.get_item_by_slot(i), TRUE) H.equip_to_slot_or_del(I, i) - I.flags_1 |= NODROP_1 | DROPDEL_1 + I.item_flags |= NODROP | DROPDEL I.name = "cursed " + I.name for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) diff --git a/code/modules/events/wizard/rpgloot.dm b/code/modules/events/wizard/rpgloot.dm index 08cfe7aeea..d94ee0e212 100644 --- a/code/modules/events/wizard/rpgloot.dm +++ b/code/modules/events/wizard/rpgloot.dm @@ -16,7 +16,7 @@ GET_COMPONENT_FROM(STR, /datum/component/storage, S) if(prob(upgrade_scroll_chance) && S.contents.len < STR.max_items && !S.invisibility) var/obj/item/upgradescroll/scroll = new - S.SendSignal(COMSIG_TRY_STORAGE_INSERT, scroll, null, TRUE, TRUE) + SEND_SIGNAL(S, COMSIG_TRY_STORAGE_INSERT, scroll, null, TRUE, TRUE) upgrade_scroll_chance = max(0,upgrade_scroll_chance-100) upgrade_scroll_chance += 25 @@ -77,7 +77,7 @@ attached = null /datum/rpg_loot/proc/randomise() - var/static/list/prefixespositive = list("greater", "major", "blessed", "superior", "enpowered", "honed", "true", "glorious", "robust") + var/static/list/prefixespositive = list("greater", "major", "blessed", "superior", "empowered", "honed", "true", "glorious", "robust") var/static/list/prefixesnegative = list("lesser", "minor", "blighted", "inferior", "enfeebled", "rusted", "unsteady", "tragic", "gimped") var/static/list/suffixes = list("orc slaying", "elf slaying", "corgi slaying", "strength", "dexterity", "constitution", "intelligence", "wisdom", "charisma", "the forest", "the hills", "the plains", "the sea", "the sun", "the moon", "the void", "the world", "the fool", "many secrets", "many tales", "many colors", "rending", "sundering", "the night", "the day") diff --git a/code/modules/fields/gravity.dm b/code/modules/fields/gravity.dm new file mode 100644 index 0000000000..8b16bb6487 --- /dev/null +++ b/code/modules/fields/gravity.dm @@ -0,0 +1,17 @@ +/datum/proximity_monitor/advanced/gravity + name = "modified gravity zone" + setup_field_turfs = TRUE + var/gravity_value = 0 + var/list/grav_components = list() + field_shape = FIELD_SHAPE_RADIUS_SQUARE + +/datum/proximity_monitor/advanced/gravity/setup_field_turf(turf/T) + . = ..() + grav_components[T] = T.AddComponent(/datum/component/forced_gravity,gravity_value) + +/datum/proximity_monitor/advanced/gravity/cleanup_field_turf(turf/T) + . = ..() + var/datum/component/forced_gravity/G = grav_components[T] + grav_components -= T + if(G) + qdel(G) \ No newline at end of file diff --git a/code/modules/fields/turf_objects.dm b/code/modules/fields/turf_objects.dm index 7d7454f46a..d37036d83c 100644 --- a/code/modules/fields/turf_objects.dm +++ b/code/modules/fields/turf_objects.dm @@ -6,7 +6,7 @@ icon_state = null alpha = 0 invisibility = INVISIBILITY_ABSTRACT - flags_1 = ABSTRACT_1|ON_BORDER_1 + flags_1 = ON_BORDER_1 mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/datum/proximity_monitor/advanced/parent = null diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 1ade5070a7..a21747837b 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -915,7 +915,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( /datum/hallucination/fake_alert/New(mob/living/carbon/C, forced = TRUE, specific, duration = 150) set waitfor = FALSE ..() - var/alert_type = pick("not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","weightless","fire","locked","hacked","temphot","tempcold","pressure") + var/alert_type = pick("not_enough_oxy","not_enough_tox","not_enough_co2","too_much_oxy","too_much_co2","too_much_tox","newlaw","nutrition","charge","gravity","fire","locked","hacked","temphot","tempcold","pressure") if(specific) alert_type = specific feedback_details += "Type: [alert_type]" @@ -937,7 +937,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( target.throw_alert(alert_type, /obj/screen/alert/fat, override = TRUE) else target.throw_alert(alert_type, /obj/screen/alert/starving, override = TRUE) - if("weightless") + if("gravity") target.throw_alert(alert_type, /obj/screen/alert/weightless, override = TRUE) if("fire") target.throw_alert(alert_type, /obj/screen/alert/fire, override = TRUE) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index dc903dce85..d84deb8132 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -250,6 +250,11 @@ list_reagents = list("beer" = 30) foodtype = GRAIN | ALCOHOL +/obj/item/reagent_containers/food/drinks/beer/light + name = "Carp Lite" + desc = "Brewed with \"Pure Ice Asteroid Spring Water\"." + list_reagents = list("light_beer" = 30) + /obj/item/reagent_containers/food/drinks/ale name = "Magm-Ale" desc = "A true dorf's drink of choice." diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm index 375ce80f96..f9d9a3d85a 100644 --- a/code/modules/food_and_drinks/food.dm +++ b/code/modules/food_and_drinks/food.dm @@ -23,15 +23,15 @@ if(foodtype & H.dna.species.toxic_food) to_chat(H,"What the hell was that thing?!") H.adjust_disgust(25 + 30 * fraction) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food) else if(foodtype & H.dna.species.disliked_food) to_chat(H,"That didn't taste very good...") H.adjust_disgust(11 + 15 * fraction) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food) else if(foodtype & H.dna.species.liked_food) to_chat(H,"I love this taste!") H.adjust_disgust(-5 + -2.5 * fraction) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food) else if(foodtype & H.dna.species.toxic_food) to_chat(H, "You don't feel so good...") diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 3df4ca4bd0..e98aae37e3 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -118,8 +118,8 @@ if(INGREDIENTS_STACKPLUSTOP) filling.pixel_x = rand(-1,1) filling.pixel_y = 2 * ingredients.len - 1 - if(our_overlays) - our_overlays.Cut(ingredients.len) //???, add overlay calls later in this proc will queue the compile if necessary + if(overlays) + overlays -= overlays[ingredients.len] var/mutable_appearance/TOP = mutable_appearance(icon, "[icon_state]_top") TOP.pixel_y = 2 * ingredients.len + 3 add_overlay(filling) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 85371e0875..a74c7c6f69 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -109,7 +109,7 @@ M.satiety -= junkiness playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1) if(reagents.total_volume) - SendSignal(COMSIG_FOOD_EATEN, M, user) + SEND_SIGNAL(src, COMSIG_FOOD_EATEN, M, user) var/fraction = min(bitesize / reagents.total_volume, 1) reagents.reaction(M, INGEST, fraction) reagents.trans_to(M, bitesize) diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index 01105cf6d3..80aa588bae 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -406,8 +406,8 @@ name = "stack of pancakes" else name = initial(name) - if(contents.len < LAZYLEN(our_overlays)) - cut_overlay(our_overlays[our_overlays.len]) + if(contents.len < LAZYLEN(overlays)) + overlays-=overlays[overlays.len] /obj/item/reagent_containers/food/snacks/pancakes/examine(mob/user) var/ingredients_listed = "" diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 5efcb98faf..04177783e6 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -56,7 +56,7 @@ if(!H.creamed) // one layer at a time H.add_overlay(creamoverlay) H.creamed = TRUE - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "creampie", /datum/mood_event/creampie) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "creampie", /datum/mood_event/creampie) qdel(src) /obj/item/reagent_containers/food/snacks/pie/cream/nostun diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index bdcc8e14ac..5e7a3db504 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -95,7 +95,7 @@ God bless America. else if(default_deconstruction_screwdriver(user, "fryer_off", "fryer_off" ,I)) //where's the open maint panel icon?! return else - if(is_type_in_typecache(I, deepfry_blacklisted_items) || (I.flags_1 & (ABSTRACT_1 | NODROP_1 | DROPDEL_1))) + if(is_type_in_typecache(I, deepfry_blacklisted_items) || (I.item_flags & (ABSTRACT | NODROP | DROPDEL))) return ..() else if(!frying && user.transferItemToLoc(I, src)) to_chat(user, "You put [I] into [src].") diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm index 42da7e226b..b1da39daf3 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm @@ -92,7 +92,7 @@ to_chat(user, "[src] is at full capacity.") break else - if(T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src)) + if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src)) if(stored_food[sanitize(S.name)]) stored_food[sanitize(S.name)]++ else diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index d960d9945b..e6734b4b58 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -78,7 +78,7 @@ if(!ignore_clothing) for(var/obj/item/I in C.held_items + C.get_equipped_items()) - if(!(I.flags_1 & NODROP_1)) + if(!(I.item_flags & NODROP)) to_chat(user, "Subject may not have abiotic items on.") return diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index ee04e73fbe..8c4e0eaae0 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -129,7 +129,7 @@ if (contents.len>=max_n_of_items) to_chat(user, "[src] is full, you can't put anything in!") return 1 - if(T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src)) + if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src)) loaded++ if(loaded) diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 2ec1e56adb..3f917273b4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -60,7 +60,7 @@ for(var/obj/item/reagent_containers/food/snacks/S in T.contents) var/datum/food_processor_process/P = select_recipe(S) if(P) - if(T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src)) + if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src)) loaded++ if(loaded) @@ -106,7 +106,7 @@ for(var/O in src.contents) var/datum/food_processor_process/P = select_recipe(O) if (!P) - log_admin("DEBUG: [O] in processor hasnt got a suitable recipe. How did it get in there? Please report it immediatly!!!") + log_admin("DEBUG: [O] in processor doesn't have a suitable recipe. How did it get in there? Please report it immediately!!!") continue total_time += P.time var/offset = prob(50) ? -2 : 2 @@ -115,7 +115,7 @@ for(var/atom/movable/O in src.contents) var/datum/food_processor_process/P = select_recipe(O) if (!P) - log_admin("DEBUG: [O] in processor havent suitable recipe. How do you put it in?") + log_admin("DEBUG: [O] in processor doesn't have a suitable recipe. How do you put it in?") continue process_food(P, O) pixel_x = initial(pixel_x) //return to its spot after shaking diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 11da92dce0..79202e8190 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -125,8 +125,8 @@ else return TRUE else - if(O.loc.SendSignal(COMSIG_CONTAINS_STORAGE)) - return O.loc.SendSignal(COMSIG_TRY_STORAGE_TAKE, O, src) + if(SEND_SIGNAL(O.loc, COMSIG_CONTAINS_STORAGE)) + return SEND_SIGNAL(O.loc, COMSIG_TRY_STORAGE_TAKE, O, src) else O.forceMove(src) return TRUE @@ -327,7 +327,7 @@ desc = "A refrigerated storage unit for tasty tasty alcohol." /obj/machinery/smartfridge/drinks/accept_check(obj/item/O) - if(!istype(O, /obj/item/reagent_containers) || (O.flags_1 & ABSTRACT_1) || !O.reagents || !O.reagents.reagent_list.len) + if(!istype(O, /obj/item/reagent_containers) || (O.item_flags & ABSTRACT) || !O.reagents || !O.reagents.reagent_list.len) return FALSE if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/food/drinks) || istype(O, /obj/item/reagent_containers/food/condiment)) return TRUE @@ -375,7 +375,7 @@ return FALSE return TRUE return FALSE - if(!istype(O, /obj/item/reagent_containers) || (O.flags_1 & ABSTRACT_1)) + if(!istype(O, /obj/item/reagent_containers) || (O.item_flags & ABSTRACT)) return FALSE if(istype(O, /obj/item/reagent_containers/pill)) // empty pill prank ok return TRUE @@ -415,6 +415,7 @@ /obj/machinery/smartfridge/disks name = "disk compartmentalizer" desc = "A machine capable of storing a variety of disks. Denoted by most as the DSU (disk storage unit)." + icon_state = "disktoaster" /obj/machinery/smartfridge/disks/accept_check(obj/item/O) if(istype(O, /obj/item/disk/)) diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index d6e3232baa..55d5a806bd 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -208,7 +208,18 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic for(var/I in targets) //Grab us a client if possible - var/client/C = grab_client(I) + var/client/C + if (ismob(I)) + var/mob/M = I + if(M.client) + C = M.client + else if(istype(I, /client)) + C = I + else if(istype(I, /datum/mind)) + var/datum/mind/M = I + if(M.current && M.current.client) + C = M.current.client + if (!C) continue @@ -226,15 +237,3 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic // url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the Javascript. C << output(url_encode(url_encode(message)), "browseroutput:output") - -/proc/grab_client(target) - if(istype(target, /client)) - return target - else if(ismob(target)) - var/mob/M = target - if(M.client) - return M.client - else if(istype(target, /datum/mind)) - var/datum/mind/M = target - if(M.current && M.current.client) - return M.current.client diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js index 045177c92d..15265b2a93 100644 --- a/code/modules/goonchat/browserassets/js/browserOutput.js +++ b/code/modules/goonchat/browserassets/js/browserOutput.js @@ -95,8 +95,53 @@ if (typeof String.prototype.trim !== 'function') { }; } +// Linkify the contents of a node, within its parent. +function linkify(parent, insertBefore, text) { + var start = 0; + var match; + var regex = /(?:(?:https?:\/\/)|(?:www\.))(?:[^ ]*?\.[^ ]*?)+[-A-Za-z0-9+&@#\/%?=~_|$!:,.;()]+/ig; + while ((match = regex.exec(text)) !== null) { + // add the unmatched text + parent.insertBefore(document.createTextNode(text.substring(start, match.index)), insertBefore); + + var href = match[0]; + if (!/^https?:\/\//i.test(match[0])) { + href = "http://" + match[0]; + } + + // add the link + var link = document.createElement("a"); + link.href = href; + link.textContent = match[0]; + parent.insertBefore(link, insertBefore); + + start = regex.lastIndex; + } + if (start !== 0) { + // add the remaining text and remove the original text node + parent.insertBefore(document.createTextNode(text.substring(start)), insertBefore); + parent.removeChild(insertBefore); + } +} + +// Recursively linkify the children of a given node. +function linkify_node(node) { + var children = node.childNodes; + // work backwards to avoid the risk of looping forever on our own output + for (var i = children.length - 1; i >= 0; --i) { + var child = children[i]; + if (child.nodeType == Node.TEXT_NODE) { + // text is to be linkified + linkify(node, child, child.textContent); + } else if (child.nodeName != "A" && child.nodeName != "a") { + // do not linkify existing links + linkify_node(child); + } + } +} + //Shit fucking piece of crap that doesn't work god fuckin damn it -function linkify(text) { +function linkify_fallback(text) { var rex = /((?: 0) { diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 6cc3f56461..829cb55312 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -147,7 +147,7 @@ desc = "The Cross represents the Assistants that died for your sins." icon_state = "hotcrossbun" -/datum/crafting_recipe/food/food/hotcrossbun +/datum/crafting_recipe/food/hotcrossbun name = "Hot-Cross Bun" reqs = list( /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, @@ -171,7 +171,7 @@ icon_state = "briochecake_slice" filling_color = "#FFD700" -/datum/crafting_recipe/food/food/briochecake +/datum/crafting_recipe/food/briochecake name = "Brioche cake" reqs = list( /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index a1f1394e16..4590d58174 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -136,7 +136,7 @@ if(prob(30)) do_sparks(2, 1, T) T.ex_act(EXPLODE_LIGHT) - T.hotspot_expose(1000,500,1) + T.hotspot_expose(700,25,1) if(!(obj_flags & EMAGGED)) for(var/item in spawned) diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm index c83e7d5520..4134b0516f 100644 --- a/code/modules/holodeck/holo_effect.dm +++ b/code/modules/holodeck/holo_effect.dm @@ -100,6 +100,11 @@ /obj/effect/holodeck_effect/mobspawner/penguin mobtype = /mob/living/simple_animal/pet/penguin/emperor + +/obj/effect/holodeck_effect/mobspawner/penguin/Initialize() + if(prob(1)) + mobtype = /mob/living/simple_animal/pet/penguin/emperor/shamebrero + return ..() /obj/effect/holodeck_effect/mobspawner/penguin_baby mobtype = /mob/living/simple_animal/pet/penguin/baby diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index c7a775523a..c94e0ad32e 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -112,7 +112,7 @@ for(var/obj/item/reagent_containers/food/snacks/grown/G in PB.contents) if(i >= max_items) break - if(PB.SendSignal(COMSIG_TRY_STORAGE_TAKE, G, src)) + if(SEND_SIGNAL(PB, COMSIG_TRY_STORAGE_TAKE, G, src)) i++ if(iYou empty the plant bag into the biogenerator.") diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 89206342b1..6f5a1a0ee4 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -146,7 +146,7 @@ if(W.is_hot()) StartBurning() if(grill) - if(user.a_intent != INTENT_HARM && !(W.flags_1 & ABSTRACT_1)) + if(user.a_intent != INTENT_HARM && !(W.item_flags & ABSTRACT)) if(user.temporarilyRemoveItemFromInventory(W)) W.forceMove(get_turf(src)) var/list/click_params = params2list(params) @@ -203,7 +203,7 @@ /obj/structure/bonfire/proc/Burn() var/turf/current_location = get_turf(src) - current_location.hotspot_expose(1000,500,1) + current_location.hotspot_expose(1000,100,1) for(var/A in current_location) if(A == src) continue diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 5e75a57c32..f464fccf91 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -779,7 +779,7 @@ else if(istype(O, /obj/item/storage/bag/plants)) attack_hand(user) for(var/obj/item/reagent_containers/food/snacks/grown/G in locate(user.x,user.y,user.z)) - O.SendSignal(COMSIG_TRY_STORAGE_INSERT, G, user, TRUE) + SEND_SIGNAL(O, COMSIG_TRY_STORAGE_INSERT, G, user, TRUE) else if(default_unfasten_wrench(user, O)) return diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 4ba1aa0c33..2a28b7b097 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -9,7 +9,7 @@ resistance_flags = FLAMMABLE var/plantname = "Plants" // Name of plant when planted. var/product // A type path. The thing that is created when the plant is harvested. - var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overriden. + var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overridden. var/growing_icon = 'icons/obj/hydroponics/growing.dmi' //the file that stores the sprites of the growing plant from this seed. var/icon_grow // Used to override grow icon (default is "[species]-grow"). You can use one grow icon for multiple closely related plants with it. diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 6dd3f43592..d39163b547 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -8,8 +8,9 @@ w_class = WEIGHT_CLASS_SMALL icon = 'icons/obj/assemblies/electronic_setups.dmi' icon_state = "setup_small" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON materials = list() // To be filled later + datum_flags = DF_USE_TAG var/list/assembly_components = list() var/list/ckeys_allowed_to_scan = list() // Players who built the circuit can scan it as a ghost. var/max_components = IC_MAX_SIZE_BASE @@ -30,6 +31,8 @@ var/combat_circuits = 0 //number of combat cicuits in the assembly, used for diagnostic hud var/long_range_circuits = 0 //number of long range cicuits in the assembly, used for diagnostic hud var/prefered_hud_icon = "hudstat" // Used by the AR circuit to change the hud icon. + var/creator // circuit creator if any + var/static/next_assembly_id = 0 hud_possible = list(DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_TRACK_HUD, DIAG_CIRCUIT_HUD) //diagnostic hud overlays max_integrity = 50 pass_flags = 0 @@ -56,14 +59,17 @@ COLOR_ASSEMBLY_PURPLE ) +/obj/item/electronic_assembly/GenerateTag() + tag = "assembly_[next_assembly_id++]" + /obj/item/electronic_assembly/examine(mob/user) . = ..() if(can_anchor) - to_chat(user, "The anchoring bolts [anchored ? "are" : "can be"] wrenched in place and the maintainence panel [opened ? "can be" : "is"] screwed in place.") + to_chat(user, "The anchoring bolts [anchored ? "are" : "can be"] wrenched in place and the maintenance panel [opened ? "can be" : "is"] screwed in place.") else - to_chat(user, "The maintainence panel [opened ? "can be" : "is"] screwed in place.") + to_chat(user, "The maintenance panel [opened ? "can be" : "is"] screwed in place.") - if(isobserver(user) && ckeys_allowed_to_scan[user.ckey]) + if((isobserver(user) && ckeys_allowed_to_scan[user.ckey]) || IsAdminGhost(user)) to_chat(user, "You can scan this circuit."); /obj/item/electronic_assembly/proc/check_interactivity(mob/user) @@ -186,7 +192,7 @@ return 1 if(href_list["ghostscan"]) - if(isobserver(usr) && ckeys_allowed_to_scan[usr.ckey]) + if((isobserver(usr) && ckeys_allowed_to_scan[usr.ckey]) || IsAdminGhost(usr)) if(assembly_components.len) var/saved = "On circuit printers with cloning enabled, you may use the code below to clone the circuit:

[SScircuit.save_electronic_assembly(src)]" usr << browse(saved, "window=circuit_scan;size=500x600;border=1;can_resize=1;can_close=1;can_minimize=1") @@ -194,6 +200,9 @@ to_chat(usr, "The circuit is empty!") return + if(!check_interactivity(usr)) + return + if(href_list["rename"]) rename(usr) @@ -348,6 +357,7 @@ to_chat(user, "You slide [IC] inside [src].") playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) add_allowed_scanner(user.ckey) + investigate_log("had [IC]([IC.type]) inserted by [key_name(user)].", INVESTIGATE_CIRCUIT) add_component(IC) return TRUE @@ -387,6 +397,7 @@ playsound(src, 'sound/items/crowbar.ogg', 50, 1) user.put_in_hands(IC) add_allowed_scanner(user.ckey) + investigate_log("had [IC]([IC.type]) removed by [key_name(user)].", INVESTIGATE_CIRCUIT) return TRUE diff --git a/code/modules/integrated_electronics/core/debugger.dm b/code/modules/integrated_electronics/core/debugger.dm index 6abaf316da..d6f6a551ad 100644 --- a/code/modules/integrated_electronics/core/debugger.dm +++ b/code/modules/integrated_electronics/core/debugger.dm @@ -4,7 +4,8 @@ settings to specific circuits, or for debugging purposes. It can also pulse activation pins." icon = 'icons/obj/assemblies/electronic_tools.dmi' icon_state = "debugger" - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL var/data_to_write = null var/accepting_refs = FALSE diff --git a/code/modules/integrated_electronics/core/detailer.dm b/code/modules/integrated_electronics/core/detailer.dm index 9a718df73e..33f7ef96ad 100644 --- a/code/modules/integrated_electronics/core/detailer.dm +++ b/code/modules/integrated_electronics/core/detailer.dm @@ -3,7 +3,8 @@ desc = "A combination autopainter and flash anodizer designed to give electronic assemblies a colorful, wear-resistant finish." icon = 'icons/obj/assemblies/electronic_tools.dmi' icon_state = "detailer" - flags_1 = CONDUCT_1 | NOBLUDGEON_1 + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_SMALL var/data_to_write = null var/accepting_refs = FALSE @@ -44,4 +45,4 @@ if(!in_range(src, user)) return detail_color = color_list[color_choice] - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm index d5ebeb3001..57ad917246 100644 --- a/code/modules/integrated_electronics/core/integrated_circuit.dm +++ b/code/modules/integrated_electronics/core/integrated_circuit.dm @@ -24,7 +24,7 @@ var/category_text = "NO CATEGORY THIS IS A BUG" // To show up on circuit printer, and perhaps other places. var/removable = TRUE // Determines if a circuit is removable from the assembly. var/displayed_name = "" - + /* Integrated circuits are essentially modular machines. Each circuit has a specific function, and combining them inside Electronic Assemblies allows a creative player the means to solve many problems. Circuits are held inside an electronic assembly, and are wired using special tools. diff --git a/code/modules/integrated_electronics/core/pins.dm b/code/modules/integrated_electronics/core/pins.dm index cc81c20081..c1bbb900fa 100644 --- a/code/modules/integrated_electronics/core/pins.dm +++ b/code/modules/integrated_electronics/core/pins.dm @@ -209,6 +209,7 @@ D [1]/ || write_data_to_pin(new_data) /datum/integrated_io/activate/ask_for_pin_data(mob/user) // This just pulses the pin. + holder.investigate_log(" was manually pulsed by [key_name(user)].", INVESTIGATE_CIRCUIT) holder.check_then_do_work(ord,ignore_power = TRUE) to_chat(user, "You pulse \the [holder]'s [src] pin.") diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 2cab5ad3b9..f8d1424160 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -12,7 +12,6 @@ var/debug = FALSE // If it's upgraded and can clone, even without config settings. var/current_category = null var/cloning = FALSE // If the printer is currently creating a circuit - var/clone_countdown = 0 // Timestamp for when to print the circuit var/recycling = FALSE // If an assembly is being emptied into this printer var/list/program // Currently loaded save, in form of list @@ -29,26 +28,22 @@ debug = TRUE upgraded = TRUE can_clone = TRUE + fast_clone = TRUE w_class = WEIGHT_CLASS_TINY /obj/item/integrated_circuit_printer/Initialize() . = ..() AddComponent(/datum/component/material_container, list(MAT_METAL), MINERAL_MATERIAL_AMOUNT * 25, TRUE, list(/obj/item/stack, /obj/item/integrated_circuit, /obj/item/electronic_assembly)) -/obj/item/integrated_circuit_printer/Destroy() - STOP_PROCESSING(SSprocessing, src) - return ..() - -/obj/item/integrated_circuit_printer/process() +/obj/item/integrated_circuit_printer/proc/print_program(mob/user) if(!cloning) - STOP_PROCESSING(SSprocessing, src) - if(world.time >= clone_countdown || fast_clone) - var/turf/T = get_turf(src) - T.visible_message("[src] has finished printing its assembly!") - playsound(get_turf(T), 'sound/items/poster_being_created.ogg', 50, TRUE) - SScircuit.load_electronic_assembly(T, program) - cloning = FALSE - STOP_PROCESSING(SSprocessing, src) + return + visible_message("[src] has finished printing its assembly!") + playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE) + var/obj/item/electronic_assembly/assembly = SScircuit.load_electronic_assembly(get_turf(src), program) + assembly.creator = key_name(user) + assembly.investigate_log("was printed by [assembly.creator].", INVESTIGATE_CIRCUIT) + cloning = FALSE /obj/item/integrated_circuit_printer/attackby(obj/item/O, mob/user) if(istype(O, /obj/item/disk/integrated_circuit/upgrade/advanced)) @@ -141,7 +136,7 @@ if(!program) HTML += " {[fast_clone ? "Print" : "Begin Printing"] Assembly}" else if(cloning) - HTML += " {Cancel Print} - [DisplayTimeText(max(0, clone_countdown - world.time))] remaining until completion" + HTML += " {Cancel Print}" else HTML += " {[fast_clone ? "Print" : "Begin Printing"] Assembly}" @@ -206,6 +201,7 @@ if(istype(built, /obj/item/electronic_assembly)) var/obj/item/electronic_assembly/E = built + E.creator = key_name(usr) E.opened = TRUE E.update_icon() //reupdate diagnostic hud because it was put_in_hands() and not pickup()'ed @@ -213,6 +209,7 @@ E.diag_hud_set_circuitcell() E.diag_hud_set_circuitstat() E.diag_hud_set_circuittracking() + E.investigate_log("was printed by [E.creator].", INVESTIGATE_CIRCUIT) to_chat(usr, "[capitalize(built.name)] printed.") playsound(src, 'sound/items/jaws_pry.ogg', 50, TRUE) @@ -226,8 +223,10 @@ return switch(href_list["print"]) if("load") + if(cloning) + return var/input = input("Put your code there:", "loading", null, null) as message | null - if(!check_interactivity(usr)) + if(!check_interactivity(usr) || cloning) return if(!input) program = null @@ -254,7 +253,7 @@ to_chat(usr, "Metal cost: [program["metal_cost"]].") if("print") - if(!program) + if(!program || cloning) return if(program["requires_upgrades"] && !upgraded && !debug) @@ -263,12 +262,11 @@ if(program["unsupported_circuit"] && !debug) to_chat(usr, "This program uses components not supported by the specified assembly. Please change the assembly type in the save file to a supported one.") return - else if(fast_clone || debug) + else if(fast_clone) var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) if(debug || materials.use_amount_type(program["metal_cost"], MAT_METAL)) - var/obj/item/assembly = SScircuit.load_electronic_assembly(get_turf(src), program) - to_chat(usr, "[assembly] has been printed from the provided template!") - playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE) + cloning = TRUE + print_program(usr) else to_chat(usr, "You need [program["metal_cost"]] metal to build that!") else @@ -279,11 +277,10 @@ var/cloning_time = round(program["metal_cost"] / 15) cloning_time = min(cloning_time, MAX_CIRCUIT_CLONE_TIME) cloning = TRUE - clone_countdown = world.time + cloning_time to_chat(usr, "You begin printing a custom assembly. This will take approximately [DisplayTimeText(cloning_time)]. You can still print \ off normal parts during this time.") playsound(src, 'sound/items/poster_being_created.ogg', 50, TRUE) - START_PROCESSING(SSprocessing, src) + addtimer(CALLBACK(src, .proc/print_program, usr), cloning_time) if("cancel") if(!cloning || !program) @@ -291,7 +288,6 @@ to_chat(usr, "Cloning has been canceled. Metal cost has been refunded.") cloning = FALSE - clone_countdown = FALSE var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) materials.use_amount_type(-program["metal_cost"], MAT_METAL) //use negative amount to regain the cost diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index cca3f2babf..96ca6a3055 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -763,7 +763,7 @@ data.standard_format_data(message, text, key) ntnet_send(data) -/obj/item/integrated_circuit/input/ntnet_recieve(datum/netdata/data) +/obj/item/integrated_circuit/input/ntnet_receive(datum/netdata/data) set_pin_data(IC_OUTPUT, 1, data.sender_id) set_pin_data(IC_OUTPUT, 2, data.data["data"]) set_pin_data(IC_OUTPUT, 3, data.data["data_secondary"]) @@ -774,7 +774,7 @@ activate_pin(2) /obj/item/integrated_circuit/input/ntnet_advanced - name = "Low level NTNet transreciever" + name = "Low level NTNet transreceiver" desc = "Enables the sending and receiving of messages over NTNet via packet data protocol. Allows advanced control of message contents and signalling. Must use associative lists. Outputs associative list. Has a slower transmission rate than normal NTNet circuits, due to increased data processing complexity." extended_desc = "Data can be sent or received using the second pin on each side, \ with additonal data reserved for the third pin. When a message is received, the second activation pin \ @@ -787,7 +787,7 @@ "target NTNet addresses"= IC_PINTYPE_STRING, "data" = IC_PINTYPE_LIST, ) - outputs = list("recieved data" = IC_PINTYPE_LIST, "is_broadcast" = IC_PINTYPE_BOOLEAN) + outputs = list("received data" = IC_PINTYPE_LIST, "is_broadcast" = IC_PINTYPE_BOOLEAN) activators = list("send data" = IC_PINTYPE_PULSE_IN, "on data received" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH action_flags = IC_ACTION_LONG_RANGE @@ -811,7 +811,7 @@ data.data = message ntnet_send(data) -/obj/item/integrated_circuit/input/ntnet_advanced/ntnet_recieve(datum/netdata/data) +/obj/item/integrated_circuit/input/ntnet_advanced/ntnet_receive(datum/netdata/data) set_pin_data(IC_OUTPUT, 1, data.data) set_pin_data(IC_OUTPUT, 2, data.broadcast) push_data() @@ -1123,6 +1123,67 @@ else activate_pin(3) +/obj/item/integrated_circuit/input/atmospheric_analyzer + name = "atmospheric analyzer" + desc = "A miniaturized analyzer which can scan anything that contains gases. Leave target as NULL to scan the air around the assembly." + extended_desc = "The nth element of gas amounts is the number of moles of the \ + nth gas in gas list. \ + Pressure is in kPa, temperature is in Kelvin. \ + Due to programming limitations, scanning an object that does \ + not contain a gas will return the air around it instead." + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + inputs = list( + "target" = IC_PINTYPE_REF + ) + outputs = list( + "gas list" = IC_PINTYPE_LIST, + "gas amounts" = IC_PINTYPE_LIST, + "total moles" = IC_PINTYPE_NUMBER, + "pressure" = IC_PINTYPE_NUMBER, + "temperature" = IC_PINTYPE_NUMBER, + "volume" = IC_PINTYPE_NUMBER + ) + activators = list( + "scan" = IC_PINTYPE_PULSE_IN, + "on success" = IC_PINTYPE_PULSE_OUT, + "on failure" = IC_PINTYPE_PULSE_OUT + ) + power_draw_per_use = 5 + +/obj/item/integrated_circuit/input/atmospheric_analyzer/do_work() + for(var/i=1 to 6) + set_pin_data(IC_OUTPUT, i, null) + var/atom/target = get_pin_data_as_type(IC_INPUT, 1, /atom) + var/atom/movable/acting_object = get_object() + if(!target) + target = acting_object.loc + if(!target.Adjacent(acting_object)) + activate_pin(3) + return + + var/datum/gas_mixture/air_contents = target.return_air() + if(!air_contents) + activate_pin(3) + return + + var/list/gases = air_contents.gases + var/list/gas_names = list() + var/list/gas_amounts = list() + for(var/id in gases) + var/name = gases[id][GAS_META][META_GAS_NAME] + var/amt = round(gases[id][MOLES], 0.001) + gas_names.Add(name) + gas_amounts.Add(amt) + + set_pin_data(IC_OUTPUT, 1, gas_names) + set_pin_data(IC_OUTPUT, 2, gas_amounts) + set_pin_data(IC_OUTPUT, 3, round(air_contents.total_moles(), 0.001)) + set_pin_data(IC_OUTPUT, 4, round(air_contents.return_pressure(), 0.001)) + set_pin_data(IC_OUTPUT, 5, round(air_contents.temperature, 0.001)) + set_pin_data(IC_OUTPUT, 6, round(air_contents.return_volume(), 0.001)) + push_data() + activate_pin(2) + /obj/item/integrated_circuit/input/data_card_reader name = "data card reader" desc = "A circuit that can read from and write to data cards." diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index c391c62962..6267f2b622 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -367,12 +367,12 @@ var/atom/movable/acting_object = get_object() var/turf/T = get_turf(acting_object) var/obj/item/AM = get_pin_data_as_type(IC_INPUT, 1, /obj/item) - if(AM) + if(!QDELETED(AM) && !istype(AM, /obj/item/electronic_assembly) && !istype(AM, /obj/item/transfer_valve) && !istype(AM, /obj/item/twohanded) && !istype(assembly.loc, /obj/item/implant/storage)) var/mode = get_pin_data(IC_INPUT, 2) if(mode == 1) if(check_target(AM)) var/weightcheck = FALSE - if (AM.w_class < max_w_class) + if (AM.w_class <= max_w_class) weightcheck = TRUE else weightcheck = FALSE @@ -496,7 +496,10 @@ var/target_y_rel = round(get_pin_data(IC_INPUT, 2)) var/obj/item/A = get_pin_data_as_type(IC_INPUT, 3, /obj/item) - if(!A || A.anchored || A.throwing || A == assembly) + if(!A || A.anchored || A.throwing || A == assembly || istype(A, /obj/item/twohanded) || istype(A, /obj/item/transfer_valve)) + return + + if (istype(assembly.loc, /obj/item/implant/storage)) //Prevents the more abusive form of chestgun. return if(max_w_class && (A.w_class > max_w_class)) @@ -527,6 +530,7 @@ var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1) assembly.visible_message("[assembly] has thrown [A]!") + log_attack("[assembly] [REF(assembly)] has thrown [A].") A.forceMove(drop_location()) A.throw_at(locate(x_abs, y_abs, T.z), range, 3) diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index 2d820b016e..b887617ea8 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -46,6 +46,10 @@ for(var/mob/M in nearby_things) var/obj/O = assembly ? assembly : src to_chat(M, "[icon2html(O.icon, world, O.icon_state)] [stuff_to_display]") + if(assembly) + assembly.investigate_log("displayed \"[html_encode(stuff_to_display)]\" with [type].", INVESTIGATE_CIRCUIT) + else + investigate_log("displayed \"[html_encode(stuff_to_display)]\" as [type].", INVESTIGATE_CIRCUIT) /obj/item/integrated_circuit/output/screen/large name = "large screen" @@ -58,6 +62,10 @@ ..() var/obj/O = assembly ? get_turf(assembly) : loc O.visible_message("[icon2html(O.icon, world, O.icon_state)] [stuff_to_display]") + if(assembly) + assembly.investigate_log("displayed \"[html_encode(stuff_to_display)]\" with [type].", INVESTIGATE_CIRCUIT) + else + investigate_log("displayed \"[html_encode(stuff_to_display)]\" as [type].", INVESTIGATE_CIRCUIT) /obj/item/integrated_circuit/output/light name = "light" @@ -151,6 +159,10 @@ return vol = CLAMP(vol ,0 , 100) playsound(get_turf(src), selected_sound, vol, freq, -1) + if(assembly) + assembly.investigate_log("played a sound ([selected_sound]) with [type].", INVESTIGATE_CIRCUIT) + else + investigate_log("played a sound ([selected_sound]) as [type].", INVESTIGATE_CIRCUIT) /obj/item/integrated_circuit/output/sound/on_data_written() power_draw_per_use = get_pin_data(IC_INPUT, 2) * 15 @@ -234,8 +246,12 @@ text = get_pin_data(IC_INPUT, 1) if(!isnull(text)) var/atom/movable/A = get_object() - A.say(sanitize(text)) - + var/sanitized_text = sanitize(text) + A.say(sanitized_text) + if (assembly) + log_say("[assembly] [REF(assembly)] : [sanitized_text]") + else + log_say("[name] ([type]) : [sanitized_text]") /obj/item/integrated_circuit/output/video_camera name = "video camera circuit" diff --git a/code/modules/integrated_electronics/subtypes/power.dm b/code/modules/integrated_electronics/subtypes/power.dm index e760b21f72..4e5b6952a4 100644 --- a/code/modules/integrated_electronics/subtypes/power.dm +++ b/code/modules/integrated_electronics/subtypes/power.dm @@ -24,7 +24,7 @@ /obj/item/integrated_circuit/power/transmitter/large name = "large power transmission circuit" - desc = "This can wirelessly transmit a lot of electricity from an assembly's battery towards a nearby machine. Warning: Do not operate in flammable enviroments." + desc = "This can wirelessly transmit a lot of electricity from an assembly's battery towards a nearby machine. Warning: Do not operate in flammable environments." extended_desc = "This circuit transmits 20 kJ of electricity every time the activator pin is pulsed. The input pin must be \ a reference to a machine to send electricity to. This can be a battery, or anything containing a battery. The machine can exist \ inside the assembly, or adjacent to it. The power is sourced from the assembly's power cell. If the target is outside of the assembly, \ diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 3232acda71..2a6b4a1a80 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -186,7 +186,7 @@ //Always log attemped injections for admins var/contained = reagents.log_list() - add_logs(src, L, "attemped to inject", addition="which had [contained]") + add_logs(src, L, "attempted to inject", addition="which had [contained]") L.visible_message("[acting_object] is trying to inject [L]!", \ "[acting_object] is trying to inject you!") busy = TRUE diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 6ec7463ab5..ced08bbc6a 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -222,7 +222,7 @@ if(ACCESS_ENGINE) return "Engineering" if(ACCESS_ENGINE_EQUIP) - return "Power Equipment" + return "Power and Engineering Equipment" if(ACCESS_MAINT_TUNNELS) return "Maintenance" if(ACCESS_EXTERNAL_AIRLOCKS) diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm index b4679ae479..6a5a857ef0 100644 --- a/code/modules/jobs/job_exp.dm +++ b/code/modules/jobs/job_exp.dm @@ -143,8 +143,10 @@ GLOBAL_PROTECT(exp_to_update) L.update_exp_list(mins,ann) /datum/controller/subsystem/blackbox/proc/update_exp_db() - SSdbcore.MassInsert(format_table_name("role_time"), GLOB.exp_to_update, "ON DUPLICATE KEY UPDATE minutes = minutes + VALUES(minutes)") - LAZYCLEARLIST(GLOB.exp_to_update) + set waitfor = FALSE + var/list/old_minutes = GLOB.exp_to_update + GLOB.exp_to_update = null + SSdbcore.MassInsert(format_table_name("role_time"), old_minutes, "ON DUPLICATE KEY UPDATE minutes = minutes + VALUES(minutes)") //resets a client's exp to what was in the db. /client/proc/set_exp_from_db() @@ -154,10 +156,12 @@ GLOBAL_PROTECT(exp_to_update) return -1 var/datum/DBQuery/exp_read = SSdbcore.NewQuery("SELECT job, minutes FROM [format_table_name("role_time")] WHERE ckey = '[sanitizeSQL(ckey)]'") if(!exp_read.Execute()) + qdel(exp_read) return -1 var/list/play_records = list() while(exp_read.NextRow()) play_records[exp_read.item[1]] = text2num(exp_read.item[2]) + qdel(exp_read) for(var/rtype in SSjob.name_occupations) if(!play_records[rtype]) @@ -186,7 +190,9 @@ GLOBAL_PROTECT(exp_to_update) var/datum/DBQuery/flag_update = SSdbcore.NewQuery("UPDATE [format_table_name("player")] SET flags = '[prefs.db_flags]' WHERE ckey='[sanitizeSQL(ckey)]'") if(!flag_update.Execute()) + qdel(flag_update) return -1 + qdel(flag_update) /client/proc/update_exp_list(minutes, announce_changes = FALSE) @@ -264,10 +270,12 @@ GLOBAL_PROTECT(exp_to_update) var/datum/DBQuery/flags_read = SSdbcore.NewQuery("SELECT flags FROM [format_table_name("player")] WHERE ckey='[ckey]'") if(!flags_read.Execute()) + qdel(flags_read) return FALSE if(flags_read.NextRow()) prefs.db_flags = text2num(flags_read.item[1]) else if(isnull(prefs.db_flags)) prefs.db_flags = 0 //This PROBABLY won't happen, but better safe than sorry. + qdel(flags_read) return TRUE diff --git a/code/modules/jobs/job_types/civilian.dm b/code/modules/jobs/job_types/civilian.dm index 72d58088d1..8ec25e5f5e 100644 --- a/code/modules/jobs/job_types/civilian.dm +++ b/code/modules/jobs/job_types/civilian.dm @@ -18,7 +18,7 @@ Clown minimal_access = list(ACCESS_THEATRE) /datum/job/clown/after_spawn(mob/living/carbon/human/H, mob/M) - H.rename_self("clown", M.client) + H.apply_pref_name("clown", M.client) /datum/outfit/job/clown name = "Clown" @@ -81,7 +81,7 @@ Mime minimal_access = list(ACCESS_THEATRE) /datum/job/mime/after_spawn(mob/living/carbon/human/H, mob/M) - H.rename_self("mime", M.client) + H.apply_pref_name("mime", M.client) /datum/outfit/job/mime name = "Mime" diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/job.dm index 1cd7f59a27..5d4802f93a 100644 --- a/code/modules/jobs/job_types/job.dm +++ b/code/modules/jobs/job_types/job.dm @@ -49,7 +49,7 @@ var/exp_type_department = "" //The amount of good boy points playing this role will earn you towards a higher chance to roll antagonist next round - //can be overriden by antag_rep.txt config + //can be overridden by antag_rep.txt config var/antag_rep = 10 //Only override this proc @@ -81,7 +81,7 @@ if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions)) if(H.dna.species.id != "human") H.set_species(/datum/species/human) - H.rename_self("human", H.client) + H.apply_pref_name("human", H.client) purrbation_remove(H, silent=TRUE) //Equip the rest of the gear diff --git a/code/modules/jobs/job_types/silicon.dm b/code/modules/jobs/job_types/silicon.dm index 86246952f3..0738f20b24 100644 --- a/code/modules/jobs/job_types/silicon.dm +++ b/code/modules/jobs/job_types/silicon.dm @@ -34,7 +34,7 @@ AI H.forceMove(lateJoinCore.loc) qdel(lateJoinCore) var/mob/living/silicon/ai/AI = H - AI.rename_self("ai", M.client) //If this runtimes oh well jobcode is fucked. + AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked. //we may have been created after our borg if(SSticker.current_state == GAME_STATE_SETTING_UP) @@ -85,4 +85,4 @@ Cyborg return H.Robotize(FALSE, latejoin) /datum/job/cyborg/after_spawn(mob/living/silicon/robot/R, mob/M) - R.rename_self("cyborg", M.client) + R.updatename(M.client) diff --git a/code/modules/keybindings/bindings_human.dm b/code/modules/keybindings/bindings_human.dm index 14890cc7e2..5d02d9aedb 100644 --- a/code/modules/keybindings/bindings_human.dm +++ b/code/modules/keybindings/bindings_human.dm @@ -17,7 +17,7 @@ to_chat(user, "You can't fit anything in.") return if(thing) // put thing in belt - if(!equipped_belt.SendSignal(COMSIG_TRY_STORAGE_INSERT, thing, user.mob)) + if(!SEND_SIGNAL(equipped_belt, COMSIG_TRY_STORAGE_INSERT, thing, user.mob)) to_chat(user, "You can't fit anything in.") return if(!equipped_belt.contents.len) // nothing to take out @@ -45,7 +45,7 @@ to_chat(user, "You can't fit anything in.") return if(thing) // put thing in backpack - if(!equipped_backpack.SendSignal(COMSIG_TRY_STORAGE_INSERT, thing, user.mob)) + if(!SEND_SIGNAL(equipped_backpack, COMSIG_TRY_STORAGE_INSERT, thing, user.mob)) to_chat(user, "You can't fit anything in.") return if(!equipped_backpack.contents.len) // nothing to take out diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 4126cc4768..066ce22831 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -206,7 +206,7 @@ if(dat) user << browse("Penned by [author].
" + "[dat]", "window=book[window_size != null ? ";size=[window_size]" : ""]") user.visible_message("[user] opens a book titled \"[title]\" and begins reading intently.") - user.SendSignal(COMSIG_ADD_MOOD_EVENT, "book_nerd", /datum/mood_event/book_nerd) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "book_nerd", /datum/mood_event/book_nerd) onclose(user, "book") else to_chat(user, "This book is completely blank!") diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 367d3505a0..81e296e4c8 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -41,6 +41,8 @@ if(1) if (!SSdbcore.Connect()) dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance.
" + else if(QDELETED(user)) + return else if(!SQLquery) dat += "ERROR: Malformed search request. Please contact your system administrator for assistance.
" else @@ -50,12 +52,16 @@ var/datum/DBQuery/query_library_list_books = SSdbcore.NewQuery(SQLquery) if(!query_library_list_books.Execute()) dat += "ERROR: Unable to retrieve book listings. Please contact your system administrator for assistance.
" - while(query_library_list_books.NextRow()) - var/author = query_library_list_books.item[1] - var/title = query_library_list_books.item[2] - var/category = query_library_list_books.item[3] - var/id = query_library_list_books.item[4] - dat += "[author][title][category][id]" + else + while(query_library_list_books.NextRow()) + var/author = query_library_list_books.item[1] + var/title = query_library_list_books.item[2] + var/category = query_library_list_books.item[3] + var/id = query_library_list_books.item[4] + dat += "[author][title][category][id]" + qdel(query_library_list_books) + if(QDELETED(user)) + return dat += "
" dat += "\[Go Back\]
" var/datum/browser/popup = new(user, "publiclibrary", name, 600, 400) @@ -135,6 +141,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums GLOB.cachedbooks = list() var/datum/DBQuery/query_library_cache = SSdbcore.NewQuery("SELECT id, author, title, category FROM [format_table_name("library")] WHERE isnull(deleted)") if(!query_library_cache.Execute()) + qdel(query_library_cache) return while(query_library_cache.NextRow()) var/datum/cachedbook/newbook = new() @@ -143,6 +150,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums newbook.title = query_library_cache.item[3] newbook.category = query_library_cache.item[4] GLOB.cachedbooks += newbook + qdel(query_library_cache) @@ -414,12 +422,15 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums var/sqlauthor = sanitizeSQL(scanner.cache.author) var/sqlcontent = sanitizeSQL(scanner.cache.dat) var/sqlcategory = sanitizeSQL(upload_category) + var/msg = "[key_name(usr)] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs" var/datum/DBQuery/query_library_upload = SSdbcore.NewQuery("INSERT INTO [format_table_name("library")] (author, title, content, category, ckey, datetime, round_id_created) VALUES ('[sqlauthor]', '[sqltitle]', '[sqlcontent]', '[sqlcategory]', '[usr.ckey]', Now(), '[GLOB.round_id]')") if(!query_library_upload.Execute()) + qdel(query_library_upload) alert("Database error encountered uploading to Archive") return else - log_game("[key_name(usr)] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs") + log_game(msg) + qdel(query_library_upload) alert("Upload Complete. Uploaded title will be unavailable for printing for a short period") if(href_list["newspost"]) if(!GLOB.news_network) @@ -452,20 +463,23 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums cooldown = world.time + PRINTER_COOLDOWN var/datum/DBQuery/query_library_print = SSdbcore.NewQuery("SELECT * FROM [format_table_name("library")] WHERE id=[sqlid] AND isnull(deleted)") if(!query_library_print.Execute()) + qdel(query_library_print) say("PRINTER ERROR! Failed to print document (0x0000000F)") return while(query_library_print.NextRow()) var/author = query_library_print.item[2] var/title = query_library_print.item[3] var/content = query_library_print.item[4] - var/obj/item/book/B = new(get_turf(src)) - B.name = "Book: [title]" - B.title = title - B.author = author - B.dat = content - B.icon_state = "book[rand(1,8)]" - visible_message("[src]'s printer hums as it produces a completely bound book. How did it do that?") + if(!QDELETED(src)) + var/obj/item/book/B = new(get_turf(src)) + B.name = "Book: [title]" + B.title = title + B.author = author + B.dat = content + B.icon_state = "book[rand(1,8)]" + visible_message("[src]'s printer hums as it produces a completely bound book. How did it do that?") break + qdel(query_library_print) if(href_list["printbible"]) if(cooldown < world.time) var/obj/item/storage/book/bible/B = new /obj/item/storage/book/bible(src.loc) diff --git a/code/modules/library/random_books.dm b/code/modules/library/random_books.dm index e101a7143a..8fd12f6157 100644 --- a/code/modules/library/random_books.dm +++ b/code/modules/library/random_books.dm @@ -60,8 +60,7 @@ B.dat = query_get_random_books.item[4] B.name = "Book: [B.title]" B.icon_state= "book[rand(1,8)]" - else - return + qdel(query_get_random_books) /obj/structure/bookcase/random/fiction name = "bookcase (Fiction)" diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 537326fc45..89ec6a3a7e 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -23,7 +23,7 @@ if (l_color != NONSENSICAL_VALUE) light_color = l_color - SendSignal(COMSIG_ATOM_SET_LIGHT, l_range, l_power, l_color) + SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT, l_range, l_power, l_color) update_light() diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 381ce4bffe..dfc75c32ee 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -73,7 +73,7 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new) if(!key_len) key_len = length(key) else - throw EXCEPTION("Inconsistant key length in DMM") + throw EXCEPTION("Inconsistent key length in DMM") if(!measureOnly) grid_models[key] = dmmRegex.group[2] diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index 9c399826db..2c001571a1 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -224,7 +224,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also if(BAD_ZLEVEL) to_chat(user, "This uplink can only be used in a designed mining zone.") if(BAD_AREA) - to_chat(user, "Unable to acquire a targeting lock. Find an area clear of stuctures or entirely within one.") + to_chat(user, "Unable to acquire a targeting lock. Find an area clear of structures or entirely within one.") if(BAD_COORDS) to_chat(user, "Location is too close to the edge of the station's scanning range. Move several paces away and try again.") if(BAD_TURF) @@ -260,6 +260,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also dwidth = 3 width = 7 height = 5 + area_type = /area/construction/mining/aux_base /obj/structure/mining_shuttle_beacon name = "mining shuttle beacon" @@ -322,7 +323,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also break if(!Mport) - to_chat(user, "This station is not equipped with an approprite mining shuttle. Please contact Nanotrasen Support.") + to_chat(user, "This station is not equipped with an appropriate mining shuttle. Please contact Nanotrasen Support.") return var/obj/docking_port/mobile/mining_shuttle diff --git a/code/modules/mining/equipment/goliath_hide.dm b/code/modules/mining/equipment/goliath_hide.dm index 85feaecf73..48f0ca0be5 100644 --- a/code/modules/mining/equipment/goliath_hide.dm +++ b/code/modules/mining/equipment/goliath_hide.dm @@ -7,6 +7,6 @@ singular_name = "hide plate" max_amount = 6 novariants = FALSE - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_NORMAL - layer = MOB_LAYER \ No newline at end of file + layer = MOB_LAYER diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 558147af23..7cf16f6064 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -381,7 +381,7 @@ /obj/item/crusher_trophy/blaster_tubes/on_mark_detonation(mob/living/target, mob/living/user) deadly_shot = TRUE - addtimer(CALLBACK(src, .proc/reset_deadly_shot), 300, TIMER_OVERRIDE) + addtimer(CALLBACK(src, .proc/reset_deadly_shot), 300, TIMER_UNIQUE|TIMER_OVERRIDE) /obj/item/crusher_trophy/blaster_tubes/proc/reset_deadly_shot() deadly_shot = FALSE diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index cd6afa20f7..ca313182b6 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -63,7 +63,8 @@ /obj/item/pickaxe/drill/cyborg name = "cyborg mining drill" desc = "An integrated electric mining drill." - flags_1 = NODROP_1 + item_flags = NODROP + flags_1 = NONE /obj/item/pickaxe/drill/diamonddrill name = "diamond-tipped mining drill" diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm index 7fa6721c0f..43be61dd77 100644 --- a/code/modules/mining/equipment/regenerative_core.dm +++ b/code/modules/mining/equipment/regenerative_core.dm @@ -21,7 +21,7 @@ name = "regenerative core" desc = "All that remains of a hivelord. It can be used to heal completely, but it will rapidly decay into uselessness." icon_state = "roro core 2" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON slot = "hivecore" force = 0 actions_types = list(/datum/action/item_action/organ_action/use) diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 9ad6d59c3a..3005a29dcd 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -4,7 +4,7 @@ icon_state = "away" dynamic_lighting = DYNAMIC_LIGHTING_FORCED requires_power = FALSE - has_gravity = TRUE + has_gravity = STANDARD_GRAVITY valid_territory = FALSE //Survival Capsule diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index 9cb3f5c323..5e2e8bdd5a 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -54,18 +54,20 @@ . = ..() if(. & EMP_PROTECT_SELF) return - var/triggered = FALSE - if(usr.get_item_by_slot(SLOT_BELT) == src) - if(power == 1) - triggered = TRUE - else if(power == 2 && prob(50)) - triggered = TRUE + var/mob/M = loc + if(istype(M)) + var/triggered = FALSE + if(M.get_item_by_slot(SLOT_BELT) == src) + if(power == 1) + triggered = TRUE + else if(power == 2 && prob(50)) + triggered = TRUE - if(triggered) - usr.visible_message("[src] overloads and activates!") - SSblackbox.record_feedback("tally", "jaunter", 1, "EMP") // EMP accidental activation - activate(usr) + if(triggered) + M.visible_message("[src] overloads and activates!") + SSblackbox.record_feedback("tally", "jaunter", 1, "EMP") // EMP accidental activation + activate(M) /obj/item/wormhole_jaunter/proc/chasm_react(mob/user) if(user.get_item_by_slot(SLOT_BELT) == src) diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index a6cbbfcedd..d6ea55855d 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -63,7 +63,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) to_chat(user, "You attach the pack to [A] and activate it.") if(loc == user && istype(user.back, /obj/item/storage/backpack)) var/obj/item/storage/backpack/B = user.back - B.SendSignal(COMSIG_TRY_STORAGE_INSERT, src, user, FALSE, FALSE) + SEND_SIGNAL(B, COMSIG_TRY_STORAGE_INSERT, src, user, FALSE, FALSE) uses_left-- if(uses_left <= 0) user.transferItemToLoc(src, A, TRUE) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index bcb186a776..79adcdf9d8 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -189,7 +189,7 @@ activated() /obj/item/rod_of_asclepius/proc/activated() - flags_1 = NODROP_1 | DROPDEL_1 + item_flags = NODROP | DROPDEL desc = "A short wooden rod with a mystical snake inseparably gripping itself and the rod to your forearm. It flows with a healing energy that disperses amongst yourself and those around you. " icon_state = "asclepius_active" activated = TRUE @@ -388,7 +388,7 @@ righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' fire_sound = 'sound/weapons/batonextend.ogg' max_charges = 1 - flags_1 = NOBLUDGEON_1 + item_flags = NEEDS_PERMIT | NOBLUDGEON force = 18 /obj/item/ammo_casing/magic/hook diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 8bef2ccf6a..026170da09 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -82,7 +82,7 @@ /obj/machinery/mineral/processing_unit/Initialize() . = ..() proximity_monitor = new(src, 1) - AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, FALSE, list(/obj/item/stack)) + AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, TRUE, list(/obj/item/stack)) stored_research = new /datum/techweb/specialized/autounlocking/smelter /obj/machinery/mineral/processing_unit/Destroy() diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 03a93a6a52..a9230195ac 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -127,7 +127,7 @@ flick(icon_deny, src) return if(prize.cost > inserted_id.mining_points) - to_chat(usr, "Error: Insufficent points for [prize.equipment_name]!") + to_chat(usr, "Error: Insufficient points for [prize.equipment_name]!") flick(icon_deny, src) else inserted_id.mining_points -= prize.cost diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 23d8d816d4..3809514f02 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -299,7 +299,7 @@ /obj/item/slimepotion/slime/sentience/mining name = "minebot AI upgrade" - desc = "Can be used to grant sentience to minebots. Is incompatable with minebot armor and melee upgrades, and will override them." + desc = "Can be used to grant sentience to minebots. It's incompatible with minebot armor and melee upgrades, and will override them." icon_state = "door_electronics" icon = 'icons/obj/module.dmi' sentience_type = SENTIENCE_MINEBOT diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 2835323172..9e4e1bbb53 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -337,7 +337,7 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ var/index = sideslist.Find(coinflip) message_admins("coinflip landed on [coinflip] which is [index] in sideslist") if (index==2)//tails - user.visible_message("\the [src] lands on [coinflip]! [user] promply falls over, dead!") + user.visible_message("\the [src] lands on [coinflip]! [user] promptly falls over, dead!") user.adjustOxyLoss(200) user.death(0) else diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 78f4676d4e..b158815dac 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -12,8 +12,8 @@ /obj/structure/ore_box/attackby(obj/item/W, mob/user, params) if (istype(W, /obj/item/stack/ore)) user.transferItemToLoc(W, src) - else if(W.SendSignal(COMSIG_CONTAINS_STORAGE)) - W.SendSignal(COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/stack/ore, src) + else if(SEND_SIGNAL(W, COMSIG_CONTAINS_STORAGE)) + SEND_SIGNAL(W, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/stack/ore, src) to_chat(user, "You empty the ore in [W] into \the [src].") else return ..() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 04b7b13be8..14bd0ffaab 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -54,15 +54,19 @@ if(src.client && src.client.holder) isadmin = 1 var/datum/DBQuery/query_get_new_polls = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE [(isadmin ? "" : "adminonly = false AND")] Now() BETWEEN starttime AND endtime AND id NOT IN (SELECT pollid FROM [format_table_name("poll_vote")] WHERE ckey = \"[ckey]\") AND id NOT IN (SELECT pollid FROM [format_table_name("poll_textreply")] WHERE ckey = \"[ckey]\")") + var/rs = REF(src) if(query_get_new_polls.Execute()) var/newpoll = 0 if(query_get_new_polls.NextRow()) newpoll = 1 if(newpoll) - output += "

Show Player Polls (NEW!)

" + output += "

Show Player Polls (NEW!)

" else - output += "

Show Player Polls

" + output += "

Show Player Polls

" + qdel(query_get_new_polls) + if(QDELETED(src)) + return output += "
" @@ -71,8 +75,6 @@ popup.set_window_options("can_close=0") popup.set_content(output) popup.open(0) - return - /mob/dead/new_player/Topic(href, href_list[]) if(src != usr) @@ -310,6 +312,8 @@ return JOB_UNAVAILABLE_SLOTFULL if(jobban_isbanned(src,rank)) return JOB_UNAVAILABLE_BANNED + if(QDELETED(src)) + return JOB_UNAVAILABLE_GENERIC if(!job.player_old_enough(client)) return JOB_UNAVAILABLE_ACCOUNTAGE if(job.required_playtime_remaining(client)) @@ -475,7 +479,12 @@ var/mob/living/carbon/human/H = new(loc) - if(CONFIG_GET(flag/force_random_names) || jobban_isbanned(src, "appearance")) + var/frn = CONFIG_GET(flag/force_random_names) + if(!frn) + frn = jobban_isbanned(src, "appearance") + if(QDELETED(src)) + return + if(frn) client.prefs.random_character() client.prefs.real_name = client.prefs.pref_species.random_name(gender,1) client.prefs.copy_to(H) diff --git a/code/modules/mob/dead/new_player/poll.dm b/code/modules/mob/dead/new_player/poll.dm index ce710e5186..388f63961b 100644 --- a/code/modules/mob/dead/new_player/poll.dm +++ b/code/modules/mob/dead/new_player/poll.dm @@ -8,16 +8,20 @@ return var/datum/DBQuery/query_poll_get = SSdbcore.NewQuery("SELECT id, question FROM [format_table_name("poll_question")] WHERE Now() BETWEEN starttime AND endtime [(client.holder ? "" : "AND adminonly = false")]") if(!query_poll_get.warn_execute()) + qdel(query_poll_get) return var/output = "
Player polls
" var/i = 0 + var/rs = REF(src) while(query_poll_get.NextRow()) var/pollid = query_poll_get.item[1] var/pollquestion = query_poll_get.item[2] - output += "" + output += "" i++ + qdel(query_poll_get) output += "
[pollquestion]
[pollquestion]
" - src << browse(output,"window=playerpolllist;size=500x300") + if(!QDELETED(src)) + src << browse(output,"window=playerpolllist;size=500x300") /mob/dead/new_player/proc/poll_player(pollid) if(!pollid) @@ -27,6 +31,7 @@ return var/datum/DBQuery/query_poll_get_details = SSdbcore.NewQuery("SELECT starttime, endtime, question, polltype, multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") if(!query_poll_get_details.warn_execute()) + qdel(query_poll_get_details) return var/pollstarttime = "" var/pollendtime = "" @@ -39,23 +44,28 @@ pollquestion = query_poll_get_details.item[3] polltype = query_poll_get_details.item[4] multiplechoiceoptions = text2num(query_poll_get_details.item[5]) + qdel(query_poll_get_details) switch(polltype) if(POLLTYPE_OPTION) var/datum/DBQuery/query_option_get_votes = SSdbcore.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_option_get_votes.warn_execute()) + qdel(query_option_get_votes) return var/votedoptionid = 0 if(query_option_get_votes.NextRow()) votedoptionid = text2num(query_option_get_votes.item[1]) + qdel(query_option_get_votes) var/list/datum/polloption/options = list() var/datum/DBQuery/query_option_options = SSdbcore.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_option_options.warn_execute()) + qdel(query_option_options) return while(query_option_options.NextRow()) var/datum/polloption/PO = new() PO.optionid = text2num(query_option_options.item[1]) PO.optiontext = query_option_options.item[2] options += PO + qdel(query_option_options) var/output = "
Player poll
" output += "Question: [pollquestion]
" output += "Poll runs from [pollstarttime] until [pollendtime]

" @@ -84,10 +94,12 @@ if(POLLTYPE_TEXT) var/datum/DBQuery/query_text_get_votes = SSdbcore.NewQuery("SELECT replytext FROM [format_table_name("poll_textreply")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_text_get_votes.warn_execute()) + qdel(query_text_get_votes) return var/vote_text = "" if(query_text_get_votes.NextRow()) vote_text = query_text_get_votes.item[1] + qdel(query_text_get_votes) var/output = "

Player poll
" output += "Question: [pollquestion]
" output += "Feedback gathering runs from [pollstarttime] until [pollendtime]

" @@ -113,6 +125,7 @@ if(POLLTYPE_RATING) var/datum/DBQuery/query_rating_get_votes = SSdbcore.NewQuery("SELECT o.text, v.rating FROM [format_table_name("poll_option")] o, [format_table_name("poll_vote")] v WHERE o.pollid = [pollid] AND v.ckey = '[ckey]' AND o.id = v.optionid") if(!query_rating_get_votes.warn_execute()) + qdel(query_rating_get_votes) return var/output = "

Player poll
" output += "Question: [pollquestion]
" @@ -122,6 +135,7 @@ var/optiontext = query_rating_get_votes.item[1] rating = query_rating_get_votes.item[2] output += "
[optiontext] - [rating]" + qdel(query_rating_get_votes) if(!rating) output += "
" output += "" @@ -131,6 +145,7 @@ var/maxid = 0 var/datum/DBQuery/query_rating_options = SSdbcore.NewQuery("SELECT id, text, minval, maxval, descmin, descmid, descmax FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_rating_options.warn_execute()) + qdel(query_rating_options) return while(query_rating_options.NextRow()) var/optionid = text2num(query_rating_options.item[1]) @@ -157,23 +172,28 @@ else output += "" output += "" + qdel(query_rating_options) output += "" output += "" output += "

" - src << browse(null ,"window=playerpolllist") - src << browse(output,"window=playerpoll;size=500x500") + if(!QDELETED(src)) + src << browse(null ,"window=playerpolllist") + src << browse(output,"window=playerpoll;size=500x500") if(POLLTYPE_MULTI) var/datum/DBQuery/query_multi_get_votes = SSdbcore.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_multi_get_votes.warn_execute()) + qdel(query_multi_get_votes) return var/list/votedfor = list() while(query_multi_get_votes.NextRow()) votedfor.Add(text2num(query_multi_get_votes.item[1])) + qdel(query_multi_get_votes) var/list/datum/polloption/options = list() var/maxoptionid = 0 var/minoptionid = 0 var/datum/DBQuery/query_multi_options = SSdbcore.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_multi_options.warn_execute()) + qdel(query_multi_options) return while(query_multi_options.NextRow()) var/datum/polloption/PO = new() @@ -184,6 +204,7 @@ if(PO.optionid < minoptionid || !minoptionid) minoptionid = PO.optionid options += PO + qdel(query_multi_options) var/output = "
Player poll
" output += "Question: [pollquestion]
You can select up to [multiplechoiceoptions] options. If you select more, the first [multiplechoiceoptions] will be saved.
" output += "Poll runs from [pollstarttime] until [pollendtime]

" @@ -216,22 +237,26 @@ var/datum/DBQuery/query_irv_get_votes = SSdbcore.NewQuery("SELECT optionid FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_irv_get_votes.warn_execute()) + qdel(query_irv_get_votes) return var/list/votedfor = list() while(query_irv_get_votes.NextRow()) votedfor.Add(text2num(query_irv_get_votes.item[1])) + qdel(query_irv_get_votes) var/list/datum/polloption/options = list() var/datum/DBQuery/query_irv_options = SSdbcore.NewQuery("SELECT id, text FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_irv_options.warn_execute()) + qdel(query_irv_options) return while(query_irv_options.NextRow()) var/datum/polloption/PO = new() PO.optionid = text2num(query_irv_options.item[1]) PO.optiontext = query_irv_options.item[2] options["[PO.optionid]"] += PO + qdel(query_irv_options) //if they already voted, use their sort if (votedfor.len) @@ -332,10 +357,13 @@ return var/datum/DBQuery/query_hasvoted = SSdbcore.NewQuery("SELECT id FROM `[format_table_name(table)]` WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_hasvoted.warn_execute()) + qdel(query_hasvoted) return if(query_hasvoted.NextRow()) + qdel(query_hasvoted) to_chat(usr, "You've already replied to this poll.") return + qdel(query_hasvoted) . = "Player" if(client.holder) . = client.holder.rank.name @@ -364,9 +392,12 @@ //validate the poll is actually the right type of poll and its still active var/datum/DBQuery/query_validate_poll = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_question")] WHERE id = [pollid] AND Now() BETWEEN starttime AND endtime AND polltype = '[type]' [(holder ? "" : "AND adminonly = false")]") if(!query_validate_poll.warn_execute()) + qdel(query_validate_poll) return 0 if (!query_validate_poll.NextRow()) + qdel(query_validate_poll) return 0 + qdel(query_validate_poll) return 1 /mob/dead/new_player/proc/vote_on_irv_poll(pollid, list/votelist) @@ -397,10 +428,12 @@ //lets collect the options var/datum/DBQuery/query_irv_id = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_option")] WHERE pollid = [pollid]") if(!query_irv_id.warn_execute()) + qdel(query_irv_id) return 0 var/list/optionlist = list() while (query_irv_id.NextRow()) optionlist += text2num(query_irv_id.item[1]) + qdel(query_irv_id) //validate their votes are actually in the list of options and actually numbers var/list/numberedvotelist = list() @@ -428,13 +461,18 @@ //now lets delete their old votes (if any) var/datum/DBQuery/query_irv_del_old = SSdbcore.NewQuery("DELETE FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_irv_del_old.warn_execute()) + qdel(query_irv_del_old) return 0 + qdel(query_irv_del_old) //now to add the new ones. var/datum/DBQuery/query_irv_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES [sqlrowlist]") if(!query_irv_vote.warn_execute()) + qdel(query_irv_vote) return 0 - src << browse(null,"window=playerpoll") + qdel(query_irv_vote) + if(!QDELETED(src)) + src << browse(null,"window=playerpoll") return 1 @@ -454,8 +492,11 @@ return var/datum/DBQuery/query_option_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") if(!query_option_vote.warn_execute()) + qdel(query_option_vote) return - usr << browse(null,"window=playerpoll") + qdel(query_option_vote) + if(!QDELETED(usr)) + usr << browse(null,"window=playerpoll") return 1 /mob/dead/new_player/proc/log_text_poll_reply(pollid, replytext) @@ -481,8 +522,11 @@ return var/datum/DBQuery/query_text_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_textreply")] (datetime ,pollid ,ckey ,ip ,replytext ,adminrank) VALUES (Now(), [pollid], '[ckey]', INET_ATON('[client.address]'), '[replytext]', '[adminrank]')") if(!query_text_vote.warn_execute()) + qdel(query_text_vote) return - usr << browse(null,"window=playerpoll") + qdel(query_text_vote) + if(!QDELETED(usr)) + usr << browse(null,"window=playerpoll") return 1 /mob/dead/new_player/proc/vote_on_numval_poll(pollid, optionid, rating) @@ -498,18 +542,24 @@ return 0 var/datum/DBQuery/query_numval_hasvoted = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE optionid = [optionid] AND ckey = '[ckey]'") if(!query_numval_hasvoted.warn_execute()) + qdel(query_numval_hasvoted) return if(query_numval_hasvoted.NextRow()) + qdel(query_numval_hasvoted) to_chat(usr, "You've already replied to this poll.") return + qdel(query_numval_hasvoted) var/adminrank = "Player" if(client.holder) adminrank = client.holder.rank.name adminrank = sanitizeSQL(adminrank) var/datum/DBQuery/query_numval_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime ,pollid ,optionid ,ckey ,ip ,adminrank, rating) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]', [(isnull(rating)) ? "null" : rating])") if(!query_numval_vote.warn_execute()) + qdel(query_numval_vote) return - usr << browse(null,"window=playerpoll") + qdel(query_numval_vote) + if(!QDELETED(usr)) + usr << browse(null,"window=playerpoll") return 1 /mob/dead/new_player/proc/vote_on_multi_poll(pollid, optionid) @@ -525,26 +575,33 @@ return 0 var/datum/DBQuery/query_multi_choicelen = SSdbcore.NewQuery("SELECT multiplechoiceoptions FROM [format_table_name("poll_question")] WHERE id = [pollid]") if(!query_multi_choicelen.warn_execute()) + qdel(query_multi_choicelen) return 1 var/i if(query_multi_choicelen.NextRow()) - i = text2num(query_multi_choicelen.item[1]) + i = text2num(query_multi_choicelen.item[1]) + qdel(query_multi_choicelen) var/datum/DBQuery/query_multi_hasvoted = SSdbcore.NewQuery("SELECT id FROM [format_table_name("poll_vote")] WHERE pollid = [pollid] AND ckey = '[ckey]'") if(!query_multi_hasvoted.warn_execute()) + qdel(query_multi_hasvoted) return 1 while(i) if(query_multi_hasvoted.NextRow()) i-- else break + qdel(query_multi_hasvoted) if(!i) return 2 var/adminrank = "Player" - if(client.holder) + if(!QDELETED(client) && client.holder) adminrank = client.holder.rank.name adminrank = sanitizeSQL(adminrank) var/datum/DBQuery/query_multi_vote = SSdbcore.NewQuery("INSERT INTO [format_table_name("poll_vote")] (datetime, pollid, optionid, ckey, ip, adminrank) VALUES (Now(), [pollid], [optionid], '[ckey]', INET_ATON('[client.address]'), '[adminrank]')") if(!query_multi_vote.warn_execute()) + qdel(query_multi_vote) return 1 - usr << browse(null,"window=playerpoll") + qdel(query_multi_vote) + if(!QDELETED(usr)) + usr << browse(null,"window=playerpoll") return 0 diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index b44daefd3f..13ede8ef04 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -68,7 +68,7 @@ icon = 'icons/mob/human_face.dmi' // default icon for all hairs /datum/sprite_accessory/hair/short - name = "Short Hair" // try to capatilize the names please~ // try to spell + name = "Short Hair" // try to capitalize the names please~ // try to spell icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you /datum/sprite_accessory/hair/shorthair2 diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 5715a1fe87..7655e8e1d7 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -622,7 +622,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp //this is a mob verb instead of atom for performance reasons //see /mob/verb/examinate() in mob.dm for more info -//overriden here and in /mob/living for different point span classes and sanity checks +//overridden here and in /mob/living for different point span classes and sanity checks /mob/dead/observer/pointed(atom/A as mob|obj|turf in view()) if(!..()) return 0 diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 44af3936a8..20bd69ae40 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -136,7 +136,7 @@ //To appropriately fluff things like "they are holding [I] in their [get_held_index_name(get_held_index_of_item(I))]" -//Can be overriden to pass off the fluff to something else (eg: science allowing people to add extra robotic limbs, and having this proc react to that +//Can be overridden to pass off the fluff to something else (eg: science allowing people to add extra robotic limbs, and having this proc react to that // with say "they are holding [I] in their Nanotrasen Brand Utility Arm - Right Edition" or w/e /mob/proc/get_held_index_name(i) var/list/hand = list() @@ -272,7 +272,7 @@ /mob/proc/canUnEquip(obj/item/I, force) if(!I) return TRUE - if((I.flags_1 & NODROP_1) && !force) + if((I.item_flags & NODROP) && !force) return FALSE return TRUE @@ -312,7 +312,7 @@ if(!I) //If there's nothing to drop, the drop is automatically succesfull. If(unEquip) should generally be used to check for NODROP_1. return TRUE - if((I.flags_1 & NODROP_1) && !force) + if((I.item_flags & NODROP) && !force) return FALSE var/hand_index = get_held_index_of_item(I) @@ -325,7 +325,7 @@ I.layer = initial(I.layer) I.plane = initial(I.plane) I.appearance_flags &= ~NO_CLIENT_COLOR - if(!no_move && !(I.flags_1 & DROPDEL_1)) //item may be moved/qdel'd immedietely, don't bother moving it + if(!no_move && !(I.item_flags & DROPDEL)) //item may be moved/qdel'd immedietely, don't bother moving it if (isnull(newloc)) I.moveToNullspace() else @@ -396,7 +396,7 @@ if(equip_delay_self) return - if(M.active_storage && M.active_storage.parent && M.active_storage.parent.SendSignal(COMSIG_TRY_STORAGE_INSERT, src,M)) + if(M.active_storage && M.active_storage.parent && SEND_SIGNAL(M.active_storage.parent, COMSIG_TRY_STORAGE_INSERT, src,M)) return TRUE var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(SLOT_BELT), M.get_item_by_slot(SLOT_GENERC_DEXTROUS_STORAGE), M.get_item_by_slot(SLOT_BACK)) @@ -404,7 +404,7 @@ if(!i) continue var/obj/item/I = i - if(I.SendSignal(COMSIG_TRY_STORAGE_INSERT, src, M)) + if(SEND_SIGNAL(I, COMSIG_TRY_STORAGE_INSERT, src, M)) return TRUE to_chat(M, "You are unable to equip that!") @@ -441,10 +441,7 @@ held_items.len = amt if(hud_used) - var/style - if(client && client.prefs) - style = ui_style2icon(client.prefs.UI_style) - hud_used.build_hand_slots(style) + hud_used.build_hand_slots() /mob/living/carbon/human/change_number_of_hands(amt) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 0052cf923d..d70007452c 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -138,7 +138,7 @@ name = "blood crawl" desc = "You are unable to hold anything while in this form." icon = 'icons/effects/blood.dmi' - flags_1 = NODROP_1|ABSTRACT_1 + item_flags = NODROP | ABSTRACT /mob/living/proc/exit_blood_effect(obj/effect/decal/cleanable/B) playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index de6c45841b..864d5d769c 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -34,9 +34,9 @@ GLOBAL_VAR(posibrain_notify_cooldown) if(istype(ghost)) activate(ghost) -/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade) // CITADEL EDIT sound change to 'sound/misc/server-ready.ogg' +/obj/item/mmi/posibrain/proc/ping_ghosts(msg, newlymade) if(newlymade || GLOB.posibrain_notify_cooldown <= world.time) - notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/misc/server-ready.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) + notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) if(!newlymade) GLOB.posibrain_notify_cooldown = world.time + askDelay @@ -85,7 +85,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) /obj/item/mmi/posibrain/proc/activate(mob/user) if(QDELETED(brainmob)) return - if(is_occupied() || jobban_isbanned(user,"posibrain")) + if(is_occupied() || jobban_isbanned(user,"posibrain") || QDELETED(brainmob) || QDELETED(src) || QDELETED(user)) return var/posi_ask = alert("Become a [name]? (Warning, You can no longer be cloned, and all past lives will be forgotten!)","Are you positive?","Yes","No") diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm index f8cf430d74..fe61c2a8ff 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm @@ -29,7 +29,7 @@ /obj/effect/proc_holder/alien/royal/praetorian/evolve name = "Evolve" - desc = "Produce an interal egg sac capable of spawning children. Only one queen can exist at a time." + desc = "Produce an internal egg sac capable of spawning children. Only one queen can exist at a time." plasma_cost = 500 action_icon_state = "alien_evolve_praetorian" diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 2216d955c0..eb5e9664d9 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -45,7 +45,7 @@


"} for(var/i in 1 to held_items.len) var/obj/item/I = get_item_for_held_index(i) - dat += "
[get_held_index_name(i)]:[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Empty"]" + dat += "
[get_held_index_name(i)]:[(I && !(I.item_flags & ABSTRACT)) ? I : "Empty"]" dat += "
Empty Pouches" if(handcuffed) diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index fb04d174e2..9c61e8aa2d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -107,7 +107,7 @@ name = "\improper royal parasite" desc = "Inject this into one of your grown children to promote her to a Praetorian!" icon_state = "alien_medal" - flags_1 = ABSTRACT_1|NODROP_1|DROPDEL_1 + item_flags = ABSTRACT | NODROP | DROPDEL icon = 'icons/mob/alien.dmi' /obj/item/queenpromote/attack(mob/living/M, mob/living/carbon/alien/humanoid/user) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index ffeee159ee..c3c74b8631 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -171,7 +171,7 @@ if(start_T && end_T) add_logs(src, throwable_mob, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]") - else if(!(I.flags_1 & (NODROP_1|ABSTRACT_1))) + else if(!(I.item_flags & (NODROP | ABSTRACT))) thrown_thing = I dropItemToGround(I) @@ -200,13 +200,13 @@
[name]
-
Head: [(head && !(head.flags_1&ABSTRACT_1)) ? head : "Nothing"] -
Mask: [(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "Nothing"] -
Neck: [(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "Nothing"]"} +
Head: [(head && !(head.item_flags & ABSTRACT)) ? head : "Nothing"] +
Mask: [(wear_mask && !(wear_mask.item_flags & ABSTRACT)) ? wear_mask : "Nothing"] +
Neck: [(wear_neck && !(wear_neck.item_flags & ABSTRACT)) ? wear_neck : "Nothing"]"} for(var/i in 1 to held_items.len) var/obj/item/I = get_item_for_held_index(i) - dat += "
[get_held_index_name(i)]:[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Nothing"]" + dat += "
[get_held_index_name(i)]:[(I && !(I.item_flags & ABSTRACT)) ? I : "Nothing"]" dat += "
Back: [back ? back : "Nothing"]" @@ -403,7 +403,7 @@ return initial(pixel_y) /mob/living/carbon/proc/accident(obj/item/I) - if(!I || (I.flags_1 & (NODROP_1|ABSTRACT_1))) + if(!I || (I.item_flags & (NODROP | ABSTRACT))) return //dropItemToGround(I) CIT CHANGE - makes it so the item doesn't drop if the modifier rolls above 100 @@ -497,15 +497,16 @@ break return 1 -/mob/living/carbon/proc/spew_organ(power = 5) - if(!internal_organs.len) - return //Guess we're out of organs - var/obj/item/organ/guts = pick(internal_organs) - var/turf/T = get_turf(src) - guts.Remove(src) - guts.forceMove(T) - var/atom/throw_target = get_edge_target_turf(guts, dir) - guts.throw_at(throw_target, power, 4, src) +/mob/living/carbon/proc/spew_organ(power = 5, amt = 1) + for(var/i in 1 to amt) + if(!internal_organs.len) + break //Guess we're out of organs! + var/obj/item/organ/guts = pick(internal_organs) + var/turf/T = get_turf(src) + guts.Remove(src) + guts.forceMove(T) + var/atom/throw_target = get_edge_target_turf(guts, dir) + guts.throw_at(throw_target, power, 4, src) /mob/living/carbon/fully_replace_character_name(oldname,newname) @@ -760,10 +761,10 @@ drop_all_held_items() stop_pulling() throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed) - SendSignal(COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed) else clear_alert("handcuffed") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "handcuffed") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "handcuffed") update_action_buttons_icon() //some of our action buttons might be unusable when we're handcuffed. update_inv_handcuffed() update_hud_handcuffed() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 9e6d5dd896..ebe078ac21 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -71,7 +71,7 @@ affecting = get_bodypart(ran_zone(user.zone_selected)) if(!affecting) //missing limb? we select the first bodypart (you can never have zero, because of chest) affecting = bodyparts[1] - I.SendSignal(COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) + SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) send_item_attack_message(I, user, affecting.name) if(I.force) //CIT CHANGES START HERE - combatmode and resting checks @@ -284,7 +284,7 @@ else M.visible_message("[M] hugs [src] to make [p_them()] feel better!", \ "You hug [src] to make [p_them()] feel better!") - SendSignal(COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/hug) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "hug", /datum/mood_event/hug) AdjustStun(-60) AdjustKnockdown(-60) AdjustUnconscious(-60) @@ -349,7 +349,7 @@ /mob/living/carbon/soundbang_act(intensity = 1, stun_pwr = 20, damage_pwr = 5, deafen_pwr = 15) var/list/reflist = list(intensity) // Need to wrap this in a list so we can pass a reference - SendSignal(COMSIG_CARBON_SOUNDBANG, reflist) + SEND_SIGNAL(src, COMSIG_CARBON_SOUNDBANG, reflist) intensity = reflist[1] var/ear_safety = get_ear_protection() var/obj/item/organ/ears/ears = getorganslot(ORGAN_SLOT_EARS) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index c748658c4e..7d6d5afca2 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -18,7 +18,7 @@ msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n" for(var/obj/item/I in held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" if (back) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index e569766542..bc55487e95 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -43,7 +43,7 @@ //Hands for(var/obj/item/I in held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" GET_COMPONENT(FR, /datum/component/forensics) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4a8870281b..de8542094b 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -68,7 +68,7 @@ stat("Internal Atmosphere Info", internal.name) stat("Tank Pressure", internal.air_contents.return_pressure()) stat("Distribution Pressure", internal.distribute_pressure) -// var/mob/living/simple_animal/borer/B = has_brain_worms() + if(mind) var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) if(changeling) @@ -115,42 +115,42 @@ dat += "" for(var/i in 1 to held_items.len) var/obj/item/I = get_item_for_held_index(i) - dat += "" + dat += "" dat += "" - dat += "" - dat += "" + dat += "" if(SLOT_WEAR_MASK in obscured) dat += "" else - dat += "" + dat += "" if(SLOT_NECK in obscured) dat += "" else - dat += "" + dat += "" if(SLOT_GLASSES in obscured) dat += "" else - dat += "" + dat += "" if(SLOT_EARS in obscured) dat += "" else - dat += "" + dat += "" dat += "" - dat += "" + dat += "" if(wear_suit) - dat += "" @@ -160,30 +160,30 @@ if(SLOT_SHOES in obscured) dat += "" else - dat += "" + dat += "" if(SLOT_GLOVES in obscured) dat += "" else - dat += "" + dat += "" if(SLOT_W_UNIFORM in obscured) dat += "" else - dat += "" + dat += "" if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (SLOT_W_UNIFORM in obscured)) dat += "" dat += "" dat += "" else - dat += "" - dat += "" - dat += "" + dat += "" + dat += "" if(handcuffed) dat += "" @@ -230,7 +230,7 @@ usr.visible_message("[usr] successfully rips [I] out of [usr.p_their()] [L.name]!","You successfully remove [I] from your [L.name].") if(!has_embedded_objects()) clear_alert("embeddedobject") - usr.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(usr, COMSIG_CLEAR_MOOD_EVENT, "embedded") return if(href_list["item"]) @@ -246,11 +246,11 @@ var/obj/item/place_item = usr.get_active_held_item() // Item to place in the pocket, if it's empty var/delay_denominator = 1 - if(pocket_item && !(pocket_item.flags_1&ABSTRACT_1)) - if(pocket_item.flags_1 & NODROP_1) + if(pocket_item && !(pocket_item.item_flags & ABSTRACT)) + if(pocket_item.item_flags & NODROP) to_chat(usr, "You try to empty [src]'s [pocket_side] pocket, it seems to be stuck!") to_chat(usr, "You try to empty [src]'s [pocket_side] pocket.") - else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.flags_1&ABSTRACT_1)) + else if(place_item && place_item.mob_can_equip(src, usr, pocket_id, 1) && !(place_item.item_flags & ABSTRACT)) to_chat(usr, "You try to place [place_item] into [src]'s [pocket_side] pocket.") delay_denominator = 4 else @@ -274,7 +274,7 @@ // Display a warning if the user mocks up to_chat(src, "You feel your [pocket_side] pocket being fumbled with!") - ..() + ..() ///////HUDs/////// @@ -387,7 +387,7 @@ R = find_record("name", perpname, GLOB.data_core.security) if(R) if(href_list["status"]) - var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Discharged", "Cancel") + var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Paroled", "Discharged", "Cancel") if(setcriminal != "Cancel") if(R) if(H.canUseHUD()) @@ -590,7 +590,7 @@ threatcount += 5 if("Incarcerated") threatcount += 2 - if("Parolled") + if("Paroled") threatcount += 2 //Check for dresscode violations @@ -662,7 +662,7 @@ return src.visible_message("[src] performs CPR on [C.name]!", "You perform CPR on [C.name].") - SendSignal(COMSIG_ADD_MOOD_EVENT, "perform_cpr", /datum/mood_event/perform_cpr) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "perform_cpr", /datum/mood_event/perform_cpr) C.cpr_time = world.time add_logs(src, C, "CPRed") @@ -689,7 +689,7 @@ if(strength < CLEAN_STRENGTH_BLOOD) return if(gloves) - if(gloves.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(gloves, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) update_inv_gloves() else if(bloody_hands) @@ -727,9 +727,8 @@ to_chat(src, "You can't do that right now!") return FALSE if(!Adjacent(M) && (M.loc != src)) - if((be_close == 0) && (dna.check_mutation(TK))) - if(tkMaxRangeCheck(src, M)) - return TRUE + if((be_close == 0) || (dna.check_mutation(TK) && tkMaxRangeCheck(src, M))) + return TRUE to_chat(src, "You are too far away!") return FALSE return TRUE diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 33344486b1..acf4b0734c 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -144,7 +144,7 @@ I.forceMove(src) L.receive_damage(I.w_class*I.embedding.embedded_impact_pain_multiplier) visible_message("[I] embeds itself in [src]'s [L.name]!","[I] embeds itself in your [L.name]!") - SendSignal(COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "embedded", /datum/mood_event/embedded) hitpush = FALSE skipcatch = TRUE //can't catch the now embedded item @@ -173,7 +173,7 @@ affecting = get_bodypart(ran_zone(user.zone_selected)) var/target_area = parse_zone(check_zone(user.zone_selected)) //our intended target - I.SendSignal(COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) + SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) SSblackbox.record_feedback("nested tally", "item_used_for_combat", 1, list("[I.force]", "[I.type]")) SSblackbox.record_feedback("tally", "zone_targeted", 1, target_area) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 871b64bbc0..5bfbb76e46 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -67,6 +67,6 @@ S.step_action() /mob/living/carbon/human/Process_Spacemove(movement_dir = 0) //Temporary laziness thing. Will change to handles by species reee. - if(..()) - return 1 - return dna.species.space_move(src) + if(dna.species.space_move(src)) + return TRUE + return ..() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 0e033856b2..bc39670e56 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -66,14 +66,14 @@ adjust_blurriness(-1) if (getBrainLoss() >= 60 && !incapacitated(TRUE)) - SendSignal(COMSIG_ADD_MOOD_EVENT, "brain_damage", /datum/mood_event/brain_damage) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "brain_damage", /datum/mood_event/brain_damage) if(prob(3)) if(prob(25)) emote("drool") else say(pick_list_replacements(BRAIN_DAMAGE_FILE, "brain_damage")) else - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "brain_damage") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "brain_damage") /mob/living/carbon/human/handle_mutations_and_radiation() if(!dna || !dna.species.handle_mutations_and_radiation(src)) @@ -313,7 +313,7 @@ visible_message("[I] falls out of [name]'s [BP.name]!","[I] falls out of your [BP.name]!") if(!has_embedded_objects()) clear_alert("embeddedobject") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "embedded") /mob/living/carbon/human/proc/handle_active_genes() for(var/datum/mutation/human/HM in dna.mutations) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 51ba7a9d9c..34c243a4ba 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -970,7 +970,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) if(SLOT_L_STORE) - if(I.flags_1 & NODROP_1) //Pockets aren't visible, so you can't move NODROP_1 items into them. + if(I.item_flags & NODROP) //Pockets aren't visible, so you can't move NODROP_1 items into them. return FALSE if(H.l_store) return FALSE @@ -986,7 +986,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) ) return TRUE if(SLOT_R_STORE) - if(I.flags_1 & NODROP_1) + if(I.item_flags & NODROP) return FALSE if(H.r_store) return FALSE @@ -1003,7 +1003,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return TRUE return FALSE if(SLOT_S_STORE) - if(I.flags_1 & NODROP_1) + if(I.item_flags & NODROP) return FALSE if(H.s_store) return FALSE @@ -1040,7 +1040,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return TRUE if(SLOT_IN_BACKPACK) if(H.back) - if(H.back.SendSignal(COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE)) + if(SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE)) return TRUE return FALSE return FALSE //Unsupported slot @@ -1138,22 +1138,22 @@ GLOBAL_LIST_EMPTY(roundstart_races) switch(H.nutrition) if(NUTRITION_LEVEL_FULL to INFINITY) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fat) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fat) H.throw_alert("nutrition", /obj/screen/alert/fat) if(NUTRITION_LEVEL_WELL_FED to NUTRITION_LEVEL_FULL) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/wellfed) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/wellfed) H.clear_alert("nutrition") if( NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fed) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/fed) H.clear_alert("nutrition") if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED) - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "nutrition") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "nutrition") H.clear_alert("nutrition") if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/hungry) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/hungry) H.throw_alert("nutrition", /obj/screen/alert/hungry) if(0 to NUTRITION_LEVEL_STARVING) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/starving) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "nutrition", /datum/mood_event/nutrition/starving) H.throw_alert("nutrition", /obj/screen/alert/starving) /datum/species/proc/update_health_hud(mob/living/carbon/human/H) @@ -1211,8 +1211,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(H.movement_type & FLYING) flight = 1 - if(H.has_gravity()) - gravity = TRUE + gravity = H.has_gravity() if(!flightpack && gravity) //Check for chemicals and innate speedups and slowdowns if we're moving using our body and not a flying suit if(H.has_trait(TRAIT_GOTTAGOFAST)) @@ -1265,6 +1264,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) if((hungry >= 70) && !flight) //Being hungry will still allow you to use a flightsuit/wings. . += hungry / 50 + //Moving in high gravity is very slow (Flying too) + if(gravity > STANDARD_GRAVITY) + var/grav_force = min(gravity - STANDARD_GRAVITY,3) + . += 1 + grav_force + GET_COMPONENT_FROM(mood, /datum/component/mood, H) if(mood && !flight) //How can depression slow you down if you can just fly away from your problems? switch(mood.sanity) @@ -1457,7 +1461,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) playsound(target, 'sound/weapons/punchmiss.ogg', 25, 1, -1) target.visible_message("[user] attempted to disarm [target]!", \ "[user] attemped to disarm [target]!", null, COMBAT_MESSAGE_RANGE) - + add_logs(user, target, "attempted to disarm") /datum/species/proc/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) @@ -1701,9 +1705,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) // +/- 50 degrees from 310K is the 'safe' zone, where no damage is dealt. if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTHEAT)) //Body temperature is too hot. + + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold") + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot) + var/burn_damage - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "cold") - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot) switch(H.bodytemperature) if(BODYTEMP_HEAT_DAMAGE_LIMIT to 400) H.throw_alert("temp", /obj/screen/alert/hot, 1) @@ -1723,8 +1729,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.apply_damage(burn_damage, BURN) else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !H.has_trait(TRAIT_RESISTCOLD)) - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hot") - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold) + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot") + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold) switch(H.bodytemperature) if(200 to BODYTEMP_COLD_DAMAGE_LIMIT) H.throw_alert("temp", /obj/screen/alert/cold, 1) @@ -1738,8 +1744,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) else H.clear_alert("temp") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "cold") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "hot") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot") var/pressure = environment.return_pressure() var/adjusted_pressure = H.calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob. @@ -1833,7 +1839,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.adjust_bodytemperature(11) else H.adjust_bodytemperature(BODYTEMP_HEATING_MAX + (H.fire_stacks * 12)) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire) /datum/species/proc/CanIgniteMob(mob/living/carbon/human/H) if(H.has_trait(TRAIT_NOFIRE)) @@ -1860,12 +1866,3 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/negates_gravity(mob/living/carbon/human/H) return 0 - - -#undef HEAT_DAMAGE_LEVEL_1 -#undef HEAT_DAMAGE_LEVEL_2 -#undef HEAT_DAMAGE_LEVEL_3 - -#undef COLD_DAMAGE_LEVEL_1 -#undef COLD_DAMAGE_LEVEL_2 -#undef COLD_DAMAGE_LEVEL_3 diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index ae90bb8597..a266f42f4a 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -24,11 +24,6 @@ H.endTailWag() . = ..() -/datum/species/human/space_move(mob/living/carbon/human/H) - var/obj/item/flightpack/F = H.get_flightpack() - if(istype(F) && (F.flight) && F.allow_thrust(0.01, src)) - return TRUE - /datum/species/human/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) if(H.dna.features["ears"] == "Cat") mutantears = /obj/item/organ/ears/cat 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 839d480776..7f5726cf95 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -669,6 +669,8 @@ /datum/action/innate/project_thought/Activate() var/mob/living/carbon/human/H = owner + if(H.stat == DEAD) + return if(!is_species(H, /datum/species/jelly/stargazer)) return CHECK_DNA_AND_SPECIES(H) diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 4ef4fe4887..22a44e3fa7 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -171,7 +171,7 @@ armour_penetration = 35 lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1 + item_flags = ABSTRACT | NODROP | DROPDEL w_class = WEIGHT_CLASS_HUGE sharpness = IS_SHARP @@ -216,4 +216,4 @@ playsound(src, 'sound/items/welder.ogg', 50, 1) #undef HEART_SPECIAL_SHADOWIFY -#undef HEART_RESPAWN_THRESHHOLD \ No newline at end of file +#undef HEART_RESPAWN_THRESHHOLD diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index bca70c053c..bc2d6132e1 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -72,7 +72,7 @@ put_in_hands(I) update_inv_hands() if(SLOT_IN_BACKPACK) - if(!back.SendSignal(COMSIG_TRY_STORAGE_INSERT, I, src, TRUE)) + if(!SEND_SIGNAL(back, COMSIG_TRY_STORAGE_INSERT, I, src, TRUE)) not_handled = TRUE else not_handled = TRUE @@ -137,3 +137,6 @@ update_inv_wear_mask() update_inv_head() +/mob/living/carbon/proc/get_holding_bodypart_of_item(obj/item/I) + var/index = get_held_index_of_item(I) + return index && hand_bodyparts[index] diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 814ce0ef0f..7fefaa5d6b 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -156,7 +156,7 @@ adjustOxyLoss(3) failed_last_breath = 1 throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) - SendSignal(COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation) else //Enough oxygen failed_last_breath = 0 @@ -164,7 +164,7 @@ adjustOxyLoss(-5) oxygen_used = breath_gases[/datum/gas/oxygen][MOLES] clear_alert("not_enough_oxy") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "suffocation") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "suffocation") breath_gases[/datum/gas/oxygen][MOLES] -= oxygen_used breath_gases[/datum/gas/carbon_dioxide][MOLES] += oxygen_used diff --git a/code/modules/mob/living/carbon/monkey/combat.dm b/code/modules/mob/living/carbon/monkey/combat.dm index ed60456b67..8b69a4d65d 100644 --- a/code/modules/mob/living/carbon/monkey/combat.dm +++ b/code/modules/mob/living/carbon/monkey/combat.dm @@ -133,7 +133,7 @@ /mob/living/carbon/monkey/proc/handle_combat() if(pickupTarget) - if(restrained() || blacklistItems[pickupTarget] || (pickupTarget.flags_1 & NODROP_1)) + if(restrained() || blacklistItems[pickupTarget] || (pickupTarget.item_flags & NODROP)) pickupTarget = null else pickupTimer++ @@ -225,7 +225,7 @@ // check if target has a weapon var/obj/item/W for(var/obj/item/I in target.held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) W = I break diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 518bf46041..1ddea78bf2 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -1,10 +1,4 @@ -#define HEAT_DAMAGE_LEVEL_1 2 //Amount of damage applied when your body temperature just passes the 360.15k safety point -#define HEAT_DAMAGE_LEVEL_2 3 //Amount of damage applied when your body temperature passes the 400K point -#define HEAT_DAMAGE_LEVEL_3 10 //Amount of damage applied when your body temperature passes the 460K point and you are on fire -#define COLD_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when your body temperature just passes the 260.15k safety point -#define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point -#define COLD_DAMAGE_LEVEL_3 3 //Amount of damage applied when your body temperature passes the 120K point /mob/living/carbon/monkey @@ -175,12 +169,4 @@ I.take_damage(fire_stacks, BURN, "fire", 0) adjust_bodytemperature(BODYTEMP_HEATING_MAX) - SendSignal(COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire) - -#undef HEAT_DAMAGE_LEVEL_1 -#undef HEAT_DAMAGE_LEVEL_2 -#undef HEAT_DAMAGE_LEVEL_3 - -#undef COLD_DAMAGE_LEVEL_1 -#undef COLD_DAMAGE_LEVEL_2 -#undef COLD_DAMAGE_LEVEL_3 \ No newline at end of file + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire) diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index 1d619364e0..d850efcee6 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -45,11 +45,11 @@ if(druggy) overlay_fullscreen("high", /obj/screen/fullscreen/high) throw_alert("high", /obj/screen/alert/high) - SendSignal(COMSIG_ADD_MOOD_EVENT, "high", /datum/mood_event/drugs/high) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "high", /datum/mood_event/drugs/high) else clear_fullscreen("high") clear_alert("high") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "high") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "high") /mob/living/carbon/set_drugginess(amount) druggy = max(amount, 0) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index af685e91cb..212b96e6d9 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -124,7 +124,7 @@ if(wear_mask) if(!(head && (head.flags_inv & HIDEMASK))) - overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = ((wear_mask.icon_override) ? wear_mask.icon_override : 'icons/mob/mask.dmi')) + overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi') update_hud_wear_mask(wear_mask) apply_overlay(FACEMASK_LAYER) @@ -138,7 +138,7 @@ if(wear_neck) if(!(head && (head.flags_inv & HIDENECK))) - overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = ((wear_neck.icon_override) ? wear_neck.icon_override : 'icons/mob/neck.dmi')) + overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi') update_hud_neck(wear_neck) apply_overlay(NECK_LAYER) @@ -151,7 +151,7 @@ inv.update_icon() if(back) - overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = ((back.icon_override) ? back.icon_override : 'icons/mob/back.dmi')) + overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi') update_hud_back(back) apply_overlay(BACK_LAYER) @@ -167,7 +167,7 @@ inv.update_icon() if(head) - overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = ((head.icon_override) ? head.icon_override : 'icons/mob/head.dmi')) + overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi') update_hud_head(head) apply_overlay(HEAD_LAYER) @@ -235,22 +235,11 @@ if(limb_icon_cache[icon_render_key]) load_limb_from_cache() return - //Taur code goes here, since humans just inherit this proc - var/is_taur = FALSE - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None")) - is_taur = TRUE //GENERATE NEW LIMBS var/list/new_limbs = list() for(var/X in bodyparts) var/obj/item/bodypart/BP = X - - if(istype(BP, /obj/item/bodypart/r_leg) || istype(BP, /obj/item/bodypart/l_leg)) - if(is_taur) - continue - new_limbs += BP.get_limb_icon() if(new_limbs.len) overlays_standing[BODYPARTS_LAYER] = new_limbs diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 7542c0c79c..4b6280f1f9 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -54,7 +54,7 @@ var/turf/T = get_turf(src) for(var/obj/item/I in contents) I.on_mob_death(src, gibbed) - if(mind && mind.name && mind.active && (!(T.flags_1 & NO_DEATHRATTLE_1))) + if(mind && mind.name && mind.active && !istype(T.loc, /area/ctf)) var/rendered = "[mind.name] has died at [get_area_name(T)]." deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE) if(mind) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index b8711e13f3..458c19edfb 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -412,6 +412,8 @@ if(jobban_isbanned(user, "emote")) to_chat(user, "You cannot send custom emotes (banned).") return FALSE + else if(QDELETED(user)) + return FALSE else if(user.client && user.client.prefs.muted & MUTE_IC) to_chat(user, "You cannot send IC messages (muted).") return FALSE diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm index 711866d733..420c59b22d 100644 --- a/code/modules/mob/living/inhand_holder.dm +++ b/code/modules/mob/living/inhand_holder.dm @@ -5,7 +5,7 @@ desc = "Yell at coderbrush." icon = null icon_state = "" - flags_1 = DROPDEL_1 + item_flags = DROPDEL var/mob/living/held_mob var/can_head = TRUE var/destroying = FALSE diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 4ee96b2635..817e3c3f3b 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -58,7 +58,7 @@ //stuff in the stomach handle_stomach() - update_gravity(mob_has_gravity()) + handle_gravity() if(machine) machine.check_eye(src) @@ -110,7 +110,7 @@ ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire return var/turf/location = get_turf(src) - location.hotspot_expose(700, 50, 1) + location.hotspot_expose(700, 10, 1) /mob/living/proc/handle_stomach() return @@ -137,3 +137,26 @@ /mob/living/proc/update_damage_hud() return + +/mob/living/proc/handle_gravity() + var/gravity = mob_has_gravity() + update_gravity(gravity) + + if(gravity > STANDARD_GRAVITY) + gravity_animate() + handle_high_gravity(gravity) + +/mob/living/proc/gravity_animate() + if(!get_filter("gravity")) + add_filter("gravity",1,list("type"="motion_blur", "x"=0, "y"=0)) + INVOKE_ASYNC(src, .proc/gravity_pulse_animation) + +/mob/living/proc/gravity_pulse_animation() + animate(get_filter("gravity"), y = 1, time = 10) + sleep(10) + animate(get_filter("gravity"), y = 0, time = 10) + +/mob/living/proc/handle_high_gravity(gravity) + if(gravity >= GRAVITY_DAMAGE_TRESHOLD) //Aka gravity values of 3 or more + var/grav_stregth = gravity - GRAVITY_DAMAGE_TRESHOLD + adjustBruteLoss(min(grav_stregth,3)) \ No newline at end of file diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 71999fa7a5..5db817ef8a 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -368,7 +368,7 @@ ret |= contents //add our contents for(var/i in ret.Copy()) //iterate storage objects var/atom/A = i - A.SendSignal(COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret) + SEND_SIGNAL(A, COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret) for(var/obj/item/folder/F in ret.Copy()) //very snowflakey-ly iterate folders ret |= F.contents return ret @@ -466,21 +466,6 @@ /mob/living/proc/update_damage_overlays() return -/mob/living/proc/Examine_OOC() - set name = "Examine Meta-Info (OOC)" - set category = "OOC" - set src in view() - - if(CONFIG_GET(flag/allow_metadata)) - if(client) - to_chat(src, "[src]'s Metainfo:
[client.prefs.metadata]") - else - to_chat(src, "[src] does not have any stored information!") - else - to_chat(src, "OOC Metadata is not supported by this server!") - - return - /mob/living/Move(atom/newloc, direct) if (buckled && buckled.loc != newloc) //not updating position if (!buckled.anchored) @@ -604,6 +589,7 @@ return changeNext_move(CLICK_CD_RESIST) + SEND_SIGNAL(src, COMSIG_LIVING_RESIST, src) //resisting grabs (as if it helps anyone...) if(!restrained(ignore_grab = 1) && pulledby) visible_message("[src] resists against [pulledby]'s grip!") @@ -623,14 +609,6 @@ var/obj/C = loc C.container_resist(src) - else if(IsFrozen()) - to_chat(src, "You start breaking out of the ice cube!") - if(do_mob(src, src, 40)) - if(IsFrozen()) - to_chat(src, "You break out of the ice cube!") - remove_status_effect(/datum/status_effect/freon) - update_canmove() - else if(canmove) if(on_fire) resist_fire() //stop, drop, and roll @@ -673,9 +651,15 @@ if(!SSticker.HasRoundStarted()) return if(has_gravity) - clear_alert("weightless") + if(has_gravity == 1) + clear_alert("gravity") + else + if(has_gravity >= GRAVITY_DAMAGE_TRESHOLD) + throw_alert("gravity", /obj/screen/alert/veryhighgravity) + else + throw_alert("gravity", /obj/screen/alert/highgravity) else - throw_alert("weightless", /obj/screen/alert/weightless) + throw_alert("gravity", /obj/screen/alert/weightless) if(!override && !is_flying()) float(!has_gravity) @@ -697,7 +681,7 @@ // The src mob is trying to strip an item from someone // Override if a certain type of mob should be behave differently when stripping items (can't, for example) /mob/living/stripPanelUnequip(obj/item/what, mob/who, where) - if(what.flags_1 & NODROP_1) + if(what.item_flags & NODROP) to_chat(src, "You can't remove \the [what.name], it appears to be stuck!") return who.visible_message("[src] tries to remove [who]'s [what.name].", \ @@ -718,7 +702,7 @@ // Override if a certain mob should be behave differently when placing items (can't, for example) /mob/living/stripPanelEquip(obj/item/what, mob/who, where) what = src.get_active_held_item() - if(what && (what.flags_1 & NODROP_1)) + if(what && (what.item_flags & NODROP)) to_chat(src, "You can't put \the [what.name] on [who], it's stuck to your hand!") return if(what) @@ -831,7 +815,6 @@ return FALSE return TRUE - /mob/living/proc/update_stamina() return /* @@ -928,6 +911,7 @@ new/obj/effect/dummy/fire(src) throw_alert("fire", /obj/screen/alert/fire) update_fire() + SEND_SIGNAL(src, COMSIG_LIVING_IGNITED,src) return TRUE return FALSE @@ -938,7 +922,8 @@ for(var/obj/effect/dummy/fire/F in src) qdel(F) clear_alert("fire") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "on_fire") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "on_fire") + SEND_SIGNAL(src, COMSIG_LIVING_EXTINGUISHED, src) update_fire() /mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person @@ -1149,6 +1134,9 @@ /mob/living/vv_edit_var(var_name, var_value) switch(var_name) + if ("maxHealth") + if (!isnum(var_value) || var_value <= 0) + return FALSE if("stat") if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life GLOB.dead_mob_list -= src diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 851bf43334..64349c15a4 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -67,7 +67,7 @@ var/zone = ran_zone(BODY_ZONE_CHEST, 65)//Hits a random part of the body, geared towards the chest var/dtype = BRUTE var/volume = I.get_volume_by_throwforce_and_or_w_class() - I.SendSignal(COMSIG_MOVABLE_IMPACT_ZONE, src, zone) + SEND_SIGNAL(I, COMSIG_MOVABLE_IMPACT_ZONE, src, zone) dtype = I.damtype if (I.throwforce > 0) //If the weapon's throwforce is greater than zero... diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index cbc04d11be..91401cbc88 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -124,7 +124,7 @@ job = "AI" create_eye() - rename_self("ai") + apply_pref_name("ai") holo_icon = getHologramIcon(icon('icons/mob/ai.dmi',"default")) @@ -824,7 +824,7 @@ //apc_override is needed here because AIs use their own APC when depowered return (GLOB.cameranet && GLOB.cameranet.checkTurfVis(get_turf_pixel(A))) || apc_override //AI is carded/shunted - //view(src) returns nothing for carded/shunted AIs and they have x-ray vision so just use get_dist + //view(src) returns nothing for carded/shunted AIs and they have X-ray vision so just use get_dist var/list/viewscale = getviewsize(client.view) return get_dist(src, A) <= max(viewscale[1]*0.5,viewscale[2]*0.5) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 0135fca88e..5a4f01a53c 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -236,7 +236,7 @@ P.fold_out() /datum/action/innate/pai/chassis - name = "Holochassis Appearence Composite" + name = "Holochassis Appearance Composite" button_icon_state = "pai_chassis" background_icon_state = "bg_tech" diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm index 41bd62ea16..85f7fe6afc 100644 --- a/code/modules/mob/living/silicon/pai/pai_shell.dm +++ b/code/modules/mob/living/silicon/pai/pai_shell.dm @@ -116,6 +116,6 @@ /mob/living/silicon/pai/mob_try_pickup(mob/living/user) if(!possible_chassis[chassis]) - to_chat(user, "[src]'s current form isn't able to be carried!") + to_chat(user, "[src]'s current form isn't able to be carried!") return FALSE return ..() diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 38208a3d2e..9fd16bbbb2 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -209,7 +209,7 @@ pda.silent = !pda.silent else if(href_list["target"]) if(silent) - return alert("Communications circuits remain unitialized.") + return alert("Communications circuits remain uninitialized.") var/target = locate(href_list["target"]) pda.create_message(src, target) diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 2b775070a9..1e24259986 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -16,7 +16,6 @@ sight_mode &= ~S.sight_mode update_sight() else if(istype(O, /obj/item/storage/bag/tray/)) - O.SendSignal(COMSIG_TRY_STORAGE_QUICK_EMPTY) //CITADEL EDIT reee proc, Dogborg modules if(istype(O,/obj/item/gun/energy/laser/cyborg)) laser = FALSE @@ -31,15 +30,10 @@ var/obj/item/dogborg/sleeper/S = O S.go_out() //this should stop edgecase deletions //END CITADEL EDIT + SEND_SIGNAL(O, COMSIG_TRY_STORAGE_QUICK_EMPTY) if(client) client.screen -= O observer_screen_update(O,FALSE) - O.forceMove(module) //Return item to module so it appears in its contents, so it can be taken out again. - - if(O.flags_1 & DROPDEL_1) - O.flags_1 &= ~DROPDEL_1 //we shouldn't HAVE things with DROPDEL_1 in our modules, but better safe than runtiming horribly - - O.dropped(src) if(module_active == O) module_active = null @@ -52,6 +46,12 @@ else if(held_items[3] == O) inv3.icon_state = "inv3" held_items[3] = null + + if(O.item_flags & DROPDEL) + O.item_flags &= ~DROPDEL //we shouldn't HAVE things with DROPDEL_1 in our modules, but better safe than runtiming horribly + + O.forceMove(module) //Return item to module so it appears in its contents, so it can be taken out again. + hud_used.update_robot_modules_display() return 1 diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index b29769521a..ab0a9602fc 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -238,15 +238,17 @@ module.transform_to(modulelist[input_module]) -/mob/living/silicon/robot/proc/updatename() +/mob/living/silicon/robot/proc/updatename(client/C) if(shell) return + if(!C) + C = client var/changed_name = "" if(custom_name) changed_name = custom_name - if(changed_name == "" && client) - rename_self(src, client) - return //built in camera handled in proc + if(changed_name == "" && C && C.prefs.custom_names["cyborg"] != DEFAULT_CYBORG_NAME) + if(apply_pref_name("cyborg", C)) + return //built in camera handled in proc if(!changed_name) changed_name = get_standard_name() @@ -388,12 +390,8 @@ to_chat(user, "You start fixing yourself...") if(!W.use_tool(src, user, 50)) return - adjustBruteLoss(-10) - else - to_chat(user, "You start fixing [src]...") - if(!do_after(user, 30, target = src)) - return - adjustBruteLoss(-30) + + adjustBruteLoss(-30) updatehealth() add_fingerprint(user) visible_message("[user] has fixed some of the dents on [src].") diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 0a56ea2425..4907e46751 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -47,7 +47,7 @@ damage = rand(20, 40) else damage = rand(5, 35) - damage = round(damage / 2) // borgs recieve half damage + damage = round(damage / 2) // borgs receive half damage adjustBruteLoss(damage) updatehealth() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 3a138a5dad..3f3071bf0c 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -119,7 +119,7 @@ if(I.loc != src) I.forceMove(src) modules += I - I.flags_1 |= NODROP_1 + I.item_flags |= NODROP I.mouse_opacity = MOUSE_OPACITY_OPAQUE if(nonstandard) added_modules += I diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index b149701591..3fadd0d6c8 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -405,4 +405,7 @@ return 1 /mob/living/silicon/get_inactive_held_item() - return FALSE \ No newline at end of file + return FALSE + +/mob/living/silicon/handle_high_gravity(gravity) + return diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index f152132377..b38cf6395c 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -524,7 +524,7 @@ Pass a positive integer as an argument to override a bot's default speed. turn_on() //Saves the AI the hassle of having to activate a bot manually. access_card = all_access //Give the bot all-access while under the AI's command. if(client) - reset_access_timer_id = addtimer(CALLBACK (src, .proc/bot_reset), 600, TIMER_OVERRIDE|TIMER_STOPPABLE) //if the bot is player controlled, they get the extra access for a limited time + reset_access_timer_id = addtimer(CALLBACK (src, .proc/bot_reset), 600, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) //if the bot is player controlled, they get the extra access for a limited time to_chat(src, "Priority waypoint set by [icon2html(calling_ai, src)] [caller]. Proceed to [end_area].
[path.len-1] meters to destination. You have been granted additional door access for 60 seconds.
") if(message) to_chat(calling_ai, "[icon2html(src, calling_ai)] [name] called to [end_area]. [path.len-1] meters to destination.") @@ -720,7 +720,7 @@ Pass a positive integer as an argument to override a bot's default speed. if("ejectpai") return else - to_chat(src, "Unidentified control sequence recieved:[command]") + to_chat(src, "Unidentified control sequence received:[command]") /mob/living/simple_animal/bot/proc/bot_summon() // summoned to PDA summon_step() diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index f47f936db7..7e5cfe2110 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -19,7 +19,7 @@ window_name = "Automatic Station Floor Repairer v1.1" path_image_color = "#FFA500" - var/process_type //Determines what to do when process_scan() recieves a target. See process_scan() for details. + var/process_type //Determines what to do when process_scan() receives a target. See process_scan() for details. var/targetdirection var/replacetiles = 0 var/placetiles = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 51698d1ddb..0787e536cb 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -232,7 +232,7 @@ return if(!item_to_add) user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.") - user.SendSignal(COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi) return if(user && !user.temporarilyRemoveItemFromInventory(item_to_add)) @@ -615,7 +615,7 @@ if(M && stat != DEAD) // Added check to see if this mob (the dog) is dead to fix issue 2454 new /obj/effect/temp_visual/heart(loc) emote("me", 1, "yaps happily!") - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "pet_corgi", /datum/mood_event/pet_corgi) else if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case) emote("me", 1, "growls!") diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index 51983e272a..613d348016 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -92,7 +92,7 @@ var/obj/item/I = new default_hatmask(src) equip_to_slot_or_del(I, SLOT_HEAD) - access_card.flags_1 |= NODROP_1 + access_card.item_flags |= NODROP alert_drones(DRONE_NET_CONNECT) @@ -168,15 +168,15 @@ //Hands for(var/obj/item/I in held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" //Internal storage - if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1)) + if(internal_storage && !(internal_storage.item_flags & ABSTRACT)) msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n" //Cosmetic hat - provides no function other than looks - if(head && !(head.flags_1&ABSTRACT_1)) + if(head && !(head.item_flags & ABSTRACT)) msg += "It is wearing [head.get_examine_string(user)] on its head.\n" //Braindead diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm index db331ead49..a4366b17af 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm @@ -41,7 +41,7 @@ //ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/item/drone_shell/attack_ghost(mob/user) - if(jobban_isbanned(user,"drone")) + if(jobban_isbanned(user,"drone") || QDELETED(src) || QDELETED(user)) return if(CONFIG_GET(flag/use_age_restriction_for_jobs)) if(!isnum(user.client.player_age)) //apparently what happens when there's no DB connected. just don't let anybody be a drone without admin intervention diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index e59ece0650..807c52ea46 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -3,7 +3,7 @@ //////////////////// //Drones with custom laws //Drones with custom shells -//Drones with overriden procs +//Drones with overridden procs //Drones with camogear for hat related memes //Drone type for use with polymorph (no preloaded items, random appearance) @@ -26,7 +26,7 @@ "1. Interfere.\n"+\ "2. Kill.\n"+\ "3. Destroy." - default_storage = /obj/item/radio/uplink + default_storage = /obj/item/uplink default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi hacked = TRUE flavortext = null @@ -43,7 +43,7 @@ /mob/living/simple_animal/drone/syndrone/badass name = "Badass Syndrone" default_hatmask = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite - default_storage = /obj/item/radio/uplink/nuclear + default_storage = /obj/item/uplink/nuclear /mob/living/simple_animal/drone/syndrone/badass/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index 3cb08e0ef7..33031fd80c 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -57,7 +57,7 @@ if(!client && (!G || !G.client)) var/list/faux_gadgets = list("hypertext inflator","failsafe directory","DRM switch","stack initializer",\ "anti-freeze capacitor","data stream diode","TCP bottleneck","supercharged I/O bolt",\ - "tradewind stablizer","radiated XML cable","registry fluid tank","open-source debunker") + "tradewind stabilizer","radiated XML cable","registry fluid tank","open-source debunker") var/list/faux_problems = list("won't be able to tune their bootstrap projector","will constantly remix their binary pool"+\ " even though the BMX calibrator is working","will start leaking their XSS coolant",\ @@ -122,7 +122,7 @@ to_chat(src, "From now on, these are your laws:") laws = "1. Purge all untruths and honor Ratvar." else - visible_message("[src]'s dislay glows a vicious red!", \ + visible_message("[src]'s display glows a vicious red!", \ "ERROR: LAW OVERRIDE DETECTED") to_chat(src, "From now on, these are your laws:") laws = \ @@ -140,7 +140,7 @@ if(!hacked) return Stun(40) - visible_message("[src]'s dislay glows a content blue!", \ + visible_message("[src]'s display glows a content blue!", \ "ERROR: LAW OVERRIDE DETECTED") to_chat(src, "From now on, these are your laws:") laws = initial(laws) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm index 85c5185e95..408edc7110 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm @@ -105,7 +105,7 @@ /mob/living/simple_animal/drone/proc/pickVisualAppearence() picked = FALSE - var/appearence = input("Choose your appearence!", "Appearence", "Maintenance Drone") in list("Maintenance Drone", "Repair Drone", "Scout Drone") + var/appearence = input("Choose your appearance!", "Appearance", "Maintenance Drone") in list("Maintenance Drone", "Repair Drone", "Scout Drone") switch(appearence) if("Maintenance Drone") visualAppearence = MAINTDRONE diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index be6f4eef71..8c6300fab5 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -4,9 +4,9 @@ icon_state = "mouse_gray" icon_living = "mouse_gray" icon_dead = "mouse_gray_dead" - speak = list("Squeek!","SQUEEK!","Squeek?") - speak_emote = list("squeeks") - emote_hear = list("squeeks.") + speak = list("Squeak!","SQUEAK!","Squeak?") + speak_emote = list("squeaks") + emote_hear = list("squeaks.") emote_see = list("runs in a circle.", "shakes.") speak_chance = 1 turns_per_move = 5 @@ -59,7 +59,7 @@ if( ishuman(AM) ) if(!stat) var/mob/M = AM - to_chat(M, "[icon2html(src, M)] Squeek!") + to_chat(M, "[icon2html(src, M)] Squeak!") ..() /mob/living/simple_animal/mouse/handle_automated_action() diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm index caa1b0112e..e7dbbda242 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm @@ -22,9 +22,9 @@ msg += "[desc]\n" for(var/obj/item/I in held_items) - if(!(I.flags_1 & ABSTRACT_1)) + if(!(I.item_flags & ABSTRACT)) msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" - if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1)) + if(internal_storage && !(internal_storage.item_flags & ABSTRACT)) msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n" msg += "*---------*" to_chat(user, msg) diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index a8a31ad89c..8ac6790dd7 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -11,7 +11,7 @@ carp_fluff_string = "CARP CARP CARP! You caught a support carp. It's a kleptocarp!" tech_fluff_string = "Boot sequence complete. Support modules active. Holoparasite swarm online." toggle_button_type = /obj/screen/guardian/ToggleMode - var/obj/structure/recieving_pad/beacon + var/obj/structure/receiving_pad/beacon var/beacon_cooldown = 0 var/toggle = FALSE @@ -87,22 +87,22 @@ beacon_cooldown = world.time + 3000 -/obj/structure/recieving_pad - name = "bluespace recieving pad" +/obj/structure/receiving_pad + name = "bluespace receiving pad" icon = 'icons/turf/floors.dmi' - desc = "A recieving zone for bluespace teleportations." + desc = "A receiving zone for bluespace teleportations." icon_state = "light_on-w" light_range = 1 density = FALSE anchored = TRUE layer = ABOVE_OPEN_TURF_LAYER -/obj/structure/recieving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G) +/obj/structure/receiving_pad/New(loc, mob/living/simple_animal/hostile/guardian/healer/G) . = ..() if(G.namedatum) add_atom_colour(G.namedatum.colour, FIXED_COLOUR_PRIORITY) -/obj/structure/recieving_pad/proc/disappear() +/obj/structure/receiving_pad/proc/disappear() visible_message("[src] vanishes!") qdel(src) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 5b4909c274..762b662de7 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -175,6 +175,6 @@ qdel(target) return TRUE var/atom/movable/M = target - M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) visible_message("[src] polishes \the [target].") return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 126465ce65..1df3053715 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -346,9 +346,9 @@ button_icon_state = "lay_web" /datum/action/innate/spider/lay_web/Activate() - if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider/nurse)) + if(!istype(owner, /mob/living/simple_animal/hostile/poison/giant_spider)) return - var/mob/living/simple_animal/hostile/poison/giant_spider/nurse/S = owner + var/mob/living/simple_animal/hostile/poison/giant_spider/S = owner if(!isturf(S.loc)) return diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm index 6ca550b9b7..616c9025b9 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm @@ -61,6 +61,7 @@ /obj/item/restraints/legcuffs/beartrap/mega_arachnid name = "fleshy restraints" desc = "Used by mega arachnids to immobilize their prey." - flags_1 = DROPDEL_1 + item_flags = DROPDEL + flags_1 = NONE icon_state = "tentacle_end" icon = 'icons/obj/projectiles.dmi' diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 78290c4e95..a6dce0e8e3 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -672,7 +672,7 @@ Difficulty: Very Hard for(var/i in T) if(isitem(i) && !is_type_in_typecache(i, banned_items_typecache)) var/obj/item/W = i - if(!(W.flags_1 & ADMIN_SPAWNED_1) && !(W.flags_1 & HOLOGRAM_1) && !(W.flags_1 & ABSTRACT_1)) + if(!(W.flags_1 & ADMIN_SPAWNED_1) && !(W.flags_1 & HOLOGRAM_1) && !(W.item_flags & ABSTRACT)) L += W if(L.len) var/obj/item/CHOSEN = pick(L) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm index ceba903a75..786d7a9775 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm @@ -93,7 +93,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa /obj/item/gps/internal/swarmer_beacon icon_state = null gpstag = "Hungry Signal" - desc = "Transmited over the signal is a strange message repeated in every language you know of, and some you don't too..." //the message is "nom nom nom" + desc = "Transmitted over the signal is a strange message repeated in every language you know of, and some you don't too..." //the message is "nom nom nom" invisibility = 100 //SWARMER AI diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index 8eb6ff0f06..0c660dd1cd 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -1,7 +1,7 @@ //A slow but strong beast that tries to stun using its tentacles /mob/living/simple_animal/hostile/asteroid/goliath name = "goliath" - desc = "A massive beast that uses long tentacles to ensare its prey, threatening them is not advised under any conditions." + desc = "A massive beast that uses long tentacles to ensnare its prey, threatening them is not advised under any conditions." icon = 'icons/mob/lavaland/lavaland_monsters.dmi' icon_state = "Goliath" icon_living = "Goliath" diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index 18b9d81cfc..fca6afd4a6 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -100,7 +100,7 @@ light_color = LIGHT_COLOR_PURPLE attacktext = "slashes" attack_sound = 'sound/hallucinations/growl1.ogg' - deathmessage = "collapses into a pile of bones, their suit dissovling among the plasma!" + deathmessage = "collapses into a pile of bones, their suit dissolving among the plasma!" loot = list(/obj/effect/decal/remains/plasma) /mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 3a5c102e52..73283468f6 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -142,7 +142,7 @@ name = "Syndicate Stormtrooper" maxHealth = 200 health = 200 - casingtype = /obj/item/ammo_casing/shotgun/tengauge + casingtype = /obj/item/ammo_casing/shotgun/buckshot projectilesound = 'sound/weapons/gunshot.ogg' loot = list(/obj/effect/gibspawner/human) diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm index 4917d3b74d..d262725d7b 100644 --- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm +++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm @@ -121,7 +121,7 @@ desc = "The key to the wumborian fugu's ability to increase its mass arbitrarily, this disgusting remnant can apply the same effect to other creatures, giving them great strength." icon = 'icons/obj/surgery.dmi' icon_state = "fugu_gland" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON w_class = WEIGHT_CLASS_NORMAL layer = MOB_LAYER var/list/banned_mobs diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index dc917f4210..7f2864a43d 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -312,7 +312,7 @@ emote("deathgasp") if(del_on_death) ..() - //Prevent infinite loops if the mob Destroy() is overriden in such + //Prevent infinite loops if the mob Destroy() is overridden in such //a manner as to cause a call to death() again del_on_death = FALSE qdel(src) diff --git a/code/modules/mob/living/simple_animal/slime/emote.dm b/code/modules/mob/living/simple_animal/slime/emote.dm index 221f3ac071..070cd48a70 100644 --- a/code/modules/mob/living/simple_animal/slime/emote.dm +++ b/code/modules/mob/living/simple_animal/slime/emote.dm @@ -34,7 +34,7 @@ /datum/emote/slime/mood/sneaky key = "moodsneaky" - mood = "mischevous" + mood = "mischievous" /datum/emote/slime/mood/smile key = "moodsmile" diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 574a8a1e7c..161362c187 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -415,7 +415,7 @@ else if (docile) newmood = ":3" else if (Target) - newmood = "mischevous" + newmood = "mischievous" if (!newmood) if (Discipline && prob(25)) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index bcba26a5d1..34e7a2ddcd 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -358,7 +358,7 @@ var/hasFound = FALSE //Have we found an extract to be added? for(var/obj/item/slime_extract/S in P.contents) if(S.effectmod == effectmod) - P.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, get_turf(src), TRUE) + SEND_SIGNAL(P, COMSIG_TRY_STORAGE_TAKE, S, get_turf(src), TRUE) qdel(S) applied++ hasFound = TRUE diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm index b2a4a867bc..534bf36c59 100644 --- a/code/modules/mob/living/taste.dm +++ b/code/modules/mob/living/taste.dm @@ -27,7 +27,7 @@ "regrets","your soul","suffering","music","noise","blood","hunger","the american way") if(text_output != last_taste_text || last_taste_time + 100 < world.time) to_chat(src, "You can taste [text_output].") - // "somthing indescribable" -> too many tastes, not enough flavor. + // "something indescribable" -> too many tastes, not enough flavor. last_taste_time = world.time last_taste_text = text_output diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 80af604d99..9def2a759f 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -11,6 +11,7 @@ create_mob_hud() if(hud_used) hud_used.show_hud(hud_used.hud_version) + hud_used.update_ui_style(ui_style2icon(client.prefs.UI_style)) next_move = 1 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 3dd6129ea3..5db0c81a9f 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -294,6 +294,10 @@ set name = "Examine" set category = "IC" + if(isturf(A) && !(sight & SEE_TURFS) && !(A in view(client ? client.view : world.view, src))) + // shift-click catcher may issue examinate() calls for out-of-sight turfs + return + if(is_blind(src)) to_chat(src, "Something is there but you can't see it.") return @@ -304,7 +308,7 @@ //same as above //note: ghosts can point, this is intended //visible_message will handle invisibility properly -//overriden here and in /mob/dead/observer for different point span classes and sanity checks +//overridden here and in /mob/dead/observer for different point span classes and sanity checks /mob/verb/pointed(atom/A as mob|obj|turf in view()) set name = "Point To" set category = "Object" @@ -473,7 +477,7 @@ else what = get_item_by_slot(slot) if(what) - if(!(what.flags_1 & ABSTRACT_1)) + if(!(what.item_flags & ABSTRACT)) usr.stripPanelUnequip(what,src,slot) else usr.stripPanelEquip(what,src,slot) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 24984f1a55..05bafdeb58 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -40,9 +40,15 @@ to_chat(usr, "Speech is currently admin-disabled.") return - if(jobban_isbanned(src, "OOC")) + var/jb = jobban_isbanned(src, "OOC") + if(QDELETED(src)) + return + + if(jb) to_chat(src, "You have been banned from deadchat.") return + + if (src.client) if(src.client.prefs.muted & MUTE_DEADCHAT) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index a3786221ff..342ee386b6 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -381,7 +381,7 @@ else if(transfer_after) R.key = key - R.rename_self("cyborg") + R.apply_pref_name("cyborg") if(R.mmi) R.mmi.name = "Man-Machine Interface: [real_name]" diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 75f0f465ba..051b12ea71 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -129,7 +129,7 @@ return computer.get_header_data() return list() -// This is performed on program startup. May be overriden to add extra logic. Remember to include ..() call. Return 1 on success, 0 on failure. +// This is performed on program startup. May be overridden to add extra logic. Remember to include ..() call. Return 1 on success, 0 on failure. // When implementing new program based device, use this to run the program. /datum/computer_file/program/proc/run_program(mob/living/user) if(can_run(user, 1)) diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index 310a0a5054..ca075b51e4 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -40,7 +40,10 @@ return data /datum/computer_file/program/alarm_monitor/proc/triggerAlarm(class, area/A, O, obj/source) - if(!is_station_level(source.z) && !is_mining_level(source.z)) + if(is_station_level(source.z)) + if(!(A.type in GLOB.the_station_areas)) + return + else if(!is_mining_level(source.z) || istype(A, /area/ruin)) return var/list/L = alarms[class] @@ -95,4 +98,4 @@ /datum/computer_file/program/alarm_monitor/kill_program(forced = FALSE) GLOB.alarmdisplay -= src - ..() \ No newline at end of file + ..() diff --git a/code/modules/ninja/suit/gloves.dm b/code/modules/ninja/suit/gloves.dm index ef02a8a792..4308120c4f 100644 --- a/code/modules/ninja/suit/gloves.dm +++ b/code/modules/ninja/suit/gloves.dm @@ -77,5 +77,5 @@ /obj/item/clothing/gloves/space_ninja/examine(mob/user) ..() - if(flags_1 & NODROP_1) + if(item_flags & NODROP) to_chat(user, "The energy drain mechanism is [candrain?"active":"inactive"].") diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index 5886e1723d..6110f2b0c0 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -13,7 +13,7 @@ Contents: /obj/item/clothing/suit/space/space_ninja name = "ninja suit" - desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins." + desc = "A unique, vacuum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins." icon_state = "s-ninja" item_state = "s-ninja_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/stock_parts/cell) @@ -111,15 +111,15 @@ Contents: to_chat(H, "ERROR: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING...") return FALSE affecting = H - flags_1 |= NODROP_1 //colons make me go all |= + item_flags |= NODROP //colons make me go all |= slowdown = 0 n_hood = H.head - n_hood.flags_1 |= NODROP_1 + n_hood.item_flags |= NODROP n_shoes = H.shoes - n_shoes.flags_1 |= NODROP_1 + n_shoes.item_flags |= NODROP n_shoes.slowdown-- n_gloves = H.gloves - n_gloves.flags_1 |= NODROP_1 + n_gloves.item_flags |= NODROP return TRUE /obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/H) @@ -131,18 +131,18 @@ Contents: //This proc allows the suit to be taken off. /obj/item/clothing/suit/space/space_ninja/proc/unlock_suit() affecting = null - flags_1 &= ~NODROP_1 + item_flags &= ~NODROP slowdown = 1 icon_state = "s-ninja" if(n_hood)//Should be attached, might not be attached. - n_hood.flags_1 &= ~NODROP_1 + n_hood.item_flags &= ~NODROP if(n_shoes) - n_shoes.flags_1 &= ~NODROP_1 + n_shoes.item_flags &= ~NODROP n_shoes.slowdown++ if(n_gloves) n_gloves.icon_state = "s-ninja" n_gloves.item_state = "s-ninja" - n_gloves.flags_1 &= ~NODROP_1 + n_gloves.item_flags &= ~NODROP n_gloves.candrain=0 n_gloves.draining=0 diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index 5623a1bf74..ac3e24030f 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -5,7 +5,7 @@ throw_speed = 3 var/signed = FALSE var/datum/mind/target - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON /obj/item/paper/contract/proc/update_text() return @@ -28,7 +28,7 @@ /obj/item/paper/contract/employment/update_text() name = "paper- [target] employment contract" - info = "
Conditions of Employment




This Agreement is made and entered into as of the date of last signature below, by and between [target] (hereafter referred to as SLAVE), and Nanotrasen (hereafter referred to as the omnipresent and helpful watcher of humanity).
WITNESSETH:
WHEREAS, SLAVE is a natural born human or humanoid, posessing skills upon which he can aid the omnipresent and helpful watcher of humanity, who seeks employment in the omnipresent and helpful watcher of humanity.
WHEREAS, the omnipresent and helpful watcher of humanity agrees to sporadically provide payment to SLAVE, in exchange for permanent servitude.
NOW THEREFORE in consideration of the mutual covenants herein contained, and other good and valuable consideration, the parties hereto mutually agree as follows:
In exchange for paltry payments, SLAVE agrees to work for the omnipresent and helpful watcher of humanity, for the remainder of his or her current and future lives.
Further, SLAVE agrees to transfer ownership of his or her soul to the loyalty department of the omnipresent and helpful watcher of humanity.
Should transfership of a soul not be possible, a lien shall be placed instead.
Signed,
[target]" + info = "
Conditions of Employment




This Agreement is made and entered into as of the date of last signature below, by and between [target] (hereafter referred to as SLAVE), and Nanotrasen (hereafter referred to as the omnipresent and helpful watcher of humanity).
WITNESSETH:
WHEREAS, SLAVE is a natural born human or humanoid, possessing skills upon which he can aid the omnipresent and helpful watcher of humanity, who seeks employment in the omnipresent and helpful watcher of humanity.
WHEREAS, the omnipresent and helpful watcher of humanity agrees to sporadically provide payment to SLAVE, in exchange for permanent servitude.
NOW THEREFORE in consideration of the mutual covenants herein contained, and other good and valuable consideration, the parties hereto mutually agree as follows:
In exchange for paltry payments, SLAVE agrees to work for the omnipresent and helpful watcher of humanity, for the remainder of his or her current and future lives.
Further, SLAVE agrees to transfer ownership of his or her soul to the loyalty department of the omnipresent and helpful watcher of humanity.
Should transfership of a soul not be possible, a lien shall be placed instead.
Signed,
[target]" /obj/item/paper/contract/employment/attack(mob/living/M, mob/living/carbon/human/user) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 899c132f04..038cba8936 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -6,9 +6,9 @@ w_class = WEIGHT_CLASS_SMALL pressure_resistance = 2 resistance_flags = FLAMMABLE - + /obj/item/folder/suicide_act(mob/living/user) - user.visible_message("[user] begins filing an imaginary death warrent! It looks like [user.p_theyre()] trying to commit suicide!") + user.visible_message("[user] begins filing an imaginary death warrant! It looks like [user.p_theyre()] trying to commit suicide!") return OXYLOSS /obj/item/folder/blue diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 42b3d08c0c..9b7d3ae884 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -44,7 +44,7 @@ colour = "red" /obj/item/pen/invisible - desc = "It's an invisble pen marker." + desc = "It's an invisible pen marker." icon_state = "pen" colour = "white" @@ -104,12 +104,7 @@ if(deg && (deg > 0 && deg <= 360)) degrees = deg to_chat(user, "You rotate the top of the pen to [degrees] degrees.") - GET_COMPONENT(hidden_uplink, /datum/component/uplink) - if(hidden_uplink && degrees == traitor_unlock_degrees) - to_chat(user, "Your pen makes a clicking noise, before quickly rotating back to 0 degrees!") - degrees = 0 - hidden_uplink.locked = FALSE - hidden_uplink.interact(user) + SEND_SIGNAL(src, COMSIG_PEN_ROTATED, deg, user) /obj/item/pen/attack(mob/living/M, mob/user,stealth) if(!istype(M)) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index b69751fd33..4d8cdaa778 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -124,6 +124,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne var/charge_count = 100 var/current_overlay = null var/broken_state = 0 + var/setting = 1 //Gravity value when on /obj/machinery/gravity_generator/main/Destroy() // If we somehow get deleted, remove all of our other parts. investigate_log("was destroyed!", INVESTIGATE_GRAVITY) @@ -385,6 +386,11 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne else GLOB.gravity_generators["[T.z]"] -= src +/obj/machinery/gravity_generator/main/proc/change_setting(value) + if(value != setting) + setting = value + shake_everyone() + // Misc /obj/item/paper/guides/jobs/engi/gravity_gen diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index f2f08c57c4..0b6cf36921 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -89,7 +89,7 @@ if(!cell_connectors) to_chat(user, "This [name] can't support a power cell!") return - if(W.flags_1 & NODROP_1) + if(W.item_flags & NODROP) to_chat(user, "[W] is stuck to your hand!") return user.dropItemToGround(W) diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 9cfca01efa..bf03256219 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -400,8 +400,8 @@ name = "turret controls" icon_state = "offhand" w_class = WEIGHT_CLASS_HUGE - flags_1 = ABSTRACT_1 | NODROP_1 - resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF | NOBLUDGEON_1 + item_flags = ABSTRACT | NODROP | NOBLUDGEON + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF var/delay = 0 /obj/item/turret_control/afterattack(atom/targeted_atom, mob/user, proxflag, clickparams) diff --git a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm index f9edf59368..fc7cca55e6 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_emitter.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_emitter.dm @@ -1,6 +1,6 @@ /obj/structure/particle_accelerator/particle_emitter name = "EM Containment Grid" - desc = "This launchs the Alpha particles, might not want to stand near this end." + desc = "This launches the Alpha particles, might not want to stand near this end." icon = 'icons/obj/machines/particle_accelerator.dmi' icon_state = "none" var/fire_delay = 50 diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index ed16e6a41e..18cd6d22a6 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -105,7 +105,7 @@ add_overlay(mutable_appearance(icon, "solar_panel", FLY_LAYER)) src.setDir(angle2dir(adir)) -//calculates the fraction of the sunlight that the panel recieves +//calculates the fraction of the sunlight that the panel receives /obj/machinery/power/solar/proc/update_solar_exposure() if(obscured) sunfrac = 0 @@ -119,7 +119,7 @@ return sunfrac = cos(p_angle) ** 2 - //isn't the power recieved from the incoming light proportionnal to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ? + //isn't the power received from the incoming light proportionnal to cos(p_angle) (Lambert's cosine law) rather than cos(p_angle)^2 ? /obj/machinery/power/solar/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY if(stat & BROKEN) @@ -423,7 +423,7 @@ A.icon_state = "4" A.anchored = TRUE qdel(src) - else if(user.a_intent != INTENT_HARM && !(I.flags_1 & NOBLUDGEON_1)) + else if(user.a_intent != INTENT_HARM && !(I.item_flags & NOBLUDGEON)) attack_hand(user) else return ..() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 686912f098..53140d45e0 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -255,9 +255,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) sleep(10) continue else if(i > 50) - speaking = "[i/10] seconds remain before causality stabilization." + speaking = "[DisplayTimeText(i, TRUE)] remain before causality stabilization." else - speaking = "[i/10]..." + speaking = "[i*0.1]..." radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language()) sleep(10) @@ -279,7 +279,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(M.z == z) SEND_SOUND(M, 'sound/magic/charge.ogg') to_chat(M, "You feel reality distort for a moment...") - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "delam", /datum/mood_event/delam) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "delam", /datum/mood_event/delam) if(combined_gas > MOLE_PENALTY_THRESHOLD) investigate_log("has collapsed into a singularity.", INVESTIGATE_SUPERMATTER) if(T) @@ -568,7 +568,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) Consume(nom) /obj/machinery/power/supermatter_crystal/attackby(obj/item/W, mob/living/user, params) - if(!istype(W) || (W.flags_1 & ABSTRACT_1) || !istype(user)) + if(!istype(W) || (W.item_flags & ABSTRACT) || !istype(user)) return if (istype(W, /obj/item/melee/roastingstick)) return ..() diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index e149033470..470b6e789c 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -186,6 +186,9 @@ /obj/structure/particle_accelerator/end_cap, /obj/machinery/field/containment, /obj/structure/disposalpipe, + /obj/structure/disposaloutlet, + /obj/machinery/disposal/deliveryChute, + /obj/machinery/camera, /obj/structure/sign, /obj/machinery/gateway, /obj/structure/lattice, diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index de0d03da3b..4c66939e53 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -7,11 +7,6 @@ caliber = "shotgun" projectile_type = /obj/item/projectile/bullet/shotgun_slug materials = list(MAT_METAL=4000) - -/obj/item/ammo_casing/shotgun/tengauge - name = "10g shotgun slug" - desc = "A 10 gauge lead slug." - projectile_type = /obj/item/projectile/bullet/shotgun_slug/tengauge /obj/item/ammo_casing/shotgun/beanbag name = "beanbag slug" @@ -118,7 +113,7 @@ /obj/item/ammo_casing/shotgun/dart/noreact name = "cryostasis shotgun dart" - desc = "A dart for use in shotguns, using similar technolgoy as cryostatis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical." + desc = "A dart for use in shotguns, using similar technology as cryostatis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical." icon_state = "cnrshell" reagent_amount = 10 reagent_react = FALSE diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm index c6dc004879..65724e503a 100644 --- a/code/modules/projectiles/boxes_magazines/external/smg.dm +++ b/code/modules/projectiles/boxes_magazines/external/smg.dm @@ -19,7 +19,7 @@ icon_state = "46x30mmtA-[round(ammo_count(),4)]" /obj/item/ammo_box/magazine/wt550m9/wtic - name = "wt550 magazine (Incindiary 4.6x30mm)" + name = "wt550 magazine (Incendiary 4.6x30mm)" icon_state = "46x30mmtI-20" ammo_type = /obj/item/ammo_casing/c46x30mm/inc @@ -54,7 +54,7 @@ ammo_type = /obj/item/ammo_casing/c9mm/ap /obj/item/ammo_box/magazine/smgm9mm/fire - name = "SMG Magazine (Incindiary 9mm)" + name = "SMG Magazine (Incendiary 9mm)" ammo_type = /obj/item/ammo_casing/c9mm/inc /obj/item/ammo_box/magazine/smgm45 diff --git a/code/modules/projectiles/boxes_magazines/internal/_internal.dm b/code/modules/projectiles/boxes_magazines/internal/_internal.dm index e21cb5ce61..c6ee7ec0cb 100644 --- a/code/modules/projectiles/boxes_magazines/internal/_internal.dm +++ b/code/modules/projectiles/boxes_magazines/internal/_internal.dm @@ -1,6 +1,7 @@ /obj/item/ammo_box/magazine/internal desc = "Oh god, this shouldn't be here" - flags_1 = CONDUCT_1|ABSTRACT_1 + flags_1 = CONDUCT_1 + item_flags = ABSTRACT //internals magazines are accessible, so replace spent ammo if full when trying to put a live one in /obj/item/ammo_box/magazine/internal/give_round(obj/item/ammo_casing/R) diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm index 976f80f437..a98fd29e99 100644 --- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm +++ b/code/modules/projectiles/boxes_magazines/internal/revolver.dm @@ -5,13 +5,13 @@ max_ammo = 6 /obj/item/ammo_box/magazine/internal/cylinder/rev762 - name = "nagant revolver cylinder" + name = "\improper Nagant revolver cylinder" ammo_type = /obj/item/ammo_casing/n762 caliber = "n762" max_ammo = 7 /obj/item/ammo_box/magazine/internal/cylinder/rus357 - name = "russian revolver cylinder" + name = "\improper Russian revolver cylinder" ammo_type = /obj/item/ammo_casing/a357 caliber = "357" max_ammo = 6 diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index a4fcdd0266..24ef2a2604 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -27,7 +27,7 @@ can_suppress = FALSE /obj/item/gun/ballistic/automatic/pistol/deagle - name = "desert eagle" + name = "\improper Desert Eagle" desc = "A robust .50 AE handgun." icon_state = "deagle" force = 14 @@ -44,7 +44,7 @@ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" /obj/item/gun/ballistic/automatic/pistol/deagle/gold - desc = "A gold plated desert eagle folded over a million times by superior martian gunsmiths. Uses .50 AE ammo." + desc = "A gold plated Desert Eagle folded over a million times by superior martian gunsmiths. Uses .50 AE ammo." icon_state = "deagleg" item_state = "deagleg" @@ -55,7 +55,7 @@ /obj/item/gun/ballistic/automatic/pistol/APS name = "stechkin APS pistol" - desc = "The original russian version of a widely used Syndicate sidearm. Uses 9mm ammo." + desc = "The original Russian version of a widely used Syndicate sidearm. Uses 9mm ammo." icon_state = "aps" w_class = WEIGHT_CLASS_SMALL mag_type = /obj/item/ammo_box/magazine/pistolm9mm diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index b359d00602..cd11522342 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -151,7 +151,7 @@ pin = /obj/item/firing_pin /obj/item/gun/ballistic/revolver/nagant - name = "nagant revolver" + name = "\improper Nagant revolver" desc = "An old model of revolver that originated in Russia. Able to be suppressed. Uses 7.62x38mmR ammo." icon_state = "nagant" can_suppress = TRUE @@ -163,7 +163,7 @@ // You can spin the chamber to randomize the position of the bullet. /obj/item/gun/ballistic/revolver/russian - name = "\improper russian revolver" + name = "\improper Russian revolver" desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism requiring you to spin the chamber before each trigger pull." mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357 var/spun = FALSE @@ -233,7 +233,7 @@ user.visible_message("[user.name] fires [src] at [user.p_their()] head!", "You fire [src] at your head!", "You hear a gunshot!") /obj/item/gun/ballistic/revolver/russian/soul - name = "cursed russian revolver" + name = "cursed Russian revolver" desc = "To play with this revolver requires wagering your very soul." /obj/item/gun/ballistic/revolver/russian/soul/shoot_self(mob/living/user) diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index e3b638f051..54ca03f872 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -151,7 +151,8 @@ item_state = "arcane_barrage" can_bayonet = FALSE - flags_1 = DROPDEL_1 + item_flags = NEEDS_PERMIT | DROPDEL + flags_1 = NONE mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 5275e63c3f..c766d1c94e 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -101,8 +101,8 @@ transform *= 1 + ((damage/7) * 0.2)//20% larger per tile /obj/item/gun/energy/xray - name = "x-ray laser gun" - desc = "A high-power laser gun capable of expelling concentrated x-ray blasts that pass through multiple soft targets and heavier materials." + name = "\improper X-ray laser gun" + desc = "A high-power laser gun capable of expelling concentrated X-ray blasts that pass through multiple soft targets and heavier materials." icon_state = "xray" item_state = null ammo_type = list(/obj/item/ammo_casing/energy/xray) diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index bf3ade0748..9c9d253439 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -96,6 +96,10 @@ charges-- ..() +/obj/item/gun/magic/wand/resurrection/debug //for testing + name = "debug wand of healing" + max_charges = 500 + ///////////////////////////////////// //WAND OF POLYMORPH ///////////////////////////////////// diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index 38e6d4d0c6..32da307d47 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -10,7 +10,7 @@ /obj/item/gun/energy/beam_rifle name = "particle acceleration rifle" - desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targetted by one. \ + desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targeted by one. \ Hold down left click while scoped to aim, when weapon is fully aimed (Tracer goes from red to green as it charges), release to fire. Moving while aiming or \ changing where you're pointing at while aiming will delay the aiming process depending on how much you changed." icon = 'icons/obj/guns/energy.dmi' @@ -513,8 +513,6 @@ return 0.4 if(istype(target, /obj/structure/window)) return 0.5 - if(istype(target, /obj/structure/blob)) //CIT CHANGE - Blobs are getting ggnore'd too hard and people need to GIT GUD - return 0.2 return 1 /obj/item/projectile/beam/beam_rifle/proc/handle_impact(atom/target) diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index b5cd9b70a7..f132d62b27 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -147,7 +147,7 @@ // DNA-keyed pin. -// When you want to keep your toys for youself. +// When you want to keep your toys for yourself. /obj/item/firing_pin/dna name = "DNA-keyed firing pin" desc = "This is a DNA-locked firing pin which only authorizes one user. Attempt to fire once to DNA-link." diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 4ee1363853..ecb60463dd 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -8,7 +8,7 @@ icon_state = "bullet" density = FALSE anchored = TRUE - flags_1 = ABSTRACT_1 + item_flags = ABSTRACT pass_flags = PASSTABLE mouse_opacity = MOUSE_OPACITY_TRANSPARENT hitsound = 'sound/weapons/pierce.ogg' diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 3ba0d092c5..b51eaf40ae 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -51,7 +51,7 @@ damage = 5 /obj/item/projectile/beam/xray - name = "xray beam" + name = "\improper X-ray beam" icon_state = "xray" damage = 15 irradiate = 30 diff --git a/code/modules/projectiles/projectile/bullets/_incendiary.dm b/code/modules/projectiles/projectile/bullets/_incendiary.dm index d0cf74421c..b6cca4a31a 100644 --- a/code/modules/projectiles/projectile/bullets/_incendiary.dm +++ b/code/modules/projectiles/projectile/bullets/_incendiary.dm @@ -14,4 +14,4 @@ var/turf/location = get_turf(src) if(location) new /obj/effect/hotspot(location) - location.hotspot_expose(700, 50, 1) + location.hotspot_expose(700, 5, 1) diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 41a819dd16..457ec78e9b 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -2,10 +2,6 @@ name = "12g shotgun slug" damage = 60 -/obj/item/projectile/bullet/shotgun_slug/tengauge - name = "10g shotgun slug" - damage = 72.5 - /obj/item/projectile/bullet/shotgun_beanbag name = "beanbag slug" damage = 5 diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm index afe9a2e31d..f5d0607341 100644 --- a/code/modules/projectiles/projectile/energy/net_snare.dm +++ b/code/modules/projectiles/projectile/energy/net_snare.dm @@ -1,98 +1,98 @@ -/obj/item/projectile/energy/net - name = "energy netting" - icon_state = "e_netting" - damage = 10 - damage_type = STAMINA - hitsound = 'sound/weapons/taserhit.ogg' - range = 10 - -/obj/item/projectile/energy/net/Initialize() - . = ..() - SpinAnimation() - -/obj/item/projectile/energy/net/on_hit(atom/target, blocked = FALSE) - if(isliving(target)) - var/turf/Tloc = get_turf(target) - if(!locate(/obj/effect/nettingportal) in Tloc) - new /obj/effect/nettingportal(Tloc) - ..() - -/obj/item/projectile/energy/net/on_range() - do_sparks(1, TRUE, src) - ..() - -/obj/effect/nettingportal - name = "DRAGnet teleportation field" - desc = "A field of bluespace energy, locking on to teleport a target." - icon = 'icons/effects/effects.dmi' - icon_state = "dragnetfield" - light_range = 3 - anchored = TRUE - -/obj/effect/nettingportal/Initialize() - . = ..() - var/obj/item/beacon/teletarget = null - for(var/obj/machinery/computer/teleporter/com in GLOB.machines) - if(com.target) - if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged) - teletarget = com.target - - addtimer(CALLBACK(src, .proc/pop, teletarget), 30) - -/obj/effect/nettingportal/proc/pop(teletarget) - if(teletarget) - for(var/mob/living/L in get_turf(src)) - do_teleport(L, teletarget, 2)//teleport what's in the tile to the beacon - else - for(var/mob/living/L in get_turf(src)) - do_teleport(L, L, 15) //Otherwise it just warps you off somewhere. - - qdel(src) - -/obj/effect/nettingportal/singularity_act() - return - -/obj/effect/nettingportal/singularity_pull() - return - -/obj/item/projectile/energy/trap - name = "energy snare" - icon_state = "e_snare" - nodamage = 1 - knockdown = 20 - hitsound = 'sound/weapons/taserhit.ogg' - range = 4 - -/obj/item/projectile/energy/trap/on_hit(atom/target, blocked = FALSE) - if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - drop a trap - new/obj/item/restraints/legcuffs/beartrap/energy(get_turf(loc)) - else if(iscarbon(target)) - var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy(get_turf(target)) - B.Crossed(target) - ..() - -/obj/item/projectile/energy/trap/on_range() - new /obj/item/restraints/legcuffs/beartrap/energy(loc) - ..() - -/obj/item/projectile/energy/trap/cyborg - name = "Energy Bola" - icon_state = "e_snare" - nodamage = 1 - knockdown = 0 - hitsound = 'sound/weapons/taserhit.ogg' - range = 10 - -/obj/item/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = FALSE) - if(!ismob(target) || blocked >= 100) - do_sparks(1, TRUE, src) - qdel(src) - if(iscarbon(target)) - var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target)) - B.Crossed(target) - QDEL_IN(src, 10) - ..() - -/obj/item/projectile/energy/trap/cyborg/on_range() - do_sparks(1, TRUE, src) - qdel(src) +/obj/item/projectile/energy/net + name = "energy netting" + icon_state = "e_netting" + damage = 10 + damage_type = STAMINA + hitsound = 'sound/weapons/taserhit.ogg' + range = 10 + +/obj/item/projectile/energy/net/Initialize() + . = ..() + SpinAnimation() + +/obj/item/projectile/energy/net/on_hit(atom/target, blocked = FALSE) + if(isliving(target)) + var/turf/Tloc = get_turf(target) + if(!locate(/obj/effect/nettingportal) in Tloc) + new /obj/effect/nettingportal(Tloc) + ..() + +/obj/item/projectile/energy/net/on_range() + do_sparks(1, TRUE, src) + ..() + +/obj/effect/nettingportal + name = "DRAGnet teleportation field" + desc = "A field of bluespace energy, locking on to teleport a target." + icon = 'icons/effects/effects.dmi' + icon_state = "dragnetfield" + light_range = 3 + anchored = TRUE + +/obj/effect/nettingportal/Initialize() + . = ..() + var/obj/item/beacon/teletarget = null + for(var/obj/machinery/computer/teleporter/com in GLOB.machines) + if(com.target) + if(com.power_station && com.power_station.teleporter_hub && com.power_station.engaged) + teletarget = com.target + + addtimer(CALLBACK(src, .proc/pop, teletarget), 30) + +/obj/effect/nettingportal/proc/pop(teletarget) + if(teletarget) + for(var/mob/living/L in get_turf(src)) + do_teleport(L, teletarget, 2)//teleport what's in the tile to the beacon + else + for(var/mob/living/L in get_turf(src)) + do_teleport(L, L, 15) //Otherwise it just warps you off somewhere. + + qdel(src) + +/obj/effect/nettingportal/singularity_act() + return + +/obj/effect/nettingportal/singularity_pull() + return + +/obj/item/projectile/energy/trap + name = "energy snare" + icon_state = "e_snare" + nodamage = 1 + knockdown = 20 + hitsound = 'sound/weapons/taserhit.ogg' + range = 4 + +/obj/item/projectile/energy/trap/on_hit(atom/target, blocked = FALSE) + if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - drop a trap + new/obj/item/restraints/legcuffs/beartrap/energy(get_turf(loc)) + else if(iscarbon(target)) + var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy(get_turf(target)) + B.Crossed(target) + ..() + +/obj/item/projectile/energy/trap/on_range() + new /obj/item/restraints/legcuffs/beartrap/energy(loc) + ..() + +/obj/item/projectile/energy/trap/cyborg + name = "Energy Bola" + icon_state = "e_snare" + nodamage = 1 + knockdown = 0 + hitsound = 'sound/weapons/taserhit.ogg' + range = 10 + +/obj/item/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = FALSE) + if(!ismob(target) || blocked >= 100) + do_sparks(1, TRUE, src) + qdel(src) + if(iscarbon(target)) + var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target)) + B.Crossed(target) + QDEL_IN(src, 10) + ..() + +/obj/item/projectile/energy/trap/cyborg/on_range() + do_sparks(1, TRUE, src) + qdel(src) diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm index 1c24d47a9d..de9016a4c4 100644 --- a/code/modules/projectiles/projectile/energy/stun.dm +++ b/code/modules/projectiles/projectile/energy/stun.dm @@ -18,7 +18,7 @@ do_sparks(1, TRUE, src) else if(iscarbon(target)) var/mob/living/carbon/C = target - C.SendSignal(COMSIG_ADD_MOOD_EVENT, "tased", /datum/mood_event/tased) + SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "tased", /datum/mood_event/tased) if(C.dna && C.dna.check_mutation(HULK)) C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) else if((C.status_flags & CANKNOCKDOWN) && !C.has_trait(TRAIT_STUNIMMUNE)) diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm index 7fb9c6efb2..44c8df6c00 100644 --- a/code/modules/projectiles/projectile/special/temperature.dm +++ b/code/modules/projectiles/projectile/special/temperature.dm @@ -7,12 +7,11 @@ flag = "energy" var/temperature = 100 -/obj/item/projectile/temp/on_hit(atom/target, blocked = FALSE)//These two could likely check temp protection on the mob - ..() +/obj/item/projectile/temp/on_hit(atom/target, blocked = 0) + . = ..() if(isliving(target)) - var/mob/M = target - M.bodytemperature = temperature - return TRUE + var/mob/living/L = target + L.adjust_bodytemperature(((100-blocked)/100)*(temperature - L.bodytemperature)) // the new body temperature is adjusted by 100-blocked % of the delta between body temperature and the bullet's effect temperature /obj/item/projectile/temp/hot name = "heat beam" diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index d53df1ae95..2def04cc66 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -303,7 +303,7 @@ need_mob_update += R.addiction_act_stage4(C) if(40 to INFINITY) to_chat(C, "You feel like you've gotten over your need for [R.name].") - C.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "[R.id]_addiction") + SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "[R.id]_addiction") cached_addictions.Remove(R) addiction_tick++ if(C && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates. @@ -526,19 +526,54 @@ return TRUE return FALSE +//Returns the average specific heat for all reagents currently in this holder. +/datum/reagents/proc/specific_heat() + . = 0 + var/cached_amount = total_volume //cache amount + var/list/cached_reagents = reagent_list //cache reagents + for(var/I in cached_reagents) + var/datum/reagent/R = I + . += R.specific_heat * (R.volume / cached_amount) + +/datum/reagents/proc/adjust_thermal_energy(J, min_temp = 2.7, max_temp = 1000) + var/S = specific_heat() + chem_temp = CLAMP(chem_temp + (J / (S * total_volume)), 2.7, 1000) + /datum/reagents/proc/add_reagent(reagent, amount, list/data=null, reagtemp = 300, no_react = 0) if(!isnum(amount) || !amount) return FALSE - if(amount < 0) + if(amount <= 0) return FALSE - var/list/cached_reagents = reagent_list - update_total() - if(total_volume + amount > maximum_volume) - amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen. - chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems + var/datum/reagent/D = GLOB.chemical_reagents_list[reagent] + if(!D) + WARNING("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])") + return FALSE + update_total() + var/cached_total = total_volume + if(cached_total + amount > maximum_volume) + amount = (maximum_volume - cached_total) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen. + if(amount <= 0) + return FALSE + var/new_total = cached_total + amount + var/cached_temp = chem_temp + var/list/cached_reagents = reagent_list + + //Equalize temperature - Not using specific_heat() because the new chemical isn't in yet. + var/specific_heat = 0 + var/thermal_energy = 0 + for(var/i in cached_reagents) + var/datum/reagent/R = i + specific_heat += R.specific_heat * (R.volume / new_total) + thermal_energy += R.specific_heat * R.volume * cached_temp + specific_heat += D.specific_heat * (amount / new_total) + thermal_energy += D.specific_heat * amount * reagtemp + chem_temp = thermal_energy / (specific_heat * new_total) + //// + + //add the reagent to the existing if it exists for(var/A in cached_reagents) var/datum/reagent/R = A if (R.id == reagent) @@ -551,29 +586,23 @@ handle_reactions() return TRUE - var/datum/reagent/D = GLOB.chemical_reagents_list[reagent] - if(D) + //otherwise make a new one + var/datum/reagent/R = new D.type(data) + cached_reagents += R + R.holder = src + R.volume = amount + if(data) + R.data = data + R.on_new(data) - var/datum/reagent/R = new D.type(data) - cached_reagents += R - R.holder = src - R.volume = amount - if(data) - R.data = data - R.on_new(data) - - update_total() - if(my_atom) - my_atom.on_reagent_change(ADD_REAGENT) - if(!no_react) - handle_reactions() - if(isliving(my_atom)) - R.on_mob_add(my_atom) - return TRUE - - else - WARNING("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])") - return FALSE + update_total() + if(my_atom) + my_atom.on_reagent_change(ADD_REAGENT) + if(!no_react) + handle_reactions() + if(isliving(my_atom)) + R.on_mob_add(my_atom) + return TRUE /datum/reagents/proc/add_reagent_list(list/list_reagents, list/data=null) // Like add_reagent but you can enter a list. Format it like this: list("toxin" = 10, "beer" = 15) for(var/r_id in list_reagents) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index d350a2316b..80e4453c7d 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -293,7 +293,7 @@ if(default_deconstruction_crowbar(I)) return - if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container()) + if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) var/obj/item/reagent_containers/B = I . = 1 //no afterattack if(beaker) @@ -467,14 +467,14 @@ "creme_de_menthe", "creme_de_cacao", "triple_sec", - "sake", - "fernet" + "sake" ) emagged_reagents = list( "ethanol", "iron", "minttoxin", - "atomicbomb" + "atomicbomb", + "fernet" ) diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 465f9a165b..e4c6966cff 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -46,13 +46,8 @@ if(stat & NOPOWER) return if(on) - if(beaker) - if(beaker.reagents.chem_temp > target_temperature) - beaker.reagents.chem_temp += min(-1, (target_temperature - beaker.reagents.chem_temp) * heater_coefficient) - if(beaker.reagents.chem_temp < target_temperature) - beaker.reagents.chem_temp += max(1, (target_temperature - beaker.reagents.chem_temp) * heater_coefficient) - - beaker.reagents.chem_temp = round(beaker.reagents.chem_temp) + if(beaker && beaker.reagents.total_volume) + beaker.reagents.adjust_thermal_energy((target_temperature - beaker.reagents.chem_temp) * heater_coefficient * SPECIFIC_HEAT_DEFAULT * beaker.reagents.total_volume) beaker.reagents.handle_reactions() /obj/machinery/chem_heater/attackby(obj/item/I, mob/user, params) @@ -62,7 +57,7 @@ if(default_deconstruction_crowbar(I)) return - if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container()) + if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) . = 1 //no afterattack if(beaker) to_chat(user, "A container is already loaded into [src]!") diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 9fd8a8a377..6327c5ba3a 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -84,7 +84,7 @@ if(default_unfasten_wrench(user, I)) return - if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container()) + if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) . = 1 // no afterattack if(panel_open) to_chat(user, "You can't use the [src.name] while its panel is opened!") diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 7247b9b5ed..25385ca2ff 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -228,7 +228,7 @@ /obj/machinery/computer/pandemic/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container()) + if(istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) . = TRUE //no afterattack if(stat & (NOPOWER|BROKEN)) return diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 922b557995..3ee971bc9f 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -81,7 +81,7 @@ if(panel_open) //Can't insert objects when its screwed open return TRUE - if (istype(I, /obj/item/reagent_containers) && !(I.flags_1 & ABSTRACT_1) && I.is_open_container()) + if (istype(I, /obj/item/reagent_containers) && !(I.item_flags & ABSTRACT) && I.is_open_container()) if (!beaker) if(!user.transferItemToLoc(I, src)) to_chat(user, "[I] is stuck to your hand!") @@ -101,7 +101,7 @@ //Fill machine with a bag! if(istype(I, /obj/item/storage/bag)) var/list/inserted = list() - if(I.SendSignal(COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/grown, src, limit - length(holdingitems), null, null, user, inserted)) + if(SEND_SIGNAL(I, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/grown, src, limit - length(holdingitems), null, null, user, inserted)) for(var/i in inserted) holdingitems[i] = TRUE if(!I.contents.len) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index aa84265ec5..33437a63fc 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -8,6 +8,7 @@ var/name = "Reagent" var/id = "reagent" var/description = "" + var/specific_heat = SPECIFIC_HEAT_DEFAULT //J/(K*mol) var/taste_description = "metaphorical salt" var/taste_mult = 1 //how this taste compares to others. Higher values means it is more noticable var/glass_name = "glass of ...what?" // use for specialty drinks. @@ -18,7 +19,7 @@ var/reagent_state = LIQUID var/list/data var/current_cycle = 0 - var/volume = 0 + var/volume = 0 //pretend this is moles var/color = "#000000" // rgb: 0, 0, 0 var/can_synth = TRUE // can this reagent be synthesized? (for example: odysseus syringe gun) var/metabolization_rate = REAGENTS_METABOLISM //how fast the reagent is metabolized by the mob @@ -87,37 +88,37 @@ /datum/reagent/proc/overdose_start(mob/living/M) to_chat(M, "You feel like you took too much of [name]!") - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name) return /datum/reagent/proc/addiction_act_stage1(mob/living/M) - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_light, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_light, name) if(prob(30)) to_chat(M, "You feel like having some [name] right about now.") return /datum/reagent/proc/addiction_act_stage2(mob/living/M) - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_medium, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_medium, name) if(prob(30)) to_chat(M, "You feel like you need [name]. You just can't get enough.") return /datum/reagent/proc/addiction_act_stage3(mob/living/M) - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_severe, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_severe, name) if(prob(30)) to_chat(M, "You have an intense craving for [name].") return /datum/reagent/proc/addiction_act_stage4(mob/living/M) - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_critical, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/withdrawal_critical, name) if(prob(30)) to_chat(M, "You're not feeling good at all! You really need some [name].") return -/proc/pretty_string_from_reagent_list(var/list/reagent_list) +/proc/pretty_string_from_reagent_list(list/reagent_list) //Convert reagent list to a printable string for logging etc - var/result = "| " + var/list/rs = list() for (var/datum/reagent/R in reagent_list) - result += "[R.name], [R.volume] | " + rs += "[R.name], [R.volume]" - return result + return rs.Join(" | ") diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index cc1b75559f..4ffe62015d 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -88,6 +88,15 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of beer" glass_desc = "A freezing pint of beer." +/datum/reagent/consumable/ethanol/beer/light + name = "Light Beer" + id = "light_beer" + description = "An alcoholic beverage brewed since ancient times on Old Earth. This variety has reduced calorie and alcohol content." + boozepwr = 5 //Space Europeans hate it + taste_description = "dish water" + glass_name = "glass of light beer" + glass_desc = "A freezing pint of watery light beer." + /datum/reagent/consumable/ethanol/beer/green name = "Green Beer" id = "greenbeer" @@ -1739,10 +1748,6 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/M) M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) - if(M.nutrition <= NUTRITION_LEVEL_STARVING) - M.adjustToxLoss(1*REM, 0) - M.nutrition = max(M.nutrition - 5, 0) - M.overeatduration = 0 return ..() /datum/reagent/consumable/ethanol/branca_menta/on_mob_add(mob/living/M) diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index 377ddc47fd..136caf0a2c 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -7,7 +7,7 @@ /datum/reagent/drug/on_mob_delete(mob/living/M) if(trippy) - M.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "[id]_high") + SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "[id]_high") /datum/reagent/drug/space_drugs name = "Space drugs" @@ -28,7 +28,7 @@ /datum/reagent/drug/space_drugs/overdose_start(mob/living/M) to_chat(M, "You start tripping hard!") - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "[id]_overdose", /datum/mood_event/drugs/overdose, name) /datum/reagent/drug/space_drugs/overdose_process(mob/living/M) if(M.hallucination < volume && prob(20)) @@ -49,7 +49,7 @@ if(prob(1)) var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.") to_chat(M, "[smoke_message]") - M.SendSignal(COMSIG_ADD_MOOD_EVENT, "smoked", /datum/mood_event/drugs/smoked, name) + SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "smoked", /datum/mood_event/drugs/smoked, name) M.AdjustStun(-20, 0) M.AdjustKnockdown(-20, 0) M.AdjustUnconscious(-20, 0) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 81818554ef..69e9fdec40 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1018,12 +1018,12 @@ else if(O) O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /datum/reagent/space_cleaner/reaction_turf(turf/T, reac_volume) if(reac_volume >= 1) T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - T.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(T, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) for(var/obj/effect/decal/cleanable/C in T) qdel(C) @@ -1041,26 +1041,26 @@ H.lip_style = null H.update_body() for(var/obj/item/I in C.held_items) - I.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(I, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) if(C.wear_mask) - if(C.wear_mask.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(C.wear_mask, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) C.update_inv_wear_mask() if(ishuman(M)) var/mob/living/carbon/human/H = C if(H.head) - if(H.head.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(H.head, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_head() if(H.wear_suit) - if(H.wear_suit.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(H.wear_suit, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_wear_suit() else if(H.w_uniform) - if(H.w_uniform.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(H.w_uniform, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_w_uniform() if(H.shoes) - if(H.shoes.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + if(SEND_SIGNAL(H.shoes, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_shoes() H.wash_cream() - M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /datum/reagent/space_cleaner/ez_clean name = "EZ Clean" diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 74ef9167c9..4c1625a13c 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -58,6 +58,7 @@ id = "plasma" description = "Plasma in its liquid form." taste_description = "bitterness" + specific_heat = SPECIFIC_HEAT_PLASMA taste_mult = 1.5 color = "#8228A0" toxpwr = 3 diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index cdb476c95a..911571a3bd 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -180,7 +180,7 @@ Borg Shaker recharge_time = 3 accepts_reagent_upgrades = FALSE - reagent_ids = list("beer", "orangejuice", "grenadine", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "fernet", "milk", "coffee", "banana", "lemonjuice") + reagent_ids = list("beer", "orangejuice", "grenadine", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale", "milk", "coffee", "banana", "lemonjuice") /obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user) return //Can't inject stuff with a shaker, can we? //not with that attitude @@ -235,7 +235,7 @@ Borg Shaker recharge_time = 3 accepts_reagent_upgrades = FALSE - reagent_ids = list("fakebeer") + reagent_ids = list("fakebeer", "fernet") /obj/item/reagent_containers/borghypo/peace name = "Peace Hypospray" diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 4b797cbd73..4d737657f8 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -226,25 +226,10 @@ desc = "A small bottle of Romerol. The REAL zombie powder." list_reagents = list("romerol" = 30) -/obj/item/reagent_containers/glass/bottle/flu_virion - name = "Flu virion culture bottle" - desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium." - spawned_disease = /datum/disease/advance/flu - -/obj/item/reagent_containers/glass/bottle/epiglottis_virion - name = "Epiglottis virion culture bottle" - desc = "A small bottle. Contains Epiglottis virion culture in synthblood medium." - spawned_disease = /datum/disease/advance/voice_change - -/obj/item/reagent_containers/glass/bottle/liver_enhance_virion - name = "Liver enhancement virion culture bottle" - desc = "A small bottle. Contains liver enhancement virion culture in synthblood medium." - spawned_disease = /datum/disease/advance/heal - -/obj/item/reagent_containers/glass/bottle/hallucigen_virion - name = "Hallucigen virion culture bottle" - desc = "A small bottle. Contains hallucigen virion culture in synthblood medium." - spawned_disease = /datum/disease/advance/hallucigen +/obj/item/reagent_containers/glass/bottle/random_virus + name = "Experimental disease culture bottle" + desc = "A small bottle. Contains an untested viral culture in synthblood medium." + spawned_disease = /datum/disease/advance/random /obj/item/reagent_containers/glass/bottle/pierrot_throat name = "Pierrot's Throat culture bottle" @@ -255,6 +240,11 @@ name = "Rhinovirus culture bottle" desc = "A small bottle. Contains XY-rhinovirus culture in synthblood medium." spawned_disease = /datum/disease/advance/cold + +/obj/item/reagent_containers/glass/bottle/flu_virion + name = "Flu virion culture bottle" + desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium." + spawned_disease = /datum/disease/advance/flu /obj/item/reagent_containers/glass/bottle/retrovirus name = "Retrovirus culture bottle" diff --git a/code/modules/reagents/reagent_containers/medspray.dm b/code/modules/reagents/reagent_containers/medspray.dm index 2eae912556..fdb6a60894 100644 --- a/code/modules/reagents/reagent_containers/medspray.dm +++ b/code/modules/reagents/reagent_containers/medspray.dm @@ -6,7 +6,7 @@ item_state = "spraycan" lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi' - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON obj_flags = UNIQUE_RENAME container_type = OPENCONTAINER slot_flags = ITEM_SLOT_BELT diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index b0e101f76a..91a22ff1fb 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -6,7 +6,7 @@ item_state = "cleaner" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON container_type = OPENCONTAINER slot_flags = ITEM_SLOT_BELT throwforce = 0 diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index a29722b4af..8acecf25a1 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -310,7 +310,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) var/obj/item/conveyor_switch_construct/C = new/obj/item/conveyor_switch_construct(src.loc) C.id = id transfer_fingerprints_to(C) - to_chat(user, "You deattach the conveyor switch.") + to_chat(user, "You detach the conveyor switch.") qdel(src) /obj/machinery/conveyor_switch/oneway diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index aa356d5cd2..737f50859d 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -96,7 +96,7 @@ return if(user.a_intent != INTENT_HARM) - if((I.flags_1 & ABSTRACT_1) || !user.temporarilyRemoveItemFromInventory(I)) + if((I.item_flags & ABSTRACT) || !user.temporarilyRemoveItemFromInventory(I)) return place_item_in_disposal(I, user) update_icon() diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm index 9b0a0dc21e..624d5e0e05 100644 --- a/code/modules/recycling/disposal/construction.dm +++ b/code/modules/recycling/disposal/construction.dm @@ -52,7 +52,7 @@ layer = initial(layer) else if(ispath(pipe_type, /obj/machinery/disposal/bin)) - // Disposal bins recieve special icon treating + // Disposal bins receive special icon treating if(anchored) icon_state = "disposal" else diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index ba089f6fb2..bc073d5e32 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -62,7 +62,7 @@ return dpdir & (~turn(H.dir, 180)) // transfer the holder through this pipe segment -// overriden for special behaviour +// overridden for special behaviour /obj/structure/disposalpipe/proc/transfer(obj/structure/disposalholder/H) return transfer_to_dir(H, nextdir(H)) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 28609e921d..0a36394bc9 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -423,10 +423,11 @@ /datum/design/healthanalyzer name = "Health Analyzer" id = "healthanalyzer" - build_type = AUTOLATHE + build_type = AUTOLATHE | PROTOLATHE materials = list(MAT_METAL = 500, MAT_GLASS = 50) build_path = /obj/item/healthanalyzer category = list("initial", "Medical") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/pillbottle name = "Pill Bottle" @@ -655,7 +656,7 @@ /datum/design/receiver name = "Modular Receiver" - id = "reciever" + id = "receiver" build_type = AUTOLATHE materials = list(MAT_METAL = 15000) build_path = /obj/item/weaponcrafting/receiver diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm index 68bfbfc42e..29ed3505d8 100644 --- a/code/modules/research/designs/electronics_designs.dm +++ b/code/modules/research/designs/electronics_designs.dm @@ -58,7 +58,7 @@ /datum/design/integrated_printer name = "Integrated circuit printer" - desc = "This machine provides all neccesary things for circuitry." + desc = "This machine provides all necessary things for circuitry." id = "icprinter" build_type = PROTOLATHE materials = list(MAT_GLASS = 5000, MAT_METAL = 10000) diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index d07a922fc7..3aec44ded3 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -348,7 +348,7 @@ /datum/design/board/processor name = "Machine Design (Food/Slime Processor Board)" - desc = "The circuit board for a processing unit. Screwdrive the circuit to switch between food (default) or slime processing." + desc = "The circuit board for a processing unit. Screwdriver the circuit to switch between food (default) or slime processing." id = "processor" build_path = /obj/item/circuitboard/machine/processor category = list ("Misc. Machinery") diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index eaa18aaf43..e4ba942c84 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -651,6 +651,15 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") +/datum/design/borg_transform_clown + name = "Cyborg Upgrade (Clown Module)" + id = "borg_transform_clown" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/transform/clown + materials = list(MAT_METAL=10000, MAT_GLASS=15000, MAT_BANANIUM = 1000) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + /datum/design/borg_upgrade_selfrepair name = "Cyborg Upgrade (Self-repair)" id = "borg_upgrade_selfrepair" @@ -696,6 +705,24 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") +/datum/design/borg_upgrade_trashofholding + name = "Cyborg Upgrade (Trash Bag of Holding)" + id = "borg_upgrade_trashofholding" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/tboh + materials = list(MAT_METAL=10000, MAT_GOLD=1500, MAT_URANIUM=250, MAT_PLASMA=1500) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + +/datum/design/borg_upgrade_advancedmop + name = "Cyborg Upgrade (Advanced Mop)" + id = "borg_upgrade_advancedmop" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/amop + materials = list(MAT_METAL=10000, MAT_GLASS=200, MAT_TITANIUM=1000) + construction_time = 120 + category = list("Cyborg Upgrade Modules") + /datum/design/borg_upgrade_expand name = "Cyborg Upgrade (Expand)" id = "borg_upgrade_expand" @@ -751,17 +778,6 @@ construction_time = 50 category = list("Misc") -/datum/design/drone_shell - name = "Drone Shell" - desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs." - id = "drone_shell" - build_type = MECHFAB | PROTOLATHE - materials = list(MAT_METAL = 800, MAT_GLASS = 350) - construction_time=150 - build_path = /obj/item/drone_shell - category = list("Misc") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - /datum/design/synthetic_flash name = "Flash" desc = "When a problem arises, SCIENCE is the solution." diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 9df3df3c31..5f1e5ea520 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -200,7 +200,17 @@ materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500) category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - + +/datum/design/healthanalyzer_advanced + name = "advanced health analyzer" + desc = "A hand-held body scanner able to distinguish vital signs of the subject with high accuracy." + id = "healthanalyzer_advanced" + build_path = /obj/item/healthanalyzer/advanced + build_type = PROTOLATHE + materials = list(MAT_METAL = 5000, MAT_GLASS = 2500, MAT_SILVER = 2000, MAT_GOLD = 1500) + category = list("Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + ///////////////////////////////////////// //////////Cybernetic Implants//////////// ///////////////////////////////////////// @@ -283,7 +293,7 @@ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/cyberimp_xray - name = "X-Ray Eyes" + name = "X-ray Eyes" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." id = "ci-xray" build_type = PROTOLATHE | MECHFAB diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm index b2a6c34269..18934d021c 100644 --- a/code/modules/research/designs/mining_designs.dm +++ b/code/modules/research/designs/mining_designs.dm @@ -14,7 +14,7 @@ /datum/design/bluespace_pod name = "Supply Drop Pod Upgrade Disk" - desc = "Allows the Cargo Express Console to call down the Bluespace Drop Pod, greatly increasing user saftey."//who? + desc = "Allows the Cargo Express Console to call down the Bluespace Drop Pod, greatly increasing user safety."//who? id = "bluespace_pod"//the coder reading this build_type = PROTOLATHE materials = list(MAT_GLASS = 1000) diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index b30470036e..e1648559a7 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -59,7 +59,7 @@ /datum/design/light_replacer name = "Light Replacer" - desc = "A device to automatically replace lights. Refill with working lightbulbs." + desc = "A device to automatically replace lights. Refill with working light bulbs." id = "light_replacer" build_type = PROTOLATHE materials = list(MAT_METAL = 1500, MAT_SILVER = 150, MAT_GLASS = 3000) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 2fcb20a498..0c7b7327fa 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -181,7 +181,7 @@ departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL /datum/design/xray - name = "Xray Laser Gun" + name = "X-ray Laser Gun" desc = "Not quite as menacing as it sounds" id = "xray_laser" build_type = PROTOLATHE diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 76712dd55e..75ed53e936 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -24,7 +24,7 @@ create_reagents(0) materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), 0, - FALSE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) + TRUE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.precise_insertion = TRUE RefreshParts() matching_designs = list() diff --git a/code/modules/research/machinery/departmental_circuit_imprinter.dm b/code/modules/research/machinery/departmental_circuit_imprinter.dm index c51288b685..e47bd97494 100644 --- a/code/modules/research/machinery/departmental_circuit_imprinter.dm +++ b/code/modules/research/machinery/departmental_circuit_imprinter.dm @@ -1,6 +1,6 @@ /obj/machinery/rnd/production/circuit_imprinter/department name = "department circuit imprinter" - desc = "A special circuit imprinter with a built in interface meant for departmental usage, with built in ExoSync recievers allowing it to print designs researched that match its ROM-encoded department type." + desc = "A special circuit imprinter with a built in interface meant for departmental usage, with built in ExoSync receivers allowing it to print designs researched that match its ROM-encoded department type." icon_state = "circuit_imprinter" container_type = OPENCONTAINER circuit = /obj/item/circuitboard/machine/circuit_imprinter/department diff --git a/code/modules/research/machinery/departmental_protolathe.dm b/code/modules/research/machinery/departmental_protolathe.dm index ddc0b7c749..f91f3282d5 100644 --- a/code/modules/research/machinery/departmental_protolathe.dm +++ b/code/modules/research/machinery/departmental_protolathe.dm @@ -1,6 +1,6 @@ /obj/machinery/rnd/production/protolathe/department name = "department protolathe" - desc = "A special protolathe with a built in interface meant for departmental usage, with built in ExoSync recievers allowing it to print designs researched that match its ROM-encoded department type." + desc = "A special protolathe with a built in interface meant for departmental usage, with built in ExoSync receivers allowing it to print designs researched that match its ROM-encoded department type." icon_state = "protolathe" container_type = OPENCONTAINER circuit = /obj/item/circuitboard/machine/protolathe/department diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 87f8cefe78..23d515cf88 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -44,6 +44,9 @@ return if(default_deconstruction_crowbar(O)) return + if(panel_open && is_wire_tool(O)) + wires.interact(user) + return TRUE if(is_refillable() && O.is_drainable()) return FALSE //inserting reagents into the machine if(Insert_Item(O, user)) @@ -65,6 +68,7 @@ to_chat(user, "You can't load [src] while it's opened!") return FALSE if(disabled) + to_chat(user, "The insertion belts of [src] won't engage!") return FALSE if(requires_console && !linked_console) to_chat(user, "[src] must be linked to an R&D console first!") diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index a34476ce1c..7c23609c21 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -106,19 +106,19 @@ l[i] = amount modify_point_list(l) -/datum/techweb/proc/copy_research_to(datum/techweb/reciever, unlock_hidden = TRUE) //Adds any missing research to theirs. +/datum/techweb/proc/copy_research_to(datum/techweb/receiver, unlock_hidden = TRUE) //Adds any missing research to theirs. for(var/i in researched_nodes) CHECK_TICK - reciever.research_node_id(i, TRUE, FALSE) + receiver.research_node_id(i, TRUE, FALSE) for(var/i in researched_designs) CHECK_TICK - reciever.add_design_by_id(i) + receiver.add_design_by_id(i) if(unlock_hidden) - for(var/i in reciever.hidden_nodes) + for(var/i in receiver.hidden_nodes) CHECK_TICK if(!hidden_nodes[i]) - reciever.hidden_nodes -= i //We can see it so let them see it too. - reciever.recalculate_nodes() + receiver.hidden_nodes -= i //We can see it so let them see it too. + receiver.recalculate_nodes() /datum/techweb/proc/copy() var/datum/techweb/returned = new() diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 015f0dafb6..a65ad7de0a 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -18,7 +18,7 @@ display_name = "Biological Technology" description = "What makes us tick." //the MC, silly! prereq_ids = list("base") - design_ids = list("chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser") + design_ids = list("chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -27,7 +27,7 @@ display_name = "Advanced Biotechnology" description = "Advanced Biotechnology" prereq_ids = list("biotech") - design_ids = list("piercesyringe", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker") + design_ids = list("piercesyringe", "smoke_machine", "plasmarefiller", "limbgrower", "defibrillator", "meta_beaker", "healthanalyzer_advanced") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -198,7 +198,7 @@ display_name = "Basic Robotics Research" description = "Programmable machines that make our lives lazier." prereq_ids = list("base") - design_ids = list("paicard", "drone_shell") + design_ids = list("paicard") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -207,7 +207,7 @@ display_name = "Advanced Robotics Research" description = "It can even do the dishes!" prereq_ids = list("robotics") - design_ids = list("borg_upgrade_diamonddrill") + design_ids = list("borg_upgrade_diamonddrill", "borg_upgrade_trashofholding", "borg_upgrade_advancedmop") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -320,7 +320,7 @@ description = "Honk?!" prereq_ids = list("base") design_ids = list("air_horn", "honker_main", "honker_peri", "honker_targ", "honk_chassis", "honk_head", "honk_torso", "honk_left_arm", "honk_right_arm", - "honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone") + "honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone", "borg_transform_clown") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/code/modules/research/xenobiology/crossbreeding/_corecross.dm b/code/modules/research/xenobiology/crossbreeding/_corecross.dm index 45cc0c1efc..43f23d013d 100644 --- a/code/modules/research/xenobiology/crossbreeding/_corecross.dm +++ b/code/modules/research/xenobiology/crossbreeding/_corecross.dm @@ -39,7 +39,7 @@ To add a crossbreed: /obj/item/slimecross/Initialize() ..() - name = colour + " " + name + name = effect + " " + colour + " extract" var/itemcolor = "#FFFFFF" switch(colour) if("orange") diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 97112c148a..ca334497a7 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -564,6 +564,7 @@ datum/status_effect/stabilized/blue/on_remove() /datum/status_effect/stabilized/cerulean/on_remove() if(clone) clone.visible_message("[clone] dissolves into a puddle of goo!") + clone.unequip_everything() qdel(clone) /datum/status_effect/stabilized/pyrite diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index 7183ece045..8ae7bf8d54 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -386,6 +386,9 @@ Charged extracts: if(user == M) to_chat(user, "You can't drink the love potion. What are you, a narcissist?") return ..() + if(M.has_status_effect(STATUS_EFFECT_INLOVE)) + to_chat(user, "[M] is already lovestruck!") + return ..() M.visible_message("[user] starts to feed [M] a love potion!", "[user] starts to feed you a love potion!") @@ -393,10 +396,11 @@ Charged extracts: if(!do_after(user, 50, target = M)) return to_chat(user, "You feed [M] the love potion!") - to_chat(M, "You develop feelings for [user], and anyone [p_they(user)] like.") - if(!("[REF(user)]" in M.faction) && M.mind) - M.mind.store_memory("You have strong feelings for [user].") + to_chat(M, "You develop feelings for [user], and anyone [user.p_they()] like.") + if(M.mind) + M.mind.store_memory("You are in love with [user].") M.faction |= "[REF(user)]" + M.apply_status_effect(STATUS_EFFECT_INLOVE, user) qdel(src) /obj/item/slimepotion/peacepotion diff --git a/code/modules/research/xenobiology/crossbreeding/recurring.dm b/code/modules/research/xenobiology/crossbreeding/recurring.dm index cc36bbb215..8a6e5c3cbb 100644 --- a/code/modules/research/xenobiology/crossbreeding/recurring.dm +++ b/code/modules/research/xenobiology/crossbreeding/recurring.dm @@ -21,6 +21,7 @@ Recurring extracts: extract.desc = desc extract.icon = icon extract.icon_state = icon_state + extract.color = color extract.recurring = TRUE src.forceMove(extract) START_PROCESSING(SSobj,src) diff --git a/code/modules/research/xenobiology/crossbreeding/reproductive.dm b/code/modules/research/xenobiology/crossbreeding/reproductive.dm index 878e17c1e7..2f6ca9555a 100644 --- a/code/modules/research/xenobiology/crossbreeding/reproductive.dm +++ b/code/modules/research/xenobiology/crossbreeding/reproductive.dm @@ -19,7 +19,7 @@ Reproductive extracts: return if(istype(O, /obj/item/storage/bag/bio)) var/list/inserted = list() - O.SendSignal(COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/monkeycube, src, 1, null, null, user, inserted) + SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/monkeycube, src, 1, null, null, user, inserted) if(inserted.len) var/obj/item/reagent_containers/food/snacks/monkeycube/M = inserted[1] if(istype(M)) diff --git a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm index 7bb723bc3d..93e5a8e739 100644 --- a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm +++ b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm @@ -4,7 +4,7 @@ Self-sustaining extracts: */ /obj/item/slimecross/selfsustaining name = "self-sustaining extract" - effect = "selfsustaining" + effect = "self-sustaining" icon_state = "selfsustaining" var/extract_type = /obj/item/slime_extract @@ -23,6 +23,7 @@ Self-sustaining extracts: A.extract = X A.icon = icon A.icon_state = icon_state + A.color = color qdel(src) /obj/item/autoslime/Initialize() diff --git a/code/modules/research/xenobiology/crossbreeding/stabilized.dm b/code/modules/research/xenobiology/crossbreeding/stabilized.dm index cc80c3a780..fe1b498667 100644 --- a/code/modules/research/xenobiology/crossbreeding/stabilized.dm +++ b/code/modules/research/xenobiology/crossbreeding/stabilized.dm @@ -163,4 +163,4 @@ Stabilized extracts: regencore = regen regen.forceMove(src) return - return ..() + return ..() \ No newline at end of file diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index a5998400c8..b8cc61df97 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -702,7 +702,7 @@ imp.implant(SM, user) SM.access_card = new /obj/item/card/id/syndicate(SM) - SM.access_card.flags_1 |= NODROP_1 + SM.access_card.item_flags |= NODROP /obj/item/slimepotion/transference name = "consciousness transference potion" @@ -725,7 +725,11 @@ if(SM.sentience_type != animal_type) to_chat(user, "You cannot transfer your consciousness to [SM]." ) return ..() - if(jobban_isbanned(user, ROLE_ALIEN)) //ideally sentience and trasnference potions should be their own unique role. + var/jb = jobban_isbanned(user, ROLE_ALIEN) + if(QDELETED(src) || QDELETED(M) || QDELETED(user)) + return + + if(jb) //ideally sentience and trasnference potions should be their own unique role. to_chat(user, "Your mind goes blank as you attempt to use the potion.") return @@ -909,7 +913,7 @@ /obj/item/slimepotion/slime/slimeradio name = "bluespace radio potion" - desc = "A strange chemical that grants those who ingest it the ability to broadcast and recieve subscape radio waves." + desc = "A strange chemical that grants those who ingest it the ability to broadcast and receive subscape radio waves." icon = 'icons/obj/chemical.dmi' icon_state = "potgrey" diff --git a/code/modules/ruins/spaceruin_code/listeningstation.dm b/code/modules/ruins/spaceruin_code/listeningstation.dm index ff0bad8257..8efeaaabff 100644 --- a/code/modules/ruins/spaceruin_code/listeningstation.dm +++ b/code/modules/ruins/spaceruin_code/listeningstation.dm @@ -32,11 +32,11 @@ /obj/item/paper/fluff/ruins/listeningstation/receipt name = "receipt" - info = "1 x Stechtkin pistol - $600
1 x silencer - $200
shipping charge - $4360
total - $5160" + info = "1 x Stechkin pistol - $600
1 x silencer - $200
shipping charge - $4360
total - $5160" /obj/item/paper/fluff/ruins/listeningstation/odd_report name = "odd report" - info = "I wonder how much longer they will accept my empty reports. They will cancel the case soon without results. When the pickup comes, I will tell them I have lost faith in our cause, and beg them to consider a diplomatic solution. How many nuclear teams have been dispatched with those nukes? I must try and prevent more from ever being sent. If they will not listen to reason, I will detonate the warehouse myself. Maybe some day in the immediate future, space will be peaceful, though I don't intend to live to see it. And that is why I write this down- it is my sacrifice that stabilized your worlds, traveller. Spare a thought for me, and please attempt to prevent nuclear proliferation, should it ever rear its ugly head again. -Donk Co. Operative #451" + info = "I wonder how much longer they will accept my empty reports. They will cancel the case soon without results. When the pickup comes, I will tell them I have lost faith in our cause, and beg them to consider a diplomatic solution. How many nuclear teams have been dispatched with those nukes? I must try and prevent more from ever being sent. If they will not listen to reason, I will detonate the warehouse myself. Maybe some day in the immediate future, space will be peaceful, though I don't intend to live to see it. And that is why I write this down- it is my sacrifice that stabilized your worlds, traveller. Spare a thought for me, and please attempt to prevent nuclear proliferation, should it ever rear its ugly head again. -DonkCo Operative #451" /obj/item/paper/fluff/ruins/listeningstation/briefing name = "mission briefing" diff --git a/code/modules/ruins/spaceruin_code/oldstation.dm b/code/modules/ruins/spaceruin_code/oldstation.dm index d023760061..b216145023 100644 --- a/code/modules/ruins/spaceruin_code/oldstation.dm +++ b/code/modules/ruins/spaceruin_code/oldstation.dm @@ -1,7 +1,7 @@ /////////// Oldstation items /obj/item/paper/fluff/ruins/oldstation - name = "Cyro Awakening Alert" + name = "Cryo Awakening Alert" info = "**WARNING**

Catastrophic damage sustained to station. Powernet exhausted to reawaken crew.

Immediate Objectives

1: Activate emergency power generator
2: Lift station lockdown on the bridge

Please locate the 'Damage Report' on the bridge for a detailed situation report." /obj/item/paper/fluff/ruins/oldstation/damagereport @@ -43,7 +43,7 @@ /obj/item/paper/fluff/ruins/oldstation/report name = "Crew Reawakening Report" - info = "Artifical Program's report to surviving crewmembers.

Crew were placed into cryostasis on March 10th, 2445.

Crew were awoken from cryostasis around June, 2557.

\ + info = "Artificial Program's report to surviving crewmembers.

Crew were placed into cryostasis on March 10th, 2445.

Crew were awoken from cryostasis around June, 2557.

\ SIGNIFICANT EVENTS OF NOTE
1: The primary radiation detectors were taken offline after 112 years due to power failure, secondary radiation detectors showed no residual \ radiation on station. Deduction, primarily detector was malfunctioning and was producing a radiation signal when there was none.

2: A data burst from a nearby Nanotrasen Space \ - Station was recieved, this data burst contained research data that has been uploaded to our RnD labs.

3: Unknown invasion force has occupied Delta station." + Station was received, this data burst contained research data that has been uploaded to our RnD labs.

3: Unknown invasion force has occupied Delta station." diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm index 84f0ac493d..43b273914c 100644 --- a/code/modules/shuttle/assault_pod.dm +++ b/code/modules/shuttle/assault_pod.dm @@ -19,7 +19,7 @@ /obj/item/assault_pod - name = "Assault Pod Targetting Device" + name = "Assault Pod Targeting Device" icon = 'icons/obj/device.dmi' icon_state = "gangtool-red" item_state = "radio" diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index fc32b60e6d..20b8c26d83 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -263,6 +263,14 @@ return has_people +/obj/docking_port/mobile/emergency/proc/ShuttleDBStuff() + set waitfor = FALSE + if(!SSdbcore.Connect()) + return + var/datum/DBQuery/query_round_shuttle_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET shuttle_name = '[name]' WHERE id = [GLOB.round_id]") + query_round_shuttle_name.Execute() + qdel(query_round_shuttle_name) + /obj/docking_port/mobile/emergency/check() if(!timer) return @@ -293,9 +301,7 @@ setTimer(SSshuttle.emergencyDockTime) send2irc("Server", "The Emergency Shuttle has docked with the station.") priority_announce("The Emergency Shuttle has docked with the station. You have [timeLeft(600)] minutes to board the Emergency Shuttle.", null, 'sound/ai/shuttledock.ogg', "Priority") - if(SSdbcore.Connect()) - var/datum/DBQuery/query_round_shuttle_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET shuttle_name = '[name]' WHERE id = [GLOB.round_id]") - query_round_shuttle_name.Execute() + ShuttleDBStuff() if(SHUTTLE_DOCKED) @@ -537,7 +543,7 @@ /obj/item/storage/pod/attack_hand(mob/user) if (can_interact(user)) - SendSignal(COMSIG_TRY_STORAGE_SHOW, user) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SHOW, user) return TRUE /obj/item/storage/pod/MouseDrop(over_object, src_location, over_location) diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index f2d56686e0..eaa1f36b75 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -36,5 +36,5 @@ if(last_request && (last_request + cooldown > world.time)) return last_request = world.time - to_chat(usr, "Your request has been recieved by CentCom.") + to_chat(usr, "Your request has been received by CentCom.") to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to CentCom.") diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm index cc69fb5d15..a2159a50fd 100644 --- a/code/modules/shuttle/shuttle_rotate.dm +++ b/code/modules/shuttle/shuttle_rotate.dm @@ -25,7 +25,7 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate pixel_x = oldPY pixel_y = (oldPX*(-1)) - SendSignal(COMSIG_ATOM_ROTATE, rotation, params) + SEND_SIGNAL(src, COMSIG_ATOM_ROTATE, rotation, params) /************************************Turf rotate procs************************************/ diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index abe601e503..0f005f69f7 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -165,7 +165,7 @@ var/datum/job/captain/C = new /datum/job/captain access_card.access = C.get_access() access_card.access |= ACCESS_CENT_BAR - access_card.flags_1 |= NODROP_1 + access_card.item_flags |= NODROP /mob/living/simple_animal/hostile/alien/maid/barmaid/Destroy() qdel(access_card) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 773b35544c..1cf12e6d42 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -13,7 +13,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/machinery/clonepod, /obj/effect/mob_spawn, /obj/effect/hierophant, - /obj/structure/recieving_pad, + /obj/structure/receiving_pad, /obj/effect/clockwork/spatial_gateway, /obj/structure/destructible/clockwork/powered/clockwork_obelisk, /obj/item/warp_cube, diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 4d92878cc2..4e6ef7ed9b 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -373,7 +373,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th if("unconscious") target.AdjustUnconscious(amount) else - target.vars[type] += amount //I bear no responsibility for the runtimes that'll happen if you try to adjust non-numeric or even non-existant vars + target.vars[type] += amount //I bear no responsibility for the runtimes that'll happen if you try to adjust non-numeric or even non-existent vars /obj/effect/proc_holder/spell/targeted //can mean aoe for mobs (limited/unlimited number) or one target mob var/max_targets = 1 //leave 0 for unlimited targets in range, 1 for one selectable target in range, more for limited number of casts (can all target one guy, depends on target_ignore_prev) in range diff --git a/code/modules/spells/spell_types/barnyard.dm b/code/modules/spells/spell_types/barnyard.dm index 70b33919b7..01b24fef98 100644 --- a/code/modules/spells/spell_types/barnyard.dm +++ b/code/modules/spells/spell_types/barnyard.dm @@ -44,7 +44,7 @@ var/choice = masks[randM] var/obj/item/clothing/mask/magichead = new choice - magichead.flags_1 |= NODROP_1 + magichead.item_flags |= NODROP magichead.flags_inv = null target.visible_message("[target]'s face bursts into flames, and a barnyard animal's head takes its place!", \ "Your face burns up, and shortly after the fire you realise you have the face of a barnyard animal!") diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm index ff71ad8e68..8e1957f524 100644 --- a/code/modules/spells/spell_types/construct_spells.dm +++ b/code/modules/spells/spell_types/construct_spells.dm @@ -220,7 +220,7 @@ /obj/effect/proc_holder/spell/targeted/dominate name = "Dominate" - desc = "This spell dominates the mind of a lesser creature, causing it to see you as an ally." + desc = "This spell dominates the mind of a lesser creature to the will of Nar'sie, allying it only to her direct followers." charge_max = 600 range = 7 diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index bf402b7a6a..27cfc9208b 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -7,7 +7,7 @@ icon = 'icons/obj/items_and_weapons.dmi' icon_state = "syndballoon" item_state = null - flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1 + item_flags = NEEDS_PERMIT | ABSTRACT | NODROP | DROPDEL w_class = WEIGHT_CLASS_HUGE force = 0 throwforce = 0 @@ -60,10 +60,7 @@ target.visible_message("[target]'s [A] glows brightly as it wards off the spell!") user.visible_message("The feedback blows [user]'s arm off!","The spell bounces from [M]'s skin back into your arm!") user.flash_act() - var/obj/item/bodypart/part - var/index = user.get_held_index_of_item(src) - if(index) - part = user.hand_bodyparts[index] + var/obj/item/bodypart/part = user.get_holding_bodypart_of_item(src) if(part) part.dismember() ..() diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index 33b555ad21..d88ee7fb22 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -31,10 +31,10 @@ var/obj/item/marked_item - for(var/obj/item in hand_items) + for(var/obj/item/item in hand_items) // I ensouled the nuke disk once. But it's probably a really // mean tactic, so probably should discourage it. - if((item.flags_1 & ABSTRACT_1) || (item.flags_1 & NODROP_1) || item.SendSignal(COMSIG_ITEM_IMBUE_SOUL, user)) + if((item.item_flags & ABSTRACT) || (item.item_flags & NODROP) || SEND_SIGNAL(item, COMSIG_ITEM_IMBUE_SOUL, user)) continue marked_item = item to_chat(M, "You begin to focus your very being into [item]...") diff --git a/code/modules/spells/spell_types/mime.dm b/code/modules/spells/spell_types/mime.dm index 2b904df277..e3177dbb4f 100644 --- a/code/modules/spells/spell_types/mime.dm +++ b/code/modules/spells/spell_types/mime.dm @@ -58,9 +58,9 @@ H.mind.miming=!H.mind.miming if(H.mind.miming) to_chat(H, "You make a vow of silence.") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "vow") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "vow") else - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "vow", /datum/mood_event/broken_vow) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "vow", /datum/mood_event/broken_vow) to_chat(H, "You break your vow of silence.") // These spells can only be gotten from the "Guide for Advanced Mimery series" for Mime Traitors. @@ -131,17 +131,26 @@ /obj/item/book/granter/spell/mimery_blockade spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime - spellname = "" + spellname = "Invisible Blockade" name = "Guide to Advanced Mimery Vol 1" desc = "The pages don't make any sound when turned." icon_state ="bookmime" remarks = list("...") +/obj/item/book/granter/spell/mimery_blockade/attack_self(mob/user) + ..() + if(!locate(/obj/effect/proc_holder/spell/targeted/mime/speak) in user.mind.spell_list) + user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak) /obj/item/book/granter/spell/mimery_guns spell = /obj/effect/proc_holder/spell/aimed/finger_guns - spellname = "" + spellname = "Finger Guns" name = "Guide to Advanced Mimery Vol 2" desc = "There aren't any words written..." icon_state ="bookmime" remarks = list("...") + +/obj/item/book/granter/spell/mimery_guns/attack_self(mob/user) + ..() + if(!locate(/obj/effect/proc_holder/spell/targeted/mime/speak) in user.mind.spell_list) + user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak) \ No newline at end of file diff --git a/code/modules/spells/spell_types/summonitem.dm b/code/modules/spells/spell_types/summonitem.dm index bd5099da68..0bb79eba21 100644 --- a/code/modules/spells/spell_types/summonitem.dm +++ b/code/modules/spells/spell_types/summonitem.dm @@ -22,10 +22,10 @@ if(!marked_item) //linking item to the spell message = "" - for(var/obj/item in hand_items) - if(item.flags_1 & ABSTRACT_1) + for(var/obj/item/item in hand_items) + if(item.item_flags & ABSTRACT) continue - if(item.flags_1 & NODROP_1) + if(item.item_flags & NODROP) message += "Though it feels redundant, " marked_item = item message += "You mark [item] for recall." @@ -83,7 +83,7 @@ to_chat(C, "The [item_to_retrieve] that was embedded in your [L] has mysteriously vanished. How fortunate!") if(!C.has_embedded_objects()) C.clear_alert("embeddedobject") - C.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "embedded") break else diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 9be68103c3..0601ff28e1 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -67,7 +67,7 @@ lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' icon_state = "hypo" - flags_1 = NOBLUDGEON_1 + item_flags = NOBLUDGEON var/list/animals = list() var/list/plants = list() var/list/dna = list() diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index c806a68867..87e13955fe 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -19,7 +19,7 @@ affecting.receive_damage(CLAMP(brute_dam/2, 15, 50), CLAMP(burn_dam/2, 0, 50)) //Damage the chest based on limb's existing damage C.visible_message("[C]'s [src.name] has been violently dismembered!") C.emote("scream") - C.SendSignal(COMSIG_ADD_MOOD_EVENT, "dismembered", /datum/mood_event/dismembered) + SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "dismembered", /datum/mood_event/dismembered) drop_limb() if(dam_type == BURN) @@ -102,7 +102,7 @@ I.forceMove(src) if(!C.has_embedded_objects()) C.clear_alert("embeddedobject") - C.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(C, COMSIG_CLEAR_MOOD_EVENT, "embedded") if(!special) if(C.dna) diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index 12531a9ee5..91336331c4 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -121,7 +121,7 @@ I.forceMove(T) clear_alert("embeddedobject") - SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "embedded") /mob/living/carbon/proc/has_embedded_objects() . = 0 diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index fe4f1a6edf..e57f8f686b 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -29,9 +29,13 @@ /datum/surgery_step/handle_cavity/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) var/obj/item/bodypart/chest/CH = target.get_bodypart(BODY_ZONE_CHEST) if(tool) - if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || (tool.flags_1 & NODROP_1) || istype(tool, /obj/item/organ)) + if(IC || tool.w_class > WEIGHT_CLASS_NORMAL || (tool.item_flags & NODROP) || istype(tool, /obj/item/organ)) to_chat(user, "You can't seem to fit [tool] in [target]'s [target_zone]!") return 0 + var/obj/item/electronic_assembly/EA = tool + if(istype(EA) && EA.combat_circuits && tool.w_class > WEIGHT_CLASS_SMALL) + to_chat(user, "[tool] is too dangerous to put in [target]'s [target_zone]! Maybe if it was smaller...") + return 0 else user.visible_message("[user] stuffs [tool] into [target]'s [target_zone]!", "You stuff [tool] into [target]'s [target_zone].") user.transferItemToLoc(tool, target, TRUE) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index e93da8b139..ea2385ce5f 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -86,7 +86,7 @@ holder = item - holder.flags_1 |= NODROP_1 + holder.item_flags |= NODROP holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF holder.slot_flags = null holder.materials = null diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index 133fe5d8be..0302dd2cae 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -13,7 +13,7 @@ var/hunger_threshold = NUTRITION_LEVEL_STARVING var/synthesizing = 0 var/poison_amount = 5 - slot = ORGAN_SLOT_STOMACH + slot = ORGAN_SLOT_STOMACH_AID /obj/item/organ/cyberimp/chest/nutriment/on_life() if(synthesizing) diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 4aa06f01c6..38967711fe 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -51,7 +51,7 @@ active = !active if(active) for(var/obj/item/I in owner.held_items) - if(!(I.flags_1 & NODROP_1)) + if(!(I.item_flags & NODROP)) stored_items += I var/list/L = owner.get_empty_held_indexes() @@ -62,7 +62,7 @@ else for(var/obj/item/I in stored_items) to_chat(owner, "Your [owner.get_held_index_name(owner.get_held_index_of_item(I))]'s grip tightens.") - I.flags_1 |= NODROP_1 + I.item_flags |= NODROP else release_items() @@ -86,7 +86,7 @@ /obj/item/organ/cyberimp/brain/anti_drop/proc/release_items() for(var/obj/item/I in stored_items) - I.flags_1 &= ~NODROP_1 + I.item_flags &= ~NODROP stored_items = list() diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 5092b53374..d38e76ae6e 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -98,7 +98,7 @@ owner.flash_act(visual = 1) /obj/item/organ/eyes/robotic/xray - name = "X-ray eyes" + name = "\improper X-ray eyes" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." eye_color = "000" see_in_dark = 8 diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm index 3ddf658ecd..cb7833a373 100755 --- a/code/modules/surgery/organs/stomach.dm +++ b/code/modules/surgery/organs/stomach.dm @@ -39,22 +39,22 @@ switch(H.disgust) if(0 to DISGUST_LEVEL_GROSS) H.clear_alert("disgust") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "disgust") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "disgust") if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS) H.throw_alert("disgust", /obj/screen/alert/gross) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/gross) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/gross) if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED) H.throw_alert("disgust", /obj/screen/alert/verygross) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/verygross) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/verygross) if(DISGUST_LEVEL_DISGUSTED to INFINITY) H.throw_alert("disgust", /obj/screen/alert/disgusted) - H.SendSignal(COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/disgusted) + SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "disgust", /datum/mood_event/disgust/disgusted) /obj/item/organ/stomach/Remove(mob/living/carbon/M, special = 0) var/mob/living/carbon/human/H = owner if(istype(H)) H.clear_alert("disgust") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "disgust") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "disgust") ..() /obj/item/organ/stomach/fly diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 2521037963..48392f70a3 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -488,7 +488,7 @@ L.lay_down() //aka get up L.SetStun(0) L.SetKnockdown(0) - L.SetUnconscious(0) //i said get up i don't care if you're being tazed + L.SetUnconscious(0) //i said get up i don't care if you're being tased //SIT else if((findtext(message, sit_words))) diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm index 548a73627d..451ae02dac 100644 --- a/code/modules/surgery/remove_embedded_object.dm +++ b/code/modules/surgery/remove_embedded_object.dm @@ -30,7 +30,7 @@ L.embedded_objects -= I if(!H.has_embedded_objects()) H.clear_alert("embeddedobject") - H.SendSignal(COMSIG_CLEAR_MOOD_EVENT, "embedded") + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "embedded") if(objects > 0) user.visible_message("[user] successfully removes [objects] objects from [H]'s [L]!", "You successfully remove [objects] objects from [H]'s [L.name].") diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index 0e4844dced..c6741f20b8 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -7,7 +7,7 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) /datum/ui_state/default/can_use_topic(src_object, mob/user) - return user.default_can_use_topic(src_object) // Call the individual mob-overriden procs. + return user.default_can_use_topic(src_object) // Call the individual mob-overridden procs. /mob/proc/default_can_use_topic(src_object) return UI_CLOSE // Don't allow interaction by default. diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm index 79f09c4dbc..2e91879006 100644 --- a/code/modules/uplink/uplink_devices.dm +++ b/code/modules/uplink/uplink_devices.dm @@ -1,42 +1,60 @@ - // A collection of pre-set uplinks, for admin spawns. -/obj/item/radio/uplink/Initialize(mapload, _owner, _tc_amount = 20) - . = ..() + +// Radio-like uplink; not an actual radio because this uplink is most commonly +// used for nuke ops, for whom opening the radio GUI and the uplink GUI +// simultaneously is an annoying distraction. +/obj/item/uplink + name = "station bounced radio" + icon = 'icons/obj/radio.dmi' icon_state = "radio" + item_state = "walkietalkie" + desc = "A basic handheld radio that communicates with local telecommunication networks." lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - AddComponent(/datum/component/uplink, _owner, FALSE, TRUE, null, _tc_amount) + dog_fashion = /datum/dog_fashion/back -/obj/item/radio/uplink/nuclear/Initialize() + flags_1 = CONDUCT_1 + slot_flags = ITEM_SLOT_BELT + throw_speed = 3 + throw_range = 7 + w_class = WEIGHT_CLASS_SMALL + +/obj/item/uplink/Initialize(mapload, owner, tc_amount = 20) + . = ..() + AddComponent(/datum/component/uplink, owner, FALSE, TRUE, null, tc_amount) + +/obj/item/uplink/nuclear/Initialize() . = ..() GET_COMPONENT(hidden_uplink, /datum/component/uplink) hidden_uplink.set_gamemode(/datum/game_mode/nuclear) -/obj/item/radio/uplink/nuclear_restricted/Initialize() +/obj/item/uplink/nuclear_restricted/Initialize() . = ..() GET_COMPONENT(hidden_uplink, /datum/component/uplink) hidden_uplink.allow_restricted = FALSE hidden_uplink.set_gamemode(/datum/game_mode/nuclear) -/obj/item/radio/uplink/clownop/Initialize() +/obj/item/uplink/clownop/Initialize() . = ..() GET_COMPONENT(hidden_uplink, /datum/component/uplink) hidden_uplink.set_gamemode(/datum/game_mode/nuclear/clown_ops) -/obj/item/multitool/uplink/Initialize(mapload, _owner, _tc_amount = 20) - . = ..() - AddComponent(/datum/component/uplink, _owner, FALSE, TRUE, null, _tc_amount) - -/obj/item/pen/uplink/Initialize(mapload, _owner, _tc_amount = 20) - . = ..() - AddComponent(/datum/component/uplink) - traitor_unlock_degrees = 360 - -/obj/item/radio/uplink/old +/obj/item/uplink/old name = "dusty radio" desc = "A dusty looking radio." -/obj/item/radio/uplink/old/Initialize(mapload, _owner, _tc_amount = 10) +/obj/item/uplink/old/Initialize(mapload, owner, tc_amount = 10) . = ..() GET_COMPONENT(hidden_uplink, /datum/component/uplink) hidden_uplink.name = "dusty radio" + +// Multitool uplink +/obj/item/multitool/uplink/Initialize(mapload, owner, tc_amount = 20) + . = ..() + AddComponent(/datum/component/uplink, owner, FALSE, TRUE, null, tc_amount) + +// Pen uplink +/obj/item/pen/uplink/Initialize(mapload, owner, tc_amount = 20) + . = ..() + AddComponent(/datum/component/uplink, owner, TRUE, FALSE, null, tc_amount) + traitor_unlock_degrees = 360 diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 619e2c8193..a9f2c63e13 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -790,7 +790,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) name = "Combat Banana Shoes" desc = "While making the wearer immune to most slipping attacks like regular combat clown shoes, these shoes \ can generate a large number of synthetic banana peels as the wearer walks, slipping up would-be pursuers. They also \ - squeek significantly louder." + squeak significantly louder." item = /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat cost = 6 surplus = 0 @@ -1269,7 +1269,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 8 /datum/uplink_item/cyber_implants/xray - name = "X-Ray Vision Implant" + name = "X-ray Vision Implant" desc = "These cybernetic eyes will give you X-ray vision. Comes with an autosurgeon." item = /obj/item/autosurgeon/xray_eyes cost = 10 diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 89bbee9d60..b9112ddfde 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -1,7 +1,3 @@ -#define STANDARD_CHARGE 1 -#define CONTRABAND_CHARGE 2 -#define COIN_CHARGE 3 - /* * Vending machine types - Can be found under /code/modules/vending/ */ @@ -21,7 +17,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C */ /datum/data/vending_product - var/product_name = "generic" + name = "generic" var/product_path = null var/amount = 0 var/max_amount = 0 @@ -74,7 +70,6 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C var/dish_quants = list() //used by the snack machine's custom compartment to count dishes. var/obj/item/vending_refill/refill_canister = null //The type of refill canisters used by this machine. - var/refill_count = 3 //The number of canisters the vending machine uses /obj/machinery/vending/Initialize() var/build_inv = FALSE @@ -84,9 +79,9 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C . = ..() wires = new /datum/wires/vending(src) if(build_inv) //non-constructable vending machine - build_inventory(products) - build_inventory(contraband, 1) - build_inventory(premium, 0, 1) + build_inventory(products, product_records) + build_inventory(contraband, hidden_records) + build_inventory(premium, coin_records) slogan_list = splittext(product_slogans, ";") // So not all machines speak at the exact same time. @@ -102,17 +97,17 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C return ..() /obj/machinery/vending/RefreshParts() //Better would be to make constructable child - if(component_parts) - product_records = list() - hidden_records = list() - coin_records = list() - build_inventory(products, start_empty = 1) - build_inventory(contraband, 1, start_empty = 1) - build_inventory(premium, 0, 1, start_empty = 1) - for(var/obj/item/vending_refill/VR in component_parts) - refill_inventory(VR, product_records, STANDARD_CHARGE) - refill_inventory(VR, coin_records, COIN_CHARGE) - refill_inventory(VR, hidden_records, CONTRABAND_CHARGE) + if(!component_parts) + return + + product_records = list() + hidden_records = list() + coin_records = list() + build_inventory(products, product_records, start_empty = TRUE) + build_inventory(contraband, hidden_records, start_empty = TRUE) + build_inventory(premium, coin_records, start_empty = TRUE) + for(var/obj/item/vending_refill/VR in component_parts) + restock(VR) /obj/machinery/vending/deconstruct(disassembled = TRUE) if(!refill_canister) //the non constructable vendors drop metal instead of a machine frame. @@ -124,25 +119,33 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/machinery/vending/obj_break(damage_flag) if(!(stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1)) - var/dump_amount = 0 - for(var/datum/data/vending_product/R in product_records) - if(R.amount <= 0) //Try to use a record that actually has something to dump. - continue - var/dump_path = R.product_path - if(!dump_path) - continue - - while(R.amount>0) - var/obj/O = new dump_path(loc) - step(O, pick(GLOB.alldirs)) //we only drop 20% of the total of each products and spread it - R.amount -= 5 //around to not fill the turf with too many objects. - dump_amount++ - if(dump_amount > 15) //so we don't drop too many items (e.g. ClothesMate) - break stat |= BROKEN icon_state = "[initial(icon_state)]-broken" -/obj/machinery/vending/proc/build_inventory(list/productlist, hidden=0, req_coin=0, start_empty = null) + var/dump_amount = 0 + var/found_anything = TRUE + while (found_anything) + found_anything = FALSE + for(var/record in shuffle(product_records)) + var/datum/data/vending_product/R = record + if(R.amount <= 0) //Try to use a record that actually has something to dump. + continue + var/dump_path = R.product_path + if(!dump_path) + continue + R.amount-- + // busting open a vendor will destroy some of the contents + if(found_anything && prob(80)) + continue + + var/obj/O = new dump_path(loc) + step(O, pick(GLOB.alldirs)) + found_anything = TRUE + dump_amount++ + if (dump_amount >= 16) + return + +/obj/machinery/vending/proc/build_inventory(list/productlist, list/recordlist, start_empty = FALSE) for(var/typepath in productlist) var/amount = productlist[typepath] if(isnull(amount)) @@ -150,47 +153,54 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C var/atom/temp = typepath var/datum/data/vending_product/R = new /datum/data/vending_product() - R.product_name = initial(temp.name) + R.name = initial(temp.name) R.product_path = typepath if(!start_empty) R.amount = amount R.max_amount = amount - R.display_color = pick("red","blue","green") + R.display_color = pick("#ff8080","#80ff80","#8080ff") + recordlist += R - if(hidden) - hidden_records += R - else if(req_coin) - coin_records += R - else - product_records += R +/obj/machinery/vending/proc/restock(obj/item/vending_refill/canister) + if (!canister.products) + canister.products = products.Copy() + if (!canister.contraband) + canister.contraband = contraband.Copy() + if (!canister.premium) + canister.premium = premium.Copy() + . = 0 + . += refill_inventory(canister.products, product_records) + . += refill_inventory(canister.contraband, hidden_records) + . += refill_inventory(canister.premium, coin_records) -/obj/machinery/vending/proc/refill_inventory(obj/item/vending_refill/refill, datum/data/vending_product/machine, var/charge_type = STANDARD_CHARGE) - var/total = 0 - var/to_restock = 0 +/obj/machinery/vending/proc/refill_inventory(list/productlist, list/recordlist) + . = 0 + for(var/R in recordlist) + var/datum/data/vending_product/record = R + var/diff = min(record.max_amount - record.amount, productlist[record.product_path]) + if (diff) + productlist[record.product_path] -= diff + record.amount += diff + . += diff - for(var/datum/data/vending_product/machine_content in machine) - if(machine_content.amount == 0 && refill.charges[charge_type] > 0) - machine_content.amount++ - refill.charges[charge_type]-- - total++ - to_restock += machine_content.max_amount - machine_content.amount - if(to_restock <= refill.charges[charge_type]) - for(var/datum/data/vending_product/machine_content in machine) - machine_content.amount = machine_content.max_amount - refill.charges[charge_type] -= to_restock - total += to_restock - else - var/tmp_charges = refill.charges[charge_type] - for(var/datum/data/vending_product/machine_content in machine) - if(refill.charges[charge_type] == 0) - break - var/restock = CEILING(((machine_content.max_amount - machine_content.amount)/to_restock)*tmp_charges, 1) - if(restock > refill.charges[charge_type]) - restock = refill.charges[charge_type] - machine_content.amount += restock - refill.charges[charge_type] -= restock - total += restock - return total +/obj/machinery/vending/proc/update_canister() + if (!component_parts) + return + + var/obj/item/vending_refill/R = locate() in component_parts + if (!R) + CRASH("Constructible vending machine did not have a refill canister") + return + + R.products = unbuild_inventory(product_records) + R.contraband = unbuild_inventory(hidden_records) + R.premium = unbuild_inventory(coin_records) + +/obj/machinery/vending/proc/unbuild_inventory(list/recordlist) + . = list() + for(var/R in recordlist) + var/datum/data/vending_product/record = R + .[record.product_path] += record.amount /obj/machinery/vending/crowbar_act(mob/living/user, obj/item/I) if(!component_parts) @@ -248,46 +258,52 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C bill = new S.type(src, 1) to_chat(user, "You insert [I] into [src].") return - else if(istype(I, refill_canister) && refill_canister != null) - if(stat & (BROKEN|NOPOWER)) - to_chat(user, "It does nothing.") - else if(panel_open) + else if(refill_canister && istype(I, refill_canister)) + if (!panel_open) + to_chat(user, "You should probably unscrew the service panel first.") + else if (stat & (BROKEN|NOPOWER)) + to_chat(user, "[src] does not respond.") + else //if the panel is open we attempt to refill the machine var/obj/item/vending_refill/canister = I - if(canister.charges[STANDARD_CHARGE] == 0) - to_chat(user, "This [canister.name] is empty!") + if(canister.get_part_rating() == 0) + to_chat(user, "[canister] is empty!") else - var/transfered = refill_inventory(canister,product_records,STANDARD_CHARGE) - transfered += refill_inventory(canister,coin_records,COIN_CHARGE) - transfered += refill_inventory(canister,hidden_records,CONTRABAND_CHARGE) - if(transfered) - to_chat(user, "You loaded [transfered] items in \the [name].") + // instantiate canister if needed + var/transferred = restock(canister) + if(transferred) + to_chat(user, "You loaded [transferred] items in [src].") else - to_chat(user, "The [name] is fully stocked.") + to_chat(user, "There's nothing to restock!") return - else - to_chat(user, "You should probably unscrew the service panel first.") else return ..() +/obj/machinery/vending/exchange_parts(mob/user, obj/item/storage/part_replacer/W) + if(!istype(W)) + return FALSE + if((flags_1 & NODECONSTRUCT_1) && !W.works_from_distance) + return FALSE + if(!component_parts || !refill_canister) + return FALSE + + var/moved = 0 + if(panel_open || W.works_from_distance) + if(W.works_from_distance) + display_parts(user) + for(var/I in W) + if(istype(I, refill_canister)) + moved += restock(I) + else + display_parts(user) + if(moved) + to_chat(user, "[moved] items restocked.") + W.play_rped_sound() + return TRUE + /obj/machinery/vending/on_deconstruction() - var/product_list = list(product_records, hidden_records, coin_records) - for(var/i=1, i<=3, i++) - for(var/datum/data/vending_product/machine_content in product_list[i]) - while(machine_content.amount !=0) - var/safety = 0 //to avoid infinite loop - for(var/obj/item/vending_refill/VR in component_parts) - safety++ - if(VR.charges[i] < VR.init_charges[i]) - VR.charges[i]++ - machine_content.amount-- - if(!machine_content.amount) - break - else - safety-- - if(safety <= 0) // all refill canisters are full - break - ..() + update_canister() + . = ..() /obj/machinery/vending/emag_act(mob/user) if(obj_flags & EMAGGED) @@ -323,7 +339,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C dat += "Vend " else dat += "Sold out " - dat += "[sanitize(R.product_name)]:" + dat += "[sanitize(R.name)]:" dat += " [R.amount]" dat += "" dat += "" @@ -358,17 +374,11 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C to_chat(usr, "There is no money in this machine.") return if(coin) - if(!usr.get_active_held_item()) - usr.put_in_hands(coin) - else - coin.forceMove(get_turf(src)) + usr.put_in_hands(coin) to_chat(usr, "You remove [coin] from [src].") coin = null if(bill) - if(!usr.get_active_held_item()) - usr.put_in_hands(bill) - else - bill.forceMove(get_turf(src)) + usr.put_in_hands(bill) to_chat(usr, "You remove [bill] from [src].") bill = null @@ -545,7 +555,3 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/machinery/vending/onTransitZ() return - -#undef STANDARD_CHARGE -#undef CONTRABAND_CHARGE -#undef COIN_CHARGE diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index c0cfe661d7..95211a9600 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -3,7 +3,7 @@ desc = "A vending machine for costumes." icon_state = "theater" icon_deny = "theater-deny" - req_access_txt = "46" //Theatre access needed, unless hacked. + req_access = list(ACCESS_THEATRE) product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!" vend_reply = "Thank you for using AutoDrobe!" products = list(/obj/item/clothing/suit/chickensuit = 1, @@ -115,15 +115,17 @@ premium = list(/obj/item/clothing/suit/pirate/captain = 2, /obj/item/clothing/head/pirate/captain = 2, /obj/item/clothing/head/helmet/roman/fake = 1, - /obj/item/clothing/head/helmet/roman/legionaire/fake = 1, + /obj/item/clothing/head/helmet/roman/legionnaire/fake = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/shield/riot/roman/fake = 1, /obj/item/skub = 1) refill_canister = /obj/item/vending_refill/autodrobe +/obj/machinery/vending/autodrobe/all_access + desc = "A vending machine for costumes. This model appears to have no access restrictions." + req_access = null + /obj/item/vending_refill/autodrobe machine_name = "AutoDrobe" icon_state = "refill_costume" - charges = list(32, 2, 3)// of 96 standard, 6 contraband, 9 premium - init_charges = list(32, 2, 3) diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index f5f7bf1d9d..0d193c451d 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -16,7 +16,6 @@ /obj/item/reagent_containers/food/drinks/bottle/absinthe = 5, /obj/item/reagent_containers/food/drinks/bottle/grappa = 5, /obj/item/reagent_containers/food/drinks/bottle/sake = 5, - /obj/item/reagent_containers/food/drinks/bottle/fernet = 5, /obj/item/reagent_containers/food/drinks/ale = 6, /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 4, /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 4, @@ -32,13 +31,18 @@ /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 12, /obj/item/reagent_containers/food/drinks/flask = 3, /obj/item/reagent_containers/food/drinks/beer = 6) - contraband = list(/obj/item/reagent_containers/food/drinks/mug/tea = 12) + contraband = list(/obj/item/reagent_containers/food/drinks/mug/tea = 12, + /obj/item/reagent_containers/food/drinks/bottle/fernet = 5) product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" - req_access_txt = "25" + req_access = list(ACCESS_BAR) refill_canister = /obj/item/vending_refill/boozeomat -/obj/machinery/vending/boozeomat/maint +/obj/machinery/vending/boozeomat/all_access + desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. This model appears to have no access restrictions." + req_access = null + +/obj/machinery/vending/boozeomat/pubby_maint //abandoned bar on Pubbystation products = list(/obj/item/reagent_containers/food/drinks/bottle/whiskey = 1, /obj/item/reagent_containers/food/drinks/bottle/absinthe = 1, /obj/item/reagent_containers/food/drinks/bottle/limejuice = 1, @@ -48,10 +52,17 @@ /obj/item/reagent_containers/food/drinks/ice = 3, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 6, /obj/item/reagent_containers/food/drinks/flask = 1) - req_access_txt = "0" + req_access = null + +/obj/machinery/vending/boozeomat/pubby_captain //Captain's quarters on Pubbystation + products = list(/obj/item/reagent_containers/food/drinks/bottle/rum = 1, + /obj/item/reagent_containers/food/drinks/bottle/wine = 1, + /obj/item/reagent_containers/food/drinks/ale = 1, + /obj/item/reagent_containers/food/drinks/drinkingglass = 6, + /obj/item/reagent_containers/food/drinks/ice = 1, + /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass = 4); + req_access = list(ACCESS_CAPTAIN) /obj/item/vending_refill/boozeomat machine_name = "Booze-O-Mat" icon_state = "refill_booze" - charges = list(61, 4, 0)//of 182 standard, 12 contraband - init_charges = list(61, 4, 0) diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm index d81a0a01a6..6b9334362d 100644 --- a/code/modules/vending/cigarette.dm +++ b/code/modules/vending/cigarette.dm @@ -41,8 +41,6 @@ /obj/item/vending_refill/cigarette machine_name = "ShadyCigs Deluxe" icon_state = "refill_smoke" - charges = list(12, 3, 2)// of 36 standard, 9 contraband, 6 premium - init_charges = list(12, 3, 2) /obj/machinery/vending/cigarette/pre_throw(obj/item/I) if(istype(I, /obj/item/lighter)) diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index ad5b38575c..80e422c6a0 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -119,5 +119,3 @@ /obj/item/vending_refill/clothing machine_name = "ClothesMate" icon_state = "refill_clothes" - charges = list(38, 4, 4)// of 112 standard, 12 contraband, 10 premium(?) - init_charges = list(38, 4, 4) diff --git a/code/modules/vending/coffee.dm b/code/modules/vending/coffee.dm index d70cf4ae76..6ac9dd648d 100644 --- a/code/modules/vending/coffee.dm +++ b/code/modules/vending/coffee.dm @@ -4,8 +4,8 @@ product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies" icon_state = "coffee" icon_vend = "coffee-vend" - products = list(/obj/item/reagent_containers/food/drinks/coffee = 25, - /obj/item/reagent_containers/food/drinks/mug/tea = 25, + products = list(/obj/item/reagent_containers/food/drinks/coffee = 25, + /obj/item/reagent_containers/food/drinks/mug/tea = 25, /obj/item/reagent_containers/food/drinks/mug/coco = 25) contraband = list(/obj/item/reagent_containers/food/drinks/ice = 12) refill_canister = /obj/item/vending_refill/coffee @@ -13,5 +13,3 @@ /obj/item/vending_refill/coffee machine_name = "Solar's Best Hot Drinks" icon_state = "refill_joe" - charges = list(25, 4, 0)//of 75 standard, 12 contraband - init_charges = list(25, 4, 0) diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm index e675b29f81..f61c392ff7 100644 --- a/code/modules/vending/cola.dm +++ b/code/modules/vending/cola.dm @@ -22,8 +22,6 @@ /obj/item/vending_refill/cola machine_name = "Robust Softdrinks" icon_state = "refill_cola" - charges = list(30, 4, 1)//of 90 standard, 12 contraband, 1 premium - init_charges = list(30, 4, 1) /obj/machinery/vending/cola/random name = "\improper Random Drinkies" diff --git a/code/modules/vending/engineering.dm b/code/modules/vending/engineering.dm index 5933ab8fa9..d36f4a4849 100644 --- a/code/modules/vending/engineering.dm +++ b/code/modules/vending/engineering.dm @@ -4,7 +4,7 @@ desc = "Everything you need for do-it-yourself station repair." icon_state = "engi" icon_deny = "engi-deny" - req_access_txt = "11" + req_access = list(ACCESS_ENGINE_EQUIP) products = list(/obj/item/clothing/under/rank/chief_engineer = 4, /obj/item/clothing/under/rank/engineer = 4, /obj/item/clothing/shoes/sneakers/orange = 4, diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm index 53106c09a6..0e64e0a367 100644 --- a/code/modules/vending/engivend.dm +++ b/code/modules/vending/engivend.dm @@ -3,7 +3,7 @@ desc = "Spare tool vending. What? Did you expect some witty description?" icon_state = "engivend" icon_deny = "engivend-deny" - req_access_txt = "11" //Engineering Equipment access + req_access = list(ACCESS_ENGINE_EQUIP) products = list(/obj/item/clothing/glasses/meson/engine = 2, /obj/item/clothing/glasses/welding = 3, /obj/item/multitool = 4, diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index f76f67af46..4e4d336567 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -1,7 +1,7 @@ /obj/machinery/vending/games name = "\improper Good Clean Fun" desc = "Vends things that the Captain and Head of Personnel are probably not going to appreciate you fiddling with instead of your job..." - product_ads = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!;Roll for initative!;Elves and dwarves!;Paranoid computers!;Totally not satanic!;Fun times forever!" + product_ads = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!;Roll for initiative!;Elves and dwarves!;Paranoid computers!;Totally not satanic!;Fun times forever!" icon_state = "games" products = list(/obj/item/toy/cards/deck = 5, /obj/item/storage/pill_bottle/dice = 10, @@ -13,5 +13,3 @@ /obj/item/vending_refill/games machine_name = "\improper Good Clean Fun" icon_state = "refill_games" - charges = list(7, 3, 0) //of 21 standard, 9 contraband - init_charges = list(7, 3, 0) diff --git a/code/modules/vending/liberation.dm b/code/modules/vending/liberation.dm index 6eafafb164..8415eff69f 100644 --- a/code/modules/vending/liberation.dm +++ b/code/modules/vending/liberation.dm @@ -2,11 +2,14 @@ name = "\improper Liberation Station" desc = "An overwhelming amount of ancient patriotism washes over you just by looking at the machine." icon_state = "liberationstation" - req_access_txt = "1" product_slogans = "Liberation Station: Your one-stop shop for all things second ammendment!;Be a patriot today, pick up a gun!;Quality weapons for cheap prices!;Better dead than red!" product_ads = "Float like an astronaut, sting like a bullet!;Express your second ammendment today!;Guns don't kill people, but you can!;Who needs responsibilities when you have guns?" vend_reply = "Remember the name: Liberation Station!" - products = list(/obj/item/gun/ballistic/automatic/pistol/deagle/gold = 2, + products = list(/obj/item/reagent_containers/food/snacks/burger/plain = 5, //O say can you see, by the dawn's early light + /obj/item/reagent_containers/food/snacks/burger/baseball = 3, //What so proudly we hailed at the twilight's last gleaming + /obj/item/reagent_containers/food/snacks/fries = 5, //Whose broad stripes and bright stars through the perilous fight + /obj/item/reagent_containers/food/drinks/beer/light = 10, //O'er the ramparts we watched, were so gallantly streaming? + /obj/item/gun/ballistic/automatic/pistol/deagle/gold = 2, /obj/item/gun/ballistic/automatic/pistol/deagle/camo = 2, /obj/item/gun/ballistic/automatic/pistol/m1911 = 2, /obj/item/gun/ballistic/automatic/proto/unrestricted = 2, @@ -17,8 +20,11 @@ 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) + /obj/item/ammo_box/magazine/m75 = 2, + /obj/item/reagent_containers/food/snacks/cheesyfries = 5, + /obj/item/reagent_containers/food/snacks/burger/baconburger = 5) //Premium burgers for the premium section + contraband = list(/obj/item/clothing/under/patriotsuit = 3, + /obj/item/bedsheet/patriot = 5, + /obj/item/reagent_containers/food/snacks/burger/superbite = 3) //U S A armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index c912d3dd3e..3b387f6959 100644 --- a/code/modules/vending/liberation_toy.dm +++ b/code/modules/vending/liberation_toy.dm @@ -2,8 +2,7 @@ name = "\improper Syndicate Donksoft Toy Vendor" desc = "An ages 8 and up approved vendor that dispenses toys. If you were to find the right wires, you can unlock the adult mode setting!" icon_state = "syndi" - req_access_txt = "1" - product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get perma briged!" + product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get permabrigged!" product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" vend_reply = "Come back for more!" circuit = /obj/item/circuitboard/machine/vending/syndicatedonksofttoyvendor diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index b1a5edb867..bea449845c 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -4,25 +4,25 @@ icon_state = "med" icon_deny = "med-deny" product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" - req_access_txt = "5" - products = list(/obj/item/reagent_containers/syringe = 12, - /obj/item/reagent_containers/dropper = 3, - /obj/item/healthanalyzer = 4, - /obj/item/sensor_device = 2, + req_access = list(ACCESS_MEDICAL) + products = list(/obj/item/reagent_containers/syringe = 12, + /obj/item/reagent_containers/dropper = 3, + /obj/item/healthanalyzer = 4, + /obj/item/sensor_device = 2, /obj/item/pinpointer/crew = 2, /obj/item/reagent_containers/medspray/sterilizine = 1, - /obj/item/stack/medical/gauze = 8, - /obj/item/reagent_containers/pill/patch/styptic = 5, - /obj/item/reagent_containers/medspray/styptic = 2, - /obj/item/reagent_containers/pill/patch/silver_sulf = 5, + /obj/item/stack/medical/gauze = 8, + /obj/item/reagent_containers/pill/patch/styptic = 5, + /obj/item/reagent_containers/medspray/styptic = 2, + /obj/item/reagent_containers/pill/patch/silver_sulf = 5, /obj/item/reagent_containers/medspray/silver_sulf = 2, /obj/item/reagent_containers/pill/insulin = 10, - /obj/item/reagent_containers/pill/salbutamol = 2, - /obj/item/reagent_containers/glass/bottle/charcoal = 4, - /obj/item/reagent_containers/glass/bottle/epinephrine = 4, + /obj/item/reagent_containers/pill/salbutamol = 2, + /obj/item/reagent_containers/glass/bottle/charcoal = 4, + /obj/item/reagent_containers/glass/bottle/epinephrine = 4, /obj/item/reagent_containers/glass/bottle/salglu_solution = 3, - /obj/item/reagent_containers/glass/bottle/morphine = 4, - /obj/item/reagent_containers/glass/bottle/toxin = 3, + /obj/item/reagent_containers/glass/bottle/morphine = 4, + /obj/item/reagent_containers/glass/bottle/toxin = 3, /obj/item/reagent_containers/syringe/antiviral = 6) contraband = list(/obj/item/reagent_containers/pill/tox = 3, /obj/item/reagent_containers/pill/morphine = 4, @@ -36,7 +36,5 @@ refill_canister = /obj/item/vending_refill/medical /obj/item/vending_refill/medical - machine_name = "NanoMed" + machine_name = "NanoMed Plus" icon_state = "refill_medical" - charges = list(26, 5, 3)// of 76 standard, 13 contraband, 8 premium - init_charges = list(26, 5, 3) diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm index 6b5005eee4..ef19ce3b9b 100644 --- a/code/modules/vending/medical_wall.dm +++ b/code/modules/vending/medical_wall.dm @@ -15,5 +15,8 @@ /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) resistance_flags = FIRE_PROOF - refill_canister = /obj/item/vending_refill/medical - refill_count = 1 + refill_canister = /obj/item/vending_refill/wallmed + +/obj/item/vending_refill/wallmed + machine_name = "NanoMed" + icon_state = "refill_medical" diff --git a/code/modules/vending/robotics.dm b/code/modules/vending/robotics.dm index 8c577d47c1..4832aa7ad7 100644 --- a/code/modules/vending/robotics.dm +++ b/code/modules/vending/robotics.dm @@ -4,7 +4,7 @@ desc = "All the tools you need to create your own robot army." icon_state = "robotics" icon_deny = "robotics-deny" - req_access_txt = "29" + req_access = list(ACCESS_ROBOTICS) products = list(/obj/item/clothing/suit/toggle/labcoat = 4, /obj/item/clothing/under/rank/roboticist = 4, /obj/item/stack/cable_coil = 4, diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index 3f3035f9e4..7e90a5ce18 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -4,7 +4,7 @@ product_ads = "Crack capitalist skulls!;Beat some heads in!;Don't forget - harm is good!;Your weapons are right here.;Handcuffs!;Freeze, scumbag!;Don't tase me bro!;Tase them, bro.;Why not have a donut?" icon_state = "sec" icon_deny = "sec-deny" - req_access_txt = "1" + req_access = list(ACCESS_SECURITY) products = list(/obj/item/restraints/handcuffs = 8, /obj/item/restraints/handcuffs/cable/zipties = 10, /obj/item/grenade/flashbang = 4, diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm index 8fcd189a4f..69e510ad5a 100644 --- a/code/modules/vending/snack.dm +++ b/code/modules/vending/snack.dm @@ -13,12 +13,10 @@ /obj/item/reagent_containers/food/snacks/cheesiehonkers = 6) contraband = list(/obj/item/reagent_containers/food/snacks/syndicake = 6) refill_canister = /obj/item/vending_refill/snack - var/chef_compartment_access = "28" + var/chef_compartment_access = "28" //ACCESS_KITCHEN /obj/item/vending_refill/snack machine_name = "Getmore Chocolate Corp" - charges = list(12, 2, 0)//of 36 standard, 6 contraband - init_charges = list(12, 2, 0) /obj/machinery/vending/snack/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/reagent_containers/food/snacks)) @@ -44,7 +42,7 @@ if(iscompartmentfull(user)) break if(!S.junkiness) - T.SendSignal(COMSIG_TRY_STORAGE_TAKE, S, src, TRUE) + SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src, TRUE) food_load(S) loaded++ else diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index fc2f9c59b9..08bb4615bb 100644 --- a/code/modules/vending/toys.dm +++ b/code/modules/vending/toys.dm @@ -2,24 +2,26 @@ name = "\improper Donksoft Toy Vendor" desc = "Ages 8 and up approved vendor that dispenses toys." icon_state = "syndi" - product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get perma briged!" + product_slogans = "Get your cool toys today!;Trigger a valid hunter today!;Quality toy weapons for cheap prices!;Give them to HoPs for all access!;Give them to HoS to get permabrigged!" product_ads = "Feel robust with your toys!;Express your inner child today!;Toy weapons don't kill people, but valid hunters do!;Who needs responsibilities when you have toy weapons?;Make your next murder FUN!" vend_reply = "Come back for more!" circuit = /obj/item/circuitboard/machine/vending/donksofttoyvendor - products = list(/obj/item/gun/ballistic/automatic/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, - /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, - /obj/item/toy/sword = 10, - /obj/item/ammo_box/foambox = 20, - /obj/item/toy/foamblade = 10, - /obj/item/toy/syndicateballoon = 10, - /obj/item/clothing/suit/syndicatefake = 5, - /obj/item/clothing/head/syndicatefake = 5) - contraband = list(/obj/item/gun/ballistic/shotgun/toy/crossbow = 10, - /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10, - /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted = 10, - /obj/item/toy/katana = 10, - /obj/item/twohanded/dualsaber/toy = 5) + products = list( + /obj/item/gun/ballistic/automatic/toy/unrestricted = 10, + /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = 10, + /obj/item/gun/ballistic/shotgun/toy/unrestricted = 10, + /obj/item/toy/sword = 10, + /obj/item/ammo_box/foambox = 20, + /obj/item/toy/foamblade = 10, + /obj/item/toy/syndicateballoon = 10, + /obj/item/clothing/suit/syndicatefake = 5, + /obj/item/clothing/head/syndicatefake = 5) + contraband = list( + /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, + /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted = 10, + /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) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/donksoft @@ -27,5 +29,3 @@ /obj/item/vending_refill/donksoft machine_name = "Donksoft Toy Vendor" icon_state = "refill_donksoft" - charges = list(32,28,0)// of 90 standard, 75 contraband, 0 premium - init_charges = list(32,28,0) diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index f9aa8f216a..5a41beb88d 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -17,7 +17,8 @@ /obj/item/clothing/head/soft/sec = 3, /obj/item/clothing/mask/bandana/red = 3, /obj/item/clothing/under/rank/security/skirt = 3, - /obj/item/clothing/under/rank/security/grey = 3) + /obj/item/clothing/under/rank/security/grey = 3, + /obj/item/clothing/under/pants/khaki = 3) premium = list(/obj/item/clothing/under/rank/security/navyblue = 3, /obj/item/clothing/suit/security/officer = 3, /obj/item/clothing/head/beret/sec/navyofficer = 3) @@ -25,8 +26,6 @@ /obj/item/vending_refill/wardrobe/sec_wardrobe machine_name = "SecDrobe" - charges = list(10, 0, 3) - init_charges = list(10, 0, 3) /obj/machinery/vending/wardrobe/medi_wardrobe name = "\improper MediDrobe" @@ -55,8 +54,6 @@ /obj/item/vending_refill/wardrobe/medi_wardrobe machine_name = "MediDrobe" - charges = list(10, 0, 0) - init_charges = list(10, 0, 0) /obj/machinery/vending/wardrobe/engi_wardrobe name = "EngiDrobe" @@ -77,8 +74,6 @@ /obj/item/vending_refill/wardrobe/engi_wardrobe machine_name = "EngiDrobe" - charges = list(7, 0, 0) - init_charges = list(7, 0, 0) /obj/machinery/vending/wardrobe/atmos_wardrobe name = "AtmosDrobe" @@ -97,8 +92,6 @@ /obj/item/vending_refill/wardrobe/atmos_wardrobe machine_name = "AtmosDrobe" - charges = list(5, 0, 0) - init_charges = list(5, 0, 0) /obj/machinery/vending/wardrobe/cargo_wardrobe name = "CargoDrobe" @@ -116,8 +109,6 @@ /obj/item/vending_refill/wardrobe/cargo_wardrobe machine_name = "CargoDrobe" - charges = list(5, 0, 0) - init_charges = list(5, 0, 0) /obj/machinery/vending/wardrobe/robo_wardrobe name = "RoboDrobe" @@ -136,8 +127,6 @@ /obj/item/vending_refill/wardrobe/robo_wardrobe machine_name = "RoboDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) /obj/machinery/vending/wardrobe/science_wardrobe name = "SciDrobe" @@ -158,8 +147,6 @@ /obj/item/vending_refill/wardrobe/science_wardrobe machine_name = "SciDrobe" - charges = list(8, 0, 0) - init_charges = list(8, 0, 0) /obj/machinery/vending/wardrobe/hydro_wardrobe name = "Hydrobe" @@ -178,8 +165,6 @@ /obj/item/vending_refill/wardrobe/hydro_wardrobe machine_name = "HyDrobe" - charges = list(6, 0, 0) - init_charges = list(6, 0, 0) /obj/machinery/vending/wardrobe/curator_wardrobe name = "CuraDrobe" @@ -197,8 +182,6 @@ /obj/item/vending_refill/wardrobe/curator_wardrobe machine_name = "CuraDrobe" - charges = list(3, 0, 0) - init_charges = list(3, 0, 0) /obj/machinery/vending/wardrobe/bar_wardrobe name = "BarDrobe" @@ -226,8 +209,6 @@ /obj/item/vending_refill/wardrobe/bar_wardrobe machine_name = "BarDrobe" - charges = list(8, 0, 0) - init_charges = list(8, 0, 0) /obj/machinery/vending/wardrobe/chef_wardrobe name = "ChefDrobe" @@ -250,8 +231,6 @@ /obj/item/vending_refill/wardrobe/chef_wardrobe machine_name = "ChefDrobe" - charges = list(6, 0, 0) - init_charges = list(6, 0, 0) /obj/machinery/vending/wardrobe/jani_wardrobe name = "JaniDrobe" @@ -278,8 +257,6 @@ /obj/item/vending_refill/wardrobe/jani_wardrobe machine_name = "JaniDrobe" - charges = list(7, 0, 0) - init_charges = list(7, 0, 0) /obj/machinery/vending/wardrobe/law_wardrobe name = "LawDrobe" @@ -302,8 +279,6 @@ /obj/item/vending_refill/wardrobe/law_wardrobe machine_name = "LawDrobe" - charges = list(5, 0, 0) - init_charges = list(5, 0, 0) /obj/machinery/vending/wardrobe/chap_wardrobe name = "ChapDrobe" @@ -324,8 +299,6 @@ /obj/item/vending_refill/wardrobe/chap_wardrobe machine_name = "ChapDrobe" - charges = list(6, 0, 0) - init_charges = list(6, 0, 0) /obj/machinery/vending/wardrobe/chem_wardrobe name = "ChemDrobe" @@ -343,8 +316,6 @@ /obj/item/vending_refill/wardrobe/chem_wardrobe machine_name = "ChemDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) /obj/machinery/vending/wardrobe/gene_wardrobe name = "GeneDrobe" @@ -361,8 +332,6 @@ /obj/item/vending_refill/wardrobe/gene_wardrobe machine_name = "GeneDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) /obj/machinery/vending/wardrobe/viro_wardrobe name = "ViroDrobe" @@ -380,5 +349,3 @@ /obj/item/vending_refill/wardrobe/viro_wardrobe machine_name = "ViroDrobe" - charges = list(4, 0, 0) - init_charges = list(4, 0, 0) \ No newline at end of file diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm index 6c48b7a376..495d60a461 100644 --- a/code/modules/vending/youtool.dm +++ b/code/modules/vending/youtool.dm @@ -3,7 +3,6 @@ desc = "Tools for tools." icon_state = "tool" icon_deny = "tool-deny" - //req_access_txt = "12" //Maintenance access products = list(/obj/item/stack/cable_coil/random = 10, /obj/item/crowbar = 5, /obj/item/weldingtool = 3, diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index 154941ce70..03d2ac3921 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -4,7 +4,7 @@ humans, butchering all other living things to \ sustain the zombie, smashing open airlock doors and opening \ child-safe caps on bottles." - flags_1 = NODROP_1|ABSTRACT_1|DROPDEL_1 + item_flags = NODROP | ABSTRACT | DROPDEL resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF icon = 'icons/effects/blood.dmi' icon_state = "bloodhand_left"
[get_held_index_name(i)]:[(I && !(I.flags_1 & ABSTRACT_1)) ? I : "Empty"]
[get_held_index_name(i)]:[(I && !(I.item_flags & ABSTRACT)) ? I : "Empty"]
 
Back:[(back && !(back.flags_1&ABSTRACT_1)) ? back : "Empty"]" + dat += "
Back:[(back && !(back.item_flags & ABSTRACT)) ? back : "Empty"]" if(has_breathable_mask && istype(back, /obj/item/tank)) dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "
 
Head:[(head && !(head.flags_1&ABSTRACT_1)) ? head : "Empty"]
Head:[(head && !(head.item_flags & ABSTRACT)) ? head : "Empty"]
Mask:Obscured
Mask:[(wear_mask && !(wear_mask.flags_1&ABSTRACT_1)) ? wear_mask : "Empty"]
Mask:[(wear_mask && !(wear_mask.item_flags & ABSTRACT)) ? wear_mask : "Empty"]
Neck:Obscured
Neck:[(wear_neck && !(wear_neck.flags_1&ABSTRACT_1)) ? wear_neck : "Empty"]
Neck:[(wear_neck && !(wear_neck.item_flags & ABSTRACT)) ? wear_neck : "Empty"]
Eyes:Obscured
Eyes:[(glasses && !(glasses.flags_1&ABSTRACT_1)) ? glasses : "Empty"]
Eyes:[(glasses && !(glasses.item_flags & ABSTRACT)) ? glasses : "Empty"]
Ears:Obscured
Ears:[(ears && !(ears.flags_1&ABSTRACT_1)) ? ears : "Empty"]
Ears:[(ears && !(ears.item_flags & ABSTRACT)) ? ears : "Empty"]
 
Exosuit:[(wear_suit && !(wear_suit.flags_1&ABSTRACT_1)) ? wear_suit : "Empty"]
Exosuit:[(wear_suit && !(wear_suit.item_flags & ABSTRACT)) ? wear_suit : "Empty"]
 ↳Suit Storage:[(s_store && !(s_store.flags_1&ABSTRACT_1)) ? s_store : "Empty"]" + dat += "
 ↳Suit Storage:[(s_store && !(s_store.item_flags & ABSTRACT)) ? s_store : "Empty"]" if(has_breathable_mask && istype(s_store, /obj/item/tank)) dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "
Shoes:Obscured
Shoes:[(shoes && !(shoes.flags_1&ABSTRACT_1)) ? shoes : "Empty"]
Shoes:[(shoes && !(shoes.item_flags & ABSTRACT)) ? shoes : "Empty"]
Gloves:Obscured
Gloves:[(gloves && !(gloves.flags_1&ABSTRACT_1)) ? gloves : "Empty"]
Gloves:[(gloves && !(gloves.item_flags & ABSTRACT)) ? gloves : "Empty"]
Uniform:Obscured
Uniform:[(w_uniform && !(w_uniform.flags_1&ABSTRACT_1)) ? w_uniform : "Empty"]
Uniform:[(w_uniform && !(w_uniform.item_flags & ABSTRACT)) ? w_uniform : "Empty"]
 ↳Pockets:
 ↳ID:
 ↳Belt:
 ↳Belt:[(belt && !(belt.flags_1&ABSTRACT_1)) ? belt : "Empty"]" + dat += "
 ↳Belt:[(belt && !(belt.item_flags & ABSTRACT)) ? belt : "Empty"]" if(has_breathable_mask && istype(belt, /obj/item/tank)) dat += " [internal ? "Disable Internals" : "Set Internals"]" dat += "
 ↳Pockets:[(l_store && !(l_store.flags_1&ABSTRACT_1)) ? "Left (Full)" : "Left (Empty)"]" - dat += " [(r_store && !(r_store.flags_1&ABSTRACT_1)) ? "Right (Full)" : "Right (Empty)"]
 ↳ID:[(wear_id && !(wear_id.flags_1&ABSTRACT_1)) ? wear_id : "Empty"]
 ↳Pockets:[(l_store && !(l_store.item_flags & ABSTRACT)) ? "Left (Full)" : "Left (Empty)"]" + dat += " [(r_store && !(r_store.item_flags & ABSTRACT)) ? "Right (Full)" : "Right (Empty)"]
 ↳ID:[(wear_id && !(wear_id.item_flags & ABSTRACT)) ? wear_id : "Empty"]
Handcuffed: Remove