From fb7a24b333e514fa0423995d36bd44f13f54251c Mon Sep 17 00:00:00 2001 From: SandPoot Date: Sun, 27 Feb 2022 14:17:53 -0300 Subject: [PATCH] Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 --- code/__DEFINES/admin.dm | 4 + code/__DEFINES/antagonists.dm | 6 + code/__DEFINES/atmospherics.dm | 1 + code/__DEFINES/cooldowns.dm | 3 + code/__DEFINES/inventory.dm | 167 ++- code/__DEFINES/maths.dm | 3 + code/__DEFINES/research.dm | 4 +- code/__DEFINES/say.dm | 3 + code/__HELPERS/_lists.dm | 3 + code/__HELPERS/cmp.dm | 3 + code/__HELPERS/custom_holoforms.dm | 2 +- code/__HELPERS/pronouns.dm | 18 +- code/__HELPERS/roundend.dm | 4 + code/__HELPERS/type2type.dm | 52 +- code/__HELPERS/unsorted.dm | 2 +- code/_globalvars/lists/objects.dm | 2 + code/_onclick/hud/alien.dm | 2 +- code/_onclick/hud/drones.dm | 6 +- code/_onclick/hud/generic_dextrous.dm | 2 +- code/_onclick/hud/guardian.dm | 2 +- code/_onclick/hud/human.dm | 66 +- code/_onclick/hud/monkey.dm | 10 +- code/_onclick/telekinesis.dm | 2 +- .../configuration/entries/dynamic.dm | 4 + .../configuration/entries/general.dm | 6 + code/controllers/subsystem/job.dm | 8 +- code/datums/action.dm | 2 +- code/datums/components/anti_magic.dm | 2 +- code/datums/components/phantomthief.dm | 2 +- code/datums/components/shielded.dm | 2 +- code/datums/components/twohanded.dm | 2 +- code/datums/datum.dm | 1 + code/datums/diseases/_MobProcs.dm | 4 +- code/datums/diseases/wizarditis.dm | 6 +- code/datums/elements/earhealing.dm | 2 +- code/datums/elements/polychromic.dm | 2 +- code/datums/elements/spellcasting.dm | 2 +- code/datums/martial/boxing.dm | 4 +- code/datums/martial/krav_maga.dm | 4 +- code/datums/martial/wrestling.dm | 4 +- code/datums/mind.dm | 994 +++++++++++++++++- code/datums/mutations/cluwne.dm | 10 +- code/datums/outfit.dm | 44 +- code/datums/traits/_quirk.dm | 2 +- code/datums/traits/good.dm | 10 +- code/datums/traits/negative.dm | 10 +- code/datums/traits/neutral.dm | 2 +- code/game/gamemodes/changeling/changeling.dm | 6 +- code/game/gamemodes/clock_cult/clock_cult.dm | 4 +- .../game/gamemodes/clown_ops/bananium_bomb.dm | 8 +- .../game/gamemodes/clown_ops/clown_weapons.dm | 4 +- code/game/gamemodes/nuclear/nuclear.dm | 6 +- code/game/gamemodes/objective.dm | 4 +- code/game/machinery/limbgrower.dm | 123 ++- code/game/objects/items.dm | 8 +- code/game/objects/items/chrono_eraser.dm | 2 +- code/game/objects/items/cigs_lighters.dm | 8 +- code/game/objects/items/defib.dm | 6 +- code/game/objects/items/devices/PDA/PDA.dm | 14 + .../objects/items/devices/PDA/PDA_types.dm | 1 + code/game/objects/items/devices/PDA/cart.dm | 10 +- code/game/objects/items/devices/megaphone.dm | 2 +- .../items/devices/radio/electropack.dm | 4 +- .../objects/items/devices/radio/headset.dm | 4 +- .../items/devices/reverse_bear_trap.dm | 10 +- code/game/objects/items/devices/scanners.dm | 2 +- .../objects/items/devices/traitordevices.dm | 8 +- code/game/objects/items/fluff.dm | 2 +- code/game/objects/items/granters.dm | 2 +- code/game/objects/items/inducer.dm | 2 +- code/game/objects/items/storage/bags.dm | 10 +- code/game/objects/items/storage/book.dm | 2 +- code/game/objects/items/storage/fancy.dm | 4 +- code/game/objects/items/tanks/watertank.dm | 6 +- code/game/objects/items/weaponry.dm | 2 +- code/game/turfs/simulated/lava.dm | 4 +- code/modules/admin/admin.dm | 14 +- code/modules/admin/playtimes.dm | 68 ++ code/modules/admin/topic.dm | 16 +- code/modules/admin/verbs/debug.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 8 +- .../antagonists/_common/antag_datum.dm | 40 +- .../abductor/equipment/abduction_gear.dm | 2 +- .../bloodsucker/bloodsucker_life.dm | 2 +- .../bloodsucker/bloodsucker_powers.dm | 2 +- .../antagonists/bloodsucker/powers/brawn.dm | 4 +- .../antagonists/changeling/powers/absorb.dm | 4 +- .../changeling/powers/biodegrade.dm | 6 +- .../changeling/powers/mutations.dm | 8 +- .../clockcult/clock_items/clockwork_armor.dm | 8 +- .../clock_items/construct_chassis.dm | 2 +- .../clockcult/clock_items/judicial_visor.dm | 12 +- .../clock_items/wraith_spectacles.dm | 2 +- .../clock_scriptures/scripture_scripts.dm | 24 +- code/modules/antagonists/cult/blood_magic.dm | 12 +- code/modules/antagonists/cult/cult.dm | 11 +- code/modules/antagonists/cult/runes.dm | 2 +- code/modules/antagonists/devil/devil.dm | 8 +- .../eldritch_cult/eldritch_antag.dm | 6 +- .../eldritch_cult/eldritch_items.dm | 4 +- code/modules/antagonists/ert/ert.dm | 4 +- .../antagonists/highlander/highlander.dm | 12 +- .../antagonists/overthrow/overthrow.dm | 6 +- .../antagonists/revolution/revolution.dm | 6 +- .../antagonists/traitor/datum_traitor.dm | 6 +- .../antagonists/wizard/equipment/artefact.dm | 8 +- code/modules/antagonists/wizard/wizard.dm | 12 +- code/modules/awaymissions/capture_the_flag.dm | 2 +- .../awaymissions/mission_code/jungleresort.dm | 2 +- .../awaymissions/mission_code/snowdin.dm | 2 +- code/modules/client/preferences.dm | 4 +- code/modules/clothing/chameleon.dm | 4 +- code/modules/clothing/clothing.dm | 4 +- code/modules/clothing/ears/_ears.dm | 2 +- code/modules/clothing/glasses/_glasses.dm | 8 +- code/modules/clothing/glasses/hud.dm | 2 +- code/modules/clothing/glasses/phantomthief.dm | 4 +- code/modules/clothing/gloves/color.dm | 4 +- code/modules/clothing/gloves/miscellaneous.dm | 10 +- code/modules/clothing/gloves/mittens.dm | 2 + code/modules/clothing/gloves/tacklers.dm | 6 +- code/modules/clothing/head/_head.dm | 2 +- code/modules/clothing/head/helmet.dm | 2 +- code/modules/clothing/head/jobs.dm | 2 +- code/modules/clothing/head/misc.dm | 5 +- code/modules/clothing/head/misc_special.dm | 10 +- code/modules/clothing/masks/_masks.dm | 2 +- code/modules/clothing/masks/cluwne.dm | 4 +- code/modules/clothing/masks/miscellaneous.dm | 2 +- code/modules/clothing/neck/_neck.dm | 4 +- code/modules/clothing/outfits/vr.dm | 2 +- code/modules/clothing/outfits/vv_outfit.dm | 50 +- code/modules/clothing/shoes/_shoes.dm | 2 +- code/modules/clothing/shoes/cluwne.dm | 2 +- code/modules/clothing/shoes/magboots.dm | 2 +- code/modules/clothing/shoes/miscellaneous.dm | 8 +- code/modules/clothing/shoes/taeclowndo.dm | 4 +- .../modules/clothing/spacesuits/chronosuit.dm | 2 +- code/modules/clothing/spacesuits/hardsuit.dm | 20 +- code/modules/clothing/suits/miscellaneous.dm | 23 +- .../modules/clothing/suits/reactive_armour.dm | 4 +- code/modules/clothing/suits/toggles.dm | 12 +- code/modules/clothing/suits/wiz_robe.dm | 2 +- code/modules/clothing/under/_under.dm | 10 +- code/modules/clothing/under/cluwne.dm | 2 +- code/modules/clothing/under/color.dm | 4 +- code/modules/events/wizard/curseditems.dm | 18 +- code/modules/flufftext/Hallucination.dm | 2 +- .../food_and_drinks/drinks/drinks/bottle.dm | 2 +- code/modules/holiday/dynamic.dm | 10 + code/modules/holiday/halloween/jacqueen.dm | 4 +- code/modules/jobs/job_types/_job.dm | 2 +- .../jobs/job_types/atmospheric_technician.dm | 4 +- code/modules/jobs/job_types/chaplain.dm | 4 +- code/modules/jobs/job_types/chief_engineer.dm | 4 +- code/modules/jobs/job_types/paramedic.dm | 2 +- .../jobs/job_types/research_director.dm | 2 +- code/modules/jobs/job_types/roboticist.dm | 2 +- .../jobs/job_types/security_officer.dm | 2 +- code/modules/jobs/job_types/shaft_miner.dm | 2 +- .../jobs/job_types/station_engineer.dm | 4 +- .../mining/equipment/wormhole_jaunter.dm | 4 +- .../mining/lavaland/necropolis_chests.dm | 2 +- code/modules/mob/inventory.dm | 35 +- .../living/carbon/alien/special/facehugger.dm | 4 +- code/modules/mob/living/carbon/carbon.dm | 12 +- .../mob/living/carbon/carbon_stripping.dm | 12 +- .../mob/living/carbon/human/examine.dm | 24 +- code/modules/mob/living/carbon/human/human.dm | 23 +- .../living/carbon/human/human_stripping.dm | 22 +- .../mob/living/carbon/human/inventory.dm | 92 +- .../mob/living/carbon/human/species.dm | 60 +- .../carbon/human/species_types/golems.dm | 2 +- .../carbon/human/species_types/mushpeople.dm | 2 +- .../human/species_types/shadowpeople.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 46 +- code/modules/mob/living/carbon/inventory.dm | 40 +- code/modules/mob/living/carbon/life.dm | 10 +- .../mob/living/carbon/monkey/inventory.dm | 10 +- .../mob/living/carbon/monkey/monkey.dm | 2 +- .../mob/living/carbon/monkey/punpun.dm | 4 +- .../modules/mob/living/carbon/update_icons.dm | 10 +- code/modules/mob/living/login.dm | 5 +- .../simple_animal/friendly/drone/_drone.dm | 4 +- .../friendly/drone/drones_as_items.dm | 2 +- .../simple_animal/friendly/drone/inventory.dm | 16 +- .../simple_animal/guardian/types/dextrous.dm | 8 +- .../hostile/mining_mobs/goliath.dm | 2 +- code/modules/mob/mob.dm | 6 +- code/modules/ninja/energy_katana.dm | 2 +- code/modules/ninja/outfit.dm | 2 +- code/modules/ninja/suit/shoes.dm | 2 +- .../projectiles/boxes_magazines/ammo_boxes.dm | 2 +- .../boxes_magazines/external/rechargable.dm | 2 +- code/modules/projectiles/gun.dm | 2 +- .../modules/projectiles/guns/ballistic/toy.dm | 2 +- .../projectiles/guns/energy/laser_gatling.dm | 2 +- code/modules/reagents/chemistry/holder.dm | 35 + code/modules/reagents/chemistry/recipes.dm | 2 + .../chemistry/recipes/slime_extracts.dm | 2 +- .../reagents/chemistry/recipes/special.dm | 2 + .../reagents/reagent_containers/glass.dm | 33 +- .../reagents/reagent_containers/rags.dm | 6 +- .../research/designs/limbgrower_designs.dm | 12 + .../xenobiology/crossbreeding/_clothing.dm | 6 +- .../xenobiology/crossbreeding/regenerative.dm | 16 +- code/modules/spells/spell_types/lichdom.dm | 14 +- code/modules/unit_tests/outfit_sanity.dm | 8 +- code/modules/vehicles/scooter.dm | 4 +- html/changelogs/AutoChangeLog-pr-15495.yml | 4 + html/changelogs/AutoChangeLog-pr-15503.yml | 4 + html/changelogs/AutoChangeLog-pr-15505.yml | 4 + html/changelogs/AutoChangeLog-pr-15522.yml | 4 + html/changelogs/AutoChangeLog-pr-15526.yml | 5 + html/changelogs/AutoChangeLog-pr-15528.yml | 4 + html/changelogs/archive/2022-02.yml | 3 + icons/obj/pda.dmi | Bin 16000 -> 16140 bytes .../code/datums/components/souldeath.dm | 2 +- .../code/modules/client/loadout/__donator.dm | 190 ++-- .../code/modules/client/loadout/backpack.dm | 2 +- .../code/modules/client/loadout/glasses.dm | 2 +- .../code/modules/client/loadout/gloves.dm | 2 +- .../code/modules/client/loadout/hands.dm | 2 +- .../code/modules/client/loadout/head.dm | 6 +- .../code/modules/client/loadout/mask.dm | 2 +- .../code/modules/client/loadout/neck.dm | 2 +- .../code/modules/client/loadout/shoes.dm | 2 +- .../code/modules/client/loadout/suit.dm | 2 +- .../code/modules/client/loadout/uniform.dm | 12 +- .../code/modules/client/loadout/unlockable.dm | 2 +- .../modules/custom_loadout/custom_items.dm | 4 +- .../modules/custom_loadout/load_to_mob.dm | 2 +- .../eventmaps/Spookystation/JTGSZwork.dm | 2 +- .../chemistry/reagents/fermi_reagents.dm | 2 +- .../reagents/chemistry/recipes/fermi.dm | 2 + .../code/modules/reagents/objects/clothes.dm | 2 +- .../code/datums/elements/holder_micro.dm | 2 +- .../code/datums/interactions/lewd/_lewd.dm | 24 +- .../interactions/lewd/lewd_interactions.dm | 2 +- .../code/game/objects/items/chrono_eraser.dm | 2 +- .../objects/items/devices/radio/headset.dm | 2 +- .../game/objects/items/devices/radio/radio.dm | 2 - .../code/game/objects/items/fleshlight.dm | 6 +- .../modules/client/loadout/accessories.dm | 2 +- .../code/modules/client/loadout/boxers.dm | 2 +- .../code/modules/client/loadout/shirts.dm | 2 +- .../code/modules/client/loadout/socks.dm | 2 +- .../code/modules/client/loadout/wrists.dm | 2 +- .../code/modules/clothing/gloves/_gloves.dm | 24 +- .../modules/clothing/spacesuits/hardsuit.dm | 2 +- .../mining/lavaland/necropolis_chests.dm | 2 +- .../living/carbon/human/human_stripping.dm | 10 +- tgstation.dme | 3 +- tgui/packages/tgui/interfaces/Limbgrower.js | 21 +- .../tgui/interfaces/PlayerPlaytimes.js | 119 +++ 255 files changed, 2448 insertions(+), 1057 deletions(-) create mode 100644 code/modules/admin/playtimes.dm create mode 100644 code/modules/holiday/dynamic.dm create mode 100644 html/changelogs/AutoChangeLog-pr-15495.yml create mode 100644 html/changelogs/AutoChangeLog-pr-15503.yml create mode 100644 html/changelogs/AutoChangeLog-pr-15505.yml create mode 100644 html/changelogs/AutoChangeLog-pr-15522.yml create mode 100644 html/changelogs/AutoChangeLog-pr-15526.yml create mode 100644 html/changelogs/AutoChangeLog-pr-15528.yml delete mode 100644 modular_sand/code/game/objects/items/devices/radio/radio.dm create mode 100644 tgui/packages/tgui/interfaces/PlayerPlaytimes.js diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 54c4c1de95..8da60d8af0 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -57,6 +57,10 @@ #define ADMIN_SET_SD_CODE "(SETCODE)" #define ADMIN_FULLMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)] [ADMIN_INDIVIDUALLOG(user)] [ADMIN_SMITE(user)]" #define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_FULLMONTY_NONAME(user)]" +//ambition start +#define ADMIN_TPMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_JMP(user)] [ADMIN_FLW(user)]" +#define ADMIN_TPMONTY(user) "[key_name_admin(user)] [ADMIN_TPMONTY_NONAME(user)]" +//ambition end #define ADMIN_JMP(src) "(JMP)" #define COORD(src) "[src ? "([src.x],[src.y],[src.z])" : "nonexistent location"]" #define AREACOORD(src) "[src ? "[get_area_name(src, TRUE)] ([src.x], [src.y], [src.z])" : "nonexistent location"]" diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 20b4f03d71..00751f2cab 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -123,3 +123,9 @@ GLOBAL_LIST_EMPTY(living_heart_cache) //A list of all living hearts in existance /// The dimensions of the antagonist preview icon. Will be scaled to this size. #define ANTAGONIST_PREVIEW_ICON_SIZE 96 + +//Objectives-Ambitions Panel +#define REQUEST_NEW_OBJECTIVE "new_objective" +#define REQUEST_DEL_OBJECTIVE "del_objective" +#define REQUEST_WIN_OBJECTIVE "win_objective" +#define REQUEST_LOSE_OBJECTIVE "lose_objective" diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 2ead5ea068..35de475d35 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -116,6 +116,7 @@ #define GLOVES_MAX_TEMP_PROTECT 1500 //For some gloves #define SHOES_MIN_TEMP_PROTECT 2.0 //For gloves #define SHOES_MAX_TEMP_PROTECT 1500 //For gloves +#define COAT_MAX_TEMP_PROTECT 330 //For winter coats (if they can stop you from getting cold why can't they do it the other way to a lesser extent) #define PRESSURE_DAMAGE_COEFFICIENT 4 //The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE #define MAX_HIGH_PRESSURE_DAMAGE 16 // CITADEL CHANGES Max to 16, low to 8. diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm index 92231d3998..b783678c86 100644 --- a/code/__DEFINES/cooldowns.dm +++ b/code/__DEFINES/cooldowns.dm @@ -27,6 +27,9 @@ //INDEXES #define COOLDOWN_EMPLOYMENT_CABINET "employment cabinet" +#define COOLDOWN_AMBITION "ambition" +#define COOLDOWN_OBJECTIVES "objectives" +#define COOLDOWN_OBJ_ADMIN_PING "obj_admin_ping" //car cooldowns #define COOLDOWN_CAR_HONK "car_honk" diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 1431ad2109..f9f242e7e3 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -6,116 +6,67 @@ #define STORAGE_VIEW_DEPTH 2 //ITEM INVENTORY SLOT BITMASKS -#define ITEM_SLOT_OCLOTHING (1<<0) -#define ITEM_SLOT_ICLOTHING (1<<1) -#define ITEM_SLOT_GLOVES (1<<2) -#define ITEM_SLOT_EYES (1<<3) -#define ITEM_SLOT_EARS (1<<4) -#define ITEM_SLOT_MASK (1<<5) -#define ITEM_SLOT_HEAD (1<<6) -#define ITEM_SLOT_FEET (1<<7) -#define ITEM_SLOT_ID (1<<8) -#define ITEM_SLOT_BELT (1<<9) -#define ITEM_SLOT_BACK (1<<10) -#define ITEM_SLOT_POCKET (1<<11) // this is to allow items with a w_class of WEIGHT_CLASS_NORMAL or WEIGHT_CLASS_BULKY to fit in pockets. -#define ITEM_SLOT_DENYPOCKET (1<<12) // this is to deny items with a w_class of WEIGHT_CLASS_SMALL or WEIGHT_CLASS_TINY to fit in pockets. -#define ITEM_SLOT_NECK (1<<13) -#define ITEM_SLOT_HANDS (1<<14) -#define ITEM_SLOT_BACKPACK (1<<15) -#define ITEM_SLOT_SUITSTORE (1<<16) -//skyrat edit -#define ITEM_SLOT_UNDERWEAR (1<<17) -#define ITEM_SLOT_SOCKS (1<<18) -#define ITEM_SLOT_SHIRT (1<<19) -#define ITEM_SLOT_WRISTS (1<<20) -// +/// Suit slot (armors, costumes, space suits, etc.) +#define ITEM_SLOT_OCLOTHING (1<<0) +/// Jumpsuit slot +#define ITEM_SLOT_ICLOTHING (1<<1) +/// Glove slot +#define ITEM_SLOT_GLOVES (1<<2) +/// Glasses slot +#define ITEM_SLOT_EYES (1<<3) +/// Ear slot (radios, earmuffs) +#define ITEM_SLOT_EARS_LEFT (1<<4) +/// Mask slot +#define ITEM_SLOT_MASK (1<<5) +/// Head slot (helmets, hats, etc.) +#define ITEM_SLOT_HEAD (1<<6) +/// Shoe slot +#define ITEM_SLOT_FEET (1<<7) +/// ID slot +#define ITEM_SLOT_ID (1<<8) +/// Belt slot +#define ITEM_SLOT_BELT (1<<9) +/// Back slot +#define ITEM_SLOT_BACK (1<<10) +/// Dextrous simplemob "hands" (used for Drones and Dextrous Guardians) +#define ITEM_SLOT_DEX_STORAGE (1<<11) +/// Neck slot (ties, bedsheets, scarves) +#define ITEM_SLOT_NECK (1<<12) +/// A character's hand slots +#define ITEM_SLOT_HANDS (1<<13) +/// Inside of a character's backpack +#define ITEM_SLOT_BACKPACK (1<<14) +/// Suit Storage slot +#define ITEM_SLOT_SUITSTORE (1<<15) +/// Left Pocket slot +#define ITEM_SLOT_LPOCKET (1<<16) +/// Right Pocket slot +#define ITEM_SLOT_RPOCKET (1<<17) +// -- Sandstorm edit -- +/// Underwear slot +#define ITEM_SLOT_UNDERWEAR (1<<17) +/// Socks slot +#define ITEM_SLOT_SOCKS (1<<18) +/// Shirt slot +#define ITEM_SLOT_SHIRT (1<<19) +/// Right ear slot +#define ITEM_SLOT_EARS_RIGHT (1<<20) +/// Wrist slot +#define ITEM_SLOT_WRISTS (1<<21) +// -- End edit -- +/// Handcuff slot +#define ITEM_SLOT_HANDCUFFED (1<<22) +/// Legcuff slot (bolas, beartraps) +#define ITEM_SLOT_LEGCUFFED (1<<23) -//SLOTS -#define SLOT_BACK 1 -#define SLOT_WEAR_MASK 2 -#define SLOT_HANDCUFFED 3 -#define SLOT_HANDS 4 //wherever you provide a slot for hands you provide SLOT_HANDS - //SLOT_HANDS as a slot will pick ANY available hand -#define SLOT_BELT 5 -#define SLOT_WEAR_ID 6 -#define SLOT_EARS_LEFT 7 //skyrat edit -#define SLOT_GLASSES 8 -#define SLOT_GLOVES 9 -#define SLOT_NECK 10 -#define SLOT_HEAD 11 -#define SLOT_SHOES 12 -#define SLOT_WEAR_SUIT 13 -#define SLOT_W_UNIFORM 14 -#define SLOT_L_STORE 15 -#define SLOT_R_STORE 16 -#define SLOT_S_STORE 17 -#define SLOT_IN_BACKPACK 18 -#define SLOT_LEGCUFFED 19 -#define SLOT_GENERC_DEXTROUS_STORAGE 20 -//skyrat edit -#define SLOT_W_UNDERWEAR 21 -#define SLOT_W_SOCKS 22 -#define SLOT_W_SHIRT 23 -#define SLOT_EARS_RIGHT 24 -#define SLOT_WRISTS 25 -// +/// Total amount of slots +#define SLOTS_AMT 25 // Keep this up to date! +//SLOT GROUP HELPERS +#define ITEM_SLOT_POCKETS (ITEM_SLOT_LPOCKET|ITEM_SLOT_RPOCKET) -#define SLOTS_AMT 25 // Keep this up to date! //skyrat edit - extra slots - -//I hate that this has to exist -/proc/slotdefine2slotbit(slotdefine) //Keep this up to date with the value of SLOT BITMASKS and SLOTS (the two define sections above) - . = 0 - switch(slotdefine) - if(SLOT_BACK) - . = ITEM_SLOT_BACK - if(SLOT_WEAR_MASK) - . = ITEM_SLOT_MASK - if(SLOT_NECK) - . = ITEM_SLOT_NECK - if(SLOT_BELT) - . = ITEM_SLOT_BELT - if(SLOT_WEAR_ID) - . = ITEM_SLOT_ID - //skyrat edit - if(SLOT_EARS_RIGHT) - . = ITEM_SLOT_EARS - if(SLOT_EARS_LEFT) - . = ITEM_SLOT_EARS - // - if(SLOT_GLASSES) - . = ITEM_SLOT_EYES - if(SLOT_GLOVES) - . = ITEM_SLOT_GLOVES - //skyrat edit - if(SLOT_WRISTS) - . = ITEM_SLOT_WRISTS - // - if(SLOT_HEAD) - . = ITEM_SLOT_HEAD - if(SLOT_SHOES) - . = ITEM_SLOT_FEET - if(SLOT_WEAR_SUIT) - . = ITEM_SLOT_OCLOTHING - if(SLOT_W_UNIFORM) - . = ITEM_SLOT_ICLOTHING - if(SLOT_L_STORE, SLOT_R_STORE) - . = ITEM_SLOT_POCKET - if(SLOT_HANDS) - . = ITEM_SLOT_HANDS - if(SLOT_IN_BACKPACK) - . = ITEM_SLOT_BACKPACK - if(SLOT_S_STORE) - . = ITEM_SLOT_SUITSTORE - //skyrat edit - if(SLOT_W_UNDERWEAR) - . = ITEM_SLOT_UNDERWEAR - if(SLOT_W_SOCKS) - . = ITEM_SLOT_SOCKS - if(SLOT_W_SHIRT) - . = ITEM_SLOT_SHIRT - // - +//EARS HELPER +#define ITEM_SLOT_EARS (ITEM_SLOT_EARS_LEFT|ITEM_SLOT_EARS_RIGHT) //Bit flags for the flags_inv variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses. #define HIDEGLOVES (1<<0) @@ -278,4 +229,4 @@ GLOBAL_LIST_INIT(security_wintercoat_allowed, typecacheof(list( #define GET_INTERNAL_SLOTS(C) list(C.head, C.wear_mask) //Slots that won't trigger humans' update_genitals() on equip(). -GLOBAL_LIST_INIT(no_genitals_update_slots, list(SLOT_L_STORE, SLOT_R_STORE, SLOT_S_STORE, SLOT_IN_BACKPACK, SLOT_LEGCUFFED, SLOT_HANDCUFFED, SLOT_HANDS, SLOT_GENERC_DEXTROUS_STORAGE)) +GLOBAL_LIST_INIT(no_genitals_update_slots, list(ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET, ITEM_SLOT_SUITSTORE, ITEM_SLOT_BACKPACK, ITEM_SLOT_LEGCUFFED, ITEM_SLOT_HANDCUFFED, ITEM_SLOT_HANDS, ITEM_SLOT_DEX_STORAGE)) diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index f56cd76a71..60d02c1e49 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -105,6 +105,9 @@ #define TORADIANS(degrees) ((degrees) * 0.0174532925) +/// Gets shift x that would be required the bitflag (1<= S) && (E == 0 || length(L) >= (E - 1))) { L.Cut(S, E); if(!length(L)) { L = null; } } +//ambition end #define LAZYADD(L, I) if(!L) { L = list(); } L += I; #define LAZYOR(L, I) if(!L) { L = list(); } L |= I; #define LAZYFIND(L, V) (L ? L.Find(V) : 0) diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 4ee622961a..2fbf087288 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -140,3 +140,6 @@ GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_typepaths_asc(A, B) return sorttext("[B]","[A]") + +/proc/cmp_playtime(list/A, list/B) + return A["playtime"] - B["playtime"] diff --git a/code/__HELPERS/custom_holoforms.dm b/code/__HELPERS/custom_holoforms.dm index 2733a97e14..8aa8d279ec 100644 --- a/code/__HELPERS/custom_holoforms.dm +++ b/code/__HELPERS/custom_holoforms.dm @@ -18,7 +18,7 @@ if(length(inhand_equipment)) for(var/path in inhand_equipment) var/obj/item/I = new path - mannequin.equip_to_slot_if_possible(I, SLOT_HANDS, TRUE, TRUE, TRUE, TRUE) + mannequin.equip_to_slot_if_possible(I, ITEM_SLOT_HANDS, TRUE, TRUE, TRUE, TRUE) var/icon/combined = new diff --git a/code/__HELPERS/pronouns.dm b/code/__HELPERS/pronouns.dm index bab286bafe..bfe09ba370 100644 --- a/code/__HELPERS/pronouns.dm +++ b/code/__HELPERS/pronouns.dm @@ -203,62 +203,62 @@ /mob/living/carbon/human/p_they(capitalized, temp_gender) var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - if((SLOT_W_UNIFORM in obscured) && skipface) + if((ITEM_SLOT_ICLOTHING in obscured) && skipface) temp_gender = PLURAL return ..() /mob/living/carbon/human/p_their(capitalized, temp_gender) var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - if((SLOT_W_UNIFORM in obscured) && skipface) + if((ITEM_SLOT_ICLOTHING in obscured) && skipface) temp_gender = PLURAL return ..() /mob/living/carbon/human/p_them(capitalized, temp_gender) var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - if((SLOT_W_UNIFORM in obscured) && skipface) + if((ITEM_SLOT_ICLOTHING in obscured) && skipface) temp_gender = PLURAL return ..() /mob/living/carbon/human/p_have(temp_gender) var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - if((SLOT_W_UNIFORM in obscured) && skipface) + if((ITEM_SLOT_ICLOTHING in obscured) && skipface) temp_gender = PLURAL return ..() /mob/living/carbon/human/p_are(temp_gender) var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - if((SLOT_W_UNIFORM in obscured) && skipface) + if((ITEM_SLOT_ICLOTHING in obscured) && skipface) temp_gender = PLURAL return ..() /mob/living/carbon/human/p_were(temp_gender) var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - if((SLOT_W_UNIFORM in obscured) && skipface) + if((ITEM_SLOT_ICLOTHING in obscured) && skipface) temp_gender = PLURAL return ..() /mob/living/carbon/human/p_do(temp_gender) var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - if((SLOT_W_UNIFORM in obscured) && skipface) + if((ITEM_SLOT_ICLOTHING in obscured) && skipface) temp_gender = PLURAL return ..() /mob/living/carbon/human/p_s(temp_gender) var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - if((SLOT_W_UNIFORM in obscured) && skipface) + if((ITEM_SLOT_ICLOTHING in obscured) && skipface) temp_gender = PLURAL return ..() /mob/living/carbon/human/p_es(temp_gender) var/list/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - if((SLOT_W_UNIFORM in obscured) && skipface) + if((ITEM_SLOT_ICLOTHING in obscured) && skipface) temp_gender = PLURAL return ..() diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index d9e83eed0d..7a26088c73 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -624,6 +624,10 @@ currrent_category = A.roundend_category previous_category = A result += A.roundend_report() +//ambition start + for(var/count in 1 to LAZYLEN(A.owner.ambitions)) + result += "
Ambition #[count]: [A.owner.ambitions[count]]" +//ambition end result += "

" CHECK_TICK diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 850b299ed0..63e0c0a0f9 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -412,25 +412,25 @@ /proc/slot2body_zone(slot) switch(slot) - if(SLOT_BACK, SLOT_WEAR_SUIT, SLOT_W_UNIFORM, SLOT_BELT, SLOT_WEAR_ID) + if(ITEM_SLOT_BACK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_ICLOTHING, ITEM_SLOT_BELT, ITEM_SLOT_ID) return BODY_ZONE_CHEST - if(SLOT_GLOVES, SLOT_HANDS, SLOT_HANDCUFFED, SLOT_WRISTS) //SKYRAT EDIT + if(ITEM_SLOT_GLOVES, ITEM_SLOT_HANDS, ITEM_SLOT_HANDCUFFED, ITEM_SLOT_WRISTS) // Sandstorm edit return pick(BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND) - if(SLOT_HEAD, SLOT_NECK, SLOT_NECK, SLOT_EARS_LEFT, SLOT_EARS_RIGHT) //skyrat edit + if(ITEM_SLOT_HEAD, ITEM_SLOT_NECK, ITEM_SLOT_NECK, ITEM_SLOT_EARS) return BODY_ZONE_HEAD - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) return BODY_ZONE_PRECISE_MOUTH - if(SLOT_GLASSES) + if(ITEM_SLOT_EYES) return BODY_ZONE_PRECISE_EYES - if(SLOT_SHOES) + if(ITEM_SLOT_FEET) return pick(BODY_ZONE_PRECISE_R_FOOT, BODY_ZONE_PRECISE_L_FOOT) - if(SLOT_LEGCUFFED) + if(ITEM_SLOT_LEGCUFFED) return pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) //adapted from http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/ @@ -652,43 +652,43 @@ /proc/slot_to_string(slot) switch(slot) - if(SLOT_BACK) + if(ITEM_SLOT_BACK) return "Backpack" - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) return "Mask" - if(SLOT_HANDS) + if(ITEM_SLOT_HANDS) return "Hands" - if(SLOT_BELT) + if(ITEM_SLOT_BELT) return "Belt" - //skyrat edit - if(SLOT_EARS_LEFT) + // Sandstorm edit + if(ITEM_SLOT_EARS_LEFT) return "Left ear" - if(SLOT_EARS_RIGHT) + if(ITEM_SLOT_EARS_RIGHT) return "Right ear" - if(SLOT_W_UNDERWEAR) + if(ITEM_SLOT_UNDERWEAR) return "Underwear" - if(SLOT_W_SOCKS) + if(ITEM_SLOT_SOCKS) return "Socks" - if(SLOT_W_SHIRT) + if(ITEM_SLOT_SHIRT) return "Shirt" - if(SLOT_WRISTS) + if(ITEM_SLOT_WRISTS) return "Wrist" // - if(SLOT_GLASSES) + if(ITEM_SLOT_EYES) return "Glasses" - if(SLOT_GLOVES) + if(ITEM_SLOT_GLOVES) return "Gloves" - if(SLOT_NECK) + if(ITEM_SLOT_NECK) return "Neck" - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) return "Head" - if(SLOT_SHOES) + if(ITEM_SLOT_FEET) return "Shoes" - if(SLOT_WEAR_SUIT) + if(ITEM_SLOT_OCLOTHING) return "Suit" - if(SLOT_W_UNIFORM) + if(ITEM_SLOT_ICLOTHING) return "Uniform" - if(SLOT_IN_BACKPACK) + if(ITEM_SLOT_BACKPACK) return "In backpack" /proc/tg_ui_icon_to_cit_ui(ui_style) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 1a8852a721..f931dc5e5c 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1600,7 +1600,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) if(!iscarbon(target)) return TRUE if(check_neck) - if(istype(target.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) + if(istype(target.get_item_by_slot(ITEM_SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) return FALSE if(check_blood) if(target.reagents.has_reagent(/datum/reagent/consumable/garlic)) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 14969e6c92..921b512d32 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -16,6 +16,8 @@ GLOBAL_LIST_EMPTY(singularities) //list of all singularities on the stati GLOBAL_LIST_EMPTY(grounding_rods) //list of all grounding rods on the station GLOBAL_LIST(chemical_reactions_list) //list of all /datum/chemical_reaction datums. Used during chemical reactions +GLOBAL_LIST(drink_reactions_list) //list of all /datum/chemical_reaction datums where the output is of type /datum/reagent/consumable for bartender PDA +GLOBAL_LIST(normalized_chemical_reactions_list) //list of all /datum/chemical_reaction datums with actual sane indexing for chemistry PDA GLOBAL_LIST(chemical_reagents_list) //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff GLOBAL_LIST_EMPTY(tech_list) //list of all /datum/tech datums indexed by id. GLOBAL_LIST_EMPTY(surgeries_list) //list of all surgeries by name, associated with their path. diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm index bf7969a6ba..8a494a05b9 100644 --- a/code/_onclick/hud/alien.dm +++ b/code/_onclick/hud/alien.dm @@ -117,7 +117,7 @@ for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv.hud = src - inv_slots[inv.slot_id] = inv + inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv inv.update_icon() /datum/hud/alien/persistent_inventory_update() diff --git a/code/_onclick/hud/drones.dm b/code/_onclick/hud/drones.dm index 849936d4ed..a2cae89864 100644 --- a/code/_onclick/hud/drones.dm +++ b/code/_onclick/hud/drones.dm @@ -8,7 +8,7 @@ inv_box.icon_state = "suit_storage" // inv_box.icon_full = "template" inv_box.screen_loc = ui_drone_storage - inv_box.slot_id = SLOT_GENERC_DEXTROUS_STORAGE + inv_box.slot_id = ITEM_SLOT_DEX_STORAGE static_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -17,13 +17,13 @@ inv_box.icon_state = "mask" // inv_box.icon_full = "template" inv_box.screen_loc = ui_drone_head - inv_box.slot_id = SLOT_HEAD + inv_box.slot_id = ITEM_SLOT_HEAD static_inventory += inv_box for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv.hud = src - inv_slots[inv.slot_id] = inv + inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv inv.update_icon() diff --git a/code/_onclick/hud/generic_dextrous.dm b/code/_onclick/hud/generic_dextrous.dm index 88407bb04c..1762bee1fc 100644 --- a/code/_onclick/hud/generic_dextrous.dm +++ b/code/_onclick/hud/generic_dextrous.dm @@ -60,7 +60,7 @@ for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv.hud = src - inv_slots[inv.slot_id] = inv + inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv inv.update_icon() /datum/hud/dextrous/persistent_inventory_update() diff --git a/code/_onclick/hud/guardian.dm b/code/_onclick/hud/guardian.dm index 7f360b48dc..2af02d8437 100644 --- a/code/_onclick/hud/guardian.dm +++ b/code/_onclick/hud/guardian.dm @@ -43,7 +43,7 @@ inv_box.icon = ui_style inv_box.icon_state = "suit_storage" inv_box.screen_loc = ui_id - inv_box.slot_id = SLOT_GENERC_DEXTROUS_STORAGE + inv_box.slot_id = ITEM_SLOT_DEX_STORAGE static_inventory += inv_box using = new /atom/movable/screen/guardian/Communicate() diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 126aee0f52..684278d9bd 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -17,23 +17,23 @@ if(usr.hud_used.inventory_shown && targetmob.hud_used) usr.hud_used.inventory_shown = FALSE usr.client.screen -= targetmob.hud_used.toggleable_inventory - //SKYRAT EDIT + // Sandstorm edit usr.client.screen -= targetmob.hud_used.extra_inventory - //SKYRAT EDIT END + // Sandstorm edit END else usr.hud_used.inventory_shown = TRUE usr.client.screen += targetmob.hud_used.toggleable_inventory - //SKYRAT EDIT + // Sandstorm edit if(usr.hud_used.extra_shown) usr.client.screen += targetmob.hud_used.extra_inventory - //SKYRAT EDIT END + // Sandstorm edit END targetmob.hud_used.hidden_inventory_update(usr) - //SKYRAT EDIT + // Sandstorm edit targetmob.hud_used.extra_inventory_update(usr) - //SKYRAT EDIT END + // Sandstorm edit END -//skyrat edit +// Sandstorm edit /atom/movable/screen/human/toggle/extra name = "toggle extra" icon_state = "toggle_extra" @@ -267,7 +267,7 @@ inv_box = new /atom/movable/screen/inventory() inv_box.name = "i_clothing" inv_box.icon = ui_style - inv_box.slot_id = SLOT_W_UNIFORM + inv_box.slot_id = ITEM_SLOT_ICLOTHING inv_box.icon_state = "uniform" inv_box.screen_loc = ui_iclothing toggleable_inventory += inv_box @@ -275,7 +275,7 @@ inv_box = new /atom/movable/screen/inventory() inv_box.name = "o_clothing" inv_box.icon = ui_style - inv_box.slot_id = SLOT_WEAR_SUIT + inv_box.slot_id = ITEM_SLOT_OCLOTHING inv_box.icon_state = "suit" inv_box.screen_loc = ui_oclothing toggleable_inventory += inv_box @@ -301,7 +301,7 @@ inv_box.icon = ui_style inv_box.icon_state = "id" inv_box.screen_loc = ui_id - inv_box.slot_id = SLOT_WEAR_ID + inv_box.slot_id = ITEM_SLOT_ID static_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -309,7 +309,7 @@ inv_box.icon = ui_style inv_box.icon_state = "mask" inv_box.screen_loc = ui_mask - inv_box.slot_id = SLOT_WEAR_MASK + inv_box.slot_id = ITEM_SLOT_MASK toggleable_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -317,7 +317,7 @@ inv_box.icon = ui_style inv_box.icon_state = "neck" inv_box.screen_loc = ui_neck - inv_box.slot_id = SLOT_NECK + inv_box.slot_id = ITEM_SLOT_NECK toggleable_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -325,7 +325,7 @@ inv_box.icon = ui_style inv_box.icon_state = "back" inv_box.screen_loc = ui_back - inv_box.slot_id = SLOT_BACK + inv_box.slot_id = ITEM_SLOT_BACK static_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -333,7 +333,7 @@ inv_box.icon = ui_style inv_box.icon_state = "pocket" inv_box.screen_loc = ui_storage1 - inv_box.slot_id = SLOT_L_STORE + inv_box.slot_id = ITEM_SLOT_LPOCKET static_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -341,7 +341,7 @@ inv_box.icon = ui_style inv_box.icon_state = "pocket" inv_box.screen_loc = ui_storage2 - inv_box.slot_id = SLOT_R_STORE + inv_box.slot_id = ITEM_SLOT_RPOCKET static_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -349,7 +349,7 @@ inv_box.icon = ui_style inv_box.icon_state = "suit_storage" inv_box.screen_loc = ui_sstore1 - inv_box.slot_id = SLOT_S_STORE + inv_box.slot_id = ITEM_SLOT_SUITSTORE static_inventory += inv_box using = new /atom/movable/screen/resist() @@ -382,7 +382,7 @@ inv_box.icon = ui_style inv_box.icon_state = "gloves" inv_box.screen_loc = ui_gloves - inv_box.slot_id = SLOT_GLOVES + inv_box.slot_id = ITEM_SLOT_GLOVES toggleable_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -390,15 +390,15 @@ inv_box.icon = ui_style inv_box.icon_state = "glasses" inv_box.screen_loc = ui_glasses - inv_box.slot_id = SLOT_GLASSES + inv_box.slot_id = ITEM_SLOT_EYES toggleable_inventory += inv_box inv_box = new /atom/movable/screen/inventory() - inv_box.name = "left ear" //sandstorm edit + inv_box.name = "left ear" // Sandstorm edit inv_box.icon = ui_style inv_box.icon_state = "ears" inv_box.screen_loc = ui_ears - inv_box.slot_id = SLOT_EARS_LEFT //skyrat edit + inv_box.slot_id = ITEM_SLOT_EARS_LEFT // Sandstorm Edit toggleable_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -406,7 +406,7 @@ inv_box.icon = ui_style inv_box.icon_state = "head" inv_box.screen_loc = ui_head - inv_box.slot_id = SLOT_HEAD + inv_box.slot_id = ITEM_SLOT_HEAD toggleable_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -414,10 +414,10 @@ inv_box.icon = ui_style inv_box.icon_state = "shoes" inv_box.screen_loc = ui_shoes - inv_box.slot_id = SLOT_SHOES + inv_box.slot_id = ITEM_SLOT_FEET toggleable_inventory += inv_box - //skyrat edit + // Sandstorm edit using = new /atom/movable/screen/human/toggle/extra() using.icon = ui_style_modular(ui_style) using.screen_loc = ui_inventory_extra @@ -429,7 +429,7 @@ inv_box.icon = ui_style_modular(ui_style) inv_box.icon_state = "underwear" inv_box.screen_loc = ui_boxers - inv_box.slot_id = SLOT_W_UNDERWEAR //skyrat edit + inv_box.slot_id = ITEM_SLOT_UNDERWEAR // Sandstorm edit extra_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -437,7 +437,7 @@ inv_box.icon = ui_style_modular(ui_style) inv_box.icon_state = "socks" inv_box.screen_loc = ui_socks - inv_box.slot_id = SLOT_W_SOCKS //skyrat edit + inv_box.slot_id = ITEM_SLOT_SOCKS // Sandstorm edit extra_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -445,7 +445,7 @@ inv_box.icon = ui_style_modular(ui_style) inv_box.icon_state = "shirt" inv_box.screen_loc = ui_shirt - inv_box.slot_id = SLOT_W_SHIRT //skyrat edit + inv_box.slot_id = ITEM_SLOT_SHIRT // Sandstorm edit extra_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -453,7 +453,7 @@ inv_box.icon = ui_style_modular(ui_style) inv_box.icon_state = "ears_extra" inv_box.screen_loc = ui_ears_extra - inv_box.slot_id = SLOT_EARS_RIGHT //skyrat edit + inv_box.slot_id = ITEM_SLOT_EARS_RIGHT // Sandstorm edit extra_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -461,7 +461,7 @@ inv_box.icon = ui_style_modular(ui_style) inv_box.icon_state = "wrists" inv_box.screen_loc = ui_wrists - inv_box.slot_id = SLOT_WRISTS + inv_box.slot_id = ITEM_SLOT_WRISTS extra_inventory += inv_box // @@ -471,7 +471,7 @@ inv_box.icon_state = "belt" // inv_box.icon_full = "template_small" inv_box.screen_loc = ui_belt - inv_box.slot_id = SLOT_BELT + inv_box.slot_id = ITEM_SLOT_BELT static_inventory += inv_box throw_icon = new /atom/movable/screen/throw_catch() @@ -551,10 +551,10 @@ zone_select.update_icon() static_inventory += zone_select - for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) //skyrat edit + for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) // Sandstorm edit if(inv.slot_id) inv.hud = src - inv_slots[inv.slot_id] = inv + inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv inv.update_icon() update_locked_slots() @@ -611,7 +611,7 @@ if(!istype(H) || !H.dna.species) return var/datum/species/S = H.dna.species - for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) //skyrat edit + for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory + extra_inventory)) // Sandstorm edit if(inv.slot_id) if(inv.slot_id in S.no_equip) inv.alpha = 128 @@ -665,7 +665,7 @@ if(H.head) screenmob.client.screen -= H.head -//skyrat edit +// Sandstorm edit /datum/hud/human/extra_inventory_update(mob/viewer) if(!mymob) return diff --git a/code/_onclick/hud/monkey.dm b/code/_onclick/hud/monkey.dm index 376db7bf96..b63f8241cb 100644 --- a/code/_onclick/hud/monkey.dm +++ b/code/_onclick/hud/monkey.dm @@ -50,7 +50,7 @@ inv_box.icon_state = "mask" // inv_box.icon_full = "template" inv_box.screen_loc = ui_monkey_mask - inv_box.slot_id = SLOT_WEAR_MASK + inv_box.slot_id = ITEM_SLOT_MASK static_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -59,7 +59,7 @@ inv_box.icon_state = "neck" // inv_box.icon_full = "template" inv_box.screen_loc = ui_monkey_neck - inv_box.slot_id = SLOT_NECK + inv_box.slot_id = ITEM_SLOT_NECK static_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -68,7 +68,7 @@ inv_box.icon_state = "head" // inv_box.icon_full = "template" inv_box.screen_loc = ui_monkey_head - inv_box.slot_id = SLOT_HEAD + inv_box.slot_id = ITEM_SLOT_HEAD static_inventory += inv_box inv_box = new /atom/movable/screen/inventory() @@ -76,7 +76,7 @@ inv_box.icon = ui_style inv_box.icon_state = "back" inv_box.screen_loc = ui_monkey_back - inv_box.slot_id = SLOT_BACK + inv_box.slot_id = ITEM_SLOT_BACK static_inventory += inv_box throw_icon = new /atom/movable/screen/throw_catch() @@ -126,7 +126,7 @@ for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory)) if(inv.slot_id) inv.hud = src - inv_slots[inv.slot_id] = inv + inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv inv.update_icon() /datum/hud/monkey/persistent_inventory_update() diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index f8a14b8c30..ed0a9eb4ea 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -101,7 +101,7 @@ //stops TK grabs being equipped anywhere but into hands /obj/item/tk_grab/equipped(mob/user, slot) - if(slot == SLOT_HANDS) + if(slot == ITEM_SLOT_HANDS) return ..() qdel(src) diff --git a/code/controllers/configuration/entries/dynamic.dm b/code/controllers/configuration/entries/dynamic.dm index 935164352e..98203b7d8a 100644 --- a/code/controllers/configuration/entries/dynamic.dm +++ b/code/controllers/configuration/entries/dynamic.dm @@ -94,6 +94,10 @@ config_entry_value = 10 min_val = 0 +/datum/config_entry/keyed_list/dynamic_mode_days + key_mode = KEY_MODE_TEXT + value_mode = VALUE_MODE_FLAG + /datum/config_entry/keyed_list/storyteller_weight key_mode = KEY_MODE_TEXT value_mode = VALUE_MODE_NUM diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 2fe020d544..9966f90ce7 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -349,3 +349,9 @@ /datum/config_entry/flag/dynamic_config_enabled /datum/config_entry/flag/station_name_needs_approval + +//ambition start +/datum/config_entry/number/max_ambitions // Maximum number of ambitions a mind can store. + config_entry_value = 5 +//ambition end + diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 3b36812dbc..af3f99b9a1 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -505,7 +505,7 @@ SUBSYSTEM_DEF(job) tcg_cards = N.client.prefs.tcg_cards if(tcg_cards) var/obj/item/tcgcard_binder/binder = new(get_turf(H)) - H.equip_to_slot_if_possible(binder, SLOT_IN_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE) + H.equip_to_slot_if_possible(binder, ITEM_SLOT_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE) for(var/card_type in N.client.prefs.tcg_cards) if(card_type) if(islist(H.client.prefs.tcg_cards[card_type])) @@ -715,9 +715,9 @@ SUBSYSTEM_DEF(job) permitted = FALSE if(G.donoritem && !G.donator_ckey_check(the_mob.client.ckey)) permitted = FALSE - if(!equipbackpackstuff && G.slot == SLOT_IN_BACKPACK)//snowflake check since plopping stuff in the backpack doesnt work for pre-job equip loadout stuffs + if(!equipbackpackstuff && G.slot == ITEM_SLOT_BACKPACK)//snowflake check since plopping stuff in the backpack doesnt work for pre-job equip loadout stuffs permitted = FALSE - if(equipbackpackstuff && G.slot != SLOT_IN_BACKPACK)//ditto + if(equipbackpackstuff && G.slot != ITEM_SLOT_BACKPACK)//ditto permitted = FALSE if(!permitted) continue @@ -754,7 +754,7 @@ SUBSYSTEM_DEF(job) I.forceMove(get_turf(C)) else qdel(I) - else if(!M.equip_to_slot_if_possible(I, SLOT_IN_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // Otherwise, try to put it in the backpack + else if(!M.equip_to_slot_if_possible(I, ITEM_SLOT_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // Otherwise, try to put it in the backpack if(can_drop) I.forceMove(get_turf(M)) // If everything fails, just put it on the floor under the mob. else diff --git a/code/datums/action.dm b/code/datums/action.dm index 1a8ea7a60f..ac8c909bd2 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -516,7 +516,7 @@ H.attack_self(owner) return var/obj/item/I = target - if(owner.can_equip(I, SLOT_HANDS)) + if(owner.can_equip(I, ITEM_SLOT_HANDS)) owner.temporarilyRemoveItemFromInventory(I) owner.put_in_hands(I) I.attack_self(owner) diff --git a/code/datums/components/anti_magic.dm b/code/datums/components/anti_magic.dm index 638be08717..840c202bfc 100644 --- a/code/datums/components/anti_magic.dm +++ b/code/datums/components/anti_magic.dm @@ -29,7 +29,7 @@ expire = _expire /datum/component/anti_magic/proc/on_equip(datum/source, mob/equipper, slot) - if(!(allowed_slots & slotdefine2slotbit(slot))) //Check that the slot is valid for antimagic + if(!(allowed_slots & slot)) //Check that the slot is valid for antimagic UnregisterSignal(equipper, COMSIG_MOB_RECEIVE_MAGIC) return RegisterSignal(equipper, COMSIG_MOB_RECEIVE_MAGIC, .proc/protect, TRUE) diff --git a/code/datums/components/phantomthief.dm b/code/datums/components/phantomthief.dm index 6b7e7221c3..a73754d04a 100644 --- a/code/datums/components/phantomthief.dm +++ b/code/datums/components/phantomthief.dm @@ -9,7 +9,7 @@ var/filter_size var/filter_color -/datum/component/wearertargeting/phantomthief/Initialize(_x = -2, _y = 0, _size = 0, _color = "#E62111", list/_valid_slots = list(SLOT_GLASSES)) +/datum/component/wearertargeting/phantomthief/Initialize(_x = -2, _y = 0, _size = 0, _color = "#E62111", list/_valid_slots = list(ITEM_SLOT_EYES)) . = ..() if(. == COMPONENT_INCOMPATIBLE) return diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index 3cf70e80ef..79a84427f4 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -108,7 +108,7 @@ SSvis_overlays.add_vis_overlay(holder, 'icons/effects/effects.dmi', to_add, layer, GAME_PLANE, holder.dir) /datum/component/shielded/proc/on_equip(obj/item/source, mob/living/equipper, slot) - if(!(accepted_slots & slotdefine2slotbit(slot))) + if(!(accepted_slots & slot)) return holder = equipper RegisterSignal(parent, COMSIG_ITEM_RUN_BLOCK, .proc/on_run_block) diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index bcbf979101..f451241fb4 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -89,7 +89,7 @@ /// Triggered on equip of the item containing the component /datum/component/two_handed/proc/on_equip(datum/source, mob/user, slot) - if(require_twohands && slot == SLOT_HANDS) // force equip the item + if(require_twohands && slot == ITEM_SLOT_HANDS) // force equip the item wield(user) if(!user.is_holding(parent) && wielded && !require_twohands) unwield(user) diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 5f9bf37040..2cc72f7ca9 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -235,6 +235,7 @@ else return returned + /** * Callback called by a timer to end an associative-list-indexed cooldown. * diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index b4e53a7425..d6c11ab452 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -75,8 +75,8 @@ if(isobj(H.wear_suit)) Cl = H.wear_suit passed = prob((Cl.permeability_coefficient*100) - 1) - if(passed && isobj(SLOT_W_UNIFORM)) - Cl = SLOT_W_UNIFORM + if(passed && isobj(ITEM_SLOT_ICLOTHING)) + Cl = ITEM_SLOT_ICLOTHING passed = prob((Cl.permeability_coefficient*100) - 1) if(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM) if(isobj(H.wear_suit) && H.wear_suit.body_parts_covered&HANDS) diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm index e769f466b9..0440fb231d 100644 --- a/code/datums/diseases/wizarditis.dm +++ b/code/datums/diseases/wizarditis.dm @@ -61,19 +61,19 @@ STI KALY - blind if(!istype(H.head, /obj/item/clothing/head/wizard)) if(!H.dropItemToGround(H.head)) qdel(H.head) - H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(H), SLOT_HEAD) + H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(H), ITEM_SLOT_HEAD) return if(prob(chance)) if(!istype(H.wear_suit, /obj/item/clothing/suit/wizrobe)) if(!H.dropItemToGround(H.wear_suit)) qdel(H.wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(H), SLOT_WEAR_SUIT) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(H), ITEM_SLOT_OCLOTHING) return if(prob(chance)) if(!istype(H.shoes, /obj/item/clothing/shoes/sandal/magic)) if(!H.dropItemToGround(H.shoes)) qdel(H.shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(H), SLOT_SHOES) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(H), ITEM_SLOT_FEET) return else var/mob/living/carbon/H = affected_mob diff --git a/code/datums/elements/earhealing.dm b/code/datums/elements/earhealing.dm index 2e0fcb87e1..04f51e6e28 100644 --- a/code/datums/elements/earhealing.dm +++ b/code/datums/elements/earhealing.dm @@ -19,7 +19,7 @@ user_by_item -= target /datum/element/earhealing/proc/equippedChanged(datum/source, mob/living/carbon/user, slot) - if(((slot == SLOT_EARS_LEFT) || (slot == SLOT_EARS_RIGHT)) && istype(user)) //skyrat edit + if(((slot == ITEM_SLOT_EARS_LEFT) || slot == ITEM_SLOT_EARS_RIGHT) && istype(user)) user_by_item[source] = user else user_by_item -= source diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index 5e888e0609..2649a8ee6f 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -144,7 +144,7 @@ return TRUE /datum/element/polychromic/proc/grant_user_action(atom/source, mob/user, slot) - if(slot == SLOT_IN_BACKPACK || slot == SLOT_LEGCUFFED || slot == SLOT_HANDCUFFED || slot == SLOT_GENERC_DEXTROUS_STORAGE) + if(slot == ITEM_SLOT_BACKPACK || slot == ITEM_SLOT_LEGCUFFED || slot == ITEM_SLOT_HANDCUFFED || slot == ITEM_SLOT_DEX_STORAGE) return var/datum/action/polychromic/P = actions_by_atom[source] if(!P) diff --git a/code/datums/elements/spellcasting.dm b/code/datums/elements/spellcasting.dm index 877bcdbcd3..676168ea49 100644 --- a/code/datums/elements/spellcasting.dm +++ b/code/datums/elements/spellcasting.dm @@ -34,7 +34,7 @@ stacked_spellcasting_by_user -= target /datum/element/spellcasting/proc/on_equip(datum/source, mob/equipper, slot) - if(!(cast_slots & slotdefine2slotbit(slot))) + if(!(cast_slots & slot)) return users_by_item[source] = equipper if(!stacked_spellcasting_by_user[equipper]) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index 4682595aec..5b6c0e222d 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -59,7 +59,7 @@ /obj/item/clothing/gloves/boxing/equipped(mob/user, slot) . = ..() - if(ishuman(user) && slot == SLOT_GLOVES) + if(ishuman(user) && slot == ITEM_SLOT_GLOVES) var/mob/living/carbon/human/H = user style.teach(H,TRUE) @@ -68,5 +68,5 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_GLOVES) == src) + if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src) style.remove(H) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 3691b2fccc..f8ed72eae8 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -197,7 +197,7 @@ /obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot) . = ..() - if(ishuman(user) && slot == SLOT_GLOVES) + if(ishuman(user) && slot == ITEM_SLOT_GLOVES) var/mob/living/carbon/human/H = user style.teach(H,1) @@ -206,7 +206,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_GLOVES) == src) + if(H.get_item_by_slot(ITEM_SLOT_GLOVES) == src) style.remove(H) /obj/item/clothing/gloves/krav_maga/sec//more obviously named, given to sec diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index 8dc1afba81..466bf5c778 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -485,7 +485,7 @@ /obj/item/storage/belt/champion/wrestling/equipped(mob/user, slot) . = ..() - if(ishuman(user) && slot == SLOT_BELT) + if(ishuman(user) && slot == ITEM_SLOT_BELT) var/mob/living/carbon/human/H = user style.teach(H,1) @@ -494,7 +494,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_BELT) == src) + if(H.get_item_by_slot(ITEM_SLOT_BELT) == src) style.remove(H) //Subtype of wrestling, reserved for the wrestling belts found in the holodeck diff --git a/code/datums/mind.dm b/code/datums/mind.dm index bd25464f3c..1c780c037a 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -29,6 +29,12 @@ */ +//ambition start +#define AMBITION_COOLDOWN_TIME (5 SECONDS) +#define OBJECTIVES_COOLDOWN_TIME (2 SECONDS) +#define ADMIN_PING_COOLDOWN_TIME (10 MINUTES) +//ambition end + /datum/mind var/key var/name //replaces mob/var/original_name @@ -69,6 +75,11 @@ /// Our skill holder. var/datum/skill_holder/skill_holder +//ambition start + /// Lazy list for antagonists to set goals they wish to achieve, to be shown at the round-end report. + var/list/ambitions +//ambition end + ///What character we spawned in as- either at roundstart or latejoin, so we know for persistent scars if we ended as the same person or not var/mob/original_character @@ -176,7 +187,9 @@ qdel(A) return A.owner = src - LAZYADD(antag_datums, A) +//ambition start + do_add_antag_datum(A) +//ambition end A.create_team(team) var/datum/team/antag_team = A.get_team() if(antag_team) @@ -184,6 +197,14 @@ A.on_gain() return A +//ambition start +/datum/mind/proc/do_add_antag_datum(instanced_datum) + . = LAZYLEN(antag_datums) + LAZYADD(antag_datums, instanced_datum) + if(!.) + add_verb(current, /mob/proc/edit_objectives_and_ambitions) +//ambition end + /datum/mind/proc/remove_antag_datum(datum_type) if(!datum_type) return @@ -192,6 +213,14 @@ A.on_removal() return TRUE +//ambition start +/datum/mind/proc/do_remove_antag_datum(instanced_datum) + . = LAZYLEN(antag_datums) + LAZYREMOVE(antag_datums, instanced_datum) + if(. && !LAZYLEN(antag_datums)) + ambitions = null + remove_verb(current, /mob/proc/edit_objectives_and_ambitions) +//ambition end /datum/mind/proc/remove_all_antag_datums() //For the Lazy amongst us. for(var/a in antag_datums) @@ -380,10 +409,10 @@ message_admins("[ADMIN_LOOKUPFLW(current)] has been created by [ADMIN_LOOKUPFLW(creator)], an antagonist.") to_chat(current, "Despite your creators current allegiances, your true master remains [creator.real_name]. If their loyalties change, so do yours. This will never change unless your creator's body is destroyed.") -/datum/mind/proc/show_memory(mob/recipient, window=1) - if(!recipient) - recipient = current - var/output = "[current.real_name]'s Memories:
" +//ambition start +/datum/mind/proc/show_memory() + var/list/output = list("[current.real_name]'s Memories:
") +//ambition end output += memory @@ -404,16 +433,910 @@ output += "
  • Conspirator: [M.name]
  • " output += "" - if(window) - recipient << browse(output,"window=memory") - else if(all_objectives.len || memory) - to_chat(recipient, "[output]") +//ambition port start + if(LAZYLEN(ambitions)) + for(var/count in 1 to LAZYLEN(ambitions)) + output += "
    Ambition #[count]: [ambitions[count]]" + + if(!memory && !length(all_objectives) && !LAZYLEN(ambitions)) + output += "" + + return output.Join() + + +/datum/mind/proc/show_editable_objectives_and_ambitions() + var/is_admin = check_rights(R_ADMIN, FALSE) + var/self_mind = usr == current + if(!is_admin && !self_mind) + return "" + var/list/output = list() + for(var/a in antag_datums) + var/datum/antagonist/antag_datum = a + output += "Objectives:" + if(is_admin) + output += " Add Objective" + output += "" + if(is_admin) + output += "Announce objectives
    " + output += "
    Requested Objective Changes:" + if(self_mind) + output += " Request objective" + output += "
    " + else + for(var/uid in antag_datum.requested_objective_changes) + var/list/objectives_info = antag_datum.requested_objective_changes[uid] + var/obj_request = objectives_info["request"] + switch(obj_request) + if(REQUEST_NEW_OBJECTIVE) + var/datum/objective/type_cast_objective = objectives_info["target"] + var/objective_text = objectives_info["text"] + output += "
  • Request #[uid]: ADD [initial(type_cast_objective.name)] - [objective_text]" + if(self_mind) + output += " Cancel Request" + if(is_admin) + output += " Accept Edit Deny" + if(REQUEST_DEL_OBJECTIVE) + var/datum/objective/objective_ref = locate(objectives_info["target"]) in antag_datum.objectives + if(QDELETED(objective_ref)) + stack_trace("Objective request found with deleted reference. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") + antag_datum.remove_objective_change(uid) + continue + output += "
  • Request #[uid]: DEL [objective_ref.name] - [objective_ref.explanation_text] - [objectives_info["text"]]" + if(self_mind) + output += " Cancel Request" + if(is_admin) + output += " Accept Deny" + if(REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) + var/datum/objective/objective_ref = locate(objectives_info["target"]) in antag_datum.objectives + if(QDELETED(objective_ref)) + stack_trace("Objective request found with deleted reference. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") + antag_datum.remove_objective_change(uid) + continue + output += "
  • Request #[uid]: [obj_request == REQUEST_WIN_OBJECTIVE ? "WIN" : "LOSE"] [objective_ref.name] - [objective_ref.explanation_text] - [objectives_info["text"]]" + if(self_mind) + output += " Cancel Request" + if(is_admin) + output += " Accept Deny" + else + stack_trace("Objective request found with no request index. UID: [uid] | Antag: [antag_datum] | Mind: [src] | User: [usr]") + continue + output += "
    " + if(self_mind) + output += "Ping the admins
    " + if(is_admin) + output += "Clear ping cooldown
    " + output += "
    [current.real_name]'s Ambitions:" + if(LAZYLEN(ambitions) < CONFIG_GET(number/max_ambitions)) + output += " Add Ambition" + output += "
      " + if(!LAZYLEN(ambitions)) + output += "
    • NONE" + else + for(var/count in 1 to LAZYLEN(ambitions)) + output += "
    • Ambition #[count] (Edit) (Remove):
      [ambitions[count]]" + output += "

    (Refresh)" + return output.Join() + + +/mob/proc/edit_objectives_and_ambitions() + set name = "Objectives and Ambitions" + set category = "IC" + set desc = "View and edit your character's objectives and ambitions." + mind.do_edit_objectives_ambitions() + + +/datum/mind/proc/do_edit_objectives_ambitions() + var/datum/browser/popup = new(usr, "objectives and ambitions", "Objectives and Ambitions") + popup.set_content(show_editable_objectives_and_ambitions()) + popup.open() + + +GLOBAL_VAR_INIT(requested_objective_uid, 0) + + +GLOBAL_LIST(objective_player_choices) + +/proc/populate_objective_player_choices() + GLOB.objective_player_choices = list() + var/list/allowed_types = list( + /datum/objective/custom, + /datum/objective/assassinate/once, + /datum/objective/protect, + /datum/objective/escape, + /datum/objective/survive, + /datum/objective/martyr, + /datum/objective/steal, + /datum/objective/download, + ) + + for(var/t in allowed_types) + var/datum/objective/type_cast = t + GLOB.objective_player_choices[initial(type_cast.name)] = t + + +GLOBAL_LIST(objective_choices) + +/proc/populate_objective_choices() + GLOB.objective_choices = list() + var/list/allowed_types = list( + /datum/objective/custom, + /datum/objective/assassinate, + /datum/objective/assassinate/once, + /datum/objective/maroon, + /datum/objective/debrain, + /datum/objective/protect, + /datum/objective/destroy, + /datum/objective/hijack, + /datum/objective/escape, + /datum/objective/survive, + /datum/objective/martyr, + /datum/objective/steal, + /datum/objective/download, + /datum/objective/nuclear, + /datum/objective/absorb, + ) + + for(var/t in allowed_types) + var/datum/objective/type_cast = t + GLOB.objective_choices[initial(type_cast.name)] = t + + +/datum/mind/proc/on_objectives_request_cd_end(datum/source) + UnregisterSignal(src, list(COMSIG_CD_STOP(COOLDOWN_OBJ_ADMIN_PING), COMSIG_CD_RESET(COOLDOWN_OBJ_ADMIN_PING))) + if(!antag_datums) + return + to_chat(current, "You are now again able to ping the admins objective changes review requests.") + for(var/a in antag_datums) + var/datum/antagonist/antag_datum = a + if(!antag_datum.requested_objective_changes) + continue + to_chat(current, "You seem to have unanswered change requests. If there are online admins another gentle reminder might be in order.") + break +//ambition port end /datum/mind/Topic(href, href_list) +//ambition start + + if (href_list["refresh_obj_amb"]) + do_edit_objectives_ambitions() + return + + else if (href_list["add_ambition"]) + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + return + if(!antag_datums) + return + var/max_ambitions = CONFIG_GET(number/max_ambitions) + if(LAZYLEN(ambitions) >= max_ambitions) + to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") + do_edit_objectives_ambitions() + return + var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", "", MAX_AMBITION_LEN) + if(isnull(new_ambition)) + return + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + to_chat(usr, "The mind holder is no longer a living creature.") + return + if(!antag_datums) + to_chat(usr, "The mind holder is no longer an antagonist.") + return + if(LAZYLEN(ambitions) >= max_ambitions) + to_chat(usr, "There's a limit of [max_ambitions] ambitions. Edit or remove some to accomodate for your new additions.") + do_edit_objectives_ambitions() + return + TIMER_COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) + LAZYADD(ambitions, new_ambition) + if(usr == current) + log_game("[key_name(usr)] has created their ambition of index [LAZYLEN(ambitions)].\nNEW AMBITION:\n[new_ambition]") + else + log_game("[key_name(usr)] has created [key_name(current)]'s ambition of index [LAZYLEN(ambitions)].\nNEW AMBITION:\n[new_ambition]") + message_admins("[ADMIN_TPMONTY(usr)] has created [ADMIN_TPMONTY(current)]'s ambition of index [LAZYLEN(ambitions)].") + do_edit_objectives_ambitions() + return + + else if (href_list["edit_ambition"]) + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + return + if(!antag_datums) + return + var/ambition_index = text2num(href_list["edit_ambition"]) + if(!isnum(ambition_index) || ambition_index < 0 || ambition_index % 1) + log_admin_private("[key_name(usr)] attempted to edit their ambitions with and invalid ambition_index ([ambition_index]) at [AREACOORD(usr.loc)].") + message_admins("[ADMIN_TPMONTY(usr)] attempted to edit their ambitions with and invalid ambition_index ([ambition_index]). Possible HREF exploit.") + return + if(ambition_index > LAZYLEN(ambitions)) + return + var/old_ambition = ambitions[ambition_index] + var/new_ambition = stripped_multiline_input(usr, "Write new ambition", "Ambition", ambitions[ambition_index], MAX_AMBITION_LEN) + if(isnull(new_ambition)) + return + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + to_chat(usr, "The mind holder is no longer a living creature.") + return + if(!antag_datums) + to_chat(usr, "The mind holder is no longer an antagonist.") + return + if(ambition_index > LAZYLEN(ambitions)) + to_chat(usr, "The ambition we were editing was deleted before we finished. Aborting.") + do_edit_objectives_ambitions() + return + if(old_ambition != ambitions[ambition_index]) + to_chat(usr, "The ambition has changed since we started editing it. Aborting to prevent data loss.") + do_edit_objectives_ambitions() + return + TIMER_COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) + ambitions[ambition_index] = new_ambition + if(usr == current) + log_game("[key_name(usr)] has edited their ambition of index [ambition_index].\nOLD AMBITION:\n[old_ambition]\nNEW AMBITION:\n[new_ambition]") + else + log_game("[key_name(usr)] has edited [key_name(current)]'s ambition of index [ambition_index].\nOLD AMBITION:\n[old_ambition]\nNEW AMBITION:\n[new_ambition]") + message_admins("[ADMIN_TPMONTY(usr)] has edited [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") + do_edit_objectives_ambitions() + return + + else if (href_list["remove_ambition"]) + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + return + if(!antag_datums) + return + var/ambition_index = text2num(href_list["remove_ambition"]) + if(ambition_index > LAZYLEN(ambitions)) + do_edit_objectives_ambitions() + return + if(!isnum(ambition_index) || ambition_index < 0 || ambition_index % 1) + log_admin_private("[key_name(usr)] attempted to remove an ambition with and invalid ambition_index ([ambition_index]) at [AREACOORD(usr.loc)].") + message_admins("[ADMIN_TPMONTY(usr)] attempted to remove an ambition with and invalid ambition_index ([ambition_index]). Possible HREF exploit.") + return + var/old_ambition = ambitions[ambition_index] + if(alert(usr, "Are you sure you want to delete this ambition?", "Delete ambition", "Yes", "No") != "Yes") + return + if(!check_rights(R_ADMIN, FALSE)) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_AMBITION)) + to_chat(usr, "You must wait [AMBITION_COOLDOWN_TIME * 0.1] seconds between changes.") + return + if(!isliving(current)) + to_chat(usr, "The mind holder is no longer a living creature. The ambition we were deleting should no longer exist already.") + return + if(!antag_datums) + to_chat(usr, "The mind holder is no longer an antagonist. The ambition we were deleting should no longer exist already.") + return + if(ambition_index > LAZYLEN(ambitions)) + to_chat(usr, "The ambition we were deleting was deleted before we finished. No need to continue.") + do_edit_objectives_ambitions() + return + if(old_ambition != ambitions[ambition_index]) + to_chat(usr, "The ambition has changed since we started considering its deletion. Aborting to prevent conflicts.") + do_edit_objectives_ambitions() + return + TIMER_COOLDOWN_START(src, COOLDOWN_AMBITION, AMBITION_COOLDOWN_TIME) + LAZYCUT(ambitions, ambition_index, ambition_index + 1) + if(usr == current) + log_game("[key_name(usr)] has deleted their ambition of index [ambition_index].\nDELETED AMBITION:\n[old_ambition]") + else + log_game("[key_name(usr)] has deleted [key_name(current)]'s ambition of index [ambition_index].\nDELETED AMBITION:\n[old_ambition]") + message_admins("[ADMIN_TPMONTY(usr)] has deleted [ADMIN_TPMONTY(current)]'s ambition of index [ambition_index].") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_ping"]) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJ_ADMIN_PING)) + to_chat(usr, "You must wait [S_TIMER_COOLDOWN_TIMELEFT(src, COOLDOWN_OBJ_ADMIN_PING) * 0.1] seconds before your next admin ping.") + do_edit_objectives_ambitions() + return + if(!antag_datums) + return + var/pending_request = FALSE + for(var/a in antag_datums) + var/datum/antagonist/antag_datum = a + if(antag_datum.requested_objective_changes) + pending_request = TRUE + break + if(!pending_request) + to_chat(usr, "You have no pending requests to warn the admins about. Request changes for them to review before poking them.") + do_edit_objectives_ambitions() + return + var/justification = stripped_multiline_input(usr, + "Send a message to the admins requesting a review of your objective change requests.\ + There's a [ADMIN_PING_COOLDOWN_TIME * 0.1] seconds cooldown between requests, so try to think it through before sending it. Cancelling this does not trigger the cooldown.", + "Request Admin Review", max_length = MAX_MESSAGE_LEN) + if(isnull(justification)) + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJ_ADMIN_PING)) + to_chat(usr, "You must wait [S_TIMER_COOLDOWN_TIMELEFT(src, COOLDOWN_OBJ_ADMIN_PING) * 0.1] seconds before your next admin ping.") + do_edit_objectives_ambitions() + return + if(!antag_datums) + return + pending_request = FALSE + for(var/a in antag_datums) + var/datum/antagonist/antag_datum = a + if(antag_datum.requested_objective_changes) + pending_request = TRUE + break + if(!pending_request) + return + if(!length(GLOB.admins)) + to_chat(usr, "No admins currently connected, failed to notify them. Wait for one to connect before trying to ping them again.") + do_edit_objectives_ambitions() + return + S_TIMER_COOLDOWN_START(src, COOLDOWN_OBJ_ADMIN_PING, ADMIN_PING_COOLDOWN_TIME) + RegisterSignal(src, list(COMSIG_CD_STOP(COOLDOWN_OBJ_ADMIN_PING), COMSIG_CD_RESET(COOLDOWN_OBJ_ADMIN_PING)), .proc/on_objectives_request_cd_end) + log_admin("Objectives review request - [key_name(usr)] has requested a review of their objective changes, pinging the admins.") + for(var/a in GLOB.admins) + var/client/admin_client = a + if(admin_client.prefs.toggles & SOUND_ADMINHELP) + SEND_SOUND(admin_client, sound('sound/effects/adminhelp.ogg')) + window_flash(admin_client) + message_admins("[ADMIN_TPMONTY(usr)] has requested a review of their objective changes. (RPLY)") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_add"]) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + do_edit_objectives_ambitions() + return + var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(target_antag)) + to_chat(usr, "No antagonist found for this objective.") + do_edit_objectives_ambitions() + return + if(!GLOB.objective_player_choices) + populate_objective_player_choices() + var/choice = input("Select desired objective type:", "Objective type") as null|anything in GLOB.objective_player_choices + var/selected_type = GLOB.objective_player_choices[choice] + if(!selected_type) + return + var/new_objective = stripped_multiline_input(usr,\ + selected_type == /datum/objective/custom\ + ? "Write the custom objective you'd like to request the admins to grant you. Remember they can edit or deny your request at their own discretion."\ + : "Justify your request for a new objective to the admins. Add the required clarifations, if you have a specific targets in mind and the likes.",\ + "New Objective", max_length = MAX_MESSAGE_LEN) + if(isnull(new_objective)) + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME] minutes between request changes.") + return + if(QDELETED(target_antag)) + return + TIMER_COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) + var/uid = "[GLOB.requested_objective_uid++]" + target_antag.add_objective_change(uid, list("request" = REQUEST_NEW_OBJECTIVE, "target" = selected_type, "text" = new_objective)) + log_admin("Objectives request [uid] - [key_name(usr)] has requested a [choice] objective: [new_objective]") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_cancel"]) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(target_antag)) + to_chat(usr, "No antagonist found for this objective.") + do_edit_objectives_ambitions() + return + var/uid = href_list["req_obj_cancel"] + if(!LAZYACCESS(target_antag.requested_objective_changes, uid)) + to_chat(usr, "No requested objective change found. Perhaps it was deleted already?") + do_edit_objectives_ambitions() + return + if(alert(usr, "Are you sure you want to delete this change request?", "Delete change request", "Yes", "No") != "Yes") + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + if(QDELETED(target_antag)) + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(target_antag.requested_objective_changes, uid)) + do_edit_objectives_ambitions() + return + TIMER_COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) + log_admin("Objectives request deletion - [key_name(usr)] has deleted the objective change request of UID [uid].") + target_antag.remove_objective_change(uid) + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_delete"]) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(target_antag)) + to_chat(usr, "No antagonist found for this objective.") + do_edit_objectives_ambitions() + return + var/objective_reference = href_list["req_obj_delete"] + var/datum/objective/objective_to_delete = locate(objective_reference) in target_antag.objectives + if(!istype(objective_to_delete) || QDELETED(objective_to_delete)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + var/justification = stripped_multiline_input(usr, + "Justify your request for a deleting this objective to the admins.", + "Objective Deletion", max_length = MAX_MESSAGE_LEN) + if(isnull(justification)) + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + if(QDELETED(objective_to_delete) || QDELETED(target_antag)) + do_edit_objectives_ambitions() + return + var/matching_request = FALSE + for(var/index in target_antag.requested_objective_changes) + var/list/change_request = target_antag.requested_objective_changes[index] + if(change_request["target"] != objective_reference) + continue + matching_request = TRUE + break + if(matching_request) + if(alert(usr, "There is already a change request tied to this objective waiting to be processed. Adding this request will delete the old ones.", "Delete matching objective requests?", "Yes", "No") != "Yes") + do_edit_objectives_ambitions() + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + if(QDELETED(objective_to_delete) || QDELETED(target_antag)) + do_edit_objectives_ambitions() + return + for(var/index in target_antag.requested_objective_changes) + var/list/change_request = target_antag.requested_objective_changes[index] + if(change_request["target"] != objective_reference) + continue + target_antag.remove_objective_change(index) + TIMER_COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) + var/uid = "[GLOB.requested_objective_uid++]" + target_antag.add_objective_change(uid, list("request" = REQUEST_DEL_OBJECTIVE, "target" = objective_reference, "text" = justification)) + log_admin("Objectives request [uid] - [key_name(usr)] has requested the deletion of the following objective: [objective_to_delete.explanation_text].\nTheir justification is as follows: [justification]") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_completed"]) + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + var/datum/antagonist/target_antag = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(target_antag)) + to_chat(usr, "No antagonist found for this objective.") + do_edit_objectives_ambitions() + return + var/objective_reference = href_list["req_obj_completed"] + var/datum/objective/objective_to_complete = locate(objective_reference) in target_antag.objectives + if(!istype(objective_to_complete) || QDELETED(objective_to_complete)) + to_chat(usr, "No objective found. Perhaps it was deleted?") + do_edit_objectives_ambitions() + return + var/justification = stripped_multiline_input(usr, + "Justify to the admins your request to mark this objective as [objective_to_complete.completed ? "incomplete" : "completed"].", + "Objective [objective_to_complete.completed ? "Incompletion" : "Completion"]", max_length = MAX_MESSAGE_LEN) + if(isnull(justification)) + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + if(QDELETED(objective_to_complete) || QDELETED(target_antag)) + do_edit_objectives_ambitions() + return + var/matching_request = FALSE + for(var/index in target_antag.requested_objective_changes) + var/list/change_request = target_antag.requested_objective_changes[index] + if(change_request["target"] != objective_reference) + continue + matching_request = TRUE + break + if(matching_request) + if(alert(usr, "There is already a change request tied to this objective waiting to be processed. Adding this request will delete the old ones.", "Delete matching objective requests?", "Yes", "No") != "Yes") + return + if(usr != current) + return + if(TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJECTIVES)) + to_chat(usr, "You must wait [OBJECTIVES_COOLDOWN_TIME * 0.1] seconds between request changes.") + return + if(QDELETED(objective_to_complete) || QDELETED(target_antag)) + do_edit_objectives_ambitions() + return + for(var/index in target_antag.requested_objective_changes) + var/list/change_request = target_antag.requested_objective_changes[index] + if(change_request["target"] != objective_reference) + continue + target_antag.remove_objective_change(index) + TIMER_COOLDOWN_START(src, COOLDOWN_OBJECTIVES, OBJECTIVES_COOLDOWN_TIME) + var/uid = "[GLOB.requested_objective_uid++]" + target_antag.add_objective_change(uid, list("request" = (objective_to_complete.completed ? REQUEST_LOSE_OBJECTIVE : REQUEST_WIN_OBJECTIVE), "target" = objective_reference, "text" = justification)) + log_admin("Objectives request [uid] - [key_name(usr)] has requested the [objective_to_complete.completed ? "incompletion" : "completion"] of the following objective: [objective_to_complete.explanation_text].\nTheir justification is as follows: [justification]") + do_edit_objectives_ambitions() + return if(!check_rights(R_ADMIN)) return var/self_antagging = usr == current + if(href_list["edit_ambitions_panel"]) + do_edit_objectives_ambitions() + return + + else if(href_list["req_obj_ping_cd_clear"]) + if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJ_ADMIN_PING)) + to_chat(usr, "Mind is not under a cooldown.") + do_edit_objectives_ambitions() + return + if(alert(usr, "Are you sure you want reset this cooldown, letting the user ping the admins again?", "Clear ping cooldown", "Yes", "No") != "Yes") + do_edit_objectives_ambitions() + return + if(!check_rights(R_ADMIN)) + return + if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_OBJ_ADMIN_PING)) + do_edit_objectives_ambitions() + return + S_TIMER_COOLDOWN_RESET(src, COOLDOWN_OBJ_ADMIN_PING) + do_edit_objectives_ambitions() + return + + else if(href_list["refresh_antag_panel"]) + traitor_panel() + return + + else if (href_list["req_obj_edit"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_edit"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/uid = href_list["req_obj_id"] + var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) + if(!requested_obj_change) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid requested objective reference.") + return + if(requested_obj_change["request"] != REQUEST_NEW_OBJECTIVE) + do_edit_objectives_ambitions() + to_chat(usr, "This is not an editable request. How did you even got here?") + return + switch(alert(usr, "Do you want to edit the requested objective type or text?", "Edit requested objective", "Type", "Text", "Cancel")) + if("Type") + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + var/datum/objective/type_cast = requested_obj_change["target"] + var/selected_type = input("Select new requested objective type:", "Requested Objective type", initial(type_cast.name)) as null|anything in GLOB.objective_choices + selected_type = GLOB.objective_choices[selected_type] + if(!selected_type) + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + log_admin("[key_name(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_obj_change["target"]] to [selected_type]") + message_admins("[key_name_admin(usr)] has edited the requested objective type for [current], of UID [uid], from [requested_obj_change["target"]] to [selected_type]") + requested_obj_change["target"] = selected_type + if("Text") + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + var/new_text = stripped_multiline_input(usr, "Input new requested objective text", "Requested Objective Text", requested_obj_change["text"], MAX_MESSAGE_LEN) + if (isnull(new_text)) + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + log_admin("[key_name(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_obj_change["text"]] to [new_text]") + message_admins("[key_name_admin(usr)] has edited the requested objective text for [current], of UID [uid], from [requested_obj_change["text"]] to [new_text]") + requested_obj_change["text"] = new_text + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_accept"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_accept"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/uid = href_list["req_obj_id"] + var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) + if(!requested_obj_change) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid requested objective reference.") + return + + var/datum/objective/request_target + var/request_type = requested_obj_change["request"] + switch(request_type) + if(REQUEST_NEW_OBJECTIVE) + request_target = requested_obj_change["target"] + if(!ispath(request_target, /datum/objective)) + to_chat(usr, "Invalid requested objective target path.") + return + if(REQUEST_DEL_OBJECTIVE, REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) + request_target = locate(requested_obj_change["target"]) in antag_datum.objectives + if(QDELETED(request_target)) + to_chat(usr, "Invalid requested objective target reference.") + return + else + to_chat(usr, "Invalid request type.") + return + if(alert(usr, "Are you sure you want to approve this objective change?", "Approve objective change", "Yes", "No") != "Yes") + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + switch(request_type) //Last checks + if(REQUEST_NEW_OBJECTIVE) + if(!ispath(request_target, /datum/objective)) + stack_trace("Invalid target on objective change request: [request_target]") + do_edit_objectives_ambitions() + return + if(REQUEST_DEL_OBJECTIVE, REQUEST_WIN_OBJECTIVE, REQUEST_LOSE_OBJECTIVE) + if(QDELETED(request_target)) + to_chat(usr, "Invalid requested objective target reference.") + return + else + to_chat(usr, "Invalid request type.") + return + antag_datum.remove_objective_change(uid) + switch(request_type) //All is clear, let get things done. + if(REQUEST_NEW_OBJECTIVE) + request_target = new request_target() + request_target.owner = src + if(istype(request_target, /datum/objective/custom)) + request_target.explanation_text = requested_obj_change["text"] + else + request_target.admin_edit(usr) + antag_datum.objectives += request_target + message_admins("[key_name_admin(usr)] approved a requested objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved a requested objective from [current]: [request_target.explanation_text]") + if(REQUEST_DEL_OBJECTIVE) + message_admins("[key_name_admin(usr)] approved the request to delete an objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved the request to delete an objective from [current]: [request_target.explanation_text]") + qdel(request_target) + if(REQUEST_WIN_OBJECTIVE) + message_admins("[key_name_admin(usr)] approved the victory request for an objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved the victory request for an objective from [current]: [request_target.explanation_text]") + request_target.completed = TRUE + if(REQUEST_LOSE_OBJECTIVE) + message_admins("[key_name_admin(usr)] approved the defeat request for an objective from [current]: [request_target.explanation_text]") + log_admin("[key_name(usr)] approved the defeat request for an objective from [current]: [request_target.explanation_text]") + request_target.completed = FALSE + to_chat(current, "Your objective change request has been approved.") + do_edit_objectives_ambitions() + return + + else if (href_list["req_obj_deny"]) + var/datum/antagonist/antag_datum = locate(href_list["req_obj_deny"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/uid = href_list["req_obj_id"] + var/list/requested_obj_change = LAZYACCESS(antag_datum.requested_objective_changes, uid) + if(!requested_obj_change) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid requested objective change reference.") + return + var/justification = stripped_multiline_input(usr, "Justify why you are denying this objective request change.", "Deny", memory, MAX_MESSAGE_LEN) + if(isnull(justification)) + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(antag_datum)) + to_chat(usr, "No antag found.") + do_edit_objectives_ambitions() + return + if(!LAZYACCESS(antag_datum.requested_objective_changes, uid)) + to_chat(usr, "Invalid requested objective change reference.") + do_edit_objectives_ambitions() + return + var/datum/objective/type_cast = requested_obj_change["target"] + var/objective_name = initial(type_cast.name) + message_admins("[key_name_admin(usr)] denied a requested [objective_name] objective from [current]: [requested_obj_change["text"]]") + log_admin("[key_name(usr)] denied a requested [objective_name] objective from [current]: [requested_obj_change["text"]]") + to_chat(current, "Your objective request has been denied for the following reason: [justification]") + antag_datum.remove_objective_change(uid) + do_edit_objectives_ambitions() + return + + else if (href_list["obj_panel_complete_toggle"]) + var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/datum/objective/objective_to_toggle = locate(href_list["obj_panel_complete_toggle"]) in antag_datum.objectives + if(QDELETED(objective_to_toggle)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + if(objective_to_toggle.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid objective reference.") + return + objective_to_toggle.completed = !objective_to_toggle.completed + message_admins("[key_name_admin(usr)] toggled the win state for [current]'s objective: [objective_to_toggle.explanation_text]") + log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective_to_toggle.explanation_text]") + if(alert(usr, "Would you like to alert the player of the change?", "Deny objective", "Yes", "No") == "Yes") + to_chat(current, "[objective_to_toggle.completed ? "" : ""]Your objective status has changed!") + do_edit_objectives_ambitions() + return + + else if (href_list["obj_panel_delete"]) + var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/datum/objective/objective_to_delete = locate(href_list["obj_panel_delete"]) in antag_datum.objectives + if(QDELETED(objective_to_delete)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + if(objective_to_delete.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid objective reference.") + return + if(alert(usr, "Are you sure you want to delete this objective?", "Delete objective", "Yes", "No") != "Yes") + return + if(!check_rights(R_ADMIN)) + return + if(QDELETED(objective_to_delete)) + return + message_admins("[key_name_admin(usr)] removed an objective from [current]: [objective_to_delete.explanation_text]") + log_admin("[key_name(usr)] removed an objective from [current]: [objective_to_delete.explanation_text]") + qdel(objective_to_delete) + do_edit_objectives_ambitions() + return + + else if (href_list["obj_panel_edit"]) + var/datum/antagonist/antag_datum = locate(href_list["target_antag"]) in antag_datums + if(QDELETED(antag_datum)) + do_edit_objectives_ambitions() + to_chat(usr, "No antag found.") + return + if(antag_datum.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid antag reference.") + return + var/datum/objective/objective_to_edit = locate(href_list["obj_panel_edit"]) in antag_datum.objectives + if(QDELETED(objective_to_edit)) + to_chat(usr, "No objective found. Perhaps it was already deleted?") + do_edit_objectives_ambitions() + return + if(objective_to_edit.owner != src) + do_edit_objectives_ambitions() + to_chat(usr, "Invalid objective reference.") + return + var/explanation_before = objective_to_edit.explanation_text + objective_to_edit.admin_edit(usr) + if(QDELETED(objective_to_edit)) + return + message_admins("[key_name_admin(usr)] edited an objective from [current]:\ + Before: [explanation_before]\ + After: [objective_to_edit.explanation_text]") + log_admin("[key_name(usr)] edited an objective from [current]:\ + Before: [explanation_before]\ + After: [objective_to_edit.explanation_text]") + do_edit_objectives_ambitions() + return +//ambition end if(href_list["add_antag"]) add_antag_wrapper(text2path(href_list["add_antag"]),usr) @@ -474,38 +1397,16 @@ else target_antag = target - var/static/list/choices - if(!choices) - choices = list() +//ambition start + if(!GLOB.objective_choices) + populate_objective_choices() - var/list/allowed_types = list( - /datum/objective/assassinate, - /datum/objective/assassinate/once, - /datum/objective/maroon, - /datum/objective/debrain, - /datum/objective/protect, - /datum/objective/destroy, - /datum/objective/hijack, - /datum/objective/escape, - /datum/objective/survive, - /datum/objective/martyr, - /datum/objective/steal, - /datum/objective/download, - /datum/objective/nuclear, - /datum/objective/absorb, - /datum/objective/custom - ) + if(old_objective && GLOB.objective_choices[old_objective.name]) + def_value = old_objective.name - for(var/T in allowed_types) - var/datum/objective/X = T - choices[initial(X.name)] = T - - if(old_objective) - if(old_objective.name in choices) - def_value = old_objective.name - - var/selected_type = input("Select objective type:", "Objective type", def_value) as null|anything in choices - selected_type = choices[selected_type] + var/selected_type = input("Select objective type:", "Objective type", def_value) as null|anything in GLOB.objective_choices + selected_type = GLOB.objective_choices[selected_type] +//ambition end if (!selected_type) return @@ -533,6 +1434,12 @@ message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]") log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]") +//ambition start + if(href_list["ambition_panel"]) + do_edit_objectives_ambitions() + return +//ambition end + else if(href_list["traitor_class"]) var/static/list/choices if(!choices) @@ -617,6 +1524,11 @@ else if (href_list["obj_announce"]) announce_objectives() +//ambition start + if(href_list["ambition_panel"]) + do_edit_objectives_ambitions() + return +//ambition end //Something in here might have changed your mob if(self_antagging && (!usr || !usr.client) && current.client) @@ -820,3 +1732,7 @@ ..() mind.assigned_role = ROLE_PAI mind.special_role = "" + +//ambition start +#undef AMBITION_COOLDOWN_TIME +//ambition end diff --git a/code/datums/mutations/cluwne.dm b/code/datums/mutations/cluwne.dm index 59b7752372..45a78be27b 100644 --- a/code/datums/mutations/cluwne.dm +++ b/code/datums/mutations/cluwne.dm @@ -17,18 +17,18 @@ if(!istype(H.wear_mask, /obj/item/clothing/mask/gas/cluwne)) if(!H.dropItemToGround(H.wear_mask)) qdel(H.wear_mask) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/cluwne(H), SLOT_WEAR_MASK) + H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/cluwne(H), ITEM_SLOT_MASK) if(!istype(H.w_uniform, /obj/item/clothing/under/cluwne)) if(!H.dropItemToGround(H.w_uniform)) qdel(H.w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/under/cluwne(H), SLOT_W_UNIFORM) + H.equip_to_slot_or_del(new /obj/item/clothing/under/cluwne(H), ITEM_SLOT_ICLOTHING) if(!istype(H.shoes, /obj/item/clothing/shoes/clown_shoes/cluwne)) if(!H.dropItemToGround(H.shoes)) qdel(H.shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes/cluwne(H), SLOT_SHOES) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes/cluwne(H), ITEM_SLOT_FEET) - owner.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/white(owner), SLOT_GLOVES) // this is purely for cosmetic purposes incase they aren't wearing anything in that slot - owner.equip_to_slot_or_del(new /obj/item/storage/backpack/clown(owner), SLOT_BACK) // ditto + owner.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/white(owner), ITEM_SLOT_GLOVES) // this is purely for cosmetic purposes incase they aren't wearing anything in that slot + owner.equip_to_slot_or_del(new /obj/item/storage/backpack/clown(owner), ITEM_SLOT_BACK) // ditto /datum/mutation/human/cluwne/on_life(mob/living/carbon/human/owner) if((prob(15) && owner.IsUnconscious())) diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 082e4156c8..8f25ca8684 100755 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -163,42 +163,42 @@ //Start with uniform,suit,backpack for additional slots if(uniform) - H.equip_to_slot_or_del(new uniform(H), SLOT_W_UNIFORM, TRUE) + H.equip_to_slot_or_del(new uniform(H), ITEM_SLOT_ICLOTHING, TRUE) if(suit) - H.equip_to_slot_or_del(new suit(H), SLOT_WEAR_SUIT, TRUE) + H.equip_to_slot_or_del(new suit(H), ITEM_SLOT_OCLOTHING, TRUE) if(back) - H.equip_to_slot_or_del(new back(H), SLOT_BACK, TRUE) + H.equip_to_slot_or_del(new back(H), ITEM_SLOT_BACK, TRUE) if(belt) - H.equip_to_slot_or_del(new belt(H), SLOT_BELT, TRUE) + H.equip_to_slot_or_del(new belt(H), ITEM_SLOT_BELT, TRUE) if(gloves) - H.equip_to_slot_or_del(new gloves(H), SLOT_GLOVES, TRUE) + H.equip_to_slot_or_del(new gloves(H), ITEM_SLOT_GLOVES, TRUE) if(shoes) - H.equip_to_slot_or_del(new shoes(H), SLOT_SHOES, TRUE) + H.equip_to_slot_or_del(new shoes(H), ITEM_SLOT_FEET, TRUE) if(head) - H.equip_to_slot_or_del(new head(H), SLOT_HEAD, TRUE) + H.equip_to_slot_or_del(new head(H), ITEM_SLOT_HEAD, TRUE) if(mask) - H.equip_to_slot_or_del(new mask(H), SLOT_WEAR_MASK, TRUE) + H.equip_to_slot_or_del(new mask(H), ITEM_SLOT_MASK, TRUE) if(neck) - H.equip_to_slot_or_del(new neck(H), SLOT_NECK, TRUE) + H.equip_to_slot_or_del(new neck(H), ITEM_SLOT_NECK, TRUE) if(ears) - H.equip_to_slot_or_del(new ears(H), SLOT_EARS_LEFT, TRUE) //sandstorm edit + H.equip_to_slot_or_del(new ears(H), ITEM_SLOT_EARS_LEFT, TRUE) // Sandstorm edit if(glasses) - H.equip_to_slot_or_del(new glasses(H), SLOT_GLASSES, TRUE) + H.equip_to_slot_or_del(new glasses(H), ITEM_SLOT_EYES, TRUE) if(id) - H.equip_to_slot_or_del(new id(H), SLOT_WEAR_ID, TRUE) + H.equip_to_slot_or_del(new id(H), ITEM_SLOT_ID, TRUE) if(suit_store) - H.equip_to_slot_or_del(new suit_store(H), SLOT_S_STORE, TRUE) - //skyrat edit + H.equip_to_slot_or_del(new suit_store(H), ITEM_SLOT_SUITSTORE, TRUE) + // Sandstorm edit if(ears_extra) - H.equip_to_slot_or_del(new ears_extra(H), SLOT_EARS_RIGHT, TRUE) + H.equip_to_slot_or_del(new ears_extra(H), ITEM_SLOT_EARS_RIGHT, TRUE) if(underwear) - H.equip_to_slot_or_del(new underwear(H), SLOT_W_UNDERWEAR, TRUE) + H.equip_to_slot_or_del(new underwear(H), ITEM_SLOT_UNDERWEAR, TRUE) if(socks) - H.equip_to_slot_or_del(new socks(H), SLOT_W_SOCKS, TRUE) + H.equip_to_slot_or_del(new socks(H), ITEM_SLOT_SOCKS, TRUE) if(shirt) - H.equip_to_slot_or_del(new shirt(H), SLOT_W_SHIRT, TRUE) + H.equip_to_slot_or_del(new shirt(H), ITEM_SLOT_SHIRT, TRUE) if(wrists) - H.equip_to_slot_or_del(new wrists(H), SLOT_WRISTS, TRUE) + H.equip_to_slot_or_del(new wrists(H), ITEM_SLOT_WRISTS, TRUE) // if(accessory) @@ -215,9 +215,9 @@ if(!visualsOnly) // Items in pockets or backpack don't show up on mob's icon. if(l_pocket) - H.equip_to_slot_or_del(new l_pocket(H), SLOT_L_STORE, TRUE) + H.equip_to_slot_or_del(new l_pocket(H), ITEM_SLOT_LPOCKET, TRUE) if(r_pocket) - H.equip_to_slot_or_del(new r_pocket(H), SLOT_R_STORE, TRUE) + H.equip_to_slot_or_del(new r_pocket(H), ITEM_SLOT_RPOCKET, TRUE) if(box) if(!backpack_contents) @@ -231,7 +231,7 @@ if(!isnum(number))//Default to 1 number = 1 for(var/i in 1 to number) - H.equip_to_slot_or_del(new path(H), SLOT_IN_BACKPACK, TRUE) + H.equip_to_slot_or_del(new path(H), ITEM_SLOT_BACKPACK, TRUE) if(!H.head && toggle_helmet && istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit)) var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_suit diff --git a/code/datums/traits/_quirk.dm b/code/datums/traits/_quirk.dm index 22a851da1d..99fa6e73c5 100644 --- a/code/datums/traits/_quirk.dm +++ b/code/datums/traits/_quirk.dm @@ -129,7 +129,7 @@ Use this as a guideline var/mob/living/carbon/human/H = quirk_holder var/obj/item/clothing/glasses/regular/glasses = new(get_turf(H)) H.put_in_hands(glasses) - H.equip_to_slot(glasses, SLOT_GLASSES) + H.equip_to_slot(glasses, ITEM_SLOT_EYES) H.regenerate_icons() //This whole proc is called automatically diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index 23fd75f982..a0f62a32b8 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -108,10 +108,10 @@ var/mob/living/carbon/human/H = quirk_holder var/obj/item/choice_beacon/music/B = new(get_turf(H)) H.put_in_hands(B) - H.equip_to_slot_if_possible(B, SLOT_IN_BACKPACK) + H.equip_to_slot_if_possible(B, ITEM_SLOT_BACKPACK) var/obj/item/musicaltuner/musicaltuner = new(get_turf(H)) H.put_in_hands(musicaltuner) - H.equip_to_slot_if_possible(musicaltuner, SLOT_IN_BACKPACK) + H.equip_to_slot_if_possible(musicaltuner, ITEM_SLOT_BACKPACK) H.regenerate_icons() /datum/quirk/photographer @@ -127,7 +127,7 @@ var/mob/living/carbon/human/H = quirk_holder var/obj/item/camera/camera = new(get_turf(H)) H.put_in_hands(camera) - H.equip_to_slot(camera, SLOT_NECK) + H.equip_to_slot(camera, ITEM_SLOT_NECK) H.regenerate_icons() /datum/quirk/selfaware @@ -166,7 +166,7 @@ var/mob/living/carbon/human/H = quirk_holder var/obj/item/toy/crayon/spraycan/spraycan = new(get_turf(H)) H.put_in_hands(spraycan) - H.equip_to_slot(spraycan, SLOT_IN_BACKPACK) + H.equip_to_slot(spraycan, ITEM_SLOT_BACKPACK) H.regenerate_icons() /datum/quirk/voracious @@ -188,7 +188,7 @@ /datum/quirk/trandening/on_spawn() var/mob/living/carbon/human/H = quirk_holder var/obj/item/autosurgeon/gloweyes/gloweyes = new(get_turf(H)) - H.equip_to_slot(gloweyes, SLOT_IN_BACKPACK) + H.equip_to_slot(gloweyes, ITEM_SLOT_BACKPACK) H.regenerate_icons() /datum/quirk/bloodpressure diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 38007023b5..10f66fce0c 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -57,9 +57,9 @@ GLOBAL_LIST_EMPTY(family_heirlooms) heirloom = new heirloom_type(get_turf(quirk_holder)) GLOB.family_heirlooms += heirloom var/list/slots = list( - "in your left pocket" = SLOT_L_STORE, - "in your right pocket" = SLOT_R_STORE, - "in your backpack" = SLOT_IN_BACKPACK + "in your left pocket" = ITEM_SLOT_LPOCKET, + "in your right pocket" = ITEM_SLOT_RPOCKET, + "in your backpack" = ITEM_SLOT_BACKPACK ) where = H.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet" @@ -120,7 +120,7 @@ GLOBAL_LIST_EMPTY(family_heirlooms) /datum/quirk/nearsighted/on_spawn() var/mob/living/carbon/human/H = quirk_holder var/obj/item/clothing/glasses/regular/glasses = new(get_turf(H)) - if(!H.equip_to_slot_if_possible(glasses, SLOT_GLASSES)) + if(!H.equip_to_slot_if_possible(glasses, ITEM_SLOT_EYES)) H.put_in_hands(glasses) /datum/quirk/nyctophobia @@ -383,7 +383,7 @@ GLOBAL_LIST_EMPTY(family_heirlooms) /datum/quirk/blindness/on_spawn() var/mob/living/carbon/human/H = quirk_holder var/obj/item/clothing/glasses/sunglasses/blindfold/white/glasses = new(get_turf(H)) - if(!H.equip_to_slot_if_possible(glasses, SLOT_GLASSES, bypass_equip_delay_self = TRUE)) //if you can't put it on the user's eyes, put it in their hands, otherwise put it on their eyes eyes + if(!H.equip_to_slot_if_possible(glasses, ITEM_SLOT_EYES, bypass_equip_delay_self = TRUE)) //if you can't put it on the user's eyes, put it in their hands, otherwise put it on their eyes eyes H.put_in_hands(glasses) H.regenerate_icons() diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 36712ea6bb..6b2cdbd455 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -172,7 +172,7 @@ /datum/quirk/colorist/on_spawn() var/mob/living/carbon/human/H = quirk_holder var/obj/item/dyespray/spraycan = new(get_turf(quirk_holder)) - H.equip_to_slot(spraycan, SLOT_IN_BACKPACK) + H.equip_to_slot(spraycan, ITEM_SLOT_BACKPACK) H.regenerate_icons() /datum/quirk/colorist/post_add() diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 0d6108baf1..74d2f7ebc3 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,7 +1,7 @@ GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")) -GLOBAL_LIST_INIT(slots, list("head", "wear_mask", "back", "wear_suit", "w_uniform", "w_underwear", "w_socks", "w_shirt", "shoes", "belt", "gloves", "glasses", "ears", "ears_extra", "wear_id", "s_store")) //skyrat edit -GLOBAL_LIST_INIT(slot2slot, list("head" = SLOT_HEAD, "wear_mask" = SLOT_WEAR_MASK, "neck" = SLOT_NECK, "back" = SLOT_BACK, "wear_suit" = SLOT_WEAR_SUIT, "w_uniform" = SLOT_W_UNIFORM, "w_underwear" = SLOT_W_UNDERWEAR, "w_socks" = SLOT_W_SOCKS, "w_shirt" = SLOT_W_SHIRT, "ears_extra" = SLOT_EARS_RIGHT, "shoes" = SLOT_SHOES, "belt" = SLOT_BELT, "gloves" = SLOT_GLOVES, "glasses" = SLOT_GLASSES, "ears" = SLOT_EARS_LEFT, "wear_id" = SLOT_WEAR_ID, "s_store" = SLOT_S_STORE, "wrists" = SLOT_WRISTS)) //skyrat edit -GLOBAL_LIST_INIT(slot2type, list("head" = /obj/item/clothing/head/changeling, "wear_mask" = /obj/item/clothing/mask/changeling, "back" = /obj/item/changeling, "wear_suit" = /obj/item/clothing/suit/changeling, "w_uniform" = /obj/item/clothing/under/changeling, "shoes" = /obj/item/clothing/shoes/changeling, "belt" = /obj/item/changeling, "gloves" = /obj/item/clothing/gloves/changeling, "glasses" = /obj/item/clothing/glasses/changeling, "ears" = /obj/item/changeling, "wear_id" = /obj/item/changeling, "s_store" = /obj/item/changeling, "w_underwear" = /obj/item/changeling, "w_socks" = /obj/item/changeling, "w_shirt" = /obj/item/changeling, "ears_extra" = /obj/item/changeling, "wrists" = /obj/item/changeling)) //skyrat edit +GLOBAL_LIST_INIT(slots, list("head", "wear_mask", "back", "wear_suit", "w_uniform", "w_underwear", "w_socks", "w_shirt", "shoes", "belt", "gloves", "glasses", "ears", "ears_extra", "wear_id", "s_store")) // Sandstorm edit +GLOBAL_LIST_INIT(slot2slot, list("head" = ITEM_SLOT_HEAD, "wear_mask" = ITEM_SLOT_MASK, "neck" = ITEM_SLOT_NECK, "back" = ITEM_SLOT_BACK, "wear_suit" = ITEM_SLOT_OCLOTHING, "w_uniform" = ITEM_SLOT_ICLOTHING, "w_underwear" = ITEM_SLOT_UNDERWEAR, "w_socks" = ITEM_SLOT_SOCKS, "w_shirt" = ITEM_SLOT_SHIRT, "ears_extra" = ITEM_SLOT_EARS_RIGHT, "shoes" = ITEM_SLOT_FEET, "belt" = ITEM_SLOT_BELT, "gloves" = ITEM_SLOT_GLOVES, "glasses" = ITEM_SLOT_EYES, "ears" = ITEM_SLOT_EARS_LEFT, "wear_id" = ITEM_SLOT_ID, "s_store" = ITEM_SLOT_SUITSTORE, "wrists" = ITEM_SLOT_WRISTS)) // Sandstorm edit +GLOBAL_LIST_INIT(slot2type, list("head" = /obj/item/clothing/head/changeling, "wear_mask" = /obj/item/clothing/mask/changeling, "back" = /obj/item/changeling, "wear_suit" = /obj/item/clothing/suit/changeling, "w_uniform" = /obj/item/clothing/under/changeling, "shoes" = /obj/item/clothing/shoes/changeling, "belt" = /obj/item/changeling, "gloves" = /obj/item/clothing/gloves/changeling, "glasses" = /obj/item/clothing/glasses/changeling, "ears" = /obj/item/changeling, "wear_id" = /obj/item/changeling, "s_store" = /obj/item/changeling)) GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our this objective to all lings diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 08a8d69575..77371ad7bc 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -205,11 +205,11 @@ Credit where due: var/mob/living/carbon/human/L = M var/obj/item/clockwork/slab/S = new var/slot = "At your feet" - var/list/slots = list("In your left pocket" = SLOT_L_STORE, "In your right pocket" = SLOT_R_STORE, "In your backpack" = SLOT_IN_BACKPACK) + var/list/slots = list("In your left pocket" = ITEM_SLOT_LPOCKET, "In your right pocket" = ITEM_SLOT_RPOCKET, "In your backpack" = ITEM_SLOT_BACKPACK) if(ishuman(L)) var/mob/living/carbon/human/H = L var/obj/item/clockwork/replica_fabricator/F = new - if(H.equip_to_slot_or_del(F, SLOT_IN_BACKPACK)) + if(H.equip_to_slot_or_del(F, ITEM_SLOT_BACKPACK)) to_chat(H, "You have been equipped with a replica fabricator, an advanced tool that can convert objects like doors, tables or even coats into clockwork equivalents.") slot = H.equip_in_one_of_slots(S, slots) if(slot == "In your backpack") diff --git a/code/game/gamemodes/clown_ops/bananium_bomb.dm b/code/game/gamemodes/clown_ops/bananium_bomb.dm index 9ce9bff6ac..b276aeeb48 100644 --- a/code/game/gamemodes/clown_ops/bananium_bomb.dm +++ b/code/game/gamemodes/clown_ops/bananium_bomb.dm @@ -37,24 +37,24 @@ if(!H.w_uniform || H.dropItemToGround(H.w_uniform)) C = new /obj/item/clothing/under/rank/civilian/clown(H) ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) - H.equip_to_slot_or_del(C, SLOT_W_UNIFORM) + H.equip_to_slot_or_del(C, ITEM_SLOT_ICLOTHING) //skyrat edit if(!H.w_shirt || H.dropItemToGround(H.w_shirt)) C = new /obj/item/clothing/underwear/shirt/clown(H) ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) - H.equip_to_slot_or_del(C, SLOT_W_SHIRT) + H.equip_to_slot_or_del(C, ITEM_SLOT_SHIRT) // if(!H.shoes || H.dropItemToGround(H.shoes)) C = new /obj/item/clothing/shoes/clown_shoes(H) ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) - H.equip_to_slot_or_del(C, SLOT_SHOES) + H.equip_to_slot_or_del(C, ITEM_SLOT_FEET) if(!H.wear_mask || H.dropItemToGround(H.wear_mask)) C = new /obj/item/clothing/mask/gas/clown_hat(H) ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) - H.equip_to_slot_or_del(C, SLOT_WEAR_MASK) + H.equip_to_slot_or_del(C, ITEM_SLOT_MASK) H.dna.add_mutation(CLOWNMUT) H.dna.add_mutation(SMILE) diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index a27cb02ea8..081ffbbdc4 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -214,7 +214,7 @@ if(!istype(C.wear_mask, /obj/item/clothing/mask/gas/clown_hat) && !istype(C.wear_mask, /obj/item/clothing/mask/gas/mime)) if(!C.wear_mask || C.dropItemToGround(C.wear_mask)) var/obj/item/clothing/mask/fakemoustache/sticky/the_stash = new /obj/item/clothing/mask/fakemoustache/sticky() - C.equip_to_slot_or_del(the_stash, SLOT_WEAR_MASK, TRUE, TRUE, TRUE, TRUE) + C.equip_to_slot_or_del(the_stash, ITEM_SLOT_MASK, TRUE, TRUE, TRUE, TRUE) /obj/item/clothing/mask/fakemoustache/sticky var/unstick_time = 2 MINUTES @@ -226,7 +226,7 @@ /obj/item/clothing/mask/fakemoustache/sticky/equipped(mob/user, slot) . = ..() - if(slot == SLOT_WEAR_MASK) + if(slot == ITEM_SLOT_MASK) ADD_TRAIT(user, TRAIT_NO_INTERNALS, STICKY_MOUSTACHE_TRAIT) /obj/item/clothing/mask/fakemoustache/sticky/dropped(mob/user) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index a82abe9b3d..f7ccae24e4 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -154,7 +154,7 @@ if(tc) var/obj/item/U = new uplink_type(H, H.key, tc) - H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(U, ITEM_SLOT_BACKPACK) var/obj/item/implant/weapons_auth/W = new W.implant(H) @@ -170,7 +170,7 @@ mask = /obj/item/clothing/mask/gas/syndicate suit = /obj/item/clothing/suit/space/hardsuit/syndi r_pocket = /obj/item/tank/internals/emergency_oxygen/engi - internals_slot = SLOT_R_STORE + internals_slot = ITEM_SLOT_RPOCKET belt = /obj/item/storage/belt/military r_hand = /obj/item/gun/ballistic/automatic/shotgun/bulldog backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ @@ -186,7 +186,7 @@ suit = /obj/item/clothing/suit/space/syndicate/black/red head = /obj/item/clothing/head/helmet/space/syndicate/black/red r_pocket = /obj/item/tank/internals/emergency_oxygen/engi - internals_slot = SLOT_R_STORE + internals_slot = ITEM_SLOT_RPOCKET belt = /obj/item/storage/belt/military backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ /obj/item/tank/jetpack/oxygen/harness=1,\ diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 0358c3af2c..fd43b994e8 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -165,7 +165,7 @@ If not set, defaults to check_completion instead. Set it. It's used by cryo. if(receiver && receiver.current) if(ishuman(receiver.current)) var/mob/living/carbon/human/H = receiver.current - var/list/slots = list("backpack" = SLOT_IN_BACKPACK) + var/list/slots = list("backpack" = ITEM_SLOT_BACKPACK) for(var/eq_path in special_equipment) var/obj/O = new eq_path . += O @@ -1197,7 +1197,7 @@ GLOBAL_LIST_EMPTY(cult_contraband) I.forceMove(get_turf(owner)) if(ishuman(owner)) var/mob/living/carbon/human/H = owner - H.equip_in_one_of_slots(I, list("backpack" = SLOT_IN_BACKPACK), critical = TRUE) + H.equip_in_one_of_slots(I, list("backpack" = ITEM_SLOT_BACKPACK), critical = TRUE) hoarded_item = I diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index dc87322b57..ad286a52a7 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -52,23 +52,30 @@ /obj/machinery/limbgrower/ui_data(mob/user) var/list/data = list() - - for(var/datum/reagent/reagent_id in reagents.reagent_list) - var/list/reagent_data = list( - reagent_name = reagent_id.name, - reagent_amount = reagent_id.volume, - reagent_type = reagent_id.type - ) - data["reagents"] += list(reagent_data) - + if(reagents.reagent_list.len) + for(var/datum/reagent/reagent_id in reagents.reagent_list) + var/list/reagent_data = list( + reagent_name = reagent_id.name, + reagent_amount = reagent_id.volume, + reagent_type = reagent_id.type + ) + data["reagents"] += list(reagent_data) + else + data["reagents"] = list() data["total_reagents"] = reagents.total_volume data["max_reagents"] = reagents.maximum_volume data["busy"] = busy var/list/disk_data = list() disk_data["disk"] = dna_disk //Do i, the machine, have a disk? - disk_data["name"] = dna_disk?.fields["name"] //Name for the human saved if there is one + if(dna_disk) + if(dna_disk.fields["name"]) + disk_data["name"] = dna_disk.fields["name"] + else if(dna_disk.genetic_makeup_buffer["name"]) + disk_data["name"] = dna_disk.genetic_makeup_buffer["name"] + else + disk_data["name"] = "No name" + //Name for the human saved if there is one data["disk"] = disk_data - return data /obj/machinery/limbgrower/ui_static_data(mob/user) @@ -119,6 +126,18 @@ if (busy) to_chat(user, "\The [src] is busy. Please wait for completion of previous operation.") return + if(ispath(user_item.type, /obj/item/reagent_containers/blood) && user.a_intent != INTENT_HARM) + var/obj/item/reagent_containers/blood/B = user_item + if(!B.reagents.get_reagents()) + to_chat(user, "You can't fill [src] with an empty [B.name]!") + return + if(reagents.total_volume == reagents.maximum_volume) + to_chat(user, "\The [src] can't hold more blood!") + return + user.visible_message("[user] drains the [user_item] into [src] using the blood bag port on [src].", + "You drain the [user_item] into [src] using the blood bag port.") + B.reagents.trans_to(src, B.amount_per_transfer_from_this) + return if(default_deconstruction_screwdriver(user, "limbgrower_panelopen", "limbgrower_idleoff", user_item)) ui_close(user) @@ -180,7 +199,7 @@ for(var/reagent_id in consumed_reagents_list) consumed_reagents_list[reagent_id] *= production_coefficient if(!reagents.has_reagent(reagent_id, consumed_reagents_list[reagent_id])) - audible_message("\The [src] buzzes.") + audible_message("\The [src] buzzes and states \"INSUFFICENT REAGENTS\"") playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) return @@ -206,17 +225,13 @@ * modified_consumed_reagents_list - the list of reagents we will consume on build, modified by the production coefficient. */ /obj/machinery/limbgrower/proc/build_item(list/modified_consumed_reagents_list) - for(var/reagent_id in modified_consumed_reagents_list) - if(!reagents.has_reagent(reagent_id, modified_consumed_reagents_list[reagent_id])) - audible_message("\The [src] buzzes.") - playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) - break - - reagents.remove_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) - + reagent_usage(modified_consumed_reagents_list) var/built_typepath = being_built.build_path // If we have a bodypart, we need to initialize the limb on its own. Otherwise we can build it here. - if(ispath(built_typepath, /obj/item/bodypart)) + if(ispath(built_typepath, /mob/living/carbon/human/chestonly)) + if(!build_mob_chest(built_typepath, FALSE)) + reagent_usage(modified_consumed_reagents_list, FALSE) + else if(ispath(built_typepath, /obj/item/bodypart)) build_limb(built_typepath) else if(ispath(built_typepath, /obj/item/organ/genital)) //genitals are uhh... customizable build_genital(built_typepath) @@ -227,6 +242,25 @@ flick("limbgrower_unfill", src) icon_state = "limbgrower_idleoff" +/obj/machinery/limbgrower/proc/reagent_usage(modified_consumed_reagents_list, remove = TRUE) + // Apparently, having a boolean in a loop is worse than doing it twice + if(remove) + for(var/reagent_id in modified_consumed_reagents_list) + if(reagent_sanity_check(reagent_id, modified_consumed_reagents_list[reagent_id])) + reagents.remove_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) + else + for(var/reagent_id in modified_consumed_reagents_list) + if(reagent_sanity_check(reagent_id, modified_consumed_reagents_list[reagent_id])) + reagents.add_reagent(reagent_id, modified_consumed_reagents_list[reagent_id]) + + +/obj/machinery/limbgrower/proc/reagent_sanity_check(reagent_id, amount) + if(reagents.has_reagent(reagent_id, amount)) + return TRUE + audible_message("\The [src] buzzes, with a screen showing: INSUFFICENT REAGENTS") + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + return FALSE + /* * The process of putting together a limb. * This is called from after we remove the reagents, so this proc is just initializing the limb type. @@ -306,6 +340,53 @@ else new built_typepath(loc) +/obj/machinery/limbgrower/proc/build_mob_chest(built_typepath) + // Create a mob with a chest, but nothing else + if(!ispath(built_typepath, /mob/living/carbon/human/chestonly)) + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE) + visible_message(src, "Buzzes, an error screen appearing on its display.") + return FALSE + // Fields is from cloning, a much fuller scan, genetic_makeup_buffer is less so + var/dna_genetics = dna_disk?.genetic_makeup_buffer + var/dna_cloning = dna_disk?.fields + var/datum/species/selected = GLOB.species_datums[selected_category] + var/mob/living/carbon/human/chestonly/C = new(loc) + C.real_name = length(dna_genetics) ? dna_genetics["name"] : "Synthetic Humanoid #[rand(10000, 99999)]" + if(length(dna_cloning)) + C.hardset_dna(dna_cloning["UI"], dna_cloning["SE"], dna_cloning["name"], dna_cloning["blood_type"], dna_cloning["mrace"], dna_cloning["features"]) + else if(length(dna_genetics)) + C.hardset_dna(dna_genetics["UI"], null, dna_genetics["name"], dna_genetics["blood_type"]) + else + C.real_name = "Synthetic Humanoid #[rand(10000, 99999)]" + C.hair_style = "bald" + C.skin_tone = "albino" + C.set_species(selected) + C.set_resting(TRUE, TRUE) + // Don't want to cause it to deathgasp.. + C.stat = DEAD + C.adjustOxyLoss(200) + // Limb replacement causes toxloss, which can cause too much suffering for the doctor that I don't want + C.adjustCloneLoss(45) + C.med_hud_set_status() + C.med_hud_set_health() + C.underwear = "Nude" + C.undershirt = "Nude" + C.saved_underwear = "" + C.saved_undershirt = "" + + // Just enough to start reviving them, I hope + C.blood_volume = BLOOD_VOLUME_SURVIVE + // At some point, make a way to deal with species regenerate_organs + // Remove all the organs + for(var/organ in C.internal_organs) + var/obj/item/organ/O = organ + O.Remove(organ) + C.update_body(TRUE) + C.update_hair() + C.update_body_parts() + C.update_appearance() + return TRUE + /obj/machinery/limbgrower/RefreshParts() reagents.maximum_volume = 0 for(var/obj/item/reagent_containers/glass/our_beaker in component_parts) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 61f638fc69..529e01f2f5 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -351,7 +351,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb return if(anchored) return - if(loc == user && current_equipped_slot && current_equipped_slot != SLOT_HANDS) + if(loc == user && current_equipped_slot && current_equipped_slot != ITEM_SLOT_HANDS) if(current_equipped_slot in user.check_obscured_slots()) to_chat(user, "You are unable to unequip that while wearing other garments over it!") return FALSE @@ -416,7 +416,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb return if(anchored) return - if(loc == user && current_equipped_slot && current_equipped_slot != SLOT_HANDS) + if(loc == user && current_equipped_slot && current_equipped_slot != ITEM_SLOT_HANDS) if(current_equipped_slot in user.check_obscured_slots()) to_chat(user, "You are unable to unequip that while wearing other garments over it!") return FALSE @@ -568,7 +568,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb //sometimes we only want to grant the item's action if it's equipped in a specific slot. /obj/item/proc/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_IN_BACKPACK || slot == SLOT_LEGCUFFED) //these aren't true slots, so avoid granting actions there + if(slot == ITEM_SLOT_BACKPACK || slot == ITEM_SLOT_LEGCUFFED) //these aren't true slots, so avoid granting actions there return FALSE return TRUE @@ -829,7 +829,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb if(ismob(location)) var/mob/M = location var/success = FALSE - if(src == M.get_item_by_slot(SLOT_WEAR_MASK)) + if(src == M.get_item_by_slot(ITEM_SLOT_MASK)) success = TRUE if(success) location = get_turf(M) diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index 04838103f9..682ce18215 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -34,7 +34,7 @@ user.put_in_hands(PA) /obj/item/chrono_eraser/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_BACK) + if(slot == ITEM_SLOT_BACK) return 1 /obj/item/gun/energy/chrono_gun diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 702cbd8d56..8227097d8f 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -89,7 +89,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM ..() /obj/item/proc/help_light_cig(mob/living/M) - var/mask_item = M.get_item_by_slot(SLOT_WEAR_MASK) + var/mask_item = M.get_item_by_slot(ITEM_SLOT_MASK) if(istype(mask_item, /obj/item/clothing/mask/cigarette)) return mask_item @@ -130,7 +130,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM reagents.add_reagent_list(list_reagents) if(starts_lit) light() - AddComponent(/datum/component/knockoff,90,list(BODY_ZONE_PRECISE_MOUTH),list(SLOT_WEAR_MASK))//90% to knock off when wearing a mask + AddComponent(/datum/component/knockoff,90,list(BODY_ZONE_PRECISE_MOUTH),list(ITEM_SLOT_MASK))//90% to knock off when wearing a mask /obj/item/clothing/mask/cigarette/Destroy() STOP_PROCESSING(SSobj, src) @@ -819,7 +819,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/clothing/mask/vape/equipped(mob/user, slot) . = ..() - if(slot == SLOT_WEAR_MASK) + if(slot == ITEM_SLOT_MASK) if(!screw) to_chat(user, "You start puffing on the vape.") reagents.reagents_holder_flags &= ~(NO_REACT) @@ -830,7 +830,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/clothing/mask/vape/dropped(mob/user) . = ..() var/mob/living/carbon/C = user - if(C.get_item_by_slot(SLOT_WEAR_MASK) == src) + if(C.get_item_by_slot(ITEM_SLOT_MASK) == src) reagents.reagents_holder_flags |= NO_REACT STOP_PROCESSING(SSobj, src) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 0570de6bcf..476758efee 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -80,13 +80,13 @@ /obj/item/defibrillator/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(loc == user) if(slot_flags == ITEM_SLOT_BACK) - if(user.get_item_by_slot(SLOT_BACK) == src) + if(user.get_item_by_slot(ITEM_SLOT_BACK) == src) ui_action_click() else to_chat(user, "Put the defibrillator on your back first!") else if(slot_flags == ITEM_SLOT_BELT) - if(user.get_item_by_slot(SLOT_BELT) == src) + if(user.get_item_by_slot(ITEM_SLOT_BELT) == src) ui_action_click() else to_chat(user, "Strap the defibrillator's belt on first!") @@ -182,7 +182,7 @@ /obj/item/defibrillator/equipped(mob/user, slot) ..() - if((slot_flags == ITEM_SLOT_BACK && slot != SLOT_BACK) || (slot_flags == ITEM_SLOT_BELT && slot != SLOT_BELT)) + if((slot_flags == ITEM_SLOT_BACK && slot != ITEM_SLOT_BACK) || (slot_flags == ITEM_SLOT_BELT && slot != ITEM_SLOT_BELT)) remove_paddles(user) update_power() diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 2339e88a76..1a130998b6 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -369,6 +369,10 @@ GLOBAL_LIST_EMPTY(PDAs) dat += "
  • [PDAIMG(rdoor)]Toggle Remote Door
  • " if (cartridge.access & CART_DRONEPHONE) dat += "
  • [PDAIMG(dronephone)]Drone Phone
  • " + if (cartridge.access & CART_BARTENDER) + dat += "
  • [PDAIMG(bucket)]Drink Recipe Browser
  • " + if (cartridge.access & CART_CHEMISTRY) + dat += "
  • [PDAIMG(bucket)]Chemistry Recipe Browser
  • " dat += "
  • [PDAIMG(atmos)]Atmospheric Scan
  • " dat += "
  • [PDAIMG(flashlight)][fon ? "Disable" : "Enable"] Flashlight
  • " if (pai) @@ -705,6 +709,16 @@ GLOBAL_LIST_EMPTY(PDAs) if(T) pai.forceMove(T) +//DRINK RECIPE BROWSER============================= + if("Drink Recipe Browser") + if(cartridge && cartridge.access & CART_BARTENDER) + recipe_search(U, GLOB.drink_reactions_list) + +//CHEMISTRY RECIPE BROWSER + if("Chemistry Recipe Browser") + if(cartridge && cartridge.access & CART_CHEMISTRY) + recipe_search(U, GLOB.normalized_chemical_reactions_list) + //LINK FUNCTIONS=================================== else//Cartridge menu linking diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm index 23ebaec3c2..8fcd97c261 100644 --- a/code/game/objects/items/devices/PDA/PDA_types.dm +++ b/code/game/objects/items/devices/PDA/PDA_types.dm @@ -222,6 +222,7 @@ /obj/item/pda/bar name = "bartender PDA" icon_state = "pda-bartender" + default_cartridge = /obj/item/cartridge/bartender inserted_item = /obj/item/pen/fountain /obj/item/pda/atmos diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 4ca0b86bc0..ca72e3371b 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -13,6 +13,8 @@ #define CART_QUARTERMASTER (1<<12) #define CART_HYDROPONICS (1<<13) #define CART_DRONEPHONE (1<<14) +#define CART_BARTENDER (1<<15) +#define CART_CHEMISTRY (1<<16) /obj/item/cartridge @@ -77,7 +79,7 @@ /obj/item/cartridge/chemistry name = "\improper ChemWhiz cartridge" icon_state = "cart-chem" - access = CART_REAGENT_SCANNER + access = CART_REAGENT_SCANNER | CART_CHEMISTRY bot_access_flags = MED_BOT /obj/item/cartridge/security @@ -190,6 +192,12 @@ bot_access_flags = SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT spam_enabled = 1 +/obj/item/cartridge/bartender + name = "\improper B.O.O.Z.E cartridge" + desc = "Now with 12% alcohol!" + icon_state = "cart-bar" + access = CART_BARTENDER + /obj/item/cartridge/captain/New() ..() radio = new(src) diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index 365446bad9..a3de2d822f 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -19,7 +19,7 @@ /obj/item/megaphone/equipped(mob/M, slot) . = ..() - if (slot == SLOT_HANDS) + if (slot == ITEM_SLOT_HANDS) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) else UnregisterSignal(M, COMSIG_MOB_SAY) diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index c51edc8106..2c55bbf8e4 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -156,7 +156,7 @@ category = list("hacked", "Misc") /obj/item/electropack/shockcollar/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - if(loc == user && user.get_item_by_slot(SLOT_NECK)) + if(loc == user && user.get_item_by_slot(ITEM_SLOT_NECK)) to_chat(user, "The collar is fastened tight! You'll need help taking this off!") return return ..() @@ -167,7 +167,7 @@ if(isliving(loc) && on) //the "on" arg is currently useless var/mob/living/L = loc - if(!L.get_item_by_slot(SLOT_NECK)) //**properly** stops pocket shockers + if(!L.get_item_by_slot(ITEM_SLOT_NECK)) //**properly** stops pocket shockers return if(shock_cooldown == TRUE) return diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index dad6adb3c4..d3f932eddc 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -56,7 +56,7 @@ GLOBAL_LIST_INIT(channel_tokens, list( /obj/item/radio/headset/ComponentInitialize() . = ..() if (bowman) - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS_LEFT, SLOT_EARS_RIGHT)) //skyrat edit + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT)) /obj/item/radio/headset/Initialize() . = ..() @@ -377,4 +377,4 @@ GLOBAL_LIST_INIT(channel_tokens, list( name = replacetext(name,"headset", "bowman headset") desc = "[desc] Protects ears from flashbangs." bowman = TRUE - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS_LEFT, SLOT_EARS_RIGHT)) //skyrat edit + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT)) diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm index de7e3d2812..810f2150e6 100644 --- a/code/game/objects/items/devices/reverse_bear_trap.dm +++ b/code/game/objects/items/devices/reverse_bear_trap.dm @@ -48,7 +48,7 @@ /obj/item/reverse_bear_trap/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) if(iscarbon(user)) var/mob/living/carbon/C = user - if(C.get_item_by_slot(SLOT_HEAD) == src) + if(C.get_item_by_slot(ITEM_SLOT_HEAD) == src) if(HAS_TRAIT_FROM(src, TRAIT_NODROP, REVERSE_BEAR_TRAP_TRAIT) && !struggling) struggling = TRUE var/fear_string @@ -82,26 +82,26 @@ ..() /obj/item/reverse_bear_trap/attack(mob/living/target, mob/living/user) - if(target.get_item_by_slot(SLOT_HEAD)) + if(target.get_item_by_slot(ITEM_SLOT_HEAD)) to_chat(user, "Remove [target.p_their()] headgear first!") return target.visible_message("[user] starts forcing [src] onto [target]'s head!", \ "[target] starts forcing [src] onto your head!", "You hear clanking.") to_chat(user, "You start forcing [src] onto [target]'s head...") - if(!do_after(user, 30, target = target) || target.get_item_by_slot(SLOT_HEAD)) + if(!do_after(user, 30, target = target) || target.get_item_by_slot(ITEM_SLOT_HEAD)) return target.visible_message("[user] forces and locks [src] onto [target]'s head!", \ "[target] locks [src] onto your head!", "You hear a click, and then a timer ticking down.") to_chat(user, "You force [src] onto [target]'s head and click the padlock shut.") user.dropItemToGround(src) - target.equip_to_slot_if_possible(src, SLOT_HEAD) + target.equip_to_slot_if_possible(src, ITEM_SLOT_HEAD) arm() notify_ghosts("[user] put a reverse bear trap on [target]!", source = src, action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/beep.ogg') /obj/item/reverse_bear_trap/proc/snap() reset() var/mob/living/carbon/human/H = loc - if(!istype(H) || H.get_item_by_slot(SLOT_HEAD) != src) + if(!istype(H) || H.get_item_by_slot(ITEM_SLOT_HEAD) != src) visible_message("[src]'s jaws snap open with an ear-piercing crack!") playsound(src, 'sound/effects/snap.ogg', 75, TRUE) else diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 0f7e75c882..f1e6da5747 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -434,7 +434,7 @@ GENETICS SCANNER if(R) blood_type = R.name - + if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_SAFE * C.blood_ratio) && (C.scan_blood_volume() + C.integrating_blood) > (BLOOD_VOLUME_OKAY*C.blood_ratio)) msg += "LOW [HAS_TRAIT(C, TRAIT_ROBOTIC_ORGANISM) ? "coolant" : "blood"] level [blood_percent] %, [C.scan_blood_volume()] cl[C.integrating_blood? ", with [integrated_blood_percent] % of it integrating, [C.integrating_blood] cl " : ""]. type: [blood_type]\n" else if((C.scan_blood_volume() + C.integrating_blood) <= (BLOOD_VOLUME_OKAY * C.blood_ratio)) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index ac79b3b887..11900d8e42 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -208,7 +208,7 @@ effective or pretty fucking useless. actions_types = list(/datum/action/item_action/toggle) /obj/item/shadowcloak/ui_action_click(mob/user) - if(user.get_item_by_slot(SLOT_BELT) == src) + if(user.get_item_by_slot(ITEM_SLOT_BELT) == src) if(!on) Activate(usr) else @@ -216,7 +216,7 @@ effective or pretty fucking useless. return /obj/item/shadowcloak/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_BELT) + if(slot == ITEM_SLOT_BELT) return 1 /obj/item/shadowcloak/proc/Activate(mob/living/carbon/human/user) @@ -238,11 +238,11 @@ effective or pretty fucking useless. /obj/item/shadowcloak/dropped(mob/user) ..() - if(user && user.get_item_by_slot(SLOT_BELT) != src) + if(user && user.get_item_by_slot(ITEM_SLOT_BELT) != src) Deactivate() /obj/item/shadowcloak/process() - if(user.get_item_by_slot(SLOT_BELT) != src) + if(user.get_item_by_slot(ITEM_SLOT_BELT) != src) Deactivate() return var/turf/T = get_turf(src) diff --git a/code/game/objects/items/fluff.dm b/code/game/objects/items/fluff.dm index 7105e57c30..0df8d5b447 100644 --- a/code/game/objects/items/fluff.dm +++ b/code/game/objects/items/fluff.dm @@ -6,7 +6,7 @@ // 1) Tennis balls, lines 39 - 99 // 2) Chew bones, lines 101 - 138 // 3) Frisbee, lines 140 - 166 -*/ +*/ /obj/item/toy/fluff name = "Fluff Item" diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index d1450c2685..c084b90d6f 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -336,7 +336,7 @@ var/obj/item/clothing/magichead = new /obj/item/clothing/mask/horsehead/cursed(user.drop_location()) if(!user.dropItemToGround(user.wear_mask)) qdel(user.wear_mask) - user.equip_to_slot_if_possible(magichead, SLOT_WEAR_MASK, TRUE, TRUE) + user.equip_to_slot_if_possible(magichead, ITEM_SLOT_MASK, TRUE, TRUE) qdel(src) else to_chat(user,"I say thee neigh") //It still lives here diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm index ddcd35f834..a5913c308d 100644 --- a/code/game/objects/items/inducer.dm +++ b/code/game/objects/items/inducer.dm @@ -188,7 +188,7 @@ icon_state = "inducer-combat" item_state = "inducer-combat" w_class = WEIGHT_CLASS_BULKY - slot_flags = SLOT_BELT + slot_flags = ITEM_SLOT_BELT desc = "A tool for inductively charging internal power cells. This one has been modified and upgraded to be able to charge into guns as well as normal electronics." cell_type = /obj/item/stock_parts/cell/hyper powertransfer = 1300 diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 6bb501807d..56ad6c2534 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -108,7 +108,7 @@ desc = "This little bugger can be used to store and transport ores." icon = 'icons/obj/mining.dmi' icon_state = "satchel" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS w_class = WEIGHT_CLASS_NORMAL component_type = /datum/component/storage/concrete/stack var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it @@ -400,7 +400,7 @@ icon = 'icons/obj/chemical.dmi' icon_state = "bag" desc = "A bag for storing pills, patches, and bottles." - slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_POCKETS resistance_flags = FLAMMABLE /obj/item/storage/bag/chemistry/ComponentInitialize() @@ -420,7 +420,7 @@ icon = 'icons/obj/chemical.dmi' icon_state = "biobag" desc = "A bag for the safe transportation and disposal of biowaste and other biological materials." - slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_BELT|ITEM_SLOT_POCKETS resistance_flags = FLAMMABLE /obj/item/storage/bag/bio/ComponentInitialize() @@ -451,7 +451,7 @@ desc = "A pouch for your ammo that goes in your pocket." icon = 'icons/obj/items_and_weapons.dmi' icon_state = "ammopouch" - slot_flags = ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_POCKETS w_class = WEIGHT_CLASS_BULKY resistance_flags = FLAMMABLE @@ -472,7 +472,7 @@ Bag for holding materials desc = "A pouch for sheets and RCD ammunition that manages to hang where you would normally put things in your pocket." icon = 'icons/obj/items_and_weapons.dmi' icon_state = "materialpouch" - slot_flags = ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_POCKETS w_class = WEIGHT_CLASS_BULKY resistance_flags = FLAMMABLE diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index 476f35fe4c..1a3b40d1da 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -73,7 +73,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", var/mob/living/carbon/human/H = usr H.dna.add_mutation(CLOWNMUT) H.dna.add_mutation(SMILE) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), SLOT_WEAR_MASK) + H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(H), ITEM_SLOT_MASK) GLOB.bible_icon_state = icon_state GLOB.bibleitemstates = item_state diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 9d48351852..48db846a43 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -248,10 +248,10 @@ return ..() var/obj/item/clothing/mask/cigarette/cig = locate(/obj/item/clothing/mask/cigarette) in contents if(cig) - if(!user.wear_mask && !(SLOT_WEAR_MASK in M.check_obscured_slots())) + if(!user.wear_mask && !(ITEM_SLOT_MASK in M.check_obscured_slots())) var/obj/item/clothing/mask/cigarette/W = cig SEND_SIGNAL(src, COMSIG_TRY_STORAGE_TAKE, W, M) - M.equip_to_slot_if_possible(W, SLOT_WEAR_MASK) + M.equip_to_slot_if_possible(W, ITEM_SLOT_MASK) contents -= W to_chat(user, "You take \a [W] out of the pack.") else diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index fffcd6dada..88131fb197 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -58,7 +58,7 @@ /obj/item/watertank/equipped(mob/user, slot) ..() - if(slot != SLOT_BACK) + if(slot != ITEM_SLOT_BACK) remove_noz() /obj/item/watertank/proc/remove_noz() @@ -348,14 +348,14 @@ toggle_injection() /obj/item/reagent_containers/chemtank/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_BACK) + if(slot == ITEM_SLOT_BACK) return 1 /obj/item/reagent_containers/chemtank/proc/toggle_injection() var/mob/living/carbon/human/user = usr if(!istype(user)) return - if (user.get_item_by_slot(SLOT_BACK) != src) + if (user.get_item_by_slot(ITEM_SLOT_BACK) != src) to_chat(user, "The chemtank needs to be on your back before you can activate it!") return if(on) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 3fd31941f3..b00d736282 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -1229,7 +1229,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/slapper/on_offered(mob/living/carbon/offerer) . = TRUE - + if(!(locate(/mob/living/carbon) in orange(1, offerer))) visible_message(span_danger("[offerer] raises [offerer.p_their()] arm, looking around for a high-five, but there's no one around!"), \ span_warning("You post up, looking for a high-five, but finding no one within range!"), null, 2) diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index 8d7da15761..5da3d079c2 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -153,8 +153,8 @@ continue if(iscarbon(L)) var/mob/living/carbon/C = L - var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT) - var/obj/item/clothing/H = C.get_item_by_slot(SLOT_HEAD) + var/obj/item/clothing/S = C.get_item_by_slot(ITEM_SLOT_OCLOTHING) + var/obj/item/clothing/H = C.get_item_by_slot(ITEM_SLOT_HEAD) if(S && H && S.clothing_flags & LAVAPROTECT && H.clothing_flags & LAVAPROTECT) return diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 08b62ef2f3..42611d2832 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -25,10 +25,9 @@ to_chat(usr, "You seem to be selecting a mob that doesn't exist anymore.", confidential = TRUE) return -//SKYRAT CHANGES BEGIN +//ambition start var/list/body = list("Options for [M.key]") -//SKYRAT CHANGES END - +//ambition end body += "Options panel for [M]" if(M.client) body += " played by [M.client] " @@ -128,6 +127,10 @@ body += "Subtle message | " // body += "Play sound to | " body += "Language Menu" +//ambition start + if(M.mind) + body += " | Objective-Ambition Menu" +//ambition end if (M.client) if(!isnewplayer(M)) @@ -209,12 +212,11 @@ body += "
    " body += "" -//SKYRAT CHANGES BEGIN +//ambition start var/datum/browser/popup = new(usr, "adminplayeropts-[REF(M)]", "Player Panel", nwidth = 550, nheight = 515) popup.set_content(body.Join()) popup.open() -//SKYRAT CHANGES END - +//ambition end SSblackbox.record_feedback("tally", "admin_verb", 1, "Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/playtimes.dm b/code/modules/admin/playtimes.dm new file mode 100644 index 0000000000..7cf24d9746 --- /dev/null +++ b/code/modules/admin/playtimes.dm @@ -0,0 +1,68 @@ +/datum/player_playtime/New(mob/viewer) + ui_interact(viewer) + +/datum/player_playtime/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PlayerPlaytimes", "Player Playtimes") + ui.open() + +/datum/player_playtime/ui_state(mob/user) + return GLOB.admin_state + +/datum/player_playtime/ui_data(mob/user) + var/list/data = list() + + var/list/clients = list() + for(var/client/C in GLOB.clients) + var/list/client = list() + + client["ckey"] = C.ckey + client["playtime"] = C.get_exp_living(TRUE) + client["playtime_hours"] = C.get_exp_living() + + var/mob/M = C.mob + client["observer"] = isobserver(M) + client["ingame"] = !isnewplayer(M) + client["name"] = M.real_name + var/nnpa = CONFIG_GET(number/notify_new_player_age) + if(nnpa >= 0) + if(C.account_age >= 0 && (C.account_age < CONFIG_GET(number/notify_new_player_age))) + client["new_account"] = "New BYOND account [C.account_age] day[(C.account_age==1?"":"s")] old, created on [C.account_join_date]" + + clients += list(client) + + clients = sortList(clients, /proc/cmp_playtime) + data["clients"] = clients + return data + +/datum/player_playtime/ui_act(action, params) + if(..()) + return + + switch(action) + if("view_playtime") + var/mob/target = get_mob_by_ckey(params["ckey"]) + usr.client.holder.cmd_show_exp_panel(target.client) + if("admin_pm") + usr.client.cmd_admin_pm(params["ckey"]) + if("player_panel") + var/mob/target = get_mob_by_ckey(params["ckey"]) + usr.client.holder.show_player_panel(target) + if("view_variables") + var/mob/target = get_mob_by_ckey(params["ckey"]) + usr.client.debug_variables(target) + if("observe") + if(!isobserver(usr) && !check_rights(R_ADMIN)) + return + + var/mob/target = get_mob_by_key(params["ckey"]) + if(!target) + to_chat(usr, "Player not found.") + return + + var/client/C = usr.client + if(!isobserver(usr) && !C.admin_ghost()) + return + var/mob/dead/observer/A = C.mob + A.ManualFollow(target) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 17bad60945..d134853494 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1686,8 +1686,8 @@ if(ishuman(L)) var/mob/living/carbon/human/observer = L - observer.equip_to_slot_or_del(new /obj/item/clothing/under/suit/black(observer), SLOT_W_UNIFORM) - observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(observer), SLOT_SHOES) + observer.equip_to_slot_or_del(new /obj/item/clothing/under/suit/black(observer), ITEM_SLOT_ICLOTHING) + observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(observer), ITEM_SLOT_FEET) L.Unconscious(100) sleep(5) L.forceMove(pick(GLOB.tdomeobserve)) @@ -2022,6 +2022,18 @@ var/mob/M = locate(href_list["HeadsetMessage"]) usr.client.admin_headset_message(M) +//ambition start + else if(href_list["ObjectiveRequest"]) + if(!check_rights(R_ADMIN)) + return + var/datum/mind/requesting_mind = locate(href_list["ObjectiveRequest"]) + if(!istype(requesting_mind) || QDELETED(requesting_mind)) + to_chat(usr, "This mind reference is no longer valid. It has probably since been destroyed.") + return + requesting_mind.do_edit_objectives_ambitions() + return +//ambition end + else if(href_list["reject_custom_name"]) if(!check_rights(R_ADMIN)) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index b0c553c0d9..602b5ce7a7 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -202,7 +202,7 @@ id.forceMove(W) W.update_icon() else - H.equip_to_slot(id,SLOT_WEAR_ID) + H.equip_to_slot(id,ITEM_SLOT_ID) else alert("Invalid mob") diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 1ae683ad07..c623380e4d 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1578,6 +1578,7 @@ Traitors and the like can also be revived with the previous role mostly intact. /client/proc/cmd_admin_check_player_exp() //Allows admins to determine who the newer players are. set category = "Admin" set name = "Player Playtime" + if(!check_rights(R_ADMIN)) return @@ -1585,12 +1586,7 @@ Traitors and the like can also be revived with the previous role mostly intact. to_chat(usr, "Tracking is disabled in the server configuration file.") return - var/list/msg = list() - msg += "Playtime ReportPlaytime:
    " - src << browse(msg.Join(), "window=Player_playtime_check") + new /datum/player_playtime(usr) /obj/effect/temp_visual/fireball icon = 'icons/obj/wizard.dmi' diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 2f7e160e6e..a1b1a1288e 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -50,6 +50,10 @@ GLOBAL_LIST_EMPTY(antagonists) var/show_name_in_check_antagonists = FALSE /// Should this antagonist be shown as antag to ghosts? Shouldn't be used for stealthy antagonists like traitors var/show_to_ghosts = FALSE +//ambition start + /// Lazy list for antagonists to request the admins objectives. + var/list/requested_objective_changes +//ambition end /* CIT SPECIFIC */ /// Quirks that will be removed upon gaining this antag. Pacifist and mute are default. @@ -78,7 +82,9 @@ GLOBAL_LIST_EMPTY(antagonists) if(!owner) stack_trace("Destroy()ing antagonist datum when it has no owner.") else - LAZYREMOVE(owner.antag_datums, src) +//ambition start + owner?.do_remove_antag_datum(src) +//ambition end owner = null return ..() @@ -230,7 +236,7 @@ GLOBAL_LIST_EMPTY(antagonists) remove_innate_effects() clear_antag_moodies() - LAZYREMOVE(owner.antag_datums, src) + owner.do_remove_antag_datum(src) // cit skill for(var/A in skill_modifiers) owner.remove_skill_modifier(GET_SKILL_MOD_ID(A, type)) @@ -524,3 +530,33 @@ GLOBAL_LIST_EMPTY(antagonists) /datum/action/antag_info/IsAvailable() return TRUE + +///Clears change requests from deleted objectives to avoid broken references. +/datum/antagonist/proc/clean_request_from_del_objective(datum/objective/source, force) + var/objective_reference = REF(source) + for(var/uid in requested_objective_changes) + var/list/change_request = requested_objective_changes[uid] + if(change_request["target"] != objective_reference) + continue + LAZYREMOVE(requested_objective_changes, uid) + + +/datum/antagonist/proc/add_objective_change(uid, list/additions) + LAZYADD(requested_objective_changes, uid) + var/datum/objective/request_target = additions["target"] + if(!ispath(request_target)) + request_target = locate(request_target) in objectives + if(istype(request_target)) + RegisterSignal(request_target, COMSIG_PARENT_QDELETING, .proc/clean_request_from_del_objective) + requested_objective_changes[uid] = additions + + +/datum/antagonist/proc/remove_objective_change(uid) + if(!LAZYACCESS(requested_objective_changes, uid)) + return + var/datum/objective/request_target = requested_objective_changes[uid]["target"] + if(!ispath(request_target)) + request_target = locate(request_target) in objectives + if(istype(request_target)) + UnregisterSignal(request_target, COMSIG_PARENT_QDELETING) + LAZYREMOVE(requested_objective_changes, uid) diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index 8484732d8d..011d175cfa 100644 --- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm +++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm @@ -62,7 +62,7 @@ A.UpdateButtonIcon() /obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to activate the vest if he's actually wearing it. + if(slot == ITEM_SLOT_OCLOTHING) //we only give the mob the ability to activate the vest if he's actually wearing it. return TRUE /obj/item/clothing/suit/armor/abductor/vest/proc/SetDisguise(datum/icon_snapshot/entry) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index 29e64a4913..c5f1cfbb40 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -84,7 +84,7 @@ return FALSE if(owner.current.reagents.has_reagent(/datum/reagent/consumable/garlic)) return FALSE - if(istype(owner.current.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) + if(istype(owner.current.get_item_by_slot(ITEM_SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) return FALSE owner.current.adjustStaminaLoss(-1.5 + (actual_regen * -7) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more. owner.current.adjustCloneLoss(-0.1 * (actual_regen * 2) * mult, 0) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm index 2fb7a2ccca..0a799021e9 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_powers.dm @@ -94,7 +94,7 @@ if(display_error) to_chat(owner, "You have a stake in your chest! Your powers are useless.") return FALSE - if(istype(owner.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) + if(istype(owner.get_item_by_slot(ITEM_SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) if(display_error) to_chat(owner, "") return FALSE diff --git a/code/modules/antagonists/bloodsucker/powers/brawn.dm b/code/modules/antagonists/bloodsucker/powers/brawn.dm index 5444cccd3f..db3ce92ec1 100644 --- a/code/modules/antagonists/bloodsucker/powers/brawn.dm +++ b/code/modules/antagonists/bloodsucker/powers/brawn.dm @@ -105,7 +105,7 @@ var/mob/living/carbon/user_C = owner //message_admins("DEBUG3: attempt_cast() [name] / [user_C.handcuffed] ") if(user_C.handcuffed) - var/obj/O = user_C.get_item_by_slot(SLOT_HANDCUFFED) + var/obj/O = user_C.get_item_by_slot(ITEM_SLOT_HANDCUFFED) if(istype(O)) user_C.clear_cuffs(O,TRUE) playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) @@ -124,7 +124,7 @@ return TRUE */ // Destroy Leg Cuffs if(user_C.legcuffed) - var/obj/O = user_C.get_item_by_slot(SLOT_LEGCUFFED) + var/obj/O = user_C.get_item_by_slot(ITEM_SLOT_LEGCUFFED) if(istype(O)) user_C.clear_cuffs(O,TRUE) playsound(get_turf(usr), 'sound/effects/grillehit.ogg', 80, 1, -1) diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index 5f4bec6581..a68b578f86 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -67,7 +67,9 @@ user.copy_languages(target, LANGUAGE_ABSORB) if(target.mind && user.mind)//if the victim and user have minds - target.mind.show_memory(user, 0) //I can read your mind, kekeke. Output all their notes. +//ambition start + to_chat(user, "[target.mind.show_memory()]") //I can read your mind, kekeke. Output all their notes. +//ambition end //Some of target's recent speech, so the changeling can attempt to imitate them better. //Recent as opposed to all because rounds tend to have a LOT of text. diff --git a/code/modules/antagonists/changeling/powers/biodegrade.dm b/code/modules/antagonists/changeling/powers/biodegrade.dm index 8b3b1659d1..b440228a4e 100644 --- a/code/modules/antagonists/changeling/powers/biodegrade.dm +++ b/code/modules/antagonists/changeling/powers/biodegrade.dm @@ -17,7 +17,7 @@ return FALSE if(user.handcuffed) - var/obj/O = user.get_item_by_slot(SLOT_HANDCUFFED) + var/obj/O = user.get_item_by_slot(ITEM_SLOT_HANDCUFFED) if(!istype(O)) return FALSE user.visible_message("[user] vomits a glob of acid on [user.p_their()] [O]!", \ @@ -27,7 +27,7 @@ used = TRUE if(user.legcuffed) - var/obj/O = user.get_item_by_slot(SLOT_LEGCUFFED) + var/obj/O = user.get_item_by_slot(ITEM_SLOT_LEGCUFFED) if(!istype(O)) return FALSE user.visible_message("[user] vomits a glob of acid on [user.p_their()] [O]!", \ @@ -37,7 +37,7 @@ used = TRUE if(user.wear_suit && user.wear_suit.breakouttime && !used) - var/obj/item/clothing/suit/S = user.get_item_by_slot(SLOT_WEAR_SUIT) + var/obj/item/clothing/suit/S = user.get_item_by_slot(ITEM_SLOT_OCLOTHING) if(!istype(S)) return FALSE user.visible_message("[user] vomits a glob of acid across the front of [user.p_their()] [S]!", \ diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index f4b74c5567..ec95ee4ef6 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -130,8 +130,8 @@ user.dropItemToGround(user.head) user.dropItemToGround(user.wear_suit) - user.equip_to_slot_if_possible(new suit_type(user), SLOT_WEAR_SUIT, 1, 1, 1) - user.equip_to_slot_if_possible(new helmet_type(user), SLOT_HEAD, 1, 1, 1) + user.equip_to_slot_if_possible(new suit_type(user), ITEM_SLOT_OCLOTHING, 1, 1, 1) + user.equip_to_slot_if_possible(new helmet_type(user), ITEM_SLOT_HEAD, 1, 1, 1) var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) changeling.chem_recharge_slowdown += recharge_slowdown @@ -637,7 +637,7 @@ user.dropItemToGround(user.gloves) - user.equip_to_slot_if_possible(new glove_type(user), SLOT_GLOVES, 1, 1, 1) + user.equip_to_slot_if_possible(new glove_type(user), ITEM_SLOT_GLOVES, 1, 1, 1) playsound(user, 'sound/effects/blobattack.ogg', 30, 1) var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) changeling.chem_recharge_slowdown += recharge_slowdown @@ -733,7 +733,7 @@ /obj/item/clothing/gloves/fingerless/pugilist/cling/equipped(mob/user, slot) . = ..() - if(current_equipped_slot == SLOT_GLOVES) + if(current_equipped_slot == ITEM_SLOT_GLOVES) to_chat(user, "With [src] formed around our arms, we are ready to fight.") /obj/item/clothing/gloves/fingerless/pugilist/cling/dropped(mob/user) diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm index ad507adcec..b5f2a358e6 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm @@ -38,7 +38,7 @@ /obj/item/clothing/head/helmet/clockwork/equipped(mob/living/user, slot) ..() - if(slot == SLOT_HEAD && !is_servant_of_ratvar(user)) + if(slot == ITEM_SLOT_HEAD && !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()] head!", "The helmet flickers off your head, leaving only nausea!") @@ -105,7 +105,7 @@ /obj/item/clothing/suit/armor/clockwork/equipped(mob/living/user, slot) ..() - if(slot == SLOT_WEAR_SUIT && !is_servant_of_ratvar(user)) + if(slot == ITEM_SLOT_OCLOTHING && !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 cuirass flickers off your body, leaving only nausea!") @@ -165,7 +165,7 @@ /obj/item/clothing/gloves/clockwork/equipped(mob/living/user, slot) ..() - if(slot == SLOT_GLOVES && !is_servant_of_ratvar(user)) + if(slot == ITEM_SLOT_GLOVES && !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()] arms!", "The gauntlets flicker off your arms, leaving only nausea!") @@ -215,7 +215,7 @@ /obj/item/clothing/shoes/clockwork/equipped(mob/living/user, slot) ..() - if(slot == SLOT_SHOES && !is_servant_of_ratvar(user)) + if(slot == ITEM_SLOT_FEET && !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()] feet!", "The treads flicker off your feet, leaving only nausea!") diff --git a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm index daee9f5c2c..9342cd8ea5 100644 --- a/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm +++ b/code/modules/antagonists/clockcult/clock_items/construct_chassis.dm @@ -117,4 +117,4 @@ S.no_cost = TRUE if(seasonal_hat && seasonal_hat != "none") var/obj/item/hat = new seasonal_hat(construct) - construct.equip_to_slot_or_del(hat, SLOT_HEAD) + construct.equip_to_slot_or_del(hat, ITEM_SLOT_HEAD) diff --git a/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm b/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm index e748da8765..138f04feb3 100644 --- a/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm +++ b/code/modules/antagonists/clockcult/clock_items/judicial_visor.dm @@ -28,13 +28,13 @@ return ..() /obj/item/clothing/glasses/judicial_visor/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot != SLOT_GLASSES) + if(slot != ITEM_SLOT_EYES) return 0 return ..() /obj/item/clothing/glasses/judicial_visor/equipped(mob/living/user, slot) ..() - if(slot != SLOT_GLASSES) + if(slot != ITEM_SLOT_EYES) update_status(FALSE) if(blaster.ranged_ability_user) blaster.remove_ranged_ability() @@ -55,13 +55,13 @@ addtimer(CALLBACK(src, .proc/check_on_mob, user), 1) //dropped is called before the item is out of the slot, so we need to check slightly later /obj/item/clothing/glasses/judicial_visor/proc/check_on_mob(mob/user) - if(user && src != user.get_item_by_slot(SLOT_GLASSES)) //if we happen to check and we AREN'T in the slot, we need to remove our shit from whoever we got dropped from + if(user && src != user.get_item_by_slot(ITEM_SLOT_EYES)) //if we happen to check and we AREN'T in the slot, we need to remove our shit from whoever we got dropped from update_status(FALSE) if(blaster.ranged_ability_user) blaster.remove_ranged_ability() /obj/item/clothing/glasses/judicial_visor/attack_self(mob/user) - if(is_servant_of_ratvar(user) && src == user.get_item_by_slot(SLOT_GLASSES)) + if(is_servant_of_ratvar(user) && src == user.get_item_by_slot(ITEM_SLOT_EYES)) blaster.toggle(user) /obj/item/clothing/glasses/judicial_visor/proc/update_status(change_to) @@ -89,7 +89,7 @@ if(!src) return 0 recharging = FALSE - if(user && src == user.get_item_by_slot(SLOT_GLASSES)) + if(user && src == user.get_item_by_slot(ITEM_SLOT_EYES)) to_chat(user, "Your [name] hums. It is ready.") else active = FALSE @@ -115,7 +115,7 @@ /obj/effect/proc_holder/judicial_visor/InterceptClickOn(mob/living/caller, params, atom/target) if(..()) return - if(ranged_ability_user.incapacitated() || !visor || visor != ranged_ability_user.get_item_by_slot(SLOT_GLASSES)) + if(ranged_ability_user.incapacitated() || !visor || visor != ranged_ability_user.get_item_by_slot(ITEM_SLOT_EYES)) remove_ranged_ability() return diff --git a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm index 5e25b8de82..837844d0cb 100644 --- a/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm +++ b/code/modules/antagonists/clockcult/clock_items/wraith_spectacles.dm @@ -75,7 +75,7 @@ /obj/item/clothing/glasses/wraith_spectacles/equipped(mob/living/user, slot) ..() - if(slot != SLOT_GLASSES || up) + if(slot != ITEM_SLOT_EYES || up) return if(HAS_TRAIT(user, TRAIT_BLIND)) to_chat(user, "\"You're blind, idiot. Stop embarrassing yourself.\"" ) diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm index 7ba4ce0936..be4785f4a7 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_scripts.dm @@ -200,18 +200,18 @@ /datum/action/innate/clockwork_armaments/Activate() var/do_message = 0 - var/obj/item/I = owner.get_item_by_slot(SLOT_WEAR_SUIT) + var/obj/item/I = owner.get_item_by_slot(ITEM_SLOT_OCLOTHING) if(remove_item_if_better(I, owner)) - do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/suit/armor/clockwork(null), SLOT_WEAR_SUIT) - I = owner.get_item_by_slot(SLOT_HEAD) + do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/suit/armor/clockwork(null), ITEM_SLOT_OCLOTHING) + I = owner.get_item_by_slot(ITEM_SLOT_HEAD) if(remove_item_if_better(I, owner)) - do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/head/helmet/clockwork(null), SLOT_HEAD) - I = owner.get_item_by_slot(SLOT_GLOVES) + do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/head/helmet/clockwork(null), ITEM_SLOT_HEAD) + I = owner.get_item_by_slot(ITEM_SLOT_GLOVES) if(remove_item_if_better(I, owner)) - do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/gloves/clockwork(null), SLOT_GLOVES) - I = owner.get_item_by_slot(SLOT_SHOES) + do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/gloves/clockwork(null), ITEM_SLOT_GLOVES) + I = owner.get_item_by_slot(ITEM_SLOT_FEET) if(remove_item_if_better(I, owner)) - do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/shoes/clockwork(null), SLOT_SHOES) + do_message += owner.equip_to_slot_or_del(new/obj/item/clothing/shoes/clockwork(null), ITEM_SLOT_FEET) if(do_message) owner.visible_message("Strange armor appears on [owner]!", "A bright shimmer runs down your body, equipping you with Ratvarian armor.") playsound(owner, 'sound/magic/clockwork/fellowship_armory.ogg', 15 * do_message, TRUE) //get sound loudness based on how much we equipped @@ -309,16 +309,16 @@ continue T = get_turf(M) var/heal_ticks = 0 //one heal tick for each piece of ratvarian armor worn - var/obj/item/I = H.get_item_by_slot(SLOT_WEAR_SUIT) + var/obj/item/I = H.get_item_by_slot(ITEM_SLOT_OCLOTHING) if(is_type_in_typecache(I, ratvarian_armor_typecache)) heal_ticks++ - I = H.get_item_by_slot(SLOT_HEAD) + I = H.get_item_by_slot(ITEM_SLOT_HEAD) if(is_type_in_typecache(I, ratvarian_armor_typecache)) heal_ticks++ - I = H.get_item_by_slot(SLOT_GLOVES) + I = H.get_item_by_slot(ITEM_SLOT_GLOVES) if(is_type_in_typecache(I, ratvarian_armor_typecache)) heal_ticks++ - I = H.get_item_by_slot(SLOT_SHOES) + I = H.get_item_by_slot(ITEM_SLOT_FEET) if(is_type_in_typecache(I, ratvarian_armor_typecache)) heal_ticks++ if(heal_ticks) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 8a51e4d17e..3373de9ff0 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -678,12 +678,12 @@ uses-- var/mob/living/carbon/C = target C.visible_message("Otherworldly armor suddenly appears on [C]!") - C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,SLOT_W_UNIFORM) - C.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), SLOT_HEAD) - C.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), SLOT_WEAR_SUIT) - C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), SLOT_SHOES) - C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), SLOT_BACK) - C.equip_to_slot_or_del(new /obj/item/clothing/gloves/fingerless/pugilist/hungryghost(user), SLOT_GLOVES) + C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,ITEM_SLOT_ICLOTHING) + C.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), ITEM_SLOT_HEAD) + C.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), ITEM_SLOT_OCLOTHING) + C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), ITEM_SLOT_FEET) + C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), ITEM_SLOT_BACK) + C.equip_to_slot_or_del(new /obj/item/clothing/gloves/fingerless/pugilist/hungryghost(user), ITEM_SLOT_GLOVES) if(C == user) qdel(src) //Clears the hands C.put_in_hands(new /obj/item/melee/cultblade(user)) diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index a18523069e..2850cb85cc 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -49,7 +49,10 @@ cult_team = new_team /datum/antagonist/cult/proc/add_objectives() - objectives |= cult_team?.objectives +//ambition start + if(cult_team) + objectives |= cult_team.objectives +//ambition end /datum/antagonist/cult/Destroy() QDEL_NULL(communion) @@ -95,9 +98,9 @@ /datum/antagonist/cult/proc/cult_give_item(obj/item/item_path, mob/living/carbon/human/mob) var/list/slots = list( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "backpack" = ITEM_SLOT_BACKPACK, + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/T = new item_path(mob) diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index 7981a10701..3b73a998e7 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -1090,7 +1090,7 @@ structure_check() searches for nearby cultist structures required for the invoca /proc/hudFix(mob/living/carbon/human/target) if(!target || !target.client) return - var/obj/O = target.get_item_by_slot(SLOT_GLASSES) + var/obj/O = target.get_item_by_slot(ITEM_SLOT_EYES) if(istype(O, /obj/item/clothing/glasses/hud/security)) var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] AH.add_hud_to(target) diff --git a/code/modules/antagonists/devil/devil.dm b/code/modules/antagonists/devil/devil.dm index 65ce89d33f..9f69f10887 100644 --- a/code/modules/antagonists/devil/devil.dm +++ b/code/modules/antagonists/devil/devil.dm @@ -460,10 +460,10 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", return -1 currentMob.change_mob_type( /mob/living/carbon/human, targetturf, null, 1) var/mob/living/carbon/human/H = owner.current - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/civilian/lawyer/black(H), SLOT_W_UNIFORM) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), SLOT_SHOES) - H.equip_to_slot_or_del(new /obj/item/storage/briefcase(H), SLOT_HANDS) - H.equip_to_slot_or_del(new /obj/item/pen(H), SLOT_L_STORE) + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/civilian/lawyer/black(H), ITEM_SLOT_ICLOTHING) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), ITEM_SLOT_FEET) + H.equip_to_slot_or_del(new /obj/item/storage/briefcase(H), ITEM_SLOT_HANDS) + H.equip_to_slot_or_del(new /obj/item/pen(H), ITEM_SLOT_LPOCKET) if(SOULVALUE >= BLOOD_THRESHOLD) H.set_species(/datum/species/lizard, 1) H.underwear = "Nude" diff --git a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm index fc0a5cdc6a..d7334d6c9c 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm @@ -72,9 +72,9 @@ /datum/antagonist/heretic/proc/ecult_give_item(obj/item/item_path, mob/living/carbon/human/H) var/list/slots = list( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "backpack" = ITEM_SLOT_BACKPACK, + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/T = new item_path(H) diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm index 28228aedd6..c0f3e2be7c 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm @@ -145,7 +145,7 @@ /obj/item/clothing/neck/eldritch_amulet/equipped(mob/user, slot) . = ..() - if(ishuman(user) && user.mind && slot == SLOT_NECK && (IS_HERETIC(user) || IS_HERETIC_MONSTER(user))) + if(ishuman(user) && user.mind && slot == ITEM_SLOT_NECK && (IS_HERETIC(user) || IS_HERETIC_MONSTER(user))) ADD_TRAIT(user, trait, CLOTHING_TRAIT) user.update_sight() @@ -239,7 +239,7 @@ /obj/item/clothing/mask/void_mask/equipped(mob/user, slot) . = ..() - if(ishuman(user) && user.mind && slot == SLOT_WEAR_MASK) + if(ishuman(user) && user.mind && slot == ITEM_SLOT_MASK) local_user = user START_PROCESSING(SSobj, src) diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 43a7e561c0..a8e57ee08b 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -234,8 +234,8 @@ var/obj/O = new C(owner.current) var/list/slots = list ( "backpack" = ITEM_SLOT_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/mob/living/carbon/human/H = owner.current var/equipped = H.equip_in_one_of_slots(O, slots) diff --git a/code/modules/antagonists/highlander/highlander.dm b/code/modules/antagonists/highlander/highlander.dm index 70d7fdd3fe..513a8d63b6 100644 --- a/code/modules/antagonists/highlander/highlander.dm +++ b/code/modules/antagonists/highlander/highlander.dm @@ -45,11 +45,11 @@ qdel(I) for(var/obj/item/I in H.held_items) qdel(I) - H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/kilt/highlander(H), SLOT_W_UNIFORM) - H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), SLOT_EARS_LEFT) //skyrat edit - H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), SLOT_HEAD) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), SLOT_SHOES) - H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), SLOT_L_STORE) + H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/kilt/highlander(H), ITEM_SLOT_ICLOTHING) + H.equip_to_slot_or_del(new /obj/item/radio/headset/heads/captain(H), ITEM_SLOT_EARS_LEFT) // Sandstorm edit + H.equip_to_slot_or_del(new /obj/item/clothing/head/beret/highlander(H), ITEM_SLOT_HEAD) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), ITEM_SLOT_FEET) + H.equip_to_slot_or_del(new /obj/item/pinpointer/nuke(H), ITEM_SLOT_LPOCKET) for(var/obj/item/pinpointer/nuke/P in H) P.attack_self(H) var/obj/item/card/id/W = new(H) @@ -60,7 +60,7 @@ W.registered_name = H.real_name ADD_TRAIT(W, TRAIT_NODROP, HIGHLANDER) W.update_label(H.real_name) - H.equip_to_slot_or_del(W, SLOT_WEAR_ID) + H.equip_to_slot_or_del(W, ITEM_SLOT_ID) sword = new(H) if(!GLOB.highlander) diff --git a/code/modules/antagonists/overthrow/overthrow.dm b/code/modules/antagonists/overthrow/overthrow.dm index f086f5db97..fffd8f9237 100644 --- a/code/modules/antagonists/overthrow/overthrow.dm +++ b/code/modules/antagonists/overthrow/overthrow.dm @@ -127,9 +127,9 @@ // Give AI hacking board var/obj/item/aiModule/core/full/overthrow/O = new(H) var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "backpack" = ITEM_SLOT_BACKPACK, + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/where = H.equip_in_one_of_slots(O, slots, critical = TRUE) if (!where) diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 925527f35e..e4625b4ef2 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -272,9 +272,9 @@ if(give_flash) var/obj/item/assembly/flash/T = new(H) var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "backpack" = ITEM_SLOT_BACKPACK, + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/where = H.equip_in_one_of_slots(T, slots, critical = TRUE) if (!where) diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 78403d4e27..f184961004 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -240,9 +240,9 @@ folder = new/obj/item/folder/syndicate/blue(mob.loc) var/list/slots = list ( - "backpack" = SLOT_IN_BACKPACK, - "left pocket" = SLOT_L_STORE, - "right pocket" = SLOT_R_STORE + "backpack" = ITEM_SLOT_BACKPACK, + "left pocket" = ITEM_SLOT_LPOCKET, + "right pocket" = ITEM_SLOT_RPOCKET ) var/where = "At your feet" diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 44f267358a..6f7ba374f7 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -229,12 +229,12 @@ H.dropItemToGround(I) 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/costume/roman(H), SLOT_W_UNIFORM) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), SLOT_SHOES) + H.equip_to_slot_or_del(new hat(H), ITEM_SLOT_HEAD) + H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), ITEM_SLOT_ICLOTHING) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), ITEM_SLOT_FEET) H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE) H.put_in_hands(new /obj/item/claymore(H), TRUE) - H.equip_to_slot_or_del(new /obj/item/spear(H), SLOT_BACK) + H.equip_to_slot_or_del(new /obj/item/spear(H), ITEM_SLOT_BACK) /obj/item/voodoo diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 88a2b82ab9..a99d83c1a3 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -208,17 +208,17 @@ if(!istype(master_mob) || !istype(H)) return if(master_mob.ears) - H.equip_to_slot_or_del(new master_mob.ears.type, SLOT_EARS_LEFT) //skyrat edit + H.equip_to_slot_or_del(new master_mob.ears.type, ITEM_SLOT_EARS_LEFT) // Sandstorm edit if(master_mob.w_uniform) - H.equip_to_slot_or_del(new master_mob.w_uniform.type, SLOT_W_UNIFORM) + H.equip_to_slot_or_del(new master_mob.w_uniform.type, ITEM_SLOT_ICLOTHING) if(master_mob.shoes) - H.equip_to_slot_or_del(new master_mob.shoes.type, SLOT_SHOES) + H.equip_to_slot_or_del(new master_mob.shoes.type, ITEM_SLOT_FEET) if(master_mob.wear_suit) - H.equip_to_slot_or_del(new master_mob.wear_suit.type, SLOT_WEAR_SUIT) + H.equip_to_slot_or_del(new master_mob.wear_suit.type, ITEM_SLOT_OCLOTHING) if(master_mob.head) - H.equip_to_slot_or_del(new master_mob.head.type, SLOT_HEAD) + H.equip_to_slot_or_del(new master_mob.head.type, ITEM_SLOT_HEAD) if(master_mob.back) - H.equip_to_slot_or_del(new master_mob.back.type, SLOT_BACK) + H.equip_to_slot_or_del(new master_mob.back.type, ITEM_SLOT_BACK) //Operation: Fuck off and scare people owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null)) diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index d32905e007..805f5b6e2e 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -534,7 +534,7 @@ no_drops += H.get_item_by_slot(ITEM_SLOT_GLOVES) no_drops += H.get_item_by_slot(ITEM_SLOT_FEET) no_drops += H.get_item_by_slot(ITEM_SLOT_ICLOTHING) - no_drops += H.get_item_by_slot(ITEM_SLOT_EARS) + no_drops += H.get_item_by_slot(ITEM_SLOT_EARS_LEFT) for(var/i in no_drops) var/obj/item/I = i ADD_TRAIT(I, TRAIT_NODROP, CAPTURE_THE_FLAG_TRAIT) diff --git a/code/modules/awaymissions/mission_code/jungleresort.dm b/code/modules/awaymissions/mission_code/jungleresort.dm index 6c82b2c0c4..f520cfdbee 100644 --- a/code/modules/awaymissions/mission_code/jungleresort.dm +++ b/code/modules/awaymissions/mission_code/jungleresort.dm @@ -27,7 +27,7 @@ /obj/item/clothing/head/rice_hat/cursed/equipped(mob/M, slot) . = ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) else UnregisterSignal(M, COMSIG_MOB_SAY) diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index 5d30ccd907..ba3f07bd7d 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -589,7 +589,7 @@ back = /obj/item/storage/backpack mask = /obj/item/clothing/mask/breath r_pocket = /obj/item/tank/internals/emergency_oxygen/engi - internals_slot = SLOT_R_STORE + internals_slot = ITEM_SLOT_RPOCKET /obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female mob_gender = FEMALE diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index dad5441fa7..45fad55f1a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -3391,10 +3391,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/occupied_slots = L[initial(G.category)] ? L[initial(G.category)] + 1 : 1 LAZYSET(L, initial(G.category), occupied_slots) switch(slot) - if(SLOT_IN_BACKPACK) + if(ITEM_SLOT_BACKPACK) if(L[LOADOUT_CATEGORY_BACKPACK] < BACKPACK_SLOT_AMT) return TRUE - if(SLOT_HANDS) + if(ITEM_SLOT_HANDS) if(L[LOADOUT_CATEGORY_HANDS] < HANDS_SLOT_AMT) return TRUE else diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 008772663d..697afd4885 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -63,8 +63,8 @@ // it's TRAIT_NODROP D.dropItemToGround(target, TRUE) qdel(old_headgear) - // where is `SLOT_HEAD` defined? WHO KNOWS - D.equip_to_slot(new_headgear, SLOT_HEAD) + // where is `ITEM_SLOT_HEAD` defined? WHO KNOWS + D.equip_to_slot(new_headgear, ITEM_SLOT_HEAD) return 1 diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1a7c220550..572cce28b2 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -219,7 +219,7 @@ ..() if (!istype(user)) return - if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item? + if(slot_flags & slot) //Was equipped to a valid slot for this item? if(iscarbon(user) && LAZYLEN(zones_disabled)) RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/bristle) if(LAZYLEN(user_vars_to_edit)) @@ -450,7 +450,7 @@ BLIND // can't see anything return FALSE // Skip species restriction checks on non-equipment slots - if(slot in list(SLOT_IN_BACKPACK, SLOT_L_STORE, SLOT_R_STORE)) + if(slot in list(ITEM_SLOT_BACKPACK, ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET)) return TRUE if(species_restricted && ishuman(M)) diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index cc36d2b02e..2e9cd678c6 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -20,7 +20,7 @@ /obj/item/clothing/ears/earmuffs/ComponentInitialize() . = ..() AddElement(/datum/element/earhealing) - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS_LEFT, SLOT_EARS_RIGHT)) //skyrat edit + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT)) /obj/item/clothing/ears/headphones name = "headphones" diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 737bbbb522..9726ab6b59 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -115,7 +115,7 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) /obj/item/clothing/glasses/science/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_GLASSES) + if(slot == ITEM_SLOT_EYES) return 1 /obj/item/clothing/glasses/night @@ -158,7 +158,7 @@ /obj/item/clothing/glasses/eyepatch/syndicate/equipped(mob/living/carbon/human/user, slot) . = ..() - if(slot == SLOT_GLASSES) + if(slot == ITEM_SLOT_EYES) user.visible_message("Circuitry from the eyepatch links itself to your brain as you put on the eyepatch.") if(HAS_TRAIT(user, TRAIT_POOR_AIM)) user.visible_message("You hear a fizzing noise from the circuit. That can't be good.") @@ -351,7 +351,7 @@ /obj/item/clothing/glasses/sunglasses/blindfold/equipped(mob/living/carbon/human/user, slot) . = ..() - if(slot == SLOT_GLASSES) + if(slot == ITEM_SLOT_EYES) user.become_blind("blindfold_[REF(src)]") /obj/item/clothing/glasses/sunglasses/blindfold/dropped(mob/living/carbon/human/user) @@ -372,7 +372,7 @@ var/colored_before = FALSE /obj/item/clothing/glasses/sunglasses/blindfold/white/equipped(mob/living/carbon/human/user, slot) - if(ishuman(user) && slot == SLOT_GLASSES) + if(ishuman(user) && slot == ITEM_SLOT_EYES) update_icon(user) user.update_inv_glasses() //Color might have been changed by update_icon. ..() diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index cad91315a3..c848dbdfa8 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -18,7 +18,7 @@ /obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot) ..() - if(hud_type && slot == SLOT_GLASSES) + if(hud_type && slot == ITEM_SLOT_EYES) var/datum/atom_hud/H = GLOB.huds[hud_type] H.add_hud_to(user) diff --git a/code/modules/clothing/glasses/phantomthief.dm b/code/modules/clothing/glasses/phantomthief.dm index ba3ea2830e..db77f17218 100644 --- a/code/modules/clothing/glasses/phantomthief.dm +++ b/code/modules/clothing/glasses/phantomthief.dm @@ -17,7 +17,7 @@ /obj/item/clothing/glasses/phantomthief/syndicate/examine(mob/user) . = ..() - if(user.get_item_by_slot(SLOT_GLASSES) == src) + if(user.get_item_by_slot(ITEM_SLOT_EYES) == src) if(world.time >= nextadrenalinepop) . += "The built-in adrenaline injector is ready for use." else @@ -33,7 +33,7 @@ . = ..() if(!istype(user)) return - if(slot != SLOT_GLASSES) + if(slot != ITEM_SLOT_EYES) return RegisterSignal(user, COMSIG_LIVING_COMBAT_ENABLED, .proc/injectadrenaline) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 836b845faa..1e3f2c08cf 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -31,7 +31,7 @@ C.visible_message("[U] sprays glittery rubber on the hands of [C]!") else user.visible_message("The rubber fails to stick to [C]'s hands!", - "The rubber fails to stick to [C]'s [(SLOT_GLOVES in C.check_obscured_slots()) ? "unexposed" : ""] hands!") + "The rubber fails to stick to [C]'s [(ITEM_SLOT_GLOVES in C.check_obscured_slots()) ? "unexposed" : ""] hands!") qdel(src) @@ -226,7 +226,7 @@ /obj/item/clothing/gloves/color/latex/equipped(mob/user, slot) ..() - if(slot == SLOT_GLOVES) + if(slot == ITEM_SLOT_GLOVES) ADD_TRAIT(user, carrytrait, GLOVE_TRAIT) /obj/item/clothing/gloves/color/latex/dropped(mob/user) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 225ef867b0..4eee7cef02 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -9,6 +9,8 @@ equip_delay_other = 20 cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT strip_mod = 0.9 custom_price = PRICE_ALMOST_CHEAP @@ -36,7 +38,7 @@ /obj/item/clothing/gloves/fingerless/pugilist/equipped(mob/user, slot) . = ..() - if(slot == SLOT_GLOVES) + if(slot == ITEM_SLOT_GLOVES) wornonce = TRUE if((HAS_TRAIT(user, TRAIT_NOPUGILIST))) to_chat(user, "What purpose is there to don the weapons of pugilism if you're already well-practiced in martial arts? Mixing arts is blasphemous!") @@ -195,7 +197,7 @@ /obj/item/clothing/gloves/fingerless/ablative/equipped(mob/user, slot) . = ..() - if(current_equipped_slot == SLOT_GLOVES) + if(current_equipped_slot == ITEM_SLOT_GLOVES) RegisterSignal(user, COMSIG_LIVING_ACTIVE_PARRY_START, .proc/get_component_parry_data) wornonce = TRUE @@ -262,7 +264,7 @@ /obj/item/clothing/gloves/fingerless/pugilist/mauler/equipped(mob/user, slot) . = ..() - if(slot == SLOT_GLOVES) + if(slot == ITEM_SLOT_GLOVES) wornonce = TRUE if((HAS_TRAIT(user, TRAIT_NOPUGILIST))) return @@ -352,6 +354,8 @@ transfer_prints = TRUE cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT strip_mod = 0.9 /obj/item/clothing/gloves/evening/black diff --git a/code/modules/clothing/gloves/mittens.dm b/code/modules/clothing/gloves/mittens.dm index 42250aae2f..b1b17c9afe 100644 --- a/code/modules/clothing/gloves/mittens.dm +++ b/code/modules/clothing/gloves/mittens.dm @@ -6,6 +6,8 @@ //item_color = "white" cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT resistance_flags = NONE /obj/item/clothing/gloves/mittens/random diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 39d39ba58f..754a72ff0c 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -6,6 +6,8 @@ transfer_prints = TRUE cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT resistance_flags = NONE //custom_premium_price = PRICE_EXPENSIVE /// For storing our tackler datum so we can remove it after @@ -28,7 +30,7 @@ if(!ishuman(user)) return switch(slot) // I didn't like how it looked - if(SLOT_GLOVES) + if(ITEM_SLOT_GLOVES) var/mob/living/carbon/human/H = user tackler = H.AddComponent(/datum/component/tackler, stamina_cost=tackle_stam_cost, base_knockdown = base_knockdown, range = tackle_range, speed = tackle_speed, skill_mod = skill_mod, min_distance = min_distance) else @@ -103,7 +105,7 @@ /obj/item/clothing/gloves/tackler/combat/insulated/infiltrator/equipped(mob/user, slot) . = ..() - if(slot == SLOT_GLOVES) + if(slot == ITEM_SLOT_GLOVES) ADD_TRAIT(user, carrytrait, GLOVE_TRAIT) /obj/item/clothing/gloves/tackler/combat/insulated/infiltrator/dropped(mob/user) diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index 6ad3a19694..ea58d0bc88 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -34,7 +34,7 @@ var/obj/item/WH = H.head H.visible_message("[src] bounces off [H]'s [WH.name]!", "[src] bounces off your [WH.name], falling to the floor.") return - if(H.equip_to_slot_if_possible(src, SLOT_HEAD, FALSE, TRUE)) + if(H.equip_to_slot_if_possible(src, ITEM_SLOT_HEAD, FALSE, TRUE)) H.visible_message("[src] lands neatly on [H]'s head!", "[src] lands perfectly onto your head!") return if(iscyborg(hit_atom)) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 6b698f9619..126b1af40f 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -27,7 +27,7 @@ /obj/item/clothing/head/helmet/ComponentInitialize() . = ..() - AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_HEAD)) + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_HEAD)) /obj/item/clothing/head/helmet/examine(mob/user) . = ..() diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 5af694ea1b..592614af61 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -220,7 +220,7 @@ /obj/item/clothing/head/warden/drill/equipped(mob/M, slot) . = ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) else UnregisterSignal(M, COMSIG_MOB_SAY) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 76e8ca53df..eb48048c00 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -264,7 +264,8 @@ item_state = "that" cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - + heat_protection = HEAD + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT dog_fashion = /datum/dog_fashion/head/santa beepsky_fashion = /datum/beepsky_fashion/santa @@ -354,7 +355,7 @@ /obj/item/clothing/head/frenchberet/equipped(mob/M, slot) . = ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) else UnregisterSignal(M, COMSIG_MOB_SAY) diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 247062581d..21cec4f7d2 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -93,6 +93,8 @@ var/earflaps = TRUE cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + heat_protection = HEAD + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT ///Sprite visible when the ushanka flaps are folded up. var/upsprite = "ushankaup" ///Sprite visible when the ushanka flaps are folded down. @@ -147,7 +149,7 @@ beepsky_fashion = /datum/beepsky_fashion/cat /obj/item/clothing/head/kitty/equipped(mob/living/carbon/human/user, slot) - if(ishuman(user) && slot == SLOT_HEAD) + if(ishuman(user) && slot == ITEM_SLOT_HEAD) update_icon(user) user.update_inv_head() //Color might have been changed by update_icon. ..() @@ -186,7 +188,7 @@ /obj/item/clothing/head/cardborg/equipped(mob/living/user, slot) ..() - if(ishuman(user) && slot == SLOT_HEAD) + if(ishuman(user) && slot == ITEM_SLOT_HEAD) var/mob/living/carbon/human/H = user if(istype(H.wear_suit, /obj/item/clothing/suit/cardborg)) var/obj/item/clothing/suit/cardborg/CB = H.wear_suit @@ -265,7 +267,7 @@ /obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot) . = ..() - if(slot != SLOT_HEAD || warped) + if(slot != ITEM_SLOT_HEAD || warped) return if(paranoia) QDEL_NULL(paranoia) @@ -295,7 +297,7 @@ if(!isliving(loc) || !paranoia) return var/mob/living/target = loc - if(target.get_item_by_slot(SLOT_HEAD) != src) + if(target.get_item_by_slot(ITEM_SLOT_HEAD) != src) return QDEL_NULL(paranoia) if(!target.IsUnconscious()) diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index ef7c6a1926..cca13ce1d8 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -18,7 +18,7 @@ /obj/item/clothing/mask/equipped(mob/M, slot) . = ..() - if (slot == SLOT_WEAR_MASK && modifies_speech) + if (slot == ITEM_SLOT_MASK && modifies_speech) RegisterSignal(M, COMSIG_MOB_SAY, .proc/handle_speech) else UnregisterSignal(M, COMSIG_MOB_SAY) diff --git a/code/modules/clothing/masks/cluwne.dm b/code/modules/clothing/masks/cluwne.dm index a1177e2b47..f39f5e73b8 100644 --- a/code/modules/clothing/masks/cluwne.dm +++ b/code/modules/clothing/masks/cluwne.dm @@ -55,7 +55,7 @@ . = ..() if(!ishuman(user)) return - if(slot == SLOT_WEAR_MASK) + if(slot == ITEM_SLOT_MASK) var/mob/living/carbon/human/H = user H.dna.add_mutation(CLUWNEMUT) return @@ -88,7 +88,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(slot == SLOT_WEAR_MASK) + if(slot == ITEM_SLOT_MASK) if(is_cursed && can_cluwne) //logic predetermined log_admin("[key_name(H)] was made into a cluwne by [src]") message_admins("[key_name(H)] got cluwned by [src]") diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index e6a0425920..45da6a9a75 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -290,7 +290,7 @@ . = ..() if(iscarbon(user)) var/mob/living/carbon/C = user - if((C.get_item_by_slot(SLOT_HEAD == src)) || (C.get_item_by_slot(SLOT_WEAR_MASK) == src)) + if((C.get_item_by_slot(ITEM_SLOT_HEAD == src)) || (C.get_item_by_slot(ITEM_SLOT_MASK) == src)) to_chat(user, "You can't tie [src] while wearing it!") return if(slot_flags & ITEM_SLOT_HEAD) diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 28a3343ae6..1f40df0f57 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -226,7 +226,7 @@ return /obj/item/clothing/neck/petcollar/locked/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags) - if(loc == user && user.get_item_by_slot(SLOT_NECK) && lock != FALSE) + if(loc == user && user.get_item_by_slot(ITEM_SLOT_NECK) && lock != FALSE) to_chat(user, "The collar is locked! You'll need unlock the collar before you can take it off!") return ..() @@ -323,7 +323,7 @@ . = ..() if(iscarbon(user)) var/mob/living/carbon/C = user - if(C.get_item_by_slot(SLOT_NECK) == src) + if(C.get_item_by_slot(ITEM_SLOT_NECK) == src) to_chat(user, "You can't untie [src] while wearing it!") return if(user.is_holding(src)) diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm index ac852a35a8..99fc5d1359 100644 --- a/code/modules/clothing/outfits/vr.dm +++ b/code/modules/clothing/outfits/vr.dm @@ -36,7 +36,7 @@ . = ..() var/key = H.key ? H.key : preference_source ? preference_source.key : null var/obj/item/uplink/U = new /obj/item/uplink/nuclear_restricted(H, key, 80) - H.equip_to_slot_or_del(U, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(U, ITEM_SLOT_BACKPACK) var/obj/item/implant/weapons_auth/W = new W.implant(H) var/obj/item/implant/explosive/E = new diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm index 0daf2b39aa..23cd6e8d2d 100644 --- a/code/modules/clothing/outfits/vv_outfit.dm +++ b/code/modules/clothing/outfits/vv_outfit.dm @@ -10,47 +10,47 @@ /datum/outfit/varedit/proc/set_equipement_by_slot(slot,item_path) switch(slot) - if(SLOT_W_UNIFORM) + if(ITEM_SLOT_ICLOTHING) uniform = item_path - if(SLOT_BACK) + if(ITEM_SLOT_BACK) back = item_path - if(SLOT_WEAR_SUIT) + if(ITEM_SLOT_OCLOTHING) suit = item_path - if(SLOT_BELT) + if(ITEM_SLOT_BELT) belt = item_path - if(SLOT_GLOVES) + if(ITEM_SLOT_GLOVES) gloves = item_path - if(SLOT_SHOES) + if(ITEM_SLOT_FEET) shoes = item_path - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) head = item_path - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) mask = item_path - if(SLOT_NECK) + if(ITEM_SLOT_NECK) neck = item_path - //skyrat edit - if(SLOT_EARS_LEFT) + // Sandstorm edit + if(ITEM_SLOT_EARS_LEFT) ears = item_path - if(SLOT_EARS_RIGHT) + if(ITEM_SLOT_EARS_RIGHT) ears_extra = item_path - if(SLOT_WRISTS) + if(ITEM_SLOT_WRISTS) wrists = item_path - if(SLOT_W_SHIRT) + if(ITEM_SLOT_SHIRT) shirt = item_path - if(SLOT_W_UNDERWEAR) + if(ITEM_SLOT_UNDERWEAR) underwear = item_path - if(SLOT_W_SOCKS) + if(ITEM_SLOT_SOCKS) socks = item_path // - if(SLOT_GLASSES) + if(ITEM_SLOT_EYES) glasses = item_path - if(SLOT_WEAR_ID) + if(ITEM_SLOT_ID) id = item_path - if(SLOT_S_STORE) + if(ITEM_SLOT_SUITSTORE) suit_store = item_path - if(SLOT_L_STORE) + if(ITEM_SLOT_LPOCKET) l_pocket = item_path - if(SLOT_R_STORE) + if(ITEM_SLOT_RPOCKET) r_pocket = item_path @@ -80,7 +80,7 @@ //Copy equipment var/list/result = list() - var/list/slots_to_check = list(SLOT_W_UNIFORM,SLOT_W_UNDERWEAR,SLOT_W_SHIRT,SLOT_W_SOCKS,SLOT_BACK,SLOT_WEAR_SUIT,SLOT_BELT,SLOT_GLOVES,SLOT_WRISTS,SLOT_SHOES,SLOT_HEAD,SLOT_WEAR_MASK,SLOT_NECK,SLOT_EARS_LEFT,SLOT_EARS_RIGHT,SLOT_GLASSES,SLOT_WEAR_ID,SLOT_S_STORE,SLOT_L_STORE,SLOT_R_STORE) //skyrat edit + var/list/slots_to_check = list(ITEM_SLOT_ICLOTHING,ITEM_SLOT_UNDERWEAR,ITEM_SLOT_SHIRT,ITEM_SLOT_SOCKS,ITEM_SLOT_BACK,ITEM_SLOT_OCLOTHING,ITEM_SLOT_BELT,ITEM_SLOT_GLOVES,ITEM_SLOT_WRISTS,ITEM_SLOT_FEET,ITEM_SLOT_HEAD,ITEM_SLOT_MASK,ITEM_SLOT_NECK,ITEM_SLOT_EARS_LEFT,ITEM_SLOT_EARS_RIGHT,ITEM_SLOT_EYES,ITEM_SLOT_ID,ITEM_SLOT_SUITSTORE,ITEM_SLOT_LPOCKET,ITEM_SLOT_RPOCKET) // Sandstorm edit for(var/s in slots_to_check) var/obj/item/I = get_item_by_slot(s) var/vedits = collect_vv(I) @@ -91,7 +91,7 @@ //Copy access O.stored_access = list() - var/obj/item/id_slot = get_item_by_slot(SLOT_WEAR_ID) + var/obj/item/id_slot = get_item_by_slot(ITEM_SLOT_ID) if(id_slot) O.stored_access |= id_slot.GetAccess() //Copy hands @@ -110,7 +110,7 @@ result["RHAND"] = vedits O.vv_values = result //Copy backpack contents if exist. - var/obj/item/backpack = get_item_by_slot(SLOT_BACK) + var/obj/item/backpack = get_item_by_slot(ITEM_SLOT_BACK) if(istype(backpack) && SEND_SIGNAL(backpack, COMSIG_CONTAINS_STORAGE)) var/list/bp_stuff = list() var/list/typecounts = list() @@ -148,7 +148,7 @@ for(var/vname in edits) I.vv_edit_var(vname,edits[vname]) //Apply access - var/obj/item/id_slot = H.get_item_by_slot(SLOT_WEAR_ID) + var/obj/item/id_slot = H.get_item_by_slot(ITEM_SLOT_ID) if(id_slot) var/obj/item/card/id/card = id_slot.GetID() if(istype(card)) diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index c98824fa7f..d8ac875df5 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -87,7 +87,7 @@ /obj/item/clothing/shoes/equipped(mob/user, slot) . = ..() - if(offset && slot_flags & slotdefine2slotbit(slot)) + if(offset && (slot_flags & slot)) user.pixel_y += offset worn_y_dimension -= (offset * 2) user.update_inv_shoes() diff --git a/code/modules/clothing/shoes/cluwne.dm b/code/modules/clothing/shoes/cluwne.dm index fbe1ba624b..aec57a2148 100644 --- a/code/modules/clothing/shoes/cluwne.dm +++ b/code/modules/clothing/shoes/cluwne.dm @@ -23,7 +23,7 @@ . = ..() if(!ishuman(user)) return - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) var/mob/living/carbon/human/H = user H.dna.add_mutation(CLUWNEMUT) return diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 773b1ac361..cd01d6f099 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -96,7 +96,7 @@ /obj/item/clothing/shoes/magboots/crushing/equipped(mob/user,slot) . = ..() - if (slot == SLOT_SHOES && magpulse) + if (slot == ITEM_SLOT_FEET && magpulse) RegisterSignal(user, COMSIG_MOVABLE_MOVED,.proc/crush) /obj/item/clothing/shoes/magboots/crushing/dropped(mob/user) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 669ffa1780..7a67308760 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -28,7 +28,7 @@ /obj/item/clothing/shoes/combat/sneakboots/equipped(mob/user, slot) . = ..() - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) ADD_TRAIT(user, TRAIT_SILENT_STEP, SHOES_TRAIT) /obj/item/clothing/shoes/combat/sneakboots/dropped(mob/user) @@ -112,7 +112,7 @@ /obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot) . = ..() - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) if(enabled_waddle) waddle = user.AddComponent(/datum/component/waddling) if(user.mind && HAS_TRAIT(user.mind, TRAIT_CLOWN_MENTALITY)) @@ -340,7 +340,7 @@ /obj/item/clothing/shoes/wheelys/ui_action_click(mob/user, action) if(!isliving(user)) return - if(!istype(user.get_item_by_slot(SLOT_SHOES), /obj/item/clothing/shoes/wheelys)) + if(!istype(user.get_item_by_slot(ITEM_SLOT_FEET), /obj/item/clothing/shoes/wheelys)) to_chat(user, "You must be wearing the wheely-heels to use them!") return if(!(W.is_occupant(user))) @@ -460,7 +460,7 @@ /obj/item/clothing/shoes/wallwalkers/equipped(mob/user,slot) . = ..() - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) RegisterSignal(user, COMSIG_MOB_CLIENT_MOVE,.proc/intercept_user_move) /obj/item/clothing/shoes/wallwalkers/dropped(mob/user) diff --git a/code/modules/clothing/shoes/taeclowndo.dm b/code/modules/clothing/shoes/taeclowndo.dm index c0f8a77543..82f467d8b1 100644 --- a/code/modules/clothing/shoes/taeclowndo.dm +++ b/code/modules/clothing/shoes/taeclowndo.dm @@ -15,7 +15,7 @@ var/mob/living/carbon/human/H = user if(!(HAS_TRAIT(H, TRAIT_CLUMSY)) && !(H.mind && HAS_TRAIT(H.mind, TRAIT_CLOWN_MENTALITY))) return - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) spells = new for(var/spell in spelltypes) var/obj/effect/proc_holder/spell/S = new spell @@ -29,7 +29,7 @@ if(!ishuman(user)) return var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_SHOES) == src) + if(H.get_item_by_slot(ITEM_SLOT_FEET) == src) for(var/spell in spells) var/obj/effect/proc_holder/spell/S = spell H.mind.spell_list.Remove(S) diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 6642731d8b..e30b0953c6 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -107,7 +107,7 @@ teleport_now.UpdateButtonIcon() - var/list/nonsafe_slots = list(SLOT_BELT, SLOT_BACK) + var/list/nonsafe_slots = list(ITEM_SLOT_BELT, ITEM_SLOT_BACK) var/list/exposed = list() for(var/slot in nonsafe_slots) var/obj/item/slot_item = user.get_item_by_slot(slot) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 18138bf4b6..d8a6426295 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -50,12 +50,12 @@ soundloop.stop(user) /obj/item/clothing/head/helmet/space/hardsuit/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_HEAD) + if(slot == ITEM_SLOT_HEAD) return 1 /obj/item/clothing/head/helmet/space/hardsuit/equipped(mob/user, slot) ..() - if(slot != SLOT_HEAD) + if(slot != ITEM_SLOT_HEAD) if(suit) suit.RemoveHelmet() soundloop.stop(user) @@ -118,7 +118,7 @@ if(jetpack) to_chat(user, "[src] already has a jetpack installed.") return - if(src == user.get_item_by_slot(SLOT_WEAR_SUIT)) //Make sure the player is not wearing the suit before applying the upgrade. + if(src == user.get_item_by_slot(ITEM_SLOT_OCLOTHING)) //Make sure the player is not wearing the suit before applying the upgrade. to_chat(user, "You cannot install the upgrade to [src] while wearing it.") return @@ -130,7 +130,7 @@ if(!jetpack) to_chat(user, "[src] has no jetpack installed.") return - if(src == user.get_item_by_slot(SLOT_WEAR_SUIT)) + if(src == user.get_item_by_slot(ITEM_SLOT_OCLOTHING)) to_chat(user, "You cannot remove the jetpack from [src] while wearing it.") return @@ -145,7 +145,7 @@ /obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot) ..() if(jetpack) - if(slot == SLOT_WEAR_SUIT) + if(slot == ITEM_SLOT_OCLOTHING) for(var/X in jetpack.actions) var/datum/action/A = X A.Grant(user) @@ -158,7 +158,7 @@ A.Remove(user) /obj/item/clothing/suit/space/hardsuit/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit. + if(slot == ITEM_SLOT_OCLOTHING) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit. return 1 //Engineering @@ -488,7 +488,7 @@ /obj/item/clothing/head/helmet/space/hardsuit/medical/equipped(mob/living/carbon/human/user, slot) ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] DHUD.add_hud_to(user) @@ -528,7 +528,7 @@ /obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/living/carbon/human/user, slot) ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC] DHUD.add_hud_to(user) @@ -702,7 +702,7 @@ /obj/item/clothing/head/helmet/space/hardsuit/ancient/mason/equipped(mob/living/carbon/human/user, slot) ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC] DHUD.add_hud_to(user) ADD_TRAIT(user, TRAIT_TESLA_SHOCKIMMUNE, "mason_hardsuit") @@ -726,7 +726,7 @@ /obj/item/clothing/suit/space/hardsuit/ancient/equipped(mob/user, slot) . = ..() - if(slot != SLOT_WEAR_SUIT) + if(slot != ITEM_SLOT_OCLOTHING) if(listeningTo) UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) return diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 513ad94365..57d2ae5c69 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -206,7 +206,7 @@ /obj/item/clothing/suit/cardborg/equipped(mob/living/user, slot) ..() - if(slot == SLOT_WEAR_SUIT) + if(slot == ITEM_SLOT_OCLOTHING) disguise(user) /obj/item/clothing/suit/cardborg/dropped(mob/living/user) @@ -279,7 +279,9 @@ item_state = "labcoat" body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET cold_protection = CHEST|GROIN|ARMS + heat_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/automatic/speargun, /obj/item/staff/bostaff) hoodtype = /obj/item/clothing/head/hooded/carp_hood @@ -289,7 +291,9 @@ icon_state = "carp_casual" body_parts_covered = HEAD cold_protection = HEAD + heat_protection = HEAD min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT flags_inv = HIDEHAIR|HIDEEARS /obj/item/clothing/suit/hooded/ian_costume //It's Ian, rub his bell- oh god what happened to his inside parts? @@ -362,7 +366,10 @@ item_state = "ran_suit" body_parts_covered = CHEST|GROIN|LEGS flags_inv = HIDEJUMPSUIT|HIDETAUR - heat_protection = CHEST|GROIN|LEGS //fluffy tails! + cold_protection = CHEST|GROIN|LEGS //fluffy tails! + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Bleh, same as winter coat + heat_protection = CHEST|GROIN|LEGS + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON /obj/item/clothing/head/ran @@ -419,7 +426,9 @@ allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/radio) body_parts_covered = CHEST|ARMS cold_protection = CHEST|GROIN|ARMS + heat_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON /obj/item/clothing/suit/jacket/flannel @@ -520,6 +529,7 @@ icon_state = "leathercoat" body_parts_covered = CHEST|GROIN|ARMS|LEGS cold_protection = CHEST|GROIN|ARMS|LEGS + heat_protection = CHEST|GROIN|ARMS|LEGS mutantrace_variation = STYLE_DIGITIGRADE /obj/item/clothing/suit/jacket/puffer @@ -537,6 +547,7 @@ item_state = "armor" body_parts_covered = CHEST|GROIN cold_protection = CHEST|GROIN + heat_protection = CHEST|GROIN armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/suit/jacket/miljacket @@ -655,7 +666,9 @@ item_state = "coatwinter" body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS + heat_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON @@ -666,7 +679,9 @@ icon_state = "winterhood" body_parts_covered = HEAD cold_protection = HEAD + heat_protection = HEAD min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + max_heat_protection_temperature = COAT_MAX_TEMP_PROTECT flags_inv = HIDEHAIR|HIDEEARS rad_flags = RAD_NO_CONTAMINATE @@ -1012,7 +1027,7 @@ /obj/item/clothing/suit/hooded/wintercoat/ratvar/equipped(mob/living/user,slot) ..() - if (slot != SLOT_WEAR_SUIT || !real) + if (slot != ITEM_SLOT_OCLOTHING || !real) return if (is_servant_of_ratvar(user)) return @@ -1034,7 +1049,7 @@ /obj/item/clothing/suit/hooded/wintercoat/narsie/equipped(mob/living/user,slot) ..() - if (slot != SLOT_WEAR_SUIT || !real) + if (slot != ITEM_SLOT_OCLOTHING || !real) return if (iscultist(user)) return diff --git a/code/modules/clothing/suits/reactive_armour.dm b/code/modules/clothing/suits/reactive_armour.dm index 98fb836c38..608aca2aad 100644 --- a/code/modules/clothing/suits/reactive_armour.dm +++ b/code/modules/clothing/suits/reactive_armour.dm @@ -51,7 +51,7 @@ icon_state = "reactiveoff" item_state = "reactiveoff" add_fingerprint(user) - if(user.get_item_by_slot(SLOT_WEAR_SUIT) == src) + if(user.get_item_by_slot(ITEM_SLOT_OCLOTHING) == src) user.update_inv_wear_suit() /obj/item/clothing/suit/armor/reactive/emp_act(severity) @@ -177,7 +177,7 @@ /obj/item/clothing/suit/armor/reactive/tesla/equipped(mob/user, slot) ..() - if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item? + if(slot_flags & slot) //Was equipped to a valid slot for this item? ADD_TRAIT(user, TRAIT_TESLA_SHOCKIMMUNE, "reactive_tesla_armor") /obj/item/clothing/suit/armor/reactive/tesla/block_action(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 78708f54bb..5ee247e135 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -31,11 +31,11 @@ ToggleHood() /obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_WEAR_SUIT || slot == SLOT_NECK) + if(slot == ITEM_SLOT_OCLOTHING || slot == ITEM_SLOT_NECK) return 1 /obj/item/clothing/suit/hooded/equipped(mob/user, slot) - if(slot != SLOT_WEAR_SUIT && slot != SLOT_NECK) + if(slot != ITEM_SLOT_OCLOTHING && slot != ITEM_SLOT_NECK) RemoveHood() ..() @@ -80,7 +80,7 @@ if(H.head) to_chat(H, "You're already wearing something on your head!") return - else if(H.equip_to_slot_if_possible(hood,SLOT_HEAD,0,0,1)) + else if(H.equip_to_slot_if_possible(hood,ITEM_SLOT_HEAD,0,0,1)) suittoggled = TRUE update_icon() H.update_inv_wear_suit() @@ -102,7 +102,7 @@ /obj/item/clothing/head/hooded/equipped(mob/user, slot) ..() - if(slot != SLOT_HEAD) + if(slot != ITEM_SLOT_HEAD) if(suit) suit.RemoveHood() else @@ -177,7 +177,7 @@ /obj/item/clothing/suit/space/hardsuit/equipped(mob/user, slot) if(!helmettype) return - if(slot != SLOT_WEAR_SUIT) + if(slot != ITEM_SLOT_OCLOTHING) RemoveHelmet() ..() @@ -222,7 +222,7 @@ if(message) to_chat(H, "You're already wearing something on your head!") return - else if(H.equip_to_slot_if_possible(helmet,SLOT_HEAD,0,0,1)) + else if(H.equip_to_slot_if_possible(helmet,ITEM_SLOT_HEAD,0,0,1)) if(message) to_chat(H, "You engage the helmet on the hardsuit.") suittoggled = TRUE diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 977e916f87..5b131749b8 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -167,7 +167,7 @@ actions_types = list(/datum/action/item_action/stickmen) /obj/item/clothing/suit/wizrobe/paper/item_action_slot_check(slot, mob/user, datum/action/A) - if(A.type == /datum/action/item_action/stickmen && slot != SLOT_WEAR_SUIT) + if(A.type == /datum/action/item_action/stickmen && slot != ITEM_SLOT_OCLOTHING) return FALSE return ..() diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 7cd12fddb7..681f474403 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -117,24 +117,24 @@ if(!alt_covers_chest) body_parts_covered |= CHEST - //SKYRAT EDIT + // Sandstorm edit for(var/obj/item/clothing/accessory/attached_accessory in attached_accessories) - if(attached_accessory && slot != SLOT_HANDS && ishuman(user)) + if(attached_accessory && slot != ITEM_SLOT_HANDS && ishuman(user)) var/mob/living/carbon/human/H = user attached_accessory.on_uniform_equip(src, user) if(attached_accessory.above_suit) H.update_inv_wear_suit() - //SKYRAT EDIT END + // /obj/item/clothing/under/dropped(mob/user) - //SKYRAT EDIT + // Sandstorm edit for(var/obj/item/clothing/accessory/attached_accessory in attached_accessories) attached_accessory.on_uniform_dropped(src, user) if(ishuman(user)) var/mob/living/carbon/human/H = user if(attached_accessory.above_suit) H.update_inv_wear_suit() - //SKYRAT EDIT END + // ..() /obj/item/clothing/under/proc/attach_accessory(obj/item/I, mob/user, notifyAttach = 1) diff --git a/code/modules/clothing/under/cluwne.dm b/code/modules/clothing/under/cluwne.dm index 5a908c5663..e1af4b5171 100644 --- a/code/modules/clothing/under/cluwne.dm +++ b/code/modules/clothing/under/cluwne.dm @@ -16,7 +16,7 @@ /obj/item/clothing/under/cluwne/equipped(mob/living/carbon/user, slot) if(!ishuman(user)) return - if(slot == SLOT_W_UNIFORM) + if(slot == ITEM_SLOT_ICLOTHING) var/mob/living/carbon/human/H = user H.dna.add_mutation(CLUWNEMUT) return ..() diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 824f026e8c..06d2771d88 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -17,7 +17,7 @@ if(ishuman(loc)) var/mob/living/carbon/human/H = loc - H.equip_to_slot_or_del(new C(H), SLOT_W_UNIFORM) //or else you end up with naked assistants running around everywhere... + H.equip_to_slot_or_del(new C(H), ITEM_SLOT_ICLOTHING) //or else you end up with naked assistants running around everywhere... else new C(loc) return INITIALIZE_HINT_QDEL @@ -30,7 +30,7 @@ var/obj/item/clothing/under/color/jumpskirt/C = pick(subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/jumpskirt/random) if(ishuman(loc)) var/mob/living/carbon/human/H = loc - H.equip_to_slot_or_del(new C(H), SLOT_W_UNIFORM) + H.equip_to_slot_or_del(new C(H), ITEM_SLOT_ICLOTHING) else new C(loc) return INITIALIZE_HINT_QDEL diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm index 2f0b9c68f8..061de0ea7c 100644 --- a/code/modules/events/wizard/curseditems.dm +++ b/code/modules/events/wizard/curseditems.dm @@ -18,23 +18,23 @@ switch(item_set) if("wizardmimic") - loadout[SLOT_WEAR_SUIT] = /obj/item/clothing/suit/wizrobe - loadout[SLOT_SHOES] = /obj/item/clothing/shoes/sandal/magic - loadout[SLOT_HEAD] = /obj/item/clothing/head/wizard + loadout[ITEM_SLOT_OCLOTHING] = /obj/item/clothing/suit/wizrobe + loadout[ITEM_SLOT_FEET] = /obj/item/clothing/shoes/sandal/magic + loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/wizard ruins_spaceworthiness = 1 if("swords") - loadout[SLOT_HANDS] = /obj/item/katana/cursed + loadout[ITEM_SLOT_HANDS] = /obj/item/katana/cursed if("bigfatdoobie") - loadout[SLOT_WEAR_MASK] = /obj/item/clothing/mask/cigarette/rollie/trippy + loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/cigarette/rollie/trippy ruins_spaceworthiness = 1 if("boxing") - loadout[SLOT_WEAR_MASK] = /obj/item/clothing/mask/luchador - loadout[SLOT_GLOVES] = /obj/item/clothing/gloves/boxing + loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/luchador + loadout[ITEM_SLOT_GLOVES] = /obj/item/clothing/gloves/boxing ruins_spaceworthiness = 1 if("voicemodulators") - loadout[SLOT_WEAR_MASK] = /obj/item/clothing/mask/chameleon + loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/chameleon if("catgirls2015") - loadout[SLOT_HEAD] = /obj/item/clothing/head/kitty + loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/kitty ruins_spaceworthiness = 1 ruins_wizard_loadout = 1 diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 612df6cbaa..7354eb70d4 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -740,7 +740,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( if(close_other) //increase the odds for(var/i in 1 to 5) message_pool.Add("You feel a tiny prick!") - var/obj/item/storage/equipped_backpack = other.get_item_by_slot(SLOT_BACK) + var/obj/item/storage/equipped_backpack = other.get_item_by_slot(ITEM_SLOT_BACK) if(istype(equipped_backpack)) for(var/i in 1 to 5) //increase the odds message_pool.Add("[other] puts the [pick(\ diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index f650a935ea..1c151511af 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -35,7 +35,7 @@ //If they have a hat/helmet and the user is targeting their head. if(affecting == BODY_ZONE_HEAD) - var/obj/item/I = target.get_item_by_slot(SLOT_HEAD) + var/obj/item/I = target.get_item_by_slot(ITEM_SLOT_HEAD) if(I) headarmor = I.armor.melee diff --git a/code/modules/holiday/dynamic.dm b/code/modules/holiday/dynamic.dm new file mode 100644 index 0000000000..fb50ea72ca --- /dev/null +++ b/code/modules/holiday/dynamic.dm @@ -0,0 +1,10 @@ +/datum/holiday/dynamic + name = "Dynamic Day" + +/datum/holiday/dynamic/shouldCelebrate(dd, mm, yy, ww, ddd) + var/list/days = CONFIG_GET(keyed_list/dynamic_mode_days) + return ddd in days + +/datum/holiday/dynamic/celebrate() + GLOB.dynamic_forced_threat_level = rand(90, 100) + CONFIG_SET(string/force_gamemode, "dynamic") // prevents the round vote, which prevents extended diff --git a/code/modules/holiday/halloween/jacqueen.dm b/code/modules/holiday/halloween/jacqueen.dm index c20b99d684..33503e11a6 100644 --- a/code/modules/holiday/halloween/jacqueen.dm +++ b/code/modules/holiday/halloween/jacqueen.dm @@ -432,7 +432,7 @@ var/obj/item/W = C.head C.dropItemToGround(W, TRUE) var/jaqc_latern = new /obj/item/clothing/head/hardhat/pumpkinhead/jaqc - C.equip_to_slot(jaqc_latern, SLOT_HEAD, 1, 1) + C.equip_to_slot(jaqc_latern, ITEM_SLOT_HEAD, 1, 1) if(4) visible_message("[src] waves their arms around, \"In your body there's something amiss, you'll find it's a chem made by my sis!\"") jacqrunes("In your body there's something amiss, you'll find it's a chem made by my sis!", C) @@ -449,7 +449,7 @@ var/obj/item/W = H.wear_suit H.dropItemToGround(W, TRUE) var/ghost = new /obj/item/clothing/suit/ghost_sheet/sticky - H.equip_to_slot(ghost, SLOT_WEAR_SUIT, 1, 1) + H.equip_to_slot(ghost, ITEM_SLOT_OCLOTHING, 1, 1) poof() //Blame Fel diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index fb604bbf56..6fc744a497 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -241,7 +241,7 @@ var/satchel = /obj/item/storage/backpack/satchel var/duffelbag = /obj/item/storage/backpack/duffelbag - var/pda_slot = SLOT_BELT + var/pda_slot = ITEM_SLOT_BELT /datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) var/preference_backpack = preference_source?.prefs.backbag diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index de66c32138..82eae55bde 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -40,7 +40,7 @@ satchel = /obj/item/storage/backpack/satchel/eng duffelbag = /obj/item/storage/backpack/duffelbag/engineering box = /obj/item/storage/box/survival/engineer - pda_slot = SLOT_L_STORE + pda_slot = ITEM_SLOT_LPOCKET backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) /datum/outfit/job/atmos/rig @@ -49,4 +49,4 @@ mask = /obj/item/clothing/mask/gas suit = /obj/item/clothing/suit/space/hardsuit/engine/atmos suit_store = /obj/item/tank/internals/oxygen - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE diff --git a/code/modules/jobs/job_types/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index a9e891a303..7789e3c614 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -34,7 +34,7 @@ B.icon_state = GLOB.bible_icon_state B.item_state = GLOB.bible_item_state to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.") - H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(B, ITEM_SLOT_BACKPACK) var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod var/obj/item/nullrod/N = new nrt(H) H.put_in_hands(N) @@ -108,7 +108,7 @@ GLOB.bible_name = B.name GLOB.deity = B.deity_name - H.equip_to_slot_or_del(B, SLOT_IN_BACKPACK) + H.equip_to_slot_or_del(B, ITEM_SLOT_BACKPACK) SSblackbox.record_feedback("text", "religion_name", 1, "[new_religion]", 1) SSblackbox.record_feedback("text", "religion_deity", 1, "[new_deity]", 1) diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 804952dbb2..6fbf546e95 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -55,7 +55,7 @@ satchel = /obj/item/storage/backpack/satchel/eng duffelbag = /obj/item/storage/backpack/duffelbag/engineering box = /obj/item/storage/box/survival/engineer - pda_slot = SLOT_L_STORE + pda_slot = ITEM_SLOT_LPOCKET chameleon_extras = /obj/item/stamp/ce /datum/outfit/job/ce/rig @@ -68,4 +68,4 @@ glasses = /obj/item/clothing/glasses/meson/engine gloves = /obj/item/clothing/gloves/color/yellow head = null - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index 331bad9bfe..b9fc5809e3 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -41,7 +41,7 @@ r_pocket = /obj/item/pinpointer/crew l_pocket = /obj/item/pda/medical backpack_contents = list(/obj/item/roller=1) - pda_slot = SLOT_L_STORE + pda_slot = ITEM_SLOT_LPOCKET backpack = /obj/item/storage/backpack/medic satchel = /obj/item/storage/backpack/satchel/med diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index 6c2cb94d13..e70e747ae6 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -63,4 +63,4 @@ mask = /obj/item/clothing/mask/breath suit = /obj/item/clothing/suit/space/hardsuit/rd suit_store = /obj/item/tank/internals/oxygen - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE diff --git a/code/modules/jobs/job_types/roboticist.dm b/code/modules/jobs/job_types/roboticist.dm index b44d536cd2..90dacc0482 100644 --- a/code/modules/jobs/job_types/roboticist.dm +++ b/code/modules/jobs/job_types/roboticist.dm @@ -37,4 +37,4 @@ backpack = /obj/item/storage/backpack/science satchel = /obj/item/storage/backpack/satchel/tox - pda_slot = SLOT_L_STORE + pda_slot = ITEM_SLOT_LPOCKET diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index 0037236202..bc9f9f1a20 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, S if(ears) if(H.ears) qdel(H.ears) - H.equip_to_slot_or_del(new ears(H),SLOT_EARS_LEFT) //skyrat edit + H.equip_to_slot_or_del(new ears(H),ITEM_SLOT_EARS_LEFT) // Sandstorm edit var/obj/item/card/id/W = H.wear_id W.access |= dep_access diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index 0c04380afe..273f74defa 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -60,7 +60,7 @@ mask = /obj/item/clothing/mask/gas/explorer glasses = /obj/item/clothing/glasses/meson suit_store = /obj/item/tank/internals/oxygen - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE backpack_contents = list( /obj/item/flashlight/seclite=1,\ /obj/item/kitchen/knife/combat/survival=1, diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index 25bd2196a0..83b11b22f6 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -43,7 +43,7 @@ satchel = /obj/item/storage/backpack/satchel/eng duffelbag = /obj/item/storage/backpack/duffelbag/engineering box = /obj/item/storage/box/survival/engineer - pda_slot = SLOT_L_STORE + pda_slot = ITEM_SLOT_LPOCKET backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) /datum/outfit/job/engineer/gloved @@ -56,6 +56,6 @@ suit = /obj/item/clothing/suit/space/hardsuit/engine suit_store = /obj/item/tank/internals/oxygen head = null - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index 9c503279d4..9eed296851 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -20,7 +20,7 @@ /obj/item/wormhole_jaunter/equipped(mob/user, slot) . = ..() - if(slot == SLOT_BELT) + if(slot == ITEM_SLOT_BELT) RegisterSignal(user, COMSIG_MOVABLE_CHASM_DROP, .proc/chasm_react) /obj/item/wormhole_jaunter/dropped(mob/user) @@ -68,7 +68,7 @@ var/mob/M = loc if(istype(M)) - if(M.get_item_by_slot(SLOT_BELT) == src) + if(M.get_item_by_slot(ITEM_SLOT_BELT) == src) if(prob(severity)) M.visible_message("[src] overloads and activates!") SSblackbox.record_feedback("tally", "jaunter", 1, "EMP") // EMP accidental activation diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 0d46912a5a..0b394e0fc5 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -307,7 +307,7 @@ var/mob/living/carbon/human/active_owner /obj/item/clothing/neck/necklace/memento_mori/item_action_slot_check(slot, mob/user, datum/action/A) - return slot == SLOT_NECK + return slot == ITEM_SLOT_NECK /obj/item/clothing/neck/necklace/memento_mori/dropped(mob/user) ..() diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 206f061e4d..9461847ecc 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -182,7 +182,7 @@ held_items[hand_index] = I I.layer = ABOVE_HUD_LAYER I.plane = ABOVE_HUD_PLANE - I.equipped(src, SLOT_HANDS) + I.equipped(src, ITEM_SLOT_HANDS) if(I.pulledby) I.pulledby.stop_pulling() update_inv_hands() @@ -374,21 +374,20 @@ var/slot_priority = W.slot_equipment_priority if(!slot_priority) - //skyrat edit + // Sandstorm edit slot_priority = list( \ - SLOT_BACK, SLOT_WEAR_ID,\ - SLOT_W_UNDERWEAR,\ - SLOT_W_SOCKS,\ - SLOT_W_SHIRT,\ - SLOT_W_UNIFORM,\ - SLOT_WEAR_SUIT,\ - SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\ - SLOT_SHOES, SLOT_WRISTS, SLOT_GLOVES,\ - SLOT_EARS_LEFT, SLOT_EARS_RIGHT,\ - SLOT_GLASSES,\ - SLOT_BELT, SLOT_S_STORE,\ - SLOT_L_STORE, SLOT_R_STORE,\ - SLOT_GENERC_DEXTROUS_STORAGE\ + ITEM_SLOT_BACK, ITEM_SLOT_ID,\ + ITEM_SLOT_UNDERWEAR,\ + ITEM_SLOT_SOCKS,\ + ITEM_SLOT_SHIRT,\ + ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ + ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\ + ITEM_SLOT_FEET, ITEM_SLOT_WRISTS, ITEM_SLOT_GLOVES,\ + ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT,\ + ITEM_SLOT_EYES,\ + ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\ + ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\ + ITEM_SLOT_DEX_STORAGE\ ) // @@ -431,7 +430,7 @@ 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)) + var/list/obj/item/possible = list(M.get_inactive_held_item(), M.get_item_by_slot(ITEM_SLOT_BELT), M.get_item_by_slot(ITEM_SLOT_DEX_STORAGE), M.get_item_by_slot(ITEM_SLOT_BACK)) for(var/i in possible) if(!i) continue @@ -453,10 +452,10 @@ //used in code for items usable by both carbon and drones, this gives the proper back slot for each mob.(defibrillator, backpack watertank, ...) /mob/proc/getBackSlot() - return SLOT_BACK + return ITEM_SLOT_BACK /mob/proc/getBeltSlot() - return SLOT_BELT + return ITEM_SLOT_BELT diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index ca2946fd8a..7dedf5a739 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -172,7 +172,7 @@ if(target.dropItemToGround(W)) target.visible_message("[src] tears [W] off of [target]'s face!", \ "[src] tears [W] off of [target]'s face!") - target.equip_to_slot_if_possible(src, SLOT_WEAR_MASK, 0, 1, 1) + target.equip_to_slot_if_possible(src, ITEM_SLOT_MASK, 0, 1, 1) return TRUE // time for a smoke /obj/item/clothing/mask/facehugger/proc/Attach(mob/living/M) @@ -259,7 +259,7 @@ return 1 var/mob/living/carbon/C = M - if(ishuman(C) && !(SLOT_WEAR_MASK in C.dna.species.no_equip)) + if(ishuman(C) && !(ITEM_SLOT_MASK in C.dna.species.no_equip)) var/mob/living/carbon/human/H = C if(H.is_mouth_covered(head_only = 1)) return FALSE diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 06dd7ad7c3..80e7b959a8 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -262,7 +262,7 @@ // too soon. var/buckle_cd = 600 if(handcuffed) - var/obj/item/restraints/O = src.get_item_by_slot(SLOT_HANDCUFFED) + var/obj/item/restraints/O = src.get_item_by_slot(ITEM_SLOT_HANDCUFFED) buckle_cd = O.breakouttime MarkResistTime() visible_message("[src] attempts to unbuckle [p_them()]self!", \ @@ -1139,16 +1139,16 @@ /mob/living/carbon/check_obscured_slots() if(head) if(head.flags_inv & HIDEMASK) - LAZYOR(., SLOT_WEAR_MASK) + LAZYOR(., ITEM_SLOT_MASK) if(head.flags_inv & HIDEEYES) - LAZYOR(., SLOT_GLASSES) + LAZYOR(., ITEM_SLOT_EYES) if(head.flags_inv & HIDEEARS) - LAZYOR(., SLOT_EARS_LEFT) - LAZYOR(., SLOT_EARS_RIGHT) + LAZYOR(., ITEM_SLOT_EARS_LEFT) + LAZYOR(., ITEM_SLOT_EARS_RIGHT) if(wear_mask) if(wear_mask.flags_inv & HIDEEYES) - LAZYOR(., SLOT_GLASSES) + LAZYOR(., ITEM_SLOT_EYES) // if any of our bodyparts are bleeding /mob/living/carbon/proc/is_bleeding() diff --git a/code/modules/mob/living/carbon/carbon_stripping.dm b/code/modules/mob/living/carbon/carbon_stripping.dm index 45ff02f0d5..afbd6edaeb 100644 --- a/code/modules/mob/living/carbon/carbon_stripping.dm +++ b/code/modules/mob/living/carbon/carbon_stripping.dm @@ -1,10 +1,10 @@ /datum/strippable_item/mob_item_slot/head key = STRIPPABLE_ITEM_HEAD - item_slot = SLOT_HEAD + item_slot = ITEM_SLOT_HEAD /datum/strippable_item/mob_item_slot/back key = STRIPPABLE_ITEM_BACK - item_slot = SLOT_BACK + item_slot = ITEM_SLOT_BACK /datum/strippable_item/mob_item_slot/back/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -18,15 +18,15 @@ /datum/strippable_item/mob_item_slot/mask key = STRIPPABLE_ITEM_MASK - item_slot = SLOT_WEAR_MASK + item_slot = ITEM_SLOT_MASK /datum/strippable_item/mob_item_slot/neck key = STRIPPABLE_ITEM_NECK - item_slot = SLOT_NECK + item_slot = ITEM_SLOT_NECK /datum/strippable_item/mob_item_slot/handcuffs key = STRIPPABLE_ITEM_HANDCUFFS - item_slot = SLOT_HANDCUFFED + item_slot = ITEM_SLOT_HANDCUFFED /datum/strippable_item/mob_item_slot/handcuffs/should_show(atom/source, mob/user) if (!iscarbon(source)) @@ -41,7 +41,7 @@ /datum/strippable_item/mob_item_slot/legcuffs key = STRIPPABLE_ITEM_LEGCUFFS - item_slot = SLOT_LEGCUFFED + item_slot = ITEM_SLOT_LEGCUFFED /datum/strippable_item/mob_item_slot/legcuffs/should_show(atom/source, mob/user) if (!iscarbon(source)) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 006eda0a48..d1e083f550 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -41,12 +41,12 @@ if(w_shirt && !shirt_hidden) . += "[t_He] [t_is] wearing [w_shirt.get_examine_string(user)]." //Wrist slot because you're epic - if(wrists && !(SLOT_WRISTS in obscured)) + if(wrists && !(ITEM_SLOT_WRISTS in obscured)) . += "[t_He] [t_is] wearing [wrists.get_examine_string(user)]." //End of skyrat changes //uniform - if(w_uniform && !(SLOT_W_UNIFORM in obscured)) + if(w_uniform && !(ITEM_SLOT_ICLOTHING in obscured)) //accessory var/accessory_msg if(istype(w_uniform, /obj/item/clothing/under)) @@ -75,7 +75,7 @@ if(wear_suit && !(wear_suit.obj_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]." //suit/armor storage - if(s_store && !(SLOT_S_STORE in obscured)) + if(s_store && !(ITEM_SLOT_SUITSTORE in obscured)) . += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name]." //back if(back) @@ -87,7 +87,7 @@ . += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))]." //gloves - if(gloves && !(SLOT_GLOVES in obscured)) + if(gloves && !(ITEM_SLOT_GLOVES in obscured)) . += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands." else if(length(blood_DNA)) var/hand_number = get_num_arms(FALSE) @@ -106,18 +106,18 @@ . += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist." //shoes - if(shoes && !(SLOT_SHOES in obscured)) + if(shoes && !(ITEM_SLOT_FEET in obscured)) . += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet." //mask - if(wear_mask && !(SLOT_WEAR_MASK in obscured)) + if(wear_mask && !(ITEM_SLOT_MASK in obscured)) . += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face." - if(wear_neck && !(SLOT_NECK in obscured)) + if(wear_neck && !(ITEM_SLOT_NECK in obscured)) . += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck." //eyes - if(!(SLOT_GLASSES in obscured)) + if(!(ITEM_SLOT_EYES in obscured)) if(glasses) . += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes." else if((left_eye_color == BLOODCULT_EYE || right_eye_color == BLOODCULT_EYE) && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES)) @@ -128,15 +128,15 @@ . += "[t_His] eyes are flickering a bright yellow!" //ears - if(ears && !(SLOT_EARS_LEFT in obscured)) //skyrat edit + if(ears && !(ITEM_SLOT_EARS_LEFT in obscured)) // Sandstorm edit . += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] left ear." - //skyrat edit - extra ear slot haha - if(ears_extra && !(SLOT_EARS_RIGHT in obscured)) + // Sandstorm edit + if(ears_extra && !(ITEM_SLOT_EARS_RIGHT in obscured)) . += "[t_He] [t_has] [ears_extra.get_examine_string(user)] on [t_his] right ear." //wearing two ear items makes you look like an idiot - if((istype(ears, /obj/item/radio/headset) && !(SLOT_EARS_LEFT in obscured)) && (istype(ears_extra, /obj/item/radio/headset) && !(SLOT_EARS_RIGHT in obscured))) + if((istype(ears, /obj/item/radio/headset) && !(ITEM_SLOT_EARS_LEFT in obscured)) && (istype(ears_extra, /obj/item/radio/headset) && !(ITEM_SLOT_EARS_RIGHT in obscured))) . += "[t_He] looks quite tacky wearing both \an [ears.name] and \an [ears_extra.name] on [t_his] head." // diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index abfbb04b0d..5c0d713ef5 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -386,23 +386,23 @@ . = ..() if(wear_suit) if(wear_suit.flags_inv & HIDEGLOVES) - LAZYOR(., SLOT_GLOVES) - LAZYOR(., SLOT_WRISTS) + LAZYOR(., ITEM_SLOT_GLOVES) + LAZYOR(., ITEM_SLOT_WRISTS) if(wear_suit.flags_inv & HIDEJUMPSUIT) - LAZYOR(., SLOT_W_UNIFORM) - LAZYOR(., SLOT_W_SHIRT) - LAZYOR(., SLOT_W_UNDERWEAR) + LAZYOR(., ITEM_SLOT_ICLOTHING) + LAZYOR(., ITEM_SLOT_SHIRT) + LAZYOR(., ITEM_SLOT_UNDERWEAR) if(wear_suit.flags_inv & HIDESHOES) - LAZYOR(., SLOT_SHOES) - LAZYOR(., SLOT_W_SOCKS) + LAZYOR(., ITEM_SLOT_FEET) + LAZYOR(., ITEM_SLOT_SOCKS) if(w_uniform) if(underwear_hidden()) - LAZYOR(., SLOT_W_UNDERWEAR) + LAZYOR(., ITEM_SLOT_UNDERWEAR) if(undershirt_hidden()) - LAZYOR(., SLOT_W_SHIRT) + LAZYOR(., ITEM_SLOT_SHIRT) if(shoes) if(socks_hidden()) - LAZYOR(., SLOT_W_SOCKS) + LAZYOR(., ITEM_SLOT_SOCKS) /mob/living/carbon/human/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) if(judgement_criteria & JUDGE_EMAGGED) @@ -968,6 +968,9 @@ . += "[t_He] [t_is] a [spec_trait_examine_font()][dna.custom_species ? dna.custom_species : dna.species.name]" SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, usr, .) +/mob/living/carbon/human/chestonly + bodyparts = list(/obj/item/bodypart/chest) + /mob/living/carbon/human/species/abductor race = /datum/species/abductor diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm index dc952620ca..b028db5cda 100644 --- a/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/code/modules/mob/living/carbon/human/human_stripping.dm @@ -42,15 +42,15 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/eyes key = STRIPPABLE_ITEM_EYES - item_slot = SLOT_GLASSES + item_slot = ITEM_SLOT_EYES /datum/strippable_item/mob_item_slot/ears key = STRIPPABLE_ITEM_EARS - item_slot = SLOT_EARS_LEFT + item_slot = ITEM_SLOT_EARS_LEFT /datum/strippable_item/mob_item_slot/jumpsuit key = STRIPPABLE_ITEM_JUMPSUIT - item_slot = SLOT_W_UNIFORM + item_slot = ITEM_SLOT_ICLOTHING /datum/strippable_item/mob_item_slot/jumpsuit/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -82,7 +82,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/suit key = STRIPPABLE_ITEM_SUIT - item_slot = SLOT_WEAR_SUIT + item_slot = ITEM_SLOT_OCLOTHING /datum/strippable_item/mob_item_slot/suit/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -115,11 +115,11 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/gloves key = STRIPPABLE_ITEM_GLOVES - item_slot = SLOT_GLOVES + item_slot = ITEM_SLOT_GLOVES /datum/strippable_item/mob_item_slot/feet key = STRIPPABLE_ITEM_FEET - item_slot = SLOT_SHOES + item_slot = ITEM_SLOT_FEET /datum/strippable_item/mob_item_slot/feet/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -148,7 +148,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/suit_storage key = STRIPPABLE_ITEM_SUIT_STORAGE - item_slot = SLOT_S_STORE + item_slot = ITEM_SLOT_SUITSTORE /datum/strippable_item/mob_item_slot/suit_storage/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -162,11 +162,11 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/id key = STRIPPABLE_ITEM_ID - item_slot = SLOT_WEAR_ID + item_slot = ITEM_SLOT_ID /datum/strippable_item/mob_item_slot/belt key = STRIPPABLE_ITEM_BELT - item_slot = SLOT_BELT + item_slot = ITEM_SLOT_BELT /datum/strippable_item/mob_item_slot/belt/get_alternate_action(atom/source, mob/user) if(..() == FALSE) @@ -219,12 +219,12 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list( /datum/strippable_item/mob_item_slot/pocket/left key = STRIPPABLE_ITEM_LPOCKET - item_slot = SLOT_L_STORE + item_slot = ITEM_SLOT_LPOCKET pocket_side = "left" /datum/strippable_item/mob_item_slot/pocket/right key = STRIPPABLE_ITEM_RPOCKET - item_slot = SLOT_R_STORE + item_slot = ITEM_SLOT_RPOCKET pocket_side = "right" /proc/get_strippable_alternate_action_internals(obj/item/item, atom/source) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 1a52097758..ca5f6b135b 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -17,55 +17,55 @@ // Return the item currently in the slot ID /mob/living/carbon/human/get_item_by_slot(slot_id) switch(slot_id) - if(SLOT_BACK) + if(ITEM_SLOT_BACK) return back - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) return wear_mask - if(SLOT_NECK) + if(ITEM_SLOT_NECK) return wear_neck - if(SLOT_HANDCUFFED) + if(ITEM_SLOT_HANDCUFFED) return handcuffed - if(SLOT_LEGCUFFED) + if(ITEM_SLOT_LEGCUFFED) return legcuffed - if(SLOT_BELT) + if(ITEM_SLOT_BELT) return belt - if(SLOT_WEAR_ID) + if(ITEM_SLOT_ID) return wear_id - if(SLOT_EARS_LEFT) //skyrat edit + if(ITEM_SLOT_EARS_LEFT) // Sandstorm edit return ears - //skyrat edit - if(SLOT_EARS_RIGHT) + // Sandstorm edit + if(ITEM_SLOT_EARS_RIGHT) return ears_extra // - if(SLOT_GLASSES) + if(ITEM_SLOT_EYES) return glasses - if(SLOT_GLOVES) + if(ITEM_SLOT_GLOVES) return gloves - //skyrat edit - if(SLOT_WRISTS) + // Sandstorm edit + if(ITEM_SLOT_WRISTS) return wrists // - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) return head - if(SLOT_SHOES) + if(ITEM_SLOT_FEET) return shoes - if(SLOT_WEAR_SUIT) + if(ITEM_SLOT_OCLOTHING) return wear_suit - if(SLOT_W_UNIFORM) + if(ITEM_SLOT_ICLOTHING) return w_uniform - //skyrat edit - if(SLOT_W_UNDERWEAR) + // Sandstorm edit + if(ITEM_SLOT_UNDERWEAR) return w_underwear - if(SLOT_W_SOCKS) + if(ITEM_SLOT_SOCKS) return w_socks - if(SLOT_W_SHIRT) + if(ITEM_SLOT_SHIRT) return w_shirt // - if(SLOT_L_STORE) + if(ITEM_SLOT_LPOCKET) return l_store - if(SLOT_R_STORE) + if(ITEM_SLOT_RPOCKET) return r_store - if(SLOT_S_STORE) + if(ITEM_SLOT_SUITSTORE) return s_store return null @@ -119,22 +119,22 @@ var/not_handled = FALSE //Added in case we make this type path deeper one day switch(slot) - if(SLOT_BELT) + if(ITEM_SLOT_BELT) belt = I update_inv_belt() - if(SLOT_WEAR_ID) + if(ITEM_SLOT_ID) wear_id = I sec_hud_set_ID() update_inv_wear_id() - //skyrat edit - if(SLOT_EARS_LEFT) + // Sandstorm edit + if(ITEM_SLOT_EARS_LEFT) ears = I update_inv_ears() - if(SLOT_EARS_RIGHT) + if(ITEM_SLOT_EARS_RIGHT) ears_extra = I update_inv_ears_extra() // - if(SLOT_GLASSES) + if(ITEM_SLOT_EYES) glasses = I var/obj/item/clothing/glasses/G = I if(G.glass_colour_type) @@ -147,18 +147,18 @@ if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) update_sight() update_inv_glasses() - if(SLOT_GLOVES) + if(ITEM_SLOT_GLOVES) gloves = I update_inv_gloves() - //skyrat edit - if(SLOT_WRISTS) + // Sandstorm edit + if(ITEM_SLOT_WRISTS) wrists = I update_inv_wrists() // - if(SLOT_SHOES) + if(ITEM_SLOT_FEET) shoes = I update_inv_shoes() - if(SLOT_WEAR_SUIT) + if(ITEM_SLOT_OCLOTHING) wear_suit = I if(I.flags_inv & HIDEJUMPSUIT) update_inv_w_uniform() @@ -166,28 +166,28 @@ stop_pulling() //can't pull if restrained update_action_buttons_icon() //certain action buttons will no longer be usable. update_inv_wear_suit() - if(SLOT_W_UNIFORM) + if(ITEM_SLOT_ICLOTHING) w_uniform = I update_suit_sensors() update_inv_w_uniform() - //skyrat edit - if(SLOT_W_UNDERWEAR) + // Sandstorm edit + if(ITEM_SLOT_UNDERWEAR) w_underwear = I update_inv_w_underwear() - if(SLOT_W_SOCKS) + if(ITEM_SLOT_SOCKS) w_socks = I update_inv_w_socks() - if(SLOT_W_SHIRT) + if(ITEM_SLOT_SHIRT) w_shirt = I update_inv_w_shirt() // - if(SLOT_L_STORE) + if(ITEM_SLOT_LPOCKET) l_store = I update_inv_pockets() - if(SLOT_R_STORE) + if(ITEM_SLOT_RPOCKET) r_store = I update_inv_pockets() - if(SLOT_S_STORE) + if(ITEM_SLOT_SUITSTORE) s_store = I update_inv_s_store() else @@ -362,7 +362,7 @@ if(incapacitated()) return var/obj/item/thing = get_active_held_item() - var/obj/item/equipped_back = get_item_by_slot(SLOT_BACK) + var/obj/item/equipped_back = get_item_by_slot(ITEM_SLOT_BACK) if(!equipped_back) // We also let you equip a backpack like this if(!thing) to_chat(src, "You have no backpack to take something out of!") @@ -393,7 +393,7 @@ if(incapacitated()) return var/obj/item/thing = get_active_held_item() - var/obj/item/equipped_belt = get_item_by_slot(SLOT_BELT) + var/obj/item/equipped_belt = get_item_by_slot(ITEM_SLOT_BELT) if(!equipped_belt) // We also let you equip a belt like this if(!thing) to_chat(src, "You have no belt to take something out of!") diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 0e9d93e568..bad994b1fd 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1281,11 +1281,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/num_legs = H.get_num_legs(FALSE) switch(slot) - if(SLOT_HANDS) + if(ITEM_SLOT_HANDS) if(H.get_empty_held_indexes()) return TRUE return FALSE - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) if(H.wear_mask) return FALSE if(!(I.slot_flags & ITEM_SLOT_MASK)) @@ -1293,25 +1293,25 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_NECK) + if(ITEM_SLOT_NECK) if(H.wear_neck) return FALSE if( !(I.slot_flags & ITEM_SLOT_NECK) ) return FALSE return TRUE - if(SLOT_BACK) + if(ITEM_SLOT_BACK) if(H.back) return FALSE if( !(I.slot_flags & ITEM_SLOT_BACK) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_WEAR_SUIT) + if(ITEM_SLOT_OCLOTHING) if(H.wear_suit) return FALSE if( !(I.slot_flags & ITEM_SLOT_OCLOTHING) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_GLOVES) + if(ITEM_SLOT_GLOVES) if(H.gloves) return FALSE if( !(I.slot_flags & ITEM_SLOT_GLOVES) ) @@ -1319,8 +1319,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(num_arms < 2) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - //skyrat edit - if(SLOT_WRISTS) + // Sandstorm edit + if(ITEM_SLOT_WRISTS) if(H.wrists) return FALSE if( !(I.slot_flags & ITEM_SLOT_WRISTS) ) @@ -1329,7 +1329,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) // - if(SLOT_SHOES) + if(ITEM_SLOT_FEET) if(H.shoes) return FALSE if( !(I.slot_flags & ITEM_SLOT_FEET) ) @@ -1342,7 +1342,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) else return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_BELT) + if(ITEM_SLOT_BELT) if(H.belt) return FALSE if(!(I.item_flags & NO_UNIFORM_REQUIRED)) @@ -1354,7 +1354,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!(I.slot_flags & ITEM_SLOT_BELT)) return return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_GLASSES) + if(ITEM_SLOT_EYES) if(H.glasses) return FALSE if(!(I.slot_flags & ITEM_SLOT_EYES)) @@ -1362,7 +1362,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) if(H.head) return FALSE if(!(I.slot_flags & ITEM_SLOT_HEAD)) @@ -1370,7 +1370,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_EARS_LEFT) //skyrat edit + if(ITEM_SLOT_EARS_LEFT) // Sandstorm edit if(H.ears) return FALSE if(!(I.slot_flags & ITEM_SLOT_EARS)) @@ -1378,8 +1378,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - //skyrat edit - if(SLOT_EARS_RIGHT) + // Sandstorm edit + if(ITEM_SLOT_EARS_RIGHT) if(H.ears_extra) return FALSE if(!(I.slot_flags & ITEM_SLOT_EARS)) @@ -1387,32 +1387,32 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!H.get_bodypart(BODY_ZONE_HEAD)) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_W_UNDERWEAR) + if(ITEM_SLOT_UNDERWEAR) if(H.w_underwear) return FALSE if( !(I.slot_flags & ITEM_SLOT_UNDERWEAR) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_W_SOCKS) + if(ITEM_SLOT_SOCKS) if(H.w_socks) return FALSE if( !(I.slot_flags & ITEM_SLOT_SOCKS) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_W_SHIRT) + if(ITEM_SLOT_SHIRT) if(H.w_shirt) return FALSE if( !(I.slot_flags & ITEM_SLOT_SHIRT) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) // - if(SLOT_W_UNIFORM) + if(ITEM_SLOT_ICLOTHING) if(H.w_uniform) return FALSE if( !(I.slot_flags & ITEM_SLOT_ICLOTHING) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_WEAR_ID) + if(ITEM_SLOT_ID) if(H.wear_id) return FALSE if(!(I.item_flags & NO_UNIFORM_REQUIRED)) @@ -1424,7 +1424,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if( !(I.slot_flags & ITEM_SLOT_ID) ) return FALSE return equip_delay_self_check(I, H, bypass_equip_delay_self) - if(SLOT_L_STORE) + if(ITEM_SLOT_LPOCKET) if(HAS_TRAIT(I, TRAIT_NODROP)) //Pockets aren't visible, so you can't move TRAIT_NODROP items into them. return FALSE if(H.l_store) @@ -1436,11 +1436,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(return_warning) return_warning[1] = "You need a jumpsuit before you can attach this [I.name]!" return FALSE - if(I.slot_flags & ITEM_SLOT_DENYPOCKET) - return FALSE - if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) ) + if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKETS) ) return TRUE - if(SLOT_R_STORE) + if(ITEM_SLOT_RPOCKET) if(HAS_TRAIT(I, TRAIT_NODROP)) return FALSE if(H.r_store) @@ -1452,12 +1450,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(return_warning) return_warning[1] = "You need a jumpsuit before you can attach this [I.name]!" return FALSE - if(I.slot_flags & ITEM_SLOT_DENYPOCKET) - return FALSE - if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKET) ) + if( I.w_class <= WEIGHT_CLASS_SMALL || (I.slot_flags & ITEM_SLOT_POCKETS) ) return TRUE return FALSE - if(SLOT_S_STORE) + if(ITEM_SLOT_SUITSTORE) if(HAS_TRAIT(I, TRAIT_NODROP)) return FALSE if(H.s_store) @@ -1477,7 +1473,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if( istype(I, /obj/item/pda) || istype(I, /obj/item/pen) || is_type_in_list(I, H.wear_suit.allowed) ) return TRUE return FALSE - if(SLOT_HANDCUFFED) + if(ITEM_SLOT_HANDCUFFED) if(H.handcuffed) return FALSE if(!istype(I, /obj/item/restraints/handcuffs)) @@ -1485,7 +1481,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(num_arms < 2) return FALSE return TRUE - if(SLOT_LEGCUFFED) + if(ITEM_SLOT_LEGCUFFED) if(H.legcuffed) return FALSE if(!istype(I, /obj/item/restraints/legcuffs)) @@ -1493,7 +1489,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(num_legs < 2) return FALSE return TRUE - if(SLOT_IN_BACKPACK) + if(ITEM_SLOT_BACKPACK) if(H.back) if(SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_CAN_INSERT, I, H, TRUE)) return TRUE diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 9f5e868038..3e24688ac4 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -12,7 +12,7 @@ punchdamagelow = 5 punchdamagehigh = 14 punchstunthreshold = 10 - no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE) + no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE) nojumpsuit = 1 sexes = 1 damage_overlay_type = "" diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm index 5e20b469ed..85ab2b44cd 100644 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm @@ -16,7 +16,7 @@ punchdamagehigh = 12 //still better than humans punchstunthreshold = 10 - no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM) + no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING) burnmod = 1.25 heatmod = 1.5 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 f538a5d5d7..23a0ea310f 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -38,7 +38,7 @@ limbs_id = SPECIES_SHADOW burnmod = 1.5 blacklisted = TRUE - no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE) + no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE) species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS,NOAROUSAL) inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOTHIRST) mutanteyes = /obj/item/organ/eyes/night_vision/nightmare diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index b6558ec72a..198e7df83e 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -82,7 +82,7 @@ There are several things that need to be remembered: update_body(TRUE) update_hair() update_inv_w_uniform() - //skyrat edit + // Sandstorm edit update_inv_w_underwear() update_inv_w_socks() update_inv_w_shirt() @@ -135,7 +135,7 @@ There are several things that need to be remembered: remove_overlay(UNIFORM_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_ICLOTHING) + 1] inv.update_icon() if(istype(w_uniform, /obj/item/clothing/under)) @@ -182,13 +182,13 @@ There are several things that need to be remembered: apply_overlay(UNIFORM_LAYER) update_mutant_bodyparts() -//skyrat edit +// Sandstorm edit /mob/living/carbon/human/update_inv_w_underwear() if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(UNDERWEAR_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNDERWEAR] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_UNDERWEAR) + 1] inv.update_icon() if(istype(w_underwear, /obj/item/clothing/underwear)) @@ -235,7 +235,7 @@ There are several things that need to be remembered: remove_overlay(SOCKS_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_W_SOCKS] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SOCKS) + 1] inv.update_icon() if(istype(w_socks, /obj/item/clothing/underwear)) @@ -282,7 +282,7 @@ There are several things that need to be remembered: remove_overlay(SHIRT_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_W_SHIRT] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SHIRT) + 1] inv.update_icon() if(istype(w_shirt, /obj/item/clothing/underwear)) @@ -330,7 +330,7 @@ There are several things that need to be remembered: remove_overlay(ID_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_ID) + 1] inv.update_icon() var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER] @@ -354,8 +354,8 @@ There are several things that need to be remembered: if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(GLOVES_LAYER) - if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES]) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES] + if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1]) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1] inv.update_icon() if(!gloves && bloody_hands) @@ -383,13 +383,13 @@ There are several things that need to be remembered: overlays_standing[GLOVES_LAYER] = gloves_overlay apply_overlay(GLOVES_LAYER) -//skyrat edit +// Sandstorm edit /mob/living/carbon/human/update_inv_wrists() if(!HAS_TRAIT(src, TRAIT_HUMAN_NO_RENDER)) remove_overlay(WRISTS_LAYER) - if(client && hud_used && hud_used.inv_slots[SLOT_WRISTS]) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WRISTS] + if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS) + 1]) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_WRISTS) + 1] inv.update_icon() if(!wrists && bloody_hands) @@ -426,7 +426,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EYES) + 1] inv.update_icon() if(glasses) @@ -453,7 +453,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS_LEFT] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS_LEFT) + 1] inv.update_icon() if(ears) @@ -479,7 +479,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS_RIGHT] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_EARS_RIGHT) + 1] inv.update_icon() if(ears_extra) @@ -505,7 +505,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_FEET) + 1] inv.update_icon() if(dna.species.mutant_bodyparts["taur"]) @@ -540,7 +540,7 @@ There are several things that need to be remembered: remove_overlay(SUIT_STORE_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_SUITSTORE) + 1] inv.update_icon() if(s_store) @@ -567,7 +567,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1] inv.update_icon() if(head) @@ -604,7 +604,7 @@ There are several things that need to be remembered: remove_overlay(BELT_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BELT) + 1] inv.update_icon() if(belt) @@ -626,7 +626,7 @@ There are several things that need to be remembered: remove_overlay(SUIT_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_OCLOTHING) + 1] inv.update_icon() if(wear_suit) @@ -689,10 +689,10 @@ There are several things that need to be remembered: if(client && hud_used) var/atom/movable/screen/inventory/inv - inv = hud_used.inv_slots[SLOT_L_STORE] + inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_LPOCKET) + 1] inv.update_icon() - inv = hud_used.inv_slots[SLOT_R_STORE] + inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_RPOCKET) + 1] inv.update_icon() if(l_store) @@ -716,7 +716,7 @@ There are several things that need to be remembered: return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1] inv.update_icon() if(wear_mask) diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 13f811196e..2422528d21 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -1,16 +1,16 @@ /mob/living/carbon/get_item_by_slot(slot_id) switch(slot_id) - if(SLOT_BACK) + if(ITEM_SLOT_BACK) return back - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) return wear_mask - if(SLOT_NECK) + if(ITEM_SLOT_NECK) return wear_neck - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) return head - if(SLOT_HANDCUFFED) + if(ITEM_SLOT_HANDCUFFED) return handcuffed - if(SLOT_LEGCUFFED) + if(ITEM_SLOT_LEGCUFFED) return legcuffed return null @@ -20,17 +20,17 @@ return slot if(critical) //it is CRITICAL they get this item, no matter what //do they have a backpack? - var/obj/item/backpack = get_item_by_slot(SLOT_BACK) + var/obj/item/backpack = get_item_by_slot(ITEM_SLOT_BACK) if(!backpack) //nothing on their back backpack = new /obj/item/storage/backpack(get_turf(src)) - if(equip_to_slot(backpack, SLOT_BACK)) //worst-case-scenario, something that shouldnt wear a backpack gets one + if(equip_to_slot(backpack, ITEM_SLOT_BACK)) //worst-case-scenario, something that shouldnt wear a backpack gets one I.forceMove(backpack) - return SLOT_BACK + return ITEM_SLOT_BACK else if(istype(backpack) && SEND_SIGNAL(backpack, COMSIG_CONTAINS_STORAGE)) //place it in here, regardless of storage capacity I.forceMove(backpack) - return SLOT_BACK + return ITEM_SLOT_BACK else //this should NEVER happen, but if it does, report it with the appropriate information var/conclusion = qdel_on_fail ? "deleted" : "not moved, staying at current position [I.x], [I.y], [I.z]" @@ -69,28 +69,28 @@ I.appearance_flags |= NO_CLIENT_COLOR var/not_handled = FALSE switch(slot) - if(SLOT_BACK) + if(ITEM_SLOT_BACK) back = I update_inv_back() - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) wear_mask = I wear_mask_update(I, toggle_off = 0) - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) head = I head_update(I) - if(SLOT_NECK) + if(ITEM_SLOT_NECK) wear_neck = I update_inv_neck(I) - if(SLOT_HANDCUFFED) + if(ITEM_SLOT_HANDCUFFED) handcuffed = I update_handcuffed() - if(SLOT_LEGCUFFED) + if(ITEM_SLOT_LEGCUFFED) legcuffed = I update_inv_legcuffed() - if(SLOT_HANDS) + if(ITEM_SLOT_HANDS) put_in_hands(I) update_inv_hands() - if(SLOT_IN_BACKPACK) + if(ITEM_SLOT_BACKPACK) if(!back || !SEND_SIGNAL(back, COMSIG_TRY_STORAGE_INSERT, I, src, TRUE)) not_handled = TRUE else @@ -170,7 +170,7 @@ if(!offered_item) to_chat(src, "You're not holding anything to give!") return - + if(IS_DEAD_OR_INCAP(src)) to_chat(src, span_warning("You're unable to offer anything in your current state!")) return @@ -184,7 +184,7 @@ visible_message(span_notice("[src] is offering [offered_item]."), \ span_notice("You offer [offered_item]."), null, 2) - + apply_status_effect(STATUS_EFFECT_OFFERING, offered_item) /** diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 182ae1afb8..27f795015e 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -676,7 +676,7 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put /mob/living/carbon/proc/get_cooling_efficiency() if(!HAS_TRAIT(src, TRAIT_ROBOTIC_ORGANISM)) return 1 - + var/integration_bonus = min(blood_volume * SYNTH_INTEGRATION_COOLANT_CAP, integrating_blood * SYNTH_INTEGRATION_COOLANT_PENALTY) //Integration blood somewhat helps, though only at 40% impact and to a cap of 25% of current blood level. var/blood_effective_volume = blood_volume + integration_bonus var/coolant_efficiency = min(blood_effective_volume / BLOOD_VOLUME_SAFE, 1) //Low coolant is only a negative, adding more than needed will not help you. @@ -706,13 +706,13 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put return total_environment_efficiency /mob/living/carbon/proc/check_suitlinking() - var/suit_item = get_item_by_slot(SLOT_WEAR_SUIT) - var/head_item = get_item_by_slot(SLOT_HEAD) + var/suit_item = get_item_by_slot(ITEM_SLOT_OCLOTHING) + var/head_item = get_item_by_slot(ITEM_SLOT_HEAD) var/turf/T = get_turf(src) - + if(istype(head_item, /obj/item/clothing/head/helmet/space) && istype(suit_item, /obj/item/clothing/suit/space)) return 1 - + if(T && is_mining_level(T.z) && istype(head_item, /obj/item/clothing/head/hooded/explorer) && istype(suit_item, /obj/item/clothing/suit/hooded/explorer)) return 1 diff --git a/code/modules/mob/living/carbon/monkey/inventory.dm b/code/modules/mob/living/carbon/monkey/inventory.dm index 34599028f7..156eef9b6b 100644 --- a/code/modules/mob/living/carbon/monkey/inventory.dm +++ b/code/modules/mob/living/carbon/monkey/inventory.dm @@ -5,29 +5,29 @@ return FALSE switch(slot) - if(SLOT_HANDS) + if(ITEM_SLOT_HANDS) if(get_empty_held_indexes()) return TRUE return FALSE - if(SLOT_WEAR_MASK) + if(ITEM_SLOT_MASK) if(wear_mask) return FALSE if( !(I.slot_flags & ITEM_SLOT_MASK) ) return FALSE return TRUE - if(SLOT_NECK) + if(ITEM_SLOT_NECK) if(wear_neck) return FALSE if( !(I.slot_flags & ITEM_SLOT_NECK) ) return FALSE return TRUE - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) if(head) return FALSE if( !(I.slot_flags & ITEM_SLOT_HEAD) ) return FALSE return TRUE - if(SLOT_BACK) + if(ITEM_SLOT_BACK) if(back) return FALSE if( !(I.slot_flags & ITEM_SLOT_BACK) ) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index f8ac8c6716..8a029613e2 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -184,5 +184,5 @@ GLOBAL_LIST_INIT(strippable_monkey_items, create_strippable_list(list( . = ..() if(prob(10)) var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src) - equip_to_slot_or_del(helmet,SLOT_HEAD) + equip_to_slot_or_del(helmet,ITEM_SLOT_HEAD) INVOKE_ASYNC(helmet, /obj/item.proc/attack_self, src) // todo encapsulate toggle diff --git a/code/modules/mob/living/carbon/monkey/punpun.dm b/code/modules/mob/living/carbon/monkey/punpun.dm index c59218a8a3..d71a989c1d 100644 --- a/code/modules/mob/living/carbon/monkey/punpun.dm +++ b/code/modules/mob/living/carbon/monkey/punpun.dm @@ -29,9 +29,9 @@ if(ancestor_chain > 1) generate_fake_scars(rand(ancestor_chain, ancestor_chain * 4)) if(relic_hat) - equip_to_slot_or_del(new relic_hat, SLOT_HEAD) + equip_to_slot_or_del(new relic_hat, ITEM_SLOT_HEAD) if(relic_mask) - equip_to_slot_or_del(new relic_mask, SLOT_WEAR_MASK) + equip_to_slot_or_del(new relic_mask, ITEM_SLOT_MASK) /mob/living/carbon/monkey/punpun/BiologicalLife(seconds, times_fired) if(!(. = ..())) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 43e0db1f08..cd9cd5db4c 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -91,7 +91,7 @@ return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_MASK) + 1] inv?.update_icon() if(wear_mask) @@ -104,8 +104,8 @@ /mob/living/carbon/update_inv_neck() remove_overlay(NECK_LAYER) - if(client && hud_used && hud_used.inv_slots[SLOT_NECK]) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_NECK] + if(client && hud_used && hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1]) + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_NECK) + 1] inv.update_icon() if(wear_neck) @@ -119,7 +119,7 @@ remove_overlay(BACK_LAYER) if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BACK] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_BACK) + 1] inv?.update_icon() if(back) @@ -135,7 +135,7 @@ return if(client && hud_used) - var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD] + var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_HEAD) + 1] inv?.update_icon() if(head) diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 730da0a73c..b0557991be 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -2,7 +2,10 @@ ..() //Mind updates sync_mind() - mind.show_memory(src, 0) +//ambition start + if(mind.memory || mind.antag_datums) + to_chat(src, "[mind.show_memory()]") +//ambition end //Round specific stuff if(SSticker.mode) 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 bab02499fb..44386a3e69 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -88,10 +88,10 @@ if(default_storage) var/obj/item/I = new default_storage(src) - equip_to_slot_or_del(I, SLOT_GENERC_DEXTROUS_STORAGE) + equip_to_slot_or_del(I, ITEM_SLOT_DEX_STORAGE) if(default_hatmask) var/obj/item/I = new default_hatmask(src) - equip_to_slot_or_del(I, SLOT_HEAD) + equip_to_slot_or_del(I, ITEM_SLOT_HEAD) ADD_TRAIT(access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT) 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 948be53abc..df4d1e0673 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 @@ -61,7 +61,7 @@ if(!D.default_hatmask && seasonal_hats && possible_seasonal_hats.len) var/hat_type = pick(possible_seasonal_hats) var/obj/item/new_hat = new hat_type(D) - D.equip_to_slot_or_del(new_hat, SLOT_HEAD) + D.equip_to_slot_or_del(new_hat, ITEM_SLOT_HEAD) D.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) user.transfer_ckey(D, FALSE) qdel(src) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm index 00be08bb1d..4c112858da 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm @@ -21,13 +21,13 @@ /mob/living/simple_animal/drone/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning) switch(slot) - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) if(head) return 0 if(!((I.slot_flags & ITEM_SLOT_HEAD) || (I.slot_flags & ITEM_SLOT_MASK))) return 0 return 1 - if(SLOT_GENERC_DEXTROUS_STORAGE) + if(ITEM_SLOT_DEX_STORAGE) if(internal_storage) return 0 return 1 @@ -36,9 +36,9 @@ /mob/living/simple_animal/drone/get_item_by_slot(slot_id) switch(slot_id) - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) return head - if(SLOT_GENERC_DEXTROUS_STORAGE) + if(ITEM_SLOT_DEX_STORAGE) return internal_storage return ..() @@ -63,10 +63,10 @@ I.plane = ABOVE_HUD_PLANE switch(slot) - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) head = I update_inv_head() - if(SLOT_GENERC_DEXTROUS_STORAGE) + if(ITEM_SLOT_DEX_STORAGE) internal_storage = I update_inv_internal_storage() else @@ -77,7 +77,7 @@ I.equipped(src, slot) /mob/living/simple_animal/drone/getBackSlot() - return SLOT_GENERC_DEXTROUS_STORAGE + return ITEM_SLOT_DEX_STORAGE /mob/living/simple_animal/drone/getBeltSlot() - return SLOT_GENERC_DEXTROUS_STORAGE + return ITEM_SLOT_DEX_STORAGE 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 709e3b1a62..f60cefffd8 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm @@ -52,7 +52,7 @@ /mob/living/simple_animal/hostile/guardian/dextrous/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE, clothing_check = FALSE, list/return_warning) switch(slot) - if(SLOT_GENERC_DEXTROUS_STORAGE) + if(ITEM_SLOT_DEX_STORAGE) if(internal_storage) return 0 return 1 @@ -63,17 +63,17 @@ return switch(slot) - if(SLOT_GENERC_DEXTROUS_STORAGE) + if(ITEM_SLOT_DEX_STORAGE) internal_storage = I update_inv_internal_storage() else to_chat(src, "You are trying to equip this item to an unsupported inventory slot. Report this to a coder!") /mob/living/simple_animal/hostile/guardian/dextrous/getBackSlot() - return SLOT_GENERC_DEXTROUS_STORAGE + return ITEM_SLOT_DEX_STORAGE /mob/living/simple_animal/hostile/guardian/dextrous/getBeltSlot() - return SLOT_GENERC_DEXTROUS_STORAGE + return ITEM_SLOT_DEX_STORAGE /mob/living/simple_animal/hostile/guardian/dextrous/proc/update_inv_internal_storage() if(internal_storage && client && hud_used && hud_used.hud_shown) 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 fa67fd8e3b..6bd55d06ae 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 @@ -191,7 +191,7 @@ continue visible_message("[src] grabs hold of [L]!") var/mob/living/carbon/C = L - var/obj/item/clothing/S = C.get_item_by_slot(SLOT_WEAR_SUIT) + var/obj/item/clothing/S = C.get_item_by_slot(ITEM_SLOT_OCLOTHING) if(S && S.resistance_flags & GOLIATH_RESISTANCE) L.Stun(25) else if(S && S.resistance_flags & GOLIATH_WEAKNESS) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index b50c764a6b..60af6072ce 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -466,7 +466,11 @@ set category = "IC" set desc = "View your character's notes memory." if(mind) - mind.show_memory(src) +//ambition start + var/datum/browser/popup = new(src, "memory", "Memory and Notes") + popup.set_content(mind.show_memory()) + popup.open() +//ambition end else to_chat(src, "You don't have a mind datum for some reason, so you can't look at your notes, if you had any.") diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index cf895924b0..f59a06dc69 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -111,7 +111,7 @@ if(user.put_in_hands(src)) msg = "Your Energy Katana teleports into your hand!" - else if(user.equip_to_slot_if_possible(src, SLOT_BELT, 0, 1, 1)) + else if(user.equip_to_slot_if_possible(src, ITEM_SLOT_BELT, 0, 1, 1)) msg = "Your Energy Katana teleports back to you, sheathing itself as it does so!" else msg = "Your Energy Katana teleports to your location!" diff --git a/code/modules/ninja/outfit.dm b/code/modules/ninja/outfit.dm index ca740d9ad7..f9ce438ed9 100644 --- a/code/modules/ninja/outfit.dm +++ b/code/modules/ninja/outfit.dm @@ -11,7 +11,7 @@ l_pocket = /obj/item/grenade/plastic/c4/ninja r_pocket = /obj/item/hypospray/mkii/CMO/combat suit_store = /obj/item/tank/internals/oxygen - internals_slot = SLOT_S_STORE + internals_slot = ITEM_SLOT_SUITSTORE belt = /obj/item/energy_katana implants = list(/obj/item/implant/explosive) diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm index 6fba60a6ef..4f46a1bfc6 100644 --- a/code/modules/ninja/suit/shoes.dm +++ b/code/modules/ninja/suit/shoes.dm @@ -22,7 +22,7 @@ /obj/item/clothing/shoes/space_ninja/equipped(mob/user, slot) . = ..() - if(slot == SLOT_SHOES) + if(slot == ITEM_SLOT_FEET) ADD_TRAIT(user, TRAIT_SILENT_STEP, SHOES_TRAIT) /obj/item/clothing/shoes/space_ninja/dropped(mob/user) diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index f07ad0bc39..8c26f40d8b 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -163,7 +163,7 @@ icon = 'icons/obj/ammo.dmi' icon_state = "shotgunclip" caliber = "shotgun" // slapped in to allow shell mix n match - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKET + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKETS w_class = WEIGHT_CLASS_NORMAL w_volume = ITEM_VOLUME_STRIPPER_CLIP ammo_type = /obj/item/ammo_casing/shotgun diff --git a/code/modules/projectiles/boxes_magazines/external/rechargable.dm b/code/modules/projectiles/boxes_magazines/external/rechargable.dm index 8f8916585b..76d8f217ab 100644 --- a/code/modules/projectiles/boxes_magazines/external/rechargable.dm +++ b/code/modules/projectiles/boxes_magazines/external/rechargable.dm @@ -54,7 +54,7 @@ desc = "A miniature battery for an energy weapon." icon = 'icons/obj/ammo.dmi' icon_state = "mws_batt" - slot_flags = SLOT_BELT | SLOT_EARS_LEFT | SLOT_EARS_RIGHT //skyrat edit + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_EARS throwforce = 1 caliber = "mws" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index bbd77ad665..a1c7c312ab 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -619,7 +619,7 @@ . += knife_overlay /obj/item/gun/item_action_slot_check(slot, mob/user, datum/action/A) - if(istype(A, /datum/action/item_action/toggle_scope_zoom) && slot != SLOT_HANDS) + if(istype(A, /datum/action/item_action/toggle_scope_zoom) && slot != ITEM_SLOT_HANDS) return FALSE return ..() diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index e7f26670d4..1f0601ac77 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -140,6 +140,6 @@ recoil = 0.1 inaccuracy_modifier = 0.25 dualwield_spread_mult = 1.4 - slot_flags = SLOT_BELT + slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_NORMAL weapon_weight = WEAPON_MEDIUM diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm index a0274d76d7..2bb1ece906 100644 --- a/code/modules/projectiles/guns/energy/laser_gatling.dm +++ b/code/modules/projectiles/guns/energy/laser_gatling.dm @@ -32,7 +32,7 @@ /obj/item/minigunpack/on_attack_hand(var/mob/living/carbon/user) if(src.loc == user) if(!armed) - if(user.get_item_by_slot(SLOT_BACK) == src) + if(user.get_item_by_slot(ITEM_SLOT_BACK) == src) armed = 1 if(!user.put_in_hands(gun)) armed = 0 diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 2899f0ca11..cdad332def 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -14,6 +14,7 @@ GLOB.chemical_reagents_list[path] = D /proc/build_chemical_reactions_list() + message_admins("STARTY START START!") //Chemical Reactions - Initialises all /datum/chemical_reaction into a list // It is filtered into multiple lists within a list. // For example: @@ -26,11 +27,20 @@ //Randomized need to go last since they need to check against conflicts with normal recipes var/paths = subtypesof(/datum/chemical_reaction) - typesof(/datum/chemical_reaction/randomized) + subtypesof(/datum/chemical_reaction/randomized) GLOB.chemical_reactions_list = list() + GLOB.normalized_chemical_reactions_list = list() // chemistry pda + GLOB.drink_reactions_list = list() // bartender pda for(var/path in paths) var/datum/chemical_reaction/D = new path() var/list/reaction_ids = list() + // store recipes separately for bartender/chemistry cartridges + if(D.id && !D.is_secret) // don't show things like secretcatchem or secret sauce + var/datum/reagent/r = D.id + if(ispath(D.id, /datum/reagent/consumable)) + GLOB.drink_reactions_list[initial(r.name)] = D + if(ispath(D.id, /datum/reagent)) + GLOB.normalized_chemical_reactions_list[initial(r.name)] = D if(D.required_reagents && D.required_reagents.len) for(var/reaction in D.required_reagents) @@ -43,6 +53,31 @@ GLOB.chemical_reactions_list[id] += D break // Don't bother adding ourselves to other reagent ids, it is redundant +/proc/recipe_search(mob/M, list/reaction_list) + var/option = input(M, "Enter keyword to return a recipe.") + if(option) + option = lowertext(option) + var/list/reagents_required + var/found_reagent_name + var/required_temp + for(var/reagent_name in reaction_list) + if(findtext(lowertext(reagent_name), option)) + var/datum/chemical_reaction/reaction = reaction_list[reagent_name] + found_reagent_name = reagent_name + reagents_required = reaction.required_reagents + required_temp = reaction.required_temp + break + if(length(reagents_required)) + to_chat(M, "Recipe found: [found_reagent_name][required_temp ? "
    Required Temperature: [required_temp]K" : ""]
    Required Reagents:") + var/reagents_required_string = "" + for(var/r in reagents_required) + var/datum/reagent/reagent = r + reagents_required_string += "
    [initial(reagent.name)]: [reagents_required[r]]" + to_chat(M, reagents_required_string) + return + else + to_chat(M, "Reagent with term: [option] could not be located!") + /////////////////////////////////////////////////////////////////////////////////// /datum/reagents diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index 41c0ed717e..aab46bc3e4 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -38,6 +38,8 @@ var/clear_conversion //bitflags for clear conversions; REACTION_CLEAR_IMPURE or REACTION_CLEAR_INVERSE var/PurityMin = 0.15 //If purity is below 0.15, it explodes too. Set to 0 to disable this. + var/is_secret = FALSE // If it should show in recipe searchers such as the bartender/chemistry PDA functions + /datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, multiplier, specialreact) set waitfor = FALSE diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index fddff17a9d..03b0e1b715 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -581,7 +581,7 @@ if(istype(extract)) if(extract.Uses > 0) var/mob/lastheld = get_mob_by_key(holder.my_atom.fingerprintslast) - if(lastheld && !lastheld.equip_to_slot_if_possible(extract, SLOT_HANDS, disable_warning = TRUE)) + if(lastheld && !lastheld.equip_to_slot_if_possible(extract, ITEM_SLOT_HANDS, disable_warning = TRUE)) extract.forceMove(get_turf(lastheld)) use_slime_core(holder) diff --git a/code/modules/reagents/chemistry/recipes/special.dm b/code/modules/reagents/chemistry/recipes/special.dm index ad277ef4ff..4aab8e4046 100644 --- a/code/modules/reagents/chemistry/recipes/special.dm +++ b/code/modules/reagents/chemistry/recipes/special.dm @@ -54,6 +54,8 @@ GLOBAL_LIST_INIT(food_reagents, build_reagents_to_food()) //reagentid = related var/max_result_reagents = 1 var/list/possible_results = list() + is_secret = TRUE + /datum/chemical_reaction/randomized/proc/GenerateRecipe() created = world.time if(randomize_container) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index bc91dc1ff5..0310e92a84 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -300,16 +300,19 @@ resistance_flags = NONE armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 50) //Weak melee protection, because you can wear it on your head slot_equipment_priority = list( \ - SLOT_BACK, SLOT_WEAR_ID,\ - SLOT_W_UNIFORM, SLOT_WEAR_SUIT,\ - SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\ - SLOT_SHOES, SLOT_GLOVES,\ - SLOT_EARS_LEFT, SLOT_EARS_RIGHT,\ - SLOT_GLASSES,\ - SLOT_BELT, SLOT_S_STORE,\ - SLOT_L_STORE, SLOT_R_STORE,\ - SLOT_GENERC_DEXTROUS_STORAGE - ) //skyrat edit + ITEM_SLOT_BACK, ITEM_SLOT_ID,\ + ITEM_SLOT_UNDERWEAR,\ + ITEM_SLOT_SOCKS,\ + ITEM_SLOT_SHIRT,\ + ITEM_SLOT_ICLOTHING, ITEM_SLOT_OCLOTHING,\ + ITEM_SLOT_MASK, ITEM_SLOT_HEAD, ITEM_SLOT_NECK,\ + ITEM_SLOT_FEET, ITEM_SLOT_WRISTS, ITEM_SLOT_GLOVES,\ + ITEM_SLOT_EARS_LEFT, ITEM_SLOT_EARS_RIGHT,\ + ITEM_SLOT_EYES,\ + ITEM_SLOT_BELT, ITEM_SLOT_SUITSTORE,\ + ITEM_SLOT_LPOCKET, ITEM_SLOT_RPOCKET,\ + ITEM_SLOT_DEX_STORAGE\ + ) container_flags = APTFT_ALTCLICK|APTFT_VERB container_HP = 1 @@ -331,11 +334,11 @@ /obj/item/reagent_containers/glass/bucket/equipped(mob/user, slot) ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) if(reagents.total_volume) to_chat(user, "[src]'s contents spill all over you!") var/R = reagents.log_list() - log_reagent("SPLASH: [user] splashed [src] on their head via bucket/equipped(self, SLOT_HEAD) - [R]") + log_reagent("SPLASH: [user] splashed [src] on their head via bucket/equipped(self, ITEM_SLOT_HEAD) - [R]") reagents.reaction(user, TOUCH) reagents.clear_reagents() reagent_flags = NONE @@ -346,10 +349,10 @@ /obj/item/reagent_containers/glass/bucket/equip_to_best_slot(var/mob/M) if(reagents.total_volume) //If there is water in a bucket, don't quick equip it to the head - var/index = slot_equipment_priority.Find(SLOT_HEAD) - slot_equipment_priority.Remove(SLOT_HEAD) + var/index = slot_equipment_priority.Find(ITEM_SLOT_HEAD) + slot_equipment_priority.Remove(ITEM_SLOT_HEAD) . = ..() - slot_equipment_priority.Insert(index, SLOT_HEAD) + slot_equipment_priority.Insert(index, ITEM_SLOT_HEAD) return return ..() diff --git a/code/modules/reagents/reagent_containers/rags.dm b/code/modules/reagents/reagent_containers/rags.dm index c26ed4db31..78cb9d43ea 100644 --- a/code/modules/reagents/reagent_containers/rags.dm +++ b/code/modules/reagents/reagent_containers/rags.dm @@ -150,11 +150,11 @@ /obj/item/reagent_containers/rag/towel/equipped(mob/living/user, slot) . = ..() switch(slot) - if(SLOT_BELT) + if(ITEM_SLOT_BELT) body_parts_covered = GROIN|LEGS - if(SLOT_WEAR_SUIT) + if(ITEM_SLOT_OCLOTHING) body_parts_covered = CHEST|GROIN|LEGS - if(SLOT_HEAD) + if(ITEM_SLOT_HEAD) body_parts_covered = HEAD flags_inv = HIDEHAIR diff --git a/code/modules/research/designs/limbgrower_designs.dm b/code/modules/research/designs/limbgrower_designs.dm index 8da18c453c..e30cdfb5ef 100644 --- a/code/modules/research/designs/limbgrower_designs.dm +++ b/code/modules/research/designs/limbgrower_designs.dm @@ -2,6 +2,18 @@ //////////Limb Grower Designs /////// ///////////////////////////////////// + +/datum/design/chestmob + name = "Synthetic Humanoid Framework Chest" + id = "chestmob" + // Mobs don't make very good roundstart icons + research_icon = 'icons/mob/human_parts.dmi' + research_icon_state = "default_human_chest" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/synthflesh = 100, /datum/reagent/blood = BLOOD_VOLUME_SURVIVE) + build_path = /mob/living/carbon/human/chestonly + category = list("initial","human","lizard","fly","insect","plasmaman","mammal","xeno") + /datum/design/leftarm name = "Left Arm" id = "leftarm" diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm index 1ac09652b5..b30a53c27d 100644 --- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm +++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm @@ -19,7 +19,7 @@ Slimecrossing Armor /obj/item/clothing/mask/nobreath/equipped(mob/living/carbon/human/user, slot) . = ..() - if(slot == SLOT_WEAR_MASK) + if(slot == ITEM_SLOT_MASK) ADD_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]") user.failed_last_breath = FALSE user.clear_alert("not_enough_oxy") @@ -39,7 +39,7 @@ Slimecrossing Armor var/glasses_color = "#FFFFFF" /obj/item/clothing/glasses/prism_glasses/item_action_slot_check(slot) - if(slot == SLOT_GLASSES) + if(slot == ITEM_SLOT_EYES) return TRUE /obj/structure/light_prism @@ -111,7 +111,7 @@ Slimecrossing Armor /obj/item/clothing/head/peaceflower/equipped(mob/living/carbon/human/user, slot) . = ..() - if(slot == SLOT_HEAD) + if(slot == ITEM_SLOT_HEAD) ADD_TRAIT(user, TRAIT_PACIFISM, "peaceflower_[REF(src)]") /obj/item/clothing/head/peaceflower/dropped(mob/living/carbon/human/user) diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index 87b90c7c97..2b5977d384 100644 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm @@ -127,10 +127,10 @@ Regenerative extracts: /obj/item/slimecross/regenerative/darkpurple/core_effect(mob/living/target, mob/user) var/equipped = 0 - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/purple(null), SLOT_SHOES) - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(null), SLOT_W_UNIFORM) - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(null), SLOT_GLOVES) - equipped += target.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(null), SLOT_HEAD) + equipped += target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/purple(null), ITEM_SLOT_FEET) + equipped += target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(null), ITEM_SLOT_ICLOTHING) + equipped += target.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(null), ITEM_SLOT_GLOVES) + equipped += target.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(null), ITEM_SLOT_HEAD) if(equipped > 0) target.visible_message("The milky goo congeals into clothing!") @@ -142,13 +142,13 @@ Regenerative extracts: return var/mob/living/carbon/human/H = target var/fireproofed = FALSE - if(H.get_item_by_slot(SLOT_WEAR_SUIT)) + if(H.get_item_by_slot(ITEM_SLOT_OCLOTHING)) fireproofed = TRUE - var/obj/item/clothing/C = H.get_item_by_slot(SLOT_WEAR_SUIT) + var/obj/item/clothing/C = H.get_item_by_slot(ITEM_SLOT_OCLOTHING) fireproof(C) - if(H.get_item_by_slot(SLOT_HEAD)) + if(H.get_item_by_slot(ITEM_SLOT_HEAD)) fireproofed = TRUE - var/obj/item/clothing/C = H.get_item_by_slot(SLOT_HEAD) + var/obj/item/clothing/C = H.get_item_by_slot(ITEM_SLOT_HEAD) fireproof(C) if(fireproofed) target.visible_message("Some of [target]'s clothing gets coated in the goo, and turns blue!") diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index fbe7a0ea40..bf6051c87c 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -63,9 +63,9 @@ H.dropItemToGround(H.w_uniform) H.dropItemToGround(H.wear_suit) H.dropItemToGround(H.head) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), SLOT_WEAR_SUIT) - H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), SLOT_HEAD) - H.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(H), SLOT_W_UNIFORM) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), ITEM_SLOT_OCLOTHING) + H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), ITEM_SLOT_HEAD) + H.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(H), ITEM_SLOT_ICLOTHING) // you only get one phylactery. M.mind.RemoveSpell(src) @@ -132,10 +132,10 @@ var/mob/old_body = mind.current var/mob/living/carbon/human/lich = new(item_turf) - lich.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(lich), SLOT_SHOES) - lich.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(lich), SLOT_W_UNIFORM) - lich.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(lich), SLOT_WEAR_SUIT) - lich.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(lich), SLOT_HEAD) + lich.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(lich), ITEM_SLOT_FEET) + lich.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(lich), ITEM_SLOT_ICLOTHING) + lich.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(lich), ITEM_SLOT_OCLOTHING) + lich.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(lich), ITEM_SLOT_HEAD) lich.real_name = mind.name mind.transfer_to(lich) diff --git a/code/modules/unit_tests/outfit_sanity.dm b/code/modules/unit_tests/outfit_sanity.dm index 57ce22434e..e084069cf7 100644 --- a/code/modules/unit_tests/outfit_sanity.dm +++ b/code/modules/unit_tests/outfit_sanity.dm @@ -26,13 +26,19 @@ CHECK_OUTFIT_SLOT(head, ITEM_SLOT_HEAD) CHECK_OUTFIT_SLOT(mask, ITEM_SLOT_MASK) CHECK_OUTFIT_SLOT(neck, ITEM_SLOT_NECK) - CHECK_OUTFIT_SLOT(ears, ITEM_SLOT_EARS) + CHECK_OUTFIT_SLOT(ears, ITEM_SLOT_EARS_LEFT) CHECK_OUTFIT_SLOT(glasses, ITEM_SLOT_EYES) CHECK_OUTFIT_SLOT(id, ITEM_SLOT_ID) CHECK_OUTFIT_SLOT(suit_store, ITEM_SLOT_SUITSTORE) CHECK_OUTFIT_SLOT(l_pocket, ITEM_SLOT_LPOCKET) CHECK_OUTFIT_SLOT(r_pocket, ITEM_SLOT_RPOCKET) + CHECK_OUTFIT_SLOT(underwear, ITEM_SLOT_UNDERWEAR) + CHECK_OUTFIT_SLOT(shirt, ITEM_SLOT_SHIRT) + CHECK_OUTFIT_SLOT(socks, ITEM_SLOT_SOCKS) + CHECK_OUTFIT_SLOT(wrists, ITEM_SLOT_WRISTS) + CHECK_OUTFIT_SLOT(ears_extra, ITEM_SLOT_EARS_RIGHT) + if (outfit.backpack_contents || outfit.box) var/list/backpack_contents = outfit.backpack_contents?.Copy() if (outfit.box) diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index 3e0e71446d..d4a87a0f1e 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -102,7 +102,7 @@ var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals)) unbuckle_mob(H) H.throw_at(throw_target, 3, 2) - var/head_slot = H.get_item_by_slot(SLOT_HEAD) + var/head_slot = H.get_item_by_slot(ITEM_SLOT_HEAD) if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) H.updatehealth() @@ -281,7 +281,7 @@ H.throw_at(throw_target, 4, 3) H.DefaultCombatKnockdown(30) H.adjustStaminaLoss(30) - var/head_slot = H.get_item_by_slot(SLOT_HEAD) + var/head_slot = H.get_item_by_slot(ITEM_SLOT_HEAD) if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1) H.updatehealth() diff --git a/html/changelogs/AutoChangeLog-pr-15495.yml b/html/changelogs/AutoChangeLog-pr-15495.yml new file mode 100644 index 0000000000..f9a025c584 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15495.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - rscadd: "Configurable weekly high-chaos days" diff --git a/html/changelogs/AutoChangeLog-pr-15503.yml b/html/changelogs/AutoChangeLog-pr-15503.yml new file mode 100644 index 0000000000..96dc78ff65 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15503.yml @@ -0,0 +1,4 @@ +author: "Arturlang" +delete-after: True +changes: + - rscadd: "The limbgrower can make human chest parts that you can build onto into a person." diff --git a/html/changelogs/AutoChangeLog-pr-15505.yml b/html/changelogs/AutoChangeLog-pr-15505.yml new file mode 100644 index 0000000000..2c5f1ae47c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15505.yml @@ -0,0 +1,4 @@ +author: "SandPoot and Crowbar764" +delete-after: True +changes: + - rscadd: "TGUI for the player playtimes menu." diff --git a/html/changelogs/AutoChangeLog-pr-15522.yml b/html/changelogs/AutoChangeLog-pr-15522.yml new file mode 100644 index 0000000000..40705aba5f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15522.yml @@ -0,0 +1,4 @@ +author: "bunny232" +delete-after: True +changes: + - rscadd: "Cold weather gear can now provide insulation against temperatures of up to 57C (330K)" diff --git a/html/changelogs/AutoChangeLog-pr-15526.yml b/html/changelogs/AutoChangeLog-pr-15526.yml new file mode 100644 index 0000000000..60d49802c0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15526.yml @@ -0,0 +1,5 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "adds a cartridge for the bartender's PDA that lets them search drink recipes" + - rscadd: "updates chemist cartridge to be able to search all chemical recipes" diff --git a/html/changelogs/AutoChangeLog-pr-15528.yml b/html/changelogs/AutoChangeLog-pr-15528.yml new file mode 100644 index 0000000000..5b22ff00dc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15528.yml @@ -0,0 +1,4 @@ +author: "SandPoot" +delete-after: True +changes: + - refactor: "Kills off SLOT_ in favor of ITEM_SLOT_" diff --git a/html/changelogs/archive/2022-02.yml b/html/changelogs/archive/2022-02.yml index 1eb25fe86d..5cf9a38054 100644 --- a/html/changelogs/archive/2022-02.yml +++ b/html/changelogs/archive/2022-02.yml @@ -169,3 +169,6 @@ 2022-02-26: BongaTheProto: - bugfix: Lewd verbs will actually count for the target's feet when needed + Putnam3145: + - balance: Now slightly easier to get 50,000 points with toxins (50,000 point baseline + changed from 200 light range to 175) diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi index 8992f4a4a104de0e727b17623492a60598ea59f3..f968d158601eab3e41261e216f8f6877f43f00ad 100644 GIT binary patch literal 16140 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 literal 16000 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[partner]'s face.", "presses [u_His] footwear down hard on [partner]'s face.", "rubs off the dirt from [u_His] [get_shoes()] onto [partner]'s face."))]
    " @@ -1413,7 +1413,7 @@ "runs the soles of [u_His] bare feet against [partner]'s lips."))]
    " else if(is_fucking(partner, GRINDING_MOUTH_WITH_FEET)) - if(get_item_by_slot(SLOT_SHOES) != null) + if(get_item_by_slot(ITEM_SLOT_FEET) != null) message = "[pick(list("pulls [u_His] [get_shoes()] out of [partner]'s mouth and puts them on [t_His] face.", "slowly retracts [u_His] [get_shoes()] from [partner]'s mouth, putting them on [t_His] face instead."))]
    " else @@ -1423,7 +1423,7 @@ set_is_fucking(partner , GRINDING_FACE_WITH_FEET, null) else - if(get_item_by_slot(SLOT_SHOES) != null) + if(get_item_by_slot(ITEM_SLOT_FEET) != null) message = "[pick(list("plants [u_His] [get_shoes()] ontop of [partner]'s face.", "rests [u_His] [get_shoes()] on [partner]'s face and presses down hard.", "harshly places [u_His] [get_shoes()] atop [partner]'s face."))]
    " @@ -1452,7 +1452,7 @@ var/t_S = partner.p_s() if(is_fucking(partner, GRINDING_MOUTH_WITH_FEET)) - if(get_item_by_slot(SLOT_SHOES) != null) + if(get_item_by_slot(ITEM_SLOT_FEET) != null) message = "[pick(list("roughly shoves [u_His] [get_shoes()] deeper into [partner]'s mouth.", "harshly forces another inch of [u_His] [get_shoes()] into [partner]'s mouth.", "presses [u_His] weight down, [u_His] [get_shoes()] prying deeper into [partner]'s mouth."))]
    " @@ -1462,7 +1462,7 @@ "roughly grinds [u_His] feet on [partner]'s tongue."))]" else if(is_fucking(partner, GRINDING_FACE_WITH_FEET)) - if(get_item_by_slot(SLOT_SHOES) != null) + if(get_item_by_slot(ITEM_SLOT_FEET) != null) message = "[pick(list("decides to force [u_His] [get_shoes()] deep into [partner]'s mouth.", "pressed the tip of [u_His] [get_shoes()] against [partner]'s lips and shoves inwards."))]" else @@ -1472,7 +1472,7 @@ set_is_fucking(partner , GRINDING_MOUTH_WITH_FEET, null) else - if(get_item_by_slot(SLOT_SHOES) != null) + if(get_item_by_slot(ITEM_SLOT_FEET) != null) message = "[pick(list("readies themselves and in one swift motion, shoves [u_His] [get_shoes()] into [partner]'s mouth.", "grinds the tip of [u_His] [get_shoes()] against [partner]'s mouth before pushing themselves in."))]" else @@ -1619,7 +1619,7 @@ partner.handle_post_sex(NORMAL_LUST, CUM_TARGET_FEET, src) /mob/living/proc/get_shoes(var/singular = FALSE) - var/obj/A = get_item_by_slot(SLOT_SHOES) + var/obj/A = get_item_by_slot(ITEM_SLOT_FEET) if(A) var/txt = A.name if(findtext (A.name,"the")) diff --git a/modular_sand/code/datums/interactions/lewd/lewd_interactions.dm b/modular_sand/code/datums/interactions/lewd/lewd_interactions.dm index 8efa94397b..c9924f9489 100644 --- a/modular_sand/code/datums/interactions/lewd/lewd_interactions.dm +++ b/modular_sand/code/datums/interactions/lewd/lewd_interactions.dm @@ -533,7 +533,7 @@ var/client/ucli = LM.client if(cli.prefs.extremepref != "No") if(!ucli || (ucli.prefs.extremepref != "No")) - if(!get_item_by_slot(ITEM_SLOT_EARS)) + if(!get_item_by_slot(ITEM_SLOT_EARS_LEFT) && !get_item_by_slot(ITEM_SLOT_EARS_RIGHT)) if(has_ears()) dat += "...have unprotected ears." else diff --git a/modular_sand/code/game/objects/items/chrono_eraser.dm b/modular_sand/code/game/objects/items/chrono_eraser.dm index 6581f7b702..ccf784bc70 100644 --- a/modular_sand/code/game/objects/items/chrono_eraser.dm +++ b/modular_sand/code/game/objects/items/chrono_eraser.dm @@ -38,7 +38,7 @@ user.put_in_hands(PA) /obj/item/chrono_eraser/item_action_slot_check(slot, mob/user, datum/action/A) - if(slot == SLOT_BACK) + if(slot == ITEM_SLOT_BACK) return 1 /obj/item/gun/energy/chrono_gun diff --git a/modular_sand/code/game/objects/items/devices/radio/headset.dm b/modular_sand/code/game/objects/items/devices/radio/headset.dm index be43380c55..8e537a4037 100644 --- a/modular_sand/code/game/objects/items/devices/radio/headset.dm +++ b/modular_sand/code/game/objects/items/devices/radio/headset.dm @@ -10,6 +10,6 @@ /obj/item/radio/headset/talk_into(mob/living/M, message, channel, list/spans, datum/language/language, list/message_mods, direct = TRUE) if(!listening) return ITALICS | REDUCE_RANGE - if(radiosound) + if(on || (M || message) || !wires.is_cut(WIRE_TX) || M.IsVocal() || (language != /datum/language/signlanguage) || radiosound) playsound(M, radiosound, rand(20, 30), 0, 0, 1) . = ..() diff --git a/modular_sand/code/game/objects/items/devices/radio/radio.dm b/modular_sand/code/game/objects/items/devices/radio/radio.dm deleted file mode 100644 index c9d96d786b..0000000000 --- a/modular_sand/code/game/objects/items/devices/radio/radio.dm +++ /dev/null @@ -1,2 +0,0 @@ -/obj/item/radio/headset - slot_flags = ITEM_SLOT_EARS diff --git a/modular_sand/code/game/objects/items/fleshlight.dm b/modular_sand/code/game/objects/items/fleshlight.dm index 968b6b91b8..738c87230a 100644 --- a/modular_sand/code/game/objects/items/fleshlight.dm +++ b/modular_sand/code/game/objects/items/fleshlight.dm @@ -144,7 +144,7 @@ if(!useable) to_chat(user, "It seems the device has failed or your partner is not wearing their device.") if(message) - var/mob/living/carbon/human/portal_target = ishuman(portalunderwear.loc) && portalunderwear.current_equipped_slot == SLOT_W_UNDERWEAR ? portalunderwear.loc : null + var/mob/living/carbon/human/portal_target = ishuman(portalunderwear.loc) && portalunderwear.current_equipped_slot == ITEM_SLOT_UNDERWEAR ? portalunderwear.loc : null if(portalunderwear.targetting == "vagina") V = portal_target.getorganslot(ORGAN_SLOT_VAGINA) if(portal_target && (portal_target?.client?.prefs.toggles & VERB_CONSENT || !portal_target.ckey)) @@ -197,7 +197,7 @@ useable = FALSE return if(H) //if the portal panties are on someone. - if(portalunderwear.current_equipped_slot != SLOT_W_UNDERWEAR) + if(portalunderwear.current_equipped_slot != ITEM_SLOT_UNDERWEAR) useable = FALSE return @@ -296,7 +296,7 @@ /obj/item/clothing/underwear/briefs/panties/portalpanties/equipped(mob/user, slot) . = ..() switch(slot) - if(SLOT_W_UNDERWEAR) + if(ITEM_SLOT_UNDERWEAR) if(!portallight) audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*") playsound(src, 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) diff --git a/modular_sand/code/modules/client/loadout/accessories.dm b/modular_sand/code/modules/client/loadout/accessories.dm index ca35c063ad..a317069bf4 100644 --- a/modular_sand/code/modules/client/loadout/accessories.dm +++ b/modular_sand/code/modules/client/loadout/accessories.dm @@ -1,6 +1,6 @@ /datum/gear/accessories/ring category = LOADOUT_CATEGORY_GLOVES - slot = SLOT_GLOVES + slot = ITEM_SLOT_HANDS /datum/gear/accessories/ring/goldring name = "A gold ring" diff --git a/modular_sand/code/modules/client/loadout/boxers.dm b/modular_sand/code/modules/client/loadout/boxers.dm index 02aed40102..c55b799581 100644 --- a/modular_sand/code/modules/client/loadout/boxers.dm +++ b/modular_sand/code/modules/client/loadout/boxers.dm @@ -2,7 +2,7 @@ name = "Briefs" category = LOADOUT_CATEGORY_GENERAL_UNDER subcategory = LOADOUT_SUBCATEGORY_UNDERWEAR - slot = SLOT_W_UNDERWEAR + slot = ITEM_SLOT_UNDERWEAR has_colors = TRUE path = /obj/item/clothing/underwear/briefs cost = 0 diff --git a/modular_sand/code/modules/client/loadout/shirts.dm b/modular_sand/code/modules/client/loadout/shirts.dm index 13b71795d7..8583f71696 100644 --- a/modular_sand/code/modules/client/loadout/shirts.dm +++ b/modular_sand/code/modules/client/loadout/shirts.dm @@ -2,7 +2,7 @@ name = "Shirt" category = LOADOUT_CATEGORY_GENERAL_UNDER subcategory = LOADOUT_SUBCATEGORY_SHIRT - slot = SLOT_W_SHIRT + slot = ITEM_SLOT_SHIRT has_colors = TRUE path = /obj/item/clothing/underwear/shirt cost = 0 diff --git a/modular_sand/code/modules/client/loadout/socks.dm b/modular_sand/code/modules/client/loadout/socks.dm index c53dad5e34..56cbca574d 100644 --- a/modular_sand/code/modules/client/loadout/socks.dm +++ b/modular_sand/code/modules/client/loadout/socks.dm @@ -2,7 +2,7 @@ name = "Socks" category = LOADOUT_CATEGORY_GENERAL_UNDER subcategory = LOADOUT_SUBCATEGORY_SOCKS - slot = SLOT_W_SOCKS + slot = ITEM_SLOT_SOCKS has_colors = TRUE path = /obj/item/clothing/underwear/socks cost = 0 diff --git a/modular_sand/code/modules/client/loadout/wrists.dm b/modular_sand/code/modules/client/loadout/wrists.dm index 866472c6da..1120ef8df3 100644 --- a/modular_sand/code/modules/client/loadout/wrists.dm +++ b/modular_sand/code/modules/client/loadout/wrists.dm @@ -2,6 +2,6 @@ name = "steampunk watch" category = LOADOUT_CATEGORY_WRISTS subcategory = LOADOUT_SUBCATEGORY_WATCHES - slot = SLOT_WRISTS + slot = ITEM_SLOT_WRISTS path = /obj/item/clothing/wrists/clockwork_watch cost = 0 diff --git a/modular_sand/code/modules/clothing/gloves/_gloves.dm b/modular_sand/code/modules/clothing/gloves/_gloves.dm index 51044d77fb..b1984e9770 100644 --- a/modular_sand/code/modules/clothing/gloves/_gloves.dm +++ b/modular_sand/code/modules/clothing/gloves/_gloves.dm @@ -1,9 +1,9 @@ /obj/item/clothing/gloves var/dummy_thick = FALSE // is able to hold accessories on its item - //SKYRAT EDIT - Removed the old attached accessory system. We use a list of accessories instead. + // Sandstorm edit - Removed the old attached accessory system. We use a list of accessories instead. var/list/obj/item/clothing/accessory/ring/attached_accessories = list() var/max_accessories = 1 - //SKYRAT EDIT END + // Sandstorm edit END var/mutable_appearance/accessory_overlay /obj/item/clothing/gloves/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) @@ -20,30 +20,30 @@ . = ..() if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) return - if(length(attached_accessories)) //SKYRAT EDIT + if(length(attached_accessories)) // Sandstorm edit remove_accessory(user) /obj/item/clothing/gloves/equipped(mob/user, slot) ..() - //SKYRAT EDIT + // Sandstorm edit for(var/obj/item/clothing/accessory/ring/attached_accessory in attached_accessories) - if(attached_accessory && slot != SLOT_HANDS && ishuman(user)) + if(attached_accessory && slot != ITEM_SLOT_HANDS && ishuman(user)) var/mob/living/carbon/human/H = user attached_accessory.on_uniform_equip(src, user) if(attached_accessory.above_suit) H.update_inv_wear_suit() - //SKYRAT EDIT END + // Sandstorm edit END /obj/item/clothing/gloves/dropped(mob/user) - //SKYRAT EDIT + // Sandstorm edit for(var/obj/item/clothing/accessory/ring/attached_accessory in attached_accessories) attached_accessory.on_uniform_dropped(src, user) if(ishuman(user)) var/mob/living/carbon/human/H = user if(attached_accessory.above_suit) H.update_inv_wear_suit() - //SKYRAT EDIT END + // Sandstorm edit END ..() /obj/item/clothing/gloves/proc/attach_accessory(obj/item/I, mob/user, notifyAttach = 1) @@ -70,14 +70,14 @@ if((flags_inv & HIDEACCESSORY) || (A.flags_inv & HIDEACCESSORY)) return TRUE - //SKYRAT EDIT + // Sandstorm edit accessory_overlay = mutable_appearance(I.mob_overlay_icon, I.item_state) for(var/obj/item/clothing/accessory/ring/attached_accessory in attached_accessories) var/mutable_appearance/Y = mutable_appearance(attached_accessory.mob_overlay_icon, attached_accessory.icon_state, ABOVE_HUD_LAYER) Y.alpha = attached_accessory.alpha Y.color = attached_accessory.color accessory_overlay.add_overlay(Y) - //SKYRAT EDIT END + // Sandstorm edit END if(ishuman(loc)) var/mob/living/carbon/human/H = loc @@ -91,10 +91,10 @@ if(!can_use(user)) return - //SKYRAT EDIT + // Sandstorm edit if(length(attached_accessories)) var/obj/item/clothing/accessory/ring/A = attached_accessories[length(attached_accessories)] - //SKYRAT EDIT END + // Sandstorm edit END A.detach(src, user) if(user.put_in_hands(A)) to_chat(user, "You detach [A] from [src].") diff --git a/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm b/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm index 2faa39fc7f..921472d05d 100644 --- a/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm +++ b/modular_sand/code/modules/clothing/spacesuits/hardsuit.dm @@ -43,7 +43,7 @@ /obj/item/clothing/head/helmet/space/hardsuit/powerarmor/equipped(mob/living/carbon/human/user, slot) ..() - if (slot == SLOT_HEAD) + if (slot == ITEM_SLOT_HEAD) var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] DHUD.add_hud_to(user) diff --git a/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm b/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm index c0853ca76c..300142a316 100644 --- a/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm +++ b/modular_sand/code/modules/mining/lavaland/necropolis_chests.dm @@ -964,7 +964,7 @@ var/numUses = 1 /obj/item/clothing/neck/necklace/necklace_of_the_forsaken/item_action_slot_check(slot) - return (..() && (slot == SLOT_NECK)) + return (..() && (slot == ITEM_SLOT_NECK)) /obj/item/clothing/neck/necklace/necklace_of_the_forsaken/dropped(mob/user) ..() diff --git a/modular_sand/code/modules/mob/living/carbon/human/human_stripping.dm b/modular_sand/code/modules/mob/living/carbon/human/human_stripping.dm index 9110c6a432..762e4be58b 100644 --- a/modular_sand/code/modules/mob/living/carbon/human/human_stripping.dm +++ b/modular_sand/code/modules/mob/living/carbon/human/human_stripping.dm @@ -1,19 +1,19 @@ /datum/strippable_item/mob_item_slot/ears_extra key = STRIPPABLE_ITEM_EARS_EXTRA - item_slot = SLOT_EARS_RIGHT + item_slot = ITEM_SLOT_EARS_RIGHT /datum/strippable_item/mob_item_slot/wrists key = STRIPPABLE_ITEM_WRISTS - item_slot = SLOT_WRISTS + item_slot = ITEM_SLOT_WRISTS /datum/strippable_item/mob_item_slot/socks key = STRIPPABLE_ITEM_SOCKS - item_slot = SLOT_W_SOCKS + item_slot = ITEM_SLOT_SOCKS /datum/strippable_item/mob_item_slot/underwear key = STRIPPABLE_ITEM_UNDERWEAR - item_slot = SLOT_W_UNDERWEAR + item_slot = ITEM_SLOT_UNDERWEAR /datum/strippable_item/mob_item_slot/undershirt key = STRIPPABLE_ITEM_UNDERSHIRT - item_slot = SLOT_W_SHIRT + item_slot = ITEM_SLOT_SHIRT diff --git a/tgstation.dme b/tgstation.dme index bf27c2ed7f..9c0246dd74 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1485,6 +1485,7 @@ #include "code\modules\admin\outfits.dm" #include "code\modules\admin\permissionedit.dm" #include "code\modules\admin\player_panel.dm" +#include "code\modules\admin\playtimes.dm" #include "code\modules\admin\sound_emitter.dm" #include "code\modules\admin\sql_message_system.dm" #include "code\modules\admin\stickyban.dm" @@ -2275,6 +2276,7 @@ #include "code\modules\food_and_drinks\recipes\tablecraft\recipes_spaghetti.dm" #include "code\modules\games\cas.dm" #include "code\modules\games\unum.dm" +#include "code\modules\holiday\dynamic.dm" #include "code\modules\holiday\easter.dm" #include "code\modules\holiday\holidays.dm" #include "code\modules\holiday\halloween\bartholomew.dm" @@ -3920,7 +3922,6 @@ #include "modular_sand\code\game\objects\items\devices\extra_arm.dm" #include "modular_sand\code\game\objects\items\devices\PDA\PDA.dm" #include "modular_sand\code\game\objects\items\devices\radio\headset.dm" -#include "modular_sand\code\game\objects\items\devices\radio\radio.dm" #include "modular_sand\code\game\objects\items\plushes\goat_boss.dm" #include "modular_sand\code\game\objects\items\plushes\plushes.dm" #include "modular_sand\code\game\objects\items\robot\robot_upgrades.dm" diff --git a/tgui/packages/tgui/interfaces/Limbgrower.js b/tgui/packages/tgui/interfaces/Limbgrower.js index b91c7e4b45..e7e04d4f51 100644 --- a/tgui/packages/tgui/interfaces/Limbgrower.js +++ b/tgui/packages/tgui/interfaces/Limbgrower.js @@ -1,5 +1,5 @@ import { useBackend, useSharedState } from '../backend'; -import { Box, Button, Dimmer, Icon, LabeledList, Section, Tabs } from '../components'; +import { Box, Button, Dimmer, Icon, LabeledList, Section, Tabs, ProgressBar } from '../components'; import { Window } from '../layouts'; export const Limbgrower = (props, context) => { @@ -22,7 +22,7 @@ export const Limbgrower = (props, context) => { + height={760}> {!!busy && ( @@ -42,12 +42,19 @@ export const Limbgrower = (props, context) => {
    Containing data for {disk['name']},
    Attempting to create genitalia will use the disk's data. + Any Synthetic Frameworks created will + overwrite the race category selected.
    ) : disk['disk'] ? "No data." : "No disk."}
    - {total_reagents} / {max_reagents} reagent capacity used. + {/* Total_reagents could be null or undefined, so let's be safe */ + `Total Reagents/Maximum Reagents: + ${total_reagents ? total_reagents : 0}/${max_reagents}` + } + {reagents.map(reagent => ( @@ -56,13 +63,15 @@ export const Limbgrower = (props, context) => { label={reagent.reagent_name} buttons={( act('empty_reagent', { - reagent_type: reagent.reagent_type, - })} /> + onClick={() => { + act('empty_reagent', { reagent_type: reagent.reagent_type }); + + }} /> )}> {reagent.reagent_amount}u diff --git a/tgui/packages/tgui/interfaces/PlayerPlaytimes.js b/tgui/packages/tgui/interfaces/PlayerPlaytimes.js new file mode 100644 index 0000000000..0996b0ba04 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PlayerPlaytimes.js @@ -0,0 +1,119 @@ +import { useBackend } from '../backend'; +import { Button, Icon, Section, Table, Tooltip } from '../components'; +import { Window } from '../layouts'; + +export const PlayerPlaytimes = (props, context) => { + const { act, data } = useBackend(context); + const { + clients, + } = data; + return ( + + +
    + + + +
    + +
    +
    + +
    + Ckey +
    +
    + +
    + Real Name +
    +
    + +
    + Actions +
    +
    +
    + {clients.map(client => ( + + +
    +
    +
    + +
    + {!!client.new_account + && ( + + + + )} {client.ckey} +
    +
    + +
    + {!client.ingame ? (At lobby) + : (!!client.observer + && ( + + + ))} {client.name} +
    +
    + +
    +
    +
    +
    +
    + ))} +
    +
    +
    +
    + ); +};