From fc4ad4060b08ef559cbfa57e8a40362eb5f2e5d5 Mon Sep 17 00:00:00 2001 From: Chaplain Maximum Date: Wed, 6 Mar 2024 21:11:24 +0300 Subject: [PATCH 001/311] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=20=D0=BF=D1=83=D1=88=D0=B5=D0=BA=20=D0=9A=D0=B8=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Господи, это же еще править... --- maps/torch_fd/fd_torch.dm | 1 + mods/fd_guns/README.md | 79 ++++++ mods/fd_guns/_fd_guns.dm | 4 + mods/fd_guns/_fd_guns.dme | 21 ++ mods/fd_guns/code/ammo/boxes.dm | 233 ++++++++++++++++ mods/fd_guns/code/ammo/bullets.dm | 109 ++++++++ mods/fd_guns/code/guns/automatic.dm | 270 +++++++++++++++++++ mods/fd_guns/code/guns/energy.dm | 66 +++++ mods/fd_guns/code/guns/pistol.dm | 66 +++++ mods/fd_guns/code/guns/shotgun.dm | 62 +++++ mods/fd_guns/code/guns/sniper.dm | 115 ++++++++ mods/fd_guns/code/projectiles.dm | 167 ++++++++++++ mods/fd_guns/icons/bullupsmg_cpps.dmi | Bin 0 -> 2300 bytes mods/fd_guns/icons/magnum_cpps.dmi | Bin 0 -> 1683 bytes mods/fd_guns/icons/pistol_iccgn.dmi | Bin 0 -> 2432 bytes mods/fd_guns/icons/precise_gkk.dmi | Bin 0 -> 1788 bytes mods/fd_guns/icons/sniperrifle_iccgn.dmi | Bin 0 -> 1656 bytes mods/fd_guns/icons/weapon_cpss_character.dmi | Bin 0 -> 11812 bytes mods/fd_guns/icons/weapon_cpss_icon.dmi | Bin 0 -> 13591 bytes mods/fd_guns/icons/weapon_gkk_character.dmi | Bin 0 -> 13814 bytes mods/fd_guns/icons/weapon_gkk_icon.dmi | Bin 0 -> 14640 bytes 21 files changed, 1193 insertions(+) create mode 100644 mods/fd_guns/README.md create mode 100644 mods/fd_guns/_fd_guns.dm create mode 100644 mods/fd_guns/_fd_guns.dme create mode 100644 mods/fd_guns/code/ammo/boxes.dm create mode 100644 mods/fd_guns/code/ammo/bullets.dm create mode 100644 mods/fd_guns/code/guns/automatic.dm create mode 100644 mods/fd_guns/code/guns/energy.dm create mode 100644 mods/fd_guns/code/guns/pistol.dm create mode 100644 mods/fd_guns/code/guns/shotgun.dm create mode 100644 mods/fd_guns/code/guns/sniper.dm create mode 100644 mods/fd_guns/code/projectiles.dm create mode 100644 mods/fd_guns/icons/bullupsmg_cpps.dmi create mode 100644 mods/fd_guns/icons/magnum_cpps.dmi create mode 100644 mods/fd_guns/icons/pistol_iccgn.dmi create mode 100644 mods/fd_guns/icons/precise_gkk.dmi create mode 100644 mods/fd_guns/icons/sniperrifle_iccgn.dmi create mode 100644 mods/fd_guns/icons/weapon_cpss_character.dmi create mode 100644 mods/fd_guns/icons/weapon_cpss_icon.dmi create mode 100644 mods/fd_guns/icons/weapon_gkk_character.dmi create mode 100644 mods/fd_guns/icons/weapon_gkk_icon.dmi diff --git a/maps/torch_fd/fd_torch.dm b/maps/torch_fd/fd_torch.dm index bc0c7c50ee08f..209834e14ead1 100644 --- a/maps/torch_fd/fd_torch.dm +++ b/maps/torch_fd/fd_torch.dm @@ -238,6 +238,7 @@ #include "../../mods/fd_assets/_fd_assets.dme" #include "../../mods/accent_labels/_accent_labels.dme" + #include "../../mods/fd_guns/_fd_guns.dme" #include "../../mods/additional_biomods/_additional_biomods.dme" #include "../../mods/ascent/_ascent.dme" #include "../../mods/conference_holopads/_conference_holopads.dme" diff --git a/mods/fd_guns/README.md b/mods/fd_guns/README.md new file mode 100644 index 0000000000000..0f32408d2d170 --- /dev/null +++ b/mods/fd_guns/README.md @@ -0,0 +1,79 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/##### + + + +## Мод-пример + +ID мода: EXAMPLE + + +### Описание мода + +Этот мод служит примером для разработчиков и существует лишь для того, +чтобы его можно было легко скопировать и вставить в другое место. + + +### Изменения *кор кода* + +- `code/modules/mob/living.dm`: `proc/overriden_proc`, `var/overriden_var` + + +### Оверрайды + +- `mods/_master_files/sound/my_cool_sound.ogg` +- `mods/_master_files/code/my_modular_override.dm`: `proc/overriden_proc`, `var/overriden_var` + + +### Дефайны + +- `code/__defines/~mods/example.dm`: `EXAMPLE_SPEED_MULTIPLIER`, `EXAMPLE_SPEED_BASE` + + +### Используемые файлы, не содержащиеся в модпаке + +- `mods/_master_files/icons/obj/alien.dmi` + + +### Авторы: + +Твой никнейм + diff --git a/mods/fd_guns/_fd_guns.dm b/mods/fd_guns/_fd_guns.dm new file mode 100644 index 0000000000000..0ce524d1f3d35 --- /dev/null +++ b/mods/fd_guns/_fd_guns.dm @@ -0,0 +1,4 @@ +/singleton/modpack/fdguns + name = "Фракционное оружие ФД" + desc = "Фракционные пушки ГКК и ЦПСС портированные с ФД." + author = "Chaplain Maximum" diff --git a/mods/fd_guns/_fd_guns.dme b/mods/fd_guns/_fd_guns.dme new file mode 100644 index 0000000000000..5bf116ec9c4a3 --- /dev/null +++ b/mods/fd_guns/_fd_guns.dme @@ -0,0 +1,21 @@ +#ifndef MODPACK_FD_GUNS +#define MODPACK_FD_GUNS + +// Дефайны, которых нету на билде + +#define FULL_AUTO_300 list(mode_name = "full auto", mode_desc = "300 rounds per minute", can_autofire = 1, fire_delay = 8, one_hand_penalty=2) +#define FULL_AUTO_400 list(mode_name = "full auto", mode_desc = "400 rounds per minute", can_autofire = 1, fire_delay = 4, one_hand_penalty=3) +#define FULL_AUTO_600 list(mode_name = "full auto", mode_desc = "600 rounds per minute", can_autofire = 1, fire_delay = 2, one_hand_penalty=4) +#define FULL_AUTO_800 list(mode_name = "fuller auto", mode_desc = "800 rounds per minute", can_autofire = 1 fire_delay = 1, one_hand_penalty=5) + +#include "mods\fd_guns\code\ammo\boxes.dm" +#include "mods\fd_guns\code\ammo\bullets.dm" +#include "mods\fd_guns\code\guns\automatic.dm" +#include "mods\fd_guns\code\guns\energy.dm" +#include "mods\fd_guns\code\guns\pistol.dm" +#include "mods\fd_guns\code\guns\shotgun.dm" +#include "mods\fd_guns\code\guns\sniper.dm" +#include "mods\fd_guns\code\projectiles.dm" + + +#endif diff --git a/mods/fd_guns/code/ammo/boxes.dm b/mods/fd_guns/code/ammo/boxes.dm new file mode 100644 index 0000000000000..435f6d56ff909 --- /dev/null +++ b/mods/fd_guns/code/ammo/boxes.dm @@ -0,0 +1,233 @@ + +/obj/item/ammo_magazine/rifle/fleet + name = "assault rifle magazine" + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "automat4M" + mag_type = MAGAZINE + caliber = CALIBER_RIFLE + ammo_type = /obj/item/ammo_casing/rifle/fleet + max_ammo = 40 + +/obj/item/ammo_magazine/rifle/army + name = "battle rifle magazine" + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "automat3M" + mag_type = MAGAZINE + caliber = CALIBER_RIFLE_MILITARY + ammo_type = /obj/item/ammo_casing/rifle/army + max_ammo = 20 + +/obj/item/ammo_magazine/rifle/iccgn + name = "assault rifle magazine" + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gautomatic2M" + mag_type = MAGAZINE + caliber = CALIBER_RIFLE + ammo_type = /obj/item/ammo_casing/rifle/iccgn + max_ammo = 30 +/obj/item/ammo_magazine/rifle/precise + name = "assault rifle magazine" + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gautomatic1M" + mag_type = MAGAZINE + caliber = CALIBER_RIFLE_MILITARY + ammo_type = /obj/item/ammo_casing/rifle/accurate + max_ammo = 30 + +/obj/item/ammo_magazine/rifle/bolter + name = "heavy battle rifle magazine" + desc = "A magazine for some kind of gun. This one - Armour-Piercing Discarding Sabot(APDS)" + labels = list("APDS") + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gsmg3M" + mag_type = MAGAZINE + caliber = CALIBER_BOLTER + ammo_type = /obj/item/ammo_casing/rifle/bolter + max_ammo = 24 + + +/obj/item/ammo_magazine/rifle/bolter/explosive + desc = "A magazine for some kind of gun." + labels = null + ammo_type = /obj/item/ammo_casing/rifle/bolter/explosive + +// Pistols + +/obj/item/ammo_magazine/pistol/scg + name = "magnum magazine" + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "pistol7M" + mag_type = MAGAZINE + caliber = CALIBER_PISTOL_MAGNUM + matter = list(MATERIAL_STEEL = 1680) + ammo_type = /obj/item/ammo_casing/pistol/magnum + max_ammo = 7 + +/obj/item/ammo_magazine/pistol/scg/rubber + labels = list("rubber") + ammo_type = /obj/item/ammo_casing/pistol/magnum/rubber + +/obj/item/ammo_magazine/pistol/assasin + name = "pistol magazine" + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "pistol6M" + mag_type = MAGAZINE + caliber = CALIBER_PISTOL_FLECHETTE + matter = list(MATERIAL_STEEL = 1050) + ammo_type = /obj/item/ammo_casing/pistol/assasin + max_ammo = 12 + +/obj/item/ammo_magazine/pistol/assasin/rubber + labels = list("rubber") + ammo_type = /obj/item/ammo_casing/pistol/assasin/rubber + + +/obj/item/ammo_magazine/pistol/iccgn + name = "pistol magazine" + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gpistol8M" + mag_type = MAGAZINE + caliber = CALIBER_PISTOL_MAGNUM + matter = list(MATERIAL_STEEL = 1680) + ammo_type = /obj/item/ammo_casing/pistol/iccgn + max_ammo = 15 + +/obj/item/ammo_magazine/pistol/iccgn/rubber + labels = list("rubber") + ammo_type = /obj/item/ammo_casing/pistol/iccgn + + +/obj/item/ammo_magazine/pistol/automatic + name = "automatic pistol magazine" + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gpistol9M" + mag_type = MAGAZINE + matter = list(MATERIAL_STEEL = 2000) + ammo_type = /obj/item/ammo_casing/pistol/automatic + max_ammo = 45 + +/obj/item/ammo_magazine/pistol/automatic/rubber + labels = list("rubber") + ammo_type = /obj/item/ammo_casing/pistol/automatic/rubber + +// SMGs + +/obj/item/ammo_magazine/smg/scg + name = "magazine" + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "smg5M" + mag_type = MAGAZINE + caliber = CALIBER_PISTOL + matter = list(MATERIAL_STEEL = 1500) + ammo_type = /obj/item/ammo_casing/pistol + max_ammo = 35 + +/obj/item/ammo_magazine/smg/scg/rubber + labels = list("rubber") + ammo_type = /obj/item/ammo_casing/pistol/rubber + +/obj/item/ammo_magazine/smg/special/scg + name = "magazine" + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "smg6M" + mag_type = MAGAZINE + caliber = CALIBER_PISTOL + matter = list(MATERIAL_STEEL = 1500) + ammo_type = /obj/item/ammo_casing/pistol + max_ammo = 20 + +/obj/item/ammo_magazine/smg/special/scg/rubber + labels = list("rubber") + ammo_type = /obj/item/ammo_casing/pistol/rubber + +// Other stuff + +/obj/item/ammo_magazine/shotgun/scg + name = "shotgun drum" + labels = list("slugs") + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "shotgun4M" + mag_type = MAGAZINE + caliber = CALIBER_SHOTGUN + ammo_type = /obj/item/ammo_casing/shotgun + matter = list(MATERIAL_STEEL = 3180) // 8 slugs + Drum + max_ammo = 8 + +/obj/item/ammo_magazine/shotgun/scg/shell + labels = list("shells") + ammo_type = /obj/item/ammo_casing/shotgun/pellet + matter = list(MATERIAL_STEEL = 3180) + +/obj/item/ammo_magazine/shotgun/scg/beanbag + labels = list("beanbags") + ammo_type = /obj/item/ammo_casing/shotgun/beanbag + matter = list(MATERIAL_STEEL = 1790) + +/obj/item/ammo_magazine/shotgun/scg/empty + matter = list(MATERIAL_STEEL = 350) + initial_ammo = 0 + +/obj/item/ammo_magazine/shotgun/iccgn + name = "shotgun drum" + labels = list("slugs") + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gshotgun2M" + mag_type = MAGAZINE + caliber = CALIBER_SHOTGUN + ammo_type = /obj/item/ammo_casing/shotgun + matter = list(MATERIAL_STEEL = 5600) + max_ammo = 15 + +/obj/item/ammo_magazine/shotgun/iccgn/beanbag + labels = list("beanbags") + ammo_type = /obj/item/ammo_casing/shotgun/beanbag + matter = list(MATERIAL_STEEL = 2790) + +/obj/item/ammo_magazine/shotgun/iccgn/magnum + desc = "When you need to oblitirate enemy" + labels = list("magnum") + ammo_type = /obj/item/ammo_casing/magnum/shotgun + matter = list(MATERIAL_STEEL = 5600) + +/obj/item/ammo_magazine/shotgun/iccgn/empty + matter = list(MATERIAL_STEEL = 350) + initial_ammo = 0 + +/obj/item/ammo_magazine/sniper/scg + name = "magazine" + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "sniperrifle2M" + mag_type = MAGAZINE + caliber = CALIBER_RIFLE_MILITARY + ammo_type = /obj/item/ammo_casing/rifle/military/marksman + matter = list(MATERIAL_STEEL = 3550) + max_ammo = 15 + +/obj/item/ammo_magazine/sniper/iccgn + name = "magazine" + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gsniperrifle4M" + mag_type = MAGAZINE + caliber = CALIBER_RIFLE_MILITARY + ammo_type = /obj/item/ammo_casing/scg/shell + matter = list(MATERIAL_STEEL = 3550) + max_ammo = 7 + +/obj/item/ammo_magazine/speedloader/dmr + name = "marksman stripper clip" + desc = "A stripper clip for rifle caliber weapons." + icon_state = "iclipr" + caliber = CALIBER_RIFLE_MILITARY + ammo_type = /obj/item/ammo_casing/rifle/dmr + max_ammo = 8 + multiple_sprites = 1 + +/obj/item/ammo_magazine/speedloader/dmr/apds + labels = list("APDS") + ammo_type = /obj/item/ammo_casing/rifle/dmr/apds + max_ammo = 4 + +/obj/item/ammo_magazine/speedloader/dmr/haywire + labels = list("haywire") + ammo_type = /obj/item/ammo_casing/rifle/dmr/haywire + max_ammo = 4 diff --git a/mods/fd_guns/code/ammo/bullets.dm b/mods/fd_guns/code/ammo/bullets.dm new file mode 100644 index 0000000000000..af916ff80a21e --- /dev/null +++ b/mods/fd_guns/code/ammo/bullets.dm @@ -0,0 +1,109 @@ +/obj/item/ammo_casing/pistol/iccgn + projectile_type = /obj/item/projectile/bullet/pistol/iccgn + caliber = CALIBER_PISTOL_MAGNUM + +/obj/item/ammo_casing/pistol/automatic + projectile_type = /obj/item/projectile/bullet/pistol/automatic +/obj/item/ammo_casing/pistol/assasin + caliber = CALIBER_PISTOL_FLECHETTE + +/obj/item/ammo_casing/pistol/assasin/rubber + desc = "A rubber pistol bullet casing." + projectile_type = /obj/item/projectile/bullet/pistol/rubber + icon_state = "pistolcasing_r" + caliber = CALIBER_PISTOL_FLECHETTE + +/obj/item/ammo_casing/pistol/automatic/rubber + projectile_type = /obj/item/projectile/bullet/pistol/automatic/rubber + +/obj/item/ammo_casing/rifle/military/marksman + projectile_type = /obj/item/projectile/bullet/rifle/marksman + +/obj/item/ammo_casing/scg/shell + name = "shell casing" + desc = "An antimaterial shell casing." + icon_state = "lcasing" + spent_icon = "lcasing-spent" + caliber = CALIBER_ANTIMATERIAL + projectile_type = /obj/item/projectile/bullet/rifle/shell + matter = list(MATERIAL_STEEL = 1250) + +/obj/item/ammo_casing/scg/shell/apds + name = "\improper APDS shell casing" + desc = "An Armour Piercing Discarding Sabot shell." + projectile_type = /obj/item/projectile/bullet/rifle/shell/apds + +/obj/item/ammo_casing/scg/shell/explosive + name = "HE shell casing" + desc = "An antimaterial shell casing with explosive" + projectile_type = /obj/item/projectile/bullet/rifle/shell/explosive + +/obj/item/ammo_casing/scg/shell/emp + name = "haywire shell casing" + projectile_type = /obj/item/projectile/ion/heavy + matter = list(MATERIAL_STEEL = 1100, MATERIAL_URANIUM = 300) + +/obj/item/ammo_casing/rifle/fleet + desc = "A rifle bullet casing." + caliber = CALIBER_RIFLE + projectile_type = /obj/item/projectile/bullet/rifle/fleet + icon_state = "riflecasing" + spent_icon = "riflecasing-spent" + +/obj/item/ammo_casing/rifle/army + desc = "A rifle bullet casing." + caliber = CALIBER_RIFLE_MILITARY + projectile_type = /obj/item/projectile/bullet/rifle/army + icon_state = "riflecasing" + spent_icon = "riflecasing-spent" + +/obj/item/ammo_casing/rifle/iccgn + desc = "A rifle bullet casing" + caliber = CALIBER_RIFLE + projectile_type = /obj/item/projectile/bullet/rifle + icon_state = "riflecasing" + spent_icon = "riflecasing-spent" + +/obj/item/ammo_casing/rifle/accurate + desc = "A rifle bullet casing" + caliber = CALIBER_RIFLE_MILITARY + projectile_type = /obj/item/projectile/bullet/rifle/accurate + icon_state = "riflecasing" + spent_icon = "riflecasing-spent" + +/obj/item/ammo_casing/rifle/bolter + desc = "A heavy battle rifle casing. This one - Armour-Piercing Discarding Sabot(APDS)" + caliber = CALIBER_BOLTER + projectile_type = /obj/item/projectile/bullet/rifle/bolter + icon_state = "lcasing" + spent_icon = "lcasing-spent" + +/obj/item/ammo_casing/rifle/bolter/explosive + desc = "A heavy battle rifle casing." + projectile_type = /obj/item/projectile/bullet/rifle/bolter/explosive + +/obj/item/ammo_casing/sniper //emp + name = "haywire shell casing" + projectile_type = /obj/item/projectile/ion/heavy + matter = list(MATERIAL_STEEL = 1100, MATERIAL_URANIUM = 300) + +/obj/item/ammo_casing/rifle/dmr + desc = "A rifle bullet casing" + caliber = CALIBER_RIFLE_MILITARY + projectile_type = /obj/item/projectile/bullet/rifle/marksman/dmr + icon_state = "riflecasing" + spent_icon = "riflecasing-spent" + +/obj/item/ammo_casing/rifle/dmr/apds + desc = "A rifle bullet casing" + caliber = CALIBER_RIFLE_MILITARY + projectile_type = /obj/item/projectile/bullet/rifle/marksman/dmr/apds + icon_state = "riflecasing" + spent_icon = "riflecasing-spent" + +/obj/item/ammo_casing/rifle/dmr/haywire + desc = "A rifle bullet casing. Haywire one." + caliber = CALIBER_RIFLE_MILITARY + projectile_type = /obj/item/projectile/ion + icon_state = "riflecasing" + spent_icon = "riflecasing-spent" diff --git a/mods/fd_guns/code/guns/automatic.dm b/mods/fd_guns/code/guns/automatic.dm new file mode 100644 index 0000000000000..57029a4d440bb --- /dev/null +++ b/mods/fd_guns/code/guns/automatic.dm @@ -0,0 +1,270 @@ +// SCG + +// Automatic Rifles. High Speed, mid cal. +/obj/item/gun/projectile/automatic/scg // Я сам не ебу, но оно было помечено как автомат - Максимум. + name = "assault rifle" + desc = "A standard assault rifle in service with the SCG Fleet. Appreciated for its good velocity and not inferior caliber with blunt-nosed projectiles designed to be fired without risk of damaging thin bulkheads." + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "automat4" + item_state = "automat4" + w_class = ITEM_SIZE_HUGE + force = 10 + caliber = CALIBER_RIFLE + slot_flags = SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/rifle/fleet + allowed_magazines = /obj/item/ammo_magazine/rifle/fleet + one_hand_penalty = 6 + recoil_buildup = 2.4 + accuracy = -2 + bulk = GUN_BULK_RIFLE + 1 + wielded_item_state = "automat4" + mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' + mag_remove_sound = 'sound/weapons/guns/interaction/ltrifle_magout.ogg' + //Assault rifle, burst fire degrades quicker than SMG, worse one-handing penalty, slightly increased move delay + init_firemodes = list( + BURST_3_ROUND, + list(mode_name = "full auto", mode_desc = "600 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 2) + ) + +/obj/item/gun/projectile/automatic/scg/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "automat4" + else + icon_state = "automat4-empty" + +/obj/item/gun/projectile/automatic/scg/army + name = "battle rifle" + desc = "The heavy rifle of the Sol Gov army, beloved by them for its high armor penetration rates. However, it's unlikely to fit comfortably on a bulletproof vest." + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "automat3" + item_state = "automat3" + w_class = ITEM_SIZE_HUGE + force = 10 + caliber = CALIBER_RIFLE_MILITARY + slot_flags = SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/rifle/army + allowed_magazines = /obj/item/ammo_magazine/rifle/army + one_hand_penalty = 10 + recoil_buildup = 3.5 + accuracy = -1 + bulk = GUN_BULK_RIFLE + 5 + wielded_item_state = "automat3" + mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' + mag_remove_sound = 'sound/weapons/guns/interaction/ltrifle_magout.ogg' + init_firemodes = list( + list(mode_name = "semiauto", mode_desc = "Semi auto, but with some kind of cooldown", burst=1, fire_delay=5, move_delay=3, one_hand_penalty=6), + list(mode_name="3-round bursts", mode_desc = "Short, controlled bursts", burst=3, fire_delay=10, move_delay=5), + ) + +/obj/item/gun/projectile/automatic/scg/army/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "automat3" + else + icon_state = "automat3-empty" + +// SMGS + +/obj/item/gun/projectile/automatic/scg/smg + name = "submachine gun" + desc = "A submachine gun valued for its compactness, cheapness and lightness. However, it is unlikely to shoot you in the head.." + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "smg5" + item_state = "smg5" + w_class = ITEM_SIZE_NORMAL + caliber = CALIBER_PISTOL + slot_flags = SLOT_BELT + wielded_item_state = "smg5" + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/smg/scg + allowed_magazines = /obj/item/ammo_magazine/smg/scg + accuracy = 1 + one_hand_penalty = 3 + init_firemodes = list( + BURST_3_ROUND, + BURST_5_ROUND, + FULL_AUTO_800 + ) + +/obj/item/gun/projectile/automatic/scg/smg/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "smg5" + else + icon_state = "smg5-empty" + +/obj/item/gun/projectile/automatic/scg/smg/special + name = "special ops smg" + desc = "A new model of submachine gun, for short and medium ranges. Made to order by SolGov Special Operations units" + icon = 'mods/fd_guns/icons/bullupsmg_cpps.dmi' + icon_state = "smg6" + item_state = "smg6" + wielded_item_state = "smg6" + w_class = ITEM_SIZE_LARGE + force = 6 + caliber = CALIBER_PISTOL + slot_flags = SLOT_BELT|SLOT_BACK + recoil_buildup = 1.5 + magazine_type = /obj/item/ammo_magazine/smg/special/scg + allowed_magazines = /obj/item/ammo_magazine/smg/special/scg + fire_sound = 'sound/weapons/gunshot/gunshot_smg.ogg' + auto_eject = 1 + auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' + bulk = -1 + accuracy = 0 + one_hand_penalty = 4 + init_firemodes = list( + SEMI_AUTO_NODELAY, + BURST_2_ROUND, + FULL_AUTO_600 + ) + +/obj/item/gun/projectile/automatic/scg/smg/special/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "smg6" + if(!ammo_magazine || !LAZYLEN(ammo_magazine.stored_ammo)) + icon_state = "smg6-empty" + overlays += image(icon, "ammo_bad") + else if(LAZYLEN(ammo_magazine.stored_ammo) <= 0.5 * ammo_magazine.max_ammo) + overlays += image(icon, "ammo_warn") + return + else + overlays += image(icon, "ammo_ok") + +// ICСGN + +/obj/item/gun/projectile/automatic/iccgn + name = "automatic rifle" + desc = "Heldan Assault Rifle (HAR), designed for fast, close and medium range assault combat." + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gautomatic2" + item_state = "gautomatic2" + slot_flags = SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/rifle/iccgn + allowed_magazines = /obj/item/ammo_magazine/rifle/iccgn + accuracy = 0 + recoil_buildup = 3 + one_hand_penalty = 4 + caliber = CALIBER_RIFLE + bulk = GUN_BULK_RIFLE + 1 + wielded_item_state = "gautomatic2" + init_firemodes = list( + list(mode_name = "semiauto", mode_desc = "Fire as fast as you can pull the trigger", burst=1, fire_delay=0, move_delay=null, accuracy=0), + list(mode_name = "full auto", mode_desc = "400 rounds per minute", mode_type = /datum/firemode/automatic, fire_delay = 4, one_hand_penalty=8, accuracy=-2) + ) + +/obj/item/gun/projectile/automatic/iccgn/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "[item_state]" + else + icon_state = "[item_state]-empty" + +/obj/item/gun/projectile/automatic/iccgn/precise + name = "battle rifle" + desc = "Drogan's Marksman Rifle - 213 (DMR - 213), designed for long range warfare as opposed to the not-so-accurate Heldan Automatic Rifle. " + icon = 'mods/fd_guns/icons/precise_gkk.dmi' + icon_state = "gautomatic1" + item_state = "gautomatic1" + slot_flags = SLOT_BACK + load_method = MAGAZINE + caliber = CALIBER_RIFLE_MILITARY + magazine_type = /obj/item/ammo_magazine/rifle/precise + allowed_magazines = /obj/item/ammo_magazine/rifle/precise + accuracy = 1 + recoil_buildup = 4 + one_hand_penalty = 7 + bulk = GUN_BULK_RIFLE + 2 + wielded_item_state = "gautomatic1" + init_firemodes = list( + list(mode_name="3-round bursts", mode_desc = "Short, controlled bursts", burst=3, fire_delay=4, move_delay=6, accuracy=0), + list(mode_name = "semiauto", mode_desc = "Fire as fast, as your gun give you to do it", burst=1, fire_delay=2, move_delay=4, accuracy= 1) + ) + +/obj/item/gun/projectile/automatic/iccgn/precise/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "gautomatic1" + if(!ammo_magazine || !LAZYLEN(ammo_magazine.stored_ammo)) + icon_state = "gautomatic1-empty" + overlays += image(icon, "ammo_bad") + else if(LAZYLEN(ammo_magazine.stored_ammo) <= 0.5 * ammo_magazine.max_ammo) + overlays += image(icon, "ammo_warn") + return + else + overlays += image(icon, "ammo_ok") + +/obj/item/gun/projectile/automatic/iccgn/bolter + name = "heavy battle rifle" + desc = "Heavy battle rifle Barracuda-31, designed specifically for APCs, but converted to a more mobile state. Designed to destroy heavily armoured soldiers and lightly armoured vehicles, mechs. Just... run, if you see it. " + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gsmg3" + item_state = "gsmg3" + slot_flags = SLOT_BACK + load_method = MAGAZINE + w_class = ITEM_SIZE_HUGE + caliber = CALIBER_BOLTER + magazine_type = /obj/item/ammo_magazine/rifle/bolter + allowed_magazines = /obj/item/ammo_magazine/rifle/bolter + accuracy = -3 + recoil_buildup = 20 + one_hand_penalty = 10 + screen_shake = 3 + bulk = GUN_BULK_RIFLE + 5 + wielded_item_state = "gsmg3" + init_firemodes = list( + list(mode_name="3-round bursts", mode_desc = "Short, controlled bursts", burst=3, fire_delay=4, move_delay=6, accuracy=-4), + list(mode_name = "semiauto", mode_desc = "Fire as fast, as your gun give you to do it", burst=1, fire_delay=2, move_delay=4, accuracy= -3) + ) + +/obj/item/gun/projectile/automatic/iccgn/bolter/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0) + if(user.is_species(SPECIES_RESOMI)) + if(alert(user, "[src] too big for you and can LITERALLY KILL YOU, if you will shoot from it!",, "Nevermind", "*krieg suicide noices",) == "Nevermind") + // https://i.redd.it/g3jch6re92v31.png + return + + ..() + + if(!src || !user || safety()) + to_chat(user, SPAN_NOTICE("You can't do that now")) + return + if(user.is_species(SPECIES_RESOMI)) + to_chat(user, SPAN_DANGER("The recoil of the [src] is way too much for you, Resomi")) + var/recoil_dir = 0 + if(user.dir == 1 || user.dir == 4 ) + recoil_dir = user.dir*2 + else if(user.dir == (8 || 2)) + recoil_dir = user.dir/2 + user.adjustBruteLoss(60) + user.Weaken(4) + log_and_message_admins("is fucked by [src]'s obliterating recoil. Stupid xenos...") + user.throw_at(get_step(user,recoil_dir), 5, 10) + else + if(!user.skill_check(SKILL_WEAPONS, SKILL_BASELINE)) + to_chat(user, SPAN_DANGER("Recoil so hurts...")) + user.adjustBruteLoss(15) + +/obj/item/gun/projectile/automatic/iccgn/smg + name = "submachine gun" + desc = "Saudov's submachine gun (SSG-12) made for pilots and crew of armoured vehicles. The small size combines well with rapid suppressive fire. " + icon_state = "gsmg4" + item_state = "gsmg4" + w_class = ITEM_SIZE_NORMAL + caliber = CALIBER_PISTOL + slot_flags = SLOT_BELT + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/smg/iccgn + allowed_magazines = /obj/item/ammo_magazine/smg/iccgn + one_hand_penalty = 4 + accuracy = 0 + wielded_item_state = "gsmg4" + init_firemodes = list( + SEMI_AUTO_NODELAY, + BURST_3_ROUND, + FULL_AUTO_600 + ) diff --git a/mods/fd_guns/code/guns/energy.dm b/mods/fd_guns/code/guns/energy.dm new file mode 100644 index 0000000000000..4ad75e5e0bb5c --- /dev/null +++ b/mods/fd_guns/code/guns/energy.dm @@ -0,0 +1,66 @@ +// SCG + +/obj/item/gun/energy/laser/lasgun + name = "Lasgun" + desc = "Lasgun series D-99 designed specifically for the Fleet. Known for its devastating power, almost unique for lasers." + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "lascar" + item_state = "lascar" + slot_flags = SLOT_BACK + w_class = ITEM_SIZE_HUGE + accuracy = 1 + force = 10 + one_hand_penalty = 4 + battery_changable = TRUE + battery_type = /obj/item/cell/guncell/lasgun + bulk = GUN_BULK_RIFLE + 2 + projectile_type = /obj/item/projectile/bullet/lasbolt/lasgun + wielded_item_state = "laser-wielded" + init_firemodes = list( + list(mode_name="3-round bursts", mode_desc = "Short, controlled bursts", burst=3, fire_delay=2, move_delay=4, accuracy=0, charge_cost=200 ), + list(mode_name = "semiauto", mode_desc = "Fire as fast, as your gun give you to do it", burst=1, fire_delay=2, move_delay=2, accuracy=1, charge_cost=200 ), + list(mode_name = "overcharge", mode_desc = "Powerful shoot", burst=1, fire_delay=4, movedelay=6, + accuracy=0, charge_cost=800, projectile_type = /obj/item/projectile/bullet/lasbolt/overcharge) + ) + +/obj/item/gun/energy/laser/lasgun/on_update_icon() + ..() + if(!power_supply) + icon_state = "lascar-e" + +/obj/item/gun/energy/laser/laspistol + name = "Laspistol" + desc = "Unlike its big brother, the Laspistol series D-99 was made for Fleet Officers and as an auxiliary weapon in case the shit hit the fan.." + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "laspistolciv" + item_state = "laspistolciv" + slot_flags = SLOT_BACK + w_class = ITEM_SIZE_NORMAL + accuracy = 1 + force = 4 + one_hand_penalty = 4 + battery_changable = TRUE + battery_type = /obj/item/cell/guncell/lasgun + bulk = GUN_BULK_RIFLE - 3 + projectile_type = /obj/item/projectile/bullet/lasbolt + init_firemodes = list( + list(mode_name = "semiauto", mode_desc = "Fire as fast, as your gun give you to do it", burst=1, fire_delay=2, move_delay=2, charge_cost=100, accuracy=1), + list(mode_name = "overcharge", mode_desc = "Powerful shoot", burst=1, fire_delay=4, movedelay=6, + accuracy=0, charge_cost=500, projectile_type = /obj/item/projectile/bullet/lasbolt/lasgun) + ) + +/obj/item/gun/energy/laser/laspistol/on_update_icon() + ..() + if(!power_supply) + icon_state = "laspistolciv-e" + +// Cells + +/obj/item/cell/guncell/lasgun + name = "Lasgun power pack" + desc = "Unified power pack for D-99 series Lasguns and Laspistols. According to Fleet Veterans, this battery can be used as explosives. Don't try" + icon = 'icons/obj/power.dmi' + icon_state = "lgpp" + w_class = ITEM_SIZE_SMALL + charge = 4000 + maxcharge = 4000 diff --git a/mods/fd_guns/code/guns/pistol.dm b/mods/fd_guns/code/guns/pistol.dm new file mode 100644 index 0000000000000..97b449f6d9a83 --- /dev/null +++ b/mods/fd_guns/code/guns/pistol.dm @@ -0,0 +1,66 @@ +// SCG + +/obj/item/gun/projectile/pistol/scg + name = "magnum pistol" + desc = "A heavy pistol, popularly called the 'Head Breaker' for its high firepower. Unfortunately, this firepower had to be sacrificed at the expense of speed and ammunition.." + icon = 'mods/fd_guns/icons/magnum_cpps.dmi' + icon_state = "pistol7" + item_state = "pistol7" + magazine_type = /obj/item/ammo_magazine/pistol/scg + allowed_magazines = /obj/item/ammo_magazine/pistol/scg + caliber = CALIBER_PISTOL_MAGNUM + force = 9 + fire_delay = 12 + bulk = 4 + accuracy = 1 + one_hand_penalty = 4 + ammo_indicator = TRUE + +/obj/item/gun/projectile/pistol/scg/assasin + name = "silenced pistol" + desc = "A gun made specifically for SolGov Special Operations units. It has a built-in silencer." + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "pistol6" + item_state = "pistol6" + magazine_type = /obj/item/ammo_magazine/pistol/assasin + allowed_magazines = /obj/item/ammo_magazine/pistol/assasin + caliber = CALIBER_PISTOL_FLECHETTE + force = 9 + silenced = 1 + fire_delay = 4 + accuracy = 2 + one_hand_penalty = 3 + +// ICCGN +/obj/item/gun/projectile/pistol/iccgn + name = "standart pistol" + desc = "Kishevatov Standard Pistol (KSP) made by Kishevatov's designer for quick elimination of soldiers with medium armor." + icon = 'mods/fd_guns/icons/pistol_iccgn.dmi' + icon_state = "gpistol9" + item_state = "gpistol9" + magazine_type = /obj/item/ammo_magazine/pistol/iccgn + allowed_magazines = /obj/item/ammo_magazine/pistol/iccgn + caliber = CALIBER_PISTOL_MAGNUM + force = 10 + accuracy = 1 + fire_delay = 6 + move_delay = 2 + one_hand_penalty = 4 + ammo_indicator = TRUE + +/obj/item/gun/projectile/automatic/pistol/iccgn + name = "automatic pistol" + desc = "Boarding Automatic Pistol - 34 (BAP-34) developed by Heltek Corporation for boarding teams." + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gpistol8" + item_state = "gpistol8" + magazine_type = /obj/item/ammo_magazine/pistol/automatic + allowed_magazines = /obj/item/ammo_magazine/pistol/automatic + caliber = CALIBER_PISTOL + force = 7 + accuracy = 0 + fire_delay = 2 + one_hand_penalty = 2 + init_firemodes = list( + FULL_AUTO_800 + ) diff --git a/mods/fd_guns/code/guns/shotgun.dm b/mods/fd_guns/code/guns/shotgun.dm new file mode 100644 index 0000000000000..6dbb41c8e240d --- /dev/null +++ b/mods/fd_guns/code/guns/shotgun.dm @@ -0,0 +1,62 @@ +// FD + +/obj/item/gun/projectile/shotgun/pump/scg + name = "combat shotgun" + desc = "A pump-action shotgun respected for its reliability and its capacity. However, not as fast firing as the Fleet's favorite." + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "shotgun3" + item_state = "shotgun3" + wielded_item_state = "shotgun3" + origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2) + max_shells = 11 + ammo_type = /obj/item/ammo_casing/shotgun + one_hand_penalty = 8 + +/obj/item/gun/projectile/automatic/shotgun/scg + name = "assault shotgun" + desc = "One of the Fleet's favorite guns. Fast shotgun without the need for painful reloading in combat. Insert, fire, forget." + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "shotgun4" + item_state = "shotgun4" + wielded_item_state = "shotgun4" + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/shotgun/scg + allowed_magazines = /obj/item/ammo_magazine/shotgun/scg + bulk = GUN_BULK_RIFLE + accuracy = -1 + init_firemodes = list( + BURST_3_ROUND, + FULL_AUTO_400 + ) + +/obj/item/gun/projectile/automatic/shotgun/scg/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "shotgun4" + else + icon_state = "shotgun4-empty" + +/obj/item/gun/projectile/automatic/shotgun/iccgn + name = "shotgun" + desc = "Volleygun (VG-23) not being able to boast of speed has the ability to clearly state the enemy with his shot in the face. Good ammunition with two firing modes and a unique cartridge." + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gshotgun2" + item_state = "gshotgun2" + wielded_item_state = "gshotgun2" + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/shotgun/iccgn + allowed_magazines = /obj/item/ammo_magazine/shotgun/iccgn + bulk = GUN_BULK_RIFLE + accuracy = 0 + one_hand_penalty=5 + init_firemodes = list( + SEMI_AUTO_NODELAY, + list(mode_name="2-beam bursts", mode_desc = "Short, controlled bursts", burst=2, fire_delay=null, move_delay=2) + ) + +/obj/item/gun/projectile/automatic/shotgun/iccgn/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "gshotgun2" + else + icon_state = "gshotgun2-empty" diff --git a/mods/fd_guns/code/guns/sniper.dm b/mods/fd_guns/code/guns/sniper.dm new file mode 100644 index 0000000000000..5be36ddd7801c --- /dev/null +++ b/mods/fd_guns/code/guns/sniper.dm @@ -0,0 +1,115 @@ +// SCG + +/obj/item/gun/projectile/heavysniper/scg + name = "multitask sniper rifle" + desc = "Special Applications Rifle, system 99. The sniper rifle was made to give the sniper team more firepower and versatility. Unfortunately, it holds only two cartridges for greater convenience.." + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "sniperrifle1" + item_state = "sniperrifle1" + w_class = ITEM_SIZE_HUGE + force = 10 + slot_flags = SLOT_BACK + caliber = CALIBER_ANTIMATERIAL + screen_shake = 2 //extra kickback + handle_casings = HOLD_CASINGS + load_method = SINGLE_CASING + max_shells = 2 + ammo_type = /obj/item/ammo_casing/scg/shell + one_hand_penalty = 6 + accuracy = -2 + recoil_buildup = 75 + bulk = 8 + scoped_accuracy = 8 + scope_zoom = 2 + bolt_open = 0 + wielded_item_state = "sniperrifle1" + load_sound = 'sound/weapons/guns/interaction/rifle_load.ogg' + fire_delay = 12 + +/obj/item/gun/projectile/sniper/marksman + name = "designated marksman rifle" + desc = "This rifle favors mid- to long-ranged combat, offering impressive stopping power over a long distance." + icon = 'mods/fd_guns/icons/weapon_cpss_icon.dmi' + icon_state = "sniperrifle2" + item_state = "sniperrifle2" + w_class = ITEM_SIZE_HUGE + force = 10 + caliber = CALIBER_RIFLE_MILITARY + origin_tech = list(TECH_COMBAT = 2) + slot_flags = SLOT_BACK + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/sniper/scg + allowed_magazines = /obj/item/ammo_magazine/sniper/scg + accuracy = -1 + fire_delay = 6 + one_hand_penalty = 8 + scoped_accuracy = 4 + scope_zoom = 1.5 + bulk = GUN_BULK_RIFLE + 1 + wielded_item_state = "sniperrifle2" + mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' + +/obj/item/gun/projectile/sniper/marksman/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "sniperrifle2" + else + icon_state = "sniperrifle2-empty" + +/obj/item/gun/projectile/sniper/iccgn + name = "heavy sniper rifle" + desc = "Vordan Sniper Rifle (VSR-34), designed to defeat exoskeletons and light armoured vehicles by a sniper team. Can use Sol Gov sniper rifle ammunition" + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gsniperrifle4" + item_state = "gsniperrifle4" + w_class = ITEM_SIZE_HUGE + force = 10 + slot_flags = SLOT_BACK + caliber = CALIBER_ANTIMATERIAL + screen_shake = 2 //extra kickback + handle_casings = EJECT_CASINGS + load_method = MAGAZINE + magazine_type = /obj/item/ammo_magazine/sniper/iccgn + allowed_magazines = /obj/item/ammo_magazine/sniper/iccgn + one_hand_penalty = 6 + accuracy = -2 + recoil_buildup = 80 + bulk = 10 + scoped_accuracy = 8 + scope_zoom = 2.5 + wielded_item_state = "gsniperrifle4" + mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' + fire_delay = 12 + +/obj/item/gun/projectile/sniper/iccgn/on_update_icon() + ..() + if(ammo_magazine) + icon_state = "gsniperrifle4" + else + icon_state = "gsniperrifle4-empty" + + +/obj/item/gun/projectile/sniper/dmr + name = "designated marksman rifle" + desc = "Designated Marksman Rifle-41 (DMR-41) The Marksman rifle was made to give more versatility and strength to fire groups. The multi-tasking nature of such a rifle allows for a variety of missions up to and including breaching airlocks and blast doors" + icon = 'mods/fd_guns/icons/weapon_gkk_icon.dmi' + icon_state = "gsniperrifle3" + item_state = "gsniperrifle3" + w_class = ITEM_SIZE_HUGE + force = 10 + caliber = CALIBER_RIFLE_MILITARY + origin_tech = list(TECH_COMBAT = 2) + slot_flags = SLOT_BACK + load_method = SINGLE_CASING|SPEEDLOADER + handle_casings = EJECT_CASINGS + magazine_type = /obj/item/ammo_magazine/speedloader/dmr + allowed_magazines = /obj/item/ammo_magazine/speedloader/dmr + accuracy = -1 + fire_delay = 6 + max_shells = 16 + one_hand_penalty = 8 + scoped_accuracy = 4 + scope_zoom = 1.5 + bulk = GUN_BULK_RIFLE + 1 + wielded_item_state = "gsniperrifle3" + mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' diff --git a/mods/fd_guns/code/projectiles.dm b/mods/fd_guns/code/projectiles.dm new file mode 100644 index 0000000000000..4f1eb7f2aa1f4 --- /dev/null +++ b/mods/fd_guns/code/projectiles.dm @@ -0,0 +1,167 @@ + + +/obj/item/projectile/bullet/pistol/iccgn + damage = 55 + distance_falloff = 2 + penetration_modifier = 1 + armor_penetration = 25 + +/obj/item/projectile/bullet/pistol/iccgn/rubber + damage_flags = 0 + damage = 10 + agony = 70 + embed = FALSE + +/obj/item/projectile/bullet/pistol/automatic + damage = 45 + armor_penetration = 10 + +/obj/item/projectile/bullet/pistol/automatic/rubber + damage_flags = 0 + damage = 3 + agony = 20 + embed = FALSE + +/obj/item/projectile/bullet/pellet/shotgun/magnum + name = "shrapnel" + icon_state = "pellet" + fire_sound = 'sound/weapons/gunshot/shotgun.ogg' + damage = 30 + pellets = 16 + range_step = 1 + spread_step = 65 + knockback = 2 + +/obj/item/projectile/bullet/rifle/fleet + fire_sound = 'sound/weapons/gunshot/gunshot8.ogg' + damage = 35 + armor_penetration = 20 + penetrating = 0 + +/obj/item/projectile/bullet/rifle/army + fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' + damage = 45 + armor_penetration = 50 + penetrating = 3 + distance_falloff = 1.2 + +/obj/item/projectile/bullet/rifle/iccgn + fire_sound = 'sound/weapons/gunshot/auto1.ogg' + damage = 40 + armor_penetration = 35 + + +/obj/item/projectile/bullet/rifle/accurate + fire_sound = 'sound/weapons/gunshot/auto2.ogg' + damage = 40 + armor_penetration = 45 + penetrating = 1 + penetration_modifier = 0.8 + +/obj/item/projectile/bullet/rifle/bolter + fire_sound = 'sound/weapons/gunshot/loudbolt.ogg' + icon_state= "bolter" + damage = 40 + armor_penetration = 50 + penetrating = 2 + penetration_modifier = 2 + damage_flags = DAM_BULLET | DAM_SHARP | DAM_EDGE + +/obj/item/projectile/bullet/rifle/bolter/explosive + damage = 55 + armor_penetration = 35 + penetrating = 1 + penetration_modifier = 1.5 + + on_hit(var/atom/target, var/blocked = 0) + cell_explosion(target, 15, 7,) + return 1 + +/obj/item/projectile/bullet/rifle/marksman + fire_sound = 'sound/weapons/gunshot/gunshot2.ogg' + damage = 30 + armor_penetration = 20 + penetrating = 1 + +/obj/item/projectile/bullet/rifle/marksman/dmr + fire_sound = 'sound/weapons/gunshot/gunshot2.ogg' + damage = 35 + armor_penetration = 30 + penetrating = 1 + +/obj/item/projectile/bullet/rifle/marksman/dmr/apds + damage = 20 + armor_penetration = 45 + penetrating = 2 + + +/obj/item/projectile/bullet/rifle/shell/apds + damage = 70 + penetrating = 5 + armor_penetration = 80 + penetration_modifier = 1.5 + +/obj/item/projectile/bullet/rifle/shell/explosive + name ="explosive shell" + damage = 40 + stun = 3 + weaken = 3 + armor_penetration = 15 + penetrating = 0 + damage_flags = DAM_BULLET | DAM_SHARP | DAM_EDGE + + on_hit(var/atom/target, var/blocked = 0) + cell_explosion(target, 5, 5) + return 1 + +/obj/item/projectile/ion/heavy + heavy_effect_range = 3 + light_effect_range = 6 + +// TECHNICALLY IT'S A LASER. But bullet... + +/obj/item/projectile/bullet/lasbolt + name = "laser" + icon_state = "lasbolt" + temperature = T0C + 350 + fire_sound = 'sound/weapons/gunshot/lasgun2.ogg' + impact_sounds = list(BULLET_IMPACT_MEAT = SOUNDS_LASER_MEAT, BULLET_IMPACT_METAL = SOUNDS_LASER_METAL) + damage = 30 + armor_penetration = 10 + damage_flags = DAM_LASER | DAM_EDGE + distance_falloff = 1.5 + damage_falloff = TRUE + damage_falloff_list = list( + list(3, 0.95), + list(5, 0.90), + list(7, 0.80), + ) +// Tech stuff + pass_flags = PASS_FLAG_TABLE | PASS_FLAG_GLASS | PASS_FLAG_GRILLE + embed = 0 + damage_type = BURN + eyeblur = 4 + muzzle_type = null + +/obj/item/projectile/bullet/lasbolt/lasgun + name = "laser" + icon_state = "lasbolt" + temperature = T0C + 450 + fire_sound = 'sound/weapons/gunshot/lasgun2.ogg' + damage = 40 + armor_penetration = 20 + +/obj/item/projectile/bullet/lasbolt/overcharge + name = "laser" + icon_state = "lasbolt" + temperature = T0C + 650 + fire_sound = 'sound/weapons/gunshot/lasgun3.ogg' + damage = 55 + armor_penetration = 35 + penetrating = 1 + penetration_modifier = 0.6 + damage_falloff_list = list( + list(3, 0.85), + list(5, 0.75), + list(7, 0.70), + ) diff --git a/mods/fd_guns/icons/bullupsmg_cpps.dmi b/mods/fd_guns/icons/bullupsmg_cpps.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b62c6179190679be5dd20aeebd049e5f661f63af GIT binary patch literal 2300 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 literal 0 HcmV?d00001 diff --git a/mods/fd_guns/icons/pistol_iccgn.dmi b/mods/fd_guns/icons/pistol_iccgn.dmi new file mode 100644 index 0000000000000000000000000000000000000000..7c4bf403008def2065e68801456bc879f8720f72 GIT binary patch literal 2432 zcmbW3dpr{g8^^cODsk3DZW+2b38Un?F*0O2<`U%?avgHWWyTqqvuc=Ilg?t(G%V)0 z;Y~24Ef{>+o6Qu?uoMvjtz_ni^7Fniv$1?7+E=wWZOz{`}a9jv8a4=J#|X)NCfGzs<%}R$lbVLgA{722A_JZ3W~- zq@MvlFINHVICEjITmVghbGz+esL7FMrFhN{t_&jgST|lr#piq3cyMh{xnaM@RSkIj zRN^BXZcYjzB0k6WSt8z<>H9uO3!3~fpzg@R7D)lR=akoex5t`{3Sr9R`z1@}*80QX zYU0v*dG?9HRBJ2TC zGqfeCi0}VEc-ONWxA^>w+T?w?jol=61)JQ_fdw3+?tOoDCYNyb?5{>9MiaA>VtbbB zW-_ys{Gvxixl@MtWgxu!D51xdd;U#h9G%?(VuvUu&RTC-If@|`YrEMYSc(|z`C9fVT^QBj_Odw0Q03jC8DL=GqSlJd5Hi66wz48` zH;Lju=jrEpIaFCF^;P95L2?eswlB>eZtrY)1JSOer4`S@%JW>^5mrpBbRA1-)#US$ zzX??X0|O;}Cr_TFh>zGWF5+3gOvB^bBtuk(OI>Uy-l_5sWt3rlf48qIqm0whvk(UW zfqEyG=BdZ$^QoPou2PZcBKJj~%NRCcZ2`mPV3)$H>PrVk=woiDWZvfYjGmFZ;jWW! z5Zh$zg)!Yx#8Cw_&UF&ib51G-oR}eO$YZ+nM~gSs(eP|Y;v1Q$3LPrxLUYtj>K$-Y z+?p&PE^b6X?k)xHWh;@1lwA3dRb0^tk@qoQH>^_E>a7C z8w6Y70XTe1Sft$JowprTxQd~7IqzZi_T*u11RTSidp_j>AZC%~yk6Mo(|V;2?vDCJ zIsy*I&@ADWr(V~bB}AKYCvH}3p1h)us8;G_7y*r(O6x!8Asv06#)!>uWdpb-V|Nd& zmxI~lQrCz$&`>%_oL!G8&$|Q#W$0cweEW+k?77U46|r=wtR-? z!H@WGnOCnaH$u4`+^w_T;hqPDL-DW97_C9cR7k{kuj#kLiXHVnPdi&ln*x_N4%qWF zj^;m}mytTU{^^}MA)uQ73$~Kba}EO1ZPu=%cKcW#O8V9Nt~d??iFej!YpaYE4+KK} zf>$GZDvguX9u>gwm7%&%+dYkcp?sO5aBaLZJ@}4d&)D!Rjq?-UshSfD=)d{>&z3e6 z#hd>I`+rY#Rp*GB>Tw@GwP$oUA-t?J>r%WmpnDn+Ui)LNKh~UB4?XvMWqW--{Oc9} z*T|=V4Fgh9bK>Quy&lIC|NDl2RK|OTyi8Q_UR16?wMQ@4h5Ii_eBeJW1Y%JK4t7jvf!!h8hTGm%Vi6rxFj~%jQxvCyfrI`5j z-EHz7xz3vx(Tl3klUAmYo{`UAGk)?PxBRV((h@go;*=%-U7z0SAj~P4fMu8IUH(!{ zyfW7ML2i6}EJ-pCZn+dAx(h*j{v_N3aJB%N@`r%R%4Rg40Al{>zDmBHh}y6X6ZG0m zmod0rDwr3{xw;CX%|^`NxKn6nXXuYF&eH1xl|khs2u&E7H8_|BDC2-qsuDjjpN(hG zLGjH}d%KaG@ee*D>VIPp{b6|H+Z2pPx`Ma(R&h2XDW!sc8BkWS1biD4W=)#8HO6EG zA-UUFr<>B!Xn7;My5Dq(#e`=@ayyxQm)#L?INezn(4boscxAP_=BwH``Fwiq%lzi| zPH;BH5yG7n+)7#&yipShE#I#tm>IxNN`$N5ZW_yCtTu;%FGnP7bK|=`Jl@(QsC&o9 z?>u55$B!d_808j1G4T^iIw?H+bMeqGJ>L3-8&vJ`yrWtME_XvcJXF-4*yt$+f4={X zLVIUp+=?2Hpu`;77lJMT6tMe86T7wx1I*8B!2Sqp6smGK2SdZ3oz9(BFWjfpvZIJQ zc%y1Ip*fjAXuRxRQyGiP{zrD24kYR+PJS3M2&%42(GoO>Hrp}`4rJKrYG|Hn&7HO` zf>ihQCAA{cN?>|IIphOZ8>`HN&U%Q}o`-U1hMCR)*-nR&yz-}2L1evsQKgS<;tv<> z1o-=|hfsC`um(0{jtt_ppRO&=N>4mw7~zg;r;kaNrqnh*^8!RXt6f145wT~Z4$gY2 z#xbmzh37@Qt;4@AG(UxTSk^eS=45+YA5Yr?KDl>5P73$R+kUA4C_A)mm5m?iFIHBZ AF#rGn literal 0 HcmV?d00001 diff --git a/mods/fd_guns/icons/precise_gkk.dmi b/mods/fd_guns/icons/precise_gkk.dmi new file mode 100644 index 0000000000000000000000000000000000000000..fcd97006138f4b23f2b868c7158e6ca6f61b08ef GIT binary patch literal 1788 zcmb7FcTf{{6#gL*0YhZS5J4nRv;qw_L0V&E1w&XRHX%VUVhIpZAQ(n4L`0NbL=Y4L zmI?xbG9)U5D0_&?h!Px>5d;wkvb40MVAKB9yIyQ9-n)C_yLaD9_4L50sp_i& z0Mzi#*rRehCbxKHCAm*mi*uF34GxhKi4BPGX9b5x1~bC|h$+l?atD@Rwf%@hu=@E% zOWKirjZyp6+d++A^?jF;(lVk7b74HtIUL>2K59_uKT;gR;1pO<#vHFxn9e_Vb;DFU zFJgnFRq38DUG(8N#l*?3nsgwH7um)-j-svPt~-Conu_uIQRgzjbRL;W&cDJe7k?4B-9|9eir zv5Y%BD$0zi=N!T*&7LZ+5^0`mi`Kn%T+feuNxx4>&YNZguNkd6>$iWyxm zV_=0I3Se=3Lmm87*9cQQSCq?2o4BTedbr+NmeLnU?bRDOGo$q?OxH^-RM%jyc?|%A zVu}KI&+V?0rDX+!mY|~5iSap{A76eW!sy(+vZsBW0O+{Ji0^0Qkxe+<5QywV1uia* zC3P|M26?<}0J2h2BoYbD@wA`;iM%ECzxNt|WNPd-YK<=NoK)=U?k0GPlFzjQ?&xM< zM}JnWLX^6WPxinBH*Rb%E$z98;eG}ES|d@+u%8o_KkM67GAT}hC7P+LCTggb8dW^T z^urNb^crlofnRIi(Cf4&ARUiTO`lFez;3*Wv+0KYu*{O@Df^{4zK&&cXxBC{{-TLW zB$3RAWirKD-n_EXd1a+N;j8Zrl^vFEugr%V>+l(~gXRk_Y?!Sxz7MQC+*4Ef`{%BZ zkwK~EB_joYNfNxH7$`>$siU3=p0a^z9>{bfuSO`e6`)|HJJ|#Krl1RcG3N*AT zh-@hP@OWqDR9m2y-+?`=TAfxb*7?RMamwMi2k!Z6H@lnici>4sCYjJW;Bj&ef$pOwbAu|9Egz3pZ~%zE1U z5${dq&(9SW`X18X*-1Vzic;t)NdBgVdsi}3NLXfI`};gh5X>d#zNZ#pJ_j=xOj}Db z=>>dOW@{Mxr-$ozrQu(xzmqw6u@|vE$@pe^k5G|aXj?RVaYcJ75h!JlOrFOTf_%?Ax5L0y1&{)+4jpZ-Q*Xp-8x(M8? zHw4Qg@1)Y~Z>Q))EOt8?IxiH~4QU^pToCseqa>rtWz`+7=-MIMW}o^dWCi*XTvNkFogF1l zM%fZwqUOCNbjYy6jIZ*V0C!im9I;#n~3(XXS6R|QhY^6 znTQ0|Wf7ds#*^hCC|=LN$sCD;`_PvwPrTtV9NfQj``=-Q`m=)%#T88YKy~K(nf)DW zbd&F%eiSKn#>|zdrAdZxJ2j|A>u0Bf4Gz}*Q~CaD@e9T$0<2Le8oI4fg8UDH{`bg# cSKp1zHkA`wYR`As%ikHmJ9%KM9sCmh0E7)MRR910 literal 0 HcmV?d00001 diff --git a/mods/fd_guns/icons/sniperrifle_iccgn.dmi b/mods/fd_guns/icons/sniperrifle_iccgn.dmi new file mode 100644 index 0000000000000000000000000000000000000000..173d74099521370583fe3cee84fb06e222ba2636 GIT binary patch literal 1656 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 literal 0 HcmV?d00001 diff --git a/mods/fd_guns/icons/weapon_cpss_icon.dmi b/mods/fd_guns/icons/weapon_cpss_icon.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e471c3e1d3d9a476f300a3587b891147404f987d GIT binary patch literal 13591 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 literal 0 HcmV?d00001 diff --git a/mods/fd_guns/icons/weapon_gkk_character.dmi b/mods/fd_guns/icons/weapon_gkk_character.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1916e4687b436a8c9df3ee03417b9aba8b0353dc GIT binary patch literal 13814 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

ZTZiCsRNU)3P4E4v&?{1{F?aX>P+~DG3$2U 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 Date: Wed, 6 Mar 2024 21:13:17 +0300 Subject: [PATCH 002/311] Keep them in ascending alphabetical order, please Keep them in ascending alphabetical order, please Keep them in ascending alphabetical order, please Keep them in ascending alphabetical order, please Keep them in ascending alphabetical order, please Keep them in ascending alphabetical order, please Keep them in ascending alphabetical order, please --- maps/torch_fd/fd_torch.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/torch_fd/fd_torch.dm b/maps/torch_fd/fd_torch.dm index 209834e14ead1..da416064c039d 100644 --- a/maps/torch_fd/fd_torch.dm +++ b/maps/torch_fd/fd_torch.dm @@ -238,10 +238,10 @@ #include "../../mods/fd_assets/_fd_assets.dme" #include "../../mods/accent_labels/_accent_labels.dme" - #include "../../mods/fd_guns/_fd_guns.dme" #include "../../mods/additional_biomods/_additional_biomods.dme" #include "../../mods/ascent/_ascent.dme" #include "../../mods/conference_holopads/_conference_holopads.dme" + #include "../../mods/fd_guns/_fd_guns.dme" #include "../../mods/hestia_missiles/_hestia_missiles.dme" #include "../../mods/landing_eye/_landing_eye.dme" #include "../../mods/mob_interactions/_mob_interactions.dme" From 953211cf6a66ee9ff906eaee3e3454dfa2532463 Mon Sep 17 00:00:00 2001 From: rootoo807 <71034457+rootoo807@users.noreply.github.com> Date: Sun, 10 Mar 2024 16:38:33 +0300 Subject: [PATCH 003/311] [MIRROR] Spotty frogs, lizard tatts --- code/modules/organs/external/head.dm | 5 +- .../sprite_accessories/accessory_hair_fade.dm | 1 + .../sprite_accessories/accessory_skrell.dm | 38 ++++ .../sprite_accessories/accessory_tattoo.dm | 4 +- .../sprite_accessories/accessory_unathi.dm | 185 +++++++++++++----- .../human_races/species/skrell/markings.dmi | Bin 0 -> 1214 bytes icons/mob/human_races/species/unathi/body.dmi | Bin 1001 -> 993 bytes .../mob/human_races/species/unathi/tattoo.dmi | Bin 598 -> 1719 bytes 8 files changed, 175 insertions(+), 58 deletions(-) create mode 100644 icons/mob/human_races/species/skrell/markings.dmi diff --git a/code/modules/organs/external/head.dm b/code/modules/organs/external/head.dm index 6aaccd41517f3..2e833147afe79 100644 --- a/code/modules/organs/external/head.dm +++ b/code/modules/organs/external/head.dm @@ -160,8 +160,9 @@ if (M.draw_target == MARKING_TARGET_HAIR) var/color = markings[E] var/icon/I = icon(M.icon, M.icon_state) - I.Blend(HI, ICON_AND) - I.Blend(color, ICON_MULTIPLY) + if(istype(M, /datum/sprite_accessory/marking/hair_fade)) + I.Blend(HI, ICON_AND) + I.Blend(color, M.blend) ADD_SORTED(sorted_hair_markings, list(list(M.draw_order, I)), /proc/cmp_marking_order) for (var/entry in sorted_hair_markings) HI.Blend(entry[2], ICON_OVERLAY) diff --git a/code/modules/sprite_accessories/accessory_hair_fade.dm b/code/modules/sprite_accessories/accessory_hair_fade.dm index 47fb5120f4055..45f3170f62e2d 100644 --- a/code/modules/sprite_accessories/accessory_hair_fade.dm +++ b/code/modules/sprite_accessories/accessory_hair_fade.dm @@ -5,6 +5,7 @@ draw_target = MARKING_TARGET_HAIR draw_order = 50 //before ears & horns disallows = list(/datum/sprite_accessory/marking/hair_fade) + blend = ICON_MULTIPLY /datum/sprite_accessory/marking/hair_fade/fade_up_short name = "Fade (Up, Short)" diff --git a/code/modules/sprite_accessories/accessory_skrell.dm b/code/modules/sprite_accessories/accessory_skrell.dm index 93d5574f841e9..500859aef9893 100644 --- a/code/modules/sprite_accessories/accessory_skrell.dm +++ b/code/modules/sprite_accessories/accessory_skrell.dm @@ -15,3 +15,41 @@ icon_state = "default" icon = 'icons/mob/human_races/species/skrell/body.dmi' species_allowed = list(SPECIES_SKRELL) + +/datum/sprite_accessory/marking/skrell + icon = 'icons/mob/human_races/species/skrell/markings.dmi' + draw_order = 50 + use_organ_tag = FALSE + species_allowed = list(SPECIES_SKRELL) + +/datum/sprite_accessory/marking/skrell/body + name = "Spots (Right, Body, Skrell)" + draw_target = MARKING_TARGET_SKIN + icon_state = "spots-right" + body_parts = list( + BP_HEAD, + BP_CHEST, + BP_GROIN, + BP_L_ARM, + BP_L_HAND, + BP_R_ARM, + BP_R_HAND, + BP_L_LEG, + BP_L_FOOT, + BP_R_LEG, + BP_R_FOOT + ) + +/datum/sprite_accessory/marking/skrell/body/left + name = "Spots (Left, Body, Skrell)" + icon_state = "spots-left" + +/datum/sprite_accessory/marking/skrell/head + name = "Spots (Right, Tentacles, Skrell)" + draw_target = MARKING_TARGET_HAIR + icon_state = "spots-hair-right" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/skrell/head/left + name = "Spots (Left, Tentacles, Skrell)" + icon_state = "spots-hair-left" \ No newline at end of file diff --git a/code/modules/sprite_accessories/accessory_tattoo.dm b/code/modules/sprite_accessories/accessory_tattoo.dm index e4c5e4042ef37..d0723ca89096f 100644 --- a/code/modules/sprite_accessories/accessory_tattoo.dm +++ b/code/modules/sprite_accessories/accessory_tattoo.dm @@ -85,11 +85,9 @@ icon_state = "campbell-arm-right" -/* The icon for this needs work. -/datum/sprite_accessory/marking/head/tiger +/datum/sprite_accessory/marking/tattoo/head/tiger name = "Tattoo (Tiger Stripes, Head)" icon_state = "tiger-head" -*/ /datum/sprite_accessory/marking/tattoo/chest/tiger diff --git a/code/modules/sprite_accessories/accessory_unathi.dm b/code/modules/sprite_accessories/accessory_unathi.dm index 9c9dd578e7f44..42d2679ae43b3 100644 --- a/code/modules/sprite_accessories/accessory_unathi.dm +++ b/code/modules/sprite_accessories/accessory_unathi.dm @@ -110,6 +110,7 @@ /datum/sprite_accessory/marking/unathi/body icon = 'icons/mob/human_races/species/unathi/body.dmi' draw_order = 50 + use_organ_tag = FALSE /datum/sprite_accessory/marking/unathi/body/head @@ -191,26 +192,6 @@ icon_state = "plating_f_chest" -/datum/sprite_accessory/marking/unathi/body/arm_left/plating_female - name = "Plating (L. Arm, Female)" - icon_state = "plating_f_l_arm" - - -/datum/sprite_accessory/marking/unathi/body/arm_right/plating_female - name = "Plating (R. Arm, Female)" - icon_state = "plating_f_r_arm" - - -/datum/sprite_accessory/marking/unathi/body/leg_left/plating_female - name = "Plating (L. Leg, Female)" - icon_state = "plating_f_l_leg" - - -/datum/sprite_accessory/marking/unathi/body/leg_right/plating_female - name = "Plating (R. Leg, Female)" - icon_state = "plating_f_r_leg" - - /datum/sprite_accessory/marking/unathi/body/plating_male_full name = "Plating (Full, Male)" icon_state = "plating_m_full" @@ -235,26 +216,6 @@ icon_state = "plating_m_chest" -/datum/sprite_accessory/marking/unathi/body/arm_left/plating_male - name = "Plating (L. Arm, Male)" - icon_state = "plating_m_l_arm" - - -/datum/sprite_accessory/marking/unathi/body/arm_right/plating_male - name = "Plating (R. Arm, Male)" - icon_state = "plating_m_r_arm" - - -/datum/sprite_accessory/marking/unathi/body/leg_left/plating_male - name = "Plating (L. Leg, Male)" - icon_state = "plating_m_l_leg" - - -/datum/sprite_accessory/marking/unathi/body/leg_right/plating_male - name = "Plating (R. Leg, Male)" - icon_state = "plating_m_r_leg" - - /datum/sprite_accessory/marking/unathi/tattoo icon = 'icons/mob/human_races/species/unathi/tattoo.dmi' draw_order = 60 @@ -262,57 +223,90 @@ /datum/sprite_accessory/marking/unathi/tattoo/head - disallows = list(/datum/sprite_accessory/marking/tattoo/head) + disallows = list( + /datum/sprite_accessory/marking/tattoo/head, + /datum/sprite_accessory/marking/unathi/tattoo/head + ) body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/unathi/tattoo/chest - disallows = list(/datum/sprite_accessory/marking/tattoo/chest) + disallows = list( + /datum/sprite_accessory/marking/tattoo/chest, + /datum/sprite_accessory/marking/unathi/tattoo/chest + ) body_parts = list(BP_CHEST) /datum/sprite_accessory/marking/unathi/tattoo/groin - disallows = list(/datum/sprite_accessory/marking/tattoo/groin) + disallows = list( + /datum/sprite_accessory/marking/tattoo/groin, + /datum/sprite_accessory/marking/unathi/tattoo/groin + ) body_parts = list(BP_GROIN) /datum/sprite_accessory/marking/unathi/tattoo/arm_left - disallows = list(/datum/sprite_accessory/marking/tattoo/arm_left) + disallows = list( + /datum/sprite_accessory/marking/tattoo/arm_left, + /datum/sprite_accessory/marking/unathi/tattoo/arm_left + ) body_parts = list(BP_L_ARM) /datum/sprite_accessory/marking/unathi/tattoo/arm_right - disallows = list(/datum/sprite_accessory/marking/tattoo/arm_right) + disallows = list( + /datum/sprite_accessory/marking/tattoo/arm_right, + /datum/sprite_accessory/marking/unathi/tattoo/arm_right + ) body_parts = list(BP_R_ARM) /datum/sprite_accessory/marking/unathi/tattoo/hand_left - disallows = list(/datum/sprite_accessory/marking/tattoo/hand_left) + disallows = list( + /datum/sprite_accessory/marking/tattoo/hand_left, + /datum/sprite_accessory/marking/unathi/tattoo/hand_left + ) body_parts = list(BP_L_HAND) /datum/sprite_accessory/marking/unathi/tattoo/hand_right - disallows = list(/datum/sprite_accessory/marking/tattoo/hand_right) + disallows = list( + /datum/sprite_accessory/marking/tattoo/hand_right, + /datum/sprite_accessory/marking/unathi/tattoo/hand_right + ) body_parts = list(BP_R_HAND) /datum/sprite_accessory/marking/unathi/tattoo/leg_left - disallows = list(/datum/sprite_accessory/marking/tattoo/leg_left) + disallows = list( + /datum/sprite_accessory/marking/tattoo/leg_left, + /datum/sprite_accessory/marking/unathi/tattoo/leg_left + ) body_parts = list(BP_L_LEG) /datum/sprite_accessory/marking/unathi/tattoo/leg_right - disallows = list(/datum/sprite_accessory/marking/tattoo/leg_right) + disallows = list( + /datum/sprite_accessory/marking/tattoo/leg_right, + /datum/sprite_accessory/marking/unathi/tattoo/leg_right + ) body_parts = list(BP_R_LEG) /datum/sprite_accessory/marking/unathi/tattoo/foot_left - disallows = list(/datum/sprite_accessory/marking/tattoo/foot_left) + disallows = list( + /datum/sprite_accessory/marking/tattoo/foot_left, + /datum/sprite_accessory/marking/unathi/tattoo/foot_left + ) body_parts = list(BP_L_FOOT) -/datum/sprite_accessory/marking/unathi/tattoo/leg_right - disallows = list(/datum/sprite_accessory/marking/tattoo/leg_right) +/datum/sprite_accessory/marking/unathi/tattoo/foot_right + disallows = list( + /datum/sprite_accessory/marking/tattoo/foot_right, + /datum/sprite_accessory/marking/unathi/tattoo/foot_right + ) body_parts = list(BP_R_FOOT) @@ -321,11 +315,96 @@ icon_state = "hive-chest" +/datum/sprite_accessory/marking/unathi/tattoo/arm_left/campbell + name = "Tattoo (Campbell, Left Arm, Unathi)" + icon_state = "campbell-arm-left" + + +/datum/sprite_accessory/marking/unathi/tattoo/arm_right/campbell + name = "Tattoo (Campbell, Right Arm, Unathi)" + icon_state = "campbell-arm-right" + + +/datum/sprite_accessory/marking/unathi/tattoo/head/tiger + name = "Tattoo (Tiger Stripes, Head, Unathi)" + icon_state = "tiger-head" + + /datum/sprite_accessory/marking/unathi/tattoo/chest/tiger - name = "Tattoo (Tiger Stripes, Unathi)" + name = "Tattoo (Tiger Stripes, Body, Unathi)" icon_state = "tiger-chest" +/datum/sprite_accessory/marking/unathi/tattoo/arm_left/tiger + name = "Tattoo (Tiger Stripes, Left Arm, Unathi)" + icon_state = "tiger-arm-left" + + +/datum/sprite_accessory/marking/unathi/tattoo/arm_right/tiger + name = "Tattoo (Tiger Stripes, Right Arm, Unathi)" + icon_state = "tiger-arm-right" + + +/datum/sprite_accessory/marking/unathi/tattoo/leg_left/tiger + name = "Tattoo (Tiger Stripes, Left Leg, Unathi)" + icon_state = "tiger-leg-left" + + +/datum/sprite_accessory/marking/unathi/tattoo/leg_right/tiger + name = "Tattoo (Tiger Stripes, Right Leg, Unathi)" + icon_state = "tiger-leg-right" + + +/datum/sprite_accessory/marking/unathi/tattoo/foot_left/tiger + name = "Tattoo (Tiger Stripes, Left Foot, Unathi)" + icon_state = "tiger-foot-left" + + +/datum/sprite_accessory/marking/unathi/tattoo/foot_right/tiger + name = "Tattoo (Tiger Stripes, Right Foot, Unathi)" + icon_state = "tiger-foot-right" + + /datum/sprite_accessory/marking/unathi/tattoo/chest/bands name = "Tattoo (Bands, Body, Unathi)" icon_state = "bands-chest" + + +/datum/sprite_accessory/marking/unathi/tattoo/arm_left/bands + name = "Tattoo (Bands, Left Arm, Unathi)" + icon_state = "bands-arm-left" + + +/datum/sprite_accessory/marking/unathi/tattoo/arm_right/bands + name = "Tattoo (Bands, Right Arm, Unathi)" + icon_state = "bands-arm-right" + + +/datum/sprite_accessory/marking/unathi/tattoo/hand_left/bands + name = "Tattoo (Bands, Left Hand, Unathi)" + icon_state = "bands-hand-left" + + +/datum/sprite_accessory/marking/unathi/tattoo/hand_right/bands + name = "Tattoo (Bands, Right Hand, Unathi)" + icon_state = "bands-hand-right" + + +/datum/sprite_accessory/marking/unathi/tattoo/leg_left/bands + name = "Tattoo (Bands, Left Leg, Unathi)" + icon_state = "bands-leg-left" + + +/datum/sprite_accessory/marking/unathi/tattoo/leg_right/bands + name = "Tattoo (Bands, Right Leg, Unathi)" + icon_state = "bands-leg-right" + + +/datum/sprite_accessory/marking/unathi/tattoo/foot_left/bands + name = "Tattoo (Bands, Left Foot, Unathi)" + icon_state = "bands-foot-left" + + +/datum/sprite_accessory/marking/unathi/tattoo/foot_right/bands + name = "Tattoo (Bands, Right Foot, Unathi)" + icon_state = "bands-foot-right" diff --git a/icons/mob/human_races/species/skrell/markings.dmi b/icons/mob/human_races/species/skrell/markings.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3d38a1581d3352ae0cda1edc8d694002666b5a8a GIT binary patch literal 1214 zcmV;v1VQ_WP)004jp0{{R3yS z5x|9-iXg$z_a&%rPShQ}V55p4_+RZGZT&9uWj}j|s#!R0qjv2U{q_GpuDE;RkO`s# z$x#S?AHmQxJI0d)lY78%1R}u~t`k>HFvNQJJDCt(bMFGdLGU01`{Ua#dd{a11Ejxy z2*#&VTBQ>rNdde_aM>&XhL2v!3MF**Z_j8Tb&_;iKM03}Kles-^&MJZxgsHo`(I`Vi-N zt~4Ho2=G}wNGzYVWWiS32d7?!C*bTcu3pF8!87bCv2h2fYybP#UH!rVMq`t$t#gy(-s5dMT z6w(q+4@H9N5O-0pM14=t2P0Jdx{%&)qqcN-bC56Vd*P`o)V_m8LEU{5NL{9(0V!W# zJ_sB~kX@oL74Mla%YF)iv5VIt!MDJWJ;|}+pii4fR^dJR(lA4^Fhzbar8*@eqvsjm zA`tF|U-i90Al&<^zfG(SZZ}Heo8Q07gfOoR3)@V73jrlJq@EA4~*9{jY)cA`q;?SSdjd z{B^BGI#3&88GMNGV?O}_I(?7U2XmqCrcOm|PDOB@XL6Q)#(lgKL!~yyRx^R`p*~g*0oC`dFBzV`hZ2!VKXlWG7%W)Q7mWvg|ws7sAUM8CUS@6fX z&OTl1y9Gh!KB&B{;Wt%67Hj~Ubt-RKEqLsLozVt^!C){L3cf4H@f6j1X zit$HF%CEl;Nx`$cCcmtVA8qt}rAeYz|Lcxg{qI>g#5o%veVcPUPQ1++3=Ppu=tTWw?%$?r$T!TrP24^jV*F9jJGlIc&r604liX1J{wU zEq~pY@F>%RLOm$dgF-zhe)q4=Ru5DEt=k8L=D+GOi7(>-00PQML_t(|ob8)Ua-%R1 zMx`4F+pu@Va{!k;-g}Yk=Ll5h{%06))!3-P>a-h^pL%Zv@KpuwG;eR#7;hEq2VuJN4zr{X28!qCj=8#<%@#_>% z=TKiy#SoACFcdUO(5|x?`uOblm|s3r?}hmIl0uV0ea+Dc`n4Sh8YgH{liy;KKl465 z)0dh;eB6fkb`J5sfL>5N6f~6}w%H7C`7bb3-(PM+DL!^$HYvnEH$i=Zc)p*Ydw)Fn zEpNnIp9|;)$Lv_dcbEURw^LHkL;}erz9dMc$^~8Kv*eKLzN~jlvQ0NT{cG6j!=5PM zC2ed1Dt(Aaz%JEg0a2{;{he`-Qm4B74u~0Ne_&C2ZN-eszcF&g<=4!ou2KL10001h zg@_Y>StDKC_Qz}EK5TltSynwP(|=jGGhW&7Pvp4@DA$R{fz#vb^W^D5o@<@ZSpK*( zK3WCbcHq|EZhHK%&iFY{QUCw|000000000ZuCn3`HAz=@n6jnDhip?@FU`21ww@z*y#%SA%j4*&oF007`eGOQCm8mXTxFuU>D z>^q*>_-yta&u)A+`;KQeK2t*g0000000000fbYc&MNLVa00{s|MNUMnLSTaB CxS7oW delta 832 zcmV-G1Hb&?2k8fpjU>1S4Tsz6%Wxeh-QPxdxm@D9=(9fUI#BO8bJ&jK0aS3&2d%RLOm$dgF-zh)Pw)^w0fBO@7z9v#=q)hi^)d-00PoUL_t(|ob8)IlA=Hm zMJsPmsIWKMIe?+#-bMF*j$q8({|p00jF1Udc2TI^6Ys4WsLc8_lo6HW4*>uG0N`s- z#VVQ;PmK?&{kw{g-8MO1s?2y3U=PFU@P8gOn4(hszUq?Be zLw!3XL5}+{6f{b3S*sbkcy)Z#mk-tNM7+Gk(8N&Ra4X1&_n{uH9jTCrP6|~^X25Q>prb_Ow5~Zak|&=;tzYEfVa5G z6Hxg>vIOj6ofaTwo$v3An@b(*^gCc?T>OEF_u85npZ~_#8K1vqUb;#F000000G@Ek$ z@7RgA#^+D@j?>0x>pOOh&s_r5(CGM%t?}6tkZFAOeaEix*&MsZXYDhd;XAhL{zZ+s z^TGJ+8lSyivQh!Q@p+#*EPuy0K0nxZ{Pm5`c9Br_0{{R3008(e8P*BsM*3$H%r-tR z<~yEkd|t?RJm2`dl<#=1@fqJS000000000006=(sQFIC8vvUvWenP*%@Ae~l?Q!XT z!cQ2Vy?#W``R%mx`Nn6j9nfj0e7y15y@k?#LNET?H6jBn#$UZPM-f|=_S2RC0000< KMNUMnLSTXo-m8fK diff --git a/icons/mob/human_races/species/unathi/tattoo.dmi b/icons/mob/human_races/species/unathi/tattoo.dmi index fbc58cada3b7d9dea4ef596d07950e2b4ed1fbae..a27399a80f5c1b0401c229f71fe76189b8082ddb 100644 GIT binary patch literal 1719 zcmZ9Nc{Ce{7REztF%qKQ*hV8sDXk)*q^h=3OB6**TP0IVM{A3aYDjpkXoHS=s4i%A zo~YLHP`d=RHJEa26~vM>QA=X-hKg;BPS2dz^X@tKeD~gS?m55n{c$hN%flJ0sHF%1 z0Kl#;j@|%(6mCE56oC7ax&s$n_Ql%E-PftTy&VF9n46pL545$lEi5dcP^iAXJ{Szv z)YR0~)z#C})6&vHp-@UnN^m$F1OfqpKv`MY{YB-~81(*{RGhbm55P_^5w_n5NxuGZ zj-iC$*zlOR@aQN2AfX^{6bredt0Fg7S0Ei984R0>(mKm~F(VbKrV0bAB`55 zwC_m7ou)KHM&8CNdiO7g?+lJD&;l3v4{|=~H9?pAHysgDHR?SS7R_Ry-OByyk&n{m z9xh!a!^@-Dj)hl|60!WHhjr3#*q`{8k!(o>P6JKviAXVyq1NrmYItsUJ^f2|YXYE1|o1$gRbh7baw0qUL{u*|i^%Bu@nohI>o%T(}l@diK5gD^l`94kQO|H)e?%{G(~MRpe>s z4eSDQZ%hEQFT*n!r9ae#c~Yh{8rV_O5=MQ)wqNnF<410^8vbjPS(;3Z;M89jvE1R9 z9DnI0*V_{hE&`8Sc?q(6M*hUav$J;nU4# zK-Cj()E`CUOqviK8vXWUHuxJcSV88-5BU>4OI1{BAI6*?ddIM@6>&H=!wT+SS7k3ao^5tYjEBgr8XI5Vz>OGE}G_m6mB z`BQX)$fNvG%dNGj*(~KmxYSLOq}LG96a>IsrN5k68&=C(W)KZ$2k4sCzZ)I#6rZfd zf7mHp-A%|t1S~pPOBHI&qnO<2hN6z()cbLIoLTGZi6v3ZTxrH?RgiRPAkZzEP;etD zeF**L8C?POb~2F_NRe9_n=p20gDt!xcTGjI0w0C8Fm_t1Y@F9dF2^r|-aSP;`QRDd zO*P~S&P5;%Hu%*<9@d{k?X8FAaxmYx@TE*y7nd8%rE@N?1P#H<$b0GX9>%}`mE_0v z#atl%#Qg#NKxUsz0%S1Npu#D4iWs|H3~KQ|yu8gBnLOngnS3f+X6T_!WL{~^% zPlM1uhDdIgKMt4sf@k`=)e3F!68YuqeT}90tjG*#GxcWE7!3O$hDX4C7%5nX9erTx zBsqGRp`4SU+#@Jbs?=KXT{ut%@i(;I9T)gbx5Z|bO zF0T6$A6@;5ATphlUpW#iI*aiU&zipNStCRwF9W5%);^+?095L+FE6B#=G y)RFV1?IYuJB+ZVk>OFRbSHoQP!6i1#orpaIAE|-To6Pv=x{D literal 598 zcmV-c0;&CpP)fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM z;w;ZhDainGjE%TBGg33tGfF@*23*A@i6yB(rcy>`S*mVwMrv`15*KGmW>GOno{KZB zC^0t`#5P1IEy+wzEh18FQes|8F@Ckm3a)-GU^fE*a$z;r0003^NklCJqGVX8N%>)00000fIm+ze)s1^IqdhpBx7~QBbQHNdu$){hQ_R1Ik9qH zQE<7t<&raSU(n7_-0_8}bgaGhY{G&JPcRXI#w)H%doLpkM%GnkuDfYrm%L%$5lR}d z0{ z_ARfit2UH0Y`b#nDf{#roVNbj-UR(es3~CuA_0Ytpar06cXwnVPpdVktC~d!n0Zq% kk<#ros6oQNBLMy%UnyEDh?!e8z5oCK07*qoM6N<$f+orFH2?qr From a900ff579414d26ec117c1e338d90261e810e37a Mon Sep 17 00:00:00 2001 From: SierraKomodo <11140088+SierraKomodo@users.noreply.github.com> Date: Mon, 11 Mar 2024 21:12:31 +0300 Subject: [PATCH 004/311] [MIRROR] Fix bundles using fax toner --- code/modules/paperwork/photocopier.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 5efa94bc92a34..6a27b5cb3433d 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -223,9 +223,9 @@ break if(istype(W, /obj/item/paper)) - W = copy(W) + W = copy(W, need_toner) else if(istype(W, /obj/item/photo)) - W = photocopy(W) + W = photocopy(W, need_toner) W.forceMove(p) p.pages += W From 5af695744f95d74be60c9d1967c5abba3dc85b81 Mon Sep 17 00:00:00 2001 From: SadNinjaSid Date: Tue, 12 Mar 2024 12:10:09 +0200 Subject: [PATCH 005/311] Fix disorientator icon Moved icon from infinity, replaced model in code, added icons in guns folder --- code/modules/projectiles/guns/energy/stun.dm | 2 +- icons/obj/guns/confuseraysec.dmi | Bin 0 -> 746 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 icons/obj/guns/confuseraysec.dmi diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 7a086a616a27e..166899f5e88f6 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -123,7 +123,7 @@ /obj/item/gun/energy/confuseray name = "disorientator" desc = "The W-T Mk. 4 Disorientator is a small, low capacity, and short-ranged energy projector intended for personal defense with minimal risk of permanent damage or cross-fire." - icon = 'icons/obj/guns/confuseray.dmi' + icon = 'icons/obj/guns/confuseraysec.dmi' icon_state = "confuseray" safety_icon = "safety" origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 2) diff --git a/icons/obj/guns/confuseraysec.dmi b/icons/obj/guns/confuseraysec.dmi new file mode 100644 index 0000000000000000000000000000000000000000..884212eb4a8b2bf280991d5658983d131c31bf90 GIT binary patch literal 746 zcmVoj-N=ix_8zBJ9%)r3F5Wr|K@Q_OMvdI7d00DGTPE!Ct=GbNc z006LhR9JLGWpiV4X>fFDZ*Bkpc$}4yu?oU46h-H}uL$ibrKt^0F47_$>^}taVgt5? zBwG6SCKg1I3>hxm3x_kjm(x>w?t0o>I(VY7dY?f7M9VV!X3 zYnB0#+E`y15M{)OTmJypc~TFHMyv@aE6W7>z!PAeVy;rm5wX9V#JgBSE%+{k6?F&@ zgNvTzuh0sGE++fqSd9C2=d|sc_j_OG6N&FII|v&900DwYL_t(&f$f^>PJ}QJg>fog zaG^yDg3VHk(OK+BsaZfG!-<} z2kPH#jahL(w>i<>eK_(we^~C2s*nA@K8yo;ECNrbaKxgx++e?6vbtn|sItzwYQVXg zj@8fo!xP9kAp86>V{sExbG^8p{DA!DBQvN(9sN~VGM*Fx~^;D16;?eSRAd7 z2I7wZZ=mb@o~#X*vv$lSOx0scGnR(y-!^SSnawEUR;TKNfeFSyAJ+S|pOAEYaKM$b z^{roBo2p;5Wp045f1*A$UV9n&KCIt7!8CntfqfTx-)^o?)py_nnmPag006*$Ks*17 zx^n&(^)bJfe10GGa#JtMZT<8X4qjKz|KfZ=JO9h`0qy)R&j+;gzc?Sz&i}HmoBzf6 zfOh`hr7PxtQCH6Y;(S0m|BLeh?fk!EKA@fdF&_W`00000;MYk1q@&Et; literal 0 HcmV?d00001 From 38643f4cae854b2bfc67bfc6282d6c37878f3022 Mon Sep 17 00:00:00 2001 From: SadNinjaSid Date: Tue, 12 Mar 2024 12:19:58 +0200 Subject: [PATCH 006/311] Disorientator fix Replaced id for icon in code, Added new icons for weapon --- code/modules/projectiles/guns/energy/stun.dm | 2 +- icons/obj/guns/confuseraysec.dmi | Bin 0 -> 746 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 icons/obj/guns/confuseraysec.dmi diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 7a086a616a27e..166899f5e88f6 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -123,7 +123,7 @@ /obj/item/gun/energy/confuseray name = "disorientator" desc = "The W-T Mk. 4 Disorientator is a small, low capacity, and short-ranged energy projector intended for personal defense with minimal risk of permanent damage or cross-fire." - icon = 'icons/obj/guns/confuseray.dmi' + icon = 'icons/obj/guns/confuseraysec.dmi' icon_state = "confuseray" safety_icon = "safety" origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 2) diff --git a/icons/obj/guns/confuseraysec.dmi b/icons/obj/guns/confuseraysec.dmi new file mode 100644 index 0000000000000000000000000000000000000000..884212eb4a8b2bf280991d5658983d131c31bf90 GIT binary patch literal 746 zcmVoj-N=ix_8zBJ9%)r3F5Wr|K@Q_OMvdI7d00DGTPE!Ct=GbNc z006LhR9JLGWpiV4X>fFDZ*Bkpc$}4yu?oU46h-H}uL$ibrKt^0F47_$>^}taVgt5? zBwG6SCKg1I3>hxm3x_kjm(x>w?t0o>I(VY7dY?f7M9VV!X3 zYnB0#+E`y15M{)OTmJypc~TFHMyv@aE6W7>z!PAeVy;rm5wX9V#JgBSE%+{k6?F&@ zgNvTzuh0sGE++fqSd9C2=d|sc_j_OG6N&FII|v&900DwYL_t(&f$f^>PJ}QJg>fog zaG^yDg3VHk(OK+BsaZfG!-<} z2kPH#jahL(w>i<>eK_(we^~C2s*nA@K8yo;ECNrbaKxgx++e?6vbtn|sItzwYQVXg zj@8fo!xP9kAp86>V{sExbG^8p{DA!DBQvN(9sN~VGM*Fx~^;D16;?eSRAd7 z2I7wZZ=mb@o~#X*vv$lSOx0scGnR(y-!^SSnawEUR;TKNfeFSyAJ+S|pOAEYaKM$b z^{roBo2p;5Wp045f1*A$UV9n&KCIt7!8CntfqfTx-)^o?)py_nnmPag006*$Ks*17 zx^n&(^)bJfe10GGa#JtMZT<8X4qjKz|KfZ=JO9h`0qy)R&j+;gzc?Sz&i}HmoBzf6 zfOh`hr7PxtQCH6Y;(S0m|BLeh?fk!EKA@fdF&_W`00000;MYk1q@&Et; literal 0 HcmV?d00001 From a737577de19f2a70353a6f38f37095e16de124e1 Mon Sep 17 00:00:00 2001 From: SadNinjaSid Date: Wed, 13 Mar 2024 09:28:44 +0200 Subject: [PATCH 007/311] Corecode fix --- code/modules/projectiles/guns/energy/stun.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 166899f5e88f6..7a086a616a27e 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -123,7 +123,7 @@ /obj/item/gun/energy/confuseray name = "disorientator" desc = "The W-T Mk. 4 Disorientator is a small, low capacity, and short-ranged energy projector intended for personal defense with minimal risk of permanent damage or cross-fire." - icon = 'icons/obj/guns/confuseraysec.dmi' + icon = 'icons/obj/guns/confuseray.dmi' icon_state = "confuseray" safety_icon = "safety" origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 2) From 093bafb2bb2cb339e52a3e9843b595028a895aa1 Mon Sep 17 00:00:00 2001 From: SadNinjaSid Date: Wed, 13 Mar 2024 09:50:35 +0200 Subject: [PATCH 008/311] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BC=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mods/ssgunsetc/README.md | 77 ++++++++++++++++++++ mods/ssgunsetc/_ssgunsetc.dm | 4 + mods/ssgunsetc/_ssgunsetc.dme | 19 +++++ mods/ssgunsetc/code/guns/energy/stun.dm | 38 ++++++++++ mods/ssgunsetc/code/icons/confuseraysec.dmi | Bin 0 -> 746 bytes 5 files changed, 138 insertions(+) create mode 100644 mods/ssgunsetc/README.md create mode 100644 mods/ssgunsetc/_ssgunsetc.dm create mode 100644 mods/ssgunsetc/_ssgunsetc.dme create mode 100644 mods/ssgunsetc/code/guns/energy/stun.dm create mode 100644 mods/ssgunsetc/code/icons/confuseraysec.dmi diff --git a/mods/ssgunsetc/README.md b/mods/ssgunsetc/README.md new file mode 100644 index 0000000000000..e90665417386c --- /dev/null +++ b/mods/ssgunsetc/README.md @@ -0,0 +1,77 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/#724 + + + +## Sad Ninja Sid tweaks + +ID мода: SSGUNSETC + + +### Описание мода + +Мод заменяет спрайт дезориентатора на используемый ранее на инфинити + + +### Изменения *кор кода* + +- Отсутствуют + + +### Оверрайды + +- Отсутствуют + + +### Дефайны + +- Отсутствуют + + +### Используемые файлы, не содержащиеся в модпаке + +- Отсутствуют + + +### Авторы: + +SadNinjaSid + diff --git a/mods/ssgunsetc/_ssgunsetc.dm b/mods/ssgunsetc/_ssgunsetc.dm new file mode 100644 index 0000000000000..853650be1ffaf --- /dev/null +++ b/mods/ssgunsetc/_ssgunsetc.dm @@ -0,0 +1,4 @@ +/singleton/modpack/ssgunsetc + name = "Модификация дезориентатора и других вещей" + desc = "Мод заменяющий модель дезориентатора и заготовка под другие фиксы, будет дополняться по мере изменения" + author = "SadNinjaSid" diff --git a/mods/ssgunsetc/_ssgunsetc.dme b/mods/ssgunsetc/_ssgunsetc.dme new file mode 100644 index 0000000000000..a6052c44828d8 --- /dev/null +++ b/mods/ssgunsetc/_ssgunsetc.dme @@ -0,0 +1,19 @@ +#ifndef MODPACK_SSGUNSETC +#define MODPACK_SSGUNSETC + +#include "_ssgunsetc.dm" + +// Далее просто включай свой код +// #include "code/something.dm" + +#endif +// BEGIN_INTERNALS +// END_INTERNALS +// BEGIN_FILE_DIR +#define FILE_DIR . +// END_FILE_DIR +// BEGIN_PREFERENCES +// END_PREFERENCES +// BEGIN_INCLUDE +#include "_ssgunsetc.dm" +// END_INCLUDE diff --git a/mods/ssgunsetc/code/guns/energy/stun.dm b/mods/ssgunsetc/code/guns/energy/stun.dm new file mode 100644 index 0000000000000..be46759f3ef70 --- /dev/null +++ b/mods/ssgunsetc/code/guns/energy/stun.dm @@ -0,0 +1,38 @@ +/obj/item/gun/energy/taser +..() + +/obj/item/gun/energy/taser/carbine +..() + +/obj/item/gun/energy/taser/mounted +..() + +/obj/item/gun/energy/taser/mounted/cyborg +..() + +/obj/item/gun/energy/stunrevolver +..() + +/obj/item/gun/energy/stunrevolver/rifle +..() + +/obj/item/gun/energy/crossbow +..() + +/obj/item/gun/energy/crossbow/ninja +..() + +/obj/item/gun/energy/crossbow/ninja/mounted +..() + +/obj/item/gun/energy/crossbow/largecrossbow +..() + +/obj/item/gun/energy/plasmastun +..() + +/obj/item/gun/energy/confuseray +..() + icon = 'mods/ssgunsetc/code/iconsconfuseraysec' + icon_state = "confuseray" + safety_icon = "safety" diff --git a/mods/ssgunsetc/code/icons/confuseraysec.dmi b/mods/ssgunsetc/code/icons/confuseraysec.dmi new file mode 100644 index 0000000000000000000000000000000000000000..884212eb4a8b2bf280991d5658983d131c31bf90 GIT binary patch literal 746 zcmVoj-N=ix_8zBJ9%)r3F5Wr|K@Q_OMvdI7d00DGTPE!Ct=GbNc z006LhR9JLGWpiV4X>fFDZ*Bkpc$}4yu?oU46h-H}uL$ibrKt^0F47_$>^}taVgt5? zBwG6SCKg1I3>hxm3x_kjm(x>w?t0o>I(VY7dY?f7M9VV!X3 zYnB0#+E`y15M{)OTmJypc~TFHMyv@aE6W7>z!PAeVy;rm5wX9V#JgBSE%+{k6?F&@ zgNvTzuh0sGE++fqSd9C2=d|sc_j_OG6N&FII|v&900DwYL_t(&f$f^>PJ}QJg>fog zaG^yDg3VHk(OK+BsaZfG!-<} z2kPH#jahL(w>i<>eK_(we^~C2s*nA@K8yo;ECNrbaKxgx++e?6vbtn|sItzwYQVXg zj@8fo!xP9kAp86>V{sExbG^8p{DA!DBQvN(9sN~VGM*Fx~^;D16;?eSRAd7 z2I7wZZ=mb@o~#X*vv$lSOx0scGnR(y-!^SSnawEUR;TKNfeFSyAJ+S|pOAEYaKM$b z^{roBo2p;5Wp045f1*A$UV9n&KCIt7!8CntfqfTx-)^o?)py_nnmPag006*$Ks*17 zx^n&(^)bJfe10GGa#JtMZT<8X4qjKz|KfZ=JO9h`0qy)R&j+;gzc?Sz&i}HmoBzf6 zfOh`hr7PxtQCH6Y;(S0m|BLeh?fk!EKA@fdF&_W`00000;MYk1q@&Et; literal 0 HcmV?d00001 From 8a24ba9eed9cc77efd3048b6b9e66491aa0394fd Mon Sep 17 00:00:00 2001 From: Merlin1230 <76177064+Merlin1230@users.noreply.github.com> Date: Wed, 13 Mar 2024 21:00:11 +0300 Subject: [PATCH 009/311] [MIRROR] Adds a Zeng-Hu Logo to pencode! --- code/_helpers/text.dm | 8 ++++++++ code/modules/client/client_procs.dm | 4 ++++ code/modules/codex/entries/paperwork.dm | 5 +++-- code/modules/paperwork/adminpaper.dm | 2 +- html/images/zhlogo.png | Bin 0 -> 3038 bytes 5 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 html/images/zhlogo.png diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 1fc049bbc6f6f..43e918a298d64 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -436,6 +436,7 @@ t = replacetext(t, "\[fleetlogo\]", "") t = replacetext(t, "\[sfplogo\]", "") t = replacetext(t, "\[falogo\]", "") +<<<<<<< ours // [SIERRA-ADD] t = replacetext(t, "\[ofbluelogo\]", "") t = replacetext(t, "\[ofntlogo\]", "") @@ -443,6 +444,9 @@ t = replacetext(t, "\[ccalogo\]", "") t = replacetext(t, "\[sierralogo\]", "") // [/SIERRA-ADD] +======= + t = replacetext(t, "\[zhlogo\]", "") +>>>>>>> theirs t = replacetext(t, "\[editorbr\]", "") return t @@ -500,6 +504,7 @@ t = replacetext(t, "", "\[xynlogo\]") t = replacetext(t, "", "\[sfplogo\]") t = replacetext(t, "", "\[falogo\]") +<<<<<<< ours // [SIERRA-ADD] t = replacetext(t, "", "\[ofbluelogo\]" ) t = replacetext(t, "", "\[ofntlogo\]" ) @@ -507,6 +512,9 @@ t = replacetext(t, "", "\[ccalogo\]" ) t = replacetext(t, "", "\[sierralogo\]" ) // [/SIERRA-ADD] +======= + t = replacetext(t, ">>>>>> theirs t = replacetext(t, "", "\[field\]") t = replacetext(t, "R E D A C T E D", "\[redacted\]") t = strip_html_properly(t) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 7da1a0011ef02..909e2359bfaa7 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -401,6 +401,7 @@ 'html/images/FleetLogo.png', 'html/images/sfplogo.png', 'html/images/falogo.png', +<<<<<<< ours // [SIERRA-ADD] , 'html/images/ofbluelogo.png', 'html/images/ofntlogo.png', @@ -408,6 +409,9 @@ 'html/images/ccalogo.png', 'html/images/sierralogo.png', // [/SIERRA-ADD] +======= + 'html/images/zhlogo.png' +>>>>>>> theirs ) addtimer(new Callback(src, .proc/after_send_resources), 1 SECOND) diff --git a/code/modules/codex/entries/paperwork.dm b/code/modules/codex/entries/paperwork.dm index 4cce5071dd4ae..ab4a246275e2f 100644 --- a/code/modules/codex/entries/paperwork.dm +++ b/code/modules/codex/entries/paperwork.dm @@ -31,8 +31,9 @@ \[xynlogo\] - Inserts the Xyngergy logo.
\[iccgseal\] - Inserts ICCG seal.
\[fleetlogo\] - Inserts the logo of the SCG Fleet.
-\[sfplogo\] - Inserts the logo of the Sol Federal Police.

-\[falogo\] - Inserts the logo of the Frontier Alliance.

+\[sfplogo\] - Inserts the logo of the Sol Federal Police.
+\[falogo\] - Inserts the logo of the Frontier Alliance.
+\[zhlogo\] - Inserts the logo of the Frontier Alliance.

Digital exclusive commands (NanoWord, emails, reports, text files, etc):
\[pre\] - \[/pre\] : Adds preformatted text, forcing the text to be fixed width.
\[fontred\] - \[/font\] : Makes the text red.
diff --git a/code/modules/paperwork/adminpaper.dm b/code/modules/paperwork/adminpaper.dm index 994aeb54cab4c..77bcbce1c7a1c 100644 --- a/code/modules/paperwork/adminpaper.dm +++ b/code/modules/paperwork/adminpaper.dm @@ -19,7 +19,7 @@ var/footer = null var/footerOn = FALSE - var/logo_list = list("sollogo.png","eclogo.png","fleetlogo.png","exologo.png","ntlogo.png","daislogo.png","xynlogo.png","terralogo.png", "sfplogo.png", "falogo.png") + var/logo_list = list("sollogo.png","eclogo.png","fleetlogo.png","exologo.png","ntlogo.png","daislogo.png","xynlogo.png","terralogo.png", "sfplogo.png", "falogo.png", "zhlogo.png") var/logo = "" var/unformatedText = "" diff --git a/html/images/zhlogo.png b/html/images/zhlogo.png new file mode 100644 index 0000000000000000000000000000000000000000..55e8cf327311df692990e87b2523465ce2cef99d GIT binary patch literal 3038 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 literal 0 HcmV?d00001 From 05dc35133102549fc88e6183aad214113fff4632 Mon Sep 17 00:00:00 2001 From: rootoo807 <71034457+rootoo807@users.noreply.github.com> Date: Wed, 13 Mar 2024 21:00:17 +0300 Subject: [PATCH 010/311] [MIRROR] Replaces macros with custom pronouns based on choose_from_pronouns --- code/game/gamemodes/cult/ritual.dm | 3 +- code/game/gamemodes/cult/runes.dm | 6 +- code/game/gamemodes/objective.dm | 8 +-- code/game/objects/items.dm | 3 +- code/game/objects/items/devices/flashlight.dm | 3 +- code/game/objects/items/weapons/handcuffs.dm | 3 +- .../objects/items/weapons/material/kitchen.dm | 3 +- .../objects/items/weapons/melee/energy.dm | 3 +- .../objects/items/weapons/storage/bible.dm | 3 +- code/modules/admin/admin_verbs.dm | 4 +- code/modules/augment/active/polytool.dm | 10 ++-- code/modules/augment/active/powerfist.dm | 10 ++-- code/modules/augment/implanter.dm | 5 +- code/modules/augment/item.dm | 6 +- code/modules/clothing/_clothing.dm | 9 +-- code/modules/games/cards.dm | 3 +- code/modules/mob/grab/normal/grab_normal.dm | 39 ++++++------ .../mob/grab/normal/norm_aggressive.dm | 3 +- code/modules/mob/grab/normal/norm_kill.dm | 3 +- code/modules/mob/grab/normal/norm_neck.dm | 3 +- code/modules/mob/grab/normal/norm_struggle.dm | 10 ++-- code/modules/mob/living/carbon/human/human.dm | 19 +++--- .../living/carbon/human/human_attackhand.dm | 8 ++- .../mob/living/carbon/human/human_organs.dm | 3 +- code/modules/mob/living/carbon/human/life.dm | 3 +- .../mob/living/carbon/human/unarmed_attack.dm | 59 +++++++++++-------- code/modules/mob/living/silicon/pai/pai.dm | 5 +- .../living/silicon/pai/software_modules.dm | 12 ++-- .../mob/living/silicon/robot/drone/drone.dm | 3 +- .../modules/mob/living/silicon/robot/robot.dm | 6 +- code/modules/mob/skills/skill_verbs.dm | 4 +- code/modules/organs/external/_external.dm | 3 +- .../organs/external/species/nabber_threat.dm | 5 +- code/modules/paperwork/paper.dm | 2 +- code/modules/paperwork/paper_bundle.dm | 2 +- code/modules/paperwork/papershredder.dm | 2 +- code/modules/power/lighting.dm | 3 +- code/modules/projectiles/gun.dm | 3 +- .../modules/projectiles/projectile/special.dm | 3 +- .../modules/psionics/faculties/energistics.dm | 3 +- code/modules/species/species_attack.dm | 33 ++++++----- code/modules/supermatter/supermatter.dm | 7 ++- code/modules/surgery/slimes.dm | 3 +- 43 files changed, 195 insertions(+), 136 deletions(-) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 2e28a4a5e5b92..5cb2b20535b13 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -339,7 +339,8 @@ var/global/list/Tier4Runes = list( return /mob/living/carbon/human/message_cult_communicate() - visible_message(SPAN_WARNING("\The [src] cuts \his finger and starts drawing on the back of \his hand.")) + var/datum/pronouns/pronouns = choose_from_pronouns() + visible_message(SPAN_WARNING("\The [src] cuts [pronouns.his] finger and starts drawing on the back of [pronouns.his] hand.")) /mob/proc/obscure() set category = "Cult Magic" diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index f10d194da3f81..faa53959c7f5a 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -327,10 +327,11 @@ /obj/rune/ajorney/cast(mob/living/user) var/tmpkey = user.key + var/datum/pronouns/pronouns = user.choose_from_pronouns() if(user.loc != get_turf(src)) return speak_incantation(user, "Fwe[pick("'","`")]sh mah erl nyag r'ya!") - user.visible_message(SPAN_WARNING("\The [user]'s eyes glow blue as \he freezes in place, absolutely motionless."), SPAN_WARNING("The shadow that is your spirit separates itself from your body. You are now in the realm beyond. While this is a great sight, being here strains your mind and body. Hurry..."), "You hear only complete silence for a moment.") + user.visible_message(SPAN_WARNING("\The [user]'s eyes glow blue as [pronouns.he] freezes in place, absolutely motionless."), SPAN_WARNING("The shadow that is your spirit separates itself from your body. You are now in the realm beyond. While this is a great sight, being here strains your mind and body. Hurry..."), "You hear only complete silence for a moment.") announce_ghost_joinleave(user.ghostize(1), 1, "You feel that they had to use some [pick("dark", "black", "blood", "forgotten", "forbidden")] magic to [pick("invade", "disturb", "disrupt", "infest", "taint", "spoil", "blight")] this place!") var/mob/observer/ghost/soul for(var/mob/observer/ghost/O in GLOB.ghost_mobs) @@ -717,6 +718,7 @@ /obj/rune/revive/cast(mob/living/user) var/mob/living/carbon/human/target var/obj/item/device/soulstone/source + var/datum/pronouns/pronouns = user.choose_from_pronouns() for(var/mob/living/carbon/human/M in get_turf(src)) if(M.stat == DEAD) if(iscultist(M)) @@ -734,7 +736,7 @@ target.rejuvenate() source.set_full(0) speak_incantation(user, "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!") - target.visible_message(SPAN_WARNING("\The [target]'s eyes glow with a faint red as \he stands up, slowly starting to breathe again."), SPAN_WARNING("Life... I'm alive again..."), "You hear liquid flow.") + target.visible_message(SPAN_WARNING("\The [target]'s eyes glow with a faint red as [pronouns.he] stands up, slowly starting to breathe again."), SPAN_WARNING("Life... I'm alive again..."), "You hear liquid flow.") /obj/rune/blood_boil cultname = "blood boil" diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index d39c6046dab08..cbe94ebc1694b 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -60,7 +60,7 @@ var/global/list/all_objectives = list() /datum/objective/anti_revolution/execute/find_target() ..() if(target && target.current) - explanation_text = "[target.current.real_name], the [target.assigned_role] has extracted confidential information above their clearance. Execute \him[target.current]." + explanation_text = "[target.current.real_name], the [target.assigned_role] has extracted confidential information above their clearance. Execute them." else explanation_text = "Free Objective" return target @@ -68,7 +68,7 @@ var/global/list/all_objectives = list() /datum/objective/anti_revolution/execute/find_target_by_role(role, role_type = 0) ..(role, role_type) if(target && target.current) - explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has extracted confidential information above their clearance. Execute \him[target.current]." + explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has extracted confidential information above their clearance. Execute them." else explanation_text = "Free Objective" return target @@ -99,7 +99,7 @@ var/global/list/all_objectives = list() /datum/objective/anti_revolution/demote/find_target() ..() if(target && target.current) - explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [GLOB.using_map.company_name]'s goals. Demote \him[target.current] to assistant." + explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [GLOB.using_map.company_name]'s goals. Demote them to assistant." else explanation_text = "Free Objective" return target @@ -107,7 +107,7 @@ var/global/list/all_objectives = list() /datum/objective/anti_revolution/demote/find_target_by_role(role, role_type = 0) ..(role, role_type) if(target && target.current) - explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [GLOB.using_map.company_name]'s goals. Demote \him[target.current] to assistant." + explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [GLOB.using_map.company_name]'s goals. Demote them to assistant." else explanation_text = "Free Objective" return target diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index b408a5ce0f5d9..f5d021bb058e1 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -592,7 +592,8 @@ var/global/list/slot_flags_enumeration = list( if(!istype(attacker)) return 0 attacker.apply_damage(force, damtype, attacker.hand ? BP_L_HAND : BP_R_HAND, used_weapon = src) - attacker.visible_message(SPAN_DANGER("[attacker] hurts \his hand on [src]!")) + var/datum/pronouns/pronouns = attacker.choose_from_pronouns() + attacker.visible_message(SPAN_DANGER("[attacker] hurts [pronouns.his] hand on \the [src]!")) admin_attack_log(attacker, target, "Attempted to disarm but was blocked", "Was targeted with a disarm but blocked the attack", "attmpted to disarm but was blocked by") playsound(target, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) playsound(target, hitsound, 50, 1, -1) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 59ff8193c7e27..90055acaffd5d 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -110,7 +110,8 @@ vision = H.internal_organs_by_name[H.species.vision_organ] if(!vision) vision = H.species.has_organ[H.species.vision_organ] - to_chat(user, SPAN_WARNING("\The [H] is missing \his [initial(vision.name)]!")) + var/datum/pronouns/pronouns = H.choose_from_pronouns() + to_chat(user, SPAN_WARNING("\The [H] is missing [pronouns.his] [initial(vision.name)]!")) return TRUE user.visible_message(SPAN_NOTICE("\The [user] directs [src] into [M]'s [vision.name]."), \ diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index e86686ba5afd7..d61535837298e 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -125,7 +125,8 @@ var/global/last_chew = 0 var/obj/item/organ/external/O = H.organs_by_name[(H.hand ? BP_L_HAND : BP_R_HAND)] if (!O) return - H.visible_message(SPAN_DANGER("\The [H] chews on \his [O.name]!"), SPAN_DANGER("You chew on your [O.name]!")) + var/datum/pronouns/pronouns = H.choose_from_pronouns() + H.visible_message(SPAN_DANGER("\The [H] chews on [pronouns.his] [O.name]!"), SPAN_DANGER("You chew on your [O.name]!")) admin_attacker_log(H, "chewed on their [O.name]!") O.take_external_damage(3,0, DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE ,"teeth marks") diff --git a/code/game/objects/items/weapons/material/kitchen.dm b/code/game/objects/items/weapons/material/kitchen.dm index c16b98b68b56b..645c2c2dcd176 100644 --- a/code/game/objects/items/weapons/material/kitchen.dm +++ b/code/game/objects/items/weapons/material/kitchen.dm @@ -135,8 +135,9 @@ /obj/item/material/kitchen/rollingpin/use_before(mob/living/target, mob/living/user) . = FALSE if ((MUTATION_CLUMSY in user.mutations) && prob(50) && user.unEquip(src)) + var/datum/pronouns/pronouns = user.choose_from_pronouns() user.visible_message( - SPAN_WARNING("\The [user] manages to hit \himself on the head with \the [src]!"), + SPAN_WARNING("\The [user] manages to hit [pronouns.self] on the head with \the [src]!"), SPAN_WARNING("\The [src] slips out of your hand and hits your head!"), SPAN_WARNING("Bonk!") ) diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 23f25c25a27c5..4fc2d9eb90971 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -93,7 +93,8 @@ /obj/item/melee/energy/attack_self(mob/living/user as mob) if (active) if ((MUTATION_CLUMSY in user.mutations) && prob(50)) - user.visible_message(SPAN_DANGER("\The [user] accidentally cuts \himself with \the [src]."),\ + var/datum/pronouns/pronouns = user.choose_from_pronouns() + user.visible_message(SPAN_DANGER("\The [user] accidentally cuts [pronouns.self] with \the [src]."),\ SPAN_DANGER("You accidentally cut yourself with \the [src].")) user.take_organ_damage(5,5) deactivate(user) diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 4552132208e2e..acb936a7ba6f2 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -72,7 +72,8 @@ if (user.mind && istype(user.mind.assigned_job, /datum/job/chaplain)) user.visible_message(SPAN_NOTICE("\The [user] places \the [src] on \the [M]'s forehead, reciting a prayer...")) if (do_after(user, 5 SECONDS, M, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) && user.Adjacent(M)) - user.visible_message("\The [user] finishes reciting \his prayer, removing \the [src] from \the [M]'s forehead.", "You finish reciting your prayer, removing \the [src] from \the [M]'s forehead.") + var/datum/pronouns/pronouns = user.choose_from_pronouns() + user.visible_message("\The [user] finishes reciting [pronouns.his] prayer, removing \the [src] from \the [M]'s forehead.", "You finish reciting your prayer, removing \the [src] from \the [M]'s forehead.") if (user.get_cultural_value(TAG_RELIGION) == M.get_cultural_value(TAG_RELIGION)) to_chat(M, SPAN_NOTICE("You feel calm and relaxed, at one with the universe.")) else diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 6f1cc863673bc..395d07e2345e8 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -678,10 +678,10 @@ var/global/list/admin_verbs_mod = list( switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel")) if("Yes") - log_and_message_admins("has allowed [H] to change \his appearance, ignoring allow lists.") + log_and_message_admins("has allowed [H] to change their appearance, ignoring allow lists.") H.change_appearance(APPEARANCE_COMMON | APPEARANCE_SKIP_ALLOW_LIST_CHECK) if("No") - log_and_message_admins("has allowed [H] to change \his appearance, respecting allow lists.") + log_and_message_admins("has allowed [H] to change their appearance, respecting allow lists.") H.change_appearance(APPEARANCE_COMMON) /client/proc/change_security_level() diff --git a/code/modules/augment/active/polytool.dm b/code/modules/augment/active/polytool.dm index 405602f2b49b6..0739a873c41da 100644 --- a/code/modules/augment/active/polytool.dm +++ b/code/modules/augment/active/polytool.dm @@ -42,9 +42,10 @@ to_chat(owner, "\the [I] fails to retract.") return items += I + var/datum/pronouns/pronouns = owner.choose_from_pronouns() owner.visible_message( - SPAN_WARNING("[owner] retracts \his [I] into [limb]."), - SPAN_NOTICE("You retract your [I] into [limb].") + SPAN_WARNING("[owner] retracts [pronouns.his] [I] into [pronouns.his] [limb]."), + SPAN_NOTICE("You retract your [I] into your [limb].") ) else to_chat(owner, SPAN_WARNING("You must drop [I] before tool can be extend.")) @@ -56,7 +57,8 @@ items -= item //Keep track of it, make sure it returns GLOB.item_unequipped_event.register(item, src, /obj/item/organ/internal/augment/active/polytool/proc/holding_dropped) + var/datum/pronouns/pronouns = owner.choose_from_pronouns() owner.visible_message( - SPAN_WARNING("[owner] extends \his [item.name] from [limb]."), - SPAN_NOTICE("You extend your [item.name] from [limb].") + SPAN_WARNING("[owner] extends [pronouns.his] [item.name] from [pronouns.his] [limb]."), + SPAN_NOTICE("You extend your [item.name] from your [limb].") ) diff --git a/code/modules/augment/active/powerfist.dm b/code/modules/augment/active/powerfist.dm index 3c3a0f7baddeb..62ea627f5e4d8 100644 --- a/code/modules/augment/active/powerfist.dm +++ b/code/modules/augment/active/powerfist.dm @@ -37,6 +37,7 @@ /obj/item/powerfist/attackby(obj/item/item, mob/user) + var/datum/pronouns/pronouns = user.choose_from_pronouns() if (!istype(item, /obj/item/tank)) return var/obj/item/tank/other = item @@ -47,7 +48,7 @@ to_chat(user, SPAN_WARNING("\The [src] already has \a [tank] installed.")) return user.visible_message( - SPAN_ITALIC("\The [user] starts connecting \a [item] to \his [src]."), + SPAN_ITALIC("\The [user] starts connecting \a [item] to [pronouns.his] [src]."), SPAN_ITALIC("You start connecting \the [item] to \the [src]."), range = 5 ) @@ -56,7 +57,7 @@ if (!user.unEquip(item, src)) return user.visible_message( - SPAN_ITALIC("\The [user] finishes connecting \a [item] to \his [src]."), + SPAN_ITALIC("\The [user] finishes connecting \a [item] to [pronouns.his] [src]."), SPAN_NOTICE("You finish connecting \the [item] to \the [src]."), range = 5 ) @@ -96,18 +97,19 @@ /obj/item/powerfist/attack_hand(mob/living/user) + var/datum/pronouns/pronouns = user.choose_from_pronouns() if (!tank) to_chat(user, SPAN_WARNING("There's no tank in \the [src].")) return user.visible_message( - SPAN_ITALIC("\The [user] starts disconnecting \a [tank] from \his [src]."), + SPAN_ITALIC("\The [user] starts disconnecting \a [tank] from [pronouns.his] [src]."), SPAN_ITALIC("You start disconnecting \the [tank] from \the [src]."), range = 5 ) if (!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) return user.visible_message( - SPAN_ITALIC("\The [user] finishes disconnecting \a [tank] from \his [src]."), + SPAN_ITALIC("\The [user] finishes disconnecting \a [tank] from [pronouns.his] [src]."), SPAN_NOTICE("You finish disconnecting \the [tank] from \the [src]."), range = 5 ) diff --git a/code/modules/augment/implanter.dm b/code/modules/augment/implanter.dm index e8192778a23f6..8ca0b86acc724 100644 --- a/code/modules/augment/implanter.dm +++ b/code/modules/augment/implanter.dm @@ -102,10 +102,11 @@ if (loc != old_loc) return var/success = instant + var/datum/pronouns/pronouns = user.choose_from_pronouns() if (!instant) working = TRUE to_chat(user, SPAN_WARNING("\icon[src] Commencing procedure. " + SPAN_DANGER("Please remain calm."))) - user.visible_message(SPAN_WARNING("\The [user] places \his [parent.name] against \the [src].")) + user.visible_message(SPAN_WARNING("\The [user] places [pronouns.his] [parent.name] against \the [src].")) if (!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) goto FailedAugmentImplant user.visible_message(SPAN_DANGER("\The [src] purrs maliciously and unfurls its armatures with frightening speed!")) @@ -147,7 +148,7 @@ FailedAugmentImplant: working = FALSE if (!success) - user.visible_message(SPAN_DANGER("\The [src] falls away from \the [user], leaving \his [parent.name] a mangled mess!")) + user.visible_message(SPAN_DANGER("\The [src] falls away from \the [user], leaving [pronouns.his] [parent.name] a mangled mess!")) parent.take_general_damage(15) return to_chat(user, SPAN_WARNING("\icon[src] Procedure complete. ") + SPAN_NOTICE("Have a nice day.")) diff --git a/code/modules/augment/item.dm b/code/modules/augment/item.dm index 34009e345de14..b22c29d35d9b7 100644 --- a/code/modules/augment/item.dm +++ b/code/modules/augment/item.dm @@ -68,8 +68,9 @@ if (deploy_sound) playsound(owner, deploy_sound, 30) if (as_owner) + var/datum/pronouns/pronouns = owner.choose_from_pronouns() owner.visible_message( - SPAN_WARNING("\The [owner] extends \his [item.name] from \his [limb.name]."), + SPAN_WARNING("\The [owner] extends [pronouns.his] [item.name] from [pronouns.his] [limb.name]."), SPAN_NOTICE("You extend your [item.name] from your [limb.name].") ) else @@ -91,8 +92,9 @@ if (retract_sound) playsound(owner, retract_sound, 30) if (as_owner) + var/datum/pronouns/pronouns = M.choose_from_pronouns() M.visible_message( - SPAN_WARNING("\The [M] retracts \his [item.name] into \his [limb.name]."), + SPAN_WARNING("\The [M] retracts [pronouns.his] [item.name] into [pronouns.his] [limb.name]."), SPAN_NOTICE("You retract your [item.name] into your [limb.name].") ) else diff --git a/code/modules/clothing/_clothing.dm b/code/modules/clothing/_clothing.dm index 8d65f3dd8db8d..78548f69f3563 100644 --- a/code/modules/clothing/_clothing.dm +++ b/code/modules/clothing/_clothing.dm @@ -995,16 +995,17 @@ BLIND // can't see anything return sensor_mode = SUIT_SENSOR_MODES[switchMode] + var/datum/pronouns/pronouns = user.choose_from_pronouns() if (src.loc == user) switch(sensor_mode) if(SUIT_SENSOR_OFF) - user.visible_message("[user] adjusts the tracking sensor on \his [src.name].", "You disable your suit's remote sensing equipment.") + user.visible_message("[user] adjusts the tracking sensor on [pronouns.his] [src.name].", "You disable your suit's remote sensing equipment.") if(SUIT_SENSOR_BINARY) - user.visible_message("[user] adjusts the tracking sensor on \his [src.name].", "Your suit will now report whether you are live or dead.") + user.visible_message("[user] adjusts the tracking sensor on [pronouns.his] [src.name].", "Your suit will now report whether you are live or dead.") if(SUIT_SENSOR_VITAL) - user.visible_message("[user] adjusts the tracking sensor on \his [src.name].", "Your suit will now report your vital lifesigns.") + user.visible_message("[user] adjusts the tracking sensor on [pronouns.his] [src.name].", "Your suit will now report your vital lifesigns.") if(SUIT_SENSOR_TRACKING) - user.visible_message("[user] adjusts the tracking sensor on \his [src.name].", "Your suit will now report your vital lifesigns as well as your coordinate position.") + user.visible_message("[user] adjusts the tracking sensor on [pronouns.his] [src.name].", "Your suit will now report your vital lifesigns as well as your coordinate position.") else if (ismob(src.loc)) if(sensor_mode == SUIT_SENSOR_OFF) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 53ac8920f8982..35adf60da816e 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -159,7 +159,8 @@ H.concealed = 1 H.update_icon() if(user==target) - user.visible_message("\The [user] deals a card to \himself.") + var/datum/pronouns/pronouns = user.choose_from_pronouns() + user.visible_message("\The [user] deals a card to [pronouns.self].") else user.visible_message("\The [user] deals a card to \the [target].") H.throw_at(get_step(target,target.dir),10,1,user) diff --git a/code/modules/mob/grab/normal/grab_normal.dm b/code/modules/mob/grab/normal/grab_normal.dm index 21fbbbd3c3745..81e6541935cf1 100644 --- a/code/modules/mob/grab/normal/grab_normal.dm +++ b/code/modules/mob/grab/normal/grab_normal.dm @@ -7,10 +7,10 @@ return var/obj/O = get_targeted_organ() if(affecting != assailant) - visible_message(SPAN_WARNING("[assailant] has grabbed [affecting]'s [O.name]!")) + visible_message(SPAN_WARNING("\The [assailant] has grabbed \the [affecting]'s [O.name]!")) else var/datum/pronouns/P = assailant.choose_from_pronouns() - visible_message(SPAN_NOTICE("[assailant] has grabbed [P.his] [O.name]!")) + visible_message(SPAN_NOTICE("\The [assailant] has grabbed [P.his] [O.name]!")) if(!(affecting.a_intent == I_HELP)) upgrade(TRUE) @@ -46,11 +46,11 @@ G.attacking = 0 G.action_used() affecting.Weaken(2) - affecting.visible_message(SPAN_NOTICE("[assailant] pins [affecting] to the ground!")) + affecting.visible_message(SPAN_NOTICE("\The [assailant] pins \the [affecting] to the ground!")) return TRUE else - affecting.visible_message(SPAN_NOTICE("[assailant] fails to pin [affecting] to the ground.")) + affecting.visible_message(SPAN_NOTICE("\The [assailant] fails to pin \the [affecting] to the ground.")) G.attacking = 0 return TRUE else @@ -67,7 +67,7 @@ return FALSE if(!O) - to_chat(assailant, SPAN_WARNING("[affecting] is missing that body part!")) + to_chat(assailant, SPAN_WARNING("\The [affecting] is missing that body part!")) return FALSE assailant.visible_message(SPAN_CLASS("danger", "\The [assailant] begins to [pick("bend", "twist")] \the [affecting]'s [O.name] into a jointlock!")) @@ -82,13 +82,13 @@ G.attacking = 0 G.action_used() O.jointlock(assailant) - assailant.visible_message(SPAN_DANGER("[affecting]'s [O.name] is twisted!")) + assailant.visible_message(SPAN_DANGER("\The [affecting]'s [O.name] is twisted!")) playsound(assailant.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) return TRUE else - affecting.visible_message(SPAN_NOTICE("[assailant] fails to jointlock [affecting]'s [O.name].")) + affecting.visible_message(SPAN_NOTICE("\The [assailant] fails to jointlock \the [affecting]'s [O.name].")) G.attacking = 0 return TRUE @@ -126,15 +126,15 @@ else - affecting.visible_message(SPAN_NOTICE("[assailant] fails to dislocate [affecting]'s [O.joint].")) + affecting.visible_message(SPAN_NOTICE("\The [assailant] fails to dislocate \the [affecting]'s [O.joint].")) G.attacking = 0 return TRUE else if (O.dislocated > 0) - to_chat(assailant, SPAN_WARNING("[affecting]'s [O.joint] is already dislocated!")) + to_chat(assailant, SPAN_WARNING("\The [affecting]'s [O.joint] is already dislocated!")) return FALSE else - to_chat(assailant, SPAN_WARNING("You can't dislocate [affecting]'s [O.joint]!")) + to_chat(assailant, SPAN_WARNING("You can't dislocate \the [affecting]'s [O.joint]!")) return FALSE /datum/grab/normal/resolve_openhand_attack(obj/item/grab/G) @@ -162,7 +162,7 @@ to_chat(attacker, SPAN_DANGER("You're going to need to remove the eye covering first.")) return if(!target.has_eyes()) - to_chat(attacker, SPAN_DANGER("You cannot locate any eyes on [target]!")) + to_chat(attacker, SPAN_DANGER("You cannot locate any eyes on \the [target]!")) return admin_attack_log(attacker, target, "Grab attacked the victim's eyes.", "Had their eyes grab attacked.", "attacked the eyes, using a grab action, of") @@ -173,6 +173,7 @@ /datum/grab/normal/proc/headbutt(obj/item/grab/G) var/mob/living/carbon/human/attacker = G.assailant var/mob/living/carbon/human/target = G.affecting + var/datum/pronouns/pronouns = attacker.choose_from_pronouns() if(!attacker.skill_check(SKILL_COMBAT, SKILL_BASIC)) return @@ -188,9 +189,9 @@ damage_flags = hat.damage_flags() if(damage_flags & DAMAGE_FLAG_SHARP) - attacker.visible_message(SPAN_CLASS("danger", "[attacker] gores [target][istype(hat)? " with \the [hat]" : ""]!")) + attacker.visible_message(SPAN_CLASS("danger", "\The [attacker] gores \the [target][istype(hat)? " with \the [hat]" : ""]!")) else - attacker.visible_message(SPAN_DANGER("[attacker] thrusts \his head into [target]'s skull!")) + attacker.visible_message(SPAN_DANGER("\The [attacker] thrusts [pronouns.his] head into \the [target]'s skull!")) var/armor = target.get_blocked_ratio(BP_HEAD, DAMAGE_BRUTE, damage = 10) target.apply_damage(damage, DAMAGE_BRUTE, BP_HEAD, damage_flags) @@ -222,20 +223,20 @@ return switch(new_zone) if(BP_MOUTH) - G.assailant.visible_message(SPAN_WARNING("\The [G.assailant] covers [G.affecting]'s mouth!")) + G.assailant.visible_message(SPAN_WARNING("\The [G.assailant] covers \the [G.affecting]'s mouth!")) if(BP_EYES) - G.assailant.visible_message(SPAN_WARNING("\The [G.assailant] covers [G.affecting]'s eyes!")) + G.assailant.visible_message(SPAN_WARNING("\The [G.assailant] covers \the [G.affecting]'s eyes!")) /datum/grab/normal/check_special_target(obj/item/grab/G) switch(G.target_zone) if(BP_MOUTH) if(!G.affecting.check_has_mouth()) - to_chat(G.assailant, SPAN_DANGER("You cannot locate a mouth on [G.affecting]!")) + to_chat(G.assailant, SPAN_DANGER("You cannot locate a mouth on \the [G.affecting]!")) return 0 if(BP_EYES) if(!G.affecting.has_eyes()) - to_chat(G.assailant, SPAN_DANGER("You cannot locate any eyes on [G.affecting]!")) + to_chat(G.assailant, SPAN_DANGER("You cannot locate any eyes on \the [G.affecting]!")) return 0 return TRUE @@ -254,7 +255,7 @@ if (!W.edge || !W.force || W.damtype != DAMAGE_BRUTE) return 0 //unsuitable weapon - user.visible_message(SPAN_DANGER("\The [user] begins to slit [affecting]'s throat with \the [W]!")) + user.visible_message(SPAN_DANGER("\The [user] begins to slit \the [affecting]'s throat with \the [W]!")) user.next_move = world.time + 20 //also should prevent user from triggering this repeatedly if(!do_after(user, 2 SECONDS * user.skill_delay_mult(SKILL_COMBAT), affecting, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) @@ -279,7 +280,7 @@ if(total_damage) - user.visible_message(SPAN_DANGER("\The [user] slit [affecting]'s throat open with \the [W]!")) + user.visible_message(SPAN_DANGER("\The [user] slit \the [affecting]'s throat open with \the [W]!")) if(W.hitsound) playsound(affecting.loc, W.hitsound, 50, 1, -1) diff --git a/code/modules/mob/grab/normal/norm_aggressive.dm b/code/modules/mob/grab/normal/norm_aggressive.dm index c55c53023944f..0cf64d0508c7d 100644 --- a/code/modules/mob/grab/normal/norm_aggressive.dm +++ b/code/modules/mob/grab/normal/norm_aggressive.dm @@ -25,9 +25,10 @@ /datum/grab/normal/aggressive/process_effect(obj/item/grab/G) var/mob/living/carbon/human/affecting = G.affecting var/mob/living/carbon/human/assailant = G.assailant + var/datum/pronouns/pronouns = assailant.choose_from_pronouns() if (assailant.incapacitated(INCAPACITATION_ALL)) - affecting.visible_message(SPAN_WARNING("[assailant] lets go of \his grab!")) + affecting.visible_message(SPAN_WARNING("\The [assailant] lets go of [pronouns.his] grab!")) qdel(G) return diff --git a/code/modules/mob/grab/normal/norm_kill.dm b/code/modules/mob/grab/normal/norm_kill.dm index 1827706877a56..828e82f9e5332 100644 --- a/code/modules/mob/grab/normal/norm_kill.dm +++ b/code/modules/mob/grab/normal/norm_kill.dm @@ -25,9 +25,10 @@ /datum/grab/normal/kill/process_effect(obj/item/grab/G) var/mob/living/carbon/human/affecting = G.affecting var/mob/living/carbon/human/assailant = G.assailant + var/datum/pronouns/pronouns = assailant.choose_from_pronouns() if (assailant.incapacitated(INCAPACITATION_ALL)) - affecting.visible_message(SPAN_WARNING("[assailant] lets go of \his grab!")) + affecting.visible_message(SPAN_WARNING("\The [assailant] lets go of [pronouns.his] grab!")) qdel(G) return diff --git a/code/modules/mob/grab/normal/norm_neck.dm b/code/modules/mob/grab/normal/norm_neck.dm index a7bff61c77fe0..7dbe9527f36b5 100644 --- a/code/modules/mob/grab/normal/norm_neck.dm +++ b/code/modules/mob/grab/normal/norm_neck.dm @@ -28,9 +28,10 @@ /datum/grab/normal/neck/process_effect(obj/item/grab/G) var/mob/living/carbon/human/affecting = G.affecting var/mob/living/carbon/human/assailant = G.assailant + var/datum/pronouns/pronouns = assailant.choose_from_pronouns() if (assailant.incapacitated(INCAPACITATION_ALL)) - affecting.visible_message(SPAN_WARNING("[assailant] lets go of \his grab!")) + affecting.visible_message(SPAN_WARNING("\The [assailant] lets go of [pronouns.his] grab!")) qdel(G) return diff --git a/code/modules/mob/grab/normal/norm_struggle.dm b/code/modules/mob/grab/normal/norm_struggle.dm index 5e12846ceed36..55d9a9f421e3b 100644 --- a/code/modules/mob/grab/normal/norm_struggle.dm +++ b/code/modules/mob/grab/normal/norm_struggle.dm @@ -27,20 +27,22 @@ /datum/grab/normal/struggle/process_effect(obj/item/grab/G) var/mob/living/carbon/human/affecting = G.affecting var/mob/living/carbon/human/assailant = G.assailant + var/datum/pronouns/pronouns = assailant.choose_from_pronouns() if (assailant.incapacitated(INCAPACITATION_ALL)) - affecting.visible_message(SPAN_WARNING("[assailant] lets go of \his grab!")) + affecting.visible_message(SPAN_WARNING("\The [assailant] lets go of [pronouns.his] grab!")) qdel(G) return if(affecting.incapacitated(INCAPACITATION_UNRESISTING) || affecting.a_intent == I_HELP) - affecting.visible_message(SPAN_WARNING("[affecting] isn't prepared to fight back as [assailant] tightens \his grip!")) + affecting.visible_message(SPAN_WARNING("\The [affecting] isn't prepared to fight back as \the [assailant] tightens [pronouns.his] grip!")) G.done_struggle = TRUE G.upgrade(TRUE) /datum/grab/normal/struggle/enter_as_up(obj/item/grab/G) var/mob/living/carbon/human/affecting = G.affecting var/mob/living/carbon/human/assailant = G.assailant + var/datum/pronouns/pronouns = assailant.choose_from_pronouns() if(affecting == assailant) G.done_struggle = TRUE @@ -48,11 +50,11 @@ return if(affecting.incapacitated(INCAPACITATION_UNRESISTING) || affecting.a_intent == I_HELP) - affecting.visible_message(SPAN_WARNING("[affecting] isn't prepared to fight back as [assailant] tightens \his grip!")) + affecting.visible_message(SPAN_WARNING("\The [affecting] isn't prepared to fight back as \the [assailant] tightens [pronouns.his] grip!")) G.done_struggle = TRUE G.upgrade(TRUE) else - affecting.visible_message(SPAN_WARNING("[affecting] struggles against [assailant]!")) + affecting.visible_message(SPAN_WARNING("\The [affecting] struggles against \the [assailant]!")) G.done_struggle = FALSE addtimer(new Callback(G, .proc/handle_resist), 1 SECOND) resolve_struggle(G) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 34e333d3183bc..74e539ee15991 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -649,8 +649,9 @@ return species.name /mob/living/carbon/human/proc/play_xylophone() + var/datum/pronouns/pronouns = choose_from_pronouns() if(!src.xylophone) - visible_message(SPAN_WARNING("\The [src] begins playing \his ribcage like a xylophone. It's quite spooky."),SPAN_NOTICE("You begin to play a spooky refrain on your ribcage."),SPAN_WARNING("You hear a spooky xylophone melody.")) + visible_message(SPAN_WARNING("\The [src] begins playing [pronouns.his] ribcage like a xylophone. It's quite spooky."),SPAN_NOTICE("You begin to play a spooky refrain on your ribcage."),SPAN_WARNING("You hear a spooky xylophone melody.")) var/song = pick('sound/effects/xylophone1.ogg','sound/effects/xylophone2.ogg','sound/effects/xylophone3.ogg') playsound(loc, song, 50, 1, -1) xylophone = 1 @@ -1073,27 +1074,28 @@ set desc = "Approximately count somebody's pulse. Requires you to stand still at least 6 seconds." set src in view(1) var/self = 0 + var/datum/pronouns/pronouns = usr.choose_from_pronouns() if(usr.stat || usr.restrained() || !isliving(usr)) return if(usr == src) self = 1 if(!self) - usr.visible_message(SPAN_NOTICE("[usr] kneels down, puts \his hand on [src]'s wrist and begins counting their pulse."),\ - "You begin counting [src]'s pulse") + usr.visible_message(SPAN_NOTICE("\The [usr] kneels down, puts [pronouns.his] hand on \the [src]'s wrist and begins counting their pulse."),\ + "You begin counting \the [src]'s pulse") else - usr.visible_message(SPAN_NOTICE("[usr] begins counting their pulse."),\ + usr.visible_message(SPAN_NOTICE("\The [usr] begins counting [pronouns.his] pulse."),\ "You begin counting your pulse.") if (!pulse() || status_flags & FAKEDEATH) - to_chat(usr, SPAN_DANGER("[src] has no pulse!")) + to_chat(usr, SPAN_DANGER("\The [src] has no pulse!")) return else - to_chat(usr, SPAN_NOTICE("[self ? "You have a" : "[src] has a"] pulse! Counting...")) + to_chat(usr, SPAN_NOTICE("[self ? "You have a" : "\The [src] has a"] pulse! Counting...")) to_chat(usr, "You must[self ? "" : " both"] remain still until counting is finished.") if(do_after(usr, 6 SECONDS, src, DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS)) - var/message = SPAN_NOTICE("[self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)].") + var/message = SPAN_NOTICE("[self ? "Your" : "\The [src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)].") to_chat(usr, message) else to_chat(usr, SPAN_WARNING("You failed to check the pulse. Try again.")) @@ -1756,7 +1758,8 @@ if(!nervous_system_failure() && active_breaths) visible_message("\The [src] jerks and gasps for breath!") else - visible_message("\The [src] twitches a bit as \his heart restarts!") + var/datum/pronouns/pronouns = choose_from_pronouns() + visible_message("\The [src] twitches a bit as [pronouns.his] heart restarts!") shock_stage = min(shock_stage, 100) // 120 is the point at which the heart stops. if(getOxyLoss() >= 75) setOxyLoss(75) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 2eaf614f59d88..40b280b2aef63 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -164,7 +164,8 @@ if (hit_zone != H.zone_sel.selecting) //If resolve_hand_attack returned a different zone, that means you're not as accurate. if (prob(15) && hit_zone != BP_CHEST && lying) - H.visible_message(SPAN_DANGER("\The [H] attempted to strike \the [src], but \he rolled out of the way!")) + var/datum/pronouns/pronouns = choose_from_pronouns() + H.visible_message(SPAN_DANGER("\The [H] attempted to strike \the [src], but [pronouns.he] rolled out of the way!")) set_dir(pick(GLOB.cardinal)) playsound(loc, attack.miss_sound, 25, 1, -1) return @@ -237,6 +238,7 @@ */ /mob/living/carbon/human/proc/apply_pressure(mob/living/user, target_zone) var/obj/item/organ/external/organ = get_organ(target_zone) + var/datum/pronouns/pronouns = user.choose_from_pronouns() if(!organ || !(organ.status & ORGAN_BLEEDING) || BP_IS_ROBOTIC(organ)) return 0 @@ -246,7 +248,7 @@ return 0 if(user == src) - user.visible_message("\The [user] starts applying pressure to \his [organ.name]!", "You start applying pressure to your [organ.name]!") + user.visible_message("\The [user] starts applying pressure to [pronouns.his] [organ.name]!", "You start applying pressure to your [organ.name]!") else user.visible_message("\The [user] starts applying pressure to [src]'s [organ.name]!", "You start applying pressure to [src]'s [organ.name]!") spawn(0) @@ -258,7 +260,7 @@ organ.applied_pressure = null if(user == src) - user.visible_message("\The [user] stops applying pressure to \his [organ.name]!", "You stop applying pressure to your [organ.name]!") + user.visible_message("\The [user] stops applying pressure to [pronouns.his] [organ.name]!", "You stop applying pressure to your [organ.name]!") else user.visible_message("\The [user] stops applying pressure to [src]'s [organ.name]!", "You stop applying pressure to [src]'s [organ.name]!") diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index a0df7a8a07b2f..bb5ad895fa455 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -217,7 +217,8 @@ return if(BP_IS_ROBOTIC(affected)) - visible_message("\The [src] drops what they were holding, \his [affected.name] malfunctioning!") + var/datum/pronouns/pronouns = choose_from_pronouns() + visible_message("\The [src] drops what they were holding, [pronouns.his] [affected.name] malfunctioning!") var/datum/effect/spark_spread/spark_system = new /datum/effect/spark_spread() spark_system.set_up(5, 0, src) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 837e73bd76f18..f0c9d9d4b1f23 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -925,7 +925,8 @@ custom_pain("[pick("It hurts so much", "You really need some painkillers", "Dear god, the pain")]!", 10, nohalloss = TRUE) if(shock_stage >= 30) - if(shock_stage == 30) visible_message("[src] is having trouble keeping \his eyes open.") + var/datum/pronouns/pronouns = choose_from_pronouns() + if(shock_stage == 30) visible_message("[src] is having trouble keeping [pronouns.his] eyes open.") if(prob(30)) eye_blurry = max(2, eye_blurry) stuttering = max(stuttering, 5) diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index 877342220f0db..207be30df6de2 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -62,7 +62,7 @@ var/global/list/sparring_attack_cache = list() switch(zone) // strong punches can have effects depending on where they hit if(BP_HEAD, BP_EYES, BP_MOUTH) // Induce blurriness - target.visible_message(SPAN_DANGER("[target] looks momentarily disoriented."), SPAN_DANGER("You see stars.")) + target.visible_message(SPAN_DANGER("\The [target] looks momentarily disoriented."), SPAN_DANGER("You see stars.")) target.apply_effect(attack_damage * 2, EFFECT_EYE_BLUR, armour) if(BP_L_ARM, BP_L_HAND) if (target.l_hand) @@ -80,25 +80,26 @@ var/global/list/sparring_attack_cache = list() var/turf/T = get_step(get_turf(target), get_dir(get_turf(user), get_turf(target))) if(!T.density) step(target, get_dir(get_turf(user), get_turf(target))) - target.visible_message(SPAN_CLASS("danger", "[pick("[target] was sent flying backward!", "[target] staggers back from the impact!")]")) + target.visible_message(SPAN_CLASS("danger", "[pick("\The [target] was sent flying backward!", "\The [target] staggers back from the impact!")]")) if(prob(50)) target.set_dir(GLOB.reverse_dir[target.dir]) target.apply_effect(attack_damage * 0.4, EFFECT_WEAKEN, armour) if(BP_GROIN) + var/datum/pronouns/pronouns = target.choose_from_pronouns() target.visible_message( - SPAN_WARNING("[target] looks like \he is in pain!"), + SPAN_WARNING("\The [target] looks like [pronouns.he] is in pain!"), SPAN_WARNING("[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]") ) target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour) if(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT) if(!target.lying) - target.visible_message(SPAN_WARNING("[target] gives way slightly.")) + target.visible_message(SPAN_WARNING("\The [target] gives way slightly.")) target.apply_effect(attack_damage * 3, EFFECT_PAIN, armour) else if(attack_damage >= 5 && !(target == user) && (stun_chance + attack_damage * 5 >= 100) && armour < 1) // Chance to get the usual throwdown as well (25% standard chance) if(!target.lying) - target.visible_message(SPAN_CLASS("danger", "[target] [pick("slumps", "falls", "drops")] down to the ground!")) + target.visible_message(SPAN_CLASS("danger", "\The [target] [pick("slumps", "falls", "drops")] down to the ground!")) else - target.visible_message(SPAN_DANGER("[target] has been weakened!")) + target.visible_message(SPAN_DANGER("\The [target] has been weakened!")) target.apply_effect(3, EFFECT_WEAKEN, armour * 100) var/obj/item/clothing/C = target.get_covering_equipped_item_by_zone(zone) @@ -107,17 +108,18 @@ var/global/list/sparring_attack_cache = list() /datum/unarmed_attack/proc/show_attack(mob/living/carbon/human/user, mob/living/carbon/human/target, zone, attack_damage) var/obj/item/organ/external/affecting = target.get_organ(zone) - user.visible_message(SPAN_WARNING("[user] [pick(attack_verb)] [target] in the [affecting.name]!")) + user.visible_message(SPAN_WARNING("\The [user] [pick(attack_verb)] \the [target] in the [affecting.name]!")) /datum/unarmed_attack/proc/handle_eye_attack(mob/living/carbon/human/user, mob/living/carbon/human/target) var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name[BP_EYES] + var/datum/pronouns/user_pronouns = user.choose_from_pronouns() if(eyes) eyes.take_internal_damage(rand(3,4), 1) - user.visible_message(SPAN_DANGER("[user] presses \his [eye_attack_text] into [target]'s [eyes.name]!")) + user.visible_message(SPAN_DANGER("\The [user] presses [user_pronouns.his] [eye_attack_text] into \the [target]'s [eyes.name]!")) var/eye_pain = eyes.can_feel_pain() to_chat(target, SPAN_CLASS("danger", "You experience[(eye_pain) ? "" : " immense pain as you feel" ] [eye_attack_text_victim] being pressed into your [eyes.name][(eye_pain)? "." : "!"]")) return - user.visible_message(SPAN_DANGER("[user] attempts to press \his [eye_attack_text] into [target]'s eyes, but they don't have any!")) + user.visible_message(SPAN_DANGER("\The [user] attempts to press [user_pronouns.his] [eye_attack_text] into \the [target]'s eyes, but they don't have any!")) /datum/unarmed_attack/proc/damage_flags() return (src.sharp? DAMAGE_FLAG_SHARP : 0)|(src.edge? DAMAGE_FLAG_EDGE : 0) @@ -155,11 +157,14 @@ var/global/list/sparring_attack_cache = list() /datum/unarmed_attack/punch/show_attack(mob/living/carbon/human/user, mob/living/carbon/human/target, zone, attack_damage) var/obj/item/organ/external/affecting = target.get_organ(zone) var/organ = affecting.name + var/datum/pronouns/user_pronouns = user.choose_from_pronouns() + var/datum/pronouns/target_pronouns = target.choose_from_pronouns() attack_damage = clamp(attack_damage, 1, 5) // We expect damage input of 1 to 5 for this proc. But we leave this check juuust in case. if(target == user) - user.visible_message(SPAN_DANGER("[user] [pick(attack_verb)] \himself in the [organ]!")) + var/datum/pronouns/pronouns = user.choose_from_pronouns() + user.visible_message(SPAN_DANGER("\The [user] [pick(attack_verb)] [pronouns.self] in the [organ]!")) return FALSE target.update_personal_goal(/datum/goal/achievement/fistfight, TRUE) @@ -171,24 +176,24 @@ var/global/list/sparring_attack_cache = list() // ----- HEAD ----- // switch(attack_damage) if(1 to 2) - user.visible_message(SPAN_DANGER("[user] slapped [target] across \his cheek!")) + user.visible_message(SPAN_DANGER("\The [user] slapped \the [target] across [target_pronouns.his] cheek!")) if(3 to 4) user.visible_message(pick( - 80; SPAN_DANGER("[user] [pick(attack_verb)] [target] in the head!"), - 20; SPAN_CLASS("danger", "[user] struck [target] in the head[pick("", " with a closed fist")]!"), - 50; SPAN_DANGER("[user] threw a hook against [target]'s head!") + 80; SPAN_DANGER("\The [user] [pick(attack_verb)] \the [target] in the head!"), + 20; SPAN_CLASS("danger", "\The [user] struck \the [target] in the head[pick("", " with a closed fist")]!"), + 50; SPAN_DANGER("\The [user] threw a hook against \the [target]'s head!") )) if(5) user.visible_message(pick( - 10; SPAN_DANGER("[user] gave [target] a solid slap across \his face!"), - 90; SPAN_CLASS("danger", "[user] smashed \his [pick(attack_noun)] into [target]'s [pick("[organ]", "face", "jaw")]!") + 10; SPAN_DANGER("\The [user] gave \the [target] a solid slap across [target_pronouns.his] face!"), + 90; SPAN_CLASS("danger", "\The [user] smashed [user_pronouns.his] [pick(attack_noun)] into \the [target]'s [pick("[organ]", "face", "jaw")]!") )) else // ----- BODY ----- // switch(attack_damage) - if(1 to 2) user.visible_message(SPAN_DANGER("[user] threw a glancing punch at [target]'s [organ]!")) - if(1 to 4) user.visible_message(SPAN_DANGER("[user] [pick(attack_verb)] [target] in \his [organ]!")) - if(5) user.visible_message(SPAN_DANGER("[user] smashed \his [pick(attack_noun)] into [target]'s [organ]!")) + if(1 to 2) user.visible_message(SPAN_DANGER("\The [user] threw a glancing punch at \the [target]'s [organ]!")) + if(1 to 4) user.visible_message(SPAN_DANGER("\The [user] [pick(attack_verb)] \the [target] in [target_pronouns.his] [organ]!")) + if(5) user.visible_message(SPAN_DANGER("\The [user] smashed [user_pronouns.his] [pick(attack_noun)] into \the [target]'s [organ]!")) else user.visible_message(SPAN_CLASS("danger", "[user] [pick("punched", "threw a punch at", "struck", "slammed their [pick(attack_noun)] into")] [target]'s [organ]!")) //why do we have a separate set of verbs for lying targets? @@ -222,13 +227,14 @@ var/global/list/sparring_attack_cache = list() /datum/unarmed_attack/kick/show_attack(mob/living/carbon/human/user, mob/living/carbon/human/target, zone, attack_damage) var/obj/item/organ/external/affecting = target.get_organ(zone) var/organ = affecting.name + var/datum/pronouns/target_pronouns = target.choose_from_pronouns() attack_damage = clamp(attack_damage, 1, 5) switch(attack_damage) - if(1 to 2) user.visible_message(SPAN_DANGER("[user] threw [target] a glancing [pick(attack_noun)] to the [organ]!")) //it's not that they're kicking lightly, it's that the kick didn't quite connect - if(3 to 4) user.visible_message(SPAN_DANGER("[user] [pick(attack_verb)] [target] in \his [organ]!")) - if(5) user.visible_message(SPAN_DANGER("[user] landed a strong [pick(attack_noun)] against [target]'s [organ]!")) + if(1 to 2) user.visible_message(SPAN_DANGER("\The [user] threw \the [target] a glancing [pick(attack_noun)] to \the [organ]!")) //it's not that they're kicking lightly, it's that the kick didn't quite connect + if(3 to 4) user.visible_message(SPAN_DANGER("\The [user] [pick(attack_verb)] \the [target] in [target_pronouns.his] [organ]!")) + if(5) user.visible_message(SPAN_DANGER("\The [user] landed a strong [pick(attack_noun)] against \the [target]'s [organ]!")) /datum/unarmed_attack/stomp attack_verb = list("stomped on") @@ -262,6 +268,7 @@ var/global/list/sparring_attack_cache = list() var/obj/item/organ/external/affecting = target.get_organ(zone) var/organ = affecting.name var/obj/item/clothing/shoes = user.shoes + var/datum/pronouns/user_pronouns = user.choose_from_pronouns() attack_damage = clamp(attack_damage, 1, 5) @@ -269,12 +276,12 @@ var/global/list/sparring_attack_cache = list() switch(attack_damage) if(1 to 4) user.visible_message(pick( - SPAN_CLASS("danger", "[user] stomped on [target]'s [organ][pick("", "with their [shoe_text]")]!"), - SPAN_DANGER("[user] stomped \his [shoe_text] down onto [target]'s [organ]!"))) + SPAN_CLASS("danger", "\The [user] stomped on \the [target]'s [organ][pick("", "with their [shoe_text]")]!"), + SPAN_DANGER("\The [user] stomped [user_pronouns.his] [shoe_text] down onto \the [target]'s [organ]!"))) if(5) user.visible_message(pick( - SPAN_CLASS("danger", "[user] stomped down hard onto [target]'s [organ][pick("", "with their [shoe_text]")]!"), - SPAN_DANGER("[user] slammed \his [shoe_text] down onto [target]'s [organ]!"))) + SPAN_CLASS("danger", "\The [user] stomped down hard onto \the [target]'s [organ][pick("", "with their [shoe_text]")]!"), + SPAN_DANGER("\The [user] slammed [user_pronouns.his] [shoe_text] down onto \the [target]'s [organ]!"))) /datum/unarmed_attack/light_strike deal_halloss = 3 diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index da25971f1ee9b..8d43f15277258 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -277,13 +277,14 @@ GLOBAL_LIST_INIT(possible_say_verbs, list( /mob/living/silicon/pai/use_tool(obj/item/tool, mob/user, list/click_params) // ID Card - Set pAI access var/obj/item/card/id/id = tool.GetIdCard() + var/datum/pronouns/pronouns = user.choose_from_pronouns() if (istype(id)) var/id_name = GET_ID_NAME(id, tool) var/list/new_access = id.GetAccess() idcard.access = new_access user.visible_message( - SPAN_NOTICE("\The [user] scans \a [tool] over \the [src], updating \his access."), - SPAN_NOTICE("You scan [id_name] over \the [src], updating \his access.") + SPAN_NOTICE("\The [user] scans \a [tool] over \the [src], updating [pronouns.his] access."), + SPAN_NOTICE("You scan [id_name] over \the [src], updating [pronouns.his] access.") ) return TRUE diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index 2438163e5b9e8..86eb1836d9f34 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -66,19 +66,21 @@ return FALSE M = M.loc count++ - var/answer = input(M, "[P] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[P] Check DNA", "No") in list("Yes", "No") + var/answer = input(M, "\The [P] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[P] Check DNA", "No") in list("Yes", "No") if (answer == "Yes") var/turf/T = get_turf_or_move(P.loc) + var/datum/pronouns/pronouns = M.choose_from_pronouns() for (var/mob/v in viewers(T)) - v.show_message(SPAN_NOTICE("[M] presses \his thumb against [P]."), 3, SPAN_NOTICE("[P] makes a sharp clicking sound as it extracts DNA material from [M]."), 2) + v.show_message(SPAN_NOTICE("\The [M] presses [pronouns.his] thumb against \the [P]."), 3, SPAN_NOTICE("\The [P] makes a sharp clicking sound as it extracts DNA material from \the [M]."), 2) var/datum/dna/dna = M.dna - to_chat(P, "

[M]'s UE string : [dna.unique_enzymes]

") + to_chat(P, "

\The [M]'s UE string : [dna.unique_enzymes]

") if (dna.unique_enzymes == P.master_dna) to_chat(P, "DNA is a match to stored Master DNA.") else to_chat(P, "DNA does not match stored Master DNA.") else - to_chat(P, "[M] does not seem like \he is going to provide a DNA sample willingly.") + var/datum/pronouns/pronouns = M.choose_from_pronouns() + to_chat(P, "\The [M] does not seem like [pronouns.he] is going to provide a DNA sample willingly.") return TRUE @@ -151,7 +153,7 @@ P.hack_aborted = 0 P.cable = new (T) P.visible_message( - SPAN_ITALIC("A port on [P] opens to reveal \a [P.cable], which promptly falls to the floor."), + SPAN_ITALIC("A port on \the [P] opens to reveal \a [P.cable], which promptly falls to the floor."), SPAN_ITALIC("You open a port to reveal your [P.cable] and unspool it to the floor."), SPAN_ITALIC("You hear the soft click something falling to the floor.") ) diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index 06387673c48d9..0e383ab8ab620 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -278,7 +278,8 @@ var/global/list/mob_hat_cache = list() clear_inherent_laws() QDEL_NULL(laws) laws = new /datum/ai_laws/syndicate_override - set_zeroth_law("Only [user.real_name] and people \he designates as being such are operatives.") + var/datum/pronouns/pronouns = user.choose_from_pronouns() + set_zeroth_law("Only [user.real_name] and people [pronouns.he] designates as being such are operatives.") //DRONE LIFE/DEATH //For some goddamn reason robots have this hardcoded. Redefining it for our fragile friends here. diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index b416caf8282ba..f5c6e7e28bcee 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -552,7 +552,8 @@ USE_FEEDBACK_FAILURE("\The [src]'s maintenance hatch is already closed.") return TRUE if (!cell) - USE_FEEDBACK_FAILURE("\The [src]'s cell needs to remain in place to close \his maintenance hatch.") + var/datum/pronouns/pronouns = choose_from_pronouns() + USE_FEEDBACK_FAILURE("\The [src]'s cell needs to remain in place to close [pronouns.his] maintenance hatch.") return TRUE opened = FALSE update_icon() @@ -1205,7 +1206,8 @@ laws = new /datum/ai_laws/syndicate_override var/time = time2text(world.realtime,"hh:mm:ss") GLOB.lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])") - set_zeroth_law("Only [user.real_name] and people \he designates as being such are operatives.") + var/datum/pronouns/pronouns = user.choose_from_pronouns() + set_zeroth_law("Only [user.real_name] and people [pronouns.he] designates as being such are operatives.") SetLockdown(0) . = 1 spawn() diff --git a/code/modules/mob/skills/skill_verbs.dm b/code/modules/mob/skills/skill_verbs.dm index ed7faeaab9c49..4370a42648696 100644 --- a/code/modules/mob/skills/skill_verbs.dm +++ b/code/modules/mob/skills/skill_verbs.dm @@ -90,7 +90,7 @@ Robots and antags can instruct. return if(target.too_many_buffs(/datum/skill_buff/instruct)) - to_chat(src, SPAN_NOTICE("\The [target] exhausted from all the training \he recieved.")) + to_chat(src, SPAN_NOTICE("\The [target] has had too many lessons and can't receive any more training today.")) return var/options = list() @@ -110,7 +110,7 @@ Robots and antags can instruct. to_chat(src, SPAN_NOTICE("[incapacitated() ? "You are in no state to teach right now!" : "\the [target] is in no state to be taught right now!"]")) return if(target.too_many_buffs(/datum/skill_buff/instruct)) - to_chat(src, SPAN_NOTICE("\The [target] exhausted from all the training \he recieved.")) + to_chat(src, SPAN_NOTICE("\The [target] has had too many lessons and can't receive any more training today.")) return if(target.skill_check(skill.type, SKILL_BASIC)) to_chat(src, SPAN_NOTICE("\The [target] is too skilled to gain any benefit from a short lesson.")) diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm index 9a8fa5dcdd7ec..5a42134bdc990 100644 --- a/code/modules/organs/external/_external.dm +++ b/code/modules/organs/external/_external.dm @@ -399,7 +399,8 @@ heal_damage(0, repair_amount, 0, 1) owner.regenerate_icons() if(user == src.owner) - user.visible_message(SPAN_NOTICE("\The [user] patches [damage_desc] on \his [src.name] with [tool].")) + var/datum/pronouns/pronouns = user.choose_from_pronouns() + user.visible_message(SPAN_NOTICE("\The [user] patches [damage_desc] on [pronouns.his] [src.name] with [tool].")) else user.visible_message(SPAN_NOTICE("\The [user] patches [damage_desc] on [owner]'s [src.name] with [tool].")) diff --git a/code/modules/organs/external/species/nabber_threat.dm b/code/modules/organs/external/species/nabber_threat.dm index eee5023c5f8ee..097341472846f 100644 --- a/code/modules/organs/external/species/nabber_threat.dm +++ b/code/modules/organs/external/species/nabber_threat.dm @@ -23,8 +23,9 @@ if(message == "Cancel") return else if(message == "Yes") - owner.visible_message(SPAN_WARNING("[owner]'s skin shifts to a deep red colour with dark chevrons running down in an almost hypnotic \ - pattern. Standing tall, \he strikes, sharp spikes aimed at those threatening \him, claws whooshing through the air past them.")) + var/datum/pronouns/pronouns = owner.choose_from_pronouns() + owner.visible_message(SPAN_WARNING("\The [owner]'s skin shifts to a deep red colour with dark chevrons running down in an almost hypnotic \ + pattern. Standing tall, [pronouns.he] strikes, sharp spikes aimed at those threatening [pronouns.him], claws whooshing through the air past them.")) playsound(owner.loc, 'sound/effects/angrybug.ogg', 60, 0) owner.skin_state = SKIN_THREAT owner.update_skin() diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index c317bcf4ab726..e6fd962daf5a4 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -360,7 +360,7 @@ if(istype(P, /obj/item/flame/lighter/zippo)) class = "rose" - user.visible_message(SPAN_CLASS("[class]", "[user] holds \the [P] up to \the [src], it looks like \he's trying to burn it!"), \ + user.visible_message(SPAN_CLASS("[class]", "[user] holds \the [P] up to \the [src], trying to burn it!"), \ SPAN_CLASS("[class]", "You hold \the [P] up to \the [src], burning it slowly.")) spawn(20) diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 009bc9bf8b826..506026cfd3b34 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -78,7 +78,7 @@ if(istype(P, /obj/item/flame/lighter/zippo)) class = "rose>" - user.visible_message(SPAN_CLASS("[class]", "[user] holds \the [P] up to \the [src], it looks like \he's trying to burn it!"), \ + user.visible_message(SPAN_CLASS("[class]", "[user] holds \the [P] up to \the [src], trying to burn it!"), \ SPAN_CLASS("[class]", "You hold \the [P] up to \the [src], burning it slowly.")) spawn(20) diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index 7902ccfb01dbb..2932e5ad0cb07 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -120,7 +120,7 @@ if(!P.lit) to_chat(user, SPAN_WARNING("\The [P] is not lit.")) return - user.visible_message(SPAN_WARNING("\The [user] holds \the [P] up to \the [src]. It looks like \he's trying to burn it!"), \ + user.visible_message(SPAN_WARNING("\The [user] holds \the [P] up to \the [src], trying to burn it!"), \ SPAN_WARNING("You hold \the [P] up to \the [src], burning it slowly.")) if(!do_after(user, 2 SECONDS, src, DO_PUBLIC_UNIQUE)) return diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index cec531f4f1b18..5a6138e2ae5ca 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -554,10 +554,11 @@ to_chat(user, SPAN_NOTICE("You telekinetically remove the [get_fitting_name()].")) else if(user.a_intent != I_HELP) var/obj/item/organ/external/hand = H.organs_by_name[user.hand ? BP_L_HAND : BP_R_HAND] + var/datum/pronouns/pronouns = H.choose_from_pronouns() if(hand && hand.is_usable() && !hand.can_feel_pain()) user.apply_damage(3, DAMAGE_BURN, user.hand ? BP_L_HAND : BP_R_HAND, used_weapon = src) user.visible_message( - SPAN_WARNING("\The [user]'s [hand] burns and sizzles as \he touches the hot [get_fitting_name()]."), + SPAN_WARNING("\The [user]'s [hand] burns and sizzles as [pronouns.he] touches the hot [get_fitting_name()]."), SPAN_WARNING("Your [hand.name] burns and sizzles as you remove the hot [get_fitting_name()].") ) else diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 08f3d22dd2cab..34b35fad706b5 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -160,8 +160,9 @@ if(P) if(process_projectile(P, user, user, pick(BP_L_FOOT, BP_R_FOOT))) handle_post_fire(user, user) + var/datum/pronouns/pronouns = user.choose_from_pronouns() user.visible_message( - SPAN_DANGER("\The [user] shoots \himself in the foot with \the [src]!"), + SPAN_DANGER("\The [user] shoots [pronouns.self] in the foot with \the [src]!"), SPAN_DANGER("You shoot yourself in the foot with \the [src]!") ) M.unequip_item() diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 06b70209c32c4..8e16521cd9445 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -73,12 +73,13 @@ var/mob/living/M = target if(ishuman(target)) var/mob/living/carbon/human/H = M + var/datum/pronouns/pronouns = M.choose_from_pronouns() if((H.species.species_flags & SPECIES_FLAG_IS_PLANT) && (H.nutrition < 500)) if(prob(15)) H.apply_damage((rand(30,80)), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) H.Weaken(5) for (var/mob/V in viewers(src)) - V.show_message(SPAN_WARNING("[M] writhes in pain as \his vacuoles boil."), 3, SPAN_WARNING("You hear the crunching of leaves."), 2) + V.show_message(SPAN_WARNING("\The [M] writhes in pain as [pronouns.his] vacuoles boil."), 3, SPAN_WARNING("You hear the crunching of leaves."), 2) if(prob(35)) if(prob(80)) randmutb(M) diff --git a/code/modules/psionics/faculties/energistics.dm b/code/modules/psionics/faculties/energistics.dm index d51cfe96807f8..479d383b3b18f 100644 --- a/code/modules/psionics/faculties/energistics.dm +++ b/code/modules/psionics/faculties/energistics.dm @@ -106,7 +106,8 @@ if(.) if(istype(target,/obj/item/clothing/mask/smokable/cigarette)) var/obj/item/clothing/mask/smokable/cigarette/S = target - S.light("[user] snaps \his fingers and \the [S.name] lights up.") + var/datum/pronouns/pronouns = user.choose_from_pronouns() + S.light("\The [user] snaps [pronouns.his] fingers and \the [S.name] lights up.") playsound(S.loc, "sparks", 50, 1) else var/datum/effect/spark_spread/sparks = new () diff --git a/code/modules/species/species_attack.dm b/code/modules/species/species_attack.dm index 9ce9b45d326d5..43d077968dfe0 100644 --- a/code/modules/species/species_attack.dm +++ b/code/modules/species/species_attack.dm @@ -37,6 +37,8 @@ /datum/unarmed_attack/claws/show_attack(mob/living/carbon/human/user, mob/living/carbon/human/target, zone, attack_damage) var/obj/item/organ/external/affecting = target.get_organ(zone) + var/datum/pronouns/user_pronouns = user.choose_from_pronouns() + var/datum/pronouns/target_pronouns = target.choose_from_pronouns() if (!affecting) to_chat(user, SPAN_WARNING("\The [target] does not have that bodypart!")) @@ -45,34 +47,35 @@ attack_damage = clamp(attack_damage, 1, 5) if(target == user) - user.visible_message(SPAN_DANGER("[user] [pick(attack_verb)] \himself in the [affecting.name]!")) + var/datum/pronouns/pronouns = user.choose_from_pronouns() + user.visible_message(SPAN_DANGER("\The [user] [pick(attack_verb)] [pronouns.self] in the [affecting.name]!")) return 0 switch(zone) if(BP_HEAD, BP_MOUTH, BP_EYES) // ----- HEAD ----- // switch(attack_damage) - if(1 to 2) user.visible_message(SPAN_DANGER("[user] scratched [target] across \his cheek!")) + if(1 to 2) user.visible_message(SPAN_DANGER("\The [user] scratched \the [target] across [target_pronouns.his] cheek!")) if(3 to 4) user.visible_message(pick( - 80; user.visible_message(SPAN_CLASS("danger", "[user] [pick(attack_verb)] [target]'s [pick("face", "neck", affecting.name)]!")), - 20; user.visible_message(SPAN_CLASS("danger", "[user] [pick(attack_verb)] [pick("[target] in the [affecting.name]", "[target] across \his [pick("face", "neck", affecting.name)]")]!")), + 80; user.visible_message(SPAN_CLASS("danger", "\The [user] [pick(attack_verb)] \the [target]'s [pick("face", "neck", affecting.name)]!")), + 20; user.visible_message(SPAN_CLASS("danger", "\The [user] [pick(attack_verb)] [pick("\the [target] in the [affecting.name]", "\the [target] across [target_pronouns.his] [pick("face", "neck", affecting.name)]")]!")), )) if(5) user.visible_message(pick( - SPAN_CLASS("danger", "[user] rakes \his [pick(attack_noun)] across [target]'s [pick("face", "neck", affecting.name)]!"), - SPAN_CLASS("danger", "[user] tears \his [pick(attack_noun)] into [target]'s [pick("face", "neck", affecting.name)]!"), + SPAN_CLASS("danger", "\The [user] rakes [user_pronouns.his] [pick(attack_noun)] across \the [target]'s [pick("face", "neck", affecting.name)]!"), + SPAN_CLASS("danger", "\The [user] tears [user_pronouns.his] [pick(attack_noun)] into \the [target]'s [pick("face", "neck", affecting.name)]!"), )) else // ----- BODY ----- // switch(attack_damage) - if(1 to 2) user.visible_message(SPAN_CLASS("danger", "[user] [pick("scratched", "grazed")] [target]'s [affecting.name]!")) + if(1 to 2) user.visible_message(SPAN_CLASS("danger", "\The [user] [pick("scratched", "grazed")] \the [target]'s [affecting.name]!")) if(3 to 4) user.visible_message(pick( - 80; user.visible_message(SPAN_DANGER("[user] [pick(attack_verb)] [target]'s [affecting.name]!")), - 20; user.visible_message(SPAN_CLASS("danger", "[user] [pick(attack_verb)] [pick("[target] in the [affecting.name]", "[target] across \his [affecting.name]")]!")), + 80; user.visible_message(SPAN_DANGER("\The [user] [pick(attack_verb)] \the [target]'s [affecting.name]!")), + 20; user.visible_message(SPAN_CLASS("danger", "\The [user] [pick(attack_verb)] [pick("\the [target] in the [affecting.name]", "\the [target] across [target_pronouns.his] [affecting.name]")]!")), )) - if(5) user.visible_message(SPAN_CLASS("danger", "[user] tears \his [pick(attack_noun)] [pick("deep into", "into", "across")] [target]'s [affecting.name]!")) + if(5) user.visible_message(SPAN_CLASS("danger", "\The [user] tears [user_pronouns.his] [pick(attack_noun)] [pick("deep into", "into", "across")] \the [target]'s [affecting.name]!")) /datum/unarmed_attack/claws/strong attack_verb = list("slashed") @@ -108,7 +111,7 @@ /datum/unarmed_attack/stomp/weak/show_attack(mob/living/carbon/human/user, mob/living/carbon/human/target, zone, attack_damage) var/obj/item/organ/external/affecting = target.get_organ(zone) - user.visible_message(SPAN_WARNING("[user] jumped up and down on \the [target]'s [affecting.name]!")) + user.visible_message(SPAN_WARNING("\The [user] jumped up and down on \the [target]'s [affecting.name]!")) playsound(user.loc, attack_sound, 25, 1, -1) /datum/unarmed_attack/tail //generally meant for people like unathi @@ -140,17 +143,19 @@ /datum/unarmed_attack/tail/show_attack(mob/living/carbon/human/user, mob/living/carbon/human/target, zone, attack_damage) var/obj/item/organ/external/affecting = target.get_organ(zone) + var/datum/pronouns/user_pronouns = user.choose_from_pronouns() + var/datum/pronouns/target_pronouns = target.choose_from_pronouns() var/organ = affecting.name attack_damage = clamp(attack_damage, 1, 6) attack_damage = 3 + attack_damage - rand(1, 5) switch(attack_damage) - if(1 to 5) user.visible_message(SPAN_DANGER("[user] glanced [target] with their [pick(attack_noun)] in the [organ]!")) + if(1 to 5) user.visible_message(SPAN_DANGER("\The [user] glanced \the [target] with [user_pronouns.his] [pick(attack_noun)] in the [organ]!")) - if(6 to 7) user.visible_message(SPAN_DANGER("[user] [pick(attack_verb)] [target] in \his [organ] with their [pick(attack_noun)]!")) + if(6 to 7) user.visible_message(SPAN_DANGER("\The [user] [pick(attack_verb)] \the [target] in [target_pronouns.his] [organ] with [user_pronouns.his] [pick(attack_noun)]!")) - if(8) user.visible_message(SPAN_DANGER("[user] landed a heavy blow with their [pick(attack_noun)] against [target]'s [organ]!")) + if(8) user.visible_message(SPAN_DANGER("\The [user] landed a heavy blow with [user_pronouns.his] [pick(attack_noun)] against \the [target]'s [organ]!")) /datum/unarmed_attack/nabber attack_verb = list("mauled", "slashed", "struck", "pierced") diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index 14bbd2efecf40..4bea07c9465aa 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -476,8 +476,9 @@ ui_interact(user) /obj/machinery/power/supermatter/attack_hand(mob/user as mob) + var/datum/pronouns/pronouns = user.choose_from_pronouns() user.visible_message( - SPAN_WARNING("\The [user] reaches out and touches \the [src], inducing a resonance. For a brief instant, \his body glows brilliantly, then flashes into ash."), + SPAN_WARNING("\The [user] reaches out and touches \the [src], inducing a resonance. For a brief instant, [pronouns.his] body glows brilliantly, then flashes into ash."), SPAN_DANGER(FONT_LARGE("You reach out and touch \the [src]. Instantly, you feel a curious sensation as your body turns into new and exciting forms of plasma. That was not a wise decision.")), SPAN_WARNING("You hear an unearthly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") ) @@ -534,8 +535,10 @@ if(istype(AM, /obj/effect)) return if(istype(AM, /mob/living)) + var/mob/victim = AM + var/datum/pronouns/pronouns = victim.choose_from_pronouns() AM.visible_message( - SPAN_WARNING("\The [AM] slams into \the [src], inducing a resonance. For a brief instant, \his body glows brilliantly, then flashes into ash."), + SPAN_WARNING("\The [AM] slams into \the [src], inducing a resonance. For a brief instant, [pronouns.his] body glows brilliantly, then flashes into ash."), SPAN_DANGER(FONT_LARGE("You slam into \the [src], and your mind fills with unearthly shrieking. Your vision floods with light as your body instantly dissolves into dust.")), SPAN_WARNING("You hear an unearthly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") ) diff --git a/code/modules/surgery/slimes.dm b/code/modules/surgery/slimes.dm index bf70a25558db5..7fd5895b0760e 100644 --- a/code/modules/surgery/slimes.dm +++ b/code/modules/surgery/slimes.dm @@ -142,5 +142,6 @@ target.icon_state = "[target.colour] baby slime dead-nocore" /singleton/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - user.visible_message(SPAN_WARNING("[user]'s hand slips, causing \him to miss the core!"), \ + var/datum/pronouns/pronouns = user.choose_from_pronouns() + user.visible_message(SPAN_WARNING("[user]'s hand slips, causing [pronouns.him] to miss the core!"), \ SPAN_WARNING("Your hand slips, causing you to miss the core!")) From 7e7c1a5492986e2e7a70808dc568b8c4852dd208 Mon Sep 17 00:00:00 2001 From: rootoo807 <71034457+rootoo807@users.noreply.github.com> Date: Wed, 13 Mar 2024 21:05:05 +0300 Subject: [PATCH 011/311] [MIRROR] Assorted bug fixes --- code/game/machinery/computer/message.dm | 22 ++++++++++-------- code/game/objects/items/weapons/cards_ids.dm | 7 +----- code/modules/mob/mob.dm | 7 ++++++ .../file_system/reports/crew_record.dm | 7 +----- code/modules/species/station/nabber.dm | 6 +---- .../mob/human_races/species/nabber/threat.dmi | Bin 4447 -> 8314 bytes test/check-paths.sh | 2 +- 7 files changed, 23 insertions(+), 28 deletions(-) diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index ffbeea88d257a..04f2f733c4eb9 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -303,14 +303,16 @@ name = "Monitor Decryption Key" var/obj/machinery/message_server/server = null -/obj/item/paper/monitorkey/New() +/obj/item/paper/monitorkey/Initialize() ..() - spawn(10) - if(message_servers) - for(var/obj/machinery/message_server/server in message_servers) - if(!isnull(server)) - if(!isnull(server.decryptkey)) - info = "

Daily Key Reset


The new message monitor key is '[server.decryptkey]'.
This key is only intended for personnel granted access to the messaging server. Keep it safe.
If necessary, change the password to a more secure one." - info_links = info - icon_state = "paper_words" - break + return INITIALIZE_HINT_LATELOAD + +/obj/item/paper/monitorkey/LateInitialize(mapload) + if(message_servers) + for(var/obj/machinery/message_server/server in message_servers) + if(!isnull(server)) + if(!isnull(server.decryptkey)) + info = "

Daily Key Reset


The new message monitor key is '[server.decryptkey]'.
This key is only intended for personnel granted access to the messaging server. Keep it safe.
If necessary, change the password to a more secure one." + info_links = info + icon_state = "paper_words" + break diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 2862b1f50a63c..b83789e9770a3 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -301,12 +301,7 @@ var/global/const/NO_EMAG_ACT = -50 id_card.formal_name_suffix = "[id_card.formal_name_suffix][culture.get_formal_name_suffix()]" id_card.registered_name = real_name - - var/pronouns = "Unset" - var/datum/pronouns/P = choose_from_pronouns() - if(P) - pronouns = P.formal_term - id_card.sex = pronouns + id_card.sex = get_formal_pronouns() id_card.set_id_photo(src) if(dna) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index dfc0f452b63c1..d1e9f58072ca6 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -650,6 +650,13 @@ return P +/mob/proc/get_formal_pronouns() + var/datum/pronouns/P = GLOB.pronouns_from_gender[gender] + if (pronouns) + P = GLOB.pronouns.by_key[pronouns] + return P.formal_term + + /mob/proc/see(message) if(!is_active()) return 0 diff --git a/code/modules/modular_computers/file_system/reports/crew_record.dm b/code/modules/modular_computers/file_system/reports/crew_record.dm index 5a97f4463334d..60faad5304c93 100644 --- a/code/modules/modular_computers/file_system/reports/crew_record.dm +++ b/code/modules/modular_computers/file_system/reports/crew_record.dm @@ -49,12 +49,7 @@ GLOBAL_VAR_INIT(arrest_security_status, "Arrest") set_name(H ? H.real_name : "Unset") set_formal_name(formal_name) set_job(H ? GetAssignment(H) : "Unset") - var/pronouns = "Unset" - if(H) - var/datum/pronouns/P = H.choose_from_pronouns() - if(P) - pronouns = P.formal_term - set_sex(pronouns) + set_sex(H ? H.get_formal_pronouns() : "Unset") set_age(H ? H.age : 30) set_status(GLOB.default_physical_status) set_species(H ? H.get_species() : SPECIES_HUMAN) diff --git a/code/modules/species/station/nabber.dm b/code/modules/species/station/nabber.dm index 8dadb919ba88b..71452e927df18 100644 --- a/code/modules/species/station/nabber.dm +++ b/code/modules/species/station/nabber.dm @@ -287,11 +287,7 @@ var/image/threat_image = skin_overlays[image_key] if(!threat_image) - var/icon/base_icon = icon(H.stand_icon) - var/icon/I = new('icons/mob/human_races/species/nabber/threat.dmi', "threat") - base_icon.Blend(COLOR_BLACK, ICON_MULTIPLY) - base_icon.Blend(I, ICON_ADD) - threat_image = image(base_icon) + threat_image = image('icons/mob/human_races/species/nabber/threat.dmi', "threat") skin_overlays[image_key] = threat_image return(threat_image) diff --git a/icons/mob/human_races/species/nabber/threat.dmi b/icons/mob/human_races/species/nabber/threat.dmi index bf405c35247ddca72c864e40e201581bc61faf98..6526439fbc928f87a9b93771e83ce184f7408328 100644 GIT binary patch delta 8276 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 S(8>G&00001Oos705-gN&Hw-aDv>23 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 Date: Thu, 14 Mar 2024 00:10:06 +0300 Subject: [PATCH 012/311] [MIRROR] ballistic goggles --- baystation12.dme | 1 + code/__defines/items_clothing.dm | 4 +- code/_helpers/cmp.dm | 3 - code/datums/uplink/devices and tools.dm | 14 ++ code/game/antagonist/outsider/raider.dm | 2 + code/game/objects/items/weapons/ecigs.dm | 2 +- code/game/objects/random/random.dm | 34 ++- code/modules/client/client_color.dm | 226 ++++++++++++------ .../preference_setup/loadout/lists/eyegear.dm | 11 + code/modules/clothing/_clothing.dm | 106 +++++++- code/modules/clothing/clothing_accessories.dm | 2 + code/modules/clothing/glasses/glasses.dm | 163 +++++++------ code/modules/clothing/head/helmet.dm | 67 +++++- code/modules/clothing/masks/miscellaneous.dm | 2 +- code/modules/clothing/spacesuits/void/misc.dm | 2 + .../clothing/spacesuits/void/station.dm | 2 + code/modules/clothing/spacesuits/void/void.dm | 2 + code/modules/clothing/suits/armor.dm | 2 +- .../clothing/under/accessories/goggle_mods.dm | 132 ++++++++++ .../mob/living/carbon/human/examine.dm | 12 + .../mob/living/carbon/human/human_helpers.dm | 48 ++++ code/modules/mob/observer/ghost/ghost.dm | 18 +- code/modules/mob/skills/skill_verbs.dm | 15 +- icons/mob/onmob/onmob_eyes.dmi | Bin 11818 -> 11879 bytes icons/mob/onmob/onmob_goggle_mod.dmi | Bin 0 -> 4114 bytes icons/mob/onmob/onmob_head.dmi | Bin 180222 -> 180812 bytes .../mob/species/unathi/onmob_eyes_unathi.dmi | Bin 9223 -> 9349 bytes .../unathi/onmob_goggle_mod_unathi.dmi | Bin 0 -> 1027 bytes icons/mob/species/vox/onmob_eyes_vox.dmi | Bin 12508 -> 12673 bytes .../mob/species/vox/onmob_goggle_mod_vox.dmi | Bin 0 -> 1122 bytes icons/obj/clothing/obj_accessories.dmi | Bin 45895 -> 48307 bytes icons/obj/clothing/obj_eyes.dmi | Bin 15255 -> 15642 bytes icons/obj/clothing/obj_head.dmi | Bin 83510 -> 83742 bytes maps/torch/items/clothing/solgov-head.dm | 2 + maps/torch/loadout/loadout_eyes.dm | 4 + 35 files changed, 676 insertions(+), 200 deletions(-) create mode 100644 code/modules/clothing/under/accessories/goggle_mods.dm create mode 100644 icons/mob/onmob/onmob_goggle_mod.dmi create mode 100644 icons/mob/species/unathi/onmob_goggle_mod_unathi.dmi create mode 100644 icons/mob/species/vox/onmob_goggle_mod_vox.dmi diff --git a/baystation12.dme b/baystation12.dme index 337852f8f4554..18d25b012e290 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1686,6 +1686,7 @@ #include "code\modules\clothing\under\accessories\fire_overpants.dm" #include "code\modules\clothing\under\accessories\flannel_shirt.dm" #include "code\modules\clothing\under\accessories\ftu_pin.dm" +#include "code\modules\clothing\under\accessories\goggle_mods.dm" #include "code\modules\clothing\under\accessories\hawaii.dm" #include "code\modules\clothing\under\accessories\helmcover.dm" #include "code\modules\clothing\under\accessories\helmet_decor.dm" diff --git a/code/__defines/items_clothing.dm b/code/__defines/items_clothing.dm index 029c6e5cb8cb7..a0212eba18f02 100644 --- a/code/__defines/items_clothing.dm +++ b/code/__defines/items_clothing.dm @@ -35,7 +35,9 @@ #define ACCESSORY_SLOT_ARMOR_M "Misc armor" #define ACCESSORY_SLOT_HELM_C "Helmet cover" #define ACCESSORY_SLOT_HELM_D "Helmet decor" - +#define ACCESSORY_SLOT_VISOR "Helmet visor" +#define ACCESSORY_SLOT_VISION "Vision modification" +#define ACCESSORY_SLOT_HUD "HUD modification" #define ACCESSORY_REMOVABLE FLAG(0) #define ACCESSORY_HIDDEN FLAG(1) diff --git a/code/_helpers/cmp.dm b/code/_helpers/cmp.dm index b7a5f4b4ed04b..b4411397cbcfd 100644 --- a/code/_helpers/cmp.dm +++ b/code/_helpers/cmp.dm @@ -52,9 +52,6 @@ /proc/cmp_ruincost_priority(datum/map_template/ruin/A, datum/map_template/ruin/B) return initial(A.spawn_cost) - initial(B.spawn_cost) -/proc/cmp_clientcolor_priority(datum/client_color/A, datum/client_color/B) - return B.priority - A.priority - /proc/cmp_power_component_priority(obj/item/stock_parts/power/A, obj/item/stock_parts/power/B) return B.priority - A.priority diff --git a/code/datums/uplink/devices and tools.dm b/code/datums/uplink/devices and tools.dm index 3d14a4d0c4aae..33776f987868a 100644 --- a/code/datums/uplink/devices and tools.dm +++ b/code/datums/uplink/devices and tools.dm @@ -152,6 +152,20 @@ path = /obj/item/clothing/glasses/thermal/syndi/aviators antag_roles = list(MODE_TRAITOR) +/datum/uplink_item/item/tools/thermal_goggles + name = "Helmet-Attached Thermal Sights" + desc = "A set of thermal sights that can attach to combat or voidsuit helmets. Range is limited, along with the color palette, and it will be obvious what you are wearing." + item_cost = 12 + path = /obj/item/clothing/head/helmet/nvgmount/thermal + antag_roles = list(MODE_TRAITOR) + +/datum/uplink_item/item/tools/night_goggles + name = "Helmet-Attached Light-Enhancing Sights" + desc = "A set of light-enhancing sights for seeing in the dark. They can attach to combat or voidsuit helmets. Range is slightly limited, along with your perceptible range of colors. It will be obvious what you are wearing." + item_cost = 12 + path = /obj/item/clothing/head/helmet/nvgmount/nvg + antag_roles = list(MODE_MERCENARY, MODE_TRAITOR) //don't give mercs extra thermals but NVGs are okay + /datum/uplink_item/item/tools/flashdark name = "Flashdark" desc = "A device similar to a flash light that absorbs the surrounding light, casting a shadowy, black mass." diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index ddc0e43142683..4c5911b314e26 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -46,6 +46,8 @@ GLOBAL_DATUM_INIT(raiders, /datum/antagonist/raider, new) /obj/item/clothing/head/pirate, /obj/item/clothing/mask/bandana/red, /obj/item/clothing/head/hgpiratecap, + /obj/item/clothing/head/helmet/nvgmount/nvg, + /obj/item/clothing/head/helmet/nvgmount/thermal // raiders can have a little nvg, as a treat ) var/list/raider_suits = list( diff --git a/code/game/objects/items/weapons/ecigs.dm b/code/game/objects/items/weapons/ecigs.dm index b44380dd2d7c1..925b92acfaa26 100644 --- a/code/game/objects/items/weapons/ecigs.dm +++ b/code/game/objects/items/weapons/ecigs.dm @@ -2,7 +2,7 @@ name = "electronic cigarette" desc = "Device with modern approach to smoking." icon = 'icons/obj/ecig.dmi' - var/active = 0 + active = 0 var/obj/item/cell/cigcell var/cartridge_type = /obj/item/reagent_containers/ecig_cartridge/med_nicotine var/obj/item/reagent_containers/ecig_cartridge/ec_cartridge diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index bc973d916c870..63ff8c5459c2b 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -842,7 +842,12 @@ /obj/item/clothing/glasses/hud/security/prot = 2, /obj/item/clothing/glasses/hud/security/prot/sunglasses = 3, /obj/item/clothing/glasses/hud/security/prot/aviators = 1, - /obj/item/clothing/glasses/tacgoggles = 1) + /obj/item/clothing/glasses/tacgoggles = 1, + /obj/item/clothing/glasses/ballistic/security = 1, + /obj/item/clothing/glasses/ballistic = 2, + /obj/item/clothing/glasses/ballistic/prescription = 1, + /obj/item/clothing/glasses/ballistic/fake = 3 + ) /obj/random/hat name = "random headgear" @@ -851,16 +856,19 @@ icon_state = "tophat" /obj/random/hat/spawn_choices() - return list(/obj/item/clothing/head/helmet = 2, - /obj/item/clothing/head/helmet/tactical = 1, - /obj/item/clothing/head/helmet/space/emergency = 1, - /obj/item/clothing/head/bio_hood/general = 1, - /obj/item/clothing/head/hardhat = 4, - /obj/item/clothing/head/hardhat/orange = 4, - /obj/item/clothing/head/hardhat/red = 4, - /obj/item/clothing/head/hardhat/blue = 4, - /obj/item/clothing/head/ushanka = 3, - /obj/item/clothing/head/welding = 2) + return list(/obj/item/clothing/head/helmet = 4, + /obj/item/clothing/head/helmet/tactical = 2, + /obj/item/clothing/head/helmet/old_commonwealth = 1, + /obj/item/clothing/head/helmet/old_confederation = 1, + /obj/item/clothing/head/helmet/space/emergency = 2, + /obj/item/clothing/head/bio_hood/general = 2, + /obj/item/clothing/head/hardhat = 8, + /obj/item/clothing/head/hardhat/orange = 8, + /obj/item/clothing/head/hardhat/red = 8, + /obj/item/clothing/head/hardhat/blue = 8, + /obj/item/clothing/head/ushanka = 8, + /obj/item/clothing/head/welding = 8 + ) /obj/random/suit name = "random suit" @@ -923,7 +931,9 @@ /obj/item/clothing/accessory/storage/holster/waist = 1, /obj/item/clothing/accessory/storage/holster/armpit = 1, /obj/item/clothing/accessory/kneepads = 3, - /obj/item/clothing/accessory/stethoscope = 2) + /obj/item/clothing/accessory/stethoscope = 2, + /obj/item/clothing/accessory/glassesmod/nvg = 1 + ) GLOBAL_LIST_INIT(random_backpacks, list( /obj/item/storage/backpack/cultpack, diff --git a/code/modules/client/client_color.dm b/code/modules/client/client_color.dm index 5f447bbf28105..b50b6ac66efe7 100644 --- a/code/modules/client/client_color.dm +++ b/code/modules/client/client_color.dm @@ -1,112 +1,180 @@ /datum/client_color - var/client_color = "" //Any client.color-valid value - var/priority = 1 //Since only one client.color can be rendered on screen, we take the one with the highest priority value: - //eg: "Bloody screen" > "goggles color" as the former is much more important - var/override = FALSE //If set to override we will stop multiplying the moment we get here. NOTE: Priority remains, if your override is on position 4, the other 3 will still have a say. + /// Any value valid for client.color + var/client_color + /// The order in which client colors are applied. Higher numbers are applied later. + var/order -/mob - var/list/client_colors = list() + /// If set, stops applying client colors once this one is reached. Order still applies. + var/override + /// Whether this client color should affect the color of blood. + var/ignore_blood -/* - Adds an instance of color_type to the mob's client_colors list - color_type - a typepath (subtyped from /datum/client_color) -*/ -/mob/proc/has_client_color(color_type) - if(!ispath(/datum/client_color) || !LAZYLEN(client_colors)) +/// The set of /datum/client_color currently applied to the mob, if any. +/mob/var/list/client_colors + + +/// Checks whether the mob has an instance of color_type in its client_colors list. +/mob/proc/has_client_color(datum/client_color/color_type) + if (!length(client_colors)) return FALSE - for(var/thing in client_colors) - var/datum/client_color/col = thing - if(col.type == color_type) + if (!ispath(color_type, /datum/client_color)) + return FALSE + for (var/datum/client_color/entry as anything in client_colors) + if (entry.type == color_type) return TRUE return FALSE -/mob/proc/add_client_color(color_type) - if(!has_client_color(color_type)) - var/datum/client_color/CC = new color_type() - client_colors |= CC - sortTim(client_colors, /proc/cmp_clientcolor_priority) - update_client_color() - - -/* - Removes an instance of color_type from the mob's client_colors list - color_type - a typepath (subtyped from /datum/client_color) - returns true if instance was found, false otherwise -*/ -/mob/proc/remove_client_color(color_type) - if(!ispath(/datum/client_color)) - return FALSE - var/result = FALSE - for(var/cc in client_colors) - var/datum/client_color/CC = cc - if(CC.type == color_type) - result = TRUE - client_colors -= CC - qdel(CC) +/// Adds an instance of color_type to the mob's client_colors list if one doesn't already exist. +/mob/proc/add_client_color(datum/client_color/color_type) + if (has_client_color(color_type)) + return + if (!length(client_colors)) + client_colors = list() + client_colors |= new color_type + sortTim(client_colors, /proc/cmp_clientcolor_order) + update_client_color() + + +/// The comparison function for sorting client_colors by order. +/proc/cmp_clientcolor_order(datum/client_color/a, datum/client_color/b) + return a.order - b.order + + +/// Removes an instance of color_type from the mob's client_colors list, returning TRUE if one existed. +/mob/proc/remove_client_color(datum/client_color/color_type) + if (!length(client_colors)) + return + for (var/datum/client_color/entry as anything in client_colors) + if (entry.type == color_type) + client_colors -= entry + qdel(entry) + update_client_color() + if (!length(client_colors)) + client_colors = null break + + +/// Clears the mobs client_colors list. +/mob/proc/clear_client_colors() + if (!length(client_colors)) + return + client_colors = null update_client_color() - return result -/* - Resets the mob's client.color to null, and then sets it to the highest priority - client_color datum, if one exists -*/ +/// Resets the mob's client.color to null and then applies the client_colors list. /mob/proc/update_client_color() - if(!client) + if (!client) return client.color = null - if(!length(client_colors)) + var/list/color = list( + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + ) + if (!length(client_colors)) + animate(renderers[10], color = initial(color)) + animate(client, color = initial(color)) return - var/list/c = list(1,0,0, 0,1,0, 0,0,1) //Star at normal - for(var/datum/client_color/CC in client_colors) - //Matrix multiplication newcolor * current - var/list/current = c.Copy() + var/datum/client_color/top_color + for (var/datum/client_color/entry as anything in client_colors) + top_color = entry + var/list/copy = color.Copy() + for (var/m = 1 to 3) + for (var/i = 1 to 3) + var/value = 0 + for (var/j = 1 to 3) + value += copy[(j - 1) * 3 + i] * entry.client_color[(m - 1) * 3 + j] + color[(m - 1) * 3 + i] = value + if (entry.override) + break + if (!top_color.ignore_blood) + animate(renderers[10], color = color) + animate(client, color = list( + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + )) + else + animate(client, color = color) + animate(renderers[10], color = list( + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + )) - for(var/m = 1; m <= 3; m += 1) //For each row - for(var/i = 1; i <= 3; i += 1) //go over each column of the second matrix - var/sum = 0 - for(var/j = 1; j <= 3; j += 1) //multiply each pair - sum += CC.client_color[(m-1)*3 + j] * current[(j-1)*3 + i] - c[(m-1)*3 + i] = sum +/datum/client_color/deuteranopia + client_color = list( + 0.47, 0.38, 0.15, + 0.54, 0.31, 0.15, + 0, 0.3, 0.7 + ) + order = 100 + + +/datum/client_color/protanopia + client_color = list( + 0.51, 0.4, 0.12, + 0.49, 0.41, 0.12, + 0, 0.2, 0.76 + ) + order = 100 - if(CC.override) - break - animate(client, color = c) +/datum/client_color/tritanopia + client_color = list( + 0.95, 0.07, 0, + 0, 0.44, 0.52, + 0.05, 0.49, 0.48 + ) + order = 100 + /datum/client_color/monochrome - client_color = list(0.33,0.33,0.33, 0.33,0.33,0.33, 0.33,0.33,0.33) - priority = 100 + client_color = list( + 0.33, 0.33, 0.33, + 0.33, 0.33, 0.33, + 0.33, 0.33, 0.33 + ) + order = 199 -//Similar to monochrome but shouldn't look as flat, same priority -/datum/client_color/noir - client_color = list(0.299,0.299,0.299, 0.587,0.587,0.587, 0.114,0.114,0.114) - priority = 200 -/datum/client_color/thirdeye - client_color = list(0.1, 0.1, 0.1, 0.3, 0.3, 0.3, 0.3, 0.3, 0.7) - priority = 300 +/datum/client_color/nvg + client_color = list( + 0.2, 0.2, 0.2, + 0.2, 0.5, 0.5, + 0.2, 0.3, 0.5 + ) + order = 199 -//Disabilities, could be hooked to brain damage or chargen if so desired. -/datum/client_color/deuteranopia - client_color = list(0.47,0.38,0.15, 0.54,0.31,0.15, 0,0.3,0.7) - priority = 100 -/datum/client_color/protanopia - client_color = list(0.51,0.4,0.12, 0.49,0.41,0.12, 0,0.2,0.76) - priority = 100 +/datum/client_color/noir + client_color = list( + 0.299, 0.299, 0.299, + 0.587, 0.587, 0.587, + 0.114, 0.114, 0.114 + ) + order = 200 + ignore_blood = TRUE + + +/datum/client_color/thirdeye + client_color = list( + 0.1, 0.1, 0.1, + 0.3, 0.3, 0.3, + 0.3, 0.3, 0.7 + ) + order = 300 + ignore_blood = TRUE -/datum/client_color/tritanopia - client_color = list(0.95,0.07,0, 0,0.44,0.52, 0.05,0.49,0.48) - priority = 100 /datum/client_color/berserk client_color = "#af111c" - priority = INFINITY //This effect sort of exists on its own you /have/ to be seeing RED - override = TRUE //Because multiplying this will inevitably fail + order = INFINITY + override = TRUE + ignore_blood = TRUE diff --git a/code/modules/client/preference_setup/loadout/lists/eyegear.dm b/code/modules/client/preference_setup/loadout/lists/eyegear.dm index f47822ebe90dc..b9485879e785c 100644 --- a/code/modules/client/preference_setup/loadout/lists/eyegear.dm +++ b/code/modules/client/preference_setup/loadout/lists/eyegear.dm @@ -185,3 +185,14 @@ display_name = "Blindfold" path = /obj/item/clothing/glasses/blindfold flags = GEAR_HAS_COLOR_SELECTION + +/datum/gear/eyes/ballistics + display_name = "Replica Ballistic Goggles" + path = /obj/item/clothing/glasses/ballistic/fake + +/datum/gear/eyes/ballistics/New() + ..() + var/list/options = list() + options["Replica Ballistic Goggles"] = /obj/item/clothing/glasses/ballistic/fake + options["Replica Ballistic Goggles, corrective"] = /obj/item/clothing/glasses/ballistic/fake/prescription + gear_tweaks += new /datum/gear_tweak/path (options) diff --git a/code/modules/clothing/_clothing.dm b/code/modules/clothing/_clothing.dm index 8d65f3dd8db8d..342fe87a073e4 100644 --- a/code/modules/clothing/_clothing.dm +++ b/code/modules/clothing/_clothing.dm @@ -1,8 +1,10 @@ /obj/item/clothing name = "clothing" siemens_coefficient = 0.9 - var/flash_protection = FLASH_PROTECTION_NONE // Sets the item's level of flash protection. - var/tint = TINT_NONE // Sets the item's level of visual impairment tint. + /// Sets the item's level of flash protection. + var/flash_protection = FLASH_PROTECTION_NONE + /// Sets the item's level of visual impairment tint. + var/tint = TINT_NONE var/list/species_restricted = list( "exclude", SPECIES_NABBER @@ -15,8 +17,27 @@ var/ironed_state = WRINKLES_DEFAULT var/smell_state = SMELL_DEFAULT var/volume_multiplier = 1 - - var/move_trail = /obj/decal/cleanable/blood/tracks/footprints // if this item covers the feet, the footprints it should leave + var/hud_type + var/vision_flags = 0 + /// special vision states, such as seeing darkness, seeing mobs through walls, etc + var/darkness_view = 0 + var/see_invisible = -1 + var/light_protection = 0 + /// if the clothing should be disrupted by EMP + var/electric = FALSE + /// used by goggles and HUDs + var/toggleable = FALSE + var/active = TRUE + var/activation_sound + /// set this if you want a sound on deactivation + var/deactivation_sound + /// set these in initialize if you want messages other than about the optical matrix + var/toggle_on_message + var/toggle_off_message + var/off_state = null + + /// if this item covers the feet, the footprints it should leave + var/move_trail = /obj/decal/cleanable/blood/tracks/footprints /obj/item/clothing/Initialize() @@ -25,6 +46,8 @@ accessories = list() for (var/path in init_accessories) attach_accessory(null, new path (src)) + if(toggleable) + set_extension(src, /datum/extension/base_icon_state, icon_state) /obj/item/clothing/Destroy() @@ -260,10 +283,6 @@ BLIND // can't see anything w_class = ITEM_SIZE_SMALL body_parts_covered = EYES slot_flags = SLOT_EYES - var/vision_flags = 0 - var/darkness_view = 0//Base human is 2 - var/see_invisible = -1 - var/light_protection = 0 sprite_sheets = list( SPECIES_VOX = 'icons/mob/species/vox/onmob_eyes_vox.dmi', SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_eyes_unathi.dmi', @@ -275,7 +294,7 @@ BLIND // can't see anything else return icon_state -/obj/item/clothing/glasses/on_update_icon() +/obj/item/clothing/on_update_icon() if (toggleable) if (active) var/datum/extension/base_icon_state/BIS = get_extension(src, /datum/extension/base_icon_state) @@ -285,11 +304,78 @@ BLIND // can't see anything else icon_state = initial(icon_state) -/obj/item/clothing/glasses/update_clothing_icon() +/obj/item/clothing/update_clothing_icon() if (ismob(src.loc)) var/mob/M = src.loc M.update_inv_glasses() +/obj/item/clothing/proc/activate(mob/user) + if (toggleable && !active) + active = TRUE + flash_protection = initial(flash_protection) + tint = initial(tint) + if (user) + user.update_inv_glasses() + user.update_action_buttons() + if (activation_sound) + sound_to(user, activation_sound) + if (toggle_on_message) + to_chat(user, SPAN_NOTICE(toggle_on_message)) + else + to_chat(user, "You activate the optical matrix on \the [src].") + + update_icon() + update_clothing_icon() + update_vision() + +/obj/item/clothing/proc/deactivate(mob/user, manual = TRUE) + if (toggleable && active) + active = FALSE + if (user) + if (manual) + if (toggle_off_message) + to_chat(user, toggle_off_message) + else + to_chat(user, "You deactivate the optical matrix on \the [src].") + if (deactivation_sound) + sound_to(user, deactivation_sound) + user.update_inv_glasses() + user.update_action_buttons() + + flash_protection = FLASH_PROTECTION_NONE + tint = TINT_NONE + update_icon() + update_clothing_icon() + update_vision() + +/obj/item/clothing/emp_act(severity) + if (electric && active) + if (istype(loc, /mob/living/carbon/human)) + var/mob/living/carbon/human/M = loc + if (M.glasses != src) + to_chat(M, SPAN_DANGER("\The [name] malfunction[gender != PLURAL ? "s":""], releasing a small spark.")) + else + M.eye_blind = 2 + M.eye_blurry = 4 + to_chat(M, SPAN_DANGER("\The [name] malfunction[gender != PLURAL ? "s":""], blinding you!")) + // Don't cure being nearsighted + if (!(M.disabilities & NEARSIGHTED)) + M.disabilities |= NEARSIGHTED + spawn(100) + M.disabilities &= ~NEARSIGHTED + if (toggleable) + deactivate(M, FALSE) + ..() + +/obj/item/clothing/inherit_custom_item_data(datum/custom_item/citem) + . = ..() + if (toggleable) + if (citem.additional_data["icon_on"]) + set_icon_state(citem.additional_data["icon_on"]) + if (citem.additional_data["icon_off"]) + off_state = citem.additional_data["icon_off"] + + /////////////////////////////////////////////////////////////////////// //Gloves /obj/item/clothing/gloves diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm index 29a6be1a8f5c5..5b174b996d047 100644 --- a/code/modules/clothing/clothing_accessories.dm +++ b/code/modules/clothing/clothing_accessories.dm @@ -97,6 +97,7 @@ src.verbs |= /obj/item/clothing/proc/remove_all_accessories update_accessory_slowdown() update_clothing_icon() + update_vision() GLOB.destroyed_event.register(A, src, .proc/accessory_deleted) /obj/item/clothing/proc/accessory_deleted(obj/item/clothing/accessory/A) @@ -110,6 +111,7 @@ accessories -= A update_accessory_slowdown() update_clothing_icon() + update_vision() GLOB.destroyed_event.unregister(A, src, .proc/accessory_deleted) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 924f011756f5c..041160f5c8c19 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -5,19 +5,14 @@ SPECIES_VOX = 'icons/mob/species/vox/onmob_eyes_vox.dmi', SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_eyes_unathi.dmi' ) - var/hud_type var/prescription = FALSE - var/toggleable = FALSE - var/off_state = "degoggles" - var/active = TRUE - var/activation_sound = 'sound/items/goggles_charge.ogg' - var/deactivation_sound // set this if you want a sound on deactivation + off_state = "degoggles" + activation_sound = 'sound/items/goggles_charge.ogg' + deactivation_sound = null var/obj/screen/overlay = null var/obj/item/clothing/glasses/hud/hud = null // Hud glasses, if any - var/electric = FALSE //if the glasses should be disrupted by EMP + electric = FALSE //if the glasses should be disrupted by EMP - var/toggle_on_message //set these in initialize if you want messages other than about the optical matrix - var/toggle_off_message /obj/item/clothing/glasses/Initialize() . = ..() @@ -34,63 +29,6 @@ /obj/item/clothing/glasses/needs_vision_update() return ..() || overlay || vision_flags || see_invisible || darkness_view -/obj/item/clothing/glasses/proc/activate(mob/user) - if(toggleable && !active) - active = TRUE - flash_protection = initial(flash_protection) - tint = initial(tint) - if(user) - user.update_inv_glasses() - user.update_action_buttons() - if(activation_sound) - sound_to(user, activation_sound) - if(toggle_on_message) - to_chat(user, toggle_on_message) - else - to_chat(user, "You activate the optical matrix on \the [src].") - - update_icon() - update_clothing_icon() - update_vision() - -/obj/item/clothing/glasses/proc/deactivate(mob/user, manual = TRUE) - if(toggleable && active) - active = FALSE - if(user) - if(manual) - if(toggle_off_message) - to_chat(user, toggle_off_message) - else - to_chat(user, "You deactivate the optical matrix on \the [src].") - if(deactivation_sound) - sound_to(user, deactivation_sound) - user.update_inv_glasses() - user.update_action_buttons() - - flash_protection = FLASH_PROTECTION_NONE - tint = TINT_NONE - update_icon() - update_clothing_icon() - update_vision() - -/obj/item/clothing/glasses/emp_act(severity) - if(electric && active) - if(istype(src.loc, /mob/living/carbon/human)) - var/mob/living/carbon/human/M = src.loc - if(M.glasses != src) - to_chat(M, SPAN_DANGER("\The [name] malfunction[gender != PLURAL ? "s":""], releasing a small spark.")) - else - M.eye_blind = 2 - M.eye_blurry = 4 - to_chat(M, SPAN_DANGER("\The [name] malfunction[gender != PLURAL ? "s":""], blinding you!")) - // Don't cure being nearsighted - if(!(M.disabilities & NEARSIGHTED)) - M.disabilities |= NEARSIGHTED - spawn(100) - M.disabilities &= ~NEARSIGHTED - if(toggleable) - deactivate(M, FALSE) - ..() /obj/item/clothing/glasses/attack_self(mob/user) if(toggleable && !user.incapacitated()) @@ -99,14 +37,6 @@ else activate(user) -/obj/item/clothing/glasses/inherit_custom_item_data(datum/custom_item/citem) - . = ..() - if(toggleable) - if(citem.additional_data["icon_on"]) - set_icon_state(citem.additional_data["icon_on"]) - if(citem.additional_data["icon_off"]) - off_state = citem.additional_data["icon_off"] - /obj/item/clothing/glasses/meson name = "meson goggles" desc = "Used for seeing walls, floors, and stuff through anything." @@ -124,6 +54,91 @@ . = ..() overlay = GLOB.global_hud.meson +/obj/item/clothing/glasses/ballistic + name = "ballistic goggles" + desc = "A pair of goggles designed to protect the wearer's eyes from shrapnel." + icon_state = "ballistic" + origin_tech = list(TECH_COMBAT = 2) + siemens_coefficient = 0.6 + armor = list( + melee = ARMOR_MELEE_SMALL, + bullet = ARMOR_BALLISTIC_SMALL, + bomb = ARMOR_BOMB_MINOR + ) + action_button_name = "Toggle Attachments" + valid_accessory_slots = list(ACCESSORY_SLOT_VISION, ACCESSORY_SLOT_HUD) + restricted_accessory_slots = list(ACCESSORY_SLOT_VISION, ACCESSORY_SLOT_HUD) + var/toggle_mods = list() + +/obj/item/clothing/glasses/ballistic/Initialize() + . = ..() + count_toggle_mods() + +/obj/item/clothing/glasses/ballistic/attach_accessory(mob/user, obj/item/clothing/accessory/A) + . = ..() + if(A.toggleable) + toggle_mods += A + +/obj/item/clothing/glasses/ballistic/remove_accessory(mob/user, obj/item/clothing/accessory/A) + . = ..() + if(A.toggleable) + toggle_mods -= A + +/obj/item/clothing/glasses/ballistic/proc/count_toggle_mods() + toggle_mods = list() + for (var/obj/item/clothing/accessory/glassesmod/mod in accessories) + if(mod.toggleable) + toggle_mods += mod + + +/obj/item/clothing/glasses/ballistic/attack_self(mob/user) + if(!user.incapacitated()) + var/obj/item/clothing/accessory/glassesmod/choice = null + if (length(toggle_mods) == 1) + choice = toggle_mods[1] + else if(length(toggle_mods) <= 0) + return + else + input(user, "Toggle which accessory?", "Attachment selection") as null|anything in toggle_mods + if (choice.active) + choice.deactivate(user) + else + choice.activate(user) + update_vision() + + +/obj/item/clothing/glasses/ballistic/prescription + name = "prescription ballistic goggles" + desc = "A pair of goggles designed to protect the wearer's eyes from shrapnel. This set has corrective lenses." + prescription = 5 + + +/obj/item/clothing/glasses/ballistic/fake + name = "budget ballistic goggles" + desc = "A pair of goggles that probably won't protect the wearer's eyes from shrapnel. At least they make you feel more tacticool." + origin_tech = null + armor = null + +/obj/item/clothing/glasses/ballistic/fake/prescription + name = "budget ballistic goggles" + desc = "A pair of goggles that probably won't protect the wearer's eyes from shrapnel. At least they make you feel more tacticool. This set has corrective lenses." + origin_tech = null + armor = null + prescription = 5 + + +/obj/item/clothing/glasses/ballistic/security + accessories = list( + /obj/item/clothing/accessory/glassesmod/vision/polarized, + /obj/item/clothing/accessory/glassesmod/hud/security + ) + +/obj/item/clothing/glasses/ballistic/medic + accessories = list(/obj/item/clothing/accessory/glassesmod/hud/medical) + +/obj/item/clothing/glasses/ballistic/engi + accessories = list(/obj/item/clothing/accessory/glassesmod/vision/welding) + /obj/item/clothing/glasses/meson/prescription name = "meson goggles" desc = "Used for seeing walls, floors, and stuff through anything. This set has corrective lenses." diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 8b5af3b19b12f..503055e61b636 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -6,8 +6,8 @@ slot_l_hand_str = "helmet", slot_r_hand_str = "helmet", ) - valid_accessory_slots = list(ACCESSORY_SLOT_HELM_C, ACCESSORY_SLOT_HELM_D) - restricted_accessory_slots = list(ACCESSORY_SLOT_HELM_C, ACCESSORY_SLOT_HELM_D) + valid_accessory_slots = list(ACCESSORY_SLOT_HELM_C, ACCESSORY_SLOT_HELM_D, ACCESSORY_SLOT_VISOR) + restricted_accessory_slots = list(ACCESSORY_SLOT_HELM_C, ACCESSORY_SLOT_HELM_D, ACCESSORY_SLOT_VISOR) item_flags = ITEM_FLAG_THICKMATERIAL body_parts_covered = HEAD armor = list( @@ -26,6 +26,32 @@ w_class = ITEM_SIZE_NORMAL species_restricted = list("exclude", SPECIES_NABBER, SPECIES_ADHERENT) +/obj/item/clothing/head/helmet/needs_vision_update() + for(var/obj/item/clothing/accessory/glassesmod/visor in accessories) + return TRUE + . = ..() + +/obj/item/clothing/head/helmet/verb/toggle_visor() + + set name = "Toggle Helmet Attachments" + set category = "Object" + set src in usr + + if (!istype(loc,/mob/living)) + return + + var/toggled = FALSE + if (!usr.incapacitated()) + for (var/obj/item/clothing/accessory/glassesmod/mod in accessories) + if (mod.active) + mod.deactivate(usr) + else + mod.activate(usr) + toggled = TRUE + if (!toggled) + to_chat(usr, SPAN_CLASS("danger", "You do not have a visor attached to your helmet!")) + + /obj/item/clothing/head/helmet/nt name = "corporate security helmet" desc = "A helmet with 'CORPORATE SECURITY' printed on the back in red lettering." @@ -92,7 +118,7 @@ name = "ablative helmet" desc = "A helmet made from advanced materials which protects against concentrated energy weapons." icon_state = "helmet_reflect" - valid_accessory_slots = null + valid_accessory_slots = list(ACCESSORY_SLOT_VISOR) armor = list( melee = ARMOR_MELEE_SMALL, bullet = ARMOR_BALLISTIC_MINOR, @@ -105,7 +131,7 @@ name = "ballistic helmet" desc = "A helmet with reinforced plating to protect against ballistic projectiles." icon_state = "helmet_bulletproof" - valid_accessory_slots = null + valid_accessory_slots = list(ACCESSORY_SLOT_VISOR) armor = list( melee = ARMOR_MELEE_MINOR, bullet = ARMOR_BALLISTIC_AP, @@ -125,7 +151,7 @@ energy = ARMOR_ENERGY_RESISTANT, bomb = ARMOR_BOMB_PADDED ) - valid_accessory_slots = null + valid_accessory_slots = list(ACCESSORY_SLOT_VISOR) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE siemens_coefficient = 0.5 @@ -262,3 +288,34 @@ rad = ARMOR_RAD_SMALL ) species_restricted = list(SPECIES_HUMAN) + +/obj/item/clothing/head/helmet/nvgmount + name = "model helmet" + desc = "A lightweight helmet made of cheap plastic, sporting fiducial marking stickers on either side. You doubt it will provide much protection." + icon_state = "nvgmount" + valid_accessory_slots = list(ACCESSORY_SLOT_VISOR, ACCESSORY_SLOT_HELM_D) + restricted_accessory_slots = list(ACCESSORY_SLOT_VISOR, ACCESSORY_SLOT_HELM_D) + armor = list( + melee = ARMOR_MELEE_MINOR, + ) + +/obj/item/clothing/head/helmet/nvgmount/nvg + accessories = list(/obj/item/clothing/accessory/glassesmod/nvg) + +/obj/item/clothing/head/helmet/nvgmount/thermal + accessories = list(/obj/item/clothing/accessory/glassesmod/thermal) + +/obj/item/clothing/head/helmet/old_commonwealth + name = "old army helmet" + desc = "A worn helmet that appears to have been the property of some spacefaring armed force, many years ago." + accessories = list(/obj/item/clothing/accessory/helmet_cover/green, /obj/item/clothing/accessory/glassesmod/nvg) + +/obj/item/clothing/head/helmet/old_confederation + name = "old army helmet" + desc = "A worn helmet that appears to have been the property of some spacefaring armed force, many years ago." + accessories = list(/obj/item/clothing/accessory/helmet_cover/tan, /obj/item/clothing/accessory/glassesmod/nvg) + +/obj/item/clothing/head/helmet/old_special_ops + name = "old army helmet" + desc = "A worn helmet that appears to have been the property of some spacefaring armed force, many years ago." + accessories = list(/obj/item/clothing/accessory/glassesmod/thermal) diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index ff15ebad2f3ec..d29986355443f 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -100,7 +100,7 @@ body_parts_covered = FACE|EYES action_button_name = "Toggle MUI" origin_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5) - var/active = FALSE + active = FALSE var/mob/observer/eye/cameranet/eye /obj/item/clothing/mask/ai/New() diff --git a/code/modules/clothing/spacesuits/void/misc.dm b/code/modules/clothing/spacesuits/void/misc.dm index 92e6674aa9e52..90c21b68f7c86 100644 --- a/code/modules/clothing/spacesuits/void/misc.dm +++ b/code/modules/clothing/spacesuits/void/misc.dm @@ -31,6 +31,8 @@ rad = ARMOR_RAD_SHIELDED ) max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE + valid_accessory_slots = null + restricted_accessory_slots = null species_restricted = list(SPECIES_SKRELL,SPECIES_HUMAN) /obj/item/clothing/head/helmet/space/void/skrell/white diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm index 33e385884f9bb..084282964818c 100644 --- a/code/modules/clothing/spacesuits/void/station.dm +++ b/code/modules/clothing/spacesuits/void/station.dm @@ -492,6 +492,8 @@ rad = ARMOR_RAD_SHIELDED ) light_overlay = "helmet_light_alt" + valid_accessory_slots = null + restricted_accessory_slots = null /obj/item/clothing/suit/space/void/retro/prepared helmet = /obj/item/clothing/head/helmet/space/void/retro diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index e00a8a4bb3277..612f61dae7ff4 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -31,6 +31,8 @@ ) light_overlay = "helmet_light" + valid_accessory_slots = list(ACCESSORY_SLOT_VISOR) + restricted_accessory_slots = list(ACCESSORY_SLOT_VISOR) /obj/item/clothing/suit/space/void name = "voidsuit" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index ad5be4c7f9479..bb17602cd8515 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -96,7 +96,7 @@ /obj/item/clothing/suit/armor/reactive name = "reactive teleport armor" desc = "Someone separated our Chief Science Officer from their own head!" - var/active = 0.0 + active = 0.0 icon_state = "reactiveoff" blood_overlay_type = "armor" armor = null diff --git a/code/modules/clothing/under/accessories/goggle_mods.dm b/code/modules/clothing/under/accessories/goggle_mods.dm new file mode 100644 index 0000000000000..36aaef896cd68 --- /dev/null +++ b/code/modules/clothing/under/accessories/goggle_mods.dm @@ -0,0 +1,132 @@ +/obj/item/clothing/accessory/glassesmod + abstract_type = /obj/item/clothing/accessory/glassesmod + name = "base glasses mod" + desc = "A basic modification for ballistic goggles." + icon_override = 'icons/mob/onmob/onmob_goggle_mod.dmi' + var/obj/screen/overlay + var/thermals = FALSE + var/nvg = FALSE + body_location = EYES + accessory_icons = list( + slot_tie_str = 'icons/mob/onmob/onmob_goggle_mod.dmi', + slot_goggles_str = 'icons/mob/onmob/onmob_goggle_mod.dmi', + slot_head_str = 'icons/mob/onmob/onmob_goggle_mod.dmi' + ) + sprite_sheets = list( + SPECIES_UNATHI = 'icons/mob/species/unathi/onmob_goggle_mod_unathi.dmi', + SPECIES_VOX = 'icons/mob/species/vox/onmob_goggle_mod_vox.dmi', + SPECIES_HUMAN = 'icons/mob/onmob/onmob_goggle_mod.dmi' + ) + activation_sound = 'sound/items/goggles_charge.ogg' + +/obj/item/clothing/accessory/glassesmod/proc/process_hud(mob/M) + return + +/obj/item/clothing/accessory/glassesmod/activate() + . = ..() + parent.CutOverlays(inv_overlay) + inv_overlay = null + inv_overlay = get_inv_overlay() + parent.AddOverlays(inv_overlay) + parent.update_vision() + +/obj/item/clothing/accessory/glassesmod/deactivate() + . = ..() + parent.CutOverlays(inv_overlay) + inv_overlay = null + inv_overlay = get_inv_overlay() + parent.AddOverlays(inv_overlay) + parent.update_vision() + +/obj/item/clothing/accessory/glassesmod/thermal + name = "thermal sights" + desc = "An older set of thermal vision goggles, modified to attach to a helmet." + icon_state = "thermals" + slot = ACCESSORY_SLOT_VISOR + vision_flags = SEE_MOBS + see_invisible = SEE_INVISIBLE_NOLIGHTING + toggleable = TRUE + off_state = "thermoff" + electric = TRUE + thermals = TRUE + tint = TINT_HEAVY + activation_sound = 'sound/items/metal_clicking_4.ogg' + deactivation_sound = 'sound/items/metal_clicking_4.ogg' + + +/obj/item/clothing/accessory/glassesmod/nvg + name = "light-enhancing sights" + desc = "An older set of light enhancing goggles, modified to attach to a helmet." + icon_state = "nvg" + slot = ACCESSORY_SLOT_VISOR + see_invisible = SEE_INVISIBLE_NOLIGHTING + toggleable = TRUE + off_state = "nvgoff" + electric = TRUE + nvg = TRUE + darkness_view = 4 + tint = TINT_MODERATE + activation_sound = 'sound/items/metal_clicking_4.ogg' + deactivation_sound = 'sound/items/metal_clicking_4.ogg' + +/obj/item/clothing/accessory/glassesmod/hud/process_hud(mob/M) + return + +/obj/item/clothing/accessory/glassesmod/hud/security + name = "security HUD attachment" + desc = "An attachable security HUD for ballistic goggles." + icon_state = "sechud" + slot = ACCESSORY_SLOT_HUD + hud_type = HUD_SECURITY + toggleable = TRUE + off_state = "hudoff" + + +/obj/item/clothing/accessory/glassesmod/hud/security/process_hud(mob/M) + process_sec_hud(M, 1) + + +/obj/item/clothing/accessory/glassesmod/hud/medical + name = "medical HUD attachment" + desc = "An attachable security HUD for ballistic goggles." + icon_state = "medhud" + slot = ACCESSORY_SLOT_HUD + hud_type = HUD_MEDICAL + toggleable = TRUE + off_state = "hudoff" + +/obj/item/clothing/accessory/glassesmod/hud/medical/process_hud(mob/M) + process_med_hud(M, 1) + +/obj/item/clothing/accessory/glassesmod/vision/polarized + name = "polarized lenses" + desc = "A set of flash-resistant lenses that can be clipped onto a pair of ballistic goggles." + slot = ACCESSORY_SLOT_VISION + icon_state = "polarized" + flash_protection = FLASH_PROTECTION_MODERATE + darkness_view = -1 + +/obj/item/clothing/accessory/glassesmod/vision/welding + name = "welding lenses" + desc = "A set of welding lenses that can be attached to ballistic goggles to protect against arc-eye" + slot = ACCESSORY_SLOT_VISION + icon_state = "welding_lenses" + off_state = "welding_lenses_up" + flash_protection = FLASH_PROTECTION_MAJOR + flags_inv = HIDEEYES + tint = TINT_HEAVY + toggleable = TRUE + activation_sound = 'sound/items/metal_clicking_13.ogg' + deactivation_sound = 'sound/items/metal_clicking_13.ogg' + toggle_on_message = "You flip the lenses down to protect your eyes." + toggle_off_message = "You push the lenses up out of your face." + +/obj/item/clothing/accessory/glassesmod/vision/welding/activate(mob/usr) + . = ..() + flags_inv |= HIDEEYES + body_parts_covered |= EYES + +/obj/item/clothing/accessory/glassesmod/vision/welding/deactivate(mob/usr) + . = ..() + flags_inv &= ~HIDEEYES + body_parts_covered &= ~EYES diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 56c07884785cf..c22c116c69f39 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -354,14 +354,26 @@ var/obj/item/clothing/glasses/G = H.glasses var/obj/item/card/id/ID = M.GetIdCard() var/obj/item/organ/internal/augment/active/hud/AUG + var/obj/item/clothing/accessory/glassesmod/hud/ACC for (var/obj/item/organ/internal/augment/active/hud/A in H.internal_organs) // Check for installed and active HUD implants if (A.hud_type & hudtype) AUG = A break +<<<<<<< ours // [SIERRA-EDIT] - NTNET // return ((istype(G) && ((G.hud_type & hudtype) || (G.hud && (G.hud.hud_type & hudtype)))) && G.check_access(ID)) || AUG?.active && AUG.check_access(ID) // SIERRA-EDIT - ORIGINAL return ((istype(G) && ((G.hud_type & hudtype) || (G.hud && (G.hud.hud_type & hudtype)))) && G.check_access(ID) && (G.toggleable ? G.active : TRUE)) || AUG?.active && AUG.check_access(ID) // [/SIERRA-EDIT] +======= + + if (G) + for (var/obj/item/clothing/accessory/glassesmod/hud/C in G.accessories) // Check for HUD accessories on worn eyewear + if (C.hud_type & hudtype) + ACC = C + break + + return ((istype(G) && ((G.hud_type & hudtype) || (G.hud && (G.hud.hud_type & hudtype)))) && G.check_access(ID)) || AUG?.active && AUG.check_access(ID) || ACC?.active +>>>>>>> theirs else if(istype(M, /mob/living/silicon/robot)) for (var/obj/item/borg/sight/sight as anything in M.GetAllHeld(/obj/item/borg/sight)) if (sight.hud_type & hudtype) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 9d93238a9fedc..ce6b3adb88af6 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -65,6 +65,7 @@ add_clothing_protection(head) if(istype(src.glasses, /obj/item/clothing/glasses)) process_glasses(glasses) + process_visor(head, glasses) if(istype(src.wear_mask, /obj/item/clothing/mask)) add_clothing_protection(wear_mask) if(istype(back,/obj/item/rig)) @@ -90,6 +91,53 @@ add_clothing_protection(G) G.process_hud(src) +/mob/living/carbon/human/proc/process_visor(obj/item/clothing/head/hat, obj/item/clothing/glasses/eyewear) + remove_client_color(/datum/client_color/monochrome) + remove_client_color(/datum/client_color/nvg) + if (hat) + for(var/obj/item/clothing/accessory/glassesmod/mod in hat.accessories) + if (mod?.active) + equipment_darkness_modifier += mod.darkness_view + equipment_vision_flags |= mod.vision_flags + equipment_light_protection += mod.light_protection + if (mod.overlay) + equipment_overlays |= mod.overlay + if (mod.see_invisible >= 0) + if (equipment_see_invis) + equipment_see_invis = min(equipment_see_invis, mod.see_invisible) + else + equipment_see_invis = mod.see_invisible + if (mod.thermals) + //this breaks if more than one thermal accessory is worn at once + add_client_color(/datum/client_color/monochrome) + if (mod.nvg) + //this breaks if more than one nvg accessory is worn at once + add_client_color(/datum/client_color/nvg) + add_clothing_protection(mod) + mod.process_hud(src) + if (eyewear) + for(var/obj/item/clothing/accessory/glassesmod/mod in eyewear.accessories) + if (mod?.active) + equipment_darkness_modifier += mod.darkness_view + equipment_vision_flags |= mod.vision_flags + equipment_light_protection += mod.light_protection + if (mod.overlay) + equipment_overlays |= mod.overlay + if (mod.see_invisible >= 0) + if (equipment_see_invis) + equipment_see_invis = min(equipment_see_invis, mod.see_invisible) + else + equipment_see_invis = mod.see_invisible + if (mod.thermals) + //this breaks if more than one thermal accessory is worn at once + add_client_color(/datum/client_color/monochrome) + if (mod.nvg) + //this breaks if more than one nvg accessory is worn at once + add_client_color(/datum/client_color/nvg) + add_clothing_protection(mod) + mod.process_hud(src) + src.update_client_color() + /mob/living/carbon/human/proc/process_rig(obj/item/rig/O) if(O.visor && O.visor.active && O.visor.vision && O.visor.vision.glasses && (!O.helmet || (head && O.helmet == head))) process_glasses(O.visor.vision.glasses) diff --git a/code/modules/mob/observer/ghost/ghost.dm b/code/modules/mob/observer/ghost/ghost.dm index bbe2926c49856..0016cb7ff723c 100644 --- a/code/modules/mob/observer/ghost/ghost.dm +++ b/code/modules/mob/observer/ghost/ghost.dm @@ -141,6 +141,8 @@ Works together with spawning an observer, noted above. return 1 /mob/proc/ghostize(can_reenter_corpse = CORPSE_CAN_REENTER) + //remove color filters + clear_client_colors() // Are we the body of an aghosted admin? If so, don't make a ghost. if(teleop && istype(teleop, /mob/observer/ghost)) var/mob/observer/ghost/G = teleop @@ -154,10 +156,10 @@ Works together with spawning an observer, noted above. ghost.key = key if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed. ghost.verbs -= /mob/observer/ghost/verb/toggle_antagHUD // Poor guys, don't know what they are missing! + ghost.update_client_color() return ghost /mob/observer/ghostize() // Do not create ghosts of ghosts. - /* This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues. */ @@ -165,11 +167,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set category = "OOC" set name = "Ghost" set desc = "Relinquish your life and enter the land of the dead." - if (admin_paralyzed) to_chat(usr, SPAN_DEBUG("You cannot ghost while admin paralyzed.")) return - + clear_client_colors() if(stat == DEAD) announce_ghost_joinleave(ghostize(1)) else @@ -192,9 +193,16 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if (ghost) ghost.timeofdeath = world.time // Because the living mob won't have a time of death and we want the respawn timer to work properly. announce_ghost_joinleave(ghost) + ghost.update_client_color() + + +/mob/observer/ghost/can_use_hands() + return FALSE + + +/mob/observer/ghost/is_active() + return FALSE -/mob/observer/ghost/can_use_hands() return 0 -/mob/observer/ghost/is_active() return 0 /mob/observer/ghost/Stat() . = ..() diff --git a/code/modules/mob/skills/skill_verbs.dm b/code/modules/mob/skills/skill_verbs.dm index ed7faeaab9c49..823000b8bd52e 100644 --- a/code/modules/mob/skills/skill_verbs.dm +++ b/code/modules/mob/skills/skill_verbs.dm @@ -209,13 +209,12 @@ The Appraise verb. Used on objects to estimate their value. set category = "IC" set name = "Detective instinct" set src = usr - set popup_menu = 0 - - if(incapacitated()) + set popup_menu = FALSE + if (incapacitated()) return - - if(!remove_client_color(/datum/client_color/noir)) - to_chat(src, "You clear your mind and focus on the scene before you.") - add_client_color(/datum/client_color/noir) - else + if (has_client_color(/datum/client_color/noir)) + remove_client_color(/datum/client_color/noir) to_chat(src, "You stop looking for clues.") + else + add_client_color(/datum/client_color/noir) + to_chat(src, "You clear your mind and focus on the scene before you.") diff --git a/icons/mob/onmob/onmob_eyes.dmi b/icons/mob/onmob/onmob_eyes.dmi index be2b9f1bef8fc93af62030f23cb3abfb90259ea1..47c97701f868abb977111709bb1f42137d46e9e7 100644 GIT binary patch literal 11879 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 literal 11818 zcmd6Nc{p49_IK!@gHoLwHAGRWC^b}3(pI!uMXQ4v)6*7JV~q`xbVe0L%~RFTDw0-+ z5|XxtnyDfPQd5i(L_$R5-D%Ic_niCO^Stl-d*1t=`-dml`@8qf_FbQ~)@Oaz3O{dg zdfS%0TR8OSMA+M)BN#XvRwu(#Y9kGFRl&38Nb-yFRU? z_6^@_`8XOF)y&$=atGuG)H= zHJ;YLe0$Ql^UJ+Dda{S8K1_{ucUdT^q{QpnZcn22;005-+!@<*^8z)l+goMr>1GPOv3az!)2Pv8|0e_GPnUdx$wQuf6Bfg`6L4stOv&8D zp>|L0$A$O^8*L}*5lEr7k^BD8#=Q3`rKQhz=oX5(7C$a3R4(6wL(;*6aZzzlQ_XQ- z=Ohwi{`;o}3C&D;h>_NK<@mV=Z8#4B5U5?dVR{1ybZ^lZ1RPCm0zi0NT3|g0^hW+3 zfJFbeFDu*bAOHC1L=<*1cOQpTpJ`H@X+iFnUWFDFc7QsuPl5+u_}X!K{-Hg zz5%n@Y&1G6JG=U5DHJLbG_mi!haK%s*%6&&IyAe3LQ&7+&=Y%TmkX@%gedQ$?zeB> ze$pl3K}@wxO?if`;?mbF64YUbJTd#EL{bqP)|rVlPAJQD5qLNW?Lh5$f1`Nxaj)8Z zne>MujCX6Ap4F8r)IM9_?qlxlxgFt2J(y@Iy@f2KDuwr0 zPIsDa$AV(9i0?SUXEtLTHNhGlzD|-MYVpL8OMUOylq2k^l62ly9>MDkm=oBGZbjK7 z>uB@HYd6bv8N9{OAqHwKa3qBo4Xc(0Hx)mlhV!x&zS(w|I32i&^PptxG9=lX9hEu) zr`*MxKyT6}i%cxr-rU|JHpy;mK1l;52@i9!E_`ds2(A7V%b^$@9U`#W0={--a=t&h zx)MI-YQXD3-s)T|9v|}VDRE>m_K3wiM9mMpk|ZE3v0?RZ<493%YU{UyKrf>*1^%ts zelCIpL7+~t-AmDBURxb*M2Aa65;9fxacYYB`2 zRMr{lm&w|`2cKT%V=%<;Zi*2xGI(pQX@cIlo6p7}wx^?{V#JLM%WK&|ycW^j^YbOHR2RrjxDz?E z_}IimCHbP3qLircW3w-af;&V)&8M9pUSeW;%i!sFadog@MQST9^A{R;Su(GR8fZy{`^5WyCk36r0K} z=P#`eg@TW0IXC};<1J2pTPVdKXb&=ZxFWkyX;535VZq9By2P_x(1QhU?P11e&V*0W z>EdLZVS1T0{iBNUKCB0al~rK@K@(PPTYgTeEyLl;LR1#?{Lraj zq1pJJz?u~6<7u`H3x}ba?RPyDf(8LV9Y1@=;?bk%&Qm`ix2$8&$M$~|kAHHEzXI>` z^?er{oGTrT^|L6T=M{>Uqp1%+eGjz&F_}z4xS9|s)(#G5zx!@yZJpTth0xJq6&D{r z76fi=YHIoT@!rf}6&Z`v;tkaq@b16_Hg9~GM<5J}bCisp=RCCJlJ$LQFWQn*eIz?( z-v{4ER-46VJ-6x5aPTxZW|!x5vwl%1uc_pjaK7;44i@{W#Fpg3LRJ2HuH%&}2`*f; z@Z)BWP?x6IC!*BZ)s|K4D6Sg&WwmOgLU8y|^fDJf*GM`3PM5e?Lu+e7{>9gg^CMrJ zPC4hL$w*xyZqZ_=ER79AP#4#xVMtkat?sP^3o{F%5bri-RGjk4k%wi(Wea| zq)#Nj8+9J1uYOl8cj28PWd>6ma1GBcxs-4{-%g=5*`I87kfVzjxQdD=Z)XqgBr|{; zhXc${11>EmCnWl`U-mT=S~GJO7QzdTO_HYn=IiL9+|vAp%CBS_BlqhFup#gL{8+p|xyKOiW@v2gOh;3$xSmrlP3dmG$n< zJw&LZV%P?)Qpa?toW)+8VV>77Y9Y6_Yde8!?!@7K>Y^QVG|(Y#bWSPbTmjPB-#R(Q;zKr#IE`&*txQ=^X7IAR>={ToE*TGmaB3^%T~4Xmy}T(6q4tn>_w|K-s`O6 zt&5e_9XsNE@{%@f!JyJn5Ohs&lkDc<)oTj;_3J?F`BC)@& z0q>}bR*|)_v9XfavTdut-h;;bF51{AM;o$|Zr;3EPb;Gwl8}(dC{mKR^yH+Xii+7m z6%_|ed`!&H6s=%1z z7&32C&g`}u`xv2q7QmEe*B&ufkK3AFi>yZS!-v(LsmaO8)>LZa+pYqK0&qC=+;}wV z*c1&zSa~}-HdcPw5eoIJVqReniJ}h3tuVyJHm?_SW-M`7YZyr-SY~=UEqWm8R5ltG z&tJ&V&!z>&IoVKOMI7287DM9<_DR|z8ye{ddN3M2gvQTmTBwP|P}W#w*U7lPkwePL z@GHt+*AZhhU{Mu~@Lc~`IfIN;4RWu~(e>D=7uwrVd6cAi9j z>n+Z}r7j02^i}W2mGB93HrR}nxeO6XaPmqo>*~_E|7CQyySKaXhUnDE5S_YkmV^Mza@(z!xA)pRkF`YicMu@m4IvYYsO1Y=Cv!(D9vW zQ%%M);O_}UqJKv;@y!JT!j)CqerKD6c@DRur)MH!p!;p6@bJ25s_?LzYbZvVZqJ#? zbT~5Bk!nc{@twh)q5-i)t7CIu3DB%3moi3}*+++jQ5gR>i2gU0)kCP0)#Sk+v6*$lk4T zWx3LEU1jy^H%W%2S2N`Oj=jf4bhQ;0W}jbALajW7%GI^7mlhX41W=NWQlsaaQ47#5 zw!Y&>BEpi=q~;ChAN9v&LSpb7(_;dViKX+H%wTkTZ)RfRctemyx_+0coYmE<2fDht zVn3}qbai)kS2{KA$w#9T0AgZE1#ep4tVCWz(AOlL?fF;^#I3u3Pt~EKv#YPPv^4M4 ztLrs^FM$#O;QOV4uM?cMIe3a}d|1335luIoe@L`R&dj7w?bX-UKgW_rm6mxlrNp-y z(b)7}tdi~d^Y0W449Il%*PK;Sq0LU(%#84@X4KbLCSRou0@kM?9Hn`QHkP^(VPU<> zLWt@8BN^|(JSD#kHAX=trWwH&Azz}Ktb>ELoDTL;IP2lzVHMInw*NH=4u@M^xG-e! z?dwo)1H8M?#w0yGy`!T;PVV#S?n~Cz5n*?a@NQ{OalWD!>x&=0M(xE{c@Leu6TCKV zn;2kD#sS#obfX=nr+G9E*E2H&3SD3@5L_aHNNHjR`um>=4(8nNq4{N^fXsfYg^0)7 z#SSeKDUNo2=b<%aj;~Vx@XB z45rxvKEATIZ61=vN9*^HIXex|pDV2Y8J+$=qA&kMKPI^8RN#lK zPt*H9$^#+ygB}k66=_y-=ahUXsaMUj>6CTcM9;>1i_QxoH+ z;cJU@peRySRedovb-SUyEwE@0L)_KP&26yQDFU#fnWbg45(Bj|`MM?BgQ?EOG{&@K zDid9+ef`y$M5KLG$o2AOpF3-Ea(@BT9ekiN>X%@BtH}$gfQ23Gj8C5q?VYn9Fe|f6 z4*XUt4m(x?^IZerJ@Y5L3JD6>RQTl=l*Yl=+`0?H0|Ejz_NNi+h1%|$MC>sMoaqts zX2Jbe=|PIuuBbJ<=rzHVh2Rh3HRLH(Y`p&}_}lL1eSLj7%Y{uB3Ctbbslv~dmB;em zyqQa%oS2&#JqA4VRcot-tE;P+n6eb@`||_Mu$+ntTWAfIjd8$tFWJ64hr}%hG_3&1fH+MmHY{q-38s5_a}i=)}$1Bx&_=EyLsK?wq(ka#P1%IE7OYYW(?voF8^ z;Fgq?fx`wIKY0IY+eR!XXkxM>Lgu6{HjZ;&n3;4Rku z487qQ5b!63_Ms;mF^QmPsGQgcbu~CB$R6)?PKqJ)h4(&nhACJ#ywfW_`FDHIJ=RSS zq5UPCg=AxJI2={Y4rl7`U%I%sxJ#d-GtLjWZ2``WGp|S-EEdac4UpabJl8BSgCnB& z5{K))bm`KwWf6t#o04v6zh%vK78hojz5jIWybQaUu`n9*a&&wgU-2X=N(AePtm@}= zZZqbTj1yhjGH#tX@hNs@#+`^wpJl+X&gLaptk%oJygxyFsj$$T z9a@H5Q4ZXYgJHk@teY3&xUjI0^Xk>-z`X2g>`-%xPQe>2_M)w=Efl)tw87Ee!m!9h zF5t9cF()xpaO5dOk;}n)6Jnz$K#(UWqy1)J!A}3;KMZNT0546 z(%#GT|Cc!1w~EK(g?`L(UO*4xOO9Z zJkuQc6O>_hgPxn6YS2c3CL>08J-H$L8ZuvL%;*9CGx|TqbpNmF(?k1y08?QYso3~$ zV=TZ74#()+*`QF%N9H(l?{{f_j70_E+o`A%8=hBh+vcb)AOpx7e`EuqQM`PYg{y0K z(D9P+Tz0&&mBM2@z1Oe=qOPt!wABFoZ({6Ug7O@ zMGkg$ZU+w@JQX6eW7GO`+Iuet2VS@7Zg*D3$hEbGHofu53UaU;A+EZ@4MAy zcv-+DleM}u)4Nmcz=5l=KX}DA#P6~6?LRocT}|FqDV~4%omDVn_w(te=wJ+^Af2y# z?B2bb0N6TXo68^byVcRYPx~$au_6}{9LQ@az@mBGt zWCny(QR3EzqhUSBWdSr>ips*%4~PXZF@8j?lEd6(twf*7CZN%WT)n&?+wp+M(5I%X zQc;0{x?gzO@e@B{;byfrfJ3HDPCOTqlr-eIPh}5gDGU=#YQ8xu|8gR ztM=(`BMb?kBX7;Ff&gGqy^W1u&3Y#NOyMBVM9Q&luT4Nn)0ScQ^}&M&`+IwPk-y_& z;OYpF;cPEnxNvxQci3^+Yp=e(>Fe6uRQ$wUb`ezUt z1Bxn}1$i5Bbxy4@cW6Uq2H}~C@!855_?a^eSh?b23<}rGTB1b`c)Gh+Ud%$mfP!d- zF+g9i&4^_CIKg=Cy^gP%kApm`J2AAqD5ovS;jFN zw(i;G)@kH7aelN#mmo1}7A)Go3ueX{H5lP#uD2uyn9ty@aBps>FeDOocTb%NQEOrIMPolo#~v}UCfrl^ zCeJ-$?5_*p-BIJK5Hv`zW*T55=yE&ymR%EifPf&HCAW{C=^0>R+c!$xd<6k_b3zaF zOk807X2xer%6thDW$|#_dR;}v<~JJ!F~K6B5fjjf&xN+Jlgu5*UJtAb5|Op z5aO#GAB>j-A8!-LIf&e}d-HsFSz|NNp}2_=eY|6{q0sZjpX~$iCw}MP@8q?k?^j2< z^As7UyfBr9M~}|nl9Q8toIKHmwpD$J@46yoe{TxNEz$6pTDCr^Rm}&B#B`Bo+;vsG z4x~X)YoVU%hYkfW=Oe;OPOJLPy{lJ3SHX&rOMyPX_lGDCyrZs7EvuR~4s*L0H(xw% z3E`I5z?ag4F=@VIOc;C)vkI%=HT^vFk2aiz0d#G88juJS_eP2oX!Rk>t|sXCN%5U! zVb*|R>pwn_*n`7sy;p52G2%4a1!uxpu`4SpSzJ$&zh7WrDs!6DG+>rzI+h1s27ni+ zo-C&VSxRb7)m2xE7MM4@gYCve1}3?PR4N$+&MxLqmIj0AMq)ABB#-R!19C0Etnm!y zgAH5lVU~anBA-5Tii|o0q}H9q8kk3afR+6=un4(0)dY$xSv~z&M@MJM@-q=pqp2Hm zHs@sz3y{7r@;0}YK2B%wh7&^rTFS4t=4!dz9FV}%YHcg8+a!b=PA)CVaHA{x%X#M6 z0U<@pr5}p$cydj~>M+sbbc*3zF(tu?hF@K1GJ%ffzs|6g;gyn^zX{2|Mk7kN>1k(*e{m^wJ*$HN$CL2H3NbF}|h#XrWzMEB~*?>vh4xf{#{5#KOsZaTw4P zIp0Sna{+!uV6g&t-@ktk6WU)k741Y!oqhvomwG5*x$9)ox8U(;>J5zW<8#%ElRnFR zy_#zB#xl#De#r?j`{J|C_sOj5Q){~ED2>2z zFKXugP)xcZmCgh-*V)fMl(!Oq_C|!c_q@xx_UXX}wBje@P?6-8RNbOE0~hD~y5gr-D+TfVwZ+-~lPFY_kvlf<1Z-p85?4K5}i3<>&(5u|V`5J8vUbjD$FODL5orYO= zK4|XJRIRsqqw>4*}=kR1<`32T4 zrv~73-E^s|?}K~Jq8V>6y1`G2bFkD?lZFARY8(;S!+?w}(Yl$m#KK>9wum!NJ;F|- z`58#)S8b2ULf*2ETt2BWp{4aYoK6cgfp(zj4SB$p0sRwz$K2Km16Xo?!R4LeikTkd z8!J!v&Y__piw~qzJ5(-t^ndv3-dEzJ{h1s640HFsBdp@EEp`W zS*oFJU!1EJO_k7c7AB)s7G2qWBtpWGFF77|Wg-Ubar--ucZrMR`yQGqT#q8M0hq>L zzU=xfSfTX;`X1kB@J{epWG3*hN$PrP%X4Y9L6v(bLS@tNUX@(=QV>X3j6Vy&@J)9g zFp@A>qNlA&r~LYIspoxGTqS8pK42Sc(?-NR;!Fwf18d8%W(qf^I)6p+zd;!X?~z*5 z3^`d4B79nnR2>>-dgso2x~^B1PN9*8%ngEI2ls9~yL%{5p}k9I28R@z+!-U}L5>&y zTo);6KAWbukY4Q0=H8cKGZ4J}yyDgC?4HyK&iT{Vg5{}ZXX^MTDLpQ zk07`w9NHWse|i+cV?dnho=N!3^c+qGI;?3%2-`zdi&n`H6rq6Y^;d#CQE)fMKLpah zcJoz9NoUQ{vF@uJ2o(f$43c*$Sq8Dhn)xqaCaSt!%Qt1!`*s$cg;lEqVB_9t`8&3!`b#IeyO{p}J74%$Kk$>4kLKRnbYm;_~gtoY0subnq z0GP1i6B71{#S~x&w!m~k>??2zzh$o#V+i);6Z@nC$gRMj&VO50`m^^}G~D1m0a#ER z*YZO7G#Wn&K9sJ=o3ligbAW?lvuUTUsV*bkJrXKFlR70Oa@h zk(U&rT1@WJ*+p3jX1rfI>trsgQDT`*my_dn!1a8fGN{%0gk>^eF;{(eYbFHtG$O*m z&J3VK@a!_{K^ZBj0CIElxpGZi64McoQ+DzViR4bh#LI1XBVgWLES9!-EFqOEE;czk zdjx?%Xa=)pvJkB#2DQbP3;)FqHCPEJEMo@HkPdw*VBPBc`R`MEf#elwT}3H%OVkUP zNh+LT*M={XZ5ex<+mf|TH#RnQ%rc2nbC#hicW4<2(Rdr)c&6HFDRy8be;Qi~)X(4O$eu33HTQ z+IYU+olHPX9JWhvawlJzJn@6pC2Vgi_~Mz3K9U-ssAFp z*98x>yI)_h%(l>spp}PNPz1!dBo2Eo{mv&BGHz>=!1p|01ERo?*@hDbY>eyqo}6c% zYVSZYjW)F5+}~=a@ryRl#kRV5ab(ihORkLvbo`W+l@9}r-0G*1IEp!7OJmn}fHj?P z6xal7@7c3wpIvO~ea-%0cJ^#@#oAgnWP6Me5#>39tJ9D5Uz=XxL>uL|uY1k2T;ckr zBT}Lbq(mgeViI{wk@7oVMN1lyrU*op`r5&JSXed^_<1c&t+B=LFGoj5>j4vv)r9X{ z0CRcYn0>%|RkQTC?ZW$-64bOfOLV2h8q=~2{)J7vpfBx*PsoQUtoUaZTOS{`ysM>J zz%KC+ckPVA$o>~K97e-Ke1T1U4?YMFS#HpV|fxYx}?<8#Ii0i2G!CSq#a<8 zKF(Wxp&X4|samS*U&m)02jAX_AF*cw;_leQ*KBam@Z~2boyjcPBhUx*;(dQZAjc4y zHyvkiWd$9(Q6E(h*Bqj+hyqPea7fWM$sj0nrX`hey{vRf>EUvQo#c_lTTEF(0&BIb z$etY*W;!-lg_8aaIU(f6_~>V^g>Hz*HYgkshD$#Kfj+X$CP8uwq2NdRLx3IDw=x2t zaIdqPx9(pC!v1z1`ExE!7hXs?Z)J5oBU5wit0i%1FuRpdS9c0_(%L_2C6ms%%kX7_ z;|QlYPp_BhbYB3jJoT1eKa+;tQ3U!(3-2h0gkJhM$%C}6`Nv=_gV&}xBrw90>bp<} zt~#vCHxZG5;(kqEOaF151+TT7-=y>^$MYu4yw=`p6E*!kX9D!wP)!5e(*>FH1Y5VZAC!}6pCvlSLg@W6(BXk=2Y*8)?S-sUa_4pdQ4_%PNZ zxS4Y4$`xlQG=SDO7BOHk(-CX8x*1bg*!*)(8xq;Dql|Hqx4>N|dx7;IAKwQFepLDU cD=RJ}nqZiGYoGBbusxtNCKgci$!ib(7pyc$ng9R* diff --git a/icons/mob/onmob/onmob_goggle_mod.dmi b/icons/mob/onmob/onmob_goggle_mod.dmi new file mode 100644 index 0000000000000000000000000000000000000000..38ab3621045baa659f7dd9d527e5c57825758c7e GIT binary patch literal 4114 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 KMDbyYfb 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 V9hFQ?ZQc9Y)yuYKL=(@r{{YOU@Z|si delta 20634 zcmY&<2|QG7*!Qsu8A7%gOGWmy*o~5egu;+LM3#_!8AlN!TiHsMsEF+QIwbpAvM)oH zv2PQGF*D!sJkR@m?>E2SIL?{-zUIt*{qJk}U)SjkVxZ&uS zkUN}PY_&xUubsRlqpB<>2zq<~{`XPc;btSs@5~&--185fGokIImk!Bv zMaVB-^U$@bA(YnC28wGv&EmOv^uXYi^FQ!%bxYFDOY9unf*)2<03Uz=ACauUf3pg*nwyRgSFeJ<|DAT0ot^7sT8ZONA&;%b1Im&Jx24Izt;SIk z?%eKbOt5%%PR`EXAw6Nm2~va=4uv(c$q$I1GqbSZYr_9w3?gh)bEyW^WMqJCJ*Xe6kl;;2;m$GgyuD-k`jRnuLi0^A z8VKAz8^c(P_G%=(Ek@+51p-+cd%3@JG+{rX_eQOz&dQCEeM4AAz|5&rryh-!*pxgh zl)+p)f8P8)qED4>ir1|{u%V%0om`tvL}x1bGBci)V8LMrM&GDOo0O=9y?m+gJEf7h z69*d3wDQ>l7Zt&$f$H7{Y@WMYt4(74bCX&+bbnbKJbwM6NDEc6rd`KSR~zLYI>#T= z)+^Ld0bG?o_asVSsn-`IR6i)+&Lin`=6lnaC}1Y%NMi+t#$M;G@Yj8;II!EUn2$V6 zE7%xR#QJkCYuKD2{KcbUnwAABqy3r8^jn4l_iJ*#0w-b2sA5y9tx*Asw@-?sIXKQ`T@-lx$0 zK)Yr@u0iT)+SMM)u~zAXiPOn9_KR!VfLr+}4X*7RrJlNqC%LG-6qOLgm;9{L9z#Yi z$12KC2Y?3^qi`jkZ}`=M;>2ES2$6S=2jcD=>j}QOzmBF;-bM0$QwMKt(a#>43utNB z0Hdunrt&UlhxK-=o^VqGW2_Bw(jjhhdcD{tLy>c zVb*sISg)H&EL&JvEgs96N!($le5IjrC!eeWZYM-Bn7mYT8*@nfl4!33+d2iC2tRe-ZXa&NW9Wqf%`*lT~+q$&+A3uJ)P0z`0hmd~X{m-~K z1WBGBJoZ>vTH=`$77}7%XAfKJ=}zoNh>CXRZLKe+SQ#6R|IF5iE}@ruSFJ|t2`YBZ zmX{LpQ(LQFyr8tRw-;1Y}f5HRnX4MGTfi8 zZAm}+!6!*5v%i+Jz3R=pgb;+7sz`NfcX?y8+87dJQ=<|x@olaW7H&n~7bFJ*&x}2too*}Rr~yR_xOUx z3W_o_Go|0Wd84ndA98#ggsjf46`zwj6k^(#s8qjqFV@2fiNEM9X;RWWcBm4#fAyyP za5lx%3|&F-mWR#csL1nWw$%L36l@kPX12jrK{VHWbZLR0CC{_Txg|UxP_$)3%$xPq zLVG(D4jz1i7s@{&<1-IGq$?KHsfY4=E&sg2gJ^m`Y)w+xjLe8i4+v&`<3-~Z^R6ii zu^*Ip8W;=gr0a3}W_o(e;qxO>k6Xn6xFwkRwUuBbw|pZaBn0@Y6uxl9E!|w+VvHXTLuD>Lr%}p!u>F`o~`pv(wHQRofR#te$ zplzuFeGjfr-`rrC0Jmb700W*?({r7?Sx`J>hH1!m*-_%8EZUr| _98@$2bQ9(jJ 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 literal 9223 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 Xx4!X9M@FUyM_e*CH!3@K`{(}w?5HkT diff --git a/icons/mob/species/unathi/onmob_goggle_mod_unathi.dmi b/icons/mob/species/unathi/onmob_goggle_mod_unathi.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d13409990dc0d94f20218d495e74414857fec9b2 GIT binary patch literal 1027 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 P1bkq(3^dDcJb3nRcxN5@ literal 12508 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�S6jsPWTF~CX~<367~`NDpUG!X>aE2g`d{%EBtlHE6W2I^7e@9XPR z`EI8JA%$0xQATDWpJbx{o zLSHLJLxYO*vGV+NCH8-En>0ioQGpQHiCwpOi<6uiSCaliTC+vnX zE6pLsCnP+tf{b&SUzE*1kdt(yOC>t*9hG4G1c*pIu%3-(HLIqNgHD-#AjZx7oZ zo}C1T{>4LqTaWx*ywg9~#lO@x|Be3g(RX$(Tv=W9OPdgyp=4%+V5Fs_9vh~}_5(bs z-$JrwF_1wG9Ml>?MM5G4^+k>2kbxaNq5d)!S~pH(=dBG?Fd5*55XI4i-~+GEMC(YXyKr!D4EOg}iaxdu4&DO_nsevRubv$ZY;`1nVp&_u zz##zsi|hII4JY7(NyvJd!G+wh1V(yx$)BLfOAiptL^!%B-R2K7Zem4 zDXOeIKJpjAI#3f;1(Y&CQaHz!S5|hZC^3#)RG1y}BEGJ!F3RW{hnPdcm9y=;7v|q6 zPxa-eI;11s@#tjmznX))0q%55k%HvYsxlcl z0+6inj9r=E{`bU!|BHE%w!39^%a<$V#@;cnT#>}He>?L2_R?b(HKD(s9dSzfQdv@7 zLPA1@S^v&%fLXtisc0qBT~|*W5_g*4(7>M2QJ)c0SB-CfBY+<%wbfV&FU;WCAx{^k zpX;QkX8GQNyungb?LW#jrl%*Hp#!GTutnU(tjo2`Z93IZQSscmy5)kM>72m2I`9eL z-W zXDo4bygFUkJA1JwgCBk?o)M=!tWyJLX{r<^y>>#a-&fq&-Db_?#u1kvSxpnyhV6e; zl#$nlu_L9qOim(|Jc@@zaZmgGXsu!vdcmz2<sa^B-qtXFI(27UUI0mifuSCSgE&53tWfWa~a; zX0uCvG&e559gos&+59ep@GxPT(#j$z*1#?4cfHGn5^Hp0Sj{r$3z)$(&2yMq+m#7~ z8q*oZ;g}<{@ve-P5G;Y>K}X2e16g@0NdZ)mVA#<_ zuVkV<7y%@mSslPRR&JB6$#wi*dz$p zto_%#))(BNbHa^&;xVg;GKTyxqZhI$>PdsXP|LYa}vkI0k-CVR&Al}!)z%6Vl z!tRY&xmnp_lT2aQ8X89Tp^2$G6pXOaP=U*;km0Q1GE5P;Xu~4#Zc}4=i6I)*ZciO5 zFAOVnVhk!Qn*_{4Mw8!)^~nF;msY7D=g@5B-MkT%)BoX&yu-(-si{vL^T^k}8etc% z-%NPoEl_d?p4`TS^Aw%@Ht4RzAS#XcHD#ab0cnJ!ab|oHGY&MM zv3D2X=76T$EaS!X3sfc*17(2AMvDgJR0NMIh)d=#P9m50MedzObx^Zb!;wRQS_A$^ zGO@tF%@n>C1=jpHAZa)k`PFAL^#i6B@cA^jT{)4Pd>K5h&p*Wmq2^@-9qP{IiC0dP z`BNf`@Z1s08OEu2d@t}is;Q}^yy7E?ZezrV5-t?}x|~Q@(cX?Lhhwyyk$jan*@`K-jSD9>_6n zaq-W3FTCoB6DM59tDFd>P2`>v1MZ#FN^)(_1ht^%V>!8*vx7|O*ApHFoRfxyQ#-|Bf)VrBR#uMqKtcnb8|E4`JS86_FE#cMjgI^GJ(|imHLp z10VxAH(!ZC@Ob>-h(rBFFNI4XVrOU(PBK&2z_FLLtm&@Y1L&kq4M zb85?RY-D5+*j8e-5D*SPS=83mrIX^AbwMtVZl6oqS;G|yGnVvJgE#Yt!YT^^YZJ*s zLBy36`{kUQA=FPz+X-=DI)FhZarsT{=+R_t>x^n^YY};=xIl=-Ko{bwh(+M{ZDrT* zG^ih_5>4r6&4pON7mg9%gFq*7KW70_!we4+)NkgJFCcH%rxRQiByfx~C1Mm)g*#u6k^Pcvq z6DHy6O%Pk-=uIoF$=jDa$9RsvmpYasKaDb!w}iA>R4$U#MoBkfo@;iA3=9u103Qiq zzL@wChonlO7|lMOi9nLw6>E?N|4}2X_Kh1iHjtJc7(GPqwB{|m88Z~yxJv(BPGR41 zOi#;bK;EpXC;lM`VgVW=X&-ObdzpYJAPOdtH zZQQ(d`qD@_lw5`)N^2sx^r28B?y8jlm^s%g$fBlDkDLP?<>0_O22Svjx}7Z65}7CU zRnG&yn1WeK*Zy(iV%U6*%T?(XwVhB_qfN(+ml#bgK!LBJkBzU^CCgYIoq(fpEur-e zX#dn9w6=WQ@pse{`j)F@mhSHEA~4ME>?;5b^GW4tKpJ=D>eW0Mp+>z|*>-+YRDpB2 zbNC{&!mBmmu>HB0B1VDX(Ym?T)PD23Q*3OT{eDo?oMAAiit~SA`+Ko_{^pxEZ;TPf zS*qd?8vr0Fa<&EU-(TBDejf~Ek5PVb`fBiY2gVMU!9Rdh_!^Rl#M+p_Kk}ii%ncT zX$pms9lWMbdz-NnXs{}UDdhp@Vw&ZF#Yhz$JfmsOvY4aHXYp2v=7OwfPl+9E#-M!V zQ2>oHnkK1riUl>y)>3@s5%z)8aYN8PYFoNeM3UzC?;2<6coXXzE2ACZCr_ktBy4az zlZOsAz^^yVCeZ37-}{<*u;5;5J{;C2x;-FPq~1hPR$#C0tOq{nDeo%59!?c;W@cvZknS}TT76m z(!;j;^=gADi+Qw9ZE3~K+MbN7>xpa@Dyin4N7baIm&>7)~(B6kD@?L~CA1vtj+!-PfGk=!O(j zqtTj{K&wH)duk%)w2WWt^58_ZN1E3)mFF6cZLmSlcF7w4jaN`T=yvFtOGABqU)8j$0>K4t z4*@|RtN_s`aqYof-W4dFL8qXZFeGa;Z`)*t)M4)V%ZU?3WD3;Soq_!5*-NL9&*HAM zZ6L!KlI}l0Z{NwQW!}J8BvQA_VI9?pqu|aaVY6BVz>Q7>s=GU|iU1xba4C}GPikDI z@0D;5TwTv{c4($hX!r8&V?t(PtZO6f(6Ve1tTf$@(@{Q+;8dxAS-1GD{cB7-t6PH={y$DJ&B-s!$2U90& zjTt@@(nRE3oF}eMMT6Pg|NeeLg9jevUtRq9BPl{Bx4-^r*KC`^EOuk%=^wzYMn*Bmnd8F-gL{f zoW_LrsgZ$^A+~qSf672z<2a(|pYrgyUh>C=2j@s|u+QUeOwAx{7$(_jVRL>4prpUS4#o+A3Jb?Xx zZ6}%-Akb=KVh}e^&s)SxfA#IK$$Py^#O;zLLz1Rn92if zFhDC?p=YCi+(4k$*Y44fAMn70$^cU^iB6LBL88%G%=v5e1pzd;U&5bN-1Ail*;J+T zFoJOLN7)@luFW5rHJ=th zy@vqM9v&FT5!H+R8u-Ns$HuL(9x*hPy%`X9UInqKR1HxY0t4OShZ-7E<#377DT+EF z^A*zZ;M2T$Ng?EPZ>*qNNH%Q8IypJH&6`oi`P@#z^DNPXQN&s$l2uX#0|WP!C5p6T zV9XkcQ$D`#ZbNu{Rvq?Y;ObbvC2ZTW5!g0q`Pj&gkON2?!3&2$ z5k-H6?Z4d%^#Iz8pH{~jQUMmz^^@R#4vdNm9%#u<`skDKu4kS|&WC{3g-H>Pl>kQ2 zT5OHUQFV=CONgYWD?p5LEK6~I_OgBHbrrrWJar~8FH=@pU{J6b|iAkJqSz$#*-(K8T zrRe)mK#fu>d2`*g^5gDkAtI&~40yKNo(ZE8jrGET+5vM2P&K60w{h zkWufP^r_{qtY=)HJt+c{3!uv!HUDlRg3bzf8(_MVcl!Y_mI8v@G}bA*e(%Zu0m|F_ A&j0`b diff --git a/icons/mob/species/vox/onmob_goggle_mod_vox.dmi b/icons/mob/species/vox/onmob_goggle_mod_vox.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8aad922d0a9e4b76dc4938d55115170a2909b1a3 GIT binary patch literal 1122 zcmeAS@N?(olHy`uVBq!ia0vp^2Y`412OE%#(nyX4QtPThB1&9Ri<65o3raHc^B5Q^ z<}B^o$aTm-qUHG$&Au|xjaN;(w|KOF6ZKN5pY1SfipsVZm#r;cEE197fA{-c(VW-b zmltM9?+fTSX3a6@8~eGi#gp0&Y<%J~S+caMbw-L3N6O~yMl;w~-ka1d^7~}G@wq9S zf=ue?+7#5g1T^kl@CuVO|JQiu+53=_GnKU83uu(dcP-KMsgp2!tLmFLsqD7p_MZJ! zmao=1T{Zi|nQx!H$sp&H2?GOjzNd?0NX4ADcQ@wU3Xo`fIC({mPu!+L-HBGE-evtW ziw$QQ&zqYwSL<5obdNlfo>9j&Dz|_&>OG=gyro=JoM<)4xA2v8hvUXxzJZ?^k<&waLx?*Pa$t z{{Q&#qPxLNA3j?Z>2+m)5y(s_F0V{~Y8s({Fj|#)v65bHeW3zwfQN)W+7f z_ubd~mFzd-9P!xwronJIXZAEoa!FV#lfkv|0_}3i6q}c5-`jZ&zM6 z`TONT)N4oK=G)um&cDp^=xpMK+lLeR|HkVdyb%5=NPybXIq$}2asWjGp z=8q|}mTCH42Dy}EM#VSu%NyP5oa?@gbh z7kt$+nd|p|Mi1zc#0cSM0#E z&dQ#RH)kIgVRV-KqkF+H{aE}Vo2ql&FE8-C%eVfruKT*c@gMS_NRv(A-+C?d_v7E* ze}BDQSO4W(&XhYU`Tnmb@0<3hspiNV21B5fHs>$%| zasPC7gFx9R%U`>%zHG6yo`1vl=mr0ltbg{{IPM+4fL<+o0ok#* aCH{^V-(-fX9Y=wM27{-opUXO@geCxF%D}Jy literal 0 HcmV?d00001 diff --git a/icons/obj/clothing/obj_accessories.dmi b/icons/obj/clothing/obj_accessories.dmi index b9055cd05f4e1940ee64f9b0be5fe7907d7c896a..f9b5043c5cede590c93856c7e0a6cff79b70fedb 100644 GIT binary patch delta 8695 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 HGWPp#`nr#P diff --git a/icons/obj/clothing/obj_head.dmi b/icons/obj/clothing/obj_head.dmi index fe7541305c4e96b9ec3f0b71a342a0f5558c0c42..22964cf7c9af421e5ebf346c6b6140b5a59f91a6 100644 GIT binary patch delta 5436 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 delta 5202 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 Date: Fri, 15 Mar 2024 13:20:09 +0300 Subject: [PATCH 013/311] [MIRROR] Make desk lamps start turned off --- code/game/objects/items/devices/flashlight.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 59ff8193c7e27..1542535c71b35 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -246,8 +246,6 @@ flashlight_range = 5 light_wedge = LIGHT_OMNI - on = 1 - // green-shaded desk lamp /obj/item/device/flashlight/lamp/green desc = "A classic green-shaded desk lamp." From 0391502a25996359ae244d7136ced983ce0f4f2e Mon Sep 17 00:00:00 2001 From: SierraKomodo <11140088+SierraKomodo@users.noreply.github.com> Date: Sun, 17 Mar 2024 16:44:39 +0300 Subject: [PATCH 014/311] [MIRROR] Fix barsigns having a null sprite option --- code/game/objects/structures/barsign.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index 6b9eee32e876f..aa9cb0f1c21cc 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -8,6 +8,7 @@ /obj/structure/sign/double/barsign/proc/get_valid_states(initial=1) . = icon_states(icon) + . -= "" . -= "on" . -= "narsiebistro" . -= "empty" From 476d0d8699af037ea9e7374fc092a9ea524c5c3e Mon Sep 17 00:00:00 2001 From: SierraKomodo <11140088+SierraKomodo@users.noreply.github.com> Date: Sun, 17 Mar 2024 17:14:36 +0300 Subject: [PATCH 015/311] [MIRROR] Barsigns now start always showing closed --- code/game/objects/structures/barsign.dm | 26 +++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index 6b9eee32e876f..a8da93f7f73da 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -1,11 +1,11 @@ /obj/structure/sign/double/barsign desc = "A jumbo-sized LED sign. This one seems to be showing its age." icon = 'icons/obj/structures/barsigns.dmi' - icon_state = "on" + icon_state = "Closed" appearance_flags = DEFAULT_APPEARANCE_FLAGS anchored = TRUE - var/cult = 0 +<<<<<<< ours /obj/structure/sign/double/barsign/proc/get_valid_states(initial=1) . = icon_states(icon) . -= "on" @@ -13,6 +13,8 @@ . -= "empty" if(initial) . -= "Off" +======= +>>>>>>> theirs /obj/structure/sign/double/barsign/examine(mob/user) . = ..() @@ -56,23 +58,15 @@ else to_chat(user, "It says '[icon_state]'") -/obj/structure/sign/double/barsign/New() - ..() - icon_state = pick(get_valid_states()) - /obj/structure/sign/double/barsign/use_tool(obj/item/tool, mob/user, list/click_params) - // ID Card - Change barsign var/obj/item/card/id/id = tool.GetIdCard() if (istype(id)) var/id_name = GET_ID_NAME(id, tool) if (!check_access(id)) USE_FEEDBACK_ID_CARD_DENIED(src, id_name) return TRUE - if (cult) - USE_FEEDBACK_FAILURE("\The [src]'s display can't be changed.") - return TRUE - var/input = input(user, "What would you like to change the barsign to?") as null|anything in get_valid_states(FALSE) + var/input = input(user, "What would you like to change the barsign to?") as null|anything in get_valid_states() if (!input || input == icon_state || !user.use_sanity_check(src, tool)) return TRUE icon_state = input @@ -81,5 +75,13 @@ SPAN_NOTICE("You update \the [src]'s display with [id_name].") ) return TRUE - return ..() + + +/obj/structure/sign/double/barsign/proc/get_valid_states() + return icon_states(icon) - list( + "", + "empty", + "narsiebistro", + "on" + ) From 85574716a6b2d2959b1bc970e3f14a0823067fdc Mon Sep 17 00:00:00 2001 From: SierraKomodo <11140088+SierraKomodo@users.noreply.github.com> Date: Sun, 17 Mar 2024 17:14:42 +0300 Subject: [PATCH 016/311] [MIRROR] Fix light sprites not matching light color --- code/modules/power/lighting.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index cec531f4f1b18..cfd3cb2a40b9b 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -299,7 +299,7 @@ if(istype(lightbulb, /obj/item/light)) if (on) AddOverlays(emissive_appearance(icon, _state)) - AddOverlays(overlay_image(icon, _state, color)) + AddOverlays(overlay_image(icon, _state, lightbulb.color)) if(on) From 98b3993017404d17beb95b19f5d24a9009b479d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Mar 2024 17:21:42 +0000 Subject: [PATCH 017/311] Bump actions/cache from 4.0.1 to 4.0.2 Bumps [actions/cache](https://github.com/actions/cache) from 4.0.1 to 4.0.2. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/ab5e6d0c87105b4c9c2047343972218f562e4319...0c45773b623bea8c8e75f6c82b208c3cf94ea4f9) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/generate_documentation.yml | 2 +- .github/workflows/test.yml | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/generate_documentation.yml b/.github/workflows/generate_documentation.yml index 633cec026317b..be88072eb271c 100644 --- a/.github/workflows/generate_documentation.yml +++ b/.github/workflows/generate_documentation.yml @@ -39,7 +39,7 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Setup Cache - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 with: path: ~/spaceman_dmm/${{ env.SPACEMAN_DMM_VERSION }} key: ${{ runner.os }}-spacemandmm-${{ env.SPACEMAN_DMM_VERSION }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 57a4196cb18fa..6ec70bbab834b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,7 +34,7 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Setup Cache - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 with: path: ~/spaceman_dmm/${{ env.SPACEMAN_DMM_VERSION }} key: ${{ runner.os }}-spacemandmm-${{ env.SPACEMAN_DMM_VERSION }} @@ -62,7 +62,7 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Setup Cache - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 with: path: ~/BYOND-${{ env.BYOND_MAJOR }}.${{ env.BYOND_MINOR }} key: ${{ runner.os }}-byond-${{ env.BYOND_MAJOR }}-${{ env.BYOND_MINOR }} @@ -92,14 +92,14 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Setup Cache - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 with: path: ~/BYOND-${{ env.BYOND_MAJOR }}.${{ env.BYOND_MINOR }} key: ${{ runner.os }}-byond-${{ env.BYOND_MAJOR }}-${{ env.BYOND_MINOR }} - name: Install rust_g dependencies run: ./scripts/install-rust_g-dependencies.sh - name: Setup rust_g cache - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 with: path: ~/.byond/bin/librust_g.so key: "rust_g-${{ env.RUST_G_REPO }}-${{ env.RUST_G_VERSION }}" @@ -130,14 +130,14 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Setup Cache - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 with: path: ~/BYOND-${{ env.BYOND_MAJOR }}.${{ env.BYOND_MINOR }} key: ${{ runner.os }}-byond-${{ env.BYOND_MAJOR }}-${{ env.BYOND_MINOR }} - name: Install rust_g dependencies run: ./scripts/install-rust_g-dependencies.sh - name: Setup rust_g cache - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 with: path: ~/.byond/bin/librust_g.so key: "rust_g-${{ env.RUST_G_REPO }}-${{ env.RUST_G_VERSION }}" @@ -168,14 +168,14 @@ jobs: steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: Setup Cache - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 with: path: ~/BYOND-${{ env.BYOND_MAJOR }}.${{ env.BYOND_MINOR }} key: ${{ runner.os }}-byond-${{ env.BYOND_MAJOR }}-${{ env.BYOND_MINOR }} - name: Install rust_g dependencies run: ./scripts/install-rust_g-dependencies.sh - name: Setup rust_g cache - uses: actions/cache@ab5e6d0c87105b4c9c2047343972218f562e4319 + uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 with: path: ~/.byond/bin/librust_g.so key: "rust_g-${{ env.RUST_G_REPO }}-${{ env.RUST_G_VERSION }}" From 9f4c858fc4b01df882bb3c5d1c10b7551d833459 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Mar 2024 17:53:00 +0000 Subject: [PATCH 018/311] Bump actions/setup-python from 5.0.0 to 5.1.0 Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.0.0 to 5.1.0. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/0a5c61591373683505ea898e09a3ea4f39ef2b9c...82c7e631bb3cdc910f68e0081d67478d79c6982d) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/changelog_generation.yml | 2 +- .github/workflows/check_changelog.yml | 2 +- .github/workflows/make_changelogs.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/changelog_generation.yml b/.github/workflows/changelog_generation.yml index 992e18f08e7c0..3ab307e85a978 100644 --- a/.github/workflows/changelog_generation.yml +++ b/.github/workflows/changelog_generation.yml @@ -22,7 +22,7 @@ jobs: ref: dev-sierra token: ${{ secrets.BOT_TOKEN }} - name: Python setup - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c + uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d with: python-version: '3.x' - name: Install depends diff --git a/.github/workflows/check_changelog.yml b/.github/workflows/check_changelog.yml index 4bb5b04d6d0b4..dcf2227a109d2 100644 --- a/.github/workflows/check_changelog.yml +++ b/.github/workflows/check_changelog.yml @@ -19,7 +19,7 @@ jobs: wget https://raw.githubusercontent.com/SierraBay/SierraBay12/dev-sierra/tools/changelog/sierra_check_changelog.py wget https://raw.githubusercontent.com/SierraBay/SierraBay12/dev-sierra/tools/changelog/tags.yml - name: Установка Python - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c + uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d with: python-version: '3.x' - name: Установка зависимостей diff --git a/.github/workflows/make_changelogs.yml b/.github/workflows/make_changelogs.yml index ed085bb746494..2ba7bb32757ba 100644 --- a/.github/workflows/make_changelogs.yml +++ b/.github/workflows/make_changelogs.yml @@ -20,7 +20,7 @@ jobs: with: fetch-depth: 25 - name: Python setup - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c + uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d with: python-version: '3.x' - name: Install depends From 605e6d3991c80c30eae744d89d872e8ba45afce8 Mon Sep 17 00:00:00 2001 From: emmanuelbassil <6874235+emmanuelbassil@users.noreply.github.com> Date: Thu, 28 Mar 2024 20:02:38 +0300 Subject: [PATCH 019/311] [MIRROR] Fixes #34548 --- .../singularity/particle_accelerator/particle_accelerator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 72d4e4e75ab69..849526aa503bf 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -62,7 +62,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin icon_state = "none" anchored = FALSE density = TRUE - obj_flags = OBJ_FLAG_ROTATABLE + obj_flags = OBJ_FLAG_ROTATABLE | OBJ_FLAG_ANCHORABLE var/obj/machinery/particle_accelerator/control_box/master = null var/const/CONSTRUCT_STATE_UNANCHORED = 0 From bdeb1a6be119b8fec1ed6b6f2ba774685041f93a Mon Sep 17 00:00:00 2001 From: Nyvrem <10331933+Nyvrem@users.noreply.github.com> Date: Fri, 29 Mar 2024 12:52:34 +0300 Subject: [PATCH 020/311] [MIRROR] Makes IPCs unable to pick Chief Steward --- maps/torch/job/torch_jobs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/torch/job/torch_jobs.dm b/maps/torch/job/torch_jobs.dm index 9688d6b42d404..94d10f7f5e1ff 100644 --- a/maps/torch/job/torch_jobs.dm +++ b/maps/torch/job/torch_jobs.dm @@ -14,7 +14,7 @@ /datum/species/unathi = list(HUMAN_ONLY_JOBS, /datum/job/liaison, /datum/job/warden), //Other jobs unavailable via branch restrictions, /datum/species/unathi/yeosa = list(HUMAN_ONLY_JOBS, /datum/job/liaison, /datum/job/warden), /datum/species/skrell = list(HUMAN_ONLY_JOBS), - /datum/species/machine = list(HUMAN_ONLY_JOBS, /datum/job/liaison, /datum/job/psychiatrist, /datum/job/bridgeofficer, /datum/job/senior_engineer, /datum/job/warden, /datum/job/qm, /datum/job/senior_scientist), + /datum/species/machine = list(HUMAN_ONLY_JOBS, /datum/job/liaison, /datum/job/psychiatrist, /datum/job/bridgeofficer, /datum/job/senior_engineer, /datum/job/warden, /datum/job/qm, /datum/job/senior_scientist, /datum/job/chief_steward), /datum/species/diona = list(HUMAN_ONLY_JOBS, /datum/job/officer, /datum/job/liaison, /datum/job/warden, /datum/job/doctor, /datum/job/medical_trainee), //Other jobs unavailable via branch restrictions, ) #undef HUMAN_ONLY_JOBS From 9a059b41acf90f03da06a9aa83530b2fe3ba0e1b Mon Sep 17 00:00:00 2001 From: emmanuelbassil <6874235+emmanuelbassil@users.noreply.github.com> Date: Sun, 31 Mar 2024 18:02:37 +0300 Subject: [PATCH 021/311] [MIRROR] item attackby to use_tool --- code/__defines/flags.dm | 2 +- code/_onclick/item_attack.dm | 23 +--- code/game/antagonist/outsider/raider.dm | 4 +- code/game/atoms_movable.dm | 5 +- .../_machines_base/machinery_components.dm | 4 +- .../stock_parts/power/battery.dm | 11 +- .../stock_parts/power/terminal.dm | 3 +- code/game/machinery/camera/camera_assembly.dm | 35 +++--- code/game/machinery/doors/airlock.dm | 2 +- code/game/machinery/doors/braces.dm | 12 +- code/game/machinery/kitchen/cookers.dm | 6 +- code/game/machinery/newscaster.dm | 19 +-- code/game/machinery/pipe/construction.dm | 41 +++---- code/game/machinery/pipe/pipelayer.dm | 2 +- code/game/machinery/wall_frames.dm | 6 +- code/game/objects/auras/aura.dm | 2 +- code/game/objects/items.dm | 19 +-- code/game/objects/items/apc_frame.dm | 6 - code/game/objects/items/buttons.dm | 23 ++-- code/game/objects/items/contraband.dm | 2 +- code/game/objects/items/devices/boombox.dm | 2 +- code/game/objects/items/devices/inducer.dm | 23 ++-- code/game/objects/items/devices/tvcamera.dm | 26 +++-- code/game/objects/items/flora.dm | 8 +- code/game/objects/items/glassjar.dm | 11 +- code/game/objects/items/latexballoon.dm | 5 +- code/game/objects/items/paintkit.dm | 13 ++- code/game/objects/items/rescuebag.dm | 26 +++-- code/game/objects/items/robot/robot_frame.dm | 34 +++--- code/game/objects/items/robot/robot_parts.dm | 37 +++--- code/game/objects/items/toys.dm | 36 +++--- code/game/objects/items/weapons/RCD.dm | 14 +-- code/game/objects/items/weapons/RPD.dm | 15 +-- .../objects/items/weapons/candle/candle.dm | 4 +- code/game/objects/items/weapons/cane.dm | 24 +++- code/game/objects/items/weapons/cards_ids.dm | 17 +-- .../circuitboards/computer/research.dm | 5 +- code/game/objects/items/weapons/defib.dm | 29 +++-- code/game/objects/items/weapons/ecigs.dm | 12 +- .../objects/items/weapons/electric_welder.dm | 12 +- code/game/objects/items/weapons/explosives.dm | 10 +- .../objects/items/weapons/flamethrower.dm | 29 ++--- .../items/weapons/grenades/chem_grenade.dm | 27 +++-- .../items/weapons/grenades/explosive.dm | 4 +- .../objects/items/weapons/grenades/grenade.dm | 6 +- .../items/weapons/implants/implantcase.dm | 19 ++- .../items/weapons/implants/implanter.dm | 7 +- .../items/weapons/implants/implantpad.dm | 14 ++- .../items/weapons/implants/implants/chem.dm | 8 +- .../weapons/implants/implants/compressed.dm | 2 +- code/game/objects/items/weapons/lighter.dm | 2 +- .../objects/items/weapons/material/ashtray.dm | 15 +-- .../objects/items/weapons/material/coins.dm | 5 +- .../objects/items/weapons/material/shards.dm | 12 +- .../objects/items/weapons/material/stick.dm | 8 +- code/game/objects/items/weapons/policetape.dm | 4 +- code/game/objects/items/weapons/scrubpack.dm | 10 +- .../objects/items/weapons/secrets_disk.dm | 6 +- code/game/objects/items/weapons/shields.dm | 7 +- code/game/objects/items/weapons/soap.dm | 8 +- .../objects/items/weapons/storage/backpack.dm | 4 +- .../objects/items/weapons/storage/bags.dm | 4 +- .../objects/items/weapons/storage/bible.dm | 6 +- .../items/weapons/storage/fancy/matchbox.dm | 11 +- .../objects/items/weapons/storage/internal.dm | 2 +- .../objects/items/weapons/storage/lockbox.dm | 15 ++- .../objects/items/weapons/storage/storage.dm | 16 --- .../items/weapons/storage/wall_mirror.dm | 2 +- code/game/objects/items/weapons/stunbaton.dm | 13 ++- .../game/objects/items/weapons/tanks/tanks.dm | 36 +++--- code/game/objects/items/weapons/tape.dm | 2 +- .../items/weapons/tools/weldingtool.dm | 25 ++-- code/game/objects/items/weapons/trays.dm | 10 +- .../objects/items/weapons/weldbackpack.dm | 2 +- code/game/objects/structures/drain.dm | 4 +- code/game/objects/structures/girders.dm | 4 +- code/game/objects/structures/morgue.dm | 2 +- code/game/objects/structures/signs.dm | 9 +- .../structures/stool_bed_chair_nest/stools.dm | 29 ++--- code/game/objects/structures/watercloset.dm | 2 +- code/modules/assembly/shock_kit.dm | 8 +- code/modules/augment/active/circuit.dm | 9 +- code/modules/augment/active/powerfist.dm | 17 ++- code/modules/butchery/remains.dm | 6 +- code/modules/clothing/_clothing.dm | 23 ++-- code/modules/clothing/gloves/boxing.dm | 8 +- code/modules/clothing/masks/cig_crafting.dm | 24 ++-- code/modules/clothing/masks/smokable.dm | 57 +++++---- code/modules/clothing/rings/material.dm | 6 +- code/modules/clothing/spacesuits/breaches.dm | 30 ++--- .../clothing/spacesuits/rig/modules/combat.dm | 2 +- .../spacesuits/rig/modules/computer.dm | 6 +- .../spacesuits/rig/modules/modules.dm | 31 +++-- .../clothing/spacesuits/rig/rig_attackby.dm | 109 +++++++++--------- code/modules/clothing/spacesuits/void/void.dm | 43 ++++--- .../clothing/under/accessories/_accessory.dm | 5 - .../clothing/under/accessories/badges.dm | 10 +- .../clothing/under/accessories/holster.dm | 8 +- .../clothing/under/accessories/lockets.dm | 16 +-- .../clothing/under/accessories/storage.dm | 5 +- code/modules/crafting/_crafting_holder.dm | 9 +- code/modules/detectivework/tools/rag.dm | 8 +- .../detectivework/tools/sample_kits.dm | 10 +- code/modules/economy/cash.dm | 17 ++- code/modules/games/boardgame.dm | 23 ++-- code/modules/games/cards.dm | 12 +- .../goals/definitions/department_clerical.dm | 8 +- code/modules/holodeck/HolodeckObjects.dm | 20 ++-- code/modules/hydroponics/grown.dm | 27 +++-- code/modules/hydroponics/grown_inedible.dm | 8 +- .../subtypes/manipulation.dm | 41 ++++--- code/modules/library/lib_items.dm | 64 +++++----- code/modules/locks/lock_construct.dm | 10 +- code/modules/materials/materials_ore.dm | 6 +- code/modules/mechs/components/_components.dm | 25 ++-- code/modules/mechs/components/arms.dm | 9 +- code/modules/mechs/components/body.dm | 23 ++-- code/modules/mechs/components/head.dm | 27 +++-- code/modules/mechs/components/legs.dm | 8 +- code/modules/mechs/equipment/combat.dm | 12 +- code/modules/mechs/equipment/medical.dm | 5 +- code/modules/mechs/equipment/utility.dm | 12 +- code/modules/mining/mine_turfs.dm | 6 +- code/modules/mob/grab/grab_object.dm | 5 +- code/modules/mob/inventory.dm | 2 +- .../mob/living/carbon/xenobiological/items.dm | 8 +- .../living/silicon/robot/drone/drone_items.dm | 2 +- .../computers/modular_computer/interaction.dm | 69 ++++++----- .../computers/subtypes/dev_telescreen.dm | 7 +- .../modular_computers/hardware/_hardware.dm | 4 +- .../modular_computers/hardware/ai_slot.dm | 9 +- .../modular_computers/hardware/card_slot.dm | 4 +- .../hardware/nano_printer.dm | 13 ++- .../hardware/scanners/scanner.dm | 2 +- code/modules/multiz/structures.dm | 2 +- code/modules/organs/external/_external.dm | 10 +- code/modules/organs/internal/species/fbp.dm | 6 +- code/modules/organs/internal/stomach.dm | 9 +- code/modules/paperwork/clipboard.dm | 14 ++- code/modules/paperwork/folders.dm | 19 +-- code/modules/paperwork/paper.dm | 39 ++++--- code/modules/paperwork/paper_bundle.dm | 41 ++++--- code/modules/paperwork/paper_sticky.dm | 13 +-- code/modules/paperwork/paperbin.dm | 14 ++- code/modules/paperwork/papershredder.dm | 5 +- code/modules/paperwork/photography.dm | 7 +- code/modules/persistence/noticeboards.dm | 2 +- code/modules/power/cable_structure.dm | 1 - code/modules/power/lighting.dm | 9 +- code/modules/power/solar.dm | 28 +++-- code/modules/projectiles/ammunition.dm | 26 +++-- code/modules/projectiles/guns/launcher/net.dm | 14 ++- .../projectiles/guns/launcher/syringe_gun.dm | 4 +- .../modules/psionics/equipment/psipower_tk.dm | 2 +- code/modules/reagents/reagent_containers.dm | 3 +- .../drinkingglass/drinkingglass.dm | 7 +- .../drinkingglass/extras.dm | 18 ++- .../reagent_containers/food/condiment.dm | 6 +- .../reagent_containers/food/drinks/bottle.dm | 10 +- .../reagents/reagent_containers/food/fish.dm | 2 +- .../reagent_containers/food/sandwich.dm | 36 +++--- .../reagent_containers/food/servingbowl.dm | 14 ++- .../reagent_containers/food/snacks.dm | 89 +++++++------- .../food/snacks/shellfish.dm | 2 +- .../reagents/reagent_containers/glass.dm | 4 +- .../reagents/reagent_containers/hypospray.dm | 11 +- .../reagents/reagent_containers/pill.dm | 3 +- code/modules/recycling/conveyor2.dm | 5 +- code/modules/spells/spellbook.dm | 8 +- code/modules/supermatter/supermatter.dm | 2 +- code/modules/xenoarcheaology/boulder.dm | 4 +- code/modules/xenoarcheaology/finds/finds.dm | 18 +-- code/modules/xenoarcheaology/finds/fossils.dm | 23 ++-- .../tools/ano_device_battery.dm | 9 +- maps/torch/items/uniform_vendor.dm | 14 ++- test/check-paths.sh | 2 +- 176 files changed, 1347 insertions(+), 1127 deletions(-) diff --git a/code/__defines/flags.dm b/code/__defines/flags.dm index dc6ae948143a4..7a8549f9ca670 100644 --- a/code/__defines/flags.dm +++ b/code/__defines/flags.dm @@ -24,7 +24,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define ATOM_AWAITING_OVERLAY_UPDATE FLAG(10) #define MOVABLE_FLAG_PROXMOVE FLAG(0) // Does this object require proximity checking in Enter()? -#define MOVABLE_FLAG_Z_INTERACT FLAG(1) // Should attackby and attack_hand be relayed through ladders and open spaces? +#define MOVABLE_FLAG_Z_INTERACT FLAG(1) // Should use_tool and attack_hand be relayed through ladders and open spaces? #define MOVABLE_FLAG_EFFECTMOVE FLAG(2) // Is this an effect that should move? #define OBJ_FLAG_ANCHORABLE FLAG(0) // This object can be stuck in place with a tool diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 3b29ff50a7ffa..8e2210475c668 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -5,7 +5,7 @@ These are the default click code call sequences used when clicking on stuff with Atoms: mob/ClickOn() calls the item's resolve_attackby() proc. -item/resolve_attackby() calls the target atom's attackby() proc. +item/resolve_attackby() calls the target atom's use_tool() proc. Mobs: @@ -34,7 +34,7 @@ avoid code duplication. This includes items that may sometimes act as a standard /** * Called when the item is in the active hand and another atom is clicked. This is generally called by `ClickOn()`. * - * This passes down to `use_before()`, `use_weapon()`, `use_tool()`, `attackby()`, and then use_after() in that order, + * This passes down to `use_before()`, `use_weapon()`, `use_tool()`, and then use_after() in that order, * depending on item flags and user's intent. * use_grab() is run in an override of resolve_attackby() processed at the grab's level, and is not part of this chain. * @@ -59,9 +59,6 @@ avoid code duplication. This includes items that may sometimes act as a standard if (!.) use_call = "tool" . = atom.use_tool(src, user, click_params) - if (!.) - use_call = "attackby" - . = atom.attackby(src, user, click_params) if (!.) use_call = "use" . = use_after(atom, user, click_params) @@ -380,22 +377,6 @@ avoid code duplication. This includes items that may sometimes act as a standard return ..() - -/** - * DEPRECATED - USE THE `use_*()` PROCS INSTEAD. - * - * Called when this atom is clicked on while another item is in the active hand. This is generally called by this item's `resolve_attackby()` proc. - * - * **Parameters**: - * - `item` - The item that was in the active hand when `src` was clicked. - * - `user` - The mob using the item. - * - `click_params` - List of click parameters. See BYOND's `CLick()` documentation. - * - * Returns boolean to indicate whether the attack call was handled or not. - */ -/atom/proc/attackby(obj/item/item, mob/living/user, click_params) - return FALSE - /** * Called when the item is in the active hand and another atom is clicked and `resolve_attackby()` returns FALSE. This is generally called by `ClickOn()`. * Works on ranged targets, unlike resolve_attackby() diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm index ddc0e43142683..9ee7448bb7986 100644 --- a/code/game/antagonist/outsider/raider.dm +++ b/code/game/antagonist/outsider/raider.dm @@ -212,7 +212,7 @@ GLOBAL_DATUM_INIT(raiders, /datum/antagonist/raider, new) if(holster) var/obj/item/clothing/under/uniform = player.w_uniform if(istype(uniform) && uniform.can_attach_accessory(holster)) - uniform.attackby(holster, player) + uniform.use_tool(holster, player) else player.put_in_any_hand_if_possible(holster) @@ -246,7 +246,7 @@ GLOBAL_DATUM_INIT(raiders, /datum/antagonist/raider, new) if(holster) var/obj/item/clothing/under/uniform = vox.w_uniform if(istype(uniform) && uniform.can_attach_accessory(holster)) - uniform.attackby(holster, vox) + uniform.use_tool(holster, vox) else vox.put_in_any_hand_if_possible(holster) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 9b7d61721376b..59a6967dd9931 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -372,9 +372,10 @@ return master.use_tool(tool, user, click_params) return FALSE -/atom/movable/fake_overlay/attackby(obj/item/I, mob/user) +/atom/movable/fake_overlay/use_tool(obj/item/tool, mob/user, list/click_params) if (master) - return master.attackby(I, user) + return master.use_tool(tool, user) + return ..() /atom/movable/fake_overlay/attack_hand(mob/user) if (master) diff --git a/code/game/machinery/_machines_base/machinery_components.dm b/code/game/machinery/_machines_base/machinery_components.dm index aa77bbdde97ce..ef461ce720c26 100644 --- a/code/game/machinery/_machines_base/machinery_components.dm +++ b/code/game/machinery/_machines_base/machinery_components.dm @@ -254,12 +254,12 @@ GLOBAL_LIST_INIT(machine_path_to_circuit_type, cache_circuits_by_build_path()) power_change() ..() -/// Passes `attackby()` calls through to components within the machine, if they are accessible. +/// Passes `use_tool()` calls through to components within the machine, if they are accessible. /obj/machinery/proc/component_attackby(obj/item/I, mob/user) for(var/obj/item/stock_parts/part in component_parts) if(!components_are_accessible(part.type)) continue - if((. = part.attackby(I, user))) + if((. = part.use_tool(I, user))) return return construct_state && construct_state.attackby(I, user, src) diff --git a/code/game/machinery/_machines_base/stock_parts/power/battery.dm b/code/game/machinery/_machines_base/stock_parts/power/battery.dm index 2565c60d40920..05a0142352490 100644 --- a/code/game/machinery/_machines_base/stock_parts/power/battery.dm +++ b/code/game/machinery/_machines_base/stock_parts/power/battery.dm @@ -136,23 +136,24 @@ icon_state = "battery[!!cell]" // Cell interaction -/obj/item/stock_parts/power/battery/attackby(obj/item/I, mob/user) +/obj/item/stock_parts/power/battery/use_tool(obj/item/I, mob/living/user, list/click_params) var/obj/machinery/machine = loc // Interactions with/without machine if(istype(I, /obj/item/cell)) if(cell) - to_chat(user, "There is a power cell already installed.") + to_chat(user, SPAN_WARNING("There is a power cell already installed.")) return TRUE if(istype(machine) && (GET_FLAGS(machine.stat, MACHINE_STAT_MAINT))) to_chat(user, SPAN_WARNING("There is no connector for your power cell.")) return TRUE if(I.w_class != ITEM_SIZE_NORMAL) - to_chat(user, "\The [I] is too [I.w_class < ITEM_SIZE_NORMAL? "small" : "large"] to fit here.") + to_chat(user, SPAN_WARNING("\The [I] is too [I.w_class < ITEM_SIZE_NORMAL? "small" : "large"] to fit here.")) return TRUE if(!user.unEquip(I, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, I) + return TRUE add_cell(machine, I) user.visible_message(\ SPAN_WARNING("\The [user] has inserted the power cell to \the [src]!"),\ @@ -163,6 +164,8 @@ if(!istype(machine)) return ..() + return ..() + /obj/item/stock_parts/power/battery/attack_self(mob/user) if(cell) user.put_in_hands(cell) diff --git a/code/game/machinery/_machines_base/stock_parts/power/terminal.dm b/code/game/machinery/_machines_base/stock_parts/power/terminal.dm index d675b0ced38a3..7e31682b681ca 100644 --- a/code/game/machinery/_machines_base/stock_parts/power/terminal.dm +++ b/code/game/machinery/_machines_base/stock_parts/power/terminal.dm @@ -115,7 +115,7 @@ to_chat(user, SPAN_NOTICE("There is already a terminal here.")) return TRUE -/obj/item/stock_parts/power/terminal/attackby(obj/item/I, mob/user) +/obj/item/stock_parts/power/terminal/use_tool(obj/item/I, mob/living/user, list/click_params) var/obj/machinery/machine = loc if(!istype(machine)) return ..() @@ -176,6 +176,7 @@ to_chat(user, SPAN_NOTICE("You cut the cables and dismantle the power terminal.")) qdel(terminal) return TRUE + return ..() /obj/item/stock_parts/power/terminal/buildable part_flags = PART_FLAG_HAND_REMOVE diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 6134ca6841ce2..7f8294f5c296c 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -23,20 +23,18 @@ 4 = Screwdriver panel closed and is fully built (you cannot attach upgrades) */ -/obj/item/camera_assembly/attackby(obj/item/W as obj, mob/living/user as mob) - +/obj/item/camera_assembly/use_tool(obj/item/W, mob/living/user, list/click_params) switch(state) - if(0) // State 0 - if(isWrench(W) && isturf(src.loc)) + if(isWrench(W) && isturf(loc)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, "You wrench the assembly into place.") anchored = TRUE state = 1 update_icon() auto_turn() - return + return TRUE if(1) // State 1 @@ -45,7 +43,7 @@ to_chat(user, "You weld the assembly securely into place.") anchored = TRUE state = 2 - return + return TRUE else if(isWrench(W)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) @@ -53,7 +51,7 @@ anchored = FALSE update_icon() state = 0 - return + return TRUE if(2) // State 2 @@ -64,16 +62,14 @@ state = 3 else to_chat(user, SPAN_WARNING("You need 2 coils of wire to wire the assembly.")) - return + return TRUE else if(isWelder(W)) - if(weld(W, user)) to_chat(user, "You unweld the assembly from its place.") state = 1 anchored = TRUE - return - + return TRUE if(3) // State 3 @@ -83,12 +79,12 @@ var/input = sanitize(input(usr, "Which networks would you like to connect this camera to? Separate networks with a comma. No Spaces!\nFor example: Exodus,Security,Secret", "Set Network", camera_network ? camera_network : NETWORK_EXODUS)) if(!input) to_chat(usr, "No input found please hang up and try your call again.") - return + return TRUE var/list/tempnetwork = splittext(input, ",") if(length(tempnetwork) < 1) to_chat(usr, "No network found please hang up and try your call again.") - return + return TRUE var/area/camera_area = get_area(src) var/temptag = "[sanitize(camera_area.name)] ([rand(1, 999)])" @@ -114,33 +110,32 @@ if(confirm == "Yes") C.update_icon() break - return + return TRUE else if(isWirecutter(W)) - new/obj/item/stack/cable_coil(get_turf(src), 2) playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) to_chat(user, "You cut the wires from the circuits.") state = 2 - return + return TRUE // Upgrades! if(is_type_in_list(W, possible_upgrades) && !is_type_in_list(W, upgrades) && user.unEquip(W, src)) // Is a possible upgrade and isn't in the camera already. to_chat(user, "You attach \the [W] into the assembly inner circuits.") upgrades += W - return + return TRUE // Taking out upgrades - else if(isCrowbar(W) && length(upgrades)) + if (isCrowbar(W) && length(upgrades)) var/obj/U = locate(/obj) in upgrades if(U) to_chat(user, "You unattach an upgrade from the assembly.") playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) U.dropInto(loc) upgrades -= U - return + return TRUE - ..() + return ..() /obj/item/camera_assembly/on_update_icon() if(anchored) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 2508ffd9eb81a..122058d2ed949 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -977,7 +977,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/use_tool(obj/item/C, mob/living/user, list/click_params) // Brace is considered installed on the airlock, so interacting with it is protected from electrification. if(brace && C && (istype(C.GetIdCard(), /obj/item/card/id) || istype(C, /obj/item/material/twohanded/jack))) - return brace.attackby(C, user) + return brace.use_tool(C, user) if(!brace && istype(C, /obj/item/airlock_brace)) var/obj/item/airlock_brace/A = C diff --git a/code/game/machinery/doors/braces.dm b/code/game/machinery/doors/braces.dm index 4eca72c9674f7..342c37f67f6c3 100644 --- a/code/game/machinery/doors/braces.dm +++ b/code/game/machinery/doors/braces.dm @@ -69,7 +69,7 @@ electronics.attack_self(user) -/obj/item/airlock_brace/attackby(obj/item/item, mob/living/user) +/obj/item/airlock_brace/use_tool(obj/item/item, mob/living/user, list/click_params) if (istype(item.GetIdCard(), /obj/item/card/id)) if (airlock) update_access() @@ -85,14 +85,17 @@ airlock.update_icon() airlock = null update_icon() + return TRUE else to_chat(user, "You swipe \the [item] through \the [src], but it does not react.") + return TRUE else attack_self(user) - if (user.a_intent == I_HURT) - return ..() + return TRUE + if (istype(item, /obj/item/material/twohanded/jack)) if (!airlock) + to_chat(user, SPAN_WARNING("\The [src] is not attached to an airlock!")) return TRUE user.visible_message( SPAN_ITALIC("\The [user] begins removing \a [src] with \a [item]."), @@ -109,7 +112,8 @@ airlock = null update_icon() return TRUE - if (isWelder(item) && user.a_intent != I_HURT) + + if (isWelder(item)) if (!health_damaged()) to_chat(user, SPAN_NOTICE("\The [src] does not require repairs.")) return TRUE diff --git a/code/game/machinery/kitchen/cookers.dm b/code/game/machinery/kitchen/cookers.dm index 03887396b6d1f..c794682a63447 100644 --- a/code/game/machinery/kitchen/cookers.dm +++ b/code/game/machinery/kitchen/cookers.dm @@ -702,12 +702,13 @@ /obj/item/material/chopping_board/bamboo/default_material = MATERIAL_BAMBOO -/obj/item/material/chopping_board/attackby(obj/item/item, mob/living/user) +/obj/item/material/chopping_board/use_tool(obj/item/item, mob/living/user, list/click_params) if (istype(item, /obj/item/reagent_containers/food/snacks)) if (istype(item, /obj/item/reagent_containers/food/snacks/variable)) to_chat(user, SPAN_WARNING("\The [item] is already combinable.")) return TRUE if (!user.unEquip(item, src)) + FEEDBACK_UNEQUIP_FAILURE(user, item) return TRUE var/obj/item/reagent_containers/food/snacks/source = item var/obj/item/reagent_containers/food/snacks/variable/result = new (get_turf(src)) @@ -725,10 +726,11 @@ result.desc = source.desc qdel(source) return TRUE + return ..() -/obj/item/reagent_containers/food/snacks/variable/attackby(obj/item/I, mob/living/user) +/obj/item/reagent_containers/food/snacks/variable/use_tool(obj/item/I, mob/living/user, list/click_params) if (istype(I, /obj/item/reagent_containers/food/snacks)) combine(I, user) return TRUE diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index c22865c01b511..030905865aacd 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -909,21 +909,22 @@ var/global/list/obj/machinery/newscaster/allCasters = list() //Global list that src.attack_self(src.loc) -/obj/item/newspaper/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/newspaper/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/pen)) - if(src.scribble_page == src.curr_page) + if(scribble_page == curr_page) to_chat(user, SPAN_COLOR("blue", "There's already a scribble in this page... You wouldn't want to make things too cluttered, would you?")) else var/s = sanitize(input(user, "Write something", "Newspaper", "")) s = sanitize(s) if (!s) - return - if (!in_range(src, usr) && src.loc != usr) - return - src.scribble_page = src.curr_page - src.scribble = s - src.attack_self(user) - return + return TRUE + if (!in_range(src, usr) && loc != usr) + return TRUE + scribble_page = curr_page + scribble = s + attack_self(user) + return TRUE + return ..() ////////////////////////////////////helper procs diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index fbe78ad8fd111..b02803a1dfdf4 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -129,11 +129,9 @@ Buildable meters P.node4.build_network() return 0 -/obj/item/pipe/attackby(obj/item/W as obj, mob/user as mob) - if(!isWrench(W)) +/obj/item/pipe/use_tool(obj/item/W, mob/living/user, list/click_params) + if(!isWrench(W) || !isturf(loc)) return ..() - if (!isturf(loc)) - return 1 sanitize_dir() var/obj/machinery/atmospherics/fake_machine = constructed_path @@ -142,7 +140,7 @@ Buildable meters for(var/obj/machinery/atmospherics/M in loc) if((M.initialize_directions & pipe_dir) && M.check_connect_types_construction(M,src)) // matches at least one direction on either type of pipe & same connection type to_chat(user, SPAN_WARNING("There is already a pipe of the same type at this location.")) - return 1 + return TRUE // no conflicts found var/pipefailtext = SPAN_WARNING("There's nothing to connect this pipe section to!") //(with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)" @@ -158,19 +156,19 @@ Buildable meters if(P.pipe_class == PIPE_CLASS_UNARY) if(build_unary(P, pipefailtext)) - return 1 + return TRUE if(P.pipe_class == PIPE_CLASS_BINARY) if(build_binary(P, pipefailtext)) - return 1 + return TRUE if(P.pipe_class == PIPE_CLASS_TRINARY) if(build_trinary(P, pipefailtext)) - return 1 + return TRUE if(P.pipe_class == PIPE_CLASS_QUATERNARY) if(build_quaternary(P, pipefailtext)) - return 1 + return TRUE if(P.pipe_class == PIPE_CLASS_OMNI) P.atmos_init() @@ -182,6 +180,7 @@ Buildable meters SPAN_NOTICE("You have fastened the [src]."), \ "You hear ratchet.") qdel(src) // remove the pipe item + return TRUE /obj/item/pipe/injector name = "injector" @@ -210,17 +209,19 @@ Buildable meters /obj/item/machine_chassis var/build_type -/obj/item/machine_chassis/attackby(obj/item/W, mob/user) - if(!isWrench(W)) - return ..() - var/obj/machinery/machine = new build_type(get_turf(src), dir, FALSE) - machine.apply_component_presets() - machine.RefreshParts() - if(machine.construct_state) - machine.construct_state.post_construct(machine) - playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You have fastened the [src].")) - qdel(src) +/obj/item/machine_chassis/use_tool(obj/item/W, mob/living/user, list/click_params) + if(isWrench(W)) + var/obj/machinery/machine = new build_type(get_turf(src), dir, FALSE) + machine.apply_component_presets() + machine.RefreshParts() + if(machine.construct_state) + machine.construct_state.post_construct(machine) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + to_chat(user, SPAN_NOTICE("You have fastened the [src].")) + qdel(src) + return TRUE + + return ..() /obj/item/machine_chassis/air_sensor name = "gas sensor" diff --git a/code/game/machinery/pipe/pipelayer.dm b/code/game/machinery/pipe/pipelayer.dm index c63b32efa8dfb..4783102369b8d 100644 --- a/code/game/machinery/pipe/pipelayer.dm +++ b/code/game/machinery/pipe/pipelayer.dm @@ -132,6 +132,6 @@ var/obj/item/pipe/P = new(w_turf) P.set_dir(p_dir) - P.attackby(W , src) + P.use_tool(W , src) return 1 diff --git a/code/game/machinery/wall_frames.dm b/code/game/machinery/wall_frames.dm index 613ecf0a98508..0f38f92499b87 100644 --- a/code/game/machinery/wall_frames.dm +++ b/code/game/machinery/wall_frames.dm @@ -9,12 +9,12 @@ var/refund_type = /obj/item/stack/material/steel var/reverse = 0 //if resulting object faces opposite its dir (like light fixtures) -/obj/item/frame/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/frame/use_tool(obj/item/W, mob/living/user, list/click_params) if(isWrench(W)) new refund_type( get_turf(src.loc), refund_amt) qdel(src) - return - ..() + return TRUE + return ..() /obj/item/frame/proc/try_build(turf/on_wall) if(!build_machine_type) diff --git a/code/game/objects/auras/aura.dm b/code/game/objects/auras/aura.dm index d0637e4eb4114..89b1979eafd8b 100644 --- a/code/game/objects/auras/aura.dm +++ b/code/game/objects/auras/aura.dm @@ -1,4 +1,4 @@ -/*Auras are simple: They are simple overriders for attackbys, bullet_act, damage procs, etc. They also tick after their respective mob. +/*Auras are simple: They are simple overriders for use_weapon, bullet_act, damage procs, etc. They also tick after their respective mob. They should be used for undeterminate mob effects, like for instance a toggle-able forcefield, or indestructability as long as you don't move. They should also be used for when you want to effect the ENTIRE mob, like having an armor buff or showering candy everytime you walk. */ diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index b408a5ce0f5d9..0eec39b674437 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -22,7 +22,7 @@ // causeerrorheresoifixthis var/obj/item/master = null var/list/origin_tech = null //Used by R&D to determine what research bonuses it grants. - ///Used in use_weapon() and attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" + ///Used in use_weapon() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" var/list/attack_verb = list("attacked") var/lock_picking_level = 0 //used to determine whether something can pick a lock, and how well. var/force = 0 @@ -293,23 +293,6 @@ return TRUE return ..() - -///Eventually should be deleted in favor of use_tool; keeping duplicate until downstream attackbys are replaced. -/obj/item/attackby(obj/item/item, mob/living/user, list/click_params) - if (SSfabrication.try_craft_with(src, item, user)) - return TRUE - if (istype(item, /obj/item/storage) && isturf(loc)) - var/obj/item/storage/storage = item - if (!storage.allow_quick_gather) - return ..() - if (!storage.quick_gather_single) - storage.gather_all(loc, user) - else if (storage.can_be_inserted(src, user)) - storage.handle_item_insertion(src) - return TRUE - return ..() - - /obj/item/can_embed() if (!canremove) return FALSE diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm index 38b3cc88b84ac..59f7285b29231 100644 --- a/code/game/objects/items/apc_frame.dm +++ b/code/game/objects/items/apc_frame.dm @@ -7,12 +7,6 @@ icon_state = "apc_frame" obj_flags = OBJ_FLAG_CONDUCTIBLE -/obj/item/frame/apc/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(isWrench(W)) - new /obj/item/stack/material/steel( get_turf(src.loc), 2 ) - qdel(src) - /obj/item/frame/apc/try_build(turf/on_wall) if (get_dist(on_wall,usr)>1) return diff --git a/code/game/objects/items/buttons.dm b/code/game/objects/items/buttons.dm index 1c2e209216d68..37e9cc0a5b77f 100644 --- a/code/game/objects/items/buttons.dm +++ b/code/game/objects/items/buttons.dm @@ -6,6 +6,7 @@ icon = 'icons/obj/structures/buttons.dmi' icon_state = "light-p" obj_flags = OBJ_FLAG_CONDUCTIBLE + refund_amt = 1 /obj/item/frame/light_switch/windowtint name = "window tint switch frame" @@ -58,28 +59,24 @@ GLOBAL_LIST_INIT(possible_switch_offsets, list( break return 1 -/obj/item/frame/light_switch/attackby(obj/item/tool as obj, mob/user as mob) //construction - if(isWrench(tool)) - new /obj/item/stack/material/steel( get_turf(src.loc), 1 ) - qdel(src) - else if (isScrewdriver(tool) && isturf(user.loc)) +/obj/item/frame/light_switch/use_tool(obj/item/tool, mob/living/user, list/click_params) + if (isScrewdriver(tool) && isturf(user.loc)) var/obj/machinery/light_switch/S = new (user.loc) if(position_with_direction(S, user)) - to_chat(user, "You fasten \the [S] with your [tool].") + to_chat(user, "You fasten \the [S] with your \the [tool].") qdel(src) else qdel(S) - else ..() + return TRUE + return ..() -/obj/item/frame/light_switch/windowtint/attackby(obj/item/tool as obj, mob/user as mob) - if(isWrench(tool)) - new /obj/item/stack/material/steel( get_turf(src.loc), 1 ) - qdel(src) - else if (isScrewdriver(tool) && isturf(user.loc)) +/obj/item/frame/light_switch/windowtint/use_tool(obj/item/tool, mob/living/user, list/click_params) + if (isScrewdriver(tool) && isturf(user.loc)) var/obj/machinery/button/windowtint/S = new(user.loc) if(position_with_direction(S, user)) to_chat(user, "You fasten \the [S] with your [tool].") qdel(src) else qdel(S) - else ..() + return TRUE + return ..() diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm index 25fb6acfc34dd..eb1f0f5db83ad 100644 --- a/code/game/objects/items/contraband.dm +++ b/code/game/objects/items/contraband.dm @@ -75,7 +75,7 @@ // Proc to shove them up your nose -/obj/item/reagent_containers/powder/attackby(obj/item/W, mob/living/user) +/obj/item/reagent_containers/powder/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/glass_extra/straw) || istype(W, /obj/item/paper/cig) || istype(W, /obj/item/spacecash)) if(!user.check_has_mouth()) // We dont want dionae or adherents doing lines of cocaine. Probably. to_chat(SPAN_WARNING("Without a nose, you seem unable to snort from \the [src].")) diff --git a/code/game/objects/items/devices/boombox.dm b/code/game/objects/items/devices/boombox.dm index f9c1ff11c454a..f16b3ba979994 100644 --- a/code/game/objects/items/devices/boombox.dm +++ b/code/game/objects/items/devices/boombox.dm @@ -64,7 +64,7 @@ to_chat(user, SPAN_ITALIC(message)) -/obj/item/boombox/attackby(obj/item/item, mob/user) +/obj/item/boombox/use_tool(obj/item/item, mob/living/user, list/click_params) set waitfor = FALSE if(isScrewdriver(item)) var/item_loc = item.loc diff --git a/code/game/objects/items/devices/inducer.dm b/code/game/objects/items/devices/inducer.dm index 6c14dd37d3bb5..fce6bc4937566 100644 --- a/code/game/objects/items/devices/inducer.dm +++ b/code/game/objects/items/devices/inducer.dm @@ -55,28 +55,33 @@ return FALSE -/obj/item/inducer/attackby(obj/item/W, mob/user) +/obj/item/inducer/use_tool(obj/item/W, mob/living/user, list/click_params) if(isScrewdriver(W)) opened = !opened to_chat(user, SPAN_NOTICE("You [opened ? "open" : "close"] the battery compartment.")) update_icon() + return TRUE + if(istype(W, /obj/item/cell)) if (istype(W, /obj/item/cell/device)) to_chat(user, SPAN_WARNING("\The [src] only takes full-size power cells.")) - return + return TRUE if(opened) if(!cell) if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE to_chat(user, SPAN_NOTICE("You insert \the [W] into \the [src].")) cell = W update_icon() - return + return TRUE else to_chat(user, SPAN_NOTICE("\The [src] already has \a [cell] installed!")) - return + return TRUE + if(CannotUse(user) || recharge(W, user)) - return + return TRUE + return ..() /obj/item/inducer/proc/recharge(atom/A, mob/user) @@ -178,10 +183,10 @@ failsafe = 0.2 cell = null -/obj/item/inducer/borg/attackby(obj/item/W, mob/user) +/obj/item/inducer/borg/use_tool(obj/item/W, mob/living/user, list/click_params) if(isScrewdriver(W)) - return - . = ..() + return FALSE + return ..() /obj/item/inducer/borg/on_update_icon() . = ..() diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm index 2535c5b11d5d8..d9132e9b4421a 100644 --- a/code/game/objects/items/devices/tvcamera.dm +++ b/code/game/objects/items/devices/tvcamera.dm @@ -92,15 +92,15 @@ H.update_inv_l_hand() /* Assembly by a roboticist */ -/obj/item/robot_parts/head/attackby(obj/item/device/assembly/S, mob/user as mob) +/obj/item/robot_parts/head/use_tool(obj/item/S, mob/living/user, list/click_params) if ((!istype(S, /obj/item/device/assembly/infra))) - ..() - return + return ..() var/obj/item/TVAssembly/A = new(user) qdel(S) user.put_in_hands(A) to_chat(user, SPAN_NOTICE("You add the infrared sensor to the robot head.")) qdel(src) + return TRUE /* Using camcorder icon as I can't sprite. Using robohead because of restricting to roboticist */ @@ -113,7 +113,7 @@ Using robohead because of restricting to roboticist */ var/buildstep = 0 w_class = ITEM_SIZE_LARGE -/obj/item/TVAssembly/attackby(obj/item/W, mob/user) +/obj/item/TVAssembly/use_tool(obj/item/W, mob/living/user, list/click_params) switch(buildstep) if(0) if(istype(W, /obj/item/robot_parts/robot_component/camera)) @@ -121,30 +121,32 @@ Using robohead because of restricting to roboticist */ qdel(W) desc = "This TV camera assembly has a camera module." buildstep++ + return TRUE if(1) if(istype(W, /obj/item/device/taperecorder)) qdel(W) buildstep++ to_chat(user, SPAN_NOTICE("You add the tape recorder to [src]")) desc = "This TV camera assembly has a camera and audio module." - return + return TRUE if(2) if(isCoil(W)) var/obj/item/stack/cable_coil/C = W - if(!C.use(3)) - to_chat(user, SPAN_NOTICE("You need three cable coils to wire the devices.")) + if(!C.can_use(3)) + to_chat(user, SPAN_WARNING("You need three cable coils to wire the devices.")) ..() - return + return TRUE + C.use(3) buildstep++ to_chat(user, SPAN_NOTICE("You wire the assembly")) desc = "This TV camera assembly has wires sticking out." - return + return TRUE if(3) if(isWirecutter(W)) to_chat(user, SPAN_NOTICE(" You trim the wires.")) buildstep++ desc = "This TV camera assembly needs casing." - return + return TRUE if(4) if(istype(W, /obj/item/stack/material/steel)) var/obj/item/stack/material/steel/S = W @@ -154,5 +156,5 @@ Using robohead because of restricting to roboticist */ var/turf/T = get_turf(src) new /obj/item/device/camera/tvcamera(T) qdel(src) - return - ..() + return TRUE + return ..() diff --git a/code/game/objects/items/flora.dm b/code/game/objects/items/flora.dm index 609d1045b9fd7..b8199cdaec046 100644 --- a/code/game/objects/items/flora.dm +++ b/code/game/objects/items/flora.dm @@ -19,10 +19,8 @@ item_state = "plant-27" var/trimmed = FALSE -/obj/item/flora/pottedplantsmall/fern/attackby(obj/item/S, mob/user) - if (!isWirecutter(S)) - return ..() - else +/obj/item/flora/pottedplantsmall/fern/use_tool(obj/item/S, mob/living/user, list/click_params) + if (isWirecutter(S)) playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) visible_message(SPAN_NOTICE("\The [user] starts trimming the [src] with \the [S].")) if (do_after(user, (S.toolspeed * 6) SECONDS, src, DO_PUBLIC_UNIQUE)) @@ -31,6 +29,8 @@ trimmed = TRUE addtimer(new Callback(src, .proc/grow), 90 MINUTES, TIMER_UNIQUE|TIMER_OVERRIDE) update_icon() + return TRUE + return ..() /obj/item/flora/pottedplantsmall/fern/on_update_icon() . = ..() diff --git a/code/game/objects/items/glassjar.dm b/code/game/objects/items/glassjar.dm index 66f1b38d76b6a..882c520d1b7e0 100644 --- a/code/game/objects/items/glassjar.dm +++ b/code/game/objects/items/glassjar.dm @@ -71,17 +71,20 @@ update_icon() return -/obj/item/glass_jar/attackby(obj/item/W, mob/user) +/obj/item/glass_jar/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/spacecash)) if(contains == 0) contains = 1 if(contains != 1) - return + return ..() if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE var/obj/item/spacecash/S = W - user.visible_message(SPAN_NOTICE("[user] puts [S.worth] [S.worth > 1 ? GLOB.using_map.local_currency_name : GLOB.using_map.local_currency_name_singular] into \the [src].")) + user.visible_message(SPAN_NOTICE("\The [user] puts [S.worth] [S.worth > 1 ? GLOB.using_map.local_currency_name : GLOB.using_map.local_currency_name_singular] into \the [src].")) update_icon() + return TRUE + return ..() /obj/item/glass_jar/on_update_icon() // Also updates name and desc underlays.Cut() diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index bc99e17641fc0..4d900df724104 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -44,6 +44,7 @@ burst() return -/obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob) - if (W.can_puncture()) +/obj/item/latexballon/use_tool(obj/item/item, mob/living/user, list/click_params) + if (item.can_puncture()) burst() + return ..() diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm index bfc243bef206e..63d25ca28ba7e 100644 --- a/code/game/objects/items/paintkit.dm +++ b/code/game/objects/items/paintkit.dm @@ -39,7 +39,7 @@ new_light_overlay = citem.additional_data["light_overlay"] new_mob_icon_file = CUSTOM_ITEM_MOB -/obj/item/clothing/head/helmet/space/void/attackby(obj/item/O, mob/user) +/obj/item/clothing/head/helmet/space/void/use_tool(obj/item/O, mob/living/user, list/click_params) if(istype(O,/obj/item/device/kit/suit)) var/obj/item/device/kit/suit/kit = O SetName("[kit.new_name] suit helmet") @@ -52,15 +52,16 @@ icon_override = kit.new_mob_icon_file if(kit.new_light_overlay) light_overlay = kit.new_light_overlay - to_chat(user, "You set about modifying the helmet into [src].") + to_chat(user, SPAN_NOTICE("You set about modifying the helmet into \the [src].")) var/mob/living/carbon/human/H = user if(istype(H)) species_restricted = list(H.species.get_bodytype(H)) kit.use(1,user) - return 1 + return TRUE + return ..() -/obj/item/clothing/suit/space/void/attackby(obj/item/O, mob/user) +/obj/item/clothing/suit/space/void/use_tool(obj/item/O, mob/living/user, list/click_params) if(istype(O,/obj/item/device/kit/suit)) var/obj/item/device/kit/suit/kit = O SetName("[kit.new_name] voidsuit") @@ -71,12 +72,12 @@ icon = kit.new_icon_file if(kit.new_mob_icon_file) icon_override = kit.new_mob_icon_file - to_chat(user, "You set about modifying the suit into [src].") + to_chat(user, SPAN_NOTICE("You set about modifying the suit into \the [src].")) var/mob/living/carbon/human/H = user if(istype(H)) species_restricted = list(H.species.get_bodytype(H)) kit.use(1,user) - return 1 + return TRUE return ..() // Mechs are handled in their attackby (mech_interaction.dm). diff --git a/code/game/objects/items/rescuebag.dm b/code/game/objects/items/rescuebag.dm index 99f29176d2854..42dbff0f8cf5d 100644 --- a/code/game/objects/items/rescuebag.dm +++ b/code/game/objects/items/rescuebag.dm @@ -29,22 +29,26 @@ airtank = null qdel(src) -/obj/item/bodybag/rescue/attackby(obj/item/W, mob/user, click_params) +/obj/item/bodybag/rescue/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/tank)) if(airtank) - to_chat(user, "\The [src] already has an air tank installed.") - return 1 - else if(user.unEquip(W)) - W.forceMove(src) - airtank = W - to_chat(user, "You install \the [W] in \the [src].") - return 1 + to_chat(user, SPAN_WARNING("\The [src] already has an air tank installed.")) + return TRUE + if (!user.unEquip(W)) + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE + W.forceMove(src) + airtank = W + to_chat(user, SPAN_NOTICE("You install \the [W] in \the [src].")) + return TRUE + else if(airtank && isScrewdriver(W)) - to_chat(user, "You remove \the [airtank] from \the [src].") + to_chat(user, SPAN_NOTICE("You remove \the [airtank] from \the [src].")) airtank.dropInto(loc) airtank = null - else - ..() + return TRUE + + return ..() /obj/item/bodybag/rescue/examine(mob/user) . = ..() diff --git a/code/game/objects/items/robot/robot_frame.dm b/code/game/objects/items/robot/robot_frame.dm index 39408ed261582..03bd124e28d0c 100644 --- a/code/game/objects/items/robot/robot_frame.dm +++ b/code/game/objects/items/robot/robot_frame.dm @@ -31,13 +31,12 @@ return FALSE return TRUE -/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob) - +/obj/item/robot_parts/robot_suit/use_tool(obj/item/W, mob/living/user, list/click_params) // Uninstall a robotic part. if(isCrowbar(W)) if(!length(parts)) to_chat(user, SPAN_WARNING("\The [src] has no parts to remove.")) - return + return TRUE var/removing = pick(parts) var/obj/item/robot_parts/part = parts[removing] part.forceMove(get_turf(src)) @@ -45,30 +44,32 @@ parts -= removing to_chat(user, SPAN_WARNING("You lever \the [part] off \the [src].")) update_icon() + return TRUE // Install a robotic part. else if (istype(W, /obj/item/robot_parts)) var/obj/item/robot_parts/part = W if(!required_parts[part.bp_tag] || !istype(W, required_parts[part.bp_tag])) to_chat(user, SPAN_WARNING("\The [src] is not compatible with \the [W].")) - return + return TRUE if(parts[part.bp_tag]) to_chat(user, SPAN_WARNING("\The [src] already has \a [W] installed.")) - return + return TRUE if(part.can_install(user) && user.unEquip(W, src)) parts[part.bp_tag] = part update_icon() + return TRUE // Install an MMI/brain. else if(istype(W, /obj/item/device/mmi) || istype(W, /obj/item/organ/internal/posibrain)) if(!istype(loc,/turf)) to_chat(user, SPAN_WARNING("You can't put \the [W] in without the frame being on the ground.")) - return + return TRUE if(!check_completion()) to_chat(user, SPAN_WARNING("The frame is not ready for the central processor to be installed.")) - return + return TRUE var/mob/living/carbon/brain/B if(istype(W, /obj/item/device/mmi)) @@ -80,15 +81,15 @@ if(!B) to_chat(user, SPAN_WARNING("Sticking an empty [W.name] into the frame would sort of defeat the purpose.")) - return + return TRUE if(jobban_isbanned(B, "Robot")) to_chat(user, SPAN_WARNING("\The [W] does not seem to fit.")) - return + return TRUE if(B.stat == DEAD) to_chat(user, SPAN_WARNING("Sticking a dead [W.name] into the frame would sort of defeat the purpose.")) - return + return TRUE var/ghost_can_reenter = 0 if(B.mind) @@ -101,13 +102,14 @@ ghost_can_reenter = 1 if(!ghost_can_reenter) to_chat(user, SPAN_WARNING("\The [W] is completely unresponsive; there's no point.")) - return + return TRUE if(!user.unEquip(W)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE var/mob/living/silicon/robot/O = new product(get_turf(loc)) if(!O) - return + return TRUE O.mmi = W O.set_invisibility(0) @@ -136,13 +138,15 @@ callHook("borgify", list(O)) O.Namepick() qdel(src) + return TRUE else if(istype(W, /obj/item/pen)) var/t = sanitizeSafe(input(user, "Enter new robot name", src.name, src.created_name), MAX_NAME_LEN) if(t && (in_range(src, user) || loc == user)) created_name = t - else - ..() + return TRUE + + return ..() /obj/item/robot_parts/robot_suit/Destroy() parts.Cut() diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index beef355e50866..8d44bff365e3f 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -102,26 +102,30 @@ success = FALSE return success && ..() -/obj/item/robot_parts/chest/attackby(obj/item/W as obj, mob/user as mob) - ..() +/obj/item/robot_parts/chest/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/cell)) - if(src.cell) + if(cell) to_chat(user, SPAN_WARNING("You have already inserted a cell!")) - return + return TRUE else if(!user.unEquip(W, src)) - return - src.cell = W + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE + cell = W to_chat(user, SPAN_NOTICE("You insert the cell!")) + return TRUE + if(isCoil(W)) - if(src.wires) - to_chat(user, SPAN_WARNING("You have already inserted wire!")) - return + if(wires) + to_chat(user, SPAN_WARNING("You have already inserted wires!")) + return TRUE else var/obj/item/stack/cable_coil/coil = W if(coil.use(1)) - src.wires = 1.0 + wires = 1.0 to_chat(user, SPAN_NOTICE("You insert the wire!")) + return TRUE + if(istype(W, /obj/item/robot_parts/head)) var/obj/item/robot_parts/head/head_part = W // Attempt to create full-body prosthesis. @@ -133,7 +137,7 @@ // Species selection. var/species = input(user, "Select a species for the prosthetic.") as null|anything in GetCyborgSpecies() if(!species) - return + return TRUE var/name = sanitizeSafe(input(user,"Set a name for the new prosthetic."), MAX_NAME_LEN) if(!name) SetName("prosthetic ([random_id("prosthetic_id", 1, 999)])") @@ -173,6 +177,9 @@ // Cleanup qdel(W) qdel(src) + return TRUE + + return ..() /obj/item/robot_parts/chest/proc/GetCyborgSpecies() . = list() @@ -182,18 +189,20 @@ continue . += N -/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob) - ..() +/obj/item/robot_parts/head/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/device/flash)) if(istype(user,/mob/living/silicon/robot)) var/current_module = user.get_active_hand() if(current_module == W) to_chat(user, SPAN_WARNING("How do you propose to do that?")) - return + return TRUE else add_flashes(W,user) + return TRUE else add_flashes(W,user) + return TRUE + return ..() /obj/item/robot_parts/head/proc/add_flashes(obj/item/W as obj, mob/user as mob) //Made into a seperate proc to avoid copypasta if(src.flash1 && src.flash2) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index df781db9b0d5d..c94d8bd1ecb4e 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -52,22 +52,24 @@ update_icon() return TRUE -/obj/item/toy/water_balloon/attackby(obj/O as obj, mob/user as mob) +/obj/item/toy/water_balloon/use_tool(obj/item/O, mob/living/user, list/click_params) if(istype(O, /obj/item/reagent_containers/glass)) if(O.reagents) if(O.reagents.total_volume < 1) - to_chat(user, "The [O] is empty.") - else if(O.reagents.total_volume >= 1) - if(O.reagents.has_reagent(/datum/reagent/acid/polyacid, 1)) - to_chat(user, "The acid chews through the balloon!") - O.reagents.splash(user, reagents.total_volume) - qdel(src) - else - src.desc = "A translucent balloon with some form of liquid sloshing around in it." - to_chat(user, SPAN_NOTICE("You fill the balloon with the contents of [O].")) - O.reagents.trans_to_obj(src, 10) - src.update_icon() - return + to_chat(user, SPAN_WARNING("\The [O] is empty.")) + return TRUE + + if (O.reagents.has_reagent(/datum/reagent/acid/polyacid, 1)) + to_chat(user, "The acid chews through the balloon!") + O.reagents.splash(user, reagents.total_volume) + qdel(src) + else + desc = "A translucent balloon with some form of liquid sloshing around in it." + to_chat(user, SPAN_NOTICE("You fill the balloon with the contents of [O].")) + O.reagents.trans_to_obj(src, 10) + update_icon() + return TRUE + return ..() /obj/item/toy/water_balloon/throw_impact(atom/hit_atom) if(reagents && reagents.total_volume >= 1) @@ -148,16 +150,20 @@ attack_verb = list("attacked", "struck", "hit") var/bullets = 5 -/obj/item/toy/crossbow/attackby(obj/item/I as obj, mob/user as mob) +/obj/item/toy/crossbow/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/toy/ammo/crossbow)) if(bullets <= 4) if(!user.unEquip(I)) - return + FEEDBACK_UNEQUIP_FAILURE(user, I) + return TRUE qdel(I) bullets++ to_chat(user, SPAN_NOTICE("You load the foam dart into the crossbow.")) else to_chat(usr, SPAN_WARNING("It's already fully loaded.")) + return TRUE + + return ..() /obj/item/toy/crossbow/use_after(atom/target, mob/living/user, click_parameters) diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 945265665e077..116ec0fe86e00 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -58,13 +58,12 @@ spark_system = null return ..() -/obj/item/rcd/attackby(obj/item/W, mob/user) - +/obj/item/rcd/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/rcd_ammo)) var/obj/item/rcd_ammo/cartridge = W if(stored_matter >= max_stored_matter) - to_chat(user, SPAN_NOTICE("The RCD is at maximum capacity.")) - return + to_chat(user, SPAN_WARNING("The RCD is at maximum capacity.")) + return TRUE var/matter_exchange = min(cartridge.remaining,max_stored_matter - stored_matter) stored_matter += matter_exchange cartridge.remaining -= matter_exchange @@ -74,7 +73,7 @@ playsound(src.loc, 'sound/machines/click.ogg', 50, 1) to_chat(user, SPAN_NOTICE("The RCD now holds [stored_matter]/[max_stored_matter] matter-units.")) update_icon() - return + return TRUE if(isScrewdriver(W)) crafting = !crafting @@ -82,10 +81,9 @@ to_chat(user, SPAN_NOTICE("You reassemble the RCD")) else to_chat(user, SPAN_NOTICE("The RCD can now be modified.")) - src.add_fingerprint(user) - return + return TRUE - ..() + return ..() /obj/item/rcd/attack_self(mob/user) //Change the mode diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm index 80c89e05ab075..8e0e10975f119 100644 --- a/code/game/objects/items/weapons/RPD.dm +++ b/code/game/objects/items/weapons/RPD.dm @@ -167,13 +167,14 @@ GLOBAL_LIST_INIT(rpd_pipe_selection_skilled, list( interact(user) add_fingerprint(user) -/obj/item/rpd/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/pipe)) - if(!user.unEquip(W)) - return - recycle(W,user) - return - ..() +/obj/item/rpd/use_tool(obj/item/item, mob/living/user, list/click_params) + if(istype(item, /obj/item/pipe)) + if(!user.unEquip(item)) + FEEDBACK_UNEQUIP_FAILURE(user, item) + return TRUE + recycle(item,user) + return TRUE + return ..() /obj/item/rpd/proc/recycle(obj/item/W,mob/user) if(!user.skill_check(SKILL_ATMOS,SKILL_BASIC)) diff --git a/code/game/objects/items/weapons/candle/candle.dm b/code/game/objects/items/weapons/candle/candle.dm index 4b83b86b5e982..b90142daff3f3 100644 --- a/code/game/objects/items/weapons/candle/candle.dm +++ b/code/game/objects/items/weapons/candle/candle.dm @@ -35,10 +35,10 @@ if(lit) AddOverlays(overlay_image(icon, "[icon_state]_lit", flags=RESET_COLOR)) -/obj/item/flame/candle/attackby(obj/item/W as obj, mob/user as mob) - ..() +/obj/item/flame/candle/use_tool(obj/item/W, mob/living/user, list/click_params) if (isFlameOrHeatSource(W)) light(user) + return ..() /obj/item/flame/candle/resolve_attackby(atom/A, mob/user) . = ..() diff --git a/code/game/objects/items/weapons/cane.dm b/code/game/objects/items/weapons/cane.dm index afee7cbe331ba..2d18f0a3fff3e 100644 --- a/code/game/objects/items/weapons/cane.dm +++ b/code/game/objects/items/weapons/cane.dm @@ -90,15 +90,27 @@ else ..() -/obj/item/cane/concealed/attackby(obj/item/material/knife/folding/W, mob/user) - if(!src.concealed_blade && istype(W) && user.unEquip(W, src)) - user.visible_message(SPAN_WARNING("[user] has sheathed \a [W] into [src]!"), "You sheathe \the [W] into [src].") - src.concealed_blade = W +/obj/item/cane/concealed/use_tool(obj/item/item, mob/living/user, list/click_params) + if (istype(item, /obj/item/material/knife/folding)) + var/obj/item/material/knife/folding/blade = item + if (concealed_blade) + to_chat(user, SPAN_WARNING("\The [src] already contains a blade.")) + return TRUE + if (!user.unEquip(blade, src)) + FEEDBACK_UNEQUIP_FAILURE(user, blade) + return TRUE + + user.visible_message( + SPAN_WARNING("\The [user] has sheathed \a [blade] into \the [src]!"), + "You sheathe \the [blade] into \the [src]." + ) + concealed_blade = blade update_icon() user.update_inv_l_hand() user.update_inv_r_hand() - else - ..() + return TRUE + + return ..() /obj/item/cane/concealed/on_update_icon() if(concealed_blade) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 2862b1f50a63c..1592b640f949e 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -32,17 +32,19 @@ else to_chat(user, "It has a blank space for a signature.") -/obj/item/card/union/attackby(obj/item/thing, mob/user) +/obj/item/card/union/use_tool(obj/item/thing, mob/living/user, list/click_params) if(istype(thing, /obj/item/pen)) if(signed_by) to_chat(user, SPAN_WARNING("\The [src] has already been signed.")) + return TRUE else var/signature = sanitizeSafe(input("What do you want to sign the card as?", "Union Card") as text, MAX_NAME_LEN) if(signature && !signed_by && !user.incapacitated() && Adjacent(user)) signed_by = signature user.visible_message(SPAN_NOTICE("\The [user] signs \the [src] with a flourish.")) - return - ..() + return TRUE + + return ..() /obj/item/card/operant_card name = "operant registration card" @@ -114,11 +116,12 @@ detail_overlay.color = detail_color AddOverlays(detail_overlay) -/obj/item/card/data/attackby(obj/item/I, mob/living/user) - if(istype(I, /obj/item/device/integrated_electronics/detailer)) - var/obj/item/device/integrated_electronics/detailer/D = I - detail_color = D.detail_color +/obj/item/card/data/use_tool(obj/item/item, mob/living/user, list/click_params) + if (istype(item, /obj/item/device/integrated_electronics/detailer)) + var/obj/item/device/integrated_electronics/detailer/Det = item + detail_color = Det.detail_color update_icon() + return TRUE return ..() /obj/item/card/data/full_color diff --git a/code/game/objects/items/weapons/circuitboards/computer/research.dm b/code/game/objects/items/weapons/circuitboards/computer/research.dm index 9aa54e63ce942..fe62b22399c29 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/research.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/research.dm @@ -2,7 +2,7 @@ name = "circuit board (R&D control console)" build_path = /obj/machinery/computer/rdconsole/core -/obj/item/stock_parts/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob) +/obj/item/stock_parts/circuitboard/rdconsole/use_tool(obj/item/I, mob/living/user, list/click_params) if(isScrewdriver(I)) user.visible_message(SPAN_NOTICE("\The [user] adjusts the jumper on \the [src]'s access protocol pins."), SPAN_NOTICE("You adjust the jumper on the access protocol pins.")) if(src.build_path == /obj/machinery/computer/rdconsole/core) @@ -13,4 +13,5 @@ src.SetName("circuit board (RD Console)") src.build_path = /obj/machinery/computer/rdconsole/core to_chat(user, SPAN_NOTICE("Access protocols set to default.")) - return + return TRUE + return ..() diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 293380b9ca7b5..f84331d8aca00 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -84,19 +84,23 @@ M.put_in_any_hand_if_possible(src) -/obj/item/defibrillator/attackby(obj/item/W, mob/user, params) +/obj/item/defibrillator/use_tool(obj/item/W, mob/living/user, list/click_params) if(W == paddles) reattach_paddles(user) - else if(istype(W, /obj/item/cell)) + return TRUE + + else if (istype(W, /obj/item/cell)) if(bcell) - to_chat(user, SPAN_NOTICE("\the [src] already has a cell.")) - else - if(!user.unEquip(W)) - return - W.forceMove(src) - bcell = W - to_chat(user, SPAN_NOTICE("You install a cell in \the [src].")) - update_icon() + to_chat(user, SPAN_WARNING("\The [src] already has a cell.")) + return TRUE + if (!user.unEquip(W)) + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE + W.forceMove(src) + bcell = W + to_chat(user, SPAN_NOTICE("You install a cell in \the [src].")) + update_icon() + return TRUE else if(isScrewdriver(W)) if(bcell) @@ -105,8 +109,9 @@ bcell = null to_chat(user, SPAN_NOTICE("You remove the cell from \the [src].")) update_icon() - else - return ..() + return TRUE + + return ..() /obj/item/defibrillator/emag_act(uses, mob/user) if(paddles) diff --git a/code/game/objects/items/weapons/ecigs.dm b/code/game/objects/items/weapons/ecigs.dm index b44380dd2d7c1..0ad31f91d9607 100644 --- a/code/game/objects/items/weapons/ecigs.dm +++ b/code/game/objects/items/weapons/ecigs.dm @@ -147,14 +147,16 @@ M.update_inv_r_hand(1) -/obj/item/clothing/mask/smokable/ecig/attackby(obj/item/I, mob/user as mob) +/obj/item/clothing/mask/smokable/ecig/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/reagent_containers/ecig_cartridge)) if (ec_cartridge)//can't add second one - to_chat(user, "[SPAN_NOTICE("A cartridge has already been installed.")] ") - else if(user.unEquip(I, src))//fits in new one + to_chat(user, "[SPAN_WARNING("A cartridge has already been installed.")] ") + return TRUE + if (user.unEquip(I, src))//fits in new one ec_cartridge = I update_icon() to_chat(user, "[SPAN_NOTICE("You insert \the [I] into \the [src].")] ") + return TRUE if (isScrewdriver(I)) if(cigcell) //if contains powercell @@ -164,6 +166,7 @@ to_chat(user, SPAN_NOTICE("You remove \the [cigcell] from \the [src].")) else //does not contains cell to_chat(user, SPAN_NOTICE("There's no battery in \the [src].")) + return TRUE if(istype(I, /obj/item/cell/device)) if(!cigcell && user.unEquip(I)) @@ -173,6 +176,9 @@ update_icon() else to_chat(user, SPAN_NOTICE("\The [src] already has a battery installed.")) + return TRUE + + return ..() /obj/item/clothing/mask/smokable/ecig/attack_self(mob/user as mob) diff --git a/code/game/objects/items/weapons/electric_welder.dm b/code/game/objects/items/weapons/electric_welder.dm index c320977832172..b5147c35a8a59 100644 --- a/code/game/objects/items/weapons/electric_welder.dm +++ b/code/game/objects/items/weapons/electric_welder.dm @@ -45,9 +45,9 @@ var/obj/item/cell/cell = get_cell() return cell ? cell.charge : 0 -/obj/item/weldingtool/electric/attackby(obj/item/W, mob/user) +/obj/item/weldingtool/electric/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/stack/material/rods) || istype(W, /obj/item/welder_tank)) - return + return ..() if(isScrewdriver(W)) if(cell) cell.dropInto(get_turf(src)) @@ -58,8 +58,8 @@ update_icon() else to_chat(user, SPAN_WARNING("\The [src] has no cell installed.")) - return - else if(istype(W, /obj/item/cell)) + return TRUE + if(istype(W, /obj/item/cell)) if(cell) to_chat(user, SPAN_WARNING("\The [src] already has a cell installed.")) else if(user.unEquip(W)) @@ -67,8 +67,8 @@ cell.forceMove(src) to_chat(user, SPAN_NOTICE("You slot \the [cell] into \the [src].")) update_icon() - return - . = ..() + return TRUE + return ..() /obj/item/weldingtool/electric/burn_fuel(amount) spend_charge(amount * fuel_cost_multiplier) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 418fa60cee0ab..8c83a9ce156b9 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -24,14 +24,16 @@ wires = null return ..() -/obj/item/plastique/attackby(obj/item/I, mob/user) +/obj/item/plastique/use_tool(obj/item/I, mob/living/user, list/click_params) if(isScrewdriver(I)) open_panel = !open_panel to_chat(user, SPAN_NOTICE("You [open_panel ? "open" : "close"] the wire panel.")) - else if(isWirecutter(I) || isMultitool(I) || istype(I, /obj/item/device/assembly/signaler )) + return TRUE + if (isWirecutter(I) || isMultitool(I) || istype(I, /obj/item/device/assembly/signaler )) wires.Interact(user) + return TRUE else - ..() + return ..() /obj/item/plastique/attack_self(mob/user as mob) var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num @@ -91,7 +93,7 @@ target.CutOverlays(image_overlay) qdel(src) -/obj/item/plastique/proc/run_timer() //Basically exists so the C4 will beep when running. Better idea than putting sleeps in attackby. +/obj/item/plastique/proc/run_timer() set waitfor = 0 var/T = timer while(T > 0) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 13c05a7a06ad8..0b1367dfa559d 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -98,9 +98,8 @@ else return ..() -/obj/item/flamethrower/attackby(obj/item/W as obj, mob/user as mob) - if(user.stat || user.restrained() || user.lying) return - if(isWrench(W) && !status && !complete)//Taking this apart +/obj/item/flamethrower/use_tool(obj/item/W, mob/living/user, list/click_params) + if (isWrench(W) && !status && !complete) if(weldtool) weldtool.dropInto(loc) weldtool = null @@ -112,35 +111,39 @@ beaker = null new /obj/item/stack/material/rods(get_turf(src)) qdel(src) - return + return TRUE if(isScrewdriver(W) && igniter && !lit && !complete) status = !status to_chat(user, SPAN_NOTICE("\The [igniter] is now [status ? "secured" : "unsecured"]!")) update_icon() - return + return TRUE if(isigniter(W)) var/obj/item/device/assembly/igniter/I = W - if(I.secured) return - if(igniter) return + if (I.secured) + USE_FEEDBACK_FAILURE("The igniter is secured!") + return TRUE + if (igniter) + USE_FEEDBACK_FAILURE("\The [src] already has an igniter.") + return TRUE if(!user.unEquip(I, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, I) + return TRUE igniter = I update_icon() - return + return TRUE if (istype(W, /obj/item/reagent_containers) && W.is_open_container() && (W.w_class <= max_beaker)) if(user.unEquip(W, src)) if(beaker) beaker.forceMove(get_turf(src)) - to_chat(user, SPAN_NOTICE("You swap the fuel container in [src]!")) + to_chat(user, SPAN_NOTICE("You swap the fuel container in \the [src]!")) beaker = W update_icon() - return + return TRUE - ..() - return + return ..() /obj/item/flamethrower/attack_self(mob/user as mob) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index df3bb750f5816..f2fd736449815 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -46,17 +46,18 @@ C.throw_mode_on() -/obj/item/grenade/chem_grenade/attackby(obj/item/W, mob/user) +/obj/item/grenade/chem_grenade/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/device/assembly_holder) && (!stage || stage==1) && path != 2) var/obj/item/device/assembly_holder/det = W if(istype(det.a_left,det.a_right.type) || (!isigniter(det.a_left) && !isigniter(det.a_right))) to_chat(user, SPAN_WARNING("Assembly must contain one igniter.")) - return + return TRUE if(!det.secured) to_chat(user, SPAN_WARNING("Assembly must be secured with screwdriver.")) - return + return TRUE if(!user.unEquip(det, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, det) + return TRUE path = 1 log_and_message_admins("has attached \a [W] to \the [src].") to_chat(user, SPAN_NOTICE("You add [W] to the metal casing.")) @@ -71,6 +72,8 @@ icon_state = initial(icon_state) +"_ass" SetName("unsecured grenade with [length(beakers)] containers[detonator?" and detonator":""]") stage = 1 + return TRUE + else if(isScrewdriver(W) && path != 2) if(stage == 1) path = 1 @@ -78,17 +81,18 @@ to_chat(user, SPAN_NOTICE("You lock the assembly.")) SetName("grenade") else -// to_chat(user, SPAN_WARNING("You need to add at least one beaker before locking the assembly.")) to_chat(user, SPAN_NOTICE("You lock the empty assembly.")) SetName("fake grenade") playsound(loc, 'sound/items/Screwdriver.ogg', 25, -3) icon_state = initial(icon_state) +"_locked" stage = 2 + return TRUE + else if(stage == 2) if(active && prob(95)) to_chat(user, SPAN_WARNING("You trigger the assembly!")) detonate() - return + return TRUE else to_chat(user, SPAN_NOTICE("You unlock the assembly.")) playsound(loc, 'sound/items/Screwdriver.ogg', 25, -3) @@ -96,21 +100,28 @@ icon_state = initial(icon_state) + (detonator?"_ass":"") stage = 1 active = 0 + return TRUE + else if(is_type_in_list(W, allowed_containers) && (!stage || stage==1) && path != 2) path = 1 if(length(beakers) == 2) to_chat(user, SPAN_WARNING("The grenade can not hold more containers.")) - return + return TRUE else if(W.reagents.total_volume) if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE to_chat(user, SPAN_NOTICE("You add \the [W] to the assembly.")) beakers += W stage = 1 SetName("unsecured grenade with [length(beakers)] containers[detonator?" and detonator":""]") + return TRUE else to_chat(user, SPAN_WARNING("\The [W] is empty.")) + return TRUE + + return ..() /obj/item/grenade/chem_grenade/activate(mob/user) diff --git a/code/game/objects/items/weapons/grenades/explosive.dm b/code/game/objects/items/weapons/grenades/explosive.dm index 8aca364165072..38a8613ecaaa4 100644 --- a/code/game/objects/items/weapons/grenades/explosive.dm +++ b/code/game/objects/items/weapons/grenades/explosive.dm @@ -131,10 +131,11 @@ det_time = rand(5,100) // Fuse is randomized. . = ..() -/obj/item/grenade/frag/makeshift/attackby(obj/item/W, mob/user) +/obj/item/grenade/frag/makeshift/use_tool(obj/item/W, mob/living/user, list/click_params) if(isScrewdriver(W)) //overrides the act to screwdrive a grenade to set its fuse. to_chat(user, SPAN_WARNING("You can't adjust the timer on \the [src]!")) return TRUE + if (is_type_in_list(W, possible_reinforcements)) if(shrapnel_reinforced<10) //you can only add 10 items inside the can user.visible_message( @@ -148,4 +149,5 @@ else to_chat(user, SPAN_WARNING("You can't add any more items to \the [src]!")) return TRUE + return ..() diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 413d3045059fb..2f41213a9b2d9 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -63,7 +63,7 @@ if(T) T.hotspot_expose(700,125) -/obj/item/grenade/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/grenade/use_tool(obj/item/W, mob/living/user, list/click_params) if(isScrewdriver(W)) switch(det_time) if (1) @@ -78,8 +78,8 @@ if (50) det_time = 1 to_chat(user, SPAN_NOTICE("You set the [name] for instant detonation.")) - add_fingerprint(user) - ..() + return TRUE + return ..() /obj/item/grenade/attack_hand() walk(src, null, null) diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm index 00257f4eb54af..8597f1668efa3 100644 --- a/code/game/objects/items/weapons/implants/implantcase.dm +++ b/code/game/objects/items/weapons/implants/implantcase.dm @@ -33,13 +33,13 @@ icon_state = "implantcase-0" return -/obj/item/implantcase/attackby(obj/item/I, mob/user) +/obj/item/implantcase/use_tool(obj/item/I, mob/living/user, list/click_params) if (istype(I, /obj/item/pen)) var/t = input(user, "What would you like the label to be?", src.name, null) if (user.get_active_hand() != I) - return + return TRUE if((!in_range(src, usr) && loc != user)) - return + return TRUE t = sanitizeSafe(t, MAX_NAME_LEN) if(t) SetName("glass case - '[t]'") @@ -47,9 +47,13 @@ else SetName(initial(name)) desc = "A case containing an implant." + return TRUE + else if(istype(I, /obj/item/reagent_containers/syringe)) if(istype(imp,/obj/item/implant/chem)) - imp.attackby(I,user) + imp.use_tool(I,user) + return TRUE + else if (istype(I, /obj/item/implanter)) var/obj/item/implanter/M = I if (M.imp && !imp && !M.imp.implanted) @@ -63,10 +67,13 @@ update_description() update_icon() M.update_icon() + return TRUE + else if (istype(I, /obj/item/implant) && user.unEquip(I, src)) to_chat(usr, SPAN_NOTICE("You slide \the [I] into \the [src].")) imp = I update_description() update_icon() - else - return ..() + return TRUE + + return ..() diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 9b5aac1371767..7fc43a71bdf8b 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -34,13 +34,14 @@ return 1 return 0 -/obj/item/implanter/attackby(obj/item/I, mob/user) +/obj/item/implanter/use_tool(obj/item/I, mob/living/user, list/click_params) if(!imp && istype(I, /obj/item/implant) && user.unEquip(I,src)) to_chat(usr, SPAN_NOTICE("You slide \the [I] into \the [src].")) imp = I update_icon() - else - ..() + return TRUE + + return ..() /obj/item/implanter/use_before(mob/M as mob, mob/user as mob) . = FALSE diff --git a/code/game/objects/items/weapons/implants/implantpad.dm b/code/game/objects/items/weapons/implants/implantpad.dm index 7364ad11a351d..24626ae189259 100644 --- a/code/game/objects/items/weapons/implants/implantpad.dm +++ b/code/game/objects/items/weapons/implants/implantpad.dm @@ -26,8 +26,7 @@ else return ..() -/obj/item/implantpad/attackby(obj/item/I, mob/user) - ..() +/obj/item/implantpad/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/implantcase)) var/obj/item/implantcase/C = I if(!imp && C.imp) @@ -39,6 +38,9 @@ C.imp = imp imp = null C.update_icon() + update_icon() + return TRUE + else if(istype(I, /obj/item/implanter)) var/obj/item/implanter/C = I if(!imp && C.imp) @@ -50,9 +52,15 @@ C.imp = imp imp = null C.update_icon() + update_icon() + return TRUE + else if(istype(I, /obj/item/implant) && user.unEquip(I, src)) imp = I - update_icon() + update_icon() + return TRUE + + return ..() /obj/item/implantpad/attack_self(mob/user) if (imp) diff --git a/code/game/objects/items/weapons/implants/implants/chem.dm b/code/game/objects/items/weapons/implants/implants/chem.dm index 11de6dddc1891..2861dd06520f3 100644 --- a/code/game/objects/items/weapons/implants/implants/chem.dm +++ b/code/game/objects/items/weapons/implants/implants/chem.dm @@ -33,16 +33,18 @@ reagents.trans_to_mob(R, amount, CHEM_BLOOD) to_chat(R, SPAN_NOTICE("You hear a faint *beep*.")) -/obj/item/implant/chem/attackby(obj/item/I, mob/user) +/obj/item/implant/chem/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/reagent_containers/syringe)) if(reagents.total_volume >= reagents.maximum_volume) to_chat(user, SPAN_WARNING("\The [src] is full.")) + return TRUE else if(do_after(user, 0.5 SECONDS, src, DO_MEDICAL)) I.reagents.trans_to_obj(src, 5) to_chat(user, SPAN_NOTICE("You inject 5 units of the solution. The syringe now contains [I.reagents.total_volume] units.")) - else - ..() + return TRUE + + return ..() /obj/item/implantcase/chem name = "glass case - 'chem'" diff --git a/code/game/objects/items/weapons/implants/implants/compressed.dm b/code/game/objects/items/weapons/implants/implants/compressed.dm index 33b85558c1d7a..bd1fbd9e0d764 100644 --- a/code/game/objects/items/weapons/implants/implants/compressed.dm +++ b/code/game/objects/items/weapons/implants/implants/compressed.dm @@ -56,7 +56,7 @@ if (isnull(c.scanned)) to_chat(user, "Please compress an object with the implanter first.") return TRUE - else return ..() + return ..() /obj/item/implanter/compressed/use_after(obj/item/A, mob/living/user, click_parameters) if(istype(A) && imp) diff --git a/code/game/objects/items/weapons/lighter.dm b/code/game/objects/items/weapons/lighter.dm index e7aa087978d9c..01f503f9046f5 100644 --- a/code/game/objects/items/weapons/lighter.dm +++ b/code/game/objects/items/weapons/lighter.dm @@ -84,7 +84,7 @@ if (istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == BP_MOUTH) var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask if (M == user) - cig.attackby(src, user) + cig.use_tool(src, user) else cig.light(SPAN_NOTICE("[user] holds the [name] out for [M], and lights the [cig.name].")) return TRUE diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm index cb8fc54180947..0565aa0b5cb8e 100644 --- a/code/game/objects/items/weapons/material/ashtray.dm +++ b/code/game/objects/items/weapons/material/ashtray.dm @@ -26,18 +26,15 @@ else if (length(contents) >= max_butts/2) AddOverlays(image('icons/obj/ashtray.dmi',"ashtray_half")) -/obj/item/material/ashtray/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/material/ashtray/use_tool(obj/item/W, mob/living/user, list/click_params) if (health_dead()) - return - - if (user.a_intent == I_HURT) - ..() - return + USE_FEEDBACK_FAILURE("\The [src] is damaged beyond use!") + return TRUE if (istype(W,/obj/item/trash/cigbutt) || istype(W,/obj/item/clothing/mask/smokable/cigarette) || istype(W, /obj/item/flame/match)) if (length(contents) >= max_butts) to_chat(user, "\The [src] is full.") - return + return TRUE if (istype(W,/obj/item/clothing/mask/smokable/cigarette)) var/obj/item/clothing/mask/smokable/cigarette/cig = W @@ -51,9 +48,9 @@ visible_message("[user] places [W] in [src].") set_extension(src, /datum/extension/scent/ashtray) update_icon() - return + return TRUE - ..() + return ..() /obj/item/material/ashtray/throw_impact(atom/hit_atom) if (get_max_health()) diff --git a/code/game/objects/items/weapons/material/coins.dm b/code/game/objects/items/weapons/material/coins.dm index 820f8b577f01c..c650131325f22 100644 --- a/code/game/objects/items/weapons/material/coins.dm +++ b/code/game/objects/items/weapons/material/coins.dm @@ -80,7 +80,7 @@ ) -/obj/item/material/coin/attackby(obj/item/item, mob/living/user) +/obj/item/material/coin/use_tool(obj/item/item, mob/living/user, list/click_params) if (isCoil(item) && isnull(string_color)) var/obj/item/stack/cable_coil/coil = item if (!coil.use(1)) @@ -94,6 +94,7 @@ string_color = coil.color update_icon() return TRUE + if (isWirecutter(item) && !isnull(string_color)) new /obj/item/stack/cable_coil (get_turf(user), 1, string_color) user.visible_message( @@ -104,7 +105,7 @@ string_color = null update_icon() return TRUE - ..() + return ..() /// Non-craftable coins intented to display specific imagery. /obj/item/material/coin/challenge diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index 27cab3fbd64b3..c2b4d14e4ff16 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -47,13 +47,15 @@ color = "#ffffff" alpha = 255 -/obj/item/material/shard/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/material/shard/use_tool(obj/item/W, mob/living/user, list/click_params) if(isWelder(W) && material.shard_can_repair) var/obj/item/weldingtool/WT = W - if(WT.remove_fuel(1, user)) - material.place_sheet(get_turf(src)) - qdel(src) - return + if (!WT.can_use(1, user)) + return TRUE + WT.remove_fuel(1, user) + material.place_sheet(get_turf(src)) + qdel(src) + return TRUE return ..() /obj/item/material/shard/Crossed(AM as mob|obj) diff --git a/code/game/objects/items/weapons/material/stick.dm b/code/game/objects/items/weapons/material/stick.dm index b09fa3bc030bd..17b13e47ec578 100644 --- a/code/game/objects/items/weapons/material/stick.dm +++ b/code/game/objects/items/weapons/material/stick.dm @@ -17,12 +17,16 @@ shatter(0) -/obj/item/material/stick/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/material/stick/use_tool(obj/item/W, mob/living/user, list/click_params) if(W.sharp && W.edge && !sharp) - user.visible_message(SPAN_WARNING("[user] sharpens [src] with [W]."), SPAN_WARNING("You sharpen [src] using [W].")) + user.visible_message( + SPAN_WARNING("\The [user] sharpens \the [src] with \the [W]."), + SPAN_WARNING("You sharpen \the [src] using \the [W].") + ) sharp = TRUE SetName("sharpened " + name) update_force() + return TRUE return ..() diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index 765cf0962c2a8..72927288af846 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -332,7 +332,9 @@ var/global/list/tape_roll_applications = list() crumple() return ..(mover) -/obj/item/tape/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/tape/use_tool(obj/item/item, mob/living/user, list/click_params) + if (user.a_intent == I_HELP) + return ..() breaktape(user) /obj/item/tape/attack_hand(mob/user as mob) diff --git a/code/game/objects/items/weapons/scrubpack.dm b/code/game/objects/items/weapons/scrubpack.dm index d9f589dba8347..ad9c0eb0cfd82 100644 --- a/code/game/objects/items/weapons/scrubpack.dm +++ b/code/game/objects/items/weapons/scrubpack.dm @@ -74,7 +74,7 @@ display = "[display]%" to_chat(user, "\The [cell] charge is [display]") -/obj/item/scrubpack/attackby(obj/item/W, mob/user) +/obj/item/scrubpack/use_tool(obj/item/W, mob/living/user, list/click_params) if (istype(W, /obj/item/cell)) if (cell) to_chat(user, SPAN_WARNING("\The [src] already has \an [cell].")) @@ -83,7 +83,8 @@ to_chat(user, SPAN_WARNING("\The [W] is too small for \the [src].")) return TRUE if (!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE user.visible_message( SPAN_ITALIC("\The [user] fits \the [W] to \the [src]."), SPAN_ITALIC("You fit \the [W] to \the [src]."), @@ -101,7 +102,8 @@ to_chat(user, SPAN_WARNING("\The [src] can't fit \a [W].")) return TRUE if (!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE user.visible_message( SPAN_ITALIC("\The [user] fits \the [W] to \the [src]."), SPAN_ITALIC("You fit \the [W] to \the [src]."), @@ -147,7 +149,7 @@ playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) return TRUE - . = ..() + return ..() /obj/item/scrubpack/attack_self(mob/user) toggle(user) diff --git a/code/game/objects/items/weapons/secrets_disk.dm b/code/game/objects/items/weapons/secrets_disk.dm index 6bfe6c74f9cac..d7a8f23f377d7 100644 --- a/code/game/objects/items/weapons/secrets_disk.dm +++ b/code/game/objects/items/weapons/secrets_disk.dm @@ -41,7 +41,7 @@ Your sequencer can't break the code.")) return 0 -/obj/item/disk/secret_project/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/disk/secret_project/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/card/id)) var/obj/item/card/id/ID = W if(check_access(ID)) @@ -49,8 +49,8 @@ to_chat(user, SPAN_NOTICE("You swipe your card and [locked ? "lock":"unlock"] the disk.")) else to_chat(user, SPAN_WARNING("The disk's screen flashes 'Access Denied'.")) - return - . = ..() + return TRUE + return ..() /obj/item/disk/secret_project/verb/change_codename() set name = "Change project codename" diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 64e1703538d3c..6e11c5b8a3da6 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -89,14 +89,15 @@ return base_block_chance -/obj/item/shield/riot/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/shield/riot/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/melee/baton)) if(cooldown < world.time - 25) - user.visible_message(SPAN_WARNING("[user] bashes [src] with [W]!")) + user.visible_message(SPAN_WARNING("\The [user] bashes \the [src] with \the [W]!")) playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1) cooldown = world.time + return TRUE else - ..() + return ..() /obj/item/shield/riot/metal diff --git a/code/game/objects/items/weapons/soap.dm b/code/game/objects/items/weapons/soap.dm index 70d592aea9772..e8294fe9f94dd 100644 --- a/code/game/objects/items/weapons/soap.dm +++ b/code/game/objects/items/weapons/soap.dm @@ -167,15 +167,17 @@ user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) //prevent spam return TRUE -/obj/item/soap/attackby(obj/item/I, mob/user) +/obj/item/soap/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/key)) if(!key_data) to_chat(user, SPAN_NOTICE("You imprint \the [I] into \the [src].")) var/obj/item/key/K = I key_data = K.key_data update_icon() - return - ..() + else + USE_FEEDBACK_FAILURE("\The [src] already has a key imprint!") + return TRUE + return ..() /obj/item/soap/on_update_icon() ClearOverlays() diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 7454eb21dbef7..4b07a945f8f3b 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -476,11 +476,11 @@ anchored = i ? TRUE : FALSE alpha = i ? 128 : initial(alpha) -/obj/item/storage/backpack/satchel/flat/attackby(obj/item/W, mob/user) +/obj/item/storage/backpack/satchel/flat/use_tool(obj/item/tool, mob/living/user, list/click_params) var/turf/T = get_turf(src) if(hides_under_flooring() && isturf(T) && !T.is_plating()) to_chat(user, SPAN_WARNING("You must remove the plating first.")) - return 1 + return TRUE return ..() //ERT backpacks. diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index d34f3bacb3e60..def5b13648166 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -66,11 +66,11 @@ desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage." icon_state = "bluetrashbag" -/obj/item/storage/bag/trash/bluespace/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/storage/bag/trash/bluespace/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/storage/backpack/holding) || istype(W, /obj/item/storage/bag/trash/bluespace)) to_chat(user, SPAN_WARNING("The Bluespace interfaces of the two devices conflict and malfunction.")) qdel(W) - return 1 + return TRUE return ..() // ----------------------------- diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 4552132208e2e..ac7961cd79b38 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -88,9 +88,9 @@ A.reagents.add_reagent(/datum/reagent/water/holywater,water2holy) return TRUE -/obj/item/storage/bible/attackby(obj/item/W as obj, mob/user as mob) - if (src.use_sound) - playsound(src.loc, src.use_sound, 50, 1, -5) +/obj/item/storage/bible/use_tool(obj/item/W, mob/living/user, list/click_params) + if (use_sound) + playsound(loc, use_sound, 50, 1, -5) return ..() /obj/item/storage/bible/attack_self(mob/living/carbon/human/user) diff --git a/code/game/objects/items/weapons/storage/fancy/matchbox.dm b/code/game/objects/items/weapons/storage/fancy/matchbox.dm index a503f9a4df1a6..6e9b8296a6e03 100644 --- a/code/game/objects/items/weapons/storage/fancy/matchbox.dm +++ b/code/game/objects/items/weapons/storage/fancy/matchbox.dm @@ -26,16 +26,19 @@ startswith = list(/obj/item/flame/match = 3) -/obj/item/storage/fancy/matches/attackby(obj/item/flame/match/W as obj, mob/user as mob) - if(istype(W) && !W.lit && !W.burnt) +/obj/item/storage/fancy/matches/use_tool(obj/item/item, mob/living/user, list/click_params) + if (!istype(item, /obj/item/flame/match)) + return ..() + var/obj/item/flame/match/W = item + if(!W.lit && !W.burnt) W.lit = TRUE W.damtype = INJURY_TYPE_BURN W.icon_state = "match_lit" START_PROCESSING(SSobj, W) playsound(loc, 'sound/items/match.ogg', 60, 1, -4) - user.visible_message(SPAN_NOTICE("[user] strikes the match on \the [src].")) + user.visible_message(SPAN_NOTICE("\The [user] strikes the match on \the [src].")) W.update_icon() - return + return TRUE ///Exclusive to larger matchboxes; as cigarette boxes and matchbooks have one sprite per removed item while these do not. diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 1210c40c87bcc..b168975bc08a4 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -22,7 +22,7 @@ //Helper procs to cleanly implement internal storages - storage items that provide inventory slots for other items. //These procs are completely optional, it is up to the master item to decide when it's storage get's opened by calling open() //However they are helpful for allowing the master item to pretend it is a storage item itself. -//If you are using these you will probably want to override attackby() as well. +//If you are using these you will probably want to override use_tool() as well. //See /obj/item/clothing/suit/storage for an example. //items that use internal storage have the option of calling this to emulate default storage MouseDrop behaviour. diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index fce04a5eaee55..096bc9be7fef5 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -15,7 +15,7 @@ var/icon_broken = "lockbox+b" -/obj/item/storage/lockbox/attackby(obj/item/I, mob/user) +/obj/item/storage/lockbox/use_tool(obj/item/I, mob/living/user, list/click_params) if (istype(I, /obj/item/card/id)) if (broken) to_chat(user, SPAN_WARNING("It seems to be broken!")) @@ -27,8 +27,9 @@ else icon_state = icon_closed to_chat(user, SPAN_NOTICE("You lock \the [src]!")) - return - else if (!broken && istype(I, /obj/item/melee/energy/blade)) + return TRUE + + if (!broken && istype(I, /obj/item/melee/energy/blade)) var/success = emag_act(INFINITY, user, I, null, "You hear metal being sliced and sparks flying.") if (success) var/datum/effect/spark_spread/spark_system = new @@ -36,10 +37,12 @@ spark_system.start() playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) playsound(loc, "sparks", 50, 1) + return TRUE + if (locked) to_chat(user, SPAN_WARNING("It's locked!")) - return - ..() + return TRUE + return ..() /obj/item/storage/lockbox/show_to(mob/user) @@ -113,6 +116,6 @@ AddOverlays(image(icon, src, "ledb")) return -/obj/item/storage/lockbox/vials/attackby(obj/item/item, mob/living/user) +/obj/item/storage/lockbox/vials/use_tool(obj/item/W, mob/living/user, list/click_params) . = ..() update_icon() diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index b57d6517fe085..6838097e2186d 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -339,22 +339,6 @@ return ..() -///Eventually should be deleted in favor of use_tool; keeping duplicate until downstream attackbys are replaced. -/obj/item/storage/attackby(obj/item/W, mob/living/user, click_params) - if (SSfabrication.try_craft_with(src, W, user)) - return TRUE - - if (isrobot(user) && (W == user.get_active_hand())) - return //Robots can't store their modules. - - if (!can_be_inserted(W, user)) - return TRUE - - if (handle_item_insertion(W)) - return TRUE - - return ..() - /obj/item/storage/attack_hand(mob/user as mob) if(ishuman(user)) var/mob/living/carbon/human/H = user diff --git a/code/game/objects/items/weapons/storage/wall_mirror.dm b/code/game/objects/items/weapons/storage/wall_mirror.dm index d8eb95d984290..87893f8d55b19 100644 --- a/code/game/objects/items/weapons/storage/wall_mirror.dm +++ b/code/game/objects/items/weapons/storage/wall_mirror.dm @@ -51,7 +51,7 @@ shatter() ..() -/obj/item/storage/mirror/attackby(obj/item/I, mob/user) +/obj/item/storage/mirror/use_tool(obj/item/I, mob/living/user, list/click_params) . = ..() if (!.) return diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 3feb81a4a1221..fce758c8b486c 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -78,25 +78,28 @@ if(!bcell) to_chat(user, SPAN_WARNING("The baton does not have a power source installed.")) -/obj/item/melee/baton/attackby(obj/item/W, mob/user) +/obj/item/melee/baton/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/cell/device)) if(!bcell && user.unEquip(W)) W.forceMove(src) bcell = W - to_chat(user, SPAN_NOTICE("You install a cell into the [src].")) + to_chat(user, SPAN_NOTICE("You install a cell into \the [src].")) update_icon() else - to_chat(user, SPAN_NOTICE("[src] already has a cell.")) + to_chat(user, SPAN_NOTICE("\The [src] already has a cell.")) + return TRUE + else if(isScrewdriver(W)) if(bcell) bcell.update_icon() bcell.dropInto(loc) bcell = null - to_chat(user, SPAN_NOTICE("You remove the cell from the [src].")) + to_chat(user, SPAN_NOTICE("You remove the cell from \the [src].")) status = 0 update_icon() + return TRUE else - ..() + return ..() /obj/item/melee/baton/attack_self(mob/user) set_status(!status, user) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 6c46316a95145..720705b301bf4 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -108,16 +108,15 @@ var/global/list/tank_gauge_cache = list() descriptive = "bitterly cold" to_chat(user, SPAN_ITALIC("\The [src] feels [descriptive].")) -/obj/item/tank/attackby(obj/item/W, mob/user) - ..() +/obj/item/tank/use_tool(obj/item/W, mob/living/user, list/click_params) if (istype(loc, /obj/item/assembly)) icon = loc + return TRUE if (istype(W, /obj/item/device/scanner/gas)) - return + return ..() if (isScrewdriver(W)) - add_fingerprint(user) user.visible_message( SPAN_ITALIC("\The [user] starts to use \the [W] on \the [src]."), SPAN_ITALIC("You start to force \the [src]'s emergency relief valve with \the [W]."), @@ -126,38 +125,36 @@ var/global/list/tank_gauge_cache = list() ) if (GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) to_chat(user, SPAN_WARNING("The valve is stuck. You can't move it at all!")) - return + return TRUE var/reduction = round(user.get_skill_value(SKILL_ATMOS) * 0.5) //0,1,1,2,2 if (do_after(user, (5 - reduction) SECONDS, src, DO_PUBLIC_UNIQUE)) if (GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) to_chat(user, SPAN_WARNING("The valve is stuck. You can't move it at all!")) - return + return TRUE FLIP_FLAGS(tank_flags, TANK_FLAG_FORCED) to_chat(user, SPAN_NOTICE("You finish forcing the valve [GET_FLAGS(tank_flags, TANK_FLAG_FORCED) ? "open" : "closed"].")) - return + return TRUE if (istype(W,/obj/item/latexballon)) - add_fingerprint(user) var/obj/item/latexballon/LB = W LB.blow(src) + return TRUE if(isCoil(W)) if (GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) to_chat(user, SPAN_WARNING("\The [src] is already wired.")) + return TRUE else - add_fingerprint(user) var/obj/item/stack/cable_coil/C = W var/single = C.get_amount() == 1 if(C.use(1)) SET_FLAGS(tank_flags, TANK_FLAG_WIRED) to_chat(user, SPAN_NOTICE("You attach [single ? "" : "some of "]\the [C] to \the [src].")) update_icon(TRUE) - return + return TRUE if(isWirecutter(W)) - add_fingerprint(user) if(GET_FLAGS(tank_flags, TANK_FLAG_WIRED) && proxyassembly.assembly) - to_chat(user, SPAN_NOTICE("You carefully begin clipping the wires that attach to the tank.")) if(do_after(user, 10 SECONDS, src)) CLEAR_FLAGS(tank_flags, TANK_FLAG_WIRED) @@ -176,48 +173,54 @@ var/global/list/tank_gauge_cache = list() proxyassembly.assembly = null qdel(assy) update_icon(TRUE) + return TRUE else to_chat(user, SPAN_DANGER("You slip and bump the igniter!")) if(prob(85)) proxyassembly.receive_signal() + return TRUE else if(GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) if(do_after(user, (W.toolspeed * 1) SECOND, src, DO_PUBLIC_UNIQUE)) to_chat(user, SPAN_NOTICE("You quickly clip the wire from the tank.")) CLEAR_FLAGS(tank_flags, TANK_FLAG_WIRED) update_icon(TRUE) + return TRUE else to_chat(user, SPAN_NOTICE("There are no wires to cut!")) + return TRUE if(istype(W, /obj/item/device/assembly_holder)) if(GET_FLAGS(tank_flags, TANK_FLAG_WIRED)) - add_fingerprint(user) to_chat(user, SPAN_NOTICE("You begin attaching the assembly to \the [src].")) if(do_after(user, 5 SECONDS, src, DO_PUBLIC_UNIQUE)) to_chat(user, SPAN_NOTICE("You finish attaching the assembly to \the [src].")) GLOB.bombers += "[key_name(user)] attached an assembly to a wired [src]. Temp: [air_contents.temperature-T0C]" log_and_message_admins("attached an assembly to a wired [src]. Temp: [air_contents.temperature-T0C]", user) assemble_bomb(W,user) + return TRUE else to_chat(user, SPAN_NOTICE("You stop attaching the assembly.")) + return TRUE else to_chat(user, SPAN_NOTICE("You need to wire the device up first.")) + return TRUE if(isWelder(W)) var/obj/item/weldingtool/WT = W if (GET_FLAGS(tank_flags, TANK_FLAG_FORCED)) to_chat(user, SPAN_WARNING("\The [src]'s emergency relief valve must be closed before you can weld it shut!")) - return + return TRUE if(WT.can_use(1,user)) - add_fingerprint(user) if(!GET_FLAGS(tank_flags, TANK_FLAG_WELDED)) to_chat(user, SPAN_NOTICE("You begin welding the \the [src] emergency pressure relief valve.")) if(do_after(user, (W.toolspeed * 4) SECONDS, src, DO_PUBLIC_UNIQUE) && WT.remove_fuel(1, user)) to_chat(user, "[SPAN_NOTICE("You carefully weld \the [src] emergency pressure relief valve shut.")][SPAN_WARNING(" \The [src] may now rupture under pressure!")]") SET_FLAGS(tank_flags, TANK_FLAG_WELDED) CLEAR_FLAGS(tank_flags, TANK_FLAG_LEAKING) + return TRUE else GLOB.bombers += "[key_name(user)] attempted to weld a [src]. [air_contents.temperature-T0C]" log_and_message_admins("attempted to weld a [src]. [air_contents.temperature-T0C]", user) @@ -226,8 +229,11 @@ var/global/list/tank_gauge_cache = list() maxintegrity -= rand(2,6) integrity = min(integrity,maxintegrity) air_contents.add_thermal_energy(rand(2000,50000)) + return TRUE else to_chat(user, SPAN_NOTICE("The emergency pressure relief valve has already been welded.")) + return TRUE + return ..() /obj/item/tank/attack_self(mob/user as mob) add_fingerprint(user) diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 64ba59cab02c1..a884004f1cfde 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -71,7 +71,7 @@ else if (user.zone_sel.selecting == BP_CHEST) if (H.wear_suit && istype(H.wear_suit, /obj/item/clothing/suit/space)) - H.wear_suit.attackby(src, user)//everything is handled by attackby + H.wear_suit.use_tool(src, user) else to_chat(user, SPAN_WARNING("\The [H] isn't wearing a spacesuit for you to reseal.")) return TRUE diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm index c669ae4125291..f91a380206beb 100644 --- a/code/game/objects/items/weapons/tools/weldingtool.dm +++ b/code/game/objects/items/weapons/tools/weldingtool.dm @@ -47,10 +47,10 @@ else to_chat(user, (distance <= 1 ? "It has [get_fuel()] [welding_resource] remaining. " : "") + "[tank] is attached.") -/obj/item/weldingtool/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/weldingtool/use_tool(obj/item/W, mob/living/user, list/click_params) if(welding) - to_chat(user, SPAN_DANGER("Stop welding first!")) - return + to_chat(user, SPAN_WARNING("Stop welding first!")) + return TRUE if(isScrewdriver(W)) status = !status @@ -59,8 +59,7 @@ else to_chat(user, SPAN_NOTICE("The welder can now be attached and modified.")) playsound(src, 'sound/items/Screwdriver.ogg', 10, 1) - src.add_fingerprint(user) - return + return TRUE if((!status) && (istype(W,/obj/item/stack/material/rods))) var/obj/item/stack/material/rods/R = W @@ -69,27 +68,27 @@ user.drop_from_inventory(src, F) F.weldtool = src master = F - add_fingerprint(user) - return + return TRUE if (istype(W, /obj/item/welder_tank)) if (tank) to_chat(user, SPAN_WARNING("\The [src] already has a tank attached - remove it first.")) - return + return TRUE if (user.get_active_hand() != src && user.get_inactive_hand() != src) to_chat(user, SPAN_WARNING("You must hold the welder in your hands to attach a tank.")) - return + return TRUE if (!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE tank = W - user.visible_message("[user] slots \a [W] into \the [src].", "You slot \a [W] into \the [src].") + user.visible_message("\The [user] slots \a [W] into \the [src].", "You slot \a [W] into \the [src].") w_class = tank.size_in_use force = tank.unlit_force playsound(src, 'sound/items/cap_close.ogg', 10, 1) update_icon() - return + return TRUE - ..() + return ..() /obj/item/weldingtool/attack_hand(mob/user as mob) diff --git a/code/game/objects/items/weapons/trays.dm b/code/game/objects/items/weapons/trays.dm index cab6ee8520011..e13cd9a0cbebc 100644 --- a/code/game/objects/items/weapons/trays.dm +++ b/code/game/objects/items/weapons/trays.dm @@ -47,14 +47,14 @@ // Bash a rolling pin against a tray like a true knight! -/obj/item/tray/attackby(obj/item/W, mob/living/user) - if(istype(W, /obj/item/material/kitchen/rollingpin) && user.a_intent == I_HURT) +/obj/item/tray/use_tool(obj/item/W, mob/living/user, list/click_params) + if(istype(W, /obj/item/material/kitchen/rollingpin)) if(bash_cooldown < world.time) user.visible_message(SPAN_WARNING("[user] bashes [src] with [W]!")) playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1) bash_cooldown = world.time + 25 return TRUE - else if (user.a_intent != I_HURT && !istype(W, /obj/item/projectile) && !istype(W, /obj/item/clothing)) + if (!istype(W, /obj/item/projectile) && !istype(W, /obj/item/clothing)) if (calc_carry() + storage_cost_for_item(W) > max_carry) to_chat(user, SPAN_WARNING("\The [src] can't fit \the [W]!")) else if (!can_add_item(W)) @@ -64,8 +64,8 @@ user.drop_item() pickup_item(W) return TRUE - else - . = ..() + + return ..() // Returns the space an object takes up on the tray. Non-food takes up double! diff --git a/code/game/objects/items/weapons/weldbackpack.dm b/code/game/objects/items/weapons/weldbackpack.dm index 1495e0fe25a20..37ebdca4fa58f 100644 --- a/code/game/objects/items/weapons/weldbackpack.dm +++ b/code/game/objects/items/weapons/weldbackpack.dm @@ -59,7 +59,7 @@ playsound(loc, 'sound/effects/refill.ogg', 50, 1, -6) return TRUE - else return ..() + return ..() /obj/item/storage/backpack/weldpack/use_after(obj/O, mob/living/user, click_parameters) if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume < max_fuel) diff --git a/code/game/objects/structures/drain.dm b/code/game/objects/structures/drain.dm index a994317b3c6ea..feb91656ef254 100644 --- a/code/game/objects/structures/drain.dm +++ b/code/game/objects/structures/drain.dm @@ -62,7 +62,7 @@ icon_state = "drain" var/constructed_type = /obj/structure/hygiene/drain -/obj/item/drain/attackby(obj/item/thing, mob/user) +/obj/item/drain/use_tool(obj/item/thing, mob/living/user, list/click_params) if(isWrench(thing)) if (!isturf(loc)) USE_FEEDBACK_FAILURE("\The [src] needs to be placed on the floor before you can secure it.") @@ -71,7 +71,7 @@ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) to_chat(user, SPAN_WARNING("[user] wrenches the [src] down.")) qdel(src) - return + return TRUE return ..() /obj/structure/hygiene/drain/bath diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 1c480130566fc..7e8c03138a07f 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -255,7 +255,7 @@ to_chat(user, SPAN_NOTICE("You begin adding the plating...")) if(!do_after(user,4 SECONDS, src, DO_REPAIR_CONSTRUCT) || !S.use(2)) - return 1 //once we've gotten this far don't call parent attackby() + return TRUE if(anchored) to_chat(user, SPAN_NOTICE("You added the plating!")) @@ -289,7 +289,7 @@ to_chat(user, SPAN_NOTICE("Now reinforcing...")) if (!do_after(user, 4 SECONDS, src, DO_REPAIR_CONSTRUCT) || !S.use(2)) - return 1 //don't call parent attackby() past this point + return TRUE to_chat(user, SPAN_NOTICE("You added reinforcement!")) reinf_material = M diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 5870ef43798ea..2fdd94bd6c412 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -90,7 +90,7 @@ /obj/structure/morgue/attack_robot(mob/user) if(Adjacent(user)) return attack_hand(user) - else return ..() + return ..() /obj/structure/morgue/use_tool(obj/item/tool, mob/user, list/click_params) diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index bcea086407f23..a625d50cea70d 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -55,10 +55,10 @@ w_class = ITEM_SIZE_NORMAL //big var/sign_state = "" -/obj/item/sign/attackby(obj/item/tool as obj, mob/user as mob) //construction +/obj/item/sign/use_tool(obj/item/tool, mob/living/user, list/click_params) if (isScrewdriver(tool) && isturf(user.loc)) var/direction = input("In which direction?", "Select direction.") in list("North", "East", "South", "West", "Cancel") - if(direction == "Cancel") return + if(direction == "Cancel") return TRUE var/obj/structure/sign/S = new(user.loc) switch(direction) if("North") @@ -69,13 +69,14 @@ S.pixel_y = -32 if("West") S.pixel_x = -32 - else return + else return TRUE S.SetName(name) S.desc = desc S.icon_state = sign_state to_chat(user, "You fasten \the [S] with your [tool].") qdel(src) - else ..() + return TRUE + return ..() /obj/structure/sign/double/map name = "map" diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm index e21c6a04a46a9..f6af733f84e23 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm @@ -117,19 +117,21 @@ var/global/list/stool_cache = list() //haha stool padding_material.place_sheet(get_turf(src)) qdel(src) -/obj/item/stool/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/stool/use_tool(obj/item/W, mob/living/user, list/click_params) if(isWrench(W)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) dismantle() qdel(src) - else if(istype(W,/obj/item/stack)) + return TRUE + + if (istype(W,/obj/item/stack)) if(padding_material) - to_chat(user, "\The [src] is already padded.") - return + to_chat(user, SPAN_WARNING("\The [src] is already padded.")) + return TRUE var/obj/item/stack/C = W if(C.get_amount() < 1) // How?? qdel(C) - return + return TRUE var/padding_type //This is awful but it needs to be like this until tiles are given a material var. if(istype(W,/obj/item/stack/tile/carpet)) padding_type = MATERIAL_CARPET @@ -138,24 +140,25 @@ var/global/list/stool_cache = list() //haha stool if(M.material && (M.material.flags & MATERIAL_PADDING)) padding_type = "[M.material.name]" if(!padding_type) - to_chat(user, "You cannot pad \the [src] with that.") - return + to_chat(user, SPAN_WARNING("You cannot pad \the [src] with that.")) + return TRUE C.use(1) if(!istype(src.loc, /turf)) user.drop_from_inventory(src) src.dropInto(loc) to_chat(user, "You add padding to \the [src].") add_padding(padding_type) - return - else if (is_sharp(W)) + return TRUE + + if (is_sharp(W)) if(!padding_material) - to_chat(user, "\The [src] has no padding to remove.") - return + to_chat(user, SPAN_WARNING("\The [src] has no padding to remove.")) + return TRUE to_chat(user, "You remove the padding from \the [src].") playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) remove_padding() - else - ..() + return TRUE + return ..() //Generated subtypes for mapping porpoises diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 2ba53785c486c..0f41c37960e36 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -721,7 +721,7 @@ obj_flags = OBJ_FLAG_ROTATABLE var/constructed_type = /obj/structure/hygiene/faucet -/obj/item/faucet/attackby(obj/item/thing, mob/user) +/obj/item/faucet/use_tool(obj/item/thing, mob/living/user, list/click_params) if(isWrench(thing)) var/turf/simulated/floor/F = loc if (istype(F) && istype(F.flooring, /singleton/flooring/pool)) diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index d20dbe69e4d78..9582ccb226ec8 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -14,7 +14,7 @@ ..() return -/obj/item/assembly/shock_kit/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/assembly/shock_kit/use_tool(obj/item/W, mob/living/user, list/click_params) if(isWrench(W) && !status) part1.dropInto(loc) part2.dropInto(loc) @@ -23,12 +23,12 @@ part1 = null part2 = null qdel(src) - return + return TRUE if(isScrewdriver(W)) status = !status to_chat(user, SPAN_NOTICE("[src] is now [status ? "secured" : "unsecured"]!")) - add_fingerprint(user) - return + return TRUE + return ..() /obj/item/assembly/shock_kit/attack_self(mob/user as mob) part1.attack_self(user, status) diff --git a/code/modules/augment/active/circuit.dm b/code/modules/augment/active/circuit.dm index d805174ee95d9..fba324678053d 100644 --- a/code/modules/augment/active/circuit.dm +++ b/code/modules/augment/active/circuit.dm @@ -7,7 +7,7 @@ desc = "A DIY modular assembly, courtesy of Xion Industrial. Circuitry not included." -/obj/item/organ/internal/augment/active/item/circuit/attackby(obj/item/I, mob/user) +/obj/item/organ/internal/augment/active/item/circuit/use_tool(obj/item/I, mob/living/user, list/click_params) if (isCrowbar(I)) if (item) item.canremove = TRUE @@ -17,7 +17,8 @@ playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) else to_chat(user, SPAN_WARNING("The augment is empty!")) - return + return TRUE + if (istype(I, /obj/item/device/electronic_assembly/augment)) if (item) to_chat(user, SPAN_WARNING("There's already an assembly in there.")) @@ -25,5 +26,5 @@ item = I item.canremove = FALSE playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - return - ..() + return TRUE + return ..() diff --git a/code/modules/augment/active/powerfist.dm b/code/modules/augment/active/powerfist.dm index 3c3a0f7baddeb..3acc7cf8f4be6 100644 --- a/code/modules/augment/active/powerfist.dm +++ b/code/modules/augment/active/powerfist.dm @@ -36,25 +36,31 @@ augment_flags = AUGMENT_MECHANICAL | AUGMENT_SCANNABLE +<<<<<<< ours /obj/item/powerfist/attackby(obj/item/item, mob/user) +======= +/obj/item/powerfist/use_tool(obj/item/item, mob/living/user, list/click_params) + var/datum/pronouns/pronouns = user.choose_from_pronouns() +>>>>>>> theirs if (!istype(item, /obj/item/tank)) - return + return ..() var/obj/item/tank/other = item if (other.tank_size > TANK_SIZE_SMALL) to_chat(user, SPAN_WARNING("\The [other] is too big. Find a smaller tank.")) - return + return TRUE if (tank) to_chat(user, SPAN_WARNING("\The [src] already has \a [tank] installed.")) - return + return TRUE user.visible_message( SPAN_ITALIC("\The [user] starts connecting \a [item] to \his [src]."), SPAN_ITALIC("You start connecting \the [item] to \the [src]."), range = 5 ) if (!do_after(user, 3 SECONDS, item, DO_PUBLIC_UNIQUE)) - return + return TRUE if (!user.unEquip(item, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, item) + return TRUE user.visible_message( SPAN_ITALIC("\The [user] finishes connecting \a [item] to \his [src]."), SPAN_NOTICE("You finish connecting \the [item] to \the [src]."), @@ -64,6 +70,7 @@ tank = item update_force() update_icon() + return TRUE /obj/item/powerfist/proc/update_force() diff --git a/code/modules/butchery/remains.dm b/code/modules/butchery/remains.dm index 6810a20aa27d3..2fdb6a6f5ff24 100644 --- a/code/modules/butchery/remains.dm +++ b/code/modules/butchery/remains.dm @@ -8,14 +8,14 @@ if (carve_product && is_sharp(tool)) if (!isturf(loc)) to_chat(user, SPAN_WARNING("You must put \the [src] down before carving it.")) - return + return TRUE user.visible_message( SPAN_ITALIC("\The [user] begins carving \a [src] with \a [tool]."), SPAN_ITALIC("You begin carving \the [src] into \a [initial(carve_product.name)] with \the [tool]."), range = 5 ) if (!do_after(user, 10 SECONDS, src)) - return + return TRUE user.visible_message( SPAN_ITALIC("\The [user] finishes carving \a [src] into \a [initial(carve_product.name)]."), SPAN_ITALIC("You finish carving \the [src]."), @@ -23,6 +23,8 @@ ) new carve_product (loc) qdel(src) + return TRUE + return ..() diff --git a/code/modules/clothing/_clothing.dm b/code/modules/clothing/_clothing.dm index 8d65f3dd8db8d..866a6a5d2f2a4 100644 --- a/code/modules/clothing/_clothing.dm +++ b/code/modules/clothing/_clothing.dm @@ -339,7 +339,7 @@ BLIND // can't see anything /obj/item/clothing/gloves/proc/Touch(atom/A, proximity) return 0 // return 1 to cancel attack_hand() -/obj/item/clothing/gloves/attackby(obj/item/W, mob/user) +/obj/item/clothing/gloves/use_tool(obj/item/W, mob/living/user, list/click_params) if (isWirecutter(W) || istype(W, /obj/item/scalpel)) if (clipped) to_chat(user, SPAN_NOTICE("\The [src] have already been modified!")) @@ -660,13 +660,16 @@ BLIND // can't see anything ..() -/obj/item/clothing/shoes/attackby(obj/item/item, mob/living/user) +/obj/item/clothing/shoes/use_tool(obj/item/item, mob/living/user, list/click_params) if (istype(item, /obj/item/handcuffs)) add_cuffs(item, user) + return TRUE else if (istype(item, /obj/item/clothing/shoes/magboots)) user.equip_to_slot_if_possible(item, slot_shoes) - else - add_hidden(item, user) + return TRUE + else if(add_hidden(item, user)) + return TRUE + return ..() /obj/item/clothing/shoes/proc/add_cuffs(obj/item/handcuffs/cuffs, mob/user) @@ -710,22 +713,24 @@ BLIND // can't see anything /obj/item/clothing/shoes/proc/add_hidden(obj/item/I, mob/user) if (!can_add_hidden_item) to_chat(user, SPAN_WARNING("\The [src] can't hold anything.")) - return + return TRUE if (hidden_item) to_chat(user, SPAN_WARNING("\The [src] already holds \an [hidden_item].")) - return + return TRUE if (!(I.item_flags & ITEM_FLAG_CAN_HIDE_IN_SHOES) || (I.slot_flags & SLOT_DENYPOCKET)) to_chat(user, SPAN_WARNING("\The [src] can't hold the [I].")) - return + return TRUE if (I.w_class > hidden_item_max_w_class) to_chat(user, SPAN_WARNING("\The [I] is too large to fit in the [src].")) - return + return TRUE if (do_after(user, 1 SECONDS, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT)) if(!user.unEquip(I, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, I) + return TRUE user.visible_message(SPAN_ITALIC("\The [user] shoves \the [I] into \the [src]."), range = 1) verbs |= /obj/item/clothing/shoes/proc/remove_hidden hidden_item = I + return TRUE /obj/item/clothing/shoes/proc/remove_hidden(mob/user) set name = "Remove Shoe Item" diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm index 8497ebbf56d7c..9515fc2753a7d 100644 --- a/code/modules/clothing/gloves/boxing.dm +++ b/code/modules/clothing/gloves/boxing.dm @@ -4,11 +4,11 @@ icon_state = "boxing" item_state = "boxing" -/obj/item/clothing/gloves/boxing/attackby(obj/item/W, mob/user) +/obj/item/clothing/gloves/boxing/use_tool(obj/item/W, mob/living/user, list/click_params) if(isWirecutter(W) || istype(W, /obj/item/scalpel)) - to_chat(user, SPAN_NOTICE("That won't work."))//Nope - else - ..() + to_chat(user, SPAN_WARNING("That won't work.")) + return TRUE + return ..() /obj/item/clothing/gloves/boxing/green icon_state = "boxinggreen" diff --git a/code/modules/clothing/masks/cig_crafting.dm b/code/modules/clothing/masks/cig_crafting.dm index 4fd8d14c4b1b4..33da9bd4d51fd 100644 --- a/code/modules/clothing/masks/cig_crafting.dm +++ b/code/modules/clothing/masks/cig_crafting.dm @@ -56,14 +56,14 @@ /obj/item/reagent_containers/food/snacks/grown/dried_tobacco/fine plantname = "finetobacco" -/obj/item/clothing/mask/smokable/cigarette/rolled/attackby(obj/item/I, mob/user) +/obj/item/clothing/mask/smokable/cigarette/rolled/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/paper/cig/filter)) if(filter) - to_chat(user, SPAN_WARNING("[src] already has a filter!")) - return + to_chat(user, SPAN_WARNING("\The [src] already has a filter!")) + return TRUE if(lit) - to_chat(user, SPAN_WARNING("[src] is lit already!")) - return + to_chat(user, SPAN_WARNING("\The [src] is already lit!")) + return TRUE if(user.unEquip(I)) to_chat(user, SPAN_NOTICE("You stick [I] onto \the [src].")) filter = 1 @@ -71,14 +71,14 @@ brand = "[brand] with a filter" update_icon() qdel(I) - return - ..() + return TRUE + return ..() -/obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/I, mob/user) +/obj/item/reagent_containers/food/snacks/grown/use_tool(obj/item/I, mob/living/user, list/click_params) if(is_type_in_list(I, list(/obj/item/paper/cig, /obj/item/paper, /obj/item/teleportation_scroll))) if(!dry) - to_chat(user, SPAN_WARNING("You need to dry [src] first!")) - return + to_chat(user, SPAN_WARNING("You need to dry \the [src] first!")) + return TRUE if(user.unEquip(I)) var/obj/item/clothing/mask/smokable/cigarette/rolled/R = new(get_turf(src)) R.chem_volume = reagents.total_volume @@ -88,5 +88,5 @@ user.put_in_active_hand(R) qdel(I) qdel(src) - return - ..() + return TRUE + return ..() diff --git a/code/modules/clothing/masks/smokable.dm b/code/modules/clothing/masks/smokable.dm index 080b8fcf9d637..6883b7c06d9e8 100644 --- a/code/modules/clothing/masks/smokable.dm +++ b/code/modules/clothing/masks/smokable.dm @@ -140,8 +140,7 @@ set_light(0) update_icon() -/obj/item/clothing/mask/smokable/attackby(obj/item/W, mob/user) - ..() +/obj/item/clothing/mask/smokable/use_tool(obj/item/W, mob/living/user, list/click_params) if (isFlameOrHeatSource(W)) var/text = matchmes if(istype(W, /obj/item/flame/match)) @@ -160,6 +159,7 @@ text = replacetext(text, "NAME", "[name]") text = replacetext(text, "FLAME", "[W.name]") light(text) + return ..() /obj/item/clothing/mask/smokable/use_before(mob/living/M, mob/living/user) . = FALSE @@ -321,15 +321,14 @@ icon_state = "woodbutt" matter = list(MATERIAL_WOOD = 1) -/obj/item/clothing/mask/smokable/cigarette/attackby(obj/item/W, mob/user) - ..() - +/obj/item/clothing/mask/smokable/cigarette/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/melee/energy/sword)) var/obj/item/melee/energy/sword/S = W if(S.active) light(SPAN_WARNING("[user] swings their [W], barely missing their nose. They light their [name] in the process.")) + return TRUE - return + return ..() /obj/item/clothing/mask/smokable/cigarette/use_before(mob/living/carbon/human/H, mob/user) if (lit && H == user && istype(H)) @@ -435,12 +434,11 @@ desc = "A manky old cigar butt." icon_state = "cigarbutt" -/obj/item/clothing/mask/smokable/cigarette/cigar/attackby(obj/item/W, mob/user) - ..() - +/obj/item/clothing/mask/smokable/cigarette/cigar/use_tool(obj/item/W, mob/living/user, list/click_params) user.update_inv_wear_mask(0) user.update_inv_l_hand(0) user.update_inv_r_hand(1) + return ..() //Bizarre /obj/item/clothing/mask/smokable/cigarette/rolled/sausage @@ -526,43 +524,54 @@ reagents.clear_reagents() SetName("empty [initial(name)]") -/obj/item/clothing/mask/smokable/pipe/attackby(obj/item/W, mob/user) +/obj/item/clothing/mask/smokable/pipe/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/melee/energy/sword)) - return - - ..() + return ..() if (istype(W, /obj/item/reagent_containers/food/snacks)) var/obj/item/reagent_containers/food/snacks/grown/G = W if (!G.dry) - to_chat(user, SPAN_NOTICE("[G] must be dried before you stuff it into [src].")) - return + to_chat(user, SPAN_WARNING("\The [G] must be dried before you stuff it into \the [src].")) + return TRUE if (smoketime) - to_chat(user, SPAN_NOTICE("[src] is already packed.")) - return + to_chat(user, SPAN_WARNING("\The [src] is already packed.")) + return TRUE smoketime = 1000 if(G.reagents) G.reagents.trans_to_obj(src, G.reagents.total_volume) SetName("[G.name]-packed [initial(name)]") qdel(G) + user.update_inv_wear_mask(0) + user.update_inv_l_hand(0) + user.update_inv_r_hand(1) + return TRUE else if(istype(W, /obj/item/flame/lighter)) var/obj/item/flame/lighter/L = W if(L.lit) - light(SPAN_NOTICE("[user] manages to light their [name] with [W].")) + light(SPAN_NOTICE("\The [user] manages to light their \the [name] with \the [W].")) + user.update_inv_wear_mask(0) + user.update_inv_l_hand(0) + user.update_inv_r_hand(1) + return TRUE else if(istype(W, /obj/item/flame/match)) var/obj/item/flame/match/M = W if(M.lit) - light(SPAN_NOTICE("[user] lights their [name] with their [W].")) + light(SPAN_NOTICE("\The [user] lights their \the [name] with their \the [W].")) + user.update_inv_wear_mask(0) + user.update_inv_l_hand(0) + user.update_inv_r_hand(1) + return TRUE else if(istype(W, /obj/item/device/assembly/igniter)) - light(SPAN_NOTICE("[user] fiddles with [W], and manages to light their [name] with the power of science.")) - - user.update_inv_wear_mask(0) - user.update_inv_l_hand(0) - user.update_inv_r_hand(1) + light(SPAN_NOTICE("\The [user] fiddles with \the [W], and manages to light their \the [name] with the power of science.")) + user.update_inv_wear_mask(0) + user.update_inv_l_hand(0) + user.update_inv_r_hand(1) + return TRUE + return ..() /obj/item/clothing/mask/smokable/pipe/IsFlameSource() return FALSE diff --git a/code/modules/clothing/rings/material.dm b/code/modules/clothing/rings/material.dm index 5b6a39a18ebc2..b96b6f12fb674 100644 --- a/code/modules/clothing/rings/material.dm +++ b/code/modules/clothing/rings/material.dm @@ -17,16 +17,18 @@ desc = "A ring made from [material.display_name]." color = material.icon_colour -/obj/item/clothing/ring/material/attackby(obj/item/S, mob/user) +/obj/item/clothing/ring/material/use_tool(obj/item/S, mob/living/user, list/click_params) if(S.sharp) var/inscription = sanitize(input("Enter an inscription to engrave.", "Inscription") as null|text) if(!user.stat && !user.incapacitated() && user.Adjacent(src) && S.loc == user) if(!inscription) - return + return TRUE desc = "A ring made from [material.display_name]." to_chat(user, SPAN_WARNING("You carve \"[inscription]\" into \the [src].")) desc += "
Written on \the [src] is the inscription \"[inscription]\"" + return TRUE + return ..() /obj/item/clothing/ring/material/OnTopic(mob/user, list/href_list) if(href_list["examine"]) diff --git a/code/modules/clothing/spacesuits/breaches.dm b/code/modules/clothing/spacesuits/breaches.dm index 9650607935e5a..761cc72c46e38 100644 --- a/code/modules/clothing/spacesuits/breaches.dm +++ b/code/modules/clothing/spacesuits/breaches.dm @@ -182,7 +182,7 @@ //Handles repairs (and also upgrades). -/obj/item/clothing/suit/space/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/clothing/suit/space/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/stack/material)) var/repair_power = 0 switch(W.get_material_name()) @@ -192,42 +192,42 @@ repair_power = 1 if(!repair_power) - return + return ..() if(istype(loc,/mob/living/carbon/human)) var/mob/living/carbon/human/H = loc if(H.wear_suit == src) to_chat(user, SPAN_WARNING("You cannot repair \the [src] while it is being worn.")) - return + return TRUE if(burn_damage <= 0) - to_chat(user, "There is no surface damage on \the [src] to repair.") //maybe change the descriptor to more obvious? idk what - return + to_chat(user, SPAN_WARNING("There is no surface damage on \the [src] to repair.")) + return TRUE var/obj/item/stack/P = W var/use_amt = min(P.get_amount(), 3) if(use_amt && P.use(use_amt)) repair_breaches(DAMAGE_BURN, use_amt * repair_power, user) - return + return TRUE else if(isWelder(W)) - if(istype(loc,/mob/living/carbon/human)) var/mob/living/carbon/human/H = loc if(H.wear_suit == src) to_chat(user, SPAN_WARNING("You cannot repair \the [src] while it is being worn.")) - return + return TRUE if (brute_damage <= 0) to_chat(user, "There is no structural damage on \the [src] to repair.") - return + return TRUE var/obj/item/weldingtool/WT = W - if(!WT.remove_fuel(5)) - return + if(!WT.can_use(5, user, "repair \the [src].")) + return TRUE + WT.remove_fuel(5) repair_breaches(DAMAGE_BRUTE, 3, user) - return + return TRUE else if(istype(W, /obj/item/tape_roll)) var/datum/breach/target_breach //Target the largest unpatched breach. @@ -242,7 +242,7 @@ else playsound(src, 'sound/effects/tape.ogg',25) var/mob/living/carbon/human/H = user - if(!istype(H)) return + if(!istype(H)) return ..() var/is_worn = istype(loc, /mob/living) if(do_after(user, (H.wear_suit == src ? 6 : 3) SECONDS, is_worn ? loc : src, is_worn ? DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS : DO_PUBLIC_UNIQUE)) //Sealing a breach on your own suit is awkward and time consuming user.visible_message( @@ -252,9 +252,9 @@ target_breach.patched = TRUE target_breach.update_descriptor() calc_breach_damage() - return + return TRUE - ..() + return ..() /obj/item/clothing/suit/space/examine(mob/user) . = ..() diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm index f35192cd57418..65af9db2271ed 100644 --- a/code/modules/clothing/spacesuits/rig/modules/combat.dm +++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm @@ -343,7 +343,7 @@ laser.Fire(target,holder.wearer) return 1 else - var/resolved = target.attackby(laser,holder.wearer) + var/resolved = laser.resolve_attackby(target, holder.wearer) if(!resolved && laser && target) laser.afterattack(target,holder.wearer,1) return 1 diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm index 0af9263b8607e..4452cdb05ec6e 100644 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm @@ -96,7 +96,7 @@ return 0 // Since we've explicitly checked for three types, this should be safe. - input_device.attackby(card,user) + input_device.use_tool(card,user) // If the transfer failed we can delete the card. if(locate(/mob/living/silicon/ai) in card) @@ -110,7 +110,7 @@ if(istype(input_device,/obj/item/aicard)) // We are carding the AI in our suit. if(integrated_ai) - integrated_ai.attackby(input_device,user) + integrated_ai.use_tool(input_device,user) // If the transfer was successful, we can clear out our vars. if(integrated_ai.loc != src) integrated_ai = null @@ -125,7 +125,7 @@ // Okay, it wasn't a terminal being touched, check for all the simple insertions. if(input_device.type in list(/obj/item/device/paicard, /obj/item/device/mmi, /obj/item/organ/internal/posibrain)) if(integrated_ai) - integrated_ai.attackby(input_device,user) + integrated_ai.use_tool(input_device,user) // If the transfer was successful, we can clear out our vars. if(integrated_ai.loc != src) integrated_ai = null diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm index 5aab28948de2f..3b21e5c4a85c9 100644 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm @@ -66,49 +66,46 @@ if(2) to_chat(user, "It is almost completely destroyed.") -/obj/item/rig_module/attackby(obj/item/W as obj, mob/user as mob) - +/obj/item/rig_module/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/stack/nanopaste)) - if(damage == 0) to_chat(user, "There is no damage to mend.") - return + return TRUE to_chat(user, "You start mending the damaged portions of \the [src]...") if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) || !W || !src) - return + return TRUE var/obj/item/stack/nanopaste/paste = W damage = 0 - to_chat(user, "You mend the damage to [src] with [W].") + to_chat(user, "You mend the damage to \the [src] with \the [W].") paste.use(1) - return - - else if(isCoil(W)) + return TRUE + if (isCoil(W)) switch(damage) if(0) to_chat(user, "There is no damage to mend.") - return + return TRUE if(2) to_chat(user, "There is no damage that you are capable of mending with such crude tools.") - return + return TRUE var/obj/item/stack/cable_coil/cable = W if(!cable.can_use(5)) to_chat(user, "You need five units of cable to repair \the [src].") - return + return TRUE to_chat(user, "You start mending the damaged portions of \the [src]...") if(!do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE) || !W || !src) - return + return TRUE damage = 1 - to_chat(user, "You mend some of damage to [src] with [W], but you will need more advanced tools to fix it completely.") + to_chat(user, "You mend some of damage to \the [src] with \the [W], but you will need more advanced tools to fix it completely.") cable.use(5) - return - ..() + return TRUE + return ..() /obj/item/rig_module/Initialize() . =..() @@ -286,7 +283,7 @@ else return passive_power_cost -// Called by holder rigsuit attackby() +// Called by holder rigsuit use_tool() // Checks if an item is usable with this module and handles it if it is /obj/item/rig_module/proc/accepts_item(obj/item/input_device) return 0 diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm index 0925df025f1b3..5db5737f1f4eb 100644 --- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm +++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm @@ -1,106 +1,106 @@ -/obj/item/rig/attackby(obj/item/W as obj, mob/user as mob) - - if(!istype(user,/mob/living)) return 0 - +/obj/item/rig/use_tool(obj/item/W, mob/living/user, list/click_params) if(electrified != 0) if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here. - return + return TRUE // Pass repair items on to the chestpiece. if(chest && (istype(W,/obj/item/stack/material) || isWelder(W))) - return chest.attackby(W,user) + return chest.use_tool(W,user) // Lock or unlock the access panel. if(W.GetIdCard()) if(subverted) locked = 0 to_chat(user, SPAN_DANGER("It looks like the locking system has been shorted out.")) - return + return TRUE if(!length(req_access)) locked = 0 to_chat(user, SPAN_DANGER("\The [src] doesn't seem to have a locking mechanism.")) - return + return TRUE if(security_check_enabled && !src.allowed(user)) to_chat(user, SPAN_DANGER("Access denied.")) - return + return TRUE locked = !locked to_chat(user, "You [locked ? "lock" : "unlock"] \the [src] access panel.") - return + return TRUE - else if(isCrowbar(W)) + if (isCrowbar(W)) if(!open && locked) - to_chat(user, "The access panel is locked shut.") - return + to_chat(user, SPAN_WARNING("The access panel is locked shut.")) + return TRUE open = !open to_chat(user, "You [open ? "open" : "close"] the access panel.") - return + return TRUE - else if(isScrewdriver(W)) + if (isScrewdriver(W)) p_open = !p_open to_chat(user, "You [p_open ? "open" : "close"] the wire cover.") + return TRUE // Hacking. - else if(isWirecutter(W) || isMultitool(W)) + if (isWirecutter(W) || isMultitool(W)) if(p_open) wires.Interact(user) else - to_chat(user, "You can't reach the wiring.") - return + to_chat(user, SPAN_WARNING("You can't reach the wiring.")) + return TRUE if(open) - - // Air tank. if(istype(W,/obj/item/tank)) //Todo, some kind of check for suits without integrated air supplies. if(air_supply) - to_chat(user, "\The [src] already has a tank installed.") - return + to_chat(user, SPAN_WARNING("\The [src] already has a tank installed.")) + return TRUE if (istype(W, /obj/item/tank/scrubber)) to_chat(user, SPAN_WARNING("\The [W] is far too large to attach to \the [src].")) - return - - if(!user.unEquip(W)) return + return TRUE + if(!user.unEquip(W)) + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE air_supply = W W.forceMove(src) - to_chat(user, "You slot [W] into [src] and tighten the connecting valve.") - return + to_chat(user, "You slot \the [W] into \the [src] and tighten the connecting valve.") + return TRUE // Check if this is a hardsuit upgrade or a modification. - else if(istype(W,/obj/item/rig_module)) + if (istype(W,/obj/item/rig_module)) var/obj/item/rig_module/mod = W if (!mod.can_install(src, user)) return TRUE to_chat(user, "You begin installing \the [mod] into \the [src].") if(!do_after(user, 4 SECONDS, src, DO_PUBLIC_UNIQUE)) - return + return TRUE if(!user || !W || !mod.can_install(src, user)) - return - if(!user.unEquip(mod)) return + return TRUE + if(!user.unEquip(mod)) + FEEDBACK_UNEQUIP_FAILURE(user, mod) + return TRUE to_chat(user, "You install \the [mod] into \the [src].") LAZYADD(installed_modules, mod) installed_modules |= mod mod.forceMove(src) mod.installed(src) update_icon() - return 1 + return TRUE - else if(!cell && istype(W,/obj/item/cell)) + if (!cell && istype(W,/obj/item/cell)) - if(!user.unEquip(W)) return + if(!user.unEquip(W)) + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE to_chat(user, "You jack \the [W] into \the [src]'s battery mount.") W.forceMove(src) - src.cell = W - return - - else if(isWrench(W)) + cell = W + return TRUE + if (isWrench(W)) var/list/current_mounts = list() if(cell) current_mounts += "cell" if(air_supply) current_mounts += "tank" @@ -109,18 +109,16 @@ if(installed_modules && length(installed_modules)) current_mounts += "system module" var/to_remove = input("Which would you like to modify?") as null|anything in current_mounts if(!to_remove) - return + return TRUE if(istype(src.loc,/mob/living/carbon/human) && to_remove != "cell" && to_remove != "tank") var/mob/living/carbon/human/H = src.loc if(H.back == src) - to_chat(user, "You can't remove an installed device while the hardsuit is being worn.") - return + to_chat(user, SPAN_WARNING("You can't remove an installed device while the hardsuit is being worn.")) + return TRUE switch(to_remove) - if("cell") - if(cell) to_chat(user, "You detach \the [cell] from \the [src]'s battery mount.") for(var/obj/item/rig_module/module in installed_modules) @@ -132,8 +130,8 @@ if("tank") if(!air_supply) - to_chat(user, "There is no tank to remove.") - return + to_chat(user, SPAN_WARNING("There is no tank to remove.")) + return TRUE user.put_in_hands(air_supply) to_chat(user, "You detach and remove \the [air_supply].") @@ -141,8 +139,8 @@ if ("storage") if (!length(chest?.storage?.contents)) - to_chat(user, "There is nothing in the storage to remove.") - return + to_chat(user, SPAN_WARNING("There is nothing in the storage to remove.")) + return TRUE chest.storage.DoQuickEmpty() user.visible_message( SPAN_ITALIC("\The [user] ejects the contents of \a [src]'s storage."), @@ -152,7 +150,6 @@ ) if("system module") - var/list/possible_removals = list() for(var/obj/item/rig_module/module in installed_modules) if(module.permanent) @@ -160,12 +157,12 @@ possible_removals[module.name] = module if(!length(possible_removals)) - to_chat(user, "There are no installed modules to remove.") - return + to_chat(user, SPAN_WARNING("There are no installed modules to remove.")) + return TRUE var/removal_choice = input("Which module would you like to remove?") as null|anything in possible_removals if(!removal_choice) - return + return TRUE var/obj/item/rig_module/removed = possible_removals[removal_choice] to_chat(user, "You detach \the [removed] from \the [src].") @@ -173,8 +170,9 @@ removed.removed() installed_modules -= removed update_icon() + return TRUE - else if(istype(W,/obj/item/stack/nanopaste)) //EMP repair + if (istype(W,/obj/item/stack/nanopaste)) //EMP repair var/obj/item/stack/S = W if(malfunctioning || malfunction_delay) if(S.use(1)) @@ -185,15 +183,14 @@ to_chat(user, "\The [S] is empty!") else to_chat(user, "You don't see any use for \the [S].") - - return + return TRUE // If we've gotten this far, all we have left to do before we pass off to root procs // is check if any of the loaded modules want to use the item we've been given. for(var/obj/item/rig_module/module in installed_modules) if(module.accepts_item(W,user)) //Item is handled in this proc - return - ..() + return TRUE + return ..() /obj/item/rig/attack_hand(mob/user) diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index e00a8a4bb3277..6198ea9ebf344 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -234,21 +234,18 @@ else if(##equipment_var) {\ src.tank = null playsound(loc, 'sound/effects/spray3.ogg', 50) -/obj/item/clothing/suit/space/void/attackby(obj/item/W as obj, mob/user as mob) - - if(!istype(user,/mob/living)) return - +/obj/item/clothing/suit/space/void/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/clothing/accessory) || istype(W, /obj/item/hand_labeler)) return ..() if (isScrewdriver(W)) if(user.get_inventory_slot(src) == slot_wear_suit)//maybe I should make this into a proc? to_chat(user, SPAN_WARNING("You cannot modify \the [src] while it is being worn.")) - return + return TRUE if(helmet || boots || tank) var/choice = input("What component would you like to remove?") as null|anything in list(helmet,boots,tank) - if(!choice) return + if(!choice) return TRUE playsound(loc, 'sound/items/Screwdriver.ogg', 50) if(choice == tank) //No, a switch doesn't work here. Sorry. ~Techhead @@ -263,54 +260,62 @@ else if(##equipment_var) {\ to_chat(user, "You detatch \the [boots] from \the [src]'s boot mounts.") user.put_in_hands(boots) src.boots = null + return TRUE else to_chat(user, "\The [src] does not have anything installed.") - return + return TRUE + else if(istype(W,/obj/item/clothing/head/helmet/space)) if(user.get_inventory_slot(src) == slot_wear_suit) to_chat(user, SPAN_WARNING("You cannot modify \the [src] while it is being worn.")) - return + return TRUE if(helmet) to_chat(user, "\The [src] already has a helmet installed.") + return TRUE else if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE to_chat(user, "You attach \the [W] to \the [src]'s helmet mount.") src.helmet = W playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - return + return TRUE + else if(istype(W,/obj/item/clothing/shoes/magboots)) if(user.get_inventory_slot(src) == slot_wear_suit) to_chat(user, SPAN_WARNING("You cannot modify \the [src] while it is being worn.")) - return + return TRUE if(boots) to_chat(user, "\The [src] already has magboots installed.") else if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE to_chat(user, "You attach \the [W] to \the [src]'s boot mounts.") boots = W playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - return + return TRUE + else if(istype(W,/obj/item/tank)) if(user.get_inventory_slot(src) == slot_wear_suit) to_chat(user, SPAN_WARNING("You cannot modify \the [src] while it is being worn.")) - return + return TRUE if(tank) to_chat(user, "\The [src] already has an airtank installed.") - return + return TRUE if (istype(W, /obj/item/tank/scrubber)) to_chat(user, SPAN_WARNING("\The [W] is far too large to attach to \the [src].")) - return + return TRUE else if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE to_chat(user, "You insert \the [W] into \the [src]'s storage compartment.") tank = W playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - return + return TRUE - ..() + return ..() /obj/item/clothing/suit/space/void/attack_hand(mob/user as mob) if (loc == user) diff --git a/code/modules/clothing/under/accessories/_accessory.dm b/code/modules/clothing/under/accessories/_accessory.dm index 3c3d34039b978..6440bbe9a8454 100644 --- a/code/modules/clothing/under/accessories/_accessory.dm +++ b/code/modules/clothing/under/accessories/_accessory.dm @@ -106,11 +106,6 @@ else dropInto(loc) -//default attackby behaviour -/obj/item/clothing/accessory/attackby(obj/item/I, mob/user) - ..() - - //default attack_hand behaviour /obj/item/clothing/accessory/attack_hand(mob/user as mob) if(parent) diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm index fc4a70357e200..a00207a72c234 100644 --- a/code/modules/clothing/under/accessories/badges.dm +++ b/code/modules/clothing/under/accessories/badges.dm @@ -131,19 +131,19 @@ return 1 -/obj/item/clothing/accessory/badge/holo/attackby(obj/item/O, mob/user) +/obj/item/clothing/accessory/badge/holo/use_tool(obj/item/O, mob/living/user, list/click_params) if (istype(O, /obj/item/card/id) || istype(O, /obj/item/modular_computer)) var/obj/item/card/id/id_card = O.GetIdCard() if (!id_card) - return + return ..() if ((badge_access in id_card.access) || emagged) to_chat(user, "You imprint your ID details onto the badge.") set_name(id_card.registered_name) set_desc(user) else - to_chat(user, "[src] rejects your ID, and flashes 'Insufficient access!'") - return - ..() + to_chat(user, "\The [src] rejects your ID, and flashes 'Insufficient access!'") + return TRUE + return ..() /obj/item/storage/box/holobadge diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index 4270bae8a5c56..52034a700085f 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -16,13 +16,11 @@ set_extension(src, /datum/extension/holster, container, sound_in, sound_out, can_holster) -/obj/item/clothing/accessory/storage/holster/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/clothing/accessory/storage/holster/use_tool(obj/item/W, mob/living/user, list/click_params) var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) if (H.holster(W, user)) - return - else - . = ..(W, user) - + return TRUE + return ..() /obj/item/clothing/accessory/storage/holster/attack_hand(mob/user as mob) var/datum/extension/holster/H = get_extension(src, /datum/extension/holster) diff --git a/code/modules/clothing/under/accessories/lockets.dm b/code/modules/clothing/under/accessories/lockets.dm index 2b12673015184..456ab0a40d595 100644 --- a/code/modules/clothing/under/accessories/lockets.dm +++ b/code/modules/clothing/under/accessories/lockets.dm @@ -30,17 +30,19 @@ icon_state = "[base_icon]" -/obj/item/clothing/accessory/locket/attackby(obj/item/I, mob/user) +/obj/item/clothing/accessory/locket/use_tool(obj/item/I, mob/living/user, list/click_params) if (!open) - to_chat(user, "You have to open it first.") - return + to_chat(user, "You have to open \the [src] before modifying it.") + return TRUE + if (istype(I, /obj/item/paper) || istype(I, /obj/item/photo)) if (held) to_chat(usr, "\The [src] already has something inside it.") else if (!user.unEquip(I, src)) - return - to_chat(usr, "You slip [I] into [src].") + FEEDBACK_UNEQUIP_FAILURE(user, I) + return TRUE + to_chat(usr, "You slip \the [I] into [src].") held = I - return - ..() + return TRUE + else return..() diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 32c59b8c1961f..fd72a11b56875 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -38,9 +38,10 @@ ..(over_object) -/obj/item/clothing/accessory/storage/attackby(obj/item/I, mob/user) +/obj/item/clothing/accessory/storage/use_tool(obj/item/tool, mob/living/user, list/click_params) if (container) - return container.attackby(I, user) + return container.use_tool(tool, user) + return ..() /obj/item/clothing/accessory/storage/emp_act(severity) diff --git a/code/modules/crafting/_crafting_holder.dm b/code/modules/crafting/_crafting_holder.dm index 04b611b8adc46..9b67b67a74fa9 100644 --- a/code/modules/crafting/_crafting_holder.dm +++ b/code/modules/crafting/_crafting_holder.dm @@ -33,22 +33,21 @@ qdel(thing) . = ..() -/obj/item/crafting_holder/attackby(obj/item/W, mob/user) - +/obj/item/crafting_holder/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/pen)) var/new_label = sanitizeSafe(input(user, "What do you wish to label this assembly?", "Assembly Labelling", label_name), MAX_NAME_LEN) if(new_label && !user.incapacitated() && W.loc == user && user.Adjacent(src) && !QDELETED(src)) to_chat(user, SPAN_NOTICE("You label \the [src] with '[new_label]'.")) label_name = new_label - return + return TRUE if(current_crafting_stage) var/singleton/crafting_stage/next_stage = current_crafting_stage.get_next_stage(W) if(next_stage && next_stage.progress_to(W, user, src)) advance_to(next_stage, user, W) - return + return TRUE - . = ..() + return ..() /** diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index 5e23784892032..6e94a009770fc 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -45,7 +45,7 @@ else remove_contents(user) -/obj/item/reagent_containers/glass/rag/attackby(obj/item/W, mob/user) +/obj/item/reagent_containers/glass/rag/use_tool(obj/item/W, mob/living/user, list/click_params) if (!on_fire && W.IsFlameSource()) ignite() if(on_fire) @@ -55,9 +55,11 @@ ) else to_chat(user, SPAN_WARNING("You manage to singe \the [src], but it won't burn on its own.")) // Give a hint about needing fuel + update_name() + return TRUE + + return ..() - . = ..() - update_name() /obj/item/reagent_containers/glass/rag/proc/update_name() if(on_fire) diff --git a/code/modules/detectivework/tools/sample_kits.dm b/code/modules/detectivework/tools/sample_kits.dm index 5ef1ca8f1b842..3c15d9c4c41dd 100644 --- a/code/modules/detectivework/tools/sample_kits.dm +++ b/code/modules/detectivework/tools/sample_kits.dm @@ -54,11 +54,11 @@ update_icon() return 1 -/obj/item/sample/attackby(obj/O, mob/user) - if(O.type == src.type) - if(user.unEquip(O) && merge_evidence(O, user)) - qdel(O) - return 1 +/obj/item/sample/use_tool(obj/item/item, mob/living/user, list/click_params) + if(item.type == type) + if(user.unEquip(item) && merge_evidence(item, user)) + qdel(item) + return TRUE return ..() /obj/item/sample/fibers diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index a2dbd130c8137..aef4e002ef355 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -17,30 +17,35 @@ var/worth = 0 var/static/denominations = list(1000,500,200,100,50,20,10,1) -/obj/item/spacecash/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/spacecash/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/spacecash)) - if(istype(W, /obj/item/spacecash/ewallet)) return 0 + if (istype(W, /obj/item/spacecash/ewallet)) + return ..() var/obj/item/spacecash/bundle/bundle if(!istype(W, /obj/item/spacecash/bundle)) var/obj/item/spacecash/cash = W - bundle = new (src.loc) + bundle = new (loc) bundle.worth += cash.worth qdel(cash) else //is bundle bundle = W - bundle.worth += src.worth + bundle.worth += worth bundle.update_icon() if(istype(user, /mob/living/carbon/human)) var/mob/living/carbon/human/h_user = user h_user.drop_from_inventory(bundle) h_user.put_in_hands(bundle) - to_chat(user, SPAN_NOTICE("You add [src.worth] [GLOB.using_map.local_currency_name] worth of money to the bundles.
It holds [bundle.worth] [GLOB.using_map.local_currency_name] now.")) + to_chat(user, SPAN_NOTICE("You add [worth] [GLOB.using_map.local_currency_name] worth of money to the bundles.
It holds [bundle.worth] [GLOB.using_map.local_currency_name] now.")) qdel(src) + return TRUE - else if(istype(W, /obj/item/gun/launcher/money)) + if (istype(W, /obj/item/gun/launcher/money)) var/obj/item/gun/launcher/money/L = W L.absorb_cash(src, user) + return TRUE + + return ..() /obj/item/spacecash/proc/getMoneyImages() if(icon_state) diff --git a/code/modules/games/boardgame.dm b/code/modules/games/boardgame.dm index 23b8ed1c13bf9..857c985c18307 100644 --- a/code/modules/games/boardgame.dm +++ b/code/modules/games/boardgame.dm @@ -15,24 +15,27 @@ return TRUE return ..() -/obj/item/board/attackby(obj/item/I as obj, mob/user as mob) - if(!addPiece(I,user)) - ..() +/obj/item/board/use_tool(obj/item/item, mob/living/user, list/click_params) + if(addPiece(item,user)) + return TRUE + return ..() /obj/item/board/proc/addPiece(obj/item/I as obj, mob/user as mob, tile = 0) if(I.w_class != ITEM_SIZE_TINY) //only small stuff user.show_message(SPAN_WARNING("\The [I] is too big to be used as a board piece.")) - return 0 + return TRUE if(num == 64) user.show_message(SPAN_WARNING("\The [src] is already full!")) - return 0 + return TRUE if(tile > 0 && board["[tile]"]) user.show_message(SPAN_WARNING("That space is already filled!")) - return 0 + return TRUE if(!user.Adjacent(src)) - return 0 + to_chat(user, SPAN_WARNING("You need to be near \the [src].")) + return TRUE if(!user.unEquip(I, src)) - return 0 + FEEDBACK_UNEQUIP_FAILURE(user, I) + return TRUE num++ @@ -48,9 +51,9 @@ else board["[tile]"] = I - src.updateDialog() + updateDialog() - return 1 + return TRUE /obj/item/board/interact(mob/user as mob) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 53ac8920f8982..436f3325ab0dd 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -85,15 +85,15 @@ P.card_icon = "joker" cards += P -/obj/item/deck/attackby(obj/O, mob/user) +/obj/item/deck/use_tool(obj/item/O, mob/living/user, list/click_params) if(istype(O,/obj/item/hand)) var/obj/item/hand/H = O for(var/datum/playingcard/P in H.cards) cards += P qdel(O) to_chat(user, "You place your cards on the bottom of \the [src].") - return - ..() + return TRUE + return ..() /obj/item/deck/verb/draw_card() @@ -164,7 +164,7 @@ user.visible_message("\The [user] deals a card to \the [target].") H.throw_at(get_step(target,target.dir),10,1,user) -/obj/item/hand/attackby(obj/O, mob/user) +/obj/item/hand/use_tool(obj/item/O, mob/living/user, list/click_params) if(istype(O,/obj/item/hand)) var/obj/item/hand/H = O for(var/datum/playingcard/P in cards) @@ -172,8 +172,8 @@ H.concealed = src.concealed qdel(src) H.update_icon() - return - ..() + return TRUE + return ..() /obj/item/deck/attack_self(mob/user) diff --git a/code/modules/goals/definitions/department_clerical.dm b/code/modules/goals/definitions/department_clerical.dm index be137ba83932e..dbcf5e48e9748 100644 --- a/code/modules/goals/definitions/department_clerical.dm +++ b/code/modules/goals/definitions/department_clerical.dm @@ -126,18 +126,18 @@ if(length(has_signed)) to_chat(user, SPAN_NOTICE("It has been signed by: [english_list(has_signed)].")) -/obj/item/paperwork/attackby(obj/item/W, mob/user) +/obj/item/paperwork/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/pen)) if(user.real_name in has_signed) to_chat(user, SPAN_WARNING("You have already signed \the [src].")) - return + return TRUE if(!(user.real_name in needs_signed)) to_chat(user, SPAN_WARNING("You can't see anywhere on \the [src] for you to sign; it doesn't need your signature.")) - return + return TRUE LAZYADD(has_signed, user.real_name) LAZYREMOVE(needs_signed, user.real_name) user.visible_message(SPAN_NOTICE("\The [user] signs \the [src] with \the [W].")) associated_goal?.update_strings() update_icon() return TRUE - . = ..() + return ..() diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index bd3fd4e010e64..a2c6651f06c11 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -168,28 +168,24 @@ /obj/machinery/door/window/holowindoor/Destroy() ..() -/obj/machinery/door/window/holowindoor/attackby(obj/item/I as obj, mob/user as mob) - +/obj/machinery/door/window/holowindoor/use_tool(obj/item/I, mob/living/user, list/click_params) if (operating == DOOR_OPERATING_YES) - return - - if (user.a_intent == I_HURT) return ..() - src.add_fingerprint(user) - if (!src.requiresID()) + if (!requiresID()) user = null - if (src.allowed(user)) - if (src.density) + if (allowed(user)) + if (density) open() else close() - else if (src.density) - flick(text("[]deny", src.base_state), src) + else if (density) + flick(text("[]deny", base_state), src) + return TRUE - return + return ..() /obj/machinery/door/window/holowindoor/shatter(display_message = 1) src.set_density(0) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 3b76726b5d501..4cf87ca64d464 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -166,15 +166,14 @@ if(seed) seed.thrown_at(src,hit_atom) ..() -/obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/W, mob/user) - +/obj/item/reagent_containers/food/snacks/grown/use_tool(obj/item/W, mob/living/user, list/click_params) if(seed) if(isCoil(W)) var/obj/item/stack/cable_coil/C = W if(seed.get_trait(TRAIT_PRODUCT_ICON) in list("flower2","flower3","flower4","flower5","flower6")) if(!C.can_use(1)) USE_FEEDBACK_STACK_NOT_ENOUGH(C, 1, "to make a pin out of \the [src.name].") - return + return TRUE C.use(1) to_chat(user, SPAN_NOTICE("You add some wire to the [src.name] and make a pin.")) var/obj/item/clothing/head/hairflower/pin = new /obj/item/clothing/head/hairflower(get_turf(src)) @@ -188,23 +187,23 @@ pin.item_state = "hairflower" pin.color = src.color qdel(src) - return + return TRUE else if(seed.get_trait(TRAIT_PRODUCES_POWER)) if(!C.can_use(5)) USE_FEEDBACK_STACK_NOT_ENOUGH(C, 5, "to wire \the [src.name].") - return + return TRUE to_chat(user, SPAN_NOTICE("You add some cable to the [src.name] and slide it inside the battery casing.")) var/obj/item/cell/potato/pocell = new /obj/item/cell/potato(get_turf(src)) pocell.maxcharge = src.potency * 10 pocell.charge = pocell.maxcharge qdel(src) - return + return TRUE else if(W.sharp) if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful. user.show_message(SPAN_NOTICE("You carve a face into [src]!"), 1) new /obj/item/clothing/head/pumpkinhead (user.loc) qdel(src) - return + return TRUE else if(seed.chems) if(isHatchet(W)) if(!isnull(seed.chems[/datum/reagent/woodpulp])) @@ -219,22 +218,22 @@ user.visible_message(SPAN_NOTICE("\The [user] makes resin slabs out of \the [src].")) new /obj/item/stack/material/wood/vox(user.loc) qdel(src) - return + return TRUE else if(!isnull(seed.chems[/datum/reagent/drink/juice/potato])) to_chat(user, "You slice \the [src] into sticks.") new /obj/item/reagent_containers/food/snacks/rawsticks(get_turf(src)) qdel(src) - return + return TRUE else if(!isnull(seed.chems[/datum/reagent/drink/juice/carrot])) to_chat(user, "You slice \the [src] into sticks.") new /obj/item/reagent_containers/food/snacks/carrotfries(get_turf(src)) qdel(src) - return + return TRUE else if(!isnull(seed.chems[/datum/reagent/drink/milk/soymilk])) to_chat(user, "You roughly chop up \the [src].") new /obj/item/reagent_containers/food/snacks/soydope(get_turf(src)) qdel(src) - return + return TRUE else if(seed.get_trait(TRAIT_FLESH_COLOUR)) to_chat(user, "You slice up \the [src].") var/slices = rand(3,5) @@ -243,8 +242,8 @@ var/obj/item/reagent_containers/food/snacks/fruit_slice/F = new(get_turf(src),seed) if(reagents_to_transfer) reagents.trans_to_obj(F,reagents_to_transfer) qdel(src) - return - ..() + return TRUE + return ..() /obj/item/reagent_containers/food/snacks/grown/apply_hit_effect(mob/living/target, mob/living/user, hit_zone) . = ..() @@ -289,7 +288,7 @@ continue if(NG.amount>=NG.max_amount) continue - NG.attackby(G, user) + NG.use_tool(G, user) to_chat(user, "You add the newly-formed grass to the stack. It now contains [G.amount] tiles.") qdel(src) return diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm index 1d1c588b342cd..14ec0857d7374 100644 --- a/code/modules/hydroponics/grown_inedible.dm +++ b/code/modules/hydroponics/grown_inedible.dm @@ -24,8 +24,7 @@ var/carve_time = 5 SECONDS var/result_type = null -/obj/item/carvable/attackby(obj/item/W, mob/user) - ..() +/obj/item/carvable/use_tool(obj/item/W, mob/living/user, list/click_params) if (result_type && is_type_in_list(W, allow_tool_types)) user.visible_message( SPAN_ITALIC("\The [user] starts to carve \the [src] with \a [W]."), @@ -34,7 +33,7 @@ ) if (!do_after(user, carve_time, src, DO_PUBLIC_UNIQUE)) to_chat(user, SPAN_ITALIC("You stop carving \the [src].")) - return + return TRUE var/result = new result_type() user.put_in_hands(result) user.visible_message( @@ -42,6 +41,9 @@ range = 5 ) qdel(src) + return TRUE + + return ..() /obj/item/carvable/corncob name = "corn cob" diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index fe040ecc888a1..db358526714c4 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -34,14 +34,15 @@ QDEL_NULL(installed_gun) return ..() -/obj/item/integrated_circuit/manipulation/weapon_firing/attackby(obj/O, mob/user) +/obj/item/integrated_circuit/manipulation/weapon_firing/use_tool(obj/item/O, mob/living/user, list/click_params) if(istype(O, /obj/item/gun/energy)) var/obj/item/gun/energy/gun = O if(installed_gun) to_chat(user, SPAN_WARNING("There's already a weapon installed.")) - return + return TRUE if(!user.unEquip(gun,src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, gun) + return TRUE installed_gun = gun to_chat(user, SPAN_NOTICE("You slide \the [gun] into the firing mechanism.")) playsound(src, 'sound/items/Crowbar.ogg', 50, 1) @@ -56,8 +57,9 @@ var/datum/firemode/fm = installed_gun.firemodes[installed_gun.sel_mode] set_pin_data(IC_OUTPUT, 2, fm.name) push_data() - else - ..() + return TRUE + + return ..() /obj/item/integrated_circuit/manipulation/weapon_firing/attack_self(mob/user) if(installed_gun) @@ -180,16 +182,20 @@ detach_grenade() return ..() -/obj/item/integrated_circuit/manipulation/grenade/attackby(obj/item/grenade/G, mob/user) - if(istype(G)) +/obj/item/integrated_circuit/manipulation/grenade/use_tool(obj/item/G, mob/living/user, list/click_params) + if(istype(G, /obj/item/grenade)) if(attached_grenade) to_chat(user, SPAN_WARNING("There is already a grenade attached!")) - else if(user.unEquip(G,src)) - user.visible_message(SPAN_WARNING("\The [user] attaches \a [G] to \the [src]!"), SPAN_NOTICE("You attach \the [G] to \the [src].")) - attach_grenade(G) - G.forceMove(src) - else - return ..() + return TRUE + if (!user.unEquip(G,src)) + FEEDBACK_UNEQUIP_FAILURE(user, G) + return TRUE + user.visible_message(SPAN_WARNING("\The [user] attaches \a [G] to \the [src]!"), SPAN_NOTICE("You attach \the [G] to \the [src].")) + attach_grenade(G) + G.forceMove(src) + return TRUE + + return ..() /obj/item/integrated_circuit/manipulation/grenade/attack_self(mob/user) if(attached_grenade) @@ -645,10 +651,11 @@ controlling = null -/obj/item/integrated_circuit/manipulation/ai/attackby(obj/item/I, mob/user) - if(is_type_in_list(I, list(/obj/item/aicard, /obj/item/device/paicard, /obj/item/device/mmi))) - load_ai(user, I) - else return ..() +/obj/item/integrated_circuit/manipulation/ai/use_tool(obj/item/item, mob/living/user, list/click_params) + if(is_type_in_list(item, list(/obj/item/aicard, /obj/item/device/paicard, /obj/item/device/mmi))) + load_ai(user, item) + return TRUE + return ..() /obj/item/integrated_circuit/manipulation/ai/attack_self(user) unload_ai() diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 78cfd08103a24..634a5cb0b5b32 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -188,60 +188,68 @@ else to_chat(user, "This book is completely blank!") -/obj/item/book/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/book/use_tool(obj/item/W, mob/living/user, list/click_params) if(carved == 1) if(!store) if(W.w_class < ITEM_SIZE_NORMAL) if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE store = W - to_chat(user, SPAN_NOTICE("You put [W] in [title].")) - return + to_chat(user, SPAN_NOTICE("You put \the [W] in \the [title].")) + return TRUE else - to_chat(user, SPAN_NOTICE("[W] won't fit in [title].")) - return + to_chat(user, SPAN_WARNING("\The [W] won't fit in \the [title].")) + return TRUE else - to_chat(user, SPAN_NOTICE("There's already something in [title]!")) - return - if(istype(W, /obj/item/pen)) + to_chat(user, SPAN_WARNING("There's already something in [title]!")) + return TRUE + + else if(istype(W, /obj/item/pen)) if(unique) - to_chat(user, "These pages don't seem to take the ink well. Looks like you can't modify it.") - return + to_chat(user, SPAN_WARNING("These pages don't seem to take the ink well. Looks like you can't modify it.")) + return TRUE var/choice = input("What would you like to change?") in list("Title", "Contents", "Author", "Cancel") switch(choice) if("Title") var/newtitle = reject_bad_text(sanitizeSafe(input("Write a new title:"))) if(!newtitle) - to_chat(usr, "The title is invalid.") - return + to_chat(user, SPAN_WARNING("The title is invalid.")) + return TRUE else - src.SetName(newtitle) - src.title = newtitle + SetName(newtitle) + title = newtitle + return TRUE if("Contents") var/content = sanitize(input("Write your book's contents (HTML NOT allowed):") as message|null, MAX_BOOK_MESSAGE_LEN) if(!content) - to_chat(usr, "The content is invalid.") - return + to_chat(user, SPAN_WARNING("The content is invalid.")) + return TRUE else - src.dat += content + dat += content + return TRUE if("Author") var/newauthor = sanitize(input(usr, "Write the author's name:")) if(!newauthor) - to_chat(usr, "The name is invalid.") - return + to_chat(user, SPAN_WARNING("The name is invalid.")) + return TRUE else - src.author = newauthor + author = newauthor + return TRUE else - return + return TRUE + else if(istype(W, /obj/item/material/knife) || isWirecutter(W)) - if(carved) return - to_chat(user, SPAN_NOTICE("You begin to carve out [title].")) + if(carved) + to_chat(user, SPAN_WARNING("\The [src] already has something carved in it.")) + return TRUE + to_chat(user, SPAN_NOTICE("You begin to carve out \the [title].")) if(do_after(user, 3 SECONDS, src, DO_PUBLIC_UNIQUE)) - to_chat(user, SPAN_NOTICE("You carve out the pages from [title]! You didn't want to read it anyway.")) + to_chat(user, SPAN_NOTICE("You carve out the pages from \the [title]! You didn't want to read it anyway.")) carved = 1 - return - else - ..() + return TRUE + + return ..() /obj/item/book/use_before(mob/living/carbon/M as mob, mob/living/carbon/user as mob) . = FALSE diff --git a/code/modules/locks/lock_construct.dm b/code/modules/locks/lock_construct.dm index e1f75e1e4e6ba..2a11e1f7aa315 100644 --- a/code/modules/locks/lock_construct.dm +++ b/code/modules/locks/lock_construct.dm @@ -12,7 +12,7 @@ throwforce = 0 lock_data = generateRandomString(round(material.integrity/50)) -/obj/item/material/lock_construct/attackby(obj/item/I, mob/user) +/obj/item/material/lock_construct/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I,/obj/item/key)) var/obj/item/key/K = I if(!K.key_data) @@ -20,13 +20,15 @@ K.key_data = lock_data else to_chat(user, SPAN_WARNING("\The [I] already unlocks something...")) - return + return TRUE + if(istype(I,/obj/item/material/lock_construct)) var/obj/item/material/lock_construct/L = I src.lock_data = L.lock_data to_chat(user, SPAN_NOTICE("You copy the lock from \the [L] to \the [src], making them identical.")) - return - ..() + return TRUE + + return ..() /obj/item/material/lock_construct/proc/create_lock(atom/target, mob/user) . = new /datum/lock(target,lock_data) diff --git a/code/modules/materials/materials_ore.dm b/code/modules/materials/materials_ore.dm index 6527bd9b16373..0db96255317ad 100644 --- a/code/modules/materials/materials_ore.dm +++ b/code/modules/materials/materials_ore.dm @@ -10,12 +10,12 @@ /obj/item/ore/get_material() return material -/obj/item/ore/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/ore/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/device/core_sampler)) var/obj/item/device/core_sampler/C = W C.sample_item(src, user) - else - return ..() + return TRUE + return ..() /obj/item/ore/New(newloc, _mat) if(_mat) diff --git a/code/modules/mechs/components/_components.dm b/code/modules/mechs/components/_components.dm index 46e21a94e2602..43bb9b80eb60e 100644 --- a/code/modules/mechs/components/_components.dm +++ b/code/modules/mechs/components/_components.dm @@ -93,8 +93,8 @@ qdel(RC) update_components() -/obj/item/mech_component/attackby(obj/item/thing, mob/user) - if(isScrewdriver(thing)) +/obj/item/mech_component/use_tool(obj/item/thing, mob/living/user, list/click_params) + if (isScrewdriver(thing)) if(length(contents)) //Filter non movables var/list/valid_contents = list() @@ -102,27 +102,30 @@ if(!A.anchored) valid_contents += A if(!length(valid_contents)) - return + return TRUE var/obj/item/removed = pick(valid_contents) if(!(removed in contents)) - return + return TRUE user.visible_message(SPAN_NOTICE("\The [user] removes \the [removed] from \the [src].")) removed.forceMove(user.loc) playsound(user.loc, 'sound/effects/pop.ogg', 50, 0) update_components() else to_chat(user, SPAN_WARNING("There is nothing to remove.")) - return - if(isWelder(thing)) + return TRUE + + if (isWelder(thing)) repair_brute_generic(thing, user) - return - if(isCoil(thing)) + return TRUE + + if (isCoil(thing)) repair_burn_generic(thing, user) - return - if(istype(thing, /obj/item/device/robotanalyzer)) + return TRUE + + if (istype(thing, /obj/item/device/robotanalyzer)) to_chat(user, SPAN_NOTICE("Diagnostic Report for \the [src]:")) return_diagnostics(user) - return + return TRUE return ..() diff --git a/code/modules/mechs/components/arms.dm b/code/modules/mechs/components/arms.dm index 55a157280e485..3d1f4ca002ad8 100644 --- a/code/modules/mechs/components/arms.dm +++ b/code/modules/mechs/components/arms.dm @@ -25,12 +25,14 @@ /obj/item/mech_component/manipulators/prebuild() motivator = new(src) -/obj/item/mech_component/manipulators/attackby(obj/item/thing, mob/user) +/obj/item/mech_component/manipulators/use_tool(obj/item/thing, mob/living/user, list/click_params) if(istype(thing,/obj/item/robot_parts/robot_component/actuator)) if(motivator) to_chat(user, SPAN_WARNING("\The [src] already has an actuator installed.")) - return - if(install_component(thing, user)) motivator = thing + return TRUE + if(install_component(thing, user)) + motivator = thing + return TRUE else return ..() @@ -84,4 +86,3 @@ icon_state = "combat_arms" action_delay = 10 power_use = 50 - diff --git a/code/modules/mechs/components/body.dm b/code/modules/mechs/components/body.dm index bd285f7034853..d665d7da1a4e2 100644 --- a/code/modules/mechs/components/body.dm +++ b/code/modules/mechs/components/body.dm @@ -144,25 +144,32 @@ cell = new /obj/item/cell/high(src) cell.charge = cell.maxcharge -/obj/item/mech_component/chassis/attackby(obj/item/thing, mob/user) +/obj/item/mech_component/chassis/use_tool(obj/item/thing, mob/living/user, list/click_params) if(istype(thing,/obj/item/robot_parts/robot_component/diagnosis_unit)) if(diagnostics) to_chat(user, SPAN_WARNING("\The [src] already has a diagnostic system installed.")) - return - if(install_component(thing, user)) diagnostics = thing + return TRUE + if(install_component(thing, user)) + diagnostics = thing + return TRUE + else if(istype(thing, /obj/item/cell)) if(cell) to_chat(user, SPAN_WARNING("\The [src] already has a cell installed.")) - return - if(install_component(thing,user)) cell = thing + return TRUE + if(install_component(thing,user)) + cell = thing + return TRUE + else if(istype(thing, /obj/item/robot_parts/robot_component/armour/exosuit)) if(m_armour) to_chat(user, SPAN_WARNING("\The [src] already has armour installed.")) - return + return TRUE if(install_component(thing, user)) m_armour = thing - else - return ..() + return TRUE + + return ..() /obj/item/mech_component/chassis/MouseDrop_T(atom/dropping, mob/user) var/obj/machinery/portable_atmospherics/canister/C = dropping diff --git a/code/modules/mechs/components/head.dm b/code/modules/mechs/components/head.dm index 649b54dc6bee7..ed7d685f915de 100644 --- a/code/modules/mechs/components/head.dm +++ b/code/modules/mechs/components/head.dm @@ -56,22 +56,30 @@ /obj/item/mech_component/sensors/ready_to_install() return (radio && camera) -/obj/item/mech_component/sensors/attackby(obj/item/thing, mob/user) +/obj/item/mech_component/sensors/use_tool(obj/item/thing, mob/living/user, list/click_params) if(istype(thing, /obj/item/mech_component/control_module)) if(software) to_chat(user, SPAN_WARNING("\The [src] already has a control modules installed.")) - return - if(install_component(thing, user)) software = thing + return TRUE + if(install_component(thing, user)) + software = thing + return TRUE + else if(istype(thing,/obj/item/robot_parts/robot_component/radio)) if(radio) to_chat(user, SPAN_WARNING("\The [src] already has a radio installed.")) - return - if(install_component(thing, user)) radio = thing + return TRUE + if(install_component(thing, user)) + radio = thing + return TRUE + else if(istype(thing,/obj/item/robot_parts/robot_component/camera)) if(camera) to_chat(user, SPAN_WARNING("\The [src] already has a camera installed.")) - return - if(install_component(thing, user)) camera = thing + return TRUE + if(install_component(thing, user)) + camera = thing + return TRUE else return ..() @@ -107,11 +115,10 @@ . = ..() to_chat(user, SPAN_NOTICE("It has [max_installed_software - LAZYLEN(installed_software)] empty slot\s remaining out of [max_installed_software].")) -/obj/item/mech_component/control_module/attackby(obj/item/thing, mob/user) - +/obj/item/mech_component/control_module/use_tool(obj/item/thing, mob/living/user, list/click_params) if(istype(thing, /obj/item/circuitboard/exosystem)) install_software(thing, user) - return + return TRUE if(isScrewdriver(thing)) var/result = ..() diff --git a/code/modules/mechs/components/legs.dm b/code/modules/mechs/components/legs.dm index a4f2538b8131a..4868f24e6aa25 100644 --- a/code/modules/mechs/components/legs.dm +++ b/code/modules/mechs/components/legs.dm @@ -25,12 +25,14 @@ /obj/item/mech_component/propulsion/update_components() motivator = locate() in src -/obj/item/mech_component/propulsion/attackby(obj/item/thing, mob/user) +/obj/item/mech_component/propulsion/use_tool(obj/item/thing, mob/living/user, list/click_params) if(istype(thing,/obj/item/robot_parts/robot_component/actuator)) if(motivator) to_chat(user, SPAN_WARNING("\The [src] already has an actuator installed.")) - return - if(install_component(thing, user)) motivator = thing + return TRUE + if(install_component(thing, user)) + motivator = thing + return TRUE else return ..() diff --git a/code/modules/mechs/equipment/combat.dm b/code/modules/mechs/equipment/combat.dm index 23cd60748387d..3c22bb6c5e027 100644 --- a/code/modules/mechs/equipment/combat.dm +++ b/code/modules/mechs/equipment/combat.dm @@ -558,8 +558,8 @@ if(owner && holding) update_icon() -/obj/item/mech_equipment/mounted_system/flamethrower/attackby(obj/item/W as obj, mob/user as mob) - if(!CanPhysicallyInteract(user)) return +/obj/item/mech_equipment/mounted_system/flamethrower/use_tool(obj/item/W, mob/living/user, list/click_params) + if(!CanPhysicallyInteract(user)) return ..() var/obj/item/flamethrower/full/mech/FM = holding if(istype(FM)) @@ -568,17 +568,17 @@ user.visible_message(SPAN_NOTICE("\The [user] pries out \the [FM.beaker] using \the [W].")) FM.beaker.dropInto(get_turf(user)) FM.beaker = null - return + return TRUE if (istype(W, /obj/item/reagent_containers) && W.is_open_container() && (W.w_class <= FM.max_beaker)) if(FM.beaker) to_chat(user, SPAN_NOTICE("There is already a tank inserted!")) - return + return TRUE if(user.unEquip(W, FM)) user.visible_message(SPAN_NOTICE("\The [user] inserts \the [W] inside \the [src].")) FM.beaker = W - return - ..() + return TRUE + return ..() /obj/item/mech_equipment/mounted_system/flamethrower/on_update_icon() . = ..() diff --git a/code/modules/mechs/equipment/medical.dm b/code/modules/mechs/equipment/medical.dm index 90257ecba5a4b..2a68c2cad5551 100644 --- a/code/modules/mechs/equipment/medical.dm +++ b/code/modules/mechs/equipment/medical.dm @@ -29,10 +29,11 @@ if(.) sleeper.ui_interact(user) -/obj/item/mech_equipment/sleeper/attackby(obj/item/I, mob/user) +/obj/item/mech_equipment/sleeper/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/reagent_containers/glass)) sleeper.use_tool(I, user) - else return ..() + return TRUE + return ..() /obj/item/mech_equipment/sleeper/afterattack(atom/target, mob/living/user, inrange, params) . = ..() diff --git a/code/modules/mechs/equipment/utility.dm b/code/modules/mechs/equipment/utility.dm index 96e19c8c8255a..18953d1dee83d 100644 --- a/code/modules/mechs/equipment/utility.dm +++ b/code/modules/mechs/equipment/utility.dm @@ -550,11 +550,11 @@ drill_head = DH -/obj/item/mech_equipment/drill/attackby(obj/item/I, mob/user) +/obj/item/mech_equipment/drill/use_tool(obj/item/I, mob/living/user, list/click_params) if (istype(I, /obj/item/material/drill_head)) attach_head(I, user) return TRUE - . = ..() + return ..() /obj/item/mech_equipment/drill/proc/scoop_ore(at_turf) if (!owner) @@ -886,9 +886,7 @@ passive_power_use = 0 . = ..() -/obj/item/mech_equipment/camera/attackby(obj/item/W, mob/user) - . = ..() - +/obj/item/mech_equipment/camera/use_tool(obj/item/W, mob/living/user, list/click_params) if(isScrewdriver(W)) var/list/all_networks = list() for(var/network in GLOB.using_map.station_networks) @@ -900,11 +898,15 @@ var/network = input("Which network would you like to configure it for?") as null|anything in (all_networks) if(!network) to_chat(user, SPAN_WARNING("You cannot connect to any camera network!.")) + return TRUE var/delay = 2 SECONDS * user.skill_delay_mult(SKILL_DEVICES) if(do_after(user, delay, src, DO_DEFAULT | DO_BOTH_UNIQUE_ACT) && network) camera.network = list(network) camera.update_coverage(TRUE) to_chat(user, SPAN_NOTICE("You configure the camera for \the [network] network.")) + return TRUE + + return ..() /obj/item/mech_equipment/camera/attack_self(mob/user) . = ..() diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 6f3fcea1303b5..7a41280f9c118 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -122,7 +122,7 @@ var/global/list/mining_floors = list() var/mob/mob = AM var/obj/item/pickaxe/pickaxe = mob.IsHolding(/obj/item/pickaxe) if (pickaxe) - attackby(pickaxe, mob) + use_tool(pickaxe, mob) /turf/simulated/mineral/proc/MineralSpread() if(istype(mineral) && mineral.ore_spread_chance > 0) @@ -491,7 +491,7 @@ var/global/list/mining_floors = list() var/obj/item/storage/bag/fossils/S = W if(!S.quick_gather_single) for(var/obj/item/fossil/F in contents) - F.use_tool(W,user) + F.use_tool(W, user) return TRUE else return ..() @@ -544,4 +544,4 @@ var/global/list/mining_floors = list() if(istype(M,/mob/living/silicon/robot)) var/mob/living/silicon/robot/R = M for (var/obj/item/item as anything in R.GetAllHeld(/obj/item/storage/ore)) - attackby(item, R) + use_tool(item, R) diff --git a/code/modules/mob/grab/grab_object.dm b/code/modules/mob/grab/grab_object.dm index 777ace239e26a..ed148950f479b 100644 --- a/code/modules/mob/grab/grab_object.dm +++ b/code/modules/mob/grab/grab_object.dm @@ -298,9 +298,10 @@ /obj/item/grab/proc/force_stand() return current_grab.force_stand -/obj/item/grab/attackby(obj/W, mob/user) +/obj/item/grab/use_tool(obj/item/item, mob/living/user, list/click_params) if(user == assailant) - current_grab.item_attack(src, W) + current_grab.item_attack(src, item) + return ..() /obj/item/grab/proc/can_absorb() return current_grab.can_absorb diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 184dc01b87427..82a4f48a57464 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -4,7 +4,7 @@ var/obj/item/in_slot = get_equipped_item(slot) if (istype(in_slot)) if (istype(in_hand)) - in_slot.attackby(in_hand, src) + in_slot.use_tool(in_hand, src) else in_slot.attack_hand(src) else diff --git a/code/modules/mob/living/carbon/xenobiological/items.dm b/code/modules/mob/living/carbon/xenobiological/items.dm index c8e1208377989..67793bbef1f3c 100644 --- a/code/modules/mob/living/carbon/xenobiological/items.dm +++ b/code/modules/mob/living/carbon/xenobiological/items.dm @@ -13,18 +13,20 @@ var/enhanced = 0 //has it been enhanced before? atom_flags = ATOM_FLAG_OPEN_CONTAINER -/obj/item/slime_extract/attackby(obj/item/O as obj, mob/user as mob) +/obj/item/slime_extract/use_tool(obj/item/O, mob/living/user, list/click_params) if(istype(O, /obj/item/slimesteroid2)) if(enhanced == 1) to_chat(user, SPAN_WARNING(" This extract has already been enhanced!")) - return ..() + return TRUE if(Uses == 0) to_chat(user, SPAN_WARNING(" You can't enhance a used extract!")) - return ..() + return TRUE to_chat(user, "You apply the enhancer. It now has triple the amount of uses.") Uses = 3 enhanced = 1 qdel(O) + return TRUE + return ..() /obj/item/slime_extract/New() GLOB.extracted_slime_cores_amount += 1 diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 1ada0c08a7bda..74649af67a924 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -221,7 +221,7 @@ break if(wrapped) //Already have an item. - //Temporary put wrapped into user so target's attackby() checks pass. + //Temporary put wrapped into user so target's use_tool() checks pass. wrapped.forceMove(user) if (istype(target, /obj/structure/table)) diff --git a/code/modules/modular_computers/computers/modular_computer/interaction.dm b/code/modules/modular_computers/computers/modular_computer/interaction.dm index 3002f4171e5a6..4c0e76c531ebd 100644 --- a/code/modules/modular_computers/computers/modular_computer/interaction.dm +++ b/code/modules/modular_computers/computers/modular_computer/interaction.dm @@ -114,39 +114,43 @@ else if(!enabled && screen_on) turn_on(user) -/obj/item/modular_computer/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/modular_computer/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/card/id)) // ID Card, try to insert it. var/obj/item/card/id/I = W if(!card_slot) - to_chat(user, "You try to insert [I] into [src], but it does not have an ID card slot installed.") - return + to_chat(user, SPAN_WARNING("You try to insert \the [I] into \the [src], but it does not have an ID card slot installed.")) + return TRUE if(card_slot.insert_id(I, user)) update_verbs() - return + return TRUE if(istype(W, /obj/item/pen) && stores_pen) if(istype(stored_pen)) - to_chat(user, SPAN_NOTICE("There is already a pen in [src].")) - return + to_chat(user, SPAN_WARNING("There is already a pen in \the [src].")) + return TRUE if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE stored_pen = W update_verbs() - to_chat(user, SPAN_NOTICE("You insert [W] into [src].")) - return + to_chat(user, SPAN_NOTICE("You insert \the [W] into \the [src].")) + return TRUE + if(istype(W, /obj/item/paper)) var/obj/item/paper/paper = W if(scanner && paper.info) scanner.do_on_attackby(user, W) - return + return TRUE + if(istype(W, /obj/item/paper) || istype(W, /obj/item/paper_bundle)) if(nano_printer) - nano_printer.attackby(W, user) + nano_printer.use_tool(W, user) if(istype(W, /obj/item/aicard)) if(!ai_slot) - return - ai_slot.attackby(W, user) + return ..() + ai_slot.use_tool(W, user) + return TRUE if(!modifiable) return ..() @@ -156,37 +160,40 @@ if(C.hardware_size <= max_hardware_size) try_install_component(user, C) else - to_chat(user, "This component is too large for \the [src].") + to_chat(user, SPAN_WARNING("This component is too large for \the [src].")) + return TRUE + if(isWrench(W)) var/list/components = get_all_components() if(length(components)) - to_chat(user, "Remove all components from \the [src] before disassembling it.") - return - new /obj/item/stack/material/steel( get_turf(src.loc), steel_sheet_cost ) - src.visible_message("\The [src] has been disassembled by [user].") + to_chat(user, SPAN_WARNING("Remove all components from \the [src] before disassembling it.")) + return TRUE + new /obj/item/stack/material/steel( get_turf(loc), steel_sheet_cost ) + visible_message("\The [src] has been disassembled by \the [user].") qdel(src) - return + return TRUE + if(isWelder(W)) var/obj/item/weldingtool/WT = W var/damage = get_damage_value() if(!WT.can_use(round(damage/75), user)) - return + return TRUE if(!get_damage_value()) - to_chat(user, "\The [src] does not require repairs.") - return + to_chat(user, SPAN_WARNING("\The [src] does not require repairs.")) + return TRUE to_chat(user, "You begin repairing damage to \the [src]...") if(do_after(user, damage / 10, src, DO_REPAIR_CONSTRUCT) && WT.remove_fuel(round(damage / 75))) revive_health() to_chat(user, "You repair \the [src].") - return + return TRUE if(isScrewdriver(W)) var/list/all_components = get_all_components() if(!length(all_components)) - to_chat(user, "This device doesn't have any components installed.") - return + to_chat(user, SPAN_WARNING("This device doesn't have any components installed.")) + return TRUE var/list/component_names = list() for(var/obj/item/stock_parts/computer/H in all_components) component_names.Add(H.name) @@ -194,21 +201,19 @@ var/choice = input(usr, "Which component do you want to uninstall?", "Computer maintenance", null) as null|anything in component_names if(!choice) - return + return TRUE if(!Adjacent(usr)) - return + return TRUE var/obj/item/stock_parts/computer/H = find_hardware_by_name(choice) if(!H) - return + return TRUE uninstall_component(user, H) - - return - - ..() + return TRUE + return ..() /obj/item/modular_computer/examine(mob/user) . = ..() diff --git a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm index 9ae39f067a198..ad67b30e74c1d 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm @@ -21,7 +21,7 @@ // Allows us to create "north bump" "south bump" etc. named objects, for more comfortable mapping. name = "telescreen" -/obj/item/modular_computer/telescreen/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/modular_computer/telescreen/use_tool(obj/item/W, mob/living/user, list/click_params) if(isCrowbar(W)) if(anchored) shutdown_computer() @@ -30,6 +30,7 @@ pixel_x = 0 pixel_y = 0 to_chat(user, "You unsecure \the [src].") + return TRUE else var/choice = input(user, "Where do you want to place \the [src]?", "Offset selection") in list("North", "South", "West", "East", "This tile", "Cancel") var/valid = FALSE @@ -53,5 +54,5 @@ anchored = TRUE screen_on = TRUE to_chat(user, "You secure \the [src].") - return - ..() + return TRUE + return ..() diff --git a/code/modules/modular_computers/hardware/_hardware.dm b/code/modules/modular_computers/hardware/_hardware.dm index b0f7d4b0c9c50..2c62c1fc53fd5 100644 --- a/code/modules/modular_computers/hardware/_hardware.dm +++ b/code/modules/modular_computers/hardware/_hardware.dm @@ -21,10 +21,10 @@ /// Chance of malfunction when the component is damaged var/malfunction_probability = 10 var/usage_flags = PROGRAM_ALL - /// Whether attackby will be passed on it even with a closed panel + /// Whether use_tool will be passed on it even with a closed panel var/external_slot -/obj/item/stock_parts/computer/attackby(obj/item/W as obj, mob/living/user as mob) +/obj/item/stock_parts/computer/use_tool(obj/item/W, mob/living/user, list/click_params) // Multitool. Runs diagnostics if(isMultitool(W)) to_chat(user, "***** DIAGNOSTICS REPORT *****") diff --git a/code/modules/modular_computers/hardware/ai_slot.dm b/code/modules/modular_computers/hardware/ai_slot.dm index 9cb8eb6a7d9a0..b5422129cdf8f 100644 --- a/code/modules/modular_computers/hardware/ai_slot.dm +++ b/code/modules/modular_computers/hardware/ai_slot.dm @@ -19,15 +19,16 @@ power_usage = power_usage_occupied ..() -/obj/item/stock_parts/computer/ai_slot/attackby(obj/item/W, mob/user) - if(..()) +/obj/item/stock_parts/computer/ai_slot/use_tool(obj/item/W, mob/living/user, list/click_params) + if ((. = ..())) return TRUE if(istype(W, /obj/item/aicard)) if(stored_card) to_chat(user, "\The [src] is already occupied.") - return + return TRUE if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE do_insert_ai(user, W) return TRUE if(isScrewdriver(W) && stored_card) diff --git a/code/modules/modular_computers/hardware/card_slot.dm b/code/modules/modular_computers/hardware/card_slot.dm index 1813a7bca80ce..1d1515e68a961 100644 --- a/code/modules/modular_computers/hardware/card_slot.dm +++ b/code/modules/modular_computers/hardware/card_slot.dm @@ -101,8 +101,8 @@ loc.verbs |= /obj/item/stock_parts/computer/card_slot/proc/verb_eject_id return TRUE -/obj/item/stock_parts/computer/card_slot/attackby(obj/item/card/id/I, mob/living/user) - if(!istype(I)) +/obj/item/stock_parts/computer/card_slot/use_tool(obj/item/I, mob/living/user, list/click_params) + if(!istype(I, /obj/item/card/id)) return ..() insert_id(I, user) return TRUE diff --git a/code/modules/modular_computers/hardware/nano_printer.dm b/code/modules/modular_computers/hardware/nano_printer.dm index b57a4763a7775..e2a26634711a2 100644 --- a/code/modules/modular_computers/hardware/nano_printer.dm +++ b/code/modules/modular_computers/hardware/nano_printer.dm @@ -41,21 +41,23 @@ return FALSE return TRUE -/obj/item/stock_parts/computer/nano_printer/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/stock_parts/computer/nano_printer/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/paper)) if(stored_paper >= max_paper) to_chat(user, "You try to add \the [W] into \the [src], but its paper bin is full.") - return + return TRUE to_chat(user, "You insert \the [W] into [src].") qdel(W) stored_paper++ - else if(istype(W, /obj/item/paper_bundle)) + return TRUE + + if (istype(W, /obj/item/paper_bundle)) var/obj/item/paper_bundle/B = W var/num_of_pages_added = 0 if(stored_paper >= max_paper) to_chat(user, "You try to add \the [W] into \the [src], but its paper bin is full.") - return + return TRUE for(var/obj/item/bundleitem in B) //loop through items in bundle if(istype(bundleitem, /obj/item/paper)) //if item is paper (and not photo), add into the bin B.pages.Remove(bundleitem) @@ -74,4 +76,5 @@ else //if at least two items remain, just update the bundle icon B.update_icon() to_chat(user, "You add [num_of_pages_added] papers from \the [W] into \the [src].") - return + return TRUE + return ..() diff --git a/code/modules/modular_computers/hardware/scanners/scanner.dm b/code/modules/modular_computers/hardware/scanners/scanner.dm index 82d2ef6ebb5f6..14346087ed590 100644 --- a/code/modules/modular_computers/hardware/scanners/scanner.dm +++ b/code/modules/modular_computers/hardware/scanners/scanner.dm @@ -54,7 +54,7 @@ /obj/item/stock_parts/computer/scanner/proc/do_on_afterattack(mob/user, atom/target, proximity) -/obj/item/stock_parts/computer/scanner/attackby(obj/W, mob/living/user) +/obj/item/stock_parts/computer/scanner/use_tool(obj/item/W, mob/living/user, list/click_params) do_on_attackby(user, W) // Nanopaste. Repair all damage if present for a single unit. var/obj/item/stack/S = W diff --git a/code/modules/multiz/structures.dm b/code/modules/multiz/structures.dm index 10e7166fefae0..edc7477ad4bf6 100644 --- a/code/modules/multiz/structures.dm +++ b/code/modules/multiz/structures.dm @@ -205,7 +205,7 @@ if(isnull(I)) M.attack_hand(user) else - M.attackby(I, user) + M.use_tool(I, user) return FALSE diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm index 9a8fa5dcdd7ec..9019907fe36e6 100644 --- a/code/modules/organs/external/_external.dm +++ b/code/modules/organs/external/_external.dm @@ -221,18 +221,18 @@ for(var/obj/item/organ/external/child in children) child.show_decay_status(user) -/obj/item/organ/external/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/organ/external/use_tool(obj/item/W, mob/living/user, list/click_params) switch(stage) if(0) if(W.sharp) user.visible_message(SPAN_DANGER("[user] cuts [src] open with [W]!")) stage++ - return + return TRUE if(1) if(istype(W)) user.visible_message(SPAN_DANGER("[user] cracks [src] open like an egg with [W]!")) stage++ - return + return TRUE if(2) if(W.sharp || istype(W,/obj/item/hemostat) || isWirecutter(W)) var/list/organs = get_contents_recursive() @@ -256,8 +256,8 @@ user.visible_message(SPAN_DANGER("[user] extracts [removing] from [src] with [W]!")) else user.visible_message(SPAN_DANGER("[user] fishes around fruitlessly in [src] with [W].")) - return - ..() + return TRUE + return ..() /** diff --git a/code/modules/organs/internal/species/fbp.dm b/code/modules/organs/internal/species/fbp.dm index e6e71c6e87714..54e028196cdf6 100644 --- a/code/modules/organs/internal/species/fbp.dm +++ b/code/modules/organs/internal/species/fbp.dm @@ -66,7 +66,7 @@ if(cell) cell.emp_act(severity) -/obj/item/organ/internal/cell/attackby(obj/item/W, mob/user) +/obj/item/organ/internal/cell/use_tool(obj/item/W, mob/living/user, list/click_params) if(isScrewdriver(W)) if(open) open = 0 @@ -74,6 +74,7 @@ else open = 1 to_chat(user, SPAN_NOTICE("You unscrew the battery panel.")) + return TRUE if(isCrowbar(W)) if(open) @@ -81,6 +82,7 @@ user.put_in_hands(cell) to_chat(user, SPAN_NOTICE("You remove \the [cell] from \the [src].")) cell = null + return TRUE if (istype(W, /obj/item/cell)) if(open) @@ -89,6 +91,8 @@ else if(user.unEquip(W, src)) cell = W to_chat(user, SPAN_NOTICE("You insert \the [cell].")) + return TRUE + return ..() /obj/item/organ/internal/cell/replaced() ..() diff --git a/code/modules/organs/internal/stomach.dm b/code/modules/organs/internal/stomach.dm index bb4430d443d51..6f0b0416967b4 100644 --- a/code/modules/organs/internal/stomach.dm +++ b/code/modules/organs/internal/stomach.dm @@ -86,10 +86,10 @@ owner.empty_stomach() refresh_action_button() -/obj/item/organ/internal/stomach/attackby(obj/item/item, mob/living/user) +/obj/item/organ/internal/stomach/use_tool(obj/item/item, mob/living/user, list/click_params) if (!is_sharp(item)) return ..() - . = TRUE + user.visible_message( SPAN_ITALIC("\The [user] begins cutting into \a [src] with \a [item]."), SPAN_ITALIC("You start to cut open \the [src] with \the [item]."), @@ -97,9 +97,9 @@ ) take_internal_damage(5) if (!user.do_skilled(5 SECONDS, SKILL_ANATOMY, src) || QDELETED(src)) - return + return TRUE if (!Adjacent(user) || user.incapacitated()) - return + return TRUE var/removed_message var/length = length(contents) switch (length) @@ -117,6 +117,7 @@ take_internal_damage(5) for (var/atom/movable/movable as anything in contents) movable.dropInto(loc) + return TRUE /obj/item/organ/internal/stomach/return_air() return null diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index e70825c39e9d6..9e2f8d849c0b8 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -50,21 +50,23 @@ AddOverlays(overlay_image(icon, "clipboard_over", flags=RESET_COLOR)) return -/obj/item/material/clipboard/attackby(obj/item/W as obj, mob/user as mob) - +/obj/item/material/clipboard/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo)) if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE if(istype(W, /obj/item/paper)) toppaper = W to_chat(user, SPAN_NOTICE("You clip the [W] onto \the [src].")) update_icon() + return TRUE else if(istype(toppaper) && istype(W, /obj/item/pen)) - toppaper.attackby(W, usr) + toppaper.use_tool(W, user) update_icon() + return TRUE - return + return ..() /obj/item/material/clipboard/attack_self(mob/user as mob) var/dat = "Clipboard" @@ -113,7 +115,7 @@ if(istype(I, /obj/item/pen)) - P.attackby(I, usr) + P.use_tool(I, usr) else if(href_list["remove"]) var/obj/item/P = locate(href_list["remove"]) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index 4159843f38a92..83c740f7d7b66 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -31,17 +31,22 @@ AddOverlays("folder_paper") return -/obj/item/folder/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/folder/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo) || istype(W, /obj/item/paper_bundle)) if(!user.unEquip(W, src)) - return - to_chat(user, SPAN_NOTICE("You put the [W] into \the [src].")) + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE + to_chat(user, SPAN_NOTICE("You put \the [W] into \the [src].")) update_icon() + return TRUE + else if(istype(W, /obj/item/pen)) var/n_name = sanitizeSafe(input(usr, "What would you like to label the folder?", "Folder Labelling", null) as text, MAX_NAME_LEN) if((loc == usr && usr.stat == 0)) SetName("folder[(n_name ? text("- '[n_name]'") : null)]") - return + return TRUE + + return ..() /obj/item/folder/attack_self(mob/user as mob) var/dat = "[name]" @@ -138,9 +143,9 @@ else ..() -/obj/item/folder/envelope/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/folder/envelope/use_tool(obj/item/item, mob/living/user, list/click_params) if(sealed) sealcheck(user) - return + return TRUE else - ..() + return ..() diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index c317bcf4ab726..3d1b61935e30f 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -452,8 +452,7 @@ update_icon() -/obj/item/paper/attackby(obj/item/P as obj, mob/user as mob) - ..() +/obj/item/paper/use_tool(obj/item/P, mob/living/user, list/click_params) var/clown = 0 if(user.mind && (user.mind.assigned_role == "Clown")) clown = 1 @@ -461,20 +460,21 @@ if(istype(P, /obj/item/tape_roll)) var/obj/item/tape_roll/tape = P tape.stick(src, user) - return + return TRUE if(istype(P, /obj/item/paper) || istype(P, /obj/item/photo)) if(!can_bundle()) - return + USE_FEEDBACK_FAILURE("You cannot bundle these together!") + return TRUE var/obj/item/paper/other = P if(istype(other) && !other.can_bundle()) - return + USE_FEEDBACK_FAILURE("You cannot bundle these together!") + return TRUE if (istype(P, /obj/item/paper/carbon)) var/obj/item/paper/carbon/C = P if (!C.iscopy && !C.copied) to_chat(user, SPAN_NOTICE("Take off the carbon copy first.")) - add_fingerprint(user) - return + return TRUE var/obj/item/paper_bundle/B = new(src.loc) if (name != "paper") B.SetName(name) @@ -482,7 +482,7 @@ B.SetName(P.name) if(!user.unEquip(P, B) || !user.unEquip(src, B)) - return + return TRUE user.put_in_hands(B) to_chat(user, SPAN_NOTICE("You clip the [P.name] to [(src.name == "paper") ? "the paper" : src.name].")) @@ -490,22 +490,23 @@ B.pages.Add(src) B.pages.Add(P) B.update_icon() + return TRUE - else if(istype(P, /obj/item/pen)) + if (istype(P, /obj/item/pen)) if(icon_state == "scrap") to_chat(usr, SPAN_WARNING("\The [src] is too crumpled to write on.")) - return + return TRUE var/obj/item/pen/robopen/RP = P if ( istype(RP) && RP.mode == 2 ) RP.RenamePaper(user,src) else show_content(user, editable = TRUE) - return + return TRUE - else if(istype(P, /obj/item/stamp) || istype(P, /obj/item/clothing/ring/seal)) + if (istype(P, /obj/item/stamp) || istype(P, /obj/item/clothing/ring/seal)) if((!in_range(src, usr) && loc != user && !( istype(loc, /obj/item/material/clipboard) ) && loc.loc != user && user.get_active_hand() != P)) - return + return ..() stamps += (stamps=="" ? "
" : "
") + "This paper has been stamped with the [P.name]." @@ -526,7 +527,7 @@ if(istype(P, /obj/item/stamp/clown)) if(!clown) to_chat(user, SPAN_NOTICE("You are totally unable to use the stamp. HONK!")) - return + return TRUE if(!ico) ico = new @@ -540,18 +541,22 @@ playsound(src, 'sound/effects/stamp.ogg', 50, 1) to_chat(user, SPAN_NOTICE("You stamp the paper with your [P.name].")) + return TRUE else if(istype(P, /obj/item/flame)) burnpaper(P, user) + return TRUE - else if(istype(P, /obj/item/paper_bundle)) + if (istype(P, /obj/item/paper_bundle)) if(!can_bundle()) - return + USE_FEEDBACK_FAILURE("You cannot bundle these together!") + return TRUE var/obj/item/paper_bundle/attacking_bundle = P attacking_bundle.insert_sheet_at(user, (length(attacking_bundle.pages))+1, src) attacking_bundle.update_icon() + return TRUE + return ..() - add_fingerprint(user) /obj/item/paper/proc/can_bundle() return TRUE diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 009bc9bf8b826..41b531b66252a 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -15,29 +15,30 @@ var/list/pages = list() // Ordered list of pages as they are to be displayed. Can be different order than src.contents. -/obj/item/paper_bundle/attackby(obj/item/W as obj, mob/user as mob) - ..() - if(!istype(W)) - return - var/obj/item/paper/paper = W - if(istype(paper) && !paper.can_bundle()) - return //non-paper or bundlable paper only +/obj/item/paper_bundle/use_tool(obj/item/W, mob/living/user, list/click_params) + if(istype(W, /obj/item/paper)) + var/obj/item/paper/paper = W + if(!paper.can_bundle()) + USE_FEEDBACK_FAILURE("You cannot bundle these together!") + return TRUE + if (istype(W, /obj/item/paper/carbon)) var/obj/item/paper/carbon/C = W if (!C.iscopy && !C.copied) to_chat(user, SPAN_NOTICE("Take off the carbon copy first.")) - add_fingerprint(user) - return + return TRUE // adding sheets if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo)) insert_sheet_at(user, length(pages)+1, W) + return TRUE // burning - else if(istype(W, /obj/item/flame)) + if (istype(W, /obj/item/flame)) burnpaper(W, user) + return TRUE // merging bundles - else if(istype(W, /obj/item/paper_bundle)) + if (istype(W, /obj/item/paper_bundle)) for(var/obj/O in W) O.forceMove(src) O.add_fingerprint(user) @@ -45,18 +46,16 @@ to_chat(user, SPAN_NOTICE("You add \the [W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name].")) qdel(W) - else - if(istype(W, /obj/item/tape_roll)) - return 0 - if(istype(W, /obj/item/pen)) - show_browser(user, "", "window=[name]") //Closes the dialog + return TRUE + + if (istype(W, /obj/item/pen)) + show_browser(user, "", "window=[name]") //Closes the dialog var/obj/P = pages[page] - P.attackby(W, user) + P.use_tool(W, user) + update_icon() + attack_self(user) //Update the browsed page. - update_icon() - attack_self(user) //Update the browsed page. - add_fingerprint(user) - return + return ..() /obj/item/paper_bundle/proc/insert_sheet_at(mob/user, index, obj/item/sheet) if (!user.unEquip(sheet, src)) diff --git a/code/modules/paperwork/paper_sticky.dm b/code/modules/paperwork/paper_sticky.dm index 7a86b3c5d29e1..08217f88aa610 100644 --- a/code/modules/paperwork/paper_sticky.dm +++ b/code/modules/paperwork/paper_sticky.dm @@ -22,20 +22,19 @@ if(written_text) icon_state = "[icon_state]_writing" -/obj/item/sticky_pad/attackby(obj/item/thing, mob/user) +/obj/item/sticky_pad/use_tool(obj/item/thing, mob/living/user, list/click_params) if(istype(thing, /obj/item/pen)) - if(jobban_isbanned(user, "Graffiti")) to_chat(user, SPAN_WARNING("You are banned from leaving persistent information across rounds.")) - return + return TRUE var/writing_space = MAX_MESSAGE_LEN - length(written_text) if(writing_space <= 0) to_chat(user, SPAN_WARNING("There is no room left on \the [src].")) - return + return TRUE var/text = sanitizeSafe(input("What would you like to write?") as text, writing_space) if(!text || thing.loc != user || (!Adjacent(user) && loc != user) || user.incapacitated()) - return + return TRUE user.visible_message(SPAN_NOTICE("\The [user] jots a note down on \the [src].")) written_by = user.ckey if(written_text) @@ -43,8 +42,8 @@ else written_text = text update_icon() - return - ..() + return TRUE + return ..() /obj/item/sticky_pad/examine(mob/user) . = ..() diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 1e494266f5a4a..64e7330b4c61b 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -69,15 +69,18 @@ return -/obj/item/paper_bin/attackby(obj/item/i as obj, mob/user as mob) +/obj/item/paper_bin/use_tool(obj/item/i, mob/living/user, list/click_params) if(istype(i, /obj/item/paper)) if(!user.unEquip(i, src)) - return - to_chat(user, SPAN_NOTICE("You put [i] in [src].")) + FEEDBACK_UNEQUIP_FAILURE(user, i) + return TRUE + to_chat(user, SPAN_NOTICE("You put \the [i] in \the [src].")) papers.Add(i) update_icon() amount++ - else if(istype(i, /obj/item/paper_bundle)) + return TRUE + + if (istype(i, /obj/item/paper_bundle)) to_chat(user, SPAN_NOTICE("You loosen \the [i] and add its papers into \the [src].")) var/was_there_a_photo = 0 for(var/obj/item/bundleitem in i) //loop through items in bundle @@ -92,6 +95,9 @@ qdel(i) if(was_there_a_photo) to_chat(user, SPAN_NOTICE("The photo cannot go into \the [src].")) + return TRUE + + return ..() /obj/item/paper_bin/examine(mob/user, distance) diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index 7902ccfb01dbb..6fff0bd6f8487 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -108,11 +108,12 @@ /obj/machinery/papershredder/on_update_icon() icon_state = "papershredder[max(0,min(5,floor(paperamount/2)))]" -/obj/item/shreddedp/attackby(obj/item/W as obj, mob/user) +/obj/item/shreddedp/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/flame/lighter)) burnpaper(W, user) + return TRUE else - ..() + return ..() /obj/item/shreddedp/proc/burnpaper(obj/item/flame/lighter/P, mob/user) if(user.restrained()) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 5e206f3e329f8..871f78a3cf223 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -58,12 +58,13 @@ var/global/photo_count = 0 tiny.pixel_x = -32*(photo_size-1)/2 - 3 tiny.pixel_y = -32*(photo_size-1)/2 + 3 -/obj/item/photo/attackby(obj/item/P as obj, mob/user as mob) - if(istype(P, /obj/item/pen)) +/obj/item/photo/use_tool(obj/item/item, mob/living/user, list/click_params) + if(istype(item, /obj/item/pen)) var/txt = sanitize(input(user, "What would you like to write on the back?", "Photo Writing", null) as text, 128) if(loc == user && user.stat == 0) scribble = txt - ..() + return TRUE + return ..() /obj/item/photo/examine(mob/user, distance) . = TRUE diff --git a/code/modules/persistence/noticeboards.dm b/code/modules/persistence/noticeboards.dm index 5e15834195e01..d0a2feea6342f 100644 --- a/code/modules/persistence/noticeboards.dm +++ b/code/modules/persistence/noticeboards.dm @@ -197,7 +197,7 @@ var/obj/item/pen/pen = user.IsHolding(/obj/item/pen) if(istype(pen)) add_fingerprint(user) - P.attackby(pen, user) + P.use_tool(pen, user) else to_chat(user, SPAN_WARNING("You need a pen to write on \the [P].")) . = TOPIC_REFRESH diff --git a/code/modules/power/cable_structure.dm b/code/modules/power/cable_structure.dm index b35793dc1395f..ad3a4327b9d07 100644 --- a/code/modules/power/cable_structure.dm +++ b/code/modules/power/cable_structure.dm @@ -101,7 +101,6 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/attack_ghost(mob/user) if(user.client && user.client.inquisitive_ghost) examinate(user, src) - // following code taken from attackby (multitool) if(powernet && (powernet.avail > 0)) to_chat(user, SPAN_WARNING("[get_wattage()] in power network.")) else diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index cec531f4f1b18..75f8a6530bd4e 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -400,7 +400,7 @@ var/obj/item/light/L = light_type return initial(L.name) -/// Attempts to insert a given light bulb. Called by `attackby()`. +/// Attempts to insert a given light bulb. Called by `use_tool()`. /obj/machinery/light/proc/insert_bulb(obj/item/light/L) L.forceMove(src) lightbulb = L @@ -822,7 +822,7 @@ update_icon() // if a syringe, can inject phoron to make it explode -/obj/item/light/attackby(obj/item/I, mob/user) +/obj/item/light/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/reagent_containers/syringe) && status == LIGHT_OK) var/obj/item/reagent_containers/syringe/S = I @@ -833,10 +833,11 @@ to_chat(user, SPAN_WARNING("You inject the solution into \the [src].")) if (reagents.get_reagent_amount(/datum/reagent/toxin/phoron) >= LIGHT_PHORON_EXPLODE_THRESHOLD) log_and_message_admins("injected a light with phoron, rigging it to explode.", user) - return + return TRUE else to_chat(user, SPAN_WARNING("\The [src] is already filled with fluid!")) - . = ..() + return TRUE + return ..() // shatter light, unless it was an attempt to put it in a light socket // now only shatter if the intent was harm diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 22199c5b829b6..f68f407fd7cb3 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -221,52 +221,50 @@ var/global/solar_gen_rate = 1500 glass_type = null -/obj/item/solar_assembly/attackby(obj/item/W, mob/user) - +/obj/item/solar_assembly/use_tool(obj/item/W, mob/living/user, list/click_params) if(!anchored && isturf(loc)) if(isWrench(W)) anchored = TRUE pixel_x = 0 pixel_y = 0 pixel_z = 0 - user.visible_message(SPAN_NOTICE("[user] wrenches the solar assembly into place.")) + user.visible_message(SPAN_NOTICE("\The [user] wrenches \the [src] into place.")) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - return 1 + return TRUE else if(isWrench(W)) anchored = FALSE - user.visible_message(SPAN_NOTICE("[user] unwrenches the solar assembly from it's place.")) + user.visible_message(SPAN_NOTICE("\The [user] unwrenches \the [src] from it's place.")) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - return 1 + return TRUE if(istype(W, /obj/item/stack/material) && W.get_material_name() == MATERIAL_GLASS) var/obj/item/stack/material/S = W if(S.use(2)) glass_type = W.type playsound(src.loc, 'sound/machines/click.ogg', 50, 1) - user.visible_message(SPAN_NOTICE("[user] places the glass on the solar assembly.")) + user.visible_message(SPAN_NOTICE("\The [user] places the glass on \the [src].")) if(tracker) new /obj/machinery/power/tracker(get_turf(src), src) else new /obj/machinery/power/solar(get_turf(src), src) else to_chat(user, SPAN_WARNING("You need two sheets of glass to put them into a solar panel.")) - return - return 1 + return TRUE if(!tracker) if(istype(W, /obj/item/tracker_electronics)) tracker = 1 qdel(W) - user.visible_message(SPAN_NOTICE("[user] inserts the electronics into the solar assembly.")) - return 1 + user.visible_message(SPAN_NOTICE("\The [user] inserts the electronics into \the [src].")) + return TRUE else if(isCrowbar(W)) - new /obj/item/tracker_electronics(src.loc) + new /obj/item/tracker_electronics(loc) tracker = 0 - user.visible_message(SPAN_NOTICE("[user] takes out the electronics from the solar assembly.")) - return 1 - ..() + user.visible_message(SPAN_NOTICE("\The [user] takes out the electronics from \the [src].")) + return TRUE + return ..() // // Solar Control Computer diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 80450d4117733..bbdfe62890bd6 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -63,11 +63,11 @@ LAZYDISTINCTADD(A.gunshot_residue, caliber) -/obj/item/ammo_casing/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/ammo_casing/use_tool(obj/item/W, mob/living/user, list/click_params) if(isScrewdriver(W)) if(!BB) - to_chat(user, SPAN_NOTICE("There is no bullet in the casing to inscribe anything into.")) - return + to_chat(user, SPAN_WARNING("There is no bullet in the casing to inscribe anything into.")) + return TRUE var/tmp_label = "" var/label_text = sanitizeSafe(input(user, "Inscribe some text into \the [initial(BB.name)]","Inscription",tmp_label), MAX_NAME_LEN) @@ -79,7 +79,9 @@ else to_chat(user, SPAN_NOTICE("You inscribe \"[label_text]\" into \the [initial(BB.name)].")) BB.SetName("[initial(BB.name)] (\"[label_text]\")") - else ..() + return TRUE + + return ..() /obj/item/ammo_casing/on_update_icon() @@ -147,20 +149,22 @@ update_icon() -/obj/item/ammo_magazine/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/ammo_magazine/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/ammo_casing)) var/obj/item/ammo_casing/C = W if(C.caliber != caliber) - to_chat(user, SPAN_WARNING("[C] does not fit into [src].")) - return + to_chat(user, SPAN_WARNING("\The [C] does not fit into \the [src].")) + return TRUE if(length(stored_ammo) >= max_ammo) - to_chat(user, SPAN_WARNING("[src] is full!")) - return + to_chat(user, SPAN_WARNING("\The [src] is full!")) + return TRUE if(!user.unEquip(C, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, C) + return TRUE stored_ammo.Add(C) update_icon() - else ..() + return TRUE + return ..() /obj/item/ammo_magazine/attack_self(mob/user) diff --git a/code/modules/projectiles/guns/launcher/net.dm b/code/modules/projectiles/guns/launcher/net.dm index ab2dc111331f0..0c7e4fe49d846 100644 --- a/code/modules/projectiles/guns/launcher/net.dm +++ b/code/modules/projectiles/guns/launcher/net.dm @@ -14,12 +14,16 @@ icon = 'icons/obj/weapons/ammo.dmi' icon_state = "netshell" -/obj/item/net_shell/attackby(obj/item/gun/launcher/net/I, mob/user) - if(istype(I) && I.can_load(src, user)) - I.load(src, user) - to_chat(usr, "You load \the [src] into \the [I].") +/obj/item/net_shell/use_tool(obj/item/item, mob/living/user, list/click_params) + if(istype(item, /obj/item/gun/launcher/net)) + var/obj/item/gun/launcher/net/launcher = item + if (!launcher.can_load(src, user)) + return TRUE + launcher.load(src, user) + to_chat(usr, "You load \the [src] into \the [launcher].") + return TRUE else - ..() + return ..() /obj/item/gun/launcher/net/examine(mob/user, distance) . = ..() diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm index 22b94ae107bbe..971e8acb76492 100644 --- a/code/modules/projectiles/guns/launcher/syringe_gun.dm +++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm @@ -18,13 +18,15 @@ underlays += image(syringe.icon, src, syringe.icon_state) underlays += syringe.filling -/obj/item/syringe_cartridge/attackby(obj/item/I, mob/user) +/obj/item/syringe_cartridge/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/reagent_containers/syringe) && user.unEquip(I, src)) syringe = I to_chat(user, SPAN_NOTICE("You carefully insert [syringe] into [src].")) sharp = TRUE name = "syringe dart" update_icon() + return TRUE + return ..() /obj/item/syringe_cartridge/attack_self(mob/user) if(syringe) diff --git a/code/modules/psionics/equipment/psipower_tk.dm b/code/modules/psionics/equipment/psipower_tk.dm index f238cb00928e5..6fef9a45f0561 100644 --- a/code/modules/psionics/equipment/psipower_tk.dm +++ b/code/modules/psionics/equipment/psipower_tk.dm @@ -78,7 +78,7 @@ sparkle() if(!istype(target, /turf) && istype(focus,/obj/item) && target.Adjacent(focus)) var/obj/item/I = focus - var/resolved = target.attackby(I, user, user:get_organ_target()) + var/resolved = I.resolve_attackby(target, user) if(!resolved && target && I) I.afterattack(target,user,1) // for splashing with beakers else diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index a5fd51035b1ce..163cf2bdaa02c 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -44,7 +44,7 @@ return reagents.get_reagents() return "No reagent holder" -/obj/item/reagent_containers/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/reagent_containers/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/pen) || istype(W, /obj/item/device/flashlight/pen)) var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN) if(length_char(tmp_label) > 10) @@ -53,6 +53,7 @@ to_chat(user, SPAN_NOTICE("You set the label to \"[tmp_label]\".")) label_text = tmp_label update_name_label() + return TRUE else return ..() diff --git a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm index 0399e0b752ee1..38ea15928277e 100644 --- a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm @@ -213,7 +213,7 @@ var/global/const/DRINK_ICON_NOISY = "noise" splashtarget(target, user) return TRUE -/obj/item/reagent_containers/food/drinks/glass2/attackby(obj/item/W, mob/user) +/obj/item/reagent_containers/food/drinks/glass2/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/material/kitchen/utensil/spoon)) if(user.a_intent == I_HURT) user.visible_message(SPAN_WARNING("[user] bashes \the [src] with a spoon, shattering it to pieces! What a rube.")) @@ -222,10 +222,11 @@ var/global/const/DRINK_ICON_NOISY = "noise" user.visible_message(SPAN_NOTICE("The contents of \the [src] splash all over [user]!")) reagents.splash(user, reagents.total_volume) qdel(src) - return + return TRUE user.visible_message(SPAN_NOTICE("[user] gently strikes \the [src] with a spoon, calling the room to attention.")) playsound(src, "sound/items/wineglass.ogg", 65, 1) - else return ..() + return TRUE + return ..() /obj/item/reagent_containers/food/drinks/glass2/ProcessAtomTemperature() var/old_temp = temperature diff --git a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm b/code/modules/reagents/reagent_containers/drinkingglass/extras.dm index be2cceffdf594..1d82aac32e53b 100644 --- a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm +++ b/code/modules/reagents/reagent_containers/drinkingglass/extras.dm @@ -1,28 +1,36 @@ -/obj/item/reagent_containers/food/drinks/glass2/attackby(obj/item/I as obj, mob/user as mob) - if(length(extras) >= 2) return ..() // max 2 extras, one on each side of the drink +/obj/item/reagent_containers/food/drinks/glass2/use_tool(obj/item/I, mob/living/user, list/click_params) + if(length(extras) >= 2) + return ..() // max 2 extras, one on each side of the drink if(istype(I, /obj/item/glass_extra)) var/obj/item/glass_extra/GE = I if(can_add_extra(GE)) extras += GE if(!user.unEquip(GE, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, GE) + return TRUE to_chat(user, SPAN_NOTICE("You add \the [GE] to \the [src].")) update_icon() + return TRUE else to_chat(user, SPAN_WARNING("There's no space to put \the [GE] on \the [src]!")) + return TRUE + else if(istype(I, /obj/item/reagent_containers/food/snacks/fruit_slice)) if(!rim_pos) to_chat(user, SPAN_WARNING("There's no space to put \the [I] on \the [src]!")) - return + return TRUE var/obj/item/reagent_containers/food/snacks/fruit_slice/FS = I extras += FS if(!user.unEquip(FS, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, FS) + return TRUE FS.pixel_x = 0 // Reset its pixel offsets so the icons work! FS.pixel_y = 0 to_chat(user, SPAN_NOTICE("You add \the [FS] to \the [src].")) update_icon() + return TRUE + else return ..() diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm index 5644841e628c4..f2da546a5ccd5 100644 --- a/code/modules/reagents/reagent_containers/food/condiment.dm +++ b/code/modules/reagents/reagent_containers/food/condiment.dm @@ -31,12 +31,14 @@ /datum/reagent/oliveoil = /obj/item/reagent_containers/food/condiment/small/oliveoil ) -/obj/item/reagent_containers/food/condiment/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/reagent_containers/food/condiment/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/pen) || istype(W, /obj/item/device/flashlight/pen)) var/label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN) if (!label) - return + return TRUE AddLabel(label, user) + return TRUE + return ..() /obj/item/reagent_containers/food/condiment/attack_self(mob/user as mob) return diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm index 0ef2ef51f7d88..93770d5a1016a 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm @@ -70,14 +70,14 @@ return B -/obj/item/reagent_containers/food/drinks/bottle/attackby(obj/item/W, mob/user) +/obj/item/reagent_containers/food/drinks/bottle/use_tool(obj/item/W, mob/living/user, list/click_params) if (!rag && istype(W, /obj/item/reagent_containers/glass/rag)) insert_rag(W, user) - return + return TRUE if (rag && W.IsFlameSource()) - rag.attackby(W, user) - return - ..() + rag.use_tool(W, user) + return TRUE + return ..() /obj/item/reagent_containers/food/drinks/bottle/attack_self(mob/user) diff --git a/code/modules/reagents/reagent_containers/food/fish.dm b/code/modules/reagents/reagent_containers/food/fish.dm index 3752ac070e6ab..4e028762ee68c 100644 --- a/code/modules/reagents/reagent_containers/food/fish.dm +++ b/code/modules/reagents/reagent_containers/food/fish.dm @@ -18,7 +18,7 @@ name = "[fish_type] fillet" -/obj/item/reagent_containers/food/snacks/fish/attackby(obj/item/item, mob/living/user) +/obj/item/reagent_containers/food/snacks/fish/use_tool(obj/item/item, mob/living/user, list/click_params) if (istype(item, /obj/item/reagent_containers/syringe) || !item.sharp) return ..() var/turf/turf = get_turf(src) diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm index 4faa272c95c24..3994eaf178f4f 100644 --- a/code/modules/reagents/reagent_containers/food/sandwich.dm +++ b/code/modules/reagents/reagent_containers/food/sandwich.dm @@ -1,12 +1,12 @@ -/obj/item/reagent_containers/food/snacks/slice/bread/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/reagent_containers/food/snacks/slice/bread/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/material/shard) || istype(W,/obj/item/reagent_containers/food/snacks)) if (is_path_in_list(W.type, list(/obj/item/reagent_containers/food/snacks/custombowl, /obj/item/reagent_containers/food/snacks/csandwich))) - return + return ..() var/obj/item/reagent_containers/food/snacks/csandwich/S = new(get_turf(src)) - S.attackby(W,user) + S.use_tool(W,user) qdel(src) - return - . = ..() + return TRUE + return ..() /obj/item/reagent_containers/food/snacks/csandwich name = "sandwich" @@ -31,8 +31,7 @@ SetName("\improper [sandwich_label] sandwich") renamed = 1 -/obj/item/reagent_containers/food/snacks/csandwich/attackby(obj/item/W, mob/user) - +/obj/item/reagent_containers/food/snacks/csandwich/use_tool(obj/item/W, mob/living/user, list/click_params) var/sandwich_limit = 4 for(var/obj/item/O in ingredients) if(istype(O,/obj/item/reagent_containers/food/snacks/slice/bread)) @@ -40,18 +39,22 @@ if(length(src.contents) > sandwich_limit) to_chat(user, SPAN_WARNING("If you put anything else on \the [src] it's going to collapse.")) - return - else if(istype(W,/obj/item/material/shard)) + return TRUE + + if(istype(W,/obj/item/material/shard)) if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE to_chat(user, SPAN_WARNING("You hide [W] in \the [src].")) update() - return - else if(istype(W,/obj/item/reagent_containers/food/snacks)) + return TRUE + + if(istype(W,/obj/item/reagent_containers/food/snacks)) if (is_path_in_list(W.type, list(/obj/item/reagent_containers/food/snacks/custombowl, /obj/item/reagent_containers/food/snacks/csandwich))) - return + return ..() if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE user.visible_message( SPAN_NOTICE("\The [user] layers \the [W] over \the [src]."), SPAN_NOTICE("You layer \the [W] over \the [src].") @@ -60,8 +63,9 @@ F.reagents.trans_to_obj(src, F.reagents.total_volume) ingredients += W update() - return - . = ..() + return TRUE + + return ..() /obj/item/reagent_containers/food/snacks/csandwich/proc/update() var/i = 0 diff --git a/code/modules/reagents/reagent_containers/food/servingbowl.dm b/code/modules/reagents/reagent_containers/food/servingbowl.dm index 85c428c410939..6e0d023e2e70b 100644 --- a/code/modules/reagents/reagent_containers/food/servingbowl.dm +++ b/code/modules/reagents/reagent_containers/food/servingbowl.dm @@ -8,7 +8,7 @@ matter = list(MATERIAL_PLASTIC = 300) -/obj/item/serving_bowl/attackby(obj/item/item, mob/living/user) +/obj/item/serving_bowl/use_tool(obj/item/item, mob/living/user, list/click_params) if (!istype(item, /obj/item/reagent_containers/food/snacks)) return ..() if (is_path_in_list(item.type, list(/obj/item/reagent_containers/food/snacks/custombowl, /obj/item/reagent_containers/food/snacks/csandwich))) @@ -16,7 +16,7 @@ var/allowed = isturf(loc) | SHIFTL(src == user.l_hand, 1) | SHIFTL(src == user.r_hand, 2) if (!allowed) to_chat(user, SPAN_WARNING("Put down or hold the bowl first.")) - return + return TRUE var/obj/item/reagent_containers/food/snacks/custombowl/bowl = new (get_turf(src), item) bowl.pixel_x = pixel_x bowl.pixel_y = pixel_y @@ -26,6 +26,7 @@ user.put_in_l_hand(bowl) if (4) user.put_in_r_hand(bowl) + return TRUE /obj/item/reagent_containers/food/snacks/custombowl @@ -71,23 +72,24 @@ renamed = TRUE -/obj/item/reagent_containers/food/snacks/custombowl/attackby(obj/item/item, mob/living/user) +/obj/item/reagent_containers/food/snacks/custombowl/use_tool(obj/item/item, mob/living/user, list/click_params) if (!istype(item, /obj/item/reagent_containers/food/snacks)) return ..() if (is_path_in_list(item.type, list(/obj/item/reagent_containers/food/snacks/custombowl, /obj/item/reagent_containers/food/snacks/csandwich))) return ..() if (ingredients_left < 1) to_chat(user, SPAN_WARNING("There's no room for any more ingredients in \the [src].")) - return + return TRUE if (!user.unEquip(item, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, item) + return TRUE user.visible_message( SPAN_ITALIC("\The [user] adds \a [item] to \the [src]."), SPAN_NOTICE("You add \the [item] to \the [src]."), range = 3 ) UpdateIngredients(item, user) - + return TRUE /obj/item/reagent_containers/food/snacks/custombowl/proc/UpdateIngredients(obj/item/reagent_containers/food/snacks/snack) snack.reagents.trans_to_obj(src, snack.reagents.total_volume) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 020eeb51f0512..5d0d97a9db876 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -139,13 +139,12 @@ else to_chat(user, SPAN_NOTICE("\The [src] was bitten multiple times!")) -/obj/item/reagent_containers/food/snacks/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/reagent_containers/food/snacks/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/storage)) - ..()// -> item/attackby() - return + return ..() if(!is_open_container()) - to_chat(user, SPAN_NOTICE("\The [src] isn't open!")) - return 0 + to_chat(user, SPAN_WARNING("\The [src] isn't open!")) + return TRUE // Eating with forks if(istype(W,/obj/item/material/kitchen/utensil)) var/obj/item/material/kitchen/utensil/U = W @@ -154,12 +153,12 @@ U.create_reagents(5) if (U.reagents.total_volume > 0) - to_chat(user, SPAN_WARNING("You already have something on your [U].")) - return + to_chat(user, SPAN_WARNING("You already have something on \the [U].")) + return TRUE - to_chat(user, SPAN_NOTICE("You scoop up some [src] with \the [U]!")) + to_chat(user, SPAN_NOTICE("You scoop up some \the [src] with \the [U]!")) - src.bitecount++ + bitecount++ U.ClearOverlays() U.loaded = "[src]" var/image/I = new(U.icon, "loadedfood") @@ -177,7 +176,7 @@ trash.dropInto(loc) trash = null qdel(src) - return + return TRUE if (is_sliceable()) //these are used to allow hiding edge items in food that is not on a table/tray @@ -186,19 +185,19 @@ if (hide_item) if (W.w_class >= src.w_class || is_robot_module(W) || istype(W,/obj/item/reagent_containers/food/condiment)) - return + return ..() if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE to_chat(user, SPAN_WARNING("You slip \the [W] inside \the [src].")) - add_fingerprint(user) W.forceMove(src) - return + return TRUE if (has_edge(W)) if (!can_slice_here) to_chat(user, SPAN_WARNING("You cannot slice \the [src] here! You need a table or at least a tray to do it.")) - return + return TRUE var/slices_lost = 0 if (W.w_class > 3) @@ -220,7 +219,9 @@ S.AddOverlays(I) qdel(src) - return + return TRUE + + return ..() /obj/item/reagent_containers/food/snacks/proc/is_sliceable() return (slices_num && slice_path && slices_num > 0) @@ -341,19 +342,20 @@ ..() qdel(src) -/obj/item/reagent_containers/food/snacks/egg/attackby(obj/item/W as obj, mob/user as mob) - if(istype( W, /obj/item/pen/crayon )) +/obj/item/reagent_containers/food/snacks/egg/use_tool(obj/item/W, mob/living/user, list/click_params) + if(istype(W, /obj/item/pen/crayon)) var/obj/item/pen/crayon/C = W var/clr = C.colourName if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow"))) to_chat(usr, SPAN_NOTICE("The egg refuses to take on this color!")) - return + return TRUE to_chat(usr, SPAN_NOTICE("You color \the [src] [clr]")) icon_state = "egg-[clr]" + return TRUE else - ..() + return ..() /obj/item/reagent_containers/food/snacks/egg/blue icon_state = "egg-blue" @@ -2857,11 +2859,11 @@ update_icon() -/obj/item/pizzabox/attackby( obj/item/I as obj, mob/user as mob ) +/obj/item/pizzabox/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/pizzabox)) var/obj/item/pizzabox/box = I - if(!box.open && !src.open) + if(!box.open && !open) // make a list of all boxes to be added var/list/boxestoadd = list() boxestoadd += box @@ -2870,10 +2872,10 @@ if((length(boxes)+1) + length(boxestoadd) <= 5) if(!user.unEquip(box, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, box) + return TRUE box.boxes = list()// clear the box boxes so we don't have boxes inside boxes. - Xzibit - src.boxes.Add( boxestoadd ) - + boxes.Add( boxestoadd ) box.update_icon() update_icon() @@ -2882,14 +2884,14 @@ to_chat(user, SPAN_WARNING("The stack is too high!")) else to_chat(user, SPAN_WARNING("Close \the [box] first!")) + return TRUE - return - - if(istype(I, /obj/item/reagent_containers/food/snacks/sliceable/pizza) || istype(I, /obj/item/reagent_containers/food/snacks/sliceable/variable/pizza)) - if(open) + if (istype(I, /obj/item/reagent_containers/food/snacks/sliceable/pizza) || istype(I, /obj/item/reagent_containers/food/snacks/sliceable/variable/pizza)) + if (open) if (!pizza) if(!user.unEquip(I, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, I) + return TRUE pizza = I update_icon() to_chat(user, SPAN_WARNING("You put \the [I] in \the [src]!")) @@ -2897,12 +2899,13 @@ to_chat(user, SPAN_WARNING("There is already \a [pizza] in \the [src]!")) else to_chat(user, SPAN_WARNING("You try to push \the [I] through the lid but it doesn't work!")) - return + return TRUE - if( istype(I, /obj/item/pen) ) + if (istype(I, /obj/item/pen)) - if( src.open ) - return + if (open) + USE_FEEDBACK_FAILURE("You need to close \the [src].") + return TRUE var/t = sanitize(input("Enter what you want to add to the tag:", "Write", null, null) as text, 30) @@ -2913,8 +2916,9 @@ boxtotagto.boxtag = copytext("[boxtotagto.boxtag][t]", 1, 30) update_icon() - return - ..() + return TRUE + + return ..() /obj/item/pizzabox/margherita/Initialize() . = ..() @@ -2980,11 +2984,13 @@ // reagents.add_reagent(/datum/reagent/nutriment/protein, 1) // Dough + rolling pin = flat dough -/obj/item/reagent_containers/food/snacks/dough/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/reagent_containers/food/snacks/dough/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/material/kitchen/rollingpin)) new /obj/item/reagent_containers/food/snacks/sliceable/flatdough(src) - to_chat(user, "You flatten the dough.") + to_chat(user, SPAN_NOTICE("You flatten the dough.")) qdel(src) + return TRUE + return ..() // slicable into 3x doughslices /obj/item/reagent_containers/food/snacks/sliceable/flatdough @@ -3231,13 +3237,14 @@ nutriment_amt = 3 // potato + knife = raw sticks -/obj/item/reagent_containers/food/snacks/grown/potato/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/reagent_containers/food/snacks/grown/potato/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/material/knife)) new /obj/item/reagent_containers/food/snacks/rawsticks(src) - to_chat(user, "You cut the potato.") + to_chat(user, SPAN_NOTICE("You cut the potato.")) qdel(src) + return TRUE else - ..() + return ..() /obj/item/reagent_containers/food/snacks/rawsticks name = "raw potato sticks" diff --git a/code/modules/reagents/reagent_containers/food/snacks/shellfish.dm b/code/modules/reagents/reagent_containers/food/snacks/shellfish.dm index 59e6ad94911cd..39db523c8628b 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/shellfish.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/shellfish.dm @@ -13,7 +13,7 @@ var/snack_path -/obj/item/shellfish/attackby(obj/item/item, mob/living/user) +/obj/item/shellfish/use_tool(obj/item/item, mob/living/user, list/click_params) if (!item.sharp) return ..() to_chat(user, SPAN_NOTICE("You start to pry open \the [src].")) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 7adbb7a24dcdb..68e8b4311e7ea 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -299,7 +299,7 @@ matter = list(MATERIAL_WOOD = 280) volume = 200 -/obj/item/reagent_containers/glass/bucket/attackby(obj/D, mob/user as mob) +/obj/item/reagent_containers/glass/bucket/use_tool(obj/item/D, mob/living/user, list/click_params) if(istype(D, /obj/item/mop)) if(reagents.total_volume < 1) to_chat(user, SPAN_WARNING("\The [src] is empty!")) @@ -307,7 +307,7 @@ reagents.trans_to_obj(D, 5) to_chat(user, SPAN_NOTICE("You wet \the [D] in \the [src].")) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - return + return TRUE else return ..() diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 924d0d9895fe0..6a4000d6ba0d8 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -117,13 +117,14 @@ return return ..() -/obj/item/reagent_containers/hypospray/vial/attackby(obj/item/W, mob/user) +/obj/item/reagent_containers/hypospray/vial/use_tool(obj/item/W, mob/living/user, list/click_params) var/usermessage = "" if(istype(W, /obj/item/reagent_containers/glass/beaker/vial)) if(!do_after(user, 1 SECOND, src, DO_PUBLIC_UNIQUE) || !(W in user)) - return 0 + return TRUE if(!user.unEquip(W, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE if(loaded_vial) remove_vial(user, "swap") usermessage = "You load \the [W] into \the [src] as you remove the old one." @@ -138,8 +139,8 @@ user.visible_message(SPAN_NOTICE("[user] has loaded [W] into \the [src]."),SPAN_NOTICE("[usermessage]")) update_icon() playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) - return - ..() + return TRUE + return ..() /obj/item/reagent_containers/hypospray/vial/use_after(obj/target, mob/living/user, click_parameters) // hyposprays can be dumped into, why not out? uses standard_pour_into helper checks. if (!reagents.total_volume && istype(target, /obj/item/reagent_containers/glass)) diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 3247ec1a918af..0681f7f3044ff 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -398,7 +398,7 @@ // Chopping up pills -/obj/item/reagent_containers/pill/attackby(obj/item/W, mob/user) +/obj/item/reagent_containers/pill/use_tool(obj/item/W, mob/living/user, list/click_params) if(is_sharp(W) || istype(W, /obj/item/card/id)) user.visible_message( SPAN_WARNING("\The [user] starts to gently cut up \the [src] with \a [W]!"), @@ -420,5 +420,6 @@ reagents.trans_to_obj(J, reagents.total_volume) J.get_appearance() qdel(src) + return TRUE return ..() diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index c713503cddcba..20427abf39e7d 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -272,12 +272,13 @@ var/id = "" //inherited by the belt matter = list(MATERIAL_STEEL = 400, MATERIAL_PLASTIC = 200) -/obj/item/conveyor_construct/attackby(obj/item/I, mob/user, params) - ..() +/obj/item/conveyor_construct/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/conveyor_switch_construct)) to_chat(user, SPAN_NOTICE("You link the switch to the conveyor belt assembly.")) var/obj/item/conveyor_switch_construct/C = I id = C.id + return TRUE + return ..() /obj/item/conveyor_construct/use_after(atom/A, mob/living/user, click_parameters) if(!istype(A, /turf/simulated/floor) || istype(A, /area/shuttle) || user.incapacitated()) diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm index 7d862800ab49a..911c5f40cc762 100644 --- a/code/modules/spells/spellbook.dm +++ b/code/modules/spells/spellbook.dm @@ -78,14 +78,14 @@ var/global/list/artefact_feedback = list(/obj/structure/closet/wizard/armor = investing_time = max(investing_time - 6000,1) //subtract 10 minutes. Make sure it doesn't act funky at the beginning of the game. -/obj/item/spellbook/attackby(obj/item/I as obj, mob/user as mob) +/obj/item/spellbook/use_tool(obj/item/I, mob/living/user, list/click_params) if(investing_time) var/list/objects = spellbook.sacrifice_objects if(objects && length(objects)) for(var/type in objects) if(istype(I,type)) make_sacrifice(I,user) - return + return TRUE if(I.reagents) var/datum/reagents/R = I.reagents var/list/reagent_list = spellbook.sacrifice_reagents @@ -93,8 +93,8 @@ var/global/list/artefact_feedback = list(/obj/structure/closet/wizard/armor = for(var/id in reagent_list) if(R.has_reagent(id,5)) make_sacrifice(I,user, id) - return 1 - ..() + return TRUE + return ..() /obj/item/spellbook/interact(mob/user as mob) var/dat = null diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index 14bbd2efecf40..f7844ecddafa8 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -527,7 +527,7 @@ if (user.drop_from_inventory(W)) Consume(W) return TRUE - else return ..() + return ..() /obj/machinery/power/supermatter/Bumped(atom/AM as mob|obj) diff --git a/code/modules/xenoarcheaology/boulder.dm b/code/modules/xenoarcheaology/boulder.dm index a4f859e5fc7ab..1ed2f455cad5f 100644 --- a/code/modules/xenoarcheaology/boulder.dm +++ b/code/modules/xenoarcheaology/boulder.dm @@ -95,9 +95,9 @@ var/mob/living/carbon/human/H = AM var/obj/item/pickaxe/P = H.get_inactive_hand() if(istype(P)) - src.attackby(P, H) + use_tool(P, H) else if(istype(AM,/mob/living/silicon/robot)) var/mob/living/silicon/robot/R = AM if(istype(R.module_active,/obj/item/pickaxe)) - attackby(R.module_active,R) + use_tool(R.module_active,R) diff --git a/code/modules/xenoarcheaology/finds/finds.dm b/code/modules/xenoarcheaology/finds/finds.dm index cf3a3616e3be9..ef3754270ddc4 100644 --- a/code/modules/xenoarcheaology/finds/finds.dm +++ b/code/modules/xenoarcheaology/finds/finds.dm @@ -28,7 +28,7 @@ var/T = get_archeological_find_by_findtype(inside_item_type) new T(src) -/obj/item/ore/strangerock/attackby(obj/item/I, mob/user) +/obj/item/ore/strangerock/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/pickaxe/xeno/brush)) var/obj/item/inside = locate() in src if(inside) @@ -37,7 +37,7 @@ else visible_message(SPAN_INFO("\The [src] is brushed away into nothing.")) qdel(src) - return + return TRUE if(isWelder(I)) var/obj/item/weldingtool/W = I @@ -50,18 +50,18 @@ visible_message(SPAN_INFO("\The [src] burns away into nothing.")) qdel(src) W.remove_fuel(2, user) + return TRUE else if (W.can_use(1, user, silent = TRUE)) visible_message(SPAN_INFO("A few sparks fly off \the [src], but nothing else happens.")) W.remove_fuel(1) - return + return TRUE - else if(istype(I, /obj/item/device/core_sampler)) + if (istype(I, /obj/item/device/core_sampler)) var/obj/item/device/core_sampler/S = I S.sample_item(src, user) - return + return TRUE - ..() - - if(prob(33)) - src.visible_message(SPAN_WARNING("[src] crumbles away, leaving some dust and gravel behind.")) + if ((. = ..()) & prob(33)) //If successfully sampled + visible_message(SPAN_WARNING("[src] crumbles away, leaving some dust and gravel behind.")) qdel(src) + return TRUE diff --git a/code/modules/xenoarcheaology/finds/fossils.dm b/code/modules/xenoarcheaology/finds/fossils.dm index fac553bc86241..480893c5c7365 100644 --- a/code/modules/xenoarcheaology/finds/fossils.dm +++ b/code/modules/xenoarcheaology/finds/fossils.dm @@ -37,16 +37,20 @@ /obj/item/fossil/skull/horned icon_state = "hskull" -/obj/item/fossil/skull/attackby(obj/item/W, mob/user) +/obj/item/fossil/skull/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/fossil/bone)) if(!user.canUnEquip(W)) - return + FEEDBACK_UNEQUIP_FAILURE(user, W) + return TRUE var/mob/M = get_holder_of_type(src, /mob) if(M && !M.unEquip(src)) - return + FEEDBACK_UNEQUIP_FAILURE(M, src) + return TRUE var/obj/o = new /obj/skeleton(get_turf(src)) user.unEquip(W, o) forceMove(o) + return TRUE + return ..() /obj/skeleton name = "Incomplete skeleton" @@ -63,7 +67,7 @@ src.breq = rand(6)+3 src.desc = "An incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones." -/obj/skeleton/attackby(obj/item/W, mob/user) +/obj/skeleton/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W,/obj/item/fossil/bone)) if(!bstate && user.unEquip(W, src)) bnum++ @@ -80,17 +84,18 @@ else src.desc = "Incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones." to_chat(user, "Looks like it could use [src.breq-src.bnum] more bones.") - else - ..() - else if(istype(W,/obj/item/pen)) + return TRUE + + if (istype(W,/obj/item/pen)) plaque_contents = sanitize(input("What would you like to write on the plaque:","Skeleton plaque","")) user.visible_message("[user] writes something on the base of [icon2html(src, viewers(get_turf(src)))] [src].","You relabel the plaque on the base of [icon2html(src, user)] [src].") if(src.contents.Find(/obj/item/fossil/skull/horned)) src.desc = "A creature made of [length(src.contents)-1] assorted bones and a horned skull. The plaque reads \'[plaque_contents]\'." else src.desc = "A creature made of [length(src.contents)-1] assorted bones and a skull. The plaque reads \'[plaque_contents]\'." - else - ..() + return TRUE + + return ..() //shells and plants do not make skeletons /obj/item/fossil/shell diff --git a/code/modules/xenoarcheaology/tools/ano_device_battery.dm b/code/modules/xenoarcheaology/tools/ano_device_battery.dm index aeb1c90ab3c9a..a1110afc51959 100644 --- a/code/modules/xenoarcheaology/tools/ano_device_battery.dm +++ b/code/modules/xenoarcheaology/tools/ano_device_battery.dm @@ -33,16 +33,17 @@ . = ..() START_PROCESSING(SSobj, src) -/obj/item/anodevice/attackby(obj/I as obj, mob/user as mob) +/obj/item/anodevice/use_tool(obj/item/I, mob/living/user, list/click_params) if(istype(I, /obj/item/anobattery)) if(!inserted_battery) if(!user.unEquip(I, src)) - return + FEEDBACK_UNEQUIP_FAILURE(user, I) + return TRUE to_chat(user, SPAN_NOTICE("You insert the battery.")) inserted_battery = I UpdateSprite() - else - return ..() + return TRUE + return ..() /obj/item/anodevice/attack_self(mob/user as mob) return src.interact(user) diff --git a/maps/torch/items/uniform_vendor.dm b/maps/torch/items/uniform_vendor.dm index bed0bd5c1b995..ee0b5b7776ca3 100644 --- a/maps/torch/items/uniform_vendor.dm +++ b/maps/torch/items/uniform_vendor.dm @@ -98,19 +98,21 @@ if(.) attack_hand(user) -/obj/machinery/uniform_vendor/attackby(obj/item/W, mob/user) +/obj/machinery/uniform_vendor/use_tool(obj/item/W, mob/living/user, list/click_params) if(istype(W, /obj/item/clothingbag)) if(length(W.contents)) - to_chat(user, SPAN_NOTICE("You must empty \the [W] before you can put it in \the [src].")) - return + to_chat(user, SPAN_WARNING("You must empty \the [W] before you can put it in \the [src].")) + return TRUE to_chat(user, SPAN_NOTICE("You put \the [W] into \the [src]'s recycling slot.")) qdel(W) - else if(istype(W, /obj/item/card/id) && !ID && user.unEquip(W, src)) + return TRUE + + if (istype(W, /obj/item/card/id) && !ID && user.unEquip(W, src)) to_chat(user, SPAN_NOTICE("You slide \the [W] into \the [src]!")) ID = W attack_hand(user) - else - ..() + return TRUE + return ..() /* Outfit structures branch diff --git a/test/check-paths.sh b/test/check-paths.sh index 8b1065c6784b6..03154796efbd9 100755 --- a/test/check-paths.sh +++ b/test/check-paths.sh @@ -57,7 +57,7 @@ exactly 0 "simulated = 0/1" 'simulated\s*=\s*\d' -P exactly 2 "var/ in proc arguments" '(^/[^/].+/.+?\(.*?)var/' -P exactly 0 "tmp/ vars" 'var.*/tmp/' -P exactly 7 "uses of .len" '\.len\b' -P -exactly 192 "attackby() override" '\/attackby\((.*)\)' -P +exactly 12 "attackby() override" '\/attackby\((.*)\)' -P exactly 15 "uses of examine()" '[.|\s]examine\(' -P # If this fails it's likely because you used '/atom/proc/examine(mob)' instead of '/proc/examinate(mob, atom)' - Exception: An examine()-proc may call other examine()-procs exactly 7 "direct modifications of overlays list" '\boverlays((\s*[|^=+&-])|(\.(Cut)|(Add)|(Copy)|(Remove)|(Remove)))' -P exactly 0 "new/list list instantiations" 'new\s*/list' -P From b637900a02d2e2c823df0742963dd71a348f34ba Mon Sep 17 00:00:00 2001 From: SierraKomodo <11140088+SierraKomodo@users.noreply.github.com> Date: Fri, 5 Apr 2024 02:28:15 +0300 Subject: [PATCH 022/311] [MIRROR] Gyrotron damage fix & emitter damage refactor --- .../modules/power/fusion/gyrotron/gyrotron.dm | 6 ++--- code/modules/power/singularity/emitter.dm | 26 ++++++++++++------- code/modules/projectiles/projectile/beams.dm | 2 +- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/code/modules/power/fusion/gyrotron/gyrotron.dm b/code/modules/power/fusion/gyrotron/gyrotron.dm index 9f3cf403df7f3..aa3e947207fe2 100644 --- a/code/modules/power/fusion/gyrotron/gyrotron.dm +++ b/code/modules/power/fusion/gyrotron/gyrotron.dm @@ -42,10 +42,8 @@ /obj/machinery/power/emitter/gyrotron/get_burst_delay() return rate * 10 -/obj/machinery/power/emitter/gyrotron/get_emitter_beam() - var/obj/item/projectile/beam/emitter/E = ..() - E.damage = mega_energy * 50 - return E +/obj/machinery/power/emitter/gyrotron/get_emitter_damage() + return mega_energy * 50 /obj/machinery/power/emitter/gyrotron/on_update_icon() ClearOverlays() diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 283348f893548..46c0a21d6bb4d 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -23,6 +23,8 @@ var/shot_number = 0 var/state = EMITTER_LOOSE var/locked = FALSE + /// Type path (Type of `/obj/item/projectile`). The projectile type this emitter fires. + var/projectile_type = /obj/item/projectile/beam/emitter core_skill = SKILL_ENGINES uncreated_component_parts = list( @@ -173,19 +175,15 @@ fire_delay = get_rand_burst_delay() shot_number = 0 - //need to calculate the power per shot as the emitter doesn't fire continuously. - var/burst_time = (min_burst_delay + max_burst_delay) / 2 + 2 * (burst_shots - 1) - var/power_per_shot = (active_power_usage * efficiency) * (burst_time / 10) / burst_shots - if (prob(35)) var/datum/effect/spark_spread/s = new /datum/effect/spark_spread s.set_up(5, 1, src) s.start() - var/obj/item/projectile/beam/emitter/A = get_emitter_beam() - playsound(loc, A.fire_sound, 25, TRUE) - A.damage = round (power_per_shot / EMITTER_DAMAGE_POWER_TRANSFER) - A.launch( get_step(loc, dir) ) + var/obj/item/projectile/proj = new projectile_type(get_turf(src)) + proj.damage = get_emitter_damage() + playsound(loc, proj.fire_sound, 25, TRUE) + proj.launch( get_step(loc, dir) ) /obj/machinery/power/emitter/post_anchor_change() if (anchored) @@ -287,8 +285,16 @@ /obj/machinery/power/emitter/proc/get_burst_delay() return 0.2 SECONDS // This value doesn't really affect normal emitters, but *does* affect subtypes like the gyrotron that can have very long delays -/obj/machinery/power/emitter/proc/get_emitter_beam() - return new /obj/item/projectile/beam/emitter(get_turf(src)) + +/** + * Calculates the damage the emitter should fire with its projectile. + */ +/obj/machinery/power/emitter/proc/get_emitter_damage() + //need to calculate the power per shot as the emitter doesn't fire continuously. + var/burst_time = (min_burst_delay + max_burst_delay) / 2 + 2 * (burst_shots - 1) + var/power_per_shot = (active_power_usage * efficiency) * (burst_time / 10) / burst_shots + return round(power_per_shot / EMITTER_DAMAGE_POWER_TRANSFER) + /singleton/public_access/public_method/toggle_emitter name = "toggle emitter" diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 54396c396018b..3cf5d2d2c4d94 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -161,7 +161,7 @@ name = "emitter beam" icon_state = "emitter" fire_sound = 'sound/weapons/emitter.ogg' - damage = 0 // The actual damage is computed in /code/modules/power/singularity/emitter.dm + damage = 0 // The actual damage is computed in `/obj/machinery/power/emitter/proc/get_emitter_damage()` muzzle_type = /obj/projectile/laser/emitter/muzzle tracer_type = /obj/projectile/laser/emitter/tracer From 9a3716cb7884299f758cf3532ed62c0aefe94bfb Mon Sep 17 00:00:00 2001 From: Nyvrem <10331933+Nyvrem@users.noreply.github.com> Date: Fri, 5 Apr 2024 02:28:22 +0300 Subject: [PATCH 023/311] [MIRROR] Makes GAS brains unable to be put in a MMI --- code/modules/organs/internal/species/nabber.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/organs/internal/species/nabber.dm b/code/modules/organs/internal/species/nabber.dm index bbd6c8249ae4f..78ffd57f81edb 100644 --- a/code/modules/organs/internal/species/nabber.dm +++ b/code/modules/organs/internal/species/nabber.dm @@ -168,6 +168,7 @@ var/lowblood_tally = 0 name = "distributed nervous system" parent_organ = BP_CHEST + can_use_mmi = FALSE /obj/item/organ/internal/brain/insectoid/nabber/Process() if(!owner || !owner.should_have_organ(BP_HEART)) From cec7c473dfd7ff09fee99d60dbc2a71fbe554a14 Mon Sep 17 00:00:00 2001 From: emmanuelbassil <6874235+emmanuelbassil@users.noreply.github.com> Date: Fri, 5 Apr 2024 02:28:28 +0300 Subject: [PATCH 024/311] [MIRROR] Fixes #34551 --- code/modules/shieldgen/emergency_shield.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index a2b24a53a5c9d..3fcaf299e7535 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -66,6 +66,7 @@ var/check_delay = 60 //periodically recheck if we need to rebuild a shield use_power = POWER_USE_OFF idle_power_usage = 0 + obj_flags = OBJ_FLAG_ANCHORABLE /obj/machinery/shieldgen/Destroy() collapse_shields() From 25aa276e3b4923d94242517e069c28c1842ca68b Mon Sep 17 00:00:00 2001 From: Sbotkin <5092934+Sbotkin@users.noreply.github.com> Date: Sat, 13 Apr 2024 11:17:56 +0300 Subject: [PATCH 025/311] [MIRROR] Adds prescription versions of aviator HUDs --- .../preference_setup/loadout/lists/eyegear.dm | 3 +++ code/modules/clothing/glasses/glasses.dm | 5 ++++- code/modules/clothing/glasses/hud.dm | 14 +++++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preference_setup/loadout/lists/eyegear.dm b/code/modules/client/preference_setup/loadout/lists/eyegear.dm index f47822ebe90dc..8c400ef7887cd 100644 --- a/code/modules/client/preference_setup/loadout/lists/eyegear.dm +++ b/code/modules/client/preference_setup/loadout/lists/eyegear.dm @@ -77,6 +77,7 @@ options["Goggles, corrective"] = /obj/item/clothing/glasses/hud/health/goggle/prescription options["Eyepatch"] = /obj/item/clothing/glasses/eyepatch/hud/medical options["Aviators"] = /obj/item/clothing/glasses/hud/health/aviators + options["Aviators, corrective"] = /obj/item/clothing/glasses/hud/health/aviators/prescription gear_tweaks += new /datum/gear_tweak/path (options) @@ -94,6 +95,7 @@ options["Goggles, corrective"] = /obj/item/clothing/glasses/meson/prescription options["Eyepatch"] = /obj/item/clothing/glasses/eyepatch/hud/meson options["Aviators"] = /obj/item/clothing/glasses/meson/aviators + options["Aviators, corrective"] = /obj/item/clothing/glasses/meson/aviators/prescription gear_tweaks += new /datum/gear_tweak/path (options) @@ -110,6 +112,7 @@ options["HUD"] = /obj/item/clothing/glasses/hud/janitor options["HUD, corrective"] = /obj/item/clothing/glasses/hud/janitor/prescription options["Aviators"] = /obj/item/clothing/glasses/hud/janitor/aviators + options["Aviators, corrective"] = /obj/item/clothing/glasses/hud/janitor/aviators/prescription gear_tweaks += new /datum/gear_tweak/path (options) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 924f011756f5c..e0902a5a4975c 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -125,7 +125,6 @@ overlay = GLOB.global_hud.meson /obj/item/clothing/glasses/meson/prescription - name = "meson goggles" desc = "Used for seeing walls, floors, and stuff through anything. This set has corrective lenses." prescription = 5 @@ -136,6 +135,10 @@ off_state = "avi_off" item_state = "meson_avi_on" +/obj/item/clothing/glasses/meson/aviators/prescription + prescription = 5 + desc = "A meson HUD integrated into a pair of aviator sunglasses. These ones have eyesight-correcting lenses." + /obj/item/clothing/glasses/science name = "science goggles" desc = "Goggles fitted with a portable analyzer capable of determining the fabricator training potential of an item or components of a machine. Sensitive to EMP." diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 538a15916eeda..d14ffb50bf49a 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -51,6 +51,10 @@ off_state = "avi_off" item_state = "health_avi_on" +/obj/item/clothing/glasses/hud/health/aviators/prescription + prescription = 5 + desc = "A medical HUD integrated into a pair of aviator sunglasses. These ones have eyesight-correcting lenses." + /obj/item/clothing/glasses/hud/health/goggle name = "medical HUD visor" desc = "A medical HUD integrated with a wide visor." @@ -152,6 +156,10 @@ off_state = "avi_off" item_state = "jani_avi_on" +/obj/item/clothing/glasses/hud/janitor/aviators/prescription + prescription = 5 + desc = "A janitorial HUD integrated into a pair of aviator sunglasses. These ones have eyesight-correcting lenses." + /obj/item/clothing/glasses/hud/janitor/process_hud(mob/M) process_jani_hud(M) @@ -176,4 +184,8 @@ desc = "A scientific HUD integrated into a pair of aviator sunglasses. It does little to protect against the sun, but it sure looks cool." icon_state = "sci_avi_on" off_state = "avi_off" - item_state = "sci_avi_on" \ No newline at end of file + item_state = "sci_avi_on" + +/obj/item/clothing/glasses/hud/science/aviators/prescription + prescription = 5 + desc = "A scientific HUD integrated into a pair of aviator sunglasses. These ones have eyesight-correcting lenses." From d220eb191139f8147153005439a706933a73279f Mon Sep 17 00:00:00 2001 From: shartmasterforeverandever <106151067+shartmasterforeverandever@users.noreply.github.com> Date: Sat, 13 Apr 2024 11:18:02 +0300 Subject: [PATCH 026/311] [MIRROR] Pulling yourself out of quicksand is now gender neutral --- code/modules/overmap/exoplanets/planet_types/desert.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/overmap/exoplanets/planet_types/desert.dm b/code/modules/overmap/exoplanets/planet_types/desert.dm index c370bf7c9d0e8..38fe8e2253314 100644 --- a/code/modules/overmap/exoplanets/planet_types/desert.dm +++ b/code/modules/overmap/exoplanets/planet_types/desert.dm @@ -100,7 +100,7 @@ if(prob(80)) to_chat(user, SPAN_WARNING("You slip and fail to get out!")) return - user.visible_message(SPAN_NOTICE("\The [buckled_mob] pulls himself out of \the [src].")) + user.visible_message(SPAN_NOTICE("\The [buckled_mob] pulls themselves out of \the [src].")) else user.visible_message(SPAN_NOTICE("\The [buckled_mob] has been freed from \the [src] by \the [user].")) unbuckle_mob() From ac5d5f995a1ed159ab93d44ed610aaa86aa7b7f2 Mon Sep 17 00:00:00 2001 From: nl-208 <25735277+nl-208@users.noreply.github.com> Date: Sat, 13 Apr 2024 11:18:08 +0300 Subject: [PATCH 027/311] [MIRROR] Fix glucose/unathi interaction --- .../reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm index 38eceee4c4c96..7201714303c4e 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm @@ -61,9 +61,12 @@ name = "Glucose" color = "#ffffff" scannable = 1 - injectable = 1 +/datum/reagent/nutriment/glucose/adjust_nutrition(mob/living/carbon/M, removed) + M.adjust_nutrition(nutriment_factor * removed) + M.adjust_hydration(hydration_factor * removed) + /datum/reagent/nutriment/protein // Bad for Skrell! name = "Animal Protein" taste_description = "some sort of protein" From 001c74a06a6908909945c96c5155c22524f651ca Mon Sep 17 00:00:00 2001 From: Sweedle <12488672+Sweedle@users.noreply.github.com> Date: Mon, 15 Apr 2024 23:02:59 +0300 Subject: [PATCH 028/311] [MIRROR] Fix [zhlogo] description --- code/modules/codex/entries/paperwork.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/codex/entries/paperwork.dm b/code/modules/codex/entries/paperwork.dm index 4cce5071dd4ae..a30fdde5d30af 100644 --- a/code/modules/codex/entries/paperwork.dm +++ b/code/modules/codex/entries/paperwork.dm @@ -31,8 +31,14 @@ \[xynlogo\] - Inserts the Xyngergy logo.
\[iccgseal\] - Inserts ICCG seal.
\[fleetlogo\] - Inserts the logo of the SCG Fleet.
+<<<<<<< ours \[sfplogo\] - Inserts the logo of the Sol Federal Police.

\[falogo\] - Inserts the logo of the Frontier Alliance.

+======= +\[sfplogo\] - Inserts the logo of the Sol Federal Police.
+\[falogo\] - Inserts the logo of the Frontier Alliance.
+\[zhlogo\] - Inserts the logo of Zeng-Hu Pharmaceuticals.

+>>>>>>> theirs Digital exclusive commands (NanoWord, emails, reports, text files, etc):
\[pre\] - \[/pre\] : Adds preformatted text, forcing the text to be fixed width.
\[fontred\] - \[/font\] : Makes the text red.
From 9edf0b0aa0ef70c28ae27304e015f45a73e33250 Mon Sep 17 00:00:00 2001 From: CrimsonShrike <29737699+CrimsonShrike@users.noreply.github.com> Date: Sat, 20 Apr 2024 20:23:23 +0300 Subject: [PATCH 029/311] [MIRROR] Returns PAI creation to previous system --- code/game/objects/items/devices/paicard.dm | 5 ----- code/modules/mob/living/silicon/pai/admin.dm | 2 +- code/modules/mob/living/silicon/pai/pai.dm | 8 +++++++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 1fff8a8ac8bfa..15a4c60fcd727 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -22,11 +22,6 @@ /obj/item/device/paicard/Initialize() . = ..() AddOverlays("pai-off") - if (!pai) - pai = new /mob/living/silicon/pai(src) - pai.card = src - pai.CreateRadio() - /obj/item/device/paicard/Destroy() //Will stop people throwing friend pAIs into the singularity so they can respawn diff --git a/code/modules/mob/living/silicon/pai/admin.dm b/code/modules/mob/living/silicon/pai/admin.dm index 3307261558a4c..d25a56d512191 100644 --- a/code/modules/mob/living/silicon/pai/admin.dm +++ b/code/modules/mob/living/silicon/pai/admin.dm @@ -12,7 +12,7 @@ pai_key = C.key log_and_message_admins("made a pAI with key=[pai_key] at ([t.x],[t.y],[t.z])") - var/obj/item/device/paicard/card = new(t) + var/obj/item/device/paicard/card = new(t, t) card.pai.key = pai_key card.setPersonality(card.pai) if (name) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index da25971f1ee9b..8b3b183b5d95c 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -86,12 +86,18 @@ GLOBAL_LIST_INIT(possible_say_verbs, list( return ..() -/mob/living/silicon/pai/Initialize() +/mob/living/silicon/pai/Initialize(mapload, obj/item/device/paicard) . = ..() status_flags |= NO_ANTAG add_language(LANGUAGE_HUMAN_EURO, TRUE) verbs -= /mob/living/verb/ghost software = default_pai_software.Copy() + card = paicard + if (card) + //Radio is inside us, but needs to match waht the card says correct type is + CreateRadio() + else + CRASH("PAI was created without card - This may be an error or require special handling") /mob/living/silicon/pai/proc/CreateRadio() From 22ef110eab7c5862e03792f6d01ec44beeb643da Mon Sep 17 00:00:00 2001 From: MuckerMayhem <1161516+MuckerMayhem@users.noreply.github.com> Date: Sat, 20 Apr 2024 20:23:29 +0300 Subject: [PATCH 030/311] [MIRROR] reduce amount of venom frost spiders inject --- .../mob/living/simple_animal/hostile/giant_spider/frost.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider/frost.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider/frost.dm index f123593399b66..22ac8aead517c 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider/frost.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider/frost.dm @@ -10,7 +10,7 @@ maxHealth = 80 health = 80 - poison_per_bite = 5 + poison_per_bite = 1 poison_type = /datum/reagent/toxin/cryotoxin special_attack_min_range = 2 From 6260a018dc53b37e82e710984f570cb86c766df5 Mon Sep 17 00:00:00 2001 From: Ryan180602 <50071611+Ryan180602@users.noreply.github.com> Date: Sat, 20 Apr 2024 20:28:22 +0300 Subject: [PATCH 031/311] [MIRROR] Updates culture/residence blurbs --- code/__defines/culture.dm | 11 +++-- .../culture/cultures_human.dm | 39 ++++++++++++--- .../location/locations_human.dm | 49 +++++++++++-------- code/modules/species/station/machine.dm | 4 +- code/modules/species/station/station.dm | 4 +- maps/mapsystem/maps.dm | 8 ++- 6 files changed, 81 insertions(+), 34 deletions(-) diff --git a/code/__defines/culture.dm b/code/__defines/culture.dm index 2e30757565782..136e7d57bb58b 100644 --- a/code/__defines/culture.dm +++ b/code/__defines/culture.dm @@ -40,7 +40,8 @@ #define HOME_SYSTEM_MARS "Mars" #define HOME_SYSTEM_VENUS "Venus" #define HOME_SYSTEM_CERES "Ceres" -#define HOME_SYSTEM_PLUTO "Pluto" +#define HOME_SYSTEM_KUIPERB "Kuiper, Belt" +#define HOME_SYSTEM_KUIPERD "Kuiper, Interdust" #define HOME_SYSTEM_TAU_CETI "Ceti Epsilon" #define HOME_SYSTEM_HELIOS "Eos" #define HOME_SYSTEM_TERRA "Terra" @@ -67,7 +68,9 @@ #define CULTURE_HUMAN_VENUSIAN "Venusian, Zoner" #define CULTURE_HUMAN_VENUSLOW "Venusian, Surfacer" #define CULTURE_HUMAN_BELTER "Belter, Ceres" -#define CULTURE_HUMAN_PLUTO "Plutonian" +#define CULTURE_HUMAN_KUIPERI "Kuiper, Insider" +#define CULTURE_HUMAN_KUIPERO "Kuiper, Outsider" +#define CULTURE_HUMAN_MAGNITKA "Magnitkan" #define CULTURE_HUMAN_EARTH "Earther" #define CULTURE_HUMAN_CETIN "Cetite, Northern" #define CULTURE_HUMAN_CETIS "Cetite, Southern" @@ -83,8 +86,8 @@ #define CULTURE_HUMAN_SPACER "Spacer" #define CULTURE_HUMAN_OFFWORLD "Offworlder" #define CULTURE_HUMAN_SOLCOL "Solar-Colonial" -#define CULTURE_HUMAN_CONFEDC "Terran, Core Systems" -#define CULTURE_HUMAN_CONFEDO "Terran, Outer Systems" +#define CULTURE_HUMAN_CONFEDC "Confederate, Core Systems" +#define CULTURE_HUMAN_CONFEDO "Confederate, Outer Systems" #define CULTURE_HUMAN_GAIAN "Gaian" #define CULTURE_HUMAN_OTHER "Other, Humanity" #define CULTURE_STARLIGHT "Starlit Realms" diff --git a/code/modules/culture_descriptor/culture/cultures_human.dm b/code/modules/culture_descriptor/culture/cultures_human.dm index 660fbff1e7f38..b0a069d445ca7 100644 --- a/code/modules/culture_descriptor/culture/cultures_human.dm +++ b/code/modules/culture_descriptor/culture/cultures_human.dm @@ -77,12 +77,14 @@ economic_power = 1 -/singleton/cultural_info/culture/human/plutonian - name = CULTURE_HUMAN_PLUTO - description = "You are from Pluto, one of many denizens of this cruel and unforgiving world. For centuries Pluto has been in a slow state of decay and decline, resulting in \ - much of the planet's infrastructure being unstable or outright falling apart. This, coupled with rampant corruption and the large influence of criminal organisations across much of \ - the planet has led to the people of Pluto having something of a seedy reputation, its citizens being viewed with disrepute. The people themselves, however, are usually \ - just happy to get off the rock and to healthier locales. Unfortunately, despite the efforts of the wider SCG, many Plutonians tend to maintain criminal ties, even offworld." +/singleton/cultural_info/culture/human/kuiper_insider + name = CULTURE_HUMAN_KUIPERI + description = "You are from one of many habitations of the Kuiper belt. The eventual economic and social decay of Pluto, and its surroundings, has resulted in much of the zone's infrastructure \ + being unstable or outright falling apart. Coupled with rampant corruption and the growing mold of organised (and unorganised) crime across much of the region has left the people of the \ + Kuiper belt with something of a seedy reputation, with citizens often being viewed with disrepute. The people themselves, too, may not be unanimous at all times with a core community centered around \ + the descendents of the original colonists. While having a stronger foothold due to their lengthy ties to the SEZ's society and economy, they are often less diverse than the 'Outsiders'. \ + More often than not being able to trace their lineage directly back to Earth. This can often cause caustic, dissonant ideals, as compared to the rest of their Solar comrades. \ + While some may monotonously belong to the zone's stagnant class, other 'Insiders' may have roots to corporate backgrounds, owing to the initial colonisation and exploitation of Kuiper." economic_power = 0.8 secondary_langs = list (LANGUAGE_HUMAN_EURO, LANGUAGE_HUMAN_CHINESE, @@ -94,6 +96,23 @@ LANGUAGE_GUTTER, LANGUAGE_SIGN) +/singleton/cultural_info/culture/human/kuiper_outsider + name = CULTURE_HUMAN_KUIPERO + description = "You are from one of the many habitations of the Kuiper belt. While you were not a part of the initial collapse of the Zone, the effects of it are still felt all the same. \ + The stagnancy and neglect of the Zone has brought with it many opportunities for cheaper housing, and has made for an excellent haven for refugees looking for work. \ + Outsiders tend to be a more diverse demographic as compared to the Insiders, with many of them being descendents of employees on long-term tenures, or of families looking for cheap residence. \ + Most Outsiders tend to have a similar outlook of their home as that of the Insiders - with the Expeditionary Corps and Fleet being lucrative and comparitively easy ways to source a life outside the Kuiper belt." + economic_power = 0.7 + secondary_langs = list (LANGUAGE_HUMAN_EURO, + LANGUAGE_HUMAN_CHINESE, + LANGUAGE_HUMAN_ARABIC, + LANGUAGE_HUMAN_INDIAN, + LANGUAGE_HUMAN_IBERIAN, + LANGUAGE_HUMAN_RUSSIAN, + LANGUAGE_SPACER, + LANGUAGE_GUTTER, + LANGUAGE_SIGN) + /singleton/cultural_info/culture/human/earthling name = CULTURE_HUMAN_EARTH description = "You are from Earth, home of humanity. Earth culture is much as it has been for centuries, with the old nation states, while no longer politically important, still \ @@ -182,6 +201,14 @@ dominates the green planet, and the myriad of exotic life found in its freshwater system." economic_power = 0.7 +/singleton/cultural_info/culture/human/magnitka + name = CULTURE_HUMAN_MAGNITKA + description = "Magnitka often gives birth to rough-hewn, sturdy citizens with its austere political and environmental climate, and many are often well-sought for the \ + independent (and government) economic and production sectors of the two larger human nations. While it is difficult to acquire residency for a Magnitkan in Solar space due to the hazy political environment, \ + those who have been a part of the volunteer military force have no chance at all. Employees with Magnitkan blood may belong to the planet's Spacer culture, often at the lower rung of the social ladder - or the more \ + well connected, upper rung, with outsourcing and in-house job opportunities varying in quality and quantity for both." + economic_power = 0.8 + /singleton/cultural_info/culture/human/spacer name = CULTURE_HUMAN_SPACER description = "Across all political lines in human space, there are people who are born and raised in the void between worlds. You are from one of the myriad space stations, orbital platforms, long haul freighters, \ diff --git a/code/modules/culture_descriptor/location/locations_human.dm b/code/modules/culture_descriptor/location/locations_human.dm index e1e7112f93d21..42e00f54da2fa 100644 --- a/code/modules/culture_descriptor/location/locations_human.dm +++ b/code/modules/culture_descriptor/location/locations_human.dm @@ -75,21 +75,29 @@ and some of the best engineers Humanity has to offer." capital = "Government Zone, Ceres Station" -/singleton/cultural_info/location/human/pluto - name = HOME_SYSTEM_PLUTO +/singleton/cultural_info/location/human/kuiper_belt + name = HOME_SYSTEM_KUIPERB distance = "45AU" - description = "Pluto, nominally a Democratic Republic, is a small planet in the Sol system. Pluto has a fairly small population compared \ - to many other planets in the SCG, with much of it being centred around only two cities, both of which are in desperate need of modernisation \ - and repair, with much infrastructure long since collapsed. Pluto is dominated by criminal elements and corruption is rampant. Those who live on \ - Pluto either work a desperate, tough existence trying to escape the planet or are part of or under the thumbs of one of the many local crime \ - syndicates. In spite of a number of modernisation efforts the Pluto of today has seen very little in the way of improvement.

The people \ - of Pluto are, surprisingly, some of the worst off in the SCG. Downtrodden, poor, and from a locale that is so infested with crime it has become \ - part of the local culture. Most of the people of Pluto are very rough around the edges, hardened by years of poverty or criminality. Those that \ - manage to escape rarely wish to return, though often possess a looser set of morales as a result of their time on the planet." - capital = "New Santa Domingo" + description = "The Kuiper Special Economic Zone used to be at the forefront of human exploration before the advent of proper FTL travel. With the emergence \ + of Alden-Saraspova drives for long-range transit, and eventually gateways, the Zone saw a sharp decline in utility. Nowadays treated as an economic afterthought with little more than a defensive station in Sol, it is home to a diverse cast of residents. \ + Most inhabitants of the inner Belt tend to live on orbitals surrounding the capital, Pluto, and its moon - Charon. \ + Pluto is often dotted with water-ice and gas extraction plants, as many abandoned as there are operational. Many can often find traces of abandoned gas refineries, worker hovels and labyrinthine \ + networks of pump-houses and causeways; sometimes repurposed for more nefarious needs. Orbitals carry most of the economic and residential brunt, \ + with administrative services being concentrated around Pluto, primarily." + capital = "Kuiper Administrative Zone, Pluto" economic_power = 0.8 secondary_langs = list(LANGUAGE_GUTTER) +/singleton/cultural_info/location/human/kuiper_interdust + name = HOME_SYSTEM_KUIPERD + distance = "45AU" + description = "The Kuiper Special Economic Zone's region beyond the confines of administration's population centers contains the Interdust, with a variety of industrial, military and economic \ + infrastructure still kept in function. While residential slots are lesser than those in the Belt, a fair amount of inhabitants call it their home in isolated asteroid settlements. \ + With policing actions a far less stringent ordeal in this sector of the SEZ, crime has found much success in certain hotspots of the interdust regions of the Kuiper belt." + capital = "Kuiper Administrative Zone, Pluto" + economic_power = 0.7 + secondary_langs = list(LANGUAGE_GUTTER) + /singleton/cultural_info/location/human/cetiepsilon name = HOME_SYSTEM_TAU_CETI distance = "11.9 light years" @@ -193,15 +201,16 @@ /singleton/cultural_info/location/human/magnitka name = HOME_SYSTEM_MAGNITKA distance = "24 light years" - description = "Magnitka is an independent, industrialized mining and ore processing colony located in the Ursa system. \ - Ruled by an oligarchy with politicians often being freshly retired service members, Magnitka's recent history \ - is marked by civil war. Even today, a number of rebel groups populate the planet. Founded by corporations in the 2200s, the overwhelming majority of Magnitka's population \ - is descended from the settlers of a joint-corporate colonization effort from Earth. Unfortunately, Magnitka's economy is in a decline as its principle export, iron, grows \ - cheaper. The primary careers available to Magnitkans are military service, mining, or colonial labor. Though historically isolationist, and more recently associated \ - with the ICCG, recently a new uniquely Magnitkan identity has arisen; severe, pragmatic, and unified in their newfound independence." - capital = "Labortown" - economic_power = 0.8 - ruling_body = "Magnitka" + description = "Once an independent, industrialized mining and ore processing colony located in the Ursa system, Magnitka is now its own nation-state with various (albeit limited) sectors of economy and product. \ + Ruled by an oligarchic administrative body with politicians often being freshly retired service members, Magnitka's history \ + is marked by civil war, up until the 2260s, wherein the civil environment has stabilized for the sake of the planet's cohesion. Even today, a number of rebel groups populate the planet. \ + Founded by corporations in the 2200s, the overwhelming majority of Magnitka's population is descended from the settlers of a joint-corporate colonization effort from Earth. \ + Having been on a recovering spiral from its economy downturn, Magnitka tends to have a strict domestic economy \ + specializing in ore processing, arms manufacturing and skilled outsourced labour. While Magnitka has been historically isolationist, with a tendency towards the culture of the Gilgameshi - \ + more recently a new, uniquely Magnitkan identity has arisen; severe, pragmatic, and unified in their newfound independence." + capital = "Neueifel" + economic_power = 0.9 + ruling_body = "Magnitkan Independence Coalition" /singleton/cultural_info/location/human/castilla name = HOME_SYSTEM_CASTILLA diff --git a/code/modules/species/station/machine.dm b/code/modules/species/station/machine.dm index 92f56902f0c4e..5106cf314757b 100644 --- a/code/modules/species/station/machine.dm +++ b/code/modules/species/station/machine.dm @@ -64,7 +64,9 @@ HOME_SYSTEM_LUNA, HOME_SYSTEM_VENUS, HOME_SYSTEM_CERES, - HOME_SYSTEM_PLUTO, + HOME_SYSTEM_KUIPERB, + HOME_SYSTEM_KUIPERD, + HOME_SYSTEM_MAGNITKA, HOME_SYSTEM_TAU_CETI, HOME_SYSTEM_HELIOS, HOME_SYSTEM_SAFFAR, diff --git a/code/modules/species/station/station.dm b/code/modules/species/station/station.dm index b32248665fa6c..3dceb6364c0a0 100644 --- a/code/modules/species/station/station.dm +++ b/code/modules/species/station/station.dm @@ -31,7 +31,9 @@ CULTURE_HUMAN_VENUSIAN, CULTURE_HUMAN_VENUSLOW, CULTURE_HUMAN_BELTER, - CULTURE_HUMAN_PLUTO, + CULTURE_HUMAN_KUIPERI, + CULTURE_HUMAN_KUIPERO, + CULTURE_HUMAN_MAGNITKA, CULTURE_HUMAN_EARTH, CULTURE_HUMAN_CETIN, CULTURE_HUMAN_CETIS, diff --git a/maps/mapsystem/maps.dm b/maps/mapsystem/maps.dm index 793611ca1ce4a..045d916727db2 100644 --- a/maps/mapsystem/maps.dm +++ b/maps/mapsystem/maps.dm @@ -132,8 +132,10 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable HOME_SYSTEM_EARTH, HOME_SYSTEM_VENUS, HOME_SYSTEM_CERES, - HOME_SYSTEM_PLUTO, + HOME_SYSTEM_KUIPERB, + HOME_SYSTEM_KUIPERD, HOME_SYSTEM_TAU_CETI, + HOME_SYSTEM_MAGNITKA, HOME_SYSTEM_HELIOS, HOME_SYSTEM_TERRA, HOME_SYSTEM_SAFFAR, @@ -170,7 +172,9 @@ var/global/const/MAP_HAS_RANK = 2 //Rank system, also togglable CULTURE_HUMAN_VENUSIAN, CULTURE_HUMAN_VENUSLOW, CULTURE_HUMAN_BELTER, - CULTURE_HUMAN_PLUTO, + CULTURE_HUMAN_KUIPERI, + CULTURE_HUMAN_KUIPERO, + CULTURE_HUMAN_MAGNITKA, CULTURE_HUMAN_EARTH, CULTURE_HUMAN_CETIN, CULTURE_HUMAN_CETIS, From 1d9b7a2b5eebca4c201fcd954ba60a0643ef3874 Mon Sep 17 00:00:00 2001 From: MuckerMayhem <1161516+MuckerMayhem@users.noreply.github.com> Date: Sat, 20 Apr 2024 21:18:22 +0300 Subject: [PATCH 032/311] [MIRROR] Fix nullsuit sprite --- code/modules/clothing/spacesuits/rig/suits/station.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm index 7b06fbf0712d5..81f1d6df3e2f0 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station.dm @@ -503,4 +503,3 @@ //Do not further append if current state already indicates gender if(user.gender == FEMALE && !findtext(chest.icon_state,"_f", -2)) chest.icon_state = "[chest.icon_state]_f" - chest.update_icon(1) From 0c386bde04162b70ccd507418f15abf2e766ad6a Mon Sep 17 00:00:00 2001 From: MuckerMayhem <1161516+MuckerMayhem@users.noreply.github.com> Date: Sat, 27 Apr 2024 21:48:34 +0300 Subject: [PATCH 033/311] [MIRROR] Remove calamity antag type limit --- code/game/gamemodes/calamity/calamity.dm | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm index 3cf947fea5ebf..63f0f86d9ca86 100644 --- a/code/game/gamemodes/calamity/calamity.dm +++ b/code/game/gamemodes/calamity/calamity.dm @@ -11,14 +11,7 @@ event_delay_mod_major = 0.75 /datum/game_mode/calamity/create_antagonists() - var/list/antag_candidates = all_random_antag_types() - - var/grab_antags = round(num_players()/ANTAG_TYPE_RATIO)+1 - while(length(antag_candidates) && length(antag_tags) < grab_antags) - var/antag_id = pick(antag_candidates) - antag_candidates -= antag_id - antag_tags |= antag_id - + antag_tags |= all_random_antag_types() ..() #undef ANTAG_TYPE_RATIO From 76461e90e6cb9aabd9a9f0560937be3bfc667082 Mon Sep 17 00:00:00 2001 From: rootoo807 <71034457+rootoo807@users.noreply.github.com> Date: Tue, 30 Apr 2024 19:49:50 +0300 Subject: [PATCH 034/311] [MIRROR] Ports sprites, nutella, decapitating champagne bottles with swords, more --- baystation12.dme | 1 - code/_global_vars/edible.dm | 11 +- code/game/machinery/vending/boda.dm | 4 +- code/game/machinery/vending/boozeomat.dm | 6 +- code/game/machinery/vending/props.dm | 2 +- .../items/weapons/storage/fancy/crackers.dm | 2 +- .../items/weapons/storage/fancy/egg_box.dm | 2 +- .../objects/items/weapons/storage/misc.dm | 2 +- .../game/objects/items/weapons/storage/mre.dm | 2 +- code/game/objects/random/random.dm | 17 +- code/modules/food/recipes_microwave.dm | 55 +++++ code/modules/hydroponics/seed_datums.dm | 4 +- code/modules/reagents/Chemistry-Reagents.dm | 4 + .../Chemistry-Reagents-Dispenser.dm | 4 + .../Chemistry-Reagents-Drinks.dm | 46 +++- .../Chemistry-Reagents-Food.dm | 147 +++++++++++- code/modules/reagents/Chemistry-Recipes.dm | 42 ++++ .../reagents/reagent_containers/borghypo.dm | 2 +- .../reagents/reagent_containers/food/cans.dm | 15 +- .../reagent_containers/food/condiment.dm | 213 ++++++++---------- .../reagent_containers/food/drinks.dm | 140 ++++++++++-- .../reagent_containers/food/drinks/bottle.dm | 201 +++++++++++++---- .../reagent_containers/food/drinks/jar.dm | 22 -- .../reagent_containers/food/shaker.dm | 4 + .../reagent_containers/food/snacks.dm | 108 ++++++++- .../reagent_containers/glass/bottle.dm | 2 +- icons/obj/crafting_icons.dmi | Bin 5792 -> 5865 bytes icons/obj/food/condiment.dmi | Bin 0 -> 10915 bytes icons/obj/food/drinks.dmi | Bin 37522 -> 0 bytes icons/obj/food/drinks/bottles.dmi | Bin 0 -> 22151 bytes icons/obj/food/drinks/cans.dmi | Bin 0 -> 7693 bytes icons/obj/food/drinks/drink_effects.dmi | Bin 0 -> 4859 bytes icons/obj/food/drinks/flasks.dmi | Bin 0 -> 853 bytes icons/obj/food/drinks/misc.dmi | Bin 0 -> 4813 bytes icons/obj/food/food.dmi | Bin 136283 -> 122825 bytes icons/obj/food/food_custom.dmi | Bin 13306 -> 13477 bytes icons/obj/food/food_storage.dmi | Bin 0 -> 7025 bytes icons/obj/food/mre.dmi | Bin 0 -> 2005 bytes icons/obj/weapons/grenade.dmi | Bin 10663 -> 10980 bytes maps/away/skrellscoutship/skrellscoutship.dm | 3 - sound/items/champagne_pop.ogg | Bin 0 -> 11731 bytes sound/items/soda_burst.ogg | Bin 0 -> 46921 bytes sound/items/soda_shaking.ogg | Bin 0 -> 21401 bytes 43 files changed, 803 insertions(+), 258 deletions(-) delete mode 100644 code/modules/reagents/reagent_containers/food/drinks/jar.dm create mode 100644 icons/obj/food/condiment.dmi delete mode 100644 icons/obj/food/drinks.dmi create mode 100644 icons/obj/food/drinks/bottles.dmi create mode 100644 icons/obj/food/drinks/cans.dmi create mode 100644 icons/obj/food/drinks/drink_effects.dmi create mode 100644 icons/obj/food/drinks/flasks.dmi create mode 100644 icons/obj/food/drinks/misc.dmi create mode 100644 icons/obj/food/food_storage.dmi create mode 100644 icons/obj/food/mre.dmi create mode 100644 sound/items/champagne_pop.ogg create mode 100644 sound/items/soda_burst.ogg create mode 100644 sound/items/soda_shaking.ogg diff --git a/baystation12.dme b/baystation12.dme index 337852f8f4554..05c729e158870 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -2945,7 +2945,6 @@ #include "code\modules\reagents\reagent_containers\food\snacks.dm" #include "code\modules\reagents\reagent_containers\food\sushi.dm" #include "code\modules\reagents\reagent_containers\food\drinks\bottle.dm" -#include "code\modules\reagents\reagent_containers\food\drinks\jar.dm" #include "code\modules\reagents\reagent_containers\food\snacks\bugmeat.dm" #include "code\modules\reagents\reagent_containers\food\snacks\cheese.dm" #include "code\modules\reagents\reagent_containers\food\snacks\donkpocket.dm" diff --git a/code/_global_vars/edible.dm b/code/_global_vars/edible.dm index 185ab9e0cd3ae..9129b082bdf6a 100644 --- a/code/_global_vars/edible.dm +++ b/code/_global_vars/edible.dm @@ -4,7 +4,10 @@ GLOBAL_LIST_INIT(proteinbar_flavors, list( /datum/reagent/drink/juice/apple, /datum/reagent/drink/juice/pear ), - "banana nut" = /datum/reagent/drink/juice/banana, + "banana nut" = list( + /datum/reagent/drink/juice/banana, + /datum/reagent/nutriment/almondmeal + ), "cappuccino" = list( /datum/reagent/nutriment/coffee, /datum/reagent/drink/milk @@ -34,5 +37,9 @@ GLOBAL_LIST_INIT(proteinbar_flavors, list( "magical melons" = list( /datum/reagent/drink/juice/melon ), - "mixed berry" = /datum/reagent/drink/juice/berry + "mixed berry" = /datum/reagent/drink/juice/berry, + "peanut crunch" = list( + /datum/reagent/nutriment/peanutbutter, + /datum/reagent/nutriment/groundpeanuts + ) )) diff --git a/code/game/machinery/vending/boda.dm b/code/game/machinery/vending/boda.dm index ab2a4749c3aeb..059063d750e1a 100644 --- a/code/game/machinery/vending/boda.dm +++ b/code/game/machinery/vending/boda.dm @@ -31,7 +31,7 @@ /obj/item/reagent_containers/food/drinks/cans/artbru = 0, /obj/item/reagent_containers/food/drinks/glass2/square/boda = 0, /obj/item/reagent_containers/food/drinks/glass2/square/bodaplus = 0, - /obj/item/reagent_containers/food/drinks/bottle/space_up = 0 + /obj/item/reagent_containers/food/drinks/bottle/small/space_up = 0 ) contraband = list( /obj/item/clothing/under/soviet = 1, @@ -39,7 +39,7 @@ ) rare_products = list( - /obj/item/reagent_containers/food/drinks/bottle/space_up = 50, + /obj/item/reagent_containers/food/drinks/bottle/small/space_up = 50, /obj/item/card/id/syndicate = 25, /obj/item/storage/box/syndie_kit/spy = 50 ) diff --git a/code/game/machinery/vending/boozeomat.dm b/code/game/machinery/vending/boozeomat.dm index 57b8fa6e67c11..64ba0ae3fc76e 100644 --- a/code/game/machinery/vending/boozeomat.dm +++ b/code/game/machinery/vending/boozeomat.dm @@ -77,11 +77,11 @@ /obj/item/reagent_containers/food/drinks/cans/rootbeer = 15, /obj/item/reagent_containers/food/drinks/cans/speer = 10, /obj/item/reagent_containers/food/drinks/cans/ale = 10, - /obj/item/reagent_containers/food/drinks/bottle/cola = 5, + /obj/item/reagent_containers/food/drinks/bottle/small/cola = 10, + /obj/item/reagent_containers/food/drinks/bottle/small/space_up = 10, + /obj/item/reagent_containers/food/drinks/bottle/small/space_mountain_wind = 10, /obj/item/reagent_containers/food/drinks/cans/cola_diet = 5, /obj/item/reagent_containers/food/drinks/cans/ionbru = 5, - /obj/item/reagent_containers/food/drinks/bottle/space_up = 5, - /obj/item/reagent_containers/food/drinks/bottle/space_mountain_wind = 5, /obj/item/reagent_containers/food/drinks/cans/beastenergy = 5, /obj/item/reagent_containers/food/drinks/tea/black = 15, /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 2, diff --git a/code/game/machinery/vending/props.dm b/code/game/machinery/vending/props.dm index 7e55aff9f3189..9df10aa019c6c 100644 --- a/code/game/machinery/vending/props.dm +++ b/code/game/machinery/vending/props.dm @@ -8,7 +8,7 @@ /obj/structure/flora/pottedplant = 2, /obj/item/device/flashlight/lamp = 2, /obj/item/device/flashlight/lamp/green = 2, - /obj/item/reagent_containers/food/drinks/jar = 1, + /obj/item/glass_jar = 1, /obj/item/nullrod = 1, /obj/item/toy/cultsword = 4, /obj/item/toy/katana = 2 diff --git a/code/game/objects/items/weapons/storage/fancy/crackers.dm b/code/game/objects/items/weapons/storage/fancy/crackers.dm index f74a1227cda89..a14136f8beb14 100644 --- a/code/game/objects/items/weapons/storage/fancy/crackers.dm +++ b/code/game/objects/items/weapons/storage/fancy/crackers.dm @@ -1,6 +1,6 @@ /obj/item/storage/fancy/crackers name = "\improper Getmore Crackers" - icon = 'icons/obj/food/food.dmi' + icon = 'icons/obj/food/food_storage.dmi' icon_state = "crackerbag" open_sound = 'sound/effects/crinkle.ogg' storage_slots = 6 diff --git a/code/game/objects/items/weapons/storage/fancy/egg_box.dm b/code/game/objects/items/weapons/storage/fancy/egg_box.dm index 98bba63e50cea..9310fba7c5426 100644 --- a/code/game/objects/items/weapons/storage/fancy/egg_box.dm +++ b/code/game/objects/items/weapons/storage/fancy/egg_box.dm @@ -1,6 +1,6 @@ /obj/item/storage/fancy/egg_box name = "egg box" - icon = 'icons/obj/food/food.dmi' + icon = 'icons/obj/food/food_storage.dmi' icon_state = "eggbox" open_sound = 'sound/effects/storage/smallbox.ogg' storage_slots = 12 diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index cc0df28d35713..ab163cb7b0ae6 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -27,7 +27,7 @@ /obj/item/storage/box/donut - icon = 'icons/obj/food/food.dmi' + icon = 'icons/obj/food/food_storage.dmi' icon_state = "donutbox" name = "donut box" contents_allowed = list(/obj/item/reagent_containers/food/snacks/donut) diff --git a/code/game/objects/items/weapons/storage/mre.dm b/code/game/objects/items/weapons/storage/mre.dm index 3f5f56c13baeb..01e20cf49666e 100644 --- a/code/game/objects/items/weapons/storage/mre.dm +++ b/code/game/objects/items/weapons/storage/mre.dm @@ -5,7 +5,7 @@ MRE Stuff /obj/item/storage/mre name = "MRE, Menu 1" desc = "A vacuum-sealed bag containing a day's worth of nutrients for an adult in strenuous situations. There is no visible expiration date on the package." - icon = 'icons/obj/food/food.dmi' + icon = 'icons/obj/food/mre.dmi' icon_state = "mre" storage_slots = 7 max_w_class = ITEM_SIZE_SMALL diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index bc973d916c870..bf375df98f85e 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -264,7 +264,7 @@ /obj/random/drinkbottle name = "random drink" desc = "This is a random drink." - icon = 'icons/obj/food/drinks.dmi' + icon = 'icons/obj/food/drinks/bottles.dmi' icon_state = "whiskeybottle" /obj/random/drinkbottle/spawn_choices() @@ -1285,7 +1285,7 @@ var/global/list/multi_point_spawns /obj/random/mre name = "random MRE" desc = "This is a random single MRE." - icon = 'icons/obj/food/food.dmi' + icon = 'icons/obj/food/mre.dmi' icon_state = "mre" /obj/random/mre/spawn_choices() @@ -1344,6 +1344,7 @@ var/global/list/multi_point_spawns /obj/random/mre/drink name = "random MRE drink" desc = "This is a random drink for MREs." + icon = 'icons/obj/food/condiment.dmi' icon_state = "packet_small" /obj/random/mre/drink/spawn_choices() @@ -1358,22 +1359,28 @@ var/global/list/multi_point_spawns /obj/random/mre/spread name = "random MRE spread" desc = "This is a random spread packet for MREs." + icon = 'icons/obj/food/condiment.dmi' icon_state = "packet_small" /obj/random/mre/spread/spawn_choices() return list(/obj/item/reagent_containers/food/condiment/small/packet/jelly, - /obj/item/reagent_containers/food/condiment/small/packet/honey) + /obj/item/reagent_containers/food/condiment/small/packet/honey, + /obj/item/reagent_containers/food/condiment/small/packet/peanutbutter, + /obj/item/reagent_containers/food/condiment/small/packet/choconutspread) /obj/random/mre/spread/vegan name = "random vegan MRE spread" desc = "This is a random vegan spread packet for MREs." /obj/random/mre/spread/vegan/spawn_choices() - return list(/obj/item/reagent_containers/food/condiment/small/packet/jelly) + return list(/obj/item/reagent_containers/food/condiment/small/packet/jelly, + /obj/item/reagent_containers/food/condiment/small/packet/peanutbutter, + /obj/item/reagent_containers/food/condiment/small/packet/choconutspread) /obj/random/mre/sauce name = "random MRE sauce" desc = "This is a random sauce packet for MREs." + icon = 'icons/obj/food/condiment.dmi' icon_state = "packet_small" /obj/random/mre/sauce/spawn_choices() @@ -1437,7 +1444,7 @@ var/global/list/multi_point_spawns /obj/random/single/cola name = "randomly spawned cola" - icon = 'icons/obj/food/drinks.dmi' + icon = 'icons/obj/food/drinks/cans.dmi' icon_state = "cola" spawn_object = /obj/item/reagent_containers/food/drinks/cans/cola diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index cb097d1c72a3b..367f6119e0cbc 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -885,6 +885,26 @@ result_path = /obj/item/reagent_containers/food/snacks/jelliedtoast/cherry +/datum/microwave_recipe/pbtoast + required_reagents = list( + /datum/reagent/nutriment/peanutbutter = 5 + ) + required_items = list( + /obj/item/reagent_containers/food/snacks/slice/bread + ) + result_path = /obj/item/reagent_containers/food/snacks/pbtoast + + +/datum/microwave_recipe/ntella_bread + required_reagents = list( + /datum/reagent/nutriment/choconutspread = 5 + ) + required_items = list( + /obj/item/reagent_containers/food/snacks/slice/bread + ) + result_path = /obj/item/reagent_containers/food/snacks/ntella_bread + + /datum/microwave_recipe/milosoup required_reagents = list( /datum/reagent/water = 10 @@ -1120,6 +1140,30 @@ result_path = /obj/item/reagent_containers/food/snacks/jellysandwich/cherry +/datum/microwave_recipe/pbjsandwich_cherry + required_reagents = list( + /datum/reagent/nutriment/cherryjelly = 5, + /datum/reagent/nutriment/peanutbutter = 5 + ) + required_items = list( + /obj/item/reagent_containers/food/snacks/slice/bread, + /obj/item/reagent_containers/food/snacks/slice/bread + ) + result_path = /obj/item/reagent_containers/food/snacks/pbjsandwich/cherry + + +/datum/microwave_recipe/pbjsandwich_slime + required_reagents = list( + /datum/reagent/slimejelly = 5, + /datum/reagent/nutriment/peanutbutter = 5 + ) + required_items = list( + /obj/item/reagent_containers/food/snacks/slice/bread, + /obj/item/reagent_containers/food/snacks/slice/bread + ) + result_path = /obj/item/reagent_containers/food/snacks/pbjsandwich/slime + + /datum/microwave_recipe/bloodsoup required_reagents = list( /datum/reagent/blood = 30 @@ -1431,6 +1475,17 @@ result_path = /obj/item/reagent_containers/food/snacks/sliceable/cheesecake +/datum/microwave_recipe/cake/ntella_cheesecake + required_reagents = list(/datum/reagent/drink/milk = 5, /datum/reagent/nutriment/choconutspread = 15, /datum/reagent/sugar = 10) + required_items = list( + /obj/item/reagent_containers/food/snacks/cheesewedge, + /obj/item/reagent_containers/food/snacks/cookie, + /obj/item/reagent_containers/food/snacks/cookie, + /obj/item/reagent_containers/food/snacks/cookie + ) + result_path = /obj/item/reagent_containers/food/snacks/sliceable/ntella_cheesecake + + /datum/microwave_recipe/cake/orange required_produce = list( "orange" = 1 diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 7f901689c8ea8..8f35782ba3522 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -648,7 +648,7 @@ name = "peanut" seed_name = "peanut" display_name = "peanut plant" - chems = list(/datum/reagent/nutriment = list(1,10)) + chems = list(/datum/reagent/nutriment/groundpeanuts = list(3,5)) kitchen_tag = "peanut" /datum/seed/peanuts/New() @@ -1823,7 +1823,7 @@ name = "almond" seed_name = "almond" display_name = "almond plant" - chems = list(/datum/reagent/nutriment = list(1,10)) + chems = list(/datum/reagent/nutriment/almondmeal = list(4,7)) kitchen_tag = "almond" /datum/seed/almond/New() diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 28dfbd72aae46..503650efed85d 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -38,6 +38,10 @@ var/glass_desc = "It's a glass of... what, exactly?" var/list/glass_special = null // null equivalent to list() + var/condiment_icon_state + var/condiment_name + var/condiment_desc + // GAS DATA, generic values copied from base XGM datum type. var/gas_specific_heat = 20 var/gas_molar_mass = 0.032 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm index 3762a30055edf..d499c5eefd7d2 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm @@ -431,6 +431,10 @@ glass_icon = DRINK_ICON_NOISY value = DISPENSER_REAGENT_VALUE + condiment_name = "sugar sack" + condiment_desc = "Cavities in a bag." + condiment_icon_state = "sugar" + /datum/reagent/sugar/affect_blood(mob/living/carbon/human/M, removed) handle_sugar(M, src) M.adjust_nutrition(removed * 3) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drinks.dm index d3db451086ccd..7c8127b935b79 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Drinks.dm @@ -497,6 +497,15 @@ glass_name = "hot chocolate" glass_desc = "Made with love! And cocoa beans." +/datum/reagent/drink/hot_coco/ntella + name = "NTella Hot Chocolate" + description = "It's like a cup of hot chocolate except... More everything." + color = "#63432e" + taste_description = "hazelnutty, creamy chocolate" + + glass_name = "NTella hot chocolate" + glass_desc = "A very chocolatey drink for the days so rough, so cold, or so celebratory that a regular hot chocolate just won't cut it. It has marshmallows!" + /datum/reagent/drink/sodawater name = "Soda Water" description = "A can of club soda. Why not make a scotch and soda?" @@ -533,6 +542,7 @@ glass_name = "tonic water" glass_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." + glass_special = list(DRINK_FIZZ) /datum/reagent/drink/lemonade name = "Lemonade" @@ -634,6 +644,15 @@ glass_name = "milkshake" glass_desc = "Glorious brainfreezing mixture." +/datum/reagent/drink/milkshake/ntella + name = "NTella Milkshake" + description = "An intensely sweet chocolatey concoction with whipped cream on top." + color = "#6d4124" + taste_description = "overwhelmingly sweet chocolate" + + glass_name = "NTella milkshake" + glass_desc = "Oh look, it's that thing you actually want to get but probably shouldn't." + /datum/reagent/drink/rewriter name = "Rewriter" description = "The secret of the sanctuary of the Libarian..." @@ -723,6 +742,7 @@ glass_name = "Dr. Gibb" glass_desc = "Dr. Gibb. Not as dangerous as the name might imply." + glass_special = list(DRINK_FIZZ) /datum/reagent/drink/space_up name = "Space-Up" @@ -774,14 +794,14 @@ taste_description = "dry and cheap noodles" reagent_state = SOLID nutrition = 1 - color = "#302000" + color = "#dec85d" /datum/reagent/drink/hot_ramen name = "Hot Ramen" description = "The noodles are boiled, the flavors are artificial, just like being back in school." taste_description = "wet and cheap noodles" reagent_state = LIQUID - color = "#302000" + color = "#c28f19" nutrition = 5 adj_temp = 5 @@ -790,7 +810,7 @@ description = "The noodles are boiled, the flavors are artificial, just like being back in school." taste_description = "wet and cheap noodles on fire" reagent_state = LIQUID - color = "#302000" + color = "#c93f04" nutrition = 5 /datum/reagent/drink/hell_ramen/affect_ingest(mob/living/carbon/M, removed) @@ -836,9 +856,11 @@ name = "Ginger Beer" description = "A hearty, non-alcoholic beverage extremely popular around the SCG." taste_description = "carbonated ginger" - color = "#44371f" + color = "#f5f3c6" + glass_name = "ginger beer" glass_desc = "A hearty, non-alcoholic beverage extremely popular around the SCG." + glass_special = list(DRINK_FIZZ) /datum/reagent/drink/beastenergy name = "Beast Energy" @@ -919,7 +941,7 @@ /datum/reagent/cinnamon name = "Cinnamon" - description = "Delicious ground cinnamon spice. " + description = "Delicious ground cinnamon spice." taste_description = "cinnamon" reagent_state = SOLID color = "#cd6139" @@ -928,6 +950,9 @@ glass_name = "cinnamon" glass_desc = "Delicious ground cinnamon spice, why would you drink this?" + condiment_icon_state = "cinnamonbottle" + condiment_name = "bottle of cinnamon" + /datum/reagent/oliveoil name = "Olive Oil" description = "Olive oil, an essential part of cooking." @@ -937,6 +962,10 @@ glass_name = "olive oil" glass_desc = "Oily." + condiment_icon_state = "oliveoil" + condiment_name = "olive oil" + condiment_desc = "Used in food preparation and flavoring." + /datum/reagent/drink/affelerin name = "Affelerin Nectar" description = "A thick syrup-like nectar from the Affelerin, common across many desert worlds." @@ -1060,6 +1089,7 @@ glass_name = "Dandelion and Burdock" glass_desc = "A tall glass of DnB" + glass_special = list(DRINK_FIZZ) /datum/reagent/drink/doogh name = "Doogh" @@ -1184,7 +1214,7 @@ name = "Green Tea" description = "Subtle green tea, it has antioxidants, it's good for you!" taste_description = "subtle green tea" - color = "#b4cd94" + color = "#8bbf49" glass_name = "green tea" glass_desc = "Subtle green tea, it has antioxidants, it's good for you!" @@ -1193,7 +1223,7 @@ name = "Iced Green Tea" description = "It's the green tea you know and love, but now it's cold." taste_description = "cold green tea" - color = "#b4cd94" + color = "#8bbf49" glass_name = "iced green tea" glass_desc = "It's the green tea you know and love, but now it's cold." @@ -1202,7 +1232,7 @@ name = "Sweet Green Tea" description = "It's the green tea you know and love, but now it's cold. And sweet." taste_description = "sweet green tea" - color = "#b4cd94" + color = "#8bbf49" glass_name = "sweet green tea" glass_desc = "It's the green tea you know and love, but now it's cold. And sweet." diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm index 38eceee4c4c96..704ea18dda5b4 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food.dm @@ -82,6 +82,10 @@ taste_description = "egg" color = "#ffffaa" + condiment_icon_state = "eggyolk" + condiment_name = "egg yolk carton" + condiment_desc = "A carton full of egg yolk." + //vegetamarian alternative that is safe for skrell to ingest//rewired it from its intended nutriment/protein/egg/softtofu because it would not actually work, going with plan B, more recipes. /datum/reagent/nutriment/softtofu @@ -98,6 +102,10 @@ color = "#ffff00" sugar_amount = 1 + condiment_icon_state = "honey" + condiment_name = "honey" + condiment_desc = "A jar of sweet and viscous honey." + /datum/reagent/nutriment/flour name = "flour" description = "This is what you rub all over yourself to pretend to be a ghost." @@ -106,6 +114,10 @@ nutriment_factor = 1 color = "#ffffff" + condiment_icon_state = "flour" + condiment_name = "flour sack" + condiment_desc = "A big bag of flour. Good for baking!" + /datum/reagent/nutriment/flour/touch_turf(turf/simulated/T) if(istype(T)) new /obj/decal/cleanable/flour(T) @@ -123,6 +135,10 @@ color = "#ffd592" protein_amount = 0.4 + condiment_icon_state = "batter" + condiment_name = "batter mix" + condiment_desc = "A gooey mixture of eggs and flour in a vat. Delicious!" + /datum/reagent/nutriment/batter/touch_turf(turf/simulated/T) if(!istype(T, /turf/space)) new /obj/decal/cleanable/pie_smudge(T) @@ -133,11 +149,13 @@ /datum/reagent/nutriment/batter/cakebatter name = "Cake Batter" - description = "A gooey mixture of eggs, flour and sugar, a important precursor to cake!" + description = "A gooey mixture of eggs, flour and sugar, an important precursor to cake!" taste_description = "sweetness" color = "#ffe992" protein_amount = 0.3 + condiment_name = "cake batter mix" + /datum/reagent/nutriment/coffee name = "Coffee Powder" description = "A bitter powder made by grinding coffee beans." @@ -146,10 +164,16 @@ nutriment_factor = 1 color = "#482000" + condiment_icon_state = "coffee" + condiment_name = "coffee powder" + /datum/reagent/nutriment/coffee/instant name = "Instant Coffee Powder" description = "A bitter powder made by processing coffee beans." + condiment_name = "instant coffee powder" + condiment_desc = "A sack of instant coffee powder, now 50% more caffeinated!" + /datum/reagent/nutriment/tea name = "Tea Powder" description = "A dark, tart powder made from black tea leaves." @@ -158,18 +182,28 @@ nutriment_factor = 1 color = "#101000" + condiment_icon_state = "tea" + condiment_name = "tea powder" + /datum/reagent/nutriment/tea/instant name = "Instant Tea Powder" + condiment_name = "instant tea powder" + condiment_desc = "A sack of instant tea powder, now 50% less caffeinated!" + /datum/reagent/nutriment/coco - name = "Coco Powder" - description = "A fatty, bitter paste made from coco beans." + name = "Cocoa Powder" + description = "A fatty, bitter paste made from cocoa beans." taste_description = "bitterness" taste_mult = 1.3 reagent_state = SOLID nutriment_factor = 5 color = "#302000" + condiment_icon_state = "cocoapowder" + condiment_name = "cocoa powder" + condiment_desc = "A can full of chocolately powder. Not very tasty by itself." + /datum/reagent/nutriment/instantjuice name = "Juice Powder" description = "Dehydrated, powdered juice of some kind." @@ -207,7 +241,11 @@ taste_mult = 1.1 reagent_state = LIQUID nutriment_factor = 2 + color = "#792300" + condiment_icon_state = "soysauce" + condiment_name = "soy sauce" + condiment_desc = "A dark, salty, savoury flavoring." /datum/reagent/nutriment/ketchup name = "Ketchup" @@ -217,6 +255,10 @@ nutriment_factor = 5 color = "#731008" + condiment_icon_state = "ketchup" + condiment_name = "ketchup" + condiment_desc = "Tomato, but more liquid, stronger, better." + /datum/reagent/nutriment/barbecue name = "Barbecue Sauce" description = "Barbecue sauce for barbecues and long shifts." @@ -225,6 +267,10 @@ nutriment_factor = 5 color = "#4f330f" + condiment_icon_state = "barbecue" + condiment_name = "barbecue sauce" + condiment_desc = "A bottle of barbecue sauce. It's labeled 'sweet and spicy'." + /datum/reagent/nutriment/garlicsauce name = "Garlic Sauce" description = "Garlic sauce, perfect for spicing up a plate of garlic." @@ -233,6 +279,10 @@ nutriment_factor = 4 color = "#d8c045" + condiment_icon_state = "garlic_sauce" + condiment_name = "garlic sauce" + condiment_desc = "Perfect for repelling vampires and/or potential dates." + /datum/reagent/nutriment/rice name = "Rice" description = "Enjoy the great taste of nothing." @@ -242,6 +292,10 @@ nutriment_factor = 1 color = "#ffffff" + condiment_icon_state = "rice" + condiment_name = "rice sack" + condiment_desc = "A big bag of rice for cooking." + /datum/reagent/nutriment/rice/chazuke name = "Chazuke" description = "Green tea over rice. How rustic!" @@ -260,6 +314,10 @@ nutriment_factor = 1 color = "#801e28" + condiment_icon_state = "jellyjar" + condiment_name = "cherry jelly jar" + condiment_desc = "Great with peanut butter!" + /datum/reagent/nutriment/cornoil name = "Corn Oil" description = "An oil derived from various types of corn." @@ -267,7 +325,11 @@ taste_mult = 0.1 reagent_state = LIQUID nutriment_factor = 20 - color = "#302000" + color = "#c9bb1e" + + condiment_icon_state = "cooking_oil" + condiment_name = "corn oil" + condiment_desc = "A delicious oil used in cooking. Made from corn." /datum/reagent/nutriment/cornoil/touch_turf(turf/simulated/T) if(!istype(T)) @@ -291,6 +353,9 @@ nutriment_factor = 1 color = "#ff00ff" + condiment_icon_state = "sprinklesbottle" + condiment_name = "bottle of sprinkles" + /datum/reagent/nutriment/mint name = "Mint" description = "Also known as Mentha." @@ -298,6 +363,10 @@ reagent_state = LIQUID color = "#07aab2" + condiment_icon_state = "mint_syrup" + condiment_name = "mint essential oil" + condiment_desc = "A small bottle of the essential oil of some kind of mint plant." + /datum/reagent/lipozine // The anti-nutriment. name = "Lipozine" description = "A chemical compound that causes a powerful fat-burning reaction." @@ -321,6 +390,10 @@ overdose = REAGENTS_OVERDOSE value = 0.11 + condiment_icon_state = "saltshaker" + condiment_name = "salt shaker" + condiment_desc = "Salt. From space oceans, presumably." + /datum/reagent/blackpepper name = "Black Pepper" description = "A powder ground from peppercorns. *AAAACHOOO*" @@ -329,6 +402,10 @@ color = "#000000" value = 0.1 + condiment_icon_state = "peppermill" + condiment_name = "pepper shaker" + condiment_desc = "Often used to flavor food or make people sneeze." + /datum/reagent/enzyme name = "Universal Enzyme" description = "A universal enzyme used in the preperation of certain chemicals and foods." @@ -339,6 +416,10 @@ overdose = REAGENTS_OVERDOSE value = 0.2 + condiment_icon_state = "enzyme" + condiment_name = "universal enzyme" + condiment_desc = "Used in cooking various dishes." + /datum/reagent/frostoil name = "Chilly Oil" description = "An oil harvested from a mutant form of chili peppers, it has a chilling effect on the body." @@ -348,6 +429,10 @@ color = "#07aab2" value = 0.2 + condiment_icon_state = "coldsauce" + condiment_name = "cold sauce" + condiment_desc = "Leaves the tongue numb in its passage." + /datum/reagent/frostoil/affect_blood(mob/living/carbon/M, removed) if (IS_METABOLICALLY_INERT(M)) return @@ -371,6 +456,10 @@ var/slime_temp_adj = 10 value = 0.2 + condiment_icon_state= "hotsauce" + condiment_name = "hot sauce" + condiment_desc = "You can almost TASTE the stomach ulcers now!" + /datum/reagent/capsaicin/affect_blood(mob/living/carbon/M, removed) if (IS_METABOLICALLY_INERT(M)) return @@ -501,3 +590,53 @@ color = "#efede8" taste_mult = 2 protein_amount = 0.7 + + condiment_icon_state = "mayonnaise" + condiment_name = "mayonnaise" + condiment_desc = "Mayonnaise, used for centuries to make things edible." + +/datum/reagent/nutriment/groundpeanuts + name = "Ground Peanuts" + description = "Roughly ground peanuts." + taste_description = "peanut" + reagent_state = SOLID + color = "#ad7937" + taste_mult = 2 + + condiment_icon_state = "peanut" + condiment_name = "sack of ground peanuts" + condiment_desc = "A sack full of crunchy ground peanuts." + +/datum/reagent/nutriment/peanutbutter + name = "Peanut Butter" + description = "Clearer the better spread, exception for those who are deathly allergic." + taste_description = "peanut butter" + reagent_state = LIQUID + color = "#ad7937" + taste_mult = 2 + sugar_amount = 0.1 + + condiment_icon_state = "pbjar" + condiment_name = "peanut butter jar" + condiment_desc = "Great with jelly!" + +/datum/reagent/nutriment/almondmeal + name = "Almond Meal" + description = "Finely ground almonds." + taste_description = "nuts" + reagent_state = SOLID + color = "#c9a275" + taste_mult = 2 + +/datum/reagent/nutriment/choconutspread + name = "Choco-Nut Spread" + description = "Creamy chocolate spread with a nutty undertone." + taste_description = "nutty chocolate" + reagent_state = LIQUID + color = "#2c1000" + taste_mult = 2 + sugar_amount = 0.5 + + condiment_name = "NTella jar" + condiment_desc = "Originally called 'Entella', it was rebranded after being bought by NanoTrasen. Some humans insist this nutty chocolate spread might be the best thing they've ever created." + condiment_icon_state = "NTellajar" \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index fcd2fe2d6323f..b2ad009a9b8d1 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -1473,6 +1473,12 @@ maximum_temperature = (70 CELSIUS) + 100 mix_message = "The solution thickens into a steaming brown beverage." +/datum/chemical_reaction/ntella_hot_chocolate + name = "NTella hot chocolate" + result = /datum/reagent/drink/hot_coco/ntella + required_reagents = list(/datum/reagent/drink/milk = 1, /datum/reagent/nutriment/choconutspread = 1, /datum/reagent/drink/milk/cream = 1) + result_amount = 3 + /datum/chemical_reaction/grapejuice name = "Grape Juice" result = /datum/reagent/drink/juice/grape @@ -1641,6 +1647,28 @@ result_amount = 6 mix_message = "The broth of the noodles takes on a hellish red gleam." +/datum/chemical_reaction/peanutbutter + name = "Peanut Butter" + result = /datum/reagent/nutriment/peanutbutter + required_reagents = list(/datum/reagent/nutriment/groundpeanuts = 5, /datum/reagent/sugar = 1, /datum/reagent/sodiumchloride = 1) + result_amount = 5 + mix_message = "The solution thickens into a creamy, nutty spread." + +/datum/chemical_reaction/choconutspread + name = "Choco-Nut Spread" + result = /datum/reagent/nutriment/choconutspread + required_reagents = list(/datum/reagent/nutriment/almondmeal = 1, /datum/reagent/sugar = 2, /datum/reagent/nutriment/coco = 1, /datum/reagent/drink/milk/soymilk = 1) + result_amount = 4 + mix_message = "The solution thickens into a creamy, chocolate-y spread." + +/datum/chemical_reaction/sprinkles + name = "Sprinkles" + result = /datum/reagent/nutriment/sprinkles + required_reagents = list(/datum/reagent/sugar = 3, /datum/reagent/drink/syrup_vanilla = 1, /datum/reagent/nutriment/cornoil = 1) + result_amount = 5 + mix_message = "The solution thickens and hardens into sugary sprinkles." + + /* Alcohol */ /datum/chemical_reaction/goldschlager @@ -1715,6 +1743,14 @@ result_amount = 10 mix_message = "The solution roils as it rapidly ferments into a rich red liquid." +/datum/chemical_reaction/whitewine + name = "White Wine" + result = /datum/reagent/ethanol/wine/premium + required_reagents = list(/datum/reagent/drink/juice/grape/white = 10) + catalysts = list(/datum/reagent/enzyme = 5) + result_amount = 10 + mix_message = "The solution roils as it rapidly ferments into a pale gold liquid." + /datum/chemical_reaction/pwine name = "Poison Wine" result = /datum/reagent/ethanol/pwine @@ -2258,6 +2294,12 @@ required_reagents = list(/datum/reagent/drink/milk/cream = 1, /datum/reagent/drink/ice = 2, /datum/reagent/drink/milk = 2) result_amount = 5 +/datum/chemical_reaction/ntella_shake + name = "NTella milkshake" + result = /datum/reagent/drink/milkshake/ntella + required_reagents = list(/datum/reagent/drink/milkshake = 5, /datum/reagent/nutriment/choconutspread = 1) + result_amount = 6 + /datum/chemical_reaction/rewriter name = "Rewriter" result = /datum/reagent/drink/rewriter diff --git a/code/modules/reagents/reagent_containers/borghypo.dm b/code/modules/reagents/reagent_containers/borghypo.dm index f2842eb5a3b58..70237cd96edc1 100644 --- a/code/modules/reagents/reagent_containers/borghypo.dm +++ b/code/modules/reagents/reagent_containers/borghypo.dm @@ -207,7 +207,7 @@ /obj/item/reagent_containers/borghypo/service name = "cyborg drink synthesizer" desc = "A portable drink dispencer." - icon = 'icons/obj/food/drinks.dmi' + icon = 'icons/obj/food/drinks/misc.dmi' icon_state = "shaker" charge_cost = 5 recharge_time = 3 diff --git a/code/modules/reagents/reagent_containers/food/cans.dm b/code/modules/reagents/reagent_containers/food/cans.dm index 44c27b60ef28e..eb6157f2c2e84 100644 --- a/code/modules/reagents/reagent_containers/food/cans.dm +++ b/code/modules/reagents/reagent_containers/food/cans.dm @@ -1,8 +1,10 @@ /obj/item/reagent_containers/food/drinks/cans + icon = 'icons/obj/food/drinks/cans.dmi' volume = 40 //just over one and a half cups amount_per_transfer_from_this = 5 atom_flags = 0 //starts closed matter = list(MATERIAL_ALUMINIUM = 30) + drink_offset_y = 10 //DRINKS @@ -22,6 +24,9 @@ icon_state = "waterbottle" center_of_mass = "x=15;y=8" matter = list(MATERIAL_PLASTIC = 40) + filling_states = "-10;10;25;50;75;80;90;100" + base_name = "bottle" + base_icon = "waterbottle" /obj/item/reagent_containers/food/drinks/cans/waterbottle/Initialize() . = ..() @@ -224,7 +229,7 @@ /obj/item/reagent_containers/food/drinks/cans/cola_diet name = "diet space cola" desc = "Cola... in space! Now with extra self-confidence." - icon_state = "cola-blue" + icon_state = "cola-diet" /obj/item/reagent_containers/food/drinks/cans/cola_diet/Initialize() . = ..() @@ -298,7 +303,7 @@ /obj/item/reagent_containers/food/drinks/cans/vanillacola name = "vanilla cola" desc = "Delicious vanilla cola in a can." - icon_state = "vcola" + icon_state = "v-cola" center_of_mass = "x=16;y=6" /obj/item/reagent_containers/food/drinks/cans/vanillacola/Initialize() @@ -308,7 +313,7 @@ /obj/item/reagent_containers/food/drinks/cans/cherrycola name = "cherry cola" desc = "Delicious cherry cola in a can." - icon_state = "ccola" + icon_state = "ch-cola" center_of_mass = "x=16;y=6" /obj/item/reagent_containers/food/drinks/cans/cherrycola/Initialize() @@ -318,7 +323,7 @@ /obj/item/reagent_containers/food/drinks/cans/orangecola name = "orange cola" desc = "Delicious orange cola in a can." - icon_state = "ocola" + icon_state = "o-cola" center_of_mass = "x=16;y=6" /obj/item/reagent_containers/food/drinks/cans/orangecola/Initialize() @@ -328,7 +333,7 @@ /obj/item/reagent_containers/food/drinks/cans/coffeecola name = "coffee cola" desc = "Delicious coffee cola in a can." - icon_state = "ccola" + icon_state = "c-cola" center_of_mass = "x=16;y=6" /obj/item/reagent_containers/food/drinks/cans/coffeecola/Initialize() diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm index 5644841e628c4..ddc528593aba0 100644 --- a/code/modules/reagents/reagent_containers/food/condiment.dm +++ b/code/modules/reagents/reagent_containers/food/condiment.dm @@ -6,34 +6,25 @@ //Food items that aren't eaten normally and leave an empty container behind. /obj/item/reagent_containers/food/condiment - name = "Condiment Container" + name = "condiment container" desc = "Just your average condiment container." - icon = 'icons/obj/food/food.dmi' - icon_state = "emptycondiment" + icon = 'icons/obj/food/condiment.dmi' + icon_state = "condiment" atom_flags = ATOM_FLAG_OPEN_CONTAINER possible_transfer_amounts = "1;5;10" center_of_mass = "x=16;y=6" volume = 50 var/list/starting_reagents - var/static/list/special_bottles = list( - /datum/reagent/nutriment/ketchup = /obj/item/reagent_containers/food/condiment/ketchup, - /datum/reagent/nutriment/barbecue = /obj/item/reagent_containers/food/condiment/barbecue, - /datum/reagent/capsaicin = /obj/item/reagent_containers/food/condiment/capsaicin, - /datum/reagent/enzyme = /obj/item/reagent_containers/food/condiment/enzyme, - /datum/reagent/nutriment/soysauce = /obj/item/reagent_containers/food/condiment/soysauce, - /datum/reagent/frostoil = /obj/item/reagent_containers/food/condiment/frostoil, - /datum/reagent/sodiumchloride = /obj/item/reagent_containers/food/condiment/small/saltshaker, - /datum/reagent/blackpepper = /obj/item/reagent_containers/food/condiment/small/peppermill, - /datum/reagent/nutriment/cornoil = /obj/item/reagent_containers/food/condiment/cornoil, - /datum/reagent/sugar = /obj/item/reagent_containers/food/condiment/sugar, - /datum/reagent/nutriment/mayo = /obj/item/reagent_containers/food/condiment/mayo, - /datum/reagent/nutriment/vinegar = /obj/item/reagent_containers/food/condiment/vinegar, - /datum/reagent/oliveoil = /obj/item/reagent_containers/food/condiment/small/oliveoil - ) + var/fixed_state = FALSE + +/obj/item/reagent_containers/food/condiment/Initialize() + . = ..() + for(var/R in starting_reagents) + reagents.add_reagent(R, starting_reagents[R]) /obj/item/reagent_containers/food/condiment/attackby(obj/item/W as obj, mob/user as mob) if(istype(W, /obj/item/pen) || istype(W, /obj/item/device/flashlight/pen)) - var/label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN) + var/label = sanitizeSafe(input(user, "Enter a label for \the [name]", "Label", label_text), MAX_NAME_LEN) if (!label) return AddLabel(label, user) @@ -70,110 +61,129 @@ /obj/item/reagent_containers/food/condiment/self_feed_message(mob/user) to_chat(user, SPAN_NOTICE("You swallow some of contents of \the [src].")) -/obj/item/reagent_containers/food/condiment/Initialize() - . = ..() - for(var/R in starting_reagents) - reagents.add_reagent(R, starting_reagents[R]) /obj/item/reagent_containers/food/condiment/on_reagent_change() - var/reagent = reagents.get_master_reagent_type() - if(reagent in special_bottles) - var/obj/item/reagent_containers/food/condiment/special_bottle = special_bottles[reagent] - SetName(initial(special_bottle.name)) - desc = initial(special_bottle.desc) - icon_state = initial(special_bottle.icon_state) - center_of_mass = initial(special_bottle.center_of_mass) + if(fixed_state) + return + + ClearOverlays() + + if(!reagents.total_volume) + name = "condiment bottle" + desc = "An empty condiment bottle." + return + + var/datum/reagent/master = reagents.get_master_reagent() + icon_state = master.condiment_icon_state || initial(icon_state) + name = master.condiment_name || (length(reagents.reagent_list) == 1 ? "[lowertext(master.name)] bottle" : "condiment bottle") + desc = master.condiment_desc || (length(reagents.reagent_list) == 1 ? master.description : "A mixture of various condiments. [master.name] is one of them.") + if(icon_state == "condiment") + var/image/filling = image(icon, "condiment_overlay") + filling.color = reagents.get_color() + AddOverlays(filling) + +/obj/item/reagent_containers/food/condiment/examine(mob/user, distance) + . = ..() + if(distance > 1) + return + if(!reagents || reagents.total_volume == 0) + to_chat(user, SPAN_NOTICE("\The [src] is empty!")) + else if (reagents.total_volume <= volume * 0.25) + to_chat(user, SPAN_NOTICE("\The [src] is almost empty!")) + else if (reagents.total_volume <= volume * 0.66) + to_chat(user, SPAN_NOTICE("\The [src] is half full!")) + else if (reagents.total_volume <= volume * 0.90) + to_chat(user, SPAN_NOTICE("\The [src] is almost full!")) else - SetName(initial(name)) - desc = initial(desc) - center_of_mass = initial(center_of_mass) - if(length(reagents.reagent_list) > 0) - icon_state = "mixedcondiments" - else - icon_state = "emptycondiment" + to_chat(user, SPAN_NOTICE("\The [src] is full!")) + /obj/item/reagent_containers/food/condiment/enzyme - name = "universal enzyme" - desc = "Used in cooking various dishes." - icon_state = "enzyme" starting_reagents = list(/datum/reagent/enzyme = 50) /obj/item/reagent_containers/food/condiment/barbecue - name = "barbecue sauce" - desc = "Barbecue sauce, it's labeled 'sweet and spicy'" - icon_state = "barbecue" starting_reagents = list(/datum/reagent/nutriment/barbecue = 50) /obj/item/reagent_containers/food/condiment/sugar - name = "sugar" - desc = "Cavities in a bottle." starting_reagents = list(/datum/reagent/sugar = 50) /obj/item/reagent_containers/food/condiment/ketchup - name = "ketchup" - desc = "Tomato, but more liquid, stronger, better." - icon_state = "ketchup" starting_reagents = list(/datum/reagent/nutriment/ketchup = 50) /obj/item/reagent_containers/food/condiment/cornoil - name = "corn oil" - desc = "A delicious oil used in cooking. Made from corn." - icon_state = "oliveoil" starting_reagents = list(/datum/reagent/nutriment/cornoil = 50) /obj/item/reagent_containers/food/condiment/vinegar - name = "vinegar" - icon_state = "vinegar" - desc = "As acidic as it gets in the kitchen." starting_reagents = list(/datum/reagent/nutriment/vinegar = 50) /obj/item/reagent_containers/food/condiment/mayo - name = "mayonnaise" - icon_state = "mayo" - desc = "Mayonnaise, used for centuries to make things edible." starting_reagents = list(/datum/reagent/nutriment/mayo = 50) /obj/item/reagent_containers/food/condiment/frostoil - name = "coldsauce" - desc = "Leaves the tongue numb in its passage." - icon_state = "coldsauce" starting_reagents = list(/datum/reagent/frostoil = 50) /obj/item/reagent_containers/food/condiment/capsaicin - name = "hotsauce" - desc = "You can almost TASTE the stomach ulcers now!" - icon_state = "hotsauce" starting_reagents = list(/datum/reagent/capsaicin = 50) +/obj/item/reagent_containers/food/condiment/flour + randpixel = 10 + starting_reagents = list(/datum/reagent/nutriment/flour = 50) + +/obj/item/reagent_containers/food/condiment/mint + starting_reagents = list(/datum/reagent/nutriment/mint = 15) + +/obj/item/reagent_containers/food/condiment/soysauce + starting_reagents = list(/datum/reagent/nutriment/soysauce = 50) + +/obj/item/reagent_containers/food/condiment/oliveoil + starting_reagents = list(/datum/reagent/oliveoil = 50) + +/obj/item/reagent_containers/food/condiment/peanutbutter + starting_reagents = list(/datum/reagent/nutriment/peanutbutter = 50) + +/obj/item/reagent_containers/food/condiment/choconutspread + starting_reagents = list(/datum/reagent/nutriment/choconutspread = 50) + /obj/item/reagent_containers/food/condiment/small possible_transfer_amounts = "1;20" amount_per_transfer_from_this = 1 volume = 20 - -/obj/item/reagent_containers/food/condiment/small/on_reagent_change() - return + fixed_state = TRUE /obj/item/reagent_containers/food/condiment/small/saltshaker name = "salt shaker" desc = "Salt. From space oceans, presumably." - icon_state = "saltshakersmall" + icon_state = "saltshaker" center_of_mass = "x=16;y=9" starting_reagents = list(/datum/reagent/sodiumchloride = 20) /obj/item/reagent_containers/food/condiment/small/peppermill name = "pepper mill" desc = "Often used to flavor food or make people sneeze." - icon_state = "peppermillsmall" + icon_state = "peppermill" center_of_mass = "x=16;y=8" starting_reagents = list(/datum/reagent/blackpepper = 20) /obj/item/reagent_containers/food/condiment/small/sugar name = "sugar" desc = "Sweetness in a bottle." - icon_state = "sugarsmall" + icon_state = "sugarbottle" center_of_mass = "x=17;y=9" starting_reagents = list(/datum/reagent/sugar = 20) + +/obj/item/reagent_containers/food/condiment/salt + name = "big bag of salt" + desc = "A nonsensically large bag of salt. Carefully refined from countless shifts." + icon_state = "salt" + item_state = "flour" + randpixel = 10 + volume = 500 + w_class = ITEM_SIZE_LARGE + starting_reagents = list(/datum/reagent/sodiumchloride = 500) + fixed_state = TRUE + + //MRE condiments and drinks. /obj/item/reagent_containers/food/condiment/small/packet @@ -213,6 +223,18 @@ starting_reagents = list(/datum/reagent/sugar = 10) icon_state = "packet_medium" +/obj/item/reagent_containers/food/condiment/small/packet/peanutbutter + name = "peanut butter packet" + desc = "Contains 10u of peanut butter." + icon_state = "packet_medium" + starting_reagents = list(/datum/reagent/nutriment/peanutbutter = 10) + +/obj/item/reagent_containers/food/condiment/small/packet/choconutspread + name = "NTella packet" + desc = "Contains 10u of NTella." + icon_state = "packet_medium" + starting_reagents = list(/datum/reagent/nutriment/choconutspread = 10) + /obj/item/reagent_containers/food/condiment/small/packet/capsaicin name = "hot sauce packet" desc = "Contains 5u of hot sauce. Enjoy in moderation." @@ -299,55 +321,4 @@ /obj/item/reagent_containers/food/condiment/small/packet/crayon/brown starting_reagents = list(/datum/reagent/crayon_dust/brown = 10) -//End of MRE stuff. - -/obj/item/reagent_containers/food/condiment/flour - name = "flour sack" - desc = "A big bag of flour. Good for baking!" - icon = 'icons/obj/food/food.dmi' - icon_state = "flour" - item_state = "flour" - randpixel = 10 - starting_reagents = list(/datum/reagent/nutriment/flour = 50) - -/obj/item/reagent_containers/food/condiment/flour/on_reagent_change() - return - -/obj/item/reagent_containers/food/condiment/salt - name = "big bag of salt" - desc = "A nonsensically large bag of salt. Carefully refined from countless shifts." - icon = 'icons/obj/food/food.dmi' - icon_state = "salt" - item_state = "flour" - randpixel = 10 - volume = 500 - w_class = ITEM_SIZE_LARGE - starting_reagents = list(/datum/reagent/sodiumchloride = 500) - -/obj/item/reagent_containers/food/condiment/salt/on_reagent_change() - return - -/obj/item/reagent_containers/food/condiment/mint - name = "mint essential oil" - desc = "A small bottle of the essential oil of some kind of mint plant." - icon = 'icons/obj/food/food.dmi' - icon_state = "coldsauce" - starting_reagents = list(/datum/reagent/nutriment/mint = 15) - -/obj/item/reagent_containers/food/condiment/mint/on_reagent_change() - return - -/obj/item/reagent_containers/food/condiment/soysauce - name = "soy sauce" - desc = "A dark, salty, savoury flavoring." - icon_state = "soysauce" - amount_per_transfer_from_this = 1 - volume = 20 - starting_reagents = list(/datum/reagent/nutriment/soysauce = 20) - -/obj/item/reagent_containers/food/condiment/small/oliveoil - name = "olive oil" - desc = "Used in food preparation and flavoring." - icon_state = "oliveoilsmall" - center_of_mass = "x=16;y=8" - starting_reagents = list(/datum/reagent/oliveoil = 20) +//End of MRE stuff. \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 612a6ba24867a..b5abddf1b660d 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -4,7 +4,7 @@ /obj/item/reagent_containers/food/drinks name = "drink" desc = "Yummy!" - icon = 'icons/obj/food/drinks.dmi' + icon = 'icons/obj/food/drinks/misc.dmi' icon_state = null atom_flags = ATOM_FLAG_OPEN_CONTAINER amount_per_transfer_from_this = 5 @@ -12,6 +12,9 @@ var/filling_states // List of percentages full that have icons var/base_name = null // Name to put in front of drinks, i.e. "[base_name] of [contents]" var/base_icon = null // Base icon name for fill states + var/drink_offset_x = 0 + var/drink_offset_y = 0 + var/shaken = FALSE /obj/item/reagent_containers/food/drinks/on_reagent_change() update_icon() @@ -20,14 +23,60 @@ /obj/item/reagent_containers/food/drinks/on_color_transfer_reagent_change() return + /obj/item/reagent_containers/food/drinks/attack_self(mob/user as mob) if(!is_open_container()) + if(user.a_intent == I_HURT) + shaken = TRUE + user.visible_message("\The [user] shakes \the [src]!", "You shake \the [src]!") + playsound(loc,'sound/items/soda_shaking.ogg', rand(10,50), 1) + shake_animation(20) + return + if(shaken) + for(var/datum/reagent/R in reagents.reagent_list) + if("fizz" in R.glass_special) + boom(user) + return open(user) /obj/item/reagent_containers/food/drinks/proc/open(mob/user) playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1) to_chat(user, SPAN_NOTICE("You open \the [src] with an audible pop!")) + +/obj/item/reagent_containers/food/drinks/proc/boom(mob/user as mob) + user.visible_message( + SPAN_DANGER("\The [src] explodes all over \the [user] as they open it!"), + SPAN_DANGER("\The [src] explodes all over you as you open it!") + ) atom_flags |= ATOM_FLAG_OPEN_CONTAINER + make_froth(drink_offset_x, drink_offset_y, 2) + playsound(loc,'sound/items/soda_burst.ogg', rand(20,50), 1) + reagents.splash(user, reagents.total_volume) + shaken = FALSE + + +/obj/item/reagent_containers/food/drinks/proc/make_froth(intensity) + if(!intensity) + return + + if(!reagents.total_volume) + return + + var/intensity_state = null + switch(intensity) + if(1) + intensity_state = "low" + if(2) + intensity_state = "medium" + if(3) + intensity_state = "high" + var/mutable_appearance/froth = mutable_appearance('icons/obj/food/drinks/drink_effects.dmi', "froth_[intensity_state]") + froth.pixel_x = drink_offset_x + froth.pixel_y = drink_offset_y + AddOverlays(froth) + spawn(2 SECONDS) + CutOverlays(froth) + /obj/item/reagent_containers/food/drinks/use_before(mob/M as mob, mob/user as mob) . = FALSE @@ -107,7 +156,7 @@ desc = initial(desc) -//////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// /// Drinks. END //////////////////////////////////////////////////////////////////////////////// @@ -182,7 +231,7 @@ /obj/item/reagent_containers/food/drinks/small_milk_choc name = "small chocolate milk carton" desc = "It's milk! This one is in delicious chocolate flavour." - icon_state = "mini-milk" + icon_state = "mini-milk_choco" item_state = "carton" center_of_mass = "x=16;y=9" volume = 30 @@ -207,6 +256,9 @@ desc = "Careful, cold ice, do not chew." icon_state = "coffee" center_of_mass = "x=15;y=10" + filling_states = "100" + base_name = "cup" + base_icon = "cup" /obj/item/reagent_containers/food/drinks/ice/Initialize() . = ..() @@ -218,6 +270,9 @@ icon_state = "coffee" item_state = "coffee" center_of_mass = "x=15;y=13" + filling_states = "100" + base_name = "cup" + base_icon = "cup" /obj/item/reagent_containers/food/drinks/h_chocolate/Initialize() . = ..() @@ -229,25 +284,38 @@ desc = "Just add 10ml water, self heats! A taste that reminds you of your school years." icon_state = "ramen" center_of_mass = "x=16;y=11" + atom_flags = 0 //starts closed + filling_states = "100" + base_icon = "cup" /obj/item/reagent_containers/food/drinks/dry_ramen/Initialize() . = ..() reagents.add_reagent(/datum/reagent/drink/dry_ramen, 30) +/obj/item/reagent_containers/food/drinks/dry_ramen/on_update_icon() + ClearOverlays() + if(length(reagents.reagent_list) > 0) + if(filling_states && HAS_FLAGS(atom_flags, ATOM_FLAG_OPEN_CONTAINER)) + var/image/filling = image(icon, src, "[base_icon][get_filling_state()]") + filling.color = reagents.get_color() + AddOverlays(filling) + +/obj/item/reagent_containers/food/drinks/dry_ramen/open(mob/user) + playsound(loc,'sound/effects/rip1.ogg', rand(10,50), 1) + to_chat(user, SPAN_NOTICE("You tear open \the [src], breaking the seal.")) + atom_flags |= ATOM_FLAG_OPEN_CONTAINER + icon_state = "ramen_open" + update_icon() /obj/item/reagent_containers/food/drinks/sillycup name = "paper cup" desc = "A paper water cup." - icon_state = "water_cup_e" + icon_state = "water_cup" possible_transfer_amounts = null volume = 10 center_of_mass = "x=16;y=12" - -/obj/item/reagent_containers/food/drinks/sillycup/on_reagent_change() - if(reagents.total_volume) - icon_state = "water_cup" - else - icon_state = "water_cup_e" + filling_states = "100" + base_icon = "water_cup" //////////////////////////pitchers, pots, flasks and cups // @@ -277,6 +345,7 @@ /obj/item/reagent_containers/food/drinks/flask name = "\improper Captain's flask" desc = "A metal flask belonging to the captain." + icon = 'icons/obj/food/drinks/flasks.dmi' icon_state = "flask" volume = 60 center_of_mass = "x=17;y=7" @@ -286,11 +355,6 @@ desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it." icon_state = "shinyflask" -/obj/item/reagent_containers/food/drinks/flask/lithium - name = "lithium flask" - desc = "A flask with a Lithium Atom symbol on it." - icon_state = "lithiumflask" - /obj/item/reagent_containers/food/drinks/flask/detflask name = "\improper Detective's flask" desc = "A metal flask with a leather band and golden badge belonging to the detective." @@ -311,6 +375,48 @@ icon_state = "vacuumflask" volume = 60 center_of_mass = "x=15;y=4" + var/obj/item/reagent_containers/food/drinks/flask/flask_cup/cup = /obj/item/reagent_containers/food/drinks/flask/flask_cup + +/obj/item/reagent_containers/food/drinks/flask/vacuumflask/Initialize() + . = ..() + cup = new cup(src) + atom_flags ^= ATOM_FLAG_OPEN_CONTAINER + +/obj/item/reagent_containers/food/drinks/flask/vacuumflask/attack_self(mob/user) + if(cup) + to_chat(user, SPAN_NOTICE("You remove \the [src]'s cap.")) + user.put_in_hands(cup) + atom_flags |= ATOM_FLAG_OPEN_CONTAINER + cup = null + update_icon() + +/obj/item/reagent_containers/food/drinks/flask/vacuumflask/use_tool(obj/item/attacking_item, mob/user) + if(istype(attacking_item, /obj/item/reagent_containers/food/drinks/flask/flask_cup)) + if(cup) + to_chat(user, SPAN_WARNING("\The [src] already has a cap.")) + return TRUE + if(attacking_item.reagents.total_volume + reagents.total_volume > volume) + to_chat(user, SPAN_WARNING("There's too much fluid in both the cap and \the [src]!")) + return TRUE + to_chat(user, SPAN_NOTICE("You put the cap onto \the [src].")) + user.unEquip(attacking_item, src) + atom_flags ^= ATOM_FLAG_OPEN_CONTAINER + cup = attacking_item + cup.reagents.trans_to_holder(reagents, cup.reagents.total_volume) + update_icon() + return TRUE + return ..() + +/obj/item/reagent_containers/food/drinks/flask/vacuumflask/on_update_icon() + icon_state = cup ? initial(icon_state) : "[initial(icon_state)]-nobrim" + +/obj/item/reagent_containers/food/drinks/flask/flask_cup + name = "vacuum flask cup" + desc = "The cup that appears in your hands after you unscrew the cap of the flask and turn it over. Magic!" + icon_state = "vacuumflask-brim" + volume = 10 + center_of_mass = "x=16;y=6" + //tea and tea accessories /obj/item/reagent_containers/food/drinks/tea @@ -319,7 +425,7 @@ icon_state = "coffee" item_state = "coffee" center_of_mass = "x=16;y=14" - //filling_states = "100" + filling_states = "100" base_name = "cup" base_icon = "cup" @@ -353,7 +459,7 @@ icon_state = "coffee" item_state = "coffee" center_of_mass = "x=16;y=14" - //filling_states = "100" + filling_states = "100" base_name = "cup" base_icon = "cup" diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm index 0ef2ef51f7d88..aed6968f50ec8 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm @@ -1,8 +1,10 @@ /obj/item/reagent_containers/food/drinks/bottle + icon = 'icons/obj/food/drinks/bottles.dmi' amount_per_transfer_from_this = 10 volume = 100 item_state = "broken_beer" force = 5 + drink_offset_y = 15 var/can_shatter = TRUE var/obj/item/reagent_containers/glass/rag/rag var/rag_underlay = "rag" @@ -52,20 +54,28 @@ return prob(chance_table[idx]) -/obj/item/reagent_containers/food/drinks/bottle/proc/smash(newloc, atom/against) +/obj/item/reagent_containers/food/drinks/bottle/proc/smash(newloc, atom/against, break_top) var/obj/item/broken_bottle/B = new (newloc) if (prob(33)) new /obj/item/material/shard (newloc) B.icon_state = icon_state - var/icon/I = new ('icons/obj/food/drinks.dmi', icon_state) - I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1) + + var/icon/I = new ('icons/obj/food/drinks/bottles.dmi', icon_state) + if(break_top) + desc = "A bottle with its neck smashed off." + I.Blend(B.flipped_broken_outline, ICON_OVERLAY, rand(5), 0) + else + I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1) I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) B.icon = I + if (rag && rag.on_fire && isliving(against)) var/mob/living/L = against L.IgniteMob() + playsound(src, "shatter", 70, 1) transfer_fingerprints_to(B) + qdel(src) return B @@ -117,7 +127,7 @@ /obj/item/reagent_containers/food/drinks/bottle/on_update_icon() underlays.Cut() if (rag) - var/underlay_image = image(icon='icons/obj/food/drinks.dmi', icon_state=rag.on_fire? "[rag_underlay]_lit" : rag_underlay) + var/underlay_image = image(icon='icons/obj/food/drinks/drink_effects.dmi', icon_state=rag.on_fire? "[rag_underlay]_lit" : rag_underlay) underlays += underlay_image set_light(rag.light_range, rag.light_power, rag.light_color) else @@ -329,7 +339,7 @@ /obj/item/reagent_containers/food/drinks/bottle/melonliquor name = "Emeraldine Melon Liquor" desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light." - icon_state = "alco-green" + icon_state = "melonliquor" center_of_mass = "x=16;y=6" @@ -341,7 +351,7 @@ /obj/item/reagent_containers/food/drinks/bottle/bluecuracao name = "Miss Blue Curacao" desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic." - icon_state = "alco-blue" + icon_state = "curacaobottle" center_of_mass = "x=16;y=6" @@ -374,42 +384,6 @@ reagents.add_reagent(/datum/reagent/drink/grenadine, 100) -/obj/item/reagent_containers/food/drinks/bottle/cola - name = "\improper Space Cola" - desc = "Cola. in space." - icon_state = "colabottle" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/cola/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/space_cola, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/space_up - name = "\improper Space-Up" - desc = "Tastes like a hull breach in your mouth." - icon_state = "space-up_bottle" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/space_up/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/space_up, 100) - - -/obj/item/reagent_containers/food/drinks/bottle/space_mountain_wind - name = "\improper Space Mountain Wind" - desc = "Blows right through you like a space wind." - icon_state = "space_mountain_wind_bottle" - center_of_mass = "x=16;y=6" - - -/obj/item/reagent_containers/food/drinks/bottle/space_mountain_wind/Initialize() - . = ..() - reagents.add_reagent(/datum/reagent/drink/spacemountainwind, 100) - - /obj/item/reagent_containers/food/drinks/bottle/pwine name = "Warlock's Velvet" desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!" @@ -463,6 +437,8 @@ desc = "The regal drink of celebrities and royalty." icon_state = "champagne" center_of_mass = "x=16;y=4" + atom_flags = 0 + var/sabraged = FALSE /obj/item/reagent_containers/food/drinks/bottle/champagne/Initialize() @@ -470,6 +446,98 @@ reagents.add_reagent(/datum/reagent/ethanol/champagne, 100) +/obj/item/reagent_containers/food/drinks/bottle/champagne/attack_self(mob/user) + if(is_open_container()) + return ..() + user.visible_message( + SPAN_NOTICE("\The [user] begins fiddling with \the [src]'s cork."), + SPAN_NOTICE("You begin fiddling with \the [src]'s cork.") + ) + if(do_after(user, 1 SECOND, src, DO_PUBLIC_UNIQUE)) + return open(user, sabrage = FALSE, froth_severity = pick(1,2)) + +/obj/item/reagent_containers/food/drinks/bottle/champagne/use_tool(obj/item/attacking_item, mob/user) + . = ..() + + if(is_open_container()) + return ..() + + if(!has_edge(attacking_item) && !istype(attacking_item, /obj/item/material/sword)) + return + + if((attacking_item.force < 4)) + USE_FEEDBACK_FAILURE("\The [attacking_item] is not strong enough to open \the [src].") + return TRUE + + playsound(user, 'sound/effects/holster/sheathout.ogg', 25, TRUE) + user.visible_message( + SPAN_NOTICE("\The [user] prepares to swing \the [attacking_item] at \the [src]."), + SPAN_NOTICE("You prepare to swing \the [attacking_item] at \the [src].") + ) + + if (!user.do_skilled(2 SECONDS, SKILL_COOKING, user)) + return TRUE + if(!prob(user.skill_fail_chance(SKILL_COOKING, 80, SKILL_EXPERIENCED))) + return open(user, sabrage = TRUE, froth_severity = 3) + else + var/datum/pronouns/pronouns = user.choose_from_pronouns() + user.visible_message( + SPAN_WARNING("\The [user] fumbles and cuts \the [src] in half, spilling it over [pronouns.self]!"), + SPAN_WARNING("You fumble and cut \the [src] in half, spilling it over yourself!"), + SPAN_NOTICE("You hear spilling.") + ) + if (user.isEquipped(src)) + user.drop_from_inventory(src) + return smash(loc, user, break_top = TRUE) + + +/obj/item/reagent_containers/food/drinks/bottle/champagne/on_update_icon() + . = ..() + if(is_open_container()) + if(sabraged) + icon_state = "[initial(icon_state)]_sabrage" + else + icon_state = "[initial(icon_state)]_popped" + else + icon_state = initial(icon_state) + + +/obj/item/reagent_containers/food/drinks/bottle/champagne/open(mob/user, sabrage, froth_severity) + if(!sabrage) + visible_message( + SPAN_WARNING("The cork flies off of \the [src]!"), + SPAN_NOTICE("You can hear a pop.") + ) + else + sabraged = TRUE + drink_offset_y = 13 + user.visible_message( + SPAN_WARNING("\The [user] cleanly slices off the cork of \the [src]!"), + SPAN_WARNING("You elegantly slice the cork off of \the [src]!"), + SPAN_NOTICE("You can hear a pop.") + ) + playsound(src, 'sound/items/champagne_pop.ogg', 70, TRUE) + atom_flags |= ATOM_FLAG_OPEN_CONTAINER + update_icon() + make_froth(froth_severity) + var/obj/item/trash/cork_to_fire = sabraged ? /obj/item/trash/champagne_cork/sabrage : /obj/item/trash/champagne_cork + var/obj/item/trash/champagne_cork/popped_cork = new cork_to_fire(loc) + if (user.isEquipped(src)) + user.drop_from_inventory(popped_cork) + popped_cork.throw_at_random(include_own_turf = FALSE, maxrange = 4, speed = 4) + + +/obj/item/trash/champagne_cork + name = "champagne cork" + icon = 'icons/obj/food/drinks/bottles.dmi' + icon_state = "champagne_cork" + w_class = ITEM_SIZE_TINY + + +/obj/item/trash/champagne_cork/sabrage + icon_state = "champagne_cork_sabrage" + + /obj/item/reagent_containers/food/drinks/bottle/prosecco name = "2280 Vintage Prosecco." desc = "A delicious prosecco, ideal for long days at work. This one proudly advertises itself as 2280 Vintage. Must have been a special year." @@ -497,7 +565,7 @@ /obj/item/reagent_containers/food/drinks/bottle/jagermeister name = "Kaisermeister Deluxe Jagermeister" desc = "Jagermeister. This drink just demands a party." - icon_state = "herbal" + icon_state = "jagermeister" center_of_mass = "x=16;y=6" @@ -572,7 +640,7 @@ /obj/item/reagent_containers/food/drinks/bottle/premiumwine name = "Uve De Blanc" desc = "You feel pretentious just looking at it." - icon_state = "premiumwine" + icon_state = "whitewinebottle" center_of_mass = "x=16;y=4" @@ -703,6 +771,7 @@ smash_duration = 1 atom_flags = 0 rag_underlay = "rag_small" + drink_offset_y = 13 /obj/item/reagent_containers/food/drinks/bottle/small/beer @@ -798,6 +867,45 @@ reagents.add_reagent(/datum/reagent/ethanol/lager, 50) +/obj/item/reagent_containers/food/drinks/bottle/small/cola + name = "\improper Space Cola" + desc = "Cola. in space." + icon_state = "colabottle" + center_of_mass = "x=16;y=6" + drink_offset_y = 11 + + +/obj/item/reagent_containers/food/drinks/bottle/small/cola/Initialize() + . = ..() + reagents.add_reagent(/datum/reagent/drink/space_cola, 50) + + +/obj/item/reagent_containers/food/drinks/bottle/small/space_up + name = "\improper Space-Up" + desc = "Tastes like a hull breach in your mouth." + icon_state = "space-up_bottle" + center_of_mass = "x=16;y=6" + drink_offset_y = 11 + + +/obj/item/reagent_containers/food/drinks/bottle/small/space_up/Initialize() + . = ..() + reagents.add_reagent(/datum/reagent/drink/space_up, 50) + + +/obj/item/reagent_containers/food/drinks/bottle/small/space_mountain_wind + name = "\improper Space Mountain Wind" + desc = "Blows right through you like a space wind." + icon_state = "space_mountain_wind_bottle" + center_of_mass = "x=16;y=6" + drink_offset_y = 11 + + +/obj/item/reagent_containers/food/drinks/bottle/small/space_mountain_wind/Initialize() + . = ..() + reagents.add_reagent(/datum/reagent/drink/spacemountainwind, 50) + + /obj/item/reagent_containers/food/drinks/bottle/oiljug name = "oil jug" desc = "A plastic jug of engine oil. Not for human consumption." @@ -813,7 +921,7 @@ /obj/item/broken_bottle name = "Broken Bottle" desc = "A bottle with a sharp broken bottom." - icon = 'icons/obj/food/drinks.dmi' + icon = 'icons/obj/food/drinks/bottles.dmi' icon_state = "broken_bottle" force = 9 throwforce = 5 @@ -823,4 +931,5 @@ hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("stabbed", "slashed", "attacked") sharp = TRUE - var/icon/broken_outline = icon('icons/obj/food/drinks.dmi', "broken") + var/icon/broken_outline = icon('icons/obj/food/drinks/drink_effects.dmi', "broken") + var/icon/flipped_broken_outline = icon('icons/obj/food/drinks/drink_effects.dmi', "broken-flipped") diff --git a/code/modules/reagents/reagent_containers/food/drinks/jar.dm b/code/modules/reagents/reagent_containers/food/drinks/jar.dm deleted file mode 100644 index 91f905c0a7f0a..0000000000000 --- a/code/modules/reagents/reagent_containers/food/drinks/jar.dm +++ /dev/null @@ -1,22 +0,0 @@ - - -///jar - -/obj/item/reagent_containers/food/drinks/jar - name = "empty jar" - desc = "A jar. You're not sure what it's supposed to hold." - icon_state = "jar" - item_state = "beaker" - center_of_mass = "x=15;y=8" - unacidable = TRUE - -/obj/item/reagent_containers/food/drinks/jar/on_reagent_change() - if (length(reagents.reagent_list) > 0) - icon_state ="jar_what" - SetName("jar of something") - desc = "You can't really tell what this is." - else - icon_state = initial(icon_state) - SetName(initial(name)) - desc = "A jar. You're not sure what it's supposed to hold." - return diff --git a/code/modules/reagents/reagent_containers/food/shaker.dm b/code/modules/reagents/reagent_containers/food/shaker.dm index 18f5a9b8196dd..b9a00df8e8040 100644 --- a/code/modules/reagents/reagent_containers/food/shaker.dm +++ b/code/modules/reagents/reagent_containers/food/shaker.dm @@ -9,6 +9,10 @@ atom_flags = ATOM_FLAG_OPEN_CONTAINER | ATOM_FLAG_NO_REACT /obj/item/reagent_containers/food/drinks/shaker/attack_self(mob/user as mob) + if(!reagents.total_volume) + return + playsound(loc,'sound/items/soda_shaking.ogg', rand(10,50), 1) + shake_animation(20) if(user.skill_check(SKILL_COOKING, SKILL_MASTER)) user.visible_message(SPAN_CLASS("rose", "\The [user] shakes \the [src] briskly in one hand, with supreme confidence and competence."), SPAN_CLASS("rose", "You shake \the [src] briskly with one hand.")) mix() diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 020eeb51f0512..a6dec4629a79a 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -799,7 +799,7 @@ /obj/item/reagent_containers/food/snacks/pancakesblu name = "blueberry pancakes" desc = "Pancakes with blueberries, delicious." - icon_state = "pancakes" + icon_state = "pancakes_berry" trash = /obj/item/trash/plate center_of_mass = "x=15;y=11" nutriment_desc = list("pancake" = 8) @@ -1731,6 +1731,34 @@ .=..() reagents.add_reagent(/datum/reagent/slimejelly, 5) +/obj/item/reagent_containers/food/snacks/pbtoast + name = "peanut butter toast" + desc = "A slice of bread covered with peanut butter." + icon_state = "pbtoast" + filling_color = "#b572ab" + center_of_mass = "x=16;y=8" + nutriment_desc = list("toasted bread" = 2) + nutriment_amt = 1 + bitesize = 3 + +/obj/item/reagent_containers/food/snacks/pbtoast/Initialize() + .=..() + reagents.add_reagent(/datum/reagent/nutriment/peanutbutter, 5) + +/obj/item/reagent_containers/food/snacks/ntella_bread + name = "NTella bread slice" + desc = "A slice of bread covered with delicious chocolate-nut spread." + icon_state = "chocobread" + filling_color = "#4b270f" + center_of_mass = "x=16;y=8" + nutriment_desc = list("bread" = 2) + nutriment_amt = 1 + bitesize = 3 + +/obj/item/reagent_containers/food/snacks/ntella_bread/Initialize() + .=..() + reagents.add_reagent(/datum/reagent/nutriment/choconutspread, 5) + /obj/item/reagent_containers/food/snacks/jellyburger name = "jelly burger" desc = "Culinary delight..?" @@ -1987,6 +2015,31 @@ .=..() reagents.add_reagent(/datum/reagent/nutriment/cherryjelly, 5) +/obj/item/reagent_containers/food/snacks/pbjsandwich + name = "pbj sandwich" + desc = "A staple classic lunch of gooey jelly and peanut butter." + icon_state = "pbjsandwich" + trash = /obj/item/trash/plate + filling_color = "#bb6a54" + center_of_mass = "x=16;y=8" + nutriment_desc = list("bread" = 2) + nutriment_amt = 2 + bitesize = 3 + +/obj/item/reagent_containers/food/snacks/pbjsandwich/Initialize() + .=..() + reagents.add_reagent(/datum/reagent/nutriment/peanutbutter, 5) + +/obj/item/reagent_containers/food/snacks/pbjsandwich/slime +/obj/item/reagent_containers/food/snacks/pbjsandwich/slime/Initialize() + .=..() + reagents.add_reagent(/datum/reagent/slimejelly, 5) + +/obj/item/reagent_containers/food/snacks/pbjsandwich/cherry +/obj/item/reagent_containers/food/snacks/pbjsandwich/cherry/Initialize() + .=..() + reagents.add_reagent(/datum/reagent/nutriment/cherryjelly, 5) + /obj/item/reagent_containers/food/snacks/boiledslimecore name = "boiled slime core" desc = "A boiled red thing." @@ -2199,7 +2252,7 @@ filled = TRUE /obj/item/reagent_containers/food/snacks/sliceable/bananabread - name = "banana-nut bread" + name = "banana bread" desc = "A heavenly and filling treat." icon_state = "bananabread" slice_path = /obj/item/reagent_containers/food/snacks/slice/bananabread @@ -2214,7 +2267,7 @@ reagents.add_reagent(/datum/reagent/drink/juice/banana, 20) /obj/item/reagent_containers/food/snacks/slice/bananabread - name = "banana-nut bread slice" + name = "banana bread slice" desc = "A slice of delicious banana bread." icon_state = "bananabreadslice" filling_color = "#ede5ad" @@ -2334,6 +2387,34 @@ /obj/item/reagent_containers/food/snacks/slice/cheesecake/filled filled = TRUE +/obj/item/reagent_containers/food/snacks/sliceable/ntella_cheesecake + name = "NTella cheesecake" + desc = "An elaborate layered cheesecake made with chocolate hazelnut spread. You gain calories just by looking at it for too long." + icon_state = "NTellacheesecake" + slice_path = /obj/item/reagent_containers/food/snacks/slice/ntella_cheesecake + slices_num = 5 + filling_color = "#331c03" + center_of_mass = "x=16;y=10" + nutriment_desc = list("hazelnut chocolate" = 15, "creamy cheese" = 10, "crunchy cookie base" = 5) + nutriment_amt = 20 + bitesize = 2 +/obj/item/reagent_containers/food/snacks/sliceable/ntella_cheesecake/Initialize() + .=..() + reagents.add_reagent(/datum/reagent/nutriment/choconutspread, 15) + +/obj/item/reagent_containers/food/snacks/slice/ntella_cheesecake + name = "NTella cheesecake slice" + desc = "A slice of cake marrying the chocolate taste of NTella with the creamy smoothness of cheesecake, all on a cookie crumble base." + icon_state = "NTellacheesecake_slice" + trash = /obj/item/trash/plate + filling_color = "#331c03" + bitesize = 2 + center_of_mass = "x=16;y=14" + whole_path = /obj/item/reagent_containers/food/snacks/sliceable/ntella_cheesecake + +/obj/item/reagent_containers/food/snacks/slice/ntella_cheesecake/filled + filled = TRUE + /obj/item/reagent_containers/food/snacks/sliceable/plaincake name = "vanilla cake" desc = "A plain cake, not a lie." @@ -2755,7 +2836,7 @@ /obj/item/pizzabox name = "pizza box" desc = "A box suited for pizzas." - icon = 'icons/obj/food/food.dmi' + icon = 'icons/obj/food/food_storage.dmi' icon_state = "pizzabox1" var/open = 0 // Is the box open? @@ -3460,9 +3541,10 @@ trash = /obj/item/trash/pistachios filling_color = "#825d26" center_of_mass = "x=15;y=9" - nutriment_desc = list("nuts" = 1) - nutriment_amt = 3 bitesize = 0.5 +/obj/item/reagent_containers/food/snacks/pistachios/Initialize() + .=..() + reagents.add_reagent(/datum/reagent/nutriment/almondmeal, 3) /obj/item/reagent_containers/food/snacks/semki name = "semki" @@ -4068,10 +4150,15 @@ trash = /obj/item/trash/saturno filling_color = "#dca319" center_of_mass = "x=15;y=9" - nutriment_desc = list("salt" = 4, "peanut" = 2, "wood?" = 1) - nutriment_amt = 5 + nutriment_desc = list("salt" = 4, "wood?" = 1) + nutriment_amt = 3 bitesize = 2 +/obj/item/reagent_containers/food/snacks/saturn/Initialize() + .=..() + reagents.add_reagent(/datum/reagent/nutriment/groundpeanuts, 3) + + /obj/item/reagent_containers/food/snacks/jupiter name = "jove gello" icon_state = "jupiter" @@ -4156,12 +4243,13 @@ icon_state = "weebonuts" trash = /obj/item/trash/weebonuts desc = "A bag of Red Alert! brand spicy nuts. Goes well with your beer!" - nutriment_desc = list("nuts" = 4, "spicy!" = 1) - nutriment_amt = 5 + nutriment_desc = list("spicy!" = 1) + nutriment_amt = 2 bitesize = 2 /obj/item/reagent_containers/food/snacks/weebonuts/Initialize() .=..() reagents.add_reagent(/datum/reagent/capsaicin = 1) + reagents.add_reagent(/datum/reagent/nutriment/groundpeanuts, 4) /obj/item/reagent_containers/food/snacks/chocobanana name = "choco banang" diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index df85553bac931..4e67a38319489 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -263,7 +263,7 @@ /obj/item/reagent_containers/glass/bottle/adminordrazine name = "Adminordrazine Bottle" desc = "A small bottle. Contains the liquid essence of the gods." - icon = 'icons/obj/food/drinks.dmi' + icon = 'icons/obj/food/drinks/bottles.dmi' icon_state = "holyflask" diff --git a/icons/obj/crafting_icons.dmi b/icons/obj/crafting_icons.dmi index 09747aff34516103ce8cb0647bf05005879a3ae6..a07b567af262b4b124bc699fc66f6559033184cf 100644 GIT binary patch delta 4904 zcmYkAc{J2-`^P_Hn6ZwLvM*yPvV_Q%W$a2>N+iXE%9dS>Wj=#MlqHD@GnSGFDO;8q zOH%gAmT#8q`#Q!9W1hah^Lx&DUVq><`n7&biLHwwtKDsGKHyGR5|Sy&0KIzIxpy zF(pk`UmtDc*mBaau%!C?(5Sn-Mqp^XkIYHt-fH@JO<6BK$ukC#_4V~=9^oM_=^TV) zR#uiFw&hhx4FCXLJp*fNYwtf8L7+?k$k>5&vkJUPI{%@a(o+Au*| ztEVPB3We={3$ z_DDRDd9Of{)~`D7XtSu$@TBupO24ss+E#&{-p_})~qY_Kv%GvcD zfoWo`Bk6(fu{%t;R-?&<+Qh>R)q%&Gd26|eMeV>_Le#R@!t(Ovt)?cgY6#IF_gR^V zdHtin_`i|%=z;A>-CO-NI2<;7Ljh`gozx1vHBeT2XjkIasX9dzo%V)` zG14H%5qMvayw=>@us;4S5wIOLR7E}Zx1X3Gbinh^@lo0`HrW5Vu7j#nQPjgk&Ap{9yv!zx!Vs&~i;1<2iK{P9E>4VgwCAex#O(8yiO8LISI z;-!l3l9t#fgBtF7FCf|+NKwpc(BLqN@D{$(0-lkD6!c4GGru_`-@%6_hyot6><%Ml zZfJ=EDD?RwTW1Z*3&wgM_^Q8 zwZmPC$Zj;L>%?Sf(D^t+JyXn^E;0324jeySyU&i=dKCpNZuQEIcvV>*IYO&Aa6@;4 zQkXLo56j~hbeOk@{BN{~*y1+XZ=uLu&`I0@k@3TVk>tJ`j@x}^3!#9$;vU2>a6uz_{O8^ z-~^!FExo5h_l}R3=lc5=hGBNsZLs#OiSr}zb6dwB?}7}~I{-n(ow zFC(y z;!a!q@>aL0l&C@w6hThj1bKr6SoZ+$SqnZB-#a-?-~2H(wJSbB)JEI77zmq!B#klzPLq5Vv#47_8FOPKiG#!u1qXr>9+=wsy2y8O$r%efqq z2M6*YLx<^+7UmthYqLDIOLA92XU7u4-D0vnm-@RN_h&O9pJOfH;1yEU)U3)%18j^OC8CT{OU5(Praamm;EztWX; z6Vz1y2hZa(ZJA$sb;AmW6>}tu+rRafu&%?Y_O`)ud)MDo3H}MLZ!Akxo(aCPSy*^2 zuQY$Z(b-V$E&oG%KTr8DAI+Jt`XmrJ39dIsj~XqC-0!=!9mC1_;ZvJ?jOzY_7A}@H7^t7%1Tgo=$8f31ed5)U0IVr{q%4 zvlUCn#-7ao5aob`_(p@C8jY|nch;(<%7&YHtTD;HXY|%?^7IY&f5@lnJj>Y629M}| zN#MbRhdgzSn|<%^R1P=JTPsvDzkWS9Y(Ly%gX8$>%1U*sw`l)`7lILFbDqsAj+mBu5%+qU-jq_}Q zV=|ndZ!f7R97DR~qx>R8B{`>MAtOimA|=p|=sIM(I49SdclYW2UL zj8xSYDks3#|B2CJ4^gPRp7Y|(6JGW=Hjx*Y7&55s(fT#e8<;Z`?MQP+?-5wSB_@%) zgMGpEmaxgIiqGE8L_?-u=~frR(Q=k05VOwvmt{kbMn#Lgfwu$AxZd9!>U=_3+?dXb znbI4VAQUefu?gsVEdVtxKa18E<;sZFmf4SzwikXpDZsbL7I0O>UF`X1vU$m~D#i*?5RQ#N~@R0Pmy)o6zgovin!` z#n-j_JLrRFuYQr~kD*gMt<RR8KA%p}V)+TO9LCQ4HyfKQs>|4yO|qUeTY^Y5ksv*qkN{R2S~hAQPQ5 z4du)hBCFg>FbhJR=Vlj2Ij8d;166|6DlHJreruepJNGT5Ey2cfm_0 zJj?sE$n3t!alRGlt}wKkT*xm)q_xV*&{yMtWv>E*jIW75hb7@x_yv~8J5m8?T^W1p za3uKsSP{ab=7PSlj!$v4Dcswq!X+jURT(|dQ_FL|iuo}$0WtW?MgRD&xUGNT^TbKK z$e*1fBN0CCw`F|ibtIX~yUh$*DOL<43P2CCu;Ej(b27YAF+w;!kA3xiLkoR=YDVdP4R`Kg8# zmayv{5`_EV$isV2L?#ecQU*1EIC!Cr->&9^kib;~TvRhB?r?AObl(`bn-d&>pU|ri zL}nQ7rnoQdYNn!Y+R#1aSu#qB8UT4Hkj>Apx7_M+7E6U2 z?B!2D4%QMBxuy=avWG=C5<7qgwUT^78|-r+>j7dDpOHDSPi}2xP*s!;4&jP&Z7d?) z%iQ7N&1D)W^4Kgbp-XyP2X`O4GFcKIpHU3R2?|(0WYqwlO^85?^ni%?-)AWX3x7`9 zvGX79ET(EC)*kC4GJ|s<=OtKs*^VxSe>Zx|Jo@__3#3!UfG%%`nq^{29GYn`CB3;N z(AP*7pnXm?h`9DuMS1X>54Sd7f5r6b7Dq2|#wIfSd*Gzn03vA5Y$WFKR3?mkv+?>d z*VW)(ZSi2LK5Q@Bli5Bm_$(S%|BaowqI)5i(qJ&oTKX8$mq)?Ije9+-0cYQ357IK z+Y^rAu~}IAMr!v7m4$FonS1T(OmJs~ireU8ZpDF&+B+3`ly&B2+x%7N&qjChcHchi`m;_3U#vQS zh@IEG$?fawdjx7gUs$v~@^i2+voU)50iF~XH^5|Jn+dwJ7(oVj)`d3yBsW7&Gr9|X z032a#GxpT4 zi6#7)WGhUYUrG!jI;`1x&i3+OX@k?aMSuWtYS^eoi}#zyDG%9Nuiu}r+jFH>6|L?g zKnTXf2Oqbzyex7UA>?rEAmTwTCo^@&egPC%ay5n=xPjqrkwFmw6{F;n+NLwVmO|JC_JOL`i2wYxHUtWLQv8Cd#Jn^X-Jg_=U z8vV1PB7d0LBt5sB>g4KAqwoJILzW$CQz%0fB$cG8%D;UT5gPq{SVJMi}e5i delta 4829 zcmYkAc{J4R`^P^sgOO#JWXrxU$sV%J&?9T16lEDDBr+m9^BE+RHI+oxlBJTQ@>phM zmm0DaJ!Wj#8)GnIFn*rroZmU$*FX2UuIqiSKkoaS>%6af@p#GcY(?cfCkGcRB9Z9k z;gy=1ZER-NriSuS)yL!UfeLC*pFTY(`TP6loH5YL2Y?giv5k$5d3kxBf`a>fk5JKV z005*|rR@Vi5g#83{7!pf;HL*rN~hPKoant#Q1{XTlDiD)=lJgBPOEQ%K81kCZU3@x zi7H(6O!JYvAWkL*+kU@hZ})dlM6Uk#x}vuQK5~PjP_7S8cy3nm-g}6Lk39A!N;W73 zSgcjft=$-eN)IQhmW`-S9)~!WUMKRblbG?;uQb2kQuVHWx$y+Wg8aR&1@Q!O9JSyh z{i||L>fO6t=T4nE^}~!?lz+Yul!y?uw9+4Uf^(&on~DUc9`|$noM6;9#q5?JJjZCd z+R3xcH4m}-Cz?|(bNy~uD*LdM+u)C3#W4Im0Wvf-G{JHJ)Evx;8&pXW&JctghJT|U zzmxDpYK~occEdWAEf)Et=TvjP*nmb^+RCG2tDT_(-^(T~-={_Ima}EG!AgJrtcGkSA(W~=E+c`N(uQEjjQlnoYTz6xn zdUTXd$`i*=k1KLHZQe?-O}7(2bvI4)o?srm0@s6w!qEoa;epGXqOTtR1ylwGVnw?Q ztFeLiXJBK`@vJM!xys<2Tqbg0czD?D9i+y!ww1C=w_q=gysqKUvY6|hk$=pMO*-Q( zF?qUelWvfkVzi!-aSnFzd*>r$4&;b7g1K`&ARrJ^e_EEn`7wy5(?oX z+5%*JkGg&Qq4la5;?ZB0g0hGA-fY)~=mn%&JHQleLtZp|dH@!1xaNon!ok>B`L+=e zhn8uk2^~Z8`>r4 zK7UJ8{MF&pD9bX$SLe#SB|`SI{d=1={6MSo1H~Fc;mn$0`{WZIJ>NiIQP|Tqpstm> zNXeJ$&bFV8GU%YQ?>nfG&*=oahCF5kxMi z%Ybb6BeSQTcOkDo(eUSxQ2rtoj@vz2g2tgFU@-cWM= z@hcP>)kZ1z3PVAIGB@F(-jIG=P_zLVbwz7raIg-HJANJcP+v`B?~0pXM#uAf>rVJ7 z`(~?iEdLF6k+-*v)gl$Ssfh)dTr-P2d_&*PlGp{F6!NtJVeDdXS|rV6VboE>rb1!k z12ojt!uZke2A}96P7MK!$aggv8GGxYK^Juqs}QEk-|e>oRxfAaH1hQye77Cq@tC^Z z&{T5_l+KC_4~Kux@{zqcc@h0bogzV*J}IId$3f6|z87~y1HGxkk>WUgOmVQKsHmvn z5BK%1cQ+Kw4NBR+{fc1!{6k$>TKc=Pz#ngex;V1v$@zLwe+&>6u>Rqba6hutr4>H7 zxX33R78(gTcn?U-oR*JI74F=Hyw-PFDk48FH8Z!Y)~$fU#2s*K zhmUygjJnb=hUa@wYpv34&o~_wK-1x6Z^z54EQLO##8Ha=LhPHVUtvd`T74~)Hnh}; zf;KZ7pWm1K*~l&P9sf|m-YBrL|B}cW!X{mIBCr&O6JthYO2fqX|A&mrmgAV{SGA1b zjhN(ZpT}& zuk-!sePdH$(2z)O2+WoGe4M-3uEJCJh+kN4H}uN-gG~GWWBma#G8sJ43-2DNXe~{j z+@!0zTlzB*MW%PDi&J8h>GKZBtrr+>mO>zmW)8%z3%t(xY8SA zf>6#i(ur}Q5U_$>7KDG)l?k0g!`P|i2-sOf1 zp!VBwQ|M-jFM6Mdf1k1^&WZ7h{j0)IVw^^m$vy^nRhRtQN_8-B*t=8({cL~a;lv~{ z#X-v!;IbkXH94K$ll&#qV|zr^pwyzREKf+R1`%7phx)iD(QN(2>nsO)gnD!S7AQ+90E)1)4YM`lF;FhdoKY zWJ-C@hA}<>zL?Mn=ANx#7M__`ADaxtFENf%{w5@3a&{+WBEY?0@$-mge9iecb1P^} zPP0AQcie{shsDSVZ86TlwD-le?>fMC_m2>_fRs7Y(b%N~6AOhk0${V#L0cjC$}=LgR|vM1W*N5+ z&}7Tr6f^4b^DShG@QG{bXq7bIF!ojyBDW#(+04q;r$e&-Ned||{p>st1nRM(EaB#A zvoE<-y!oAL46T_%(;sei;0s@a0mKtYtIJUbOmy1&CtQ#SSc7N(ymCUHK}m zz2eMSJ|<#J&^RQyAM&yVSl_UePBam`f4XJAMehs>*J=>3AMUYx)f_B7TLJn6=z!bG z`LI*2xTxz+OTds95D=r*2YD#-Q8EN%qZV7OJ2tm>-1PIe=mrKsM{k>G_jIfby!{TT zXz75oaxP$<;Fle?oms{5KUmTJjy#ElE!MKVIJUWnRbPA45p5kjW(C4Ki_R9K7^AnO zI}#p0e(dHh(TA<)3mGASCh-i8s;G~NH9>Gq1|kWK@OTk{NAW>V;`e2rzkYpOsr#zv2^Fjm7h9xL_&tTXa(*f{$gL zI1H(l242t5J}q-NRS`&zSA2DYyWTh{Z&ZjzP_MPsM`p!f+QB{?Tl%+N)NP{_)oCNy ze4(eSN^39w6SOdloQrJ~qn3_k@xMF78}1#VU?f|Jv{NzVp5n5EAHH89E%&Tp$h-{p zq9G4UG@^{7sJ|!FEyuy}?hFb0n_9((O%Oc{q%zb<7LIE9wB8p_%x=!5nH#`*^UnuboilgL03Ms|@@a(Swjwyc(}cN1qRWDJ*%UO-<0cQ2~dYRf*5 zIdPAY;fz55xM9;n>7h~I+bv5&+WFU*6t-jG1_8&d==k=k;N;UGrTfLYh7UcMXH* z#X?MegB-hCH2kw<(m$ZFLB!$$gK%C4J3(_|@|0Dv0J}PgXFA9!1}sny*W0 z>gtO416`4nnCKL8^2FWZ6I=%tgd?zHUk5rpeQ=P6&+pYqh;o>huJyv3id?fF+Y1aMQ|3(H1WowC8}HTfr}7io?Gj8=lgOO) z=y!g{TxcgiXelJStyef58L_22(|g!!za-zQbBw2hYqnQdn&B%gj;$4+JtSOP>da9g zcqOvzX*O?RQP~r(4(a3SN1zEM?|+oPkdl+lXvTw6`g!ox)p~522-+#rl2X;z-R7c^j#8g9A(Gm9(r7yW zv7eUnyi-z0cMjp;Rwkmh0pkZ4X3l?k0kfEi0Deg zTsFZl9aK1ZBmR7k2@+}=KWd@LnA?$I+Np=n!5CopdLV|eis>4f!TPLw%fE#@W}oB{ z1KN*>7enr`8naWv;Bj*~h6)_prqQFfWEmN!1f*jYrmUrLvu#-1@&tMNjiHwPb}T{# zq3j^(AX#)q()N|sDBc4Kqu#~RBzaj2O4SnV~NPU;dtE;10}jmi=*;_xz~j}uhA zb{I9meSHx6H-}Gac5P-H&o}A1(Y27MJD6FqkQ=BxhLVK^!Xt!oMHb$lE9oTYaL46e zMHWPCTC0fr8_Ae1t1o+Ng?r!NMe-N~OGzRFVe)qry#Fu@QHRu*=6%;MK8~amajG&e zW#1%$Nr%&5huUsl=Jo$p80|C7AGINYNA#=lYdgoqd$tv?DV*a#6?nh=ypL=ZzKq@z zTELU=(d!rSvuK-?1^gF$=$9`ReWW?!o}Uf#tc?i757AS?u3sQN(3Mq9g-PxOA)c7v zwpK1(C4SNgrp=9x!A8iUkn2S8R!9UQL>?rHNk>Sk*0)Mmvc2Lpn$K)w-cLO(0!>lnE^rO|sc?>we3JB*8f~tc6=l;IzUyF2LlE|v%>{g8f4<3K1B%S5AvyT7B#+6L+ ztqqfx2Y|@EmSFz3c8=kJ_zQ8b&ch1V>kUfG`73wioXECoCG+}Gjz2svdqgc!>)}fp q0CbF;rv)7)|F?wyyN4s$0yJqwDbv>4iG!~wz}D*QUvDhE6aNqUcril& diff --git a/icons/obj/food/condiment.dmi b/icons/obj/food/condiment.dmi new file mode 100644 index 0000000000000000000000000000000000000000..f23c40e51e83aa93f08ad231096d8fd5b0361dce GIT binary patch literal 10915 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 diff --git a/icons/obj/food/drinks/bottles.dmi b/icons/obj/food/drinks/bottles.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9fae04141aa4a0fa8e28d260714b664c94f7ad72 GIT binary patch literal 22151 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 delta 12720 zcmW++1yodB7kzY>GzdsY*GD%gNRcSwtr18-=M?k;H&knWI1q(!==B!_PP=g)#Q zv)*Fno_p?zz4y6A_BXcQ0+7JO^Y#I0m4&#olrwavd~((z{rR^t9I2`t*nQNRBwnGe zLLbEcwq+T6i0EXgFQx5AX)L*ArXGavv(io=BY&nbt7wpk;7UoEe}`RBcv-BXvT!#_ zrv+-|GHGR~B}&;}x0_aVBuF&6WZW%Z`{%B_zaEOAmBdC5qQ`SDTLDmm+(dg4Ur^J6 zsJ<=hIk&V--7|Zpk1lgpEBHb5nkKr80nE5N59k0d3}Fb!$P5ZN2N2@rrHk`{=rM1Y zv_4(1zQ2@_ARW^cQJSKRLd20@hzHJjA>9ieR!}6M3$#UA`gI=fUF@X5KOTOJ6CwVY zY)ye{`={tBbJG;-v@UY7ODs(&Vq7Us9QUE$coLmr}5|XRB=9qAIuU zD@KApMAFG>h~+7_1!lS;%H6Dc+S(-6HSa73Vwy>YpCi!>DfJOc(Y>QV@1X>J*ut;? z$eIUvN-CRnv+1r7ypD>B=v-QAYK|856_&*B=m=Yf28k%V}F z40Gy>9KYmbn3I!}va0GjwZEeyXGTWGS1M`a;<`E#z}5Z&ISu6v2d$01Q-*)f2OtZbm;S9@IH(nS=jN{rFmUBufBqn70@q696tnVWJxa!0!NPAE4KK8b7|pGt;TeVhou*Hz5Gbme%zUi-sJoZ(Mn|#&TmBy>Y0IbS#G(c&_YQ ze+0a_be2sd8uZ!G`~w=_in%Gt+Pc$7!P1OAOutE!2Bm%s4@VT(Z`^aTZe;{nO^=Yn z-_jhLDpl`Q#?xhpPxA^nDjg&2R=dLP&RX>pUR)Gp!o6@_daYJnttyjN-Yip_e3Xvy zx9h(}`K6;9TKKgSiC>91Dx5<6j0KP}TrF7KP`)5a2?huwIzf87any8XT$$OOP+OCb zV!0!r><~*iUox|f<=0D?m#<8Kn~jVM-EAhZdjL}}O>c^x&Dxi8`9D01s1p z7#9mt!9;kp*B2x}%SkL|dwIRM!tjng@QAZF{?gag88hwDB{S}_^I6Mp>X$2Y(p$G5 z6e}QW!oY|LyFb*KvjQ$wy#@#3%0EVk7?ZnR!dwq{lt8;>j)8u0VU*ecE{)y0 zv&Pt@jl&-{$SsbHpblqG%Jfb|T%hBEiXD;>rT)xNu&F zaP;x)tv}QeFAY~#5w>fUW}~j<pF$bc9h(!MP|4a$}DlOL8Y(kag>D&>kO!UZjFpV!`{WSOyp)9o}UufGJg*in087T?-&}Trw zMB*3t-KD%t5=h=UqIdkx-Z>|ET#9<$N4?wPO)G;6JY%EqUi;|+FI;Hq|A4I@cHr$m zOepcO>;v0;UEo+sE9B9ZzN+>6*8~8)*Lp|=XcQzs6+L@($ZXb=T~Pgbz+V~-4b78M z-7#afN-CQtg-CL3R!>so0bzJGH=N1KxJkP@P?Vq=7{-d@dVtvQHRvwe;C&jL73Kv&gD zZ%UNuTU*}DS9NV|Su1pf=@Xt0{a#99b~zmw;dI@g^>>E;D{O6+i3UZts>s*c8* z94?keA0A4FvVpD6D1RxE47}7Y%OIlJ+aii(4=Vy6hhFP$bp>%!kQ(Qqz(gpNO3W@1 zO^%a|mj%zp`^_%V`AM-=^TEs)H%m-Zbyu?GHTbDTY~{7) z!>P%np>ga-5GI*0S%oy3g;Kd0<2LO#w|VZ@9>M&tQ79Ye9__eTHMD z`~3MFvsN7%V;RRQbYwT#FgOPCE0~YyWL6wb;o21r0Kd>BP5I+)+dU9wI>bdNrUz3% z@hbZfvRnlKrer1bVxy=)TDwK0n)SAo3@bexi$|0taOWH0tB?DjQ`^Iq`Qo<|RTxVF zuFC23==1%G7q34MNQoo{X?^PG_PZo`CV1rB$u1t^&6!ta5cgDT-jIs$*A0d~Ves!Q z#kxjzB0>?oiRuGP%x@18VPRPF3!nd!@W7gILkU+?4}BU$5p~P<*>)u7mw^`U`;ixX zBd%R6l35SPBcb&J%ZiGtb%ejN%jJHwkpMC}N#7mjVq&y`)l|xsU$MX1TJQPxun>kw zA)LxFm!;buzNmPKCW?vARS2z)O=6{!AoEeYCiN6VO*F<9N;IWL0}%_iPA@dR%^hfeGHqHpv-61ZZ1+YJ6MOn%(-wbVm}*A<=uTjMhpONUyru;Z#_!8Tm$Q z8B?Km8UWtUV6~kc4*>9Mx1Mmdp@t_D@xjG8LcMo?{Fpyus>_7Z1l%^nD-cwMFi7Db zec6*4WE-@K{Lk?QBaskYo_ZYN3K7wBiQ2<~i>m3PcRcm`RI6^pJkFH+X zp31cO=eW^tFI$QL<>V+RYxW0M9=@#QIEv@xK#BLQX14`6i%%~YkJxl?mfPhbiyV9O za_KKQK~rR6;AMzk=$ARN=Y+0$d*#E1g@lEPUDS5=u4J!6TQXi2Wdt>@YtipC^mP$A=Z^oHLQfVW+wP=+GmEA0NQR6jOw$NZ;Za6cz3}q7OnNd~go_Dp z9X@_TEuXrJhbuetU~D(M7`>az9k2{ANzIGV&uM|-ugaJ_1TyRD1lB9Ax)phTukPB3 zj*N^btEBLC+NESAZcKM_Up$Ssq5k(&HJmJ3jgEVQ;KwG1hc5l3k zL<{nx6c-i6tJTZsoXAoD9#4G-G<%_@E+Yz}agy)-cR%%9duicQ)~vojdrF{>FgbC$ zx{x^oJ}&Oy-O1tTsxKLN!gn+gvF?Frg;hsBz@f}+;UL>_*Akhs0QJv=H(-o=GS z57`TTL|?DKiG#hl$4}v?M`Zo=s+;pj4cFx%?Ppeg@BXbHdcA?oPbE|(Sd>+pFtIm!nvBP zYPX(5ptu7mddmbX#Y!#0Lr1asnYNa#)q`#tfe|I--*TUpMv*1qlaR}k@*z0dWcCW_ z@V$P6WBTxs){iRz6y&Tc_GIk%_;}uQb!AOWMOzl(NkaM($ZHbraXG{A=?Wwm8#}tB z;~KkV-=$!vFsSZMXELb9qUUBgv!I%qR0w6LumF|w1E{P-6a$l_E+-Q>-V^O!bL*O) zf6JPz`ZMi66e1!b5zS44KD?RGA()MQ>Qqil3 z`T2PSjO;V!u!hSI+u=I(jq}c^8pugSe)udPYW3i;G6(8xai#0}a(Uba;V$@A5Y_ zvYb$LY6~NdG`G-1uuvGE#2Y;_P<^BeQ!SEJSI5OgM=?b&2Rdreff%7PbN{C^)U3=@ z*;|_EPj`2jED$WnP-ps<)p zLw2BB7pv2uf)Zg>ukn7;JnKI-?Z`d`Y6=Q~^gn)n;&h(uf$DZpAtRCDBTn-3=N&{OL7`EsO#$J^a{(kSd0E=;eXPxKX|$~ zI3lii;ght6Y3xdeYbuQ@_m=|`4=-fMDiFIs5`;=Ex^&%9_%1&Mp-=*8aFy`^oapnk zgZ13pTyTFbCMaUAF5BJlZ*!yf!eg!h^MmkAw)?c1ZF@e`by@e^jq(OrjINBScrQ%)f$@Y-nO z(yx0|OQRxr?#W3>gw?yt#it8ZMAW%`2Lv%$m-b)%K+GEh@jM5gD2@@uKh%F6`pcEX zjFvChB;95S2V~2qe=x6WlWjt44*C1dP}PVihLT?jt^MU+0Dx=Csr-js9LQn=8lIve zo5vMXg)+@iFWKx;LDBo%xoJX6Gxi4}q^?Mz-y5yDzZvU>HA0r^C7b*_{6wi;m@e z@%w(;%$Y>PlPCMd;QLA;-0vjl4W@19?^LT&x(!e0%=TCJVU0sXwzYxl-o!dX%@F|P+@4}c-5UinzMs>?XbK4G{hi5o3m2FIx^9m;W1)5-Oa1tFy8OByyaTV? zfa3^Q%=-5B_ORndYa~=rYucVY9meS4pd-JAk1Bcp@$fain4OtgpyXn3;sMYhIwb& zWW;p^0Sdg-RnqtXfS*t~%RhIqkzwEP9$=-sGzY_Ta%hp^bVEs>b<5iytQRg=59ewz z_GYTK)ii*A{ag2|{`b`E#ufio$D`%;-h~sajj31s{QQaD;{G-XeMOrc_VKZ7EAs1j z*MMf)=xZJ#_5|%-Xp<7RvtIeqrja?7p8mAPDeE}bKwe$luQmT%aqlFgkjV+exFa2? zq$or)LtSW1E9oqx8@n~=ekVoCb^5!?^a%0MRZ!|+g5+=`TKJ#KPc$wmP86cCmD02k85}dFF`!gXkn%-` zor#6z6ot*9e%@_ZX}I-#Z-%(tga@p3y6bk7-*p!bvi;r$+rJ$s~~*m z@rkjqG53&?+SdWvkGSHV`(2gBt$EW9)s_SJ9s4!LidT!7Jp&5d{_>tZpoOOVeEvH7 z11H_8B6{J;L;&&bl^w9(uXI`rvuMvaYU`m{FsQabW9Q&Fppx`E6Sx)Gn_m1Eht{x` zmF?1j*Q~$whk>r@ho_tdHK?ZkyDcyhJzoiy8a)s8b$6Z}Wl^@h!$U;~v+A&usxv1h z!vqBdYY;z_^0S{>w1XJ}wIrmZ^wQF%o=~<82UFTgM1x= z8CLWqa}GIsTw_cx0izqCagRYhXHR!)LW{IxYjF2jUndriT4IX3DNqR80l7?VFU1npeAk3L*N)Dx@Ef~_& zdwYA2LFje-yPiZJ54Vzqx=AT4DKeCP@$AQUwhtd7wQIh8<1H*HF&rsr{CxRGv7Hlz zPa^b(SKj#(X^l_nJ3rF!a%49nA>yI0PjPc|qy6ShNJE2AU412;3D?AL1a zJ9vlXWPREI16a%;lOBCRt3kB0vojg)R6`a0H*e6q!sxu3QI|SFX*O2YRca7g1A^LQ zTyIgM6@wsg`e&9Xu}k}Tiq;RLvW?gHbW-Zh?dQ7xTyVbx6>I7U0#&htm#g3yBt_$;Xo>yJ#*oc7JlYD z!V=^|aHTVM(R0B`Swo|*s|y&-5)Jy@*t`a(7S}0#chEPKTXHw+LYj^Jk!jBYK^rTpXNQN|%%1Nhg6-g7@tgj{#Khfc8P%iv2#f@(gXLeo$f~Gdjpj&3 z*4mD(ucnB56OH9cAH~DqILHmKDoc&z17a7?-ZT$`o=su@4L8MN#=K-`8oxpUdUjZbAkXfZ>sm z<`tF(pjK|B{yTZC&_L;PkEs01pU2@}Gm^9hwnYtQM>k zoXJY(EcyLn{-`pix60V*h<--SZq7(R=f%|_aAmbkRQbNq;=`Gws*If7ANaleUM zQL@&!Q*hVL%;J72D4smDe#f$NK|#|oNW#0_8~yRp}3VP*yb(b3U&b3m@& z1tt6A6=2GcVzM((jkDqR?gAAJZ74J>%-RA${N#z1Kt~lNAN7A$LJSTz=)Py?I}~~T-X~@P+3n75H=v_O7AvM?rL;83Y6OQ z{9{5OEQW=JMSOt+in!Q3+ntz^qv6L0_+;jP6E_!5>n9ml9FkWwcIt;*=H?k1se`fL z_n|nlWWPl^*P9Wg1;&hQ-<g8 zUm3gq(R!lF{%qr9&An-PjJWOjvsT);|Coi_-L*X@x}x!a{yCL`>YUN~zgnp-b<~4u z1>y4Kyu?)!hD0u267b0mEdHhAQKHt7_SVoh^}~eJRN?#ad^zqVgmTfV>-7hwgnnCf z4I?qih187#QMuXUnXd+nzT`W01$_R}X>E33k6Tv?)5uV1_EjDz`Zwv1&P;@zH{EfJ-% zcWe(j->s4S1f}Nn)6|(0oVir60pN+Hiu?T?=7`|)zx7ymNzc$UwfkLqPZ^p*7 za6Lu51TiTEaQ14~S?0|f(#ff*mv7!EkTZ59$o#!}O;ke3%gh`)Zk`_eoE0d4fxVl$ zy8Dc@VSGO^BjfMn)jLSnQ&v`nYnI3&uAq~F;m#l1OPGhv>O|1F zfp?Aa>LNf~SnT29Vpy#C?whwmD%M$;M3V6Yt_Yd7*(*B;Iqcq;ZN}?sIaCgbKQ> z?5vzeRs^Fqsf*hB?xa00FW1r0xv~PEVy6=H#zw`4LUND)ym!CCdyE^j$Yej@%8y&= zl;tA~(3NAF;zW)5A+uuX=(wL04*G9{arN(Nu4XP-V@}65*HCtHoMevsOc7JuzvzO{ z*Ng0Ru7}f_yPZ=Ey))Lbl8Y19b?T~X@Rzoq^h}%$k>xTxEzdfPod{hS9|z%sgUYc3 z?3XiF4e0~`yX`#%;Cgc^d@ZdZ$I98R+G-uL?i;AT_4-FNx2>G*`puFPmea6w(d2_% z{eiVdNK6cVYRr%d4afY|T@@8LT8@dY50 zh88lLl9^)ie1(Xy@ZmEOX!~RDzf%_Q+^2p^MJdW~J5W>LEQJ-~oKI~Oo^M;85k9K%jlIj!qa}>#yGuqUISgBpy%R>_VD!l+|~v@1$bXtGHF`fK_1oi zE)4|z&}I5Ri)zjgtJ=2WfjvBEU(3toR8>FejeT+3jv^`BXqDB_h{gq;JbBXAVhnyV z^)BuHg32YKv*xZ?u!mKfFTL)CJn2{1(jrz)W2_X0_SAe~)p+i5{%&%i<{)-a19AdZ zJJF+7=M_C&4_JX`yoHJOwv}1ULt4v`rX{CQOi9_;Yk0-f+nO;a9C6ZH< zge8LR0rGzA!%lr(M@nFJ>zDH^Njto?Jx|RaB-|d&K3!M{=0!4wf7)?Sv|9JUfGi0N zv=8L{c;T2fVw3cEB9uB~d~zFPXJ^;7x|+B00|L2AfuDA8nRC2|KJBnSWSv8wr%Xg= zUx(CO`EAn{4=gC1F|n~_&CK#vhB2-X=9uU`WEm4sA5_?eCP@suuI_@nDsKNr(upqE zbRhH03*yj1$K|%UO||X@mlY{C{9rXa;dJ1jWp=pY zr4r4}&AJK3O|D47!51RNrsZ{=A7$L!{(~bTOBZUV?8!9s9}`s=#fjt0`~L9+XJ_vD zg#{uyy4bVjTHRBZ!Kae+EnBh}lj{ZA;QM?OAdZX<4Y(?-`R+iIAJ^B{=d1#eNfyMt zfwFEO-`8*YoOUiQ19R}8VqeX`myEAW zNbq1B-yJdE{5Qp27S&B>QXU^Y6M{=!Tb+EKbQbU6ecszSS0ftu2_KNYje>)OsHmuB zcCMJriCE_5`Md=9^vXn-r$uU*cvyYUYbmFS*~V>o&Bi5yA)vxqjP~7*m*E*N015j& zJw5u>79lHs0PaUStefLEZnNG_%s^hn0$g8%^^r9Ty-PE=!5JktU#iTpYna6lsYx&J z@5MgT@+WE9YxQW;W-sZ_e?Si7nCI-P--9qBRLcS_GLVIrJc!rV*N?Baa~av#u-x3- zcK-hDCO3rzgok7P6a1l?uHWQJubC|tlFn~yaj`#_Cgmsg(}tgcfdT4#VGu9>ZpOR1 zmFeQS7X;07dZ`f~KYko|4k{?18MJzGQBhMXG%}_RN9dNH-)Mjz3&V4BbG3A)%GlNv=Ji?jUA3}_Nq3ZKd;@Oba5|kgeOcX zdgjd^cTp8+>}Y9Oz$q%4K7JtTaMx|!24P(A4l#fQ$ji&i6utUx#rLA)N5E9~-pa&hVa()+LV_;%wDf+ou3KTOk`PzB4 zwZy*dw9lVE*YALdo}8Y#{TUBrpxs<>Ss*kAbRi*vkcI9$yCj3EH=N_ zW+mZ%MCk}W8Zu++{#h{XaJ~C)N~)>J484py)DMo1Ze6|#qBEUa zu=vt(k&uu?e9u@RV#RAa`qXj04ht$OJrDP{@ereesu1jKLg`s>UPA*JB-CH^@%aC{ z(e(ZM3lA?ZMs99=zNQBha3}Jr^3}_iFA@?HvAUKpAVy3$G&BUE1~rJu<2D;Eve>)eWjmCAE+pcuH5TT(KcJ6(+2XCvLm&80gJi4Hm{WFvZ zz~OKJ6&>Be)s+y6{eRxq%n}JGEoDtgN_xh}_r%Z7?~ccQq?syB9i{1e-xHEm|DkqL zX)&?+3iM~3m+%R7d3$GPMGFgtjLgi6-yGcB{m?k&YBElZ#Ubke&IN5;ZO6O8W0Sa1LMN=2L&z7IvhG1A)&OT4H zB(F(yD@+90I>JAF!cNG}b`sPmpN3{P&jdgLl6NzeeTPe}@tK*!!oF)_5fKry?H`4C zdaNR~(CU&^)TNX#FKJjJ;U7(|xvsB!yz-0l#~g0%`XY^&70=6Fd+r_1UOfFRZ6&SK zup^bHS`>VpKxx?M-1olIAAd~hmcxJf;$WfL=hWumymld{?{|ga^~^$pWEe}1cOVGf z-@PB(7%IsLt}F^6|G*cQocw&sp}yCQ*Q_TL4+brTgM$N^hEt&%3E?qlF7~9^XjBck zYoq^&0KwKksc|(=dd*C|N9QZ6d)7x(<8F^_6@MxtHui!{bWHP0^|$2nDHIHaO_ZmY zvnwkEeFA76TwIv=Yf`;aC7rS!pnB4@yKP6MEL=i{w+}he8WYeqJ{Ppu*f1A*-$OaP z$w#=JXx`wbsH>auv!S2>3QuS#qz~0GY#bbOUW%(%aYFts0x&RKt9k@3>!_x6vpCVQ zZe@0u@P_e8V5;lGdS6>qLu>=8l4}k{tJv{wKu}t1uiG>Wd)`|bd}B}z2RPJqX-Of2 z?p2uo{%QaK#%eh0mc@*gFT^g|Zt)>&mD2=q;7_MWvYP1E9L^|j{uA+zSRt!c=SD(u zHjPa2hDLReP4eZ_CsXpi4DIt*MNuvsvHHK?U-;JWc@41}X!Piz;xVRIt&vRHgdqVu z*=ewbba&2c00S9(%ZXZbe_rM7xgbPw6Ai!(YHeQ3Oa?A5n*cIh%AvTJ6eDoRy0hpc zX)MNJt=DYvyzj_z{BL$uE;pf=v{)!JUuabpSE;G3jcDA2v?sIN`{3uLyc<{(b^>-z zPMg~rp>l*4vz{6HSi9?DqZFq)b#h_&@o=~dD(Vj+kd`boC&vU8jct5k0VP>A1S0*c zfg}`9X=T0jDUgx>P*71Rf}KRFn*vaygziW%^73N(`0NYR4F%8EgOI3e9)@fEb;CBX zh|z|@Tu+X7-_?UFmxKJzylQ_X&QogUXFb?@A#O^X%=wnHlI9fnh!j?JkpT#{eD*e^ zV&=#fN!%V3v6MY7VpW&@sE_`SjDG0mrFhcK_biB>-jOcO%^)#1m&YEKlK2jr6%zi? zLECQL#jSL_Yfrs?>DG@=gDQ>sq3`3C>$`O>e#+*y2EgOq@oOWTv7}=oc4+q4wk*9+5?Cj zJT%XGxG?;L-REW_0rE?APk=mq&-&?iz+lTe%EWQJEE^f97|Y7Z#V3M^K~S(#;G#qN zaXvIlhTs@9IzjG=Hu(1O(%Jtja?vXlc6N5y!*ghi)?+7dW3>=QK*#+3`*;01J0c^} zABi6p>FMcT*a%QnznkG^VqzL}EZIBvtx5$U=V3Mr1%XS5mqa%$w`Sa;0Ud`@9x$EW zvAxHA+)i-NHAW6Z+BHt!g;f*ur*s*$g4c6qo2z@c{Wxv7c5 z+S+<>XedCKZymZ6tD>ZYLBvt5nImBjO+76v+EV-=fzygbD<{~bDizC8yLX+0gk zYcXYC{GO>z*lK*&+SsevZ^3Js2PeCczJTYXT;{a5s%mIc)`ZGHX0)X#vhNkE@Pyr7WK z4+)y0=@dvdHPF%dmA1eKQbm`3`4U*W*@iR{(=qB%x0v)Pzc%-Cbv2Qm1cL4F+mAj( z_A2ZoRgik6C-I$2+T-GNRWEq6TVf5VWzV?rD-iao?S}Z|2T>f1H_p_St8xb-wkjZ|$AL-#5@Yf9}dT003}a zM_c0|0089qbDgCH000-G%Ofc_8llE!{u+*c_P#FO{w`jg06=hlS$eByv?OyZ>_ph0 zcj{3N!UL4`{JovFHLvtffNK;>;FN&j91s~8xAVBtEOGCY$TdB41uT#1WW;;iZtZ-p zJb8z9M^CNS&~%MWI!;~Jd_=CS&^lwuT#dH$l3;*>NKfPgUv`3y{<6ybe$q$1kcz0= z!V;L8bxfYpr;`%gLsiB%8Q*^Opi_ZijSxhgB#3|4j)5z&=(7EyP2y*EdyxHlXO1HK z1&OY2?K!U!$yBdgBu}JmfoW9}Nw0Kd<~`ohcSz@6=aSXW_PWeX2J2E zQVFT7&pv8N&(dCJL<>8943%;uKJCo#>0&eLinq|`SoV@~%8ZM#u9iN-&~z0HELWbY&_(>Yu8IwX>CO+W2SJxatH<)XbQ7Ilt579DU=F zDPG!m0(z)2)1)gZw`T0Q`R$>Lo2Ej2y8PsDrfCH>P*!o6@gX&xmtZpQ83xQL|5d-_ zIWBJ091sC{sFBQda`L01^%kaLVc{%oG!I{zq;4oc!??vvO+z4tMnl8yp9lH;%|9&+ z(I&?mT8QS62Sjhr?UPfHLqnVdJ42o_m`}vIo#xFYL*ID^Ft<_Q$sXwfh#pOHH}P9TMpxb}l!lI#qqw^z+3>ZhBXsx=}wVG?gnQo%bvb z?IPT6su!i=V(VQf6S3tx8a}f2tc;4N}2+j;NQ9J{sfXN z`a5ztLPD9XOB2sMDS3`*dZB$da$t)*`9nEa75r6Y`c-Uj<9K0$Wz^r$n14bSugw7a z*QNB&#r2<@anhjqHoIhcv*YHsgdw@Ubs+8qw59{i_KavpxM_W^RIaJOj-ZkvW|CQB z7>A2BbvGH3dw?V^Rv4R_2%|7UfzUI5!JTnpH9dgojQT4b$u0Mj9-%>)Zk4P2bYge^ z#NyH{w;zk<6;Wp^jVc1B8q<9*+C+0!$&udIEwDJjy5Kapax;r*F7K^8tcb{s! zylY{>a_*VNX2L(f7vF8FpG5sPcs^&MZ?8x(Kgj*X5Eu9LQ)HYr1BGz^r-O@DY8xIA zHNW0|GOxmZ7+@dP{u{GU%>7L0A0_#2ulNYP_8-bi9)eMZ>n&%&jr!xagb$m{IIN4T z{mWVU(NpuL3F;9Q#1|V4X2!spI>I=ThHHCzOSAh+{p*~yD=s8{&b#wZ!fvr&`5~G{ zc6aCce2x1TmuLTOdUvJEn)QH}hvtootPK+X(5l9PtzZ8GNpB;GFLoMw1lj*qgj$m9 z8P}*;GKGi!Kal&AuEY<2(eH01m>bf}&!rb&l8Gn4`RxCc-Otzk#)Ih;=AjwT_a&4k z;&7%L+ohVkt!AX>*Qv;hV1oB9LuJ+=EO0b?)o=h9>}+b{#|wJIzFy(t(eJs z%p?%X%FaGh&q{gwZ-_dLCO+j~RPrA$mi1@&`J_a7_*nlm#8G>mSJIsv|6yhO-$~`W zJ-`hU80?+&i842W=mXl#^{RtY(krX7RxCsS{9a!-2BR?R!B5qTK6kajmn?EIRJwcw zz;I<#Q`0?+m#62D677=A+$vnW-CvhLzfFMud1vw(Kvh+h0$VYRx~(@|Xk=_GeIJ&C zftT)jJXU+C$Fl-z+glm)Bk4;O8={8bOIVS)K)p{xLk8p0ZdvoyhTzkS0PpUNI-%N{ zt=&o5$nE)#5V0q^r}RB?F;L>K%f;E~B@pE3_7JNRc(-hz&IIU!8&eD@nct%ZF#-Tf zgD+w!1Dn~;Au+p^9&VwA`8|)-n}Rm_f|t7&d=v|Eg%TTvCPXc(;|K#VQb4U`)PA9& z?T>4pgIR*6BUC8s+kSQ?{8shhlj_%*Eu8uh*V=Mu-N$f)dm=+!fK|ucFkg`chAEWu zz%J}aq6h;M6*HVHuPe;@CU7@Rhc7YmUrDg_4OeaaVyj<{Hf$;*g9$e;ZwyUr-q;wD zakC)z4`z`Uwji#h@TxBRMaa=9vd=XW*mzmv1!`gX zsALj}l!&deF!x?spG?d?48G;;>e`n_o;HF40irDv38k-BzwWjYwqJccfC<_EB4EG- z365@lBzg|)M=A*>t$K;dSz0SY5ro&>uZ0P<=21GW=U$HFnTIJ^W0S4wQv*)+a%CP% zpi*>J7rq|O%ryTZqzt57uiZ#RL*^I>#~vz+urQ+b;+h01xhzoKYqC-kXa0_jpEcfQ zyu^ef=!+Buy*l~1M<%B=A(KYZx@WMyP!^^GvO315;y5xy^DU1{G;Ryrn( zGJRk7_%n6TQ|Aa|c@XkxoHa47kN)42@1Cw0S`exsbN8{DhP<4t;?V$C(5&zy^+$_U zk#X+YVR-6D4Z6pf7%IL>j?;8*0O^(+Te3LR^D*6H3i0_Wk^Y7eNta}JOLqxAS2bv^ zT$sr|*p|zlDGNa?87NN{5}{zY;?Aj%R`Q!>_}l&(9g)_9zBy|ChSPi?%Ox9qf0V0p zE)&4JX(k4(-B_9Lb8%BNE*f=H%er#rqV2peSo+qH5Xw8yOSPk%WQl0Yfb)7~s9WKfyX@ zNSZSBDPO*?qj$rI;4t;wK&JGmbfzKBSi&+OeVDtf?Z?P#*2CV+cJ`tDt9@$+oaeMp zaBkf)(nfxMenTMOZmvWwDmem`BEPE?bU=0G*7^7K7}yaM!X=}7gHXL#3Dj+}S0+>+ z7i~Q82|7;}8acI9$aB(fgLOZlHKeA5%MPiyVs9x|A6%)jyrFP4=hM4)prZTlb9S8k z@r%9rAT9^+uHf!i!@6g{-m_Skn&}*qZFMQ_`NAvuRy86!GFB%+FKdSssjvJ_dF7Oc zevb#n&r$GxUOW>6_REcG63!Wh4JxgG7ylUC_mu>Eq(?2S-#a)W`OX^-FE^fFJ z2yt9YADWgVDyrdo(i`lwx~AX;d`j%x`CzB;il2C3T9(a3hV)fS(wEKz#jpc+yRcth z<25~&l{ftx;WFL!cO#@0gf%007b^H5*kA$tK6b)*2faC=zpK=E5PMP5Qn7dW5?5+; z?NzFWLASCS;nGW{1J*M&2rU}{O6+G6H2BO8`=b>X>N(dULL_&75_S%`X(C_M)huYh z(!}Qmc5;x=fnZ%Ev?usu4@Ul4Jp44UoCqJMI2aAj^~Hs}_ivDYdy+Q5y|SSo+CGaQ zhwl%@UKXs4KH=N0n>~WA)p>2Tw}zk2CSqI3b4)wKrb`Z=i3qai{8p-yk8 zu!`88(f7?w>s!*~E?Jqt`KWmcKx42Whh{jK(%E|9m07m5)sFpanQjHviP{2DCZ&%Y ziQJS1lRY4`#&G}~^mNhrn9h$po0pfzfR!5`*DOG-Wn--EHR4=Qnuqk zpg5(99l(!cxwY?V*d2xZn|u80Fkt4f*|z~0I1~L5@w|w9q!d)E$ZVS`qDp^ssewzhln2%a-%%_c6*LVv$7cx%DYe98~F`{3VeB-i>+0)?~G0* z;0g?-*~lCB^n3#&K8Wpv>jE7^w}J6@o@DI(WkEtKO^?UJZ)a}yYkhp(W7g&)FR$ym zJ@?fnufZvL$ljI&DkAyTn3Apm29y{)iU{Vl8ZBTfg|mZ~Lj0DZ7;OJmoM8FN4#bV0f(Pa*+~6`Ppitqnl65Da;$3 zt`)xn+m*gm)m3NM{72IwoeUb6ogY z;#UN@()nX;GO|I2MGShA+x}qt6cPG~c1o&I4~fn+^pyuBx_#^*%#vO-K9$AQpGnKw zw^>?Y>?jcf0$!eUc*+juL}E^cY!gdq!;#=blv$G0c#@jzbE)g%puK*k@B>))P*KQ` zfIkARhz#F3cKV)qpBCn z`s#>ks-Ribo5-XG1`K;z_Xg4X#TeSinB1VE?;8dV)RJ=Ki&;P`?3j}R#^o+$@o6~f zdgb6iE2T~3Gi(_xTv;1+qHb$H`-nqJi6Xj{66iuZ0*5Mj*Tjpx z4_0VT@KBu(ur!i2P7tbnQYt8rBFoYxdiy=p2 zI5$E6$%=~lYAy`_MUT9Q|@F?BEP-_!;iK;p(;x~_C* z0HAQl*NM;rr{;n0EA$N5h4dlF5y+kw=NB&4ZeuIMa}Pg9Wn!@V__*%&F}$>DpTIh4 z-eN4@_Dc9tydZNqCj8a1q0{Mux!5fpS(u}>>DtM5LH@)$jt4-NnUX#aiig?Ze#PC8 zRqTzlkUI*}mAK^qD?}*JhjIi3WNfi&E2C&M{H>J4pU6HWJcguYzW-LOz-La7CK9U1 zZ9@_@=Ow7SM12w$3w{)fJ}Ga#(3DTvc?#%~4V+7})y#pEDd)fYndaFbveg%rzJV|_Edt3)m07tsn0J!{+*>>kX= z+Cjy~Csq3cwD|dR$8pNy8PCt>c=8R6%kv}GVR&VVxNlTtUxM!px+R6-P(O0Q(P7G{ zYg6U-A5-_jvzRkwy2FaHHJJ>cn{VjjREl)cZ0WA!C)zUQa%4%#i4ZJ)Eb}axSdg)i zg<@k$LeGVA&5@>YuBdL-D(-LsK&?NeP;JXAFmauh z8R_DFBK^4qex+4L!6)?2(UzI_mfcnCNla0G^)HSfta@UT2XEy3uMx6-aK}3S4+5M_@ z)cC!^cnJ8Y>gyrJyD&Ox64!&AGWh+KlxJjmUm>L4-8`a^wHZAdOxJ{?zxf2A`AfFU zJqB%m1luGJre`Ii;(YZkrY_p*RQB#&d#OC*(%j7blDw>S;hl@)>sC=1SmVGx2dD$T z?qxaX2gi@7xRBYzu$=p&1=(=(a)skg%5Fgon2XoDcZ`vYd!qzgU}4&I?1Fu-ygfK8%UQGQw#4i5y>6G1U6VuOkEo6O5(hv7q@<6MX=;#QUqKki~#_aHX5 literal 0 HcmV?d00001 diff --git a/icons/obj/food/mre.dmi b/icons/obj/food/mre.dmi new file mode 100644 index 0000000000000000000000000000000000000000..990f2bad5bdf1871c69fb2d3761f4825f3d6c5dd GIT binary patch literal 2005 zcmV;`2P*i9P)C0003dP)t-sz`(#` zV{378dut;pfPssamY$4_mYkiXd3k`Am!7JtvW13@l9QXVvbd$CtfnF;C2){LgrERe zegIH%Ns%RDphPNu03~;tM2e{1-roP+CDYT>0AY$IasW)5C1t2YEs6jDYnnuov?YM3 zGnxQtv_w&(^bB_$<9L_`1`C=Mt9LqkV-dW4LPl@%2iC@3vfR$P%rC7@tLekTBO zBLJWPag+dPrz?Z8OOu;PC8%RWiYfrA0C=)0inmRenlAvfW<;q?CAt8Ey-}UMDw7u% z7dSXLR8&+b3jk68Jc5FXkC2(Ov$~$2sG_5*#>dU6sfFDZ*Bkpc$}5eu?oU45C-5md5WXm#j2}|v`7d03KE*L3G^CC(u!|y zFyJOhw*TPc=O3TSJ@EBrMaVE8O zAvT;ntRRf}2gqWMX_9EeDW@y4bRD7aS=*vZ7milE%~D2_@@dvl-5rT}F0tte5fe(i zQW5@JT|+mt-yiw_nop?Dnunuc000H3Nklrl zE`cmQ%*-|736_^u9+paB2O5$fEzi=ft_l<=%W7%u(b`%WfF>yGWyV7j5uldVAFr=h z0Jwm0{_qb|pcM4-cTc{5`t*ltwXE|U=vBSScxdW;yixh_8RcuWit!Z!^s-*9Z)|LA z*6Z~u93TSfjISdCjEYffY;A3AHyVu^9EkG69f&KS35dCAne{p$NCNnZ)Dw84W;BSo zZJCV*A#m_D0tg|S)}~n}Sc&62T7jAY{I<1iHb_k*V0GMF6$yAwHY{^fTmi;E7YKMk zwk&fyp#rPpNkAx|N~+cqvx--sJmm>;k5B-t+cYD70cKtD8Nh`@h}r&qoBh03N{LER2`X! zbX|ohjP_81nT$U}r4Z-&ac&rK-oOM%rea7CKFXFJETJ=@T2L9U!eswXZ;7mx4&dS6<^BIdbHfH?sEsQa+`>m&Qx@)c#%;FXJ=!|I+mV1zy&f ze}^XO?{{DB?zRAEf|lK4JT!T}?X>q^?d`QGoHj22%u0>2U1&O(fClsL4Mc$5vOB%~{r!Vpuh)SCL_m-6JzPM)e|UI! z)CULzkVb-krwNF8V41xhAxHxFiu4kA$m#Zvk4}#Jeb*HUVE!Gg03;yfz&bE{1S@fz z7gWG?-J_GEWty#KWRUKT%7|7rcbEPkf`)B1Z^e7=5=BS(&J z7_;r~XPAGM{rxO4%l>|*m|=fEEj&MhhYL_k%)bi+1W^y(08b#{gW>6D3?KV}QgGVL zzqcJsfHxdQ@%Sku^S(DcJv}?WI6uD}1-|EVKLESdW&XX3c{gw12bb?ZoLyW7{s74! z;VC^D^CR>JbOFIl^6y~>=jR{7GeBx6;k}zYDq!N@(Iu3ygUic{vx@`)V&1#S;{up} zM=Jn5gcx4=qDzp(Qvne_ycP*y{vEA=@BJ|fD6T*L`RNlcfbwJ8f$~&eFpj@Q6;c7r zzY8i5M4#)w0;~eTAo4yt7*F*vpbFu}Z!`bi#zw)yXK(u9Sy1pf)Fi-r7rEID%I_@Cl$obs`WnTYD+00000NkvXXu0mjf53{;6 literal 0 HcmV?d00001 diff --git a/icons/obj/weapons/grenade.dmi b/icons/obj/weapons/grenade.dmi index 49444c39529ba4dd08e50f5de614a77302538603..8729a21f6e2e4cd3e769b59f686b08e5db5e93f4 100644 GIT binary patch literal 10980 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 diff --git a/maps/away/skrellscoutship/skrellscoutship.dm b/maps/away/skrellscoutship/skrellscoutship.dm index 9eb6b2208d592..57fc07d8eed63 100644 --- a/maps/away/skrellscoutship/skrellscoutship.dm +++ b/maps/away/skrellscoutship/skrellscoutship.dm @@ -148,17 +148,14 @@ var/global/const/access_skrellscoutship = "ACCESS_SKRELLSCOUT" /obj/item/reagent_containers/food/condiment/psilocybin - label_text = "Psilocybin" starting_reagents = list(/datum/reagent/drugs/psilocybin = 50) /obj/item/reagent_containers/food/condiment/mindbreaker - label_text = "Mindbreaker" starting_reagents = list(/datum/reagent/drugs/mindbreaker = 50) /obj/item/reagent_containers/food/condiment/hextro - label_text = "Ambrosia" starting_reagents = list(/datum/reagent/drugs/hextro = 50) diff --git a/sound/items/champagne_pop.ogg b/sound/items/champagne_pop.ogg new file mode 100644 index 0000000000000000000000000000000000000000..41737839826af7f96c7dd2575971d5393cb01ede GIT binary patch literal 11731 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 literal 0 HcmV?d00001 diff --git a/sound/items/soda_burst.ogg b/sound/items/soda_burst.ogg new file mode 100644 index 0000000000000000000000000000000000000000..58e7257181b65514ba42e1a0db8de4ce47b11528 GIT binary patch literal 46921 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

KOX8v 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 K0|GMvpZ^C)WgO1{ literal 0 HcmV?d00001 diff --git a/sound/items/soda_shaking.ogg b/sound/items/soda_shaking.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ae3437003898a80bef9bf4bfcb2c8f2c3aec2bad GIT binary patch literal 21401 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 literal 0 HcmV?d00001 From b34d9605031d2f19336ea42de7f9b7ebbc0d526f Mon Sep 17 00:00:00 2001 From: emmanuelbassil <6874235+emmanuelbassil@users.noreply.github.com> Date: Tue, 30 Apr 2024 20:44:47 +0300 Subject: [PATCH 035/311] [MIRROR] Fixes #34570 and wrapping boxes --- .../objects/items/weapons/wrapping_paper.dm | 170 +++++++++--------- code/modules/projectiles/gun.dm | 7 +- 2 files changed, 93 insertions(+), 84 deletions(-) diff --git a/code/game/objects/items/weapons/wrapping_paper.dm b/code/game/objects/items/weapons/wrapping_paper.dm index 683089463ea09..a0524c09394db 100644 --- a/code/game/objects/items/weapons/wrapping_paper.dm +++ b/code/game/objects/items/weapons/wrapping_paper.dm @@ -71,97 +71,103 @@ /obj/item/stack/package_wrap/use_after(obj/object, mob/user) - if (!isobj(object)) - return FALSE - if (istype(object, /obj/item/smallDelivery) || istype(object,/obj/structure/bigDelivery) || istype(object, /obj/item/evidencebag)) - to_chat(user, SPAN_WARNING("\The [object] is already wrapped.")) - return TRUE - if (object.anchored) - to_chat(user, SPAN_WARNING("\The [object] is bolted down and can't be wrapped.")) - return TRUE - if (user in object) - to_chat(user, SPAN_WARNING("You cannot wrap \the [object] while inside it.")) - return TRUE - var/amount = get_amount() - if (amount < 1) - to_chat(user, SPAN_WARNING("\The [src] is out of [plural_name].")) - return TRUE - if (istype(object, /obj/item)) - var/obj/item/target = object - var/a_used = target.get_storage_cost() - if (target.w_class == ITEM_SIZE_NO_CONTAINER || target.w_class == ITEM_SIZE_GARGANTUAN) - to_chat(user, SPAN_WARNING("\The [target] is too big to wrap!")) + +/obj/item/stack/package_wrap/use_before(atom/target, mob/living/user) + if (isobj(target)) + var/obj/wrapped_object = target + if (istype(wrapped_object, /obj/item/stack/package_wrap) || istype(wrapped_object, /obj/item/storage/backpack) || istype(wrapped_object, /obj/item/storage/belt) || istype(wrapped_object,/obj/item/storage/bag || istype(wrapped_object, /obj/item/storage/briefcase))) + return FALSE + if (istype(wrapped_object, /obj/item/smallDelivery) || istype(wrapped_object, /obj/structure/bigDelivery) || istype(wrapped_object, /obj/item/evidencebag)) + to_chat(user, SPAN_WARNING("\The [wrapped_object] is already wrapped.")) return TRUE - if (user.isEquipped(target)) - to_chat(user, SPAN_WARNING("You must put down \the [target] in order to wrap it.")) + if (wrapped_object.anchored) + to_chat(user, SPAN_WARNING("\The [wrapped_object] is bolted down and can't be wrapped.")) return TRUE - if (amount < a_used) - USE_FEEDBACK_STACK_NOT_ENOUGH(src, a_used, "to wrap \the [target]!") + if (user in wrapped_object) + to_chat(user, SPAN_WARNING("You cannot wrap \the [wrapped_object] while inside it.")) return TRUE - user.visible_message( - SPAN_NOTICE("\The [user] starts wrapping \the [target] with \the [src]."), - SPAN_NOTICE("You start wrapping \the [target] with \the [src].") - ) - if (!do_after(user, target.w_class SECONDS, target, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(target, src)) + var/amount = get_amount() + if (amount < 1) + to_chat(user, SPAN_WARNING("\The [src] is out of [plural_name].")) return TRUE - wrap_item(package_type, target, user) - return TRUE - if (istype(object, /obj/structure/closet/crate) || istype(object, /obj/structure/closet)) - var/item_size - var/obj/structure/closet/target = object - if (istype(object, /obj/structure/closet/crate)) - item_size = BASE_STORAGE_COST(ITEM_SIZE_NORMAL) - else - item_size = BASE_STORAGE_COST(ITEM_SIZE_LARGE) - if (amount < item_size) - USE_FEEDBACK_STACK_NOT_ENOUGH(src, item_size, "to wrap \the [target]!") - return TRUE - user.visible_message( - SPAN_NOTICE("\The [user] starts wrapping \the [target] with \the [src]."), - SPAN_NOTICE("You start wrapping \the [target] with \the [src].") - ) - if (!do_after(user, item_size SECONDS, target, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(target, src)) + if (istype(target, /obj/item)) + var/obj/item/wrapped_item = target + var/a_used = wrapped_item.get_storage_cost() + if (wrapped_item.w_class == ITEM_SIZE_NO_CONTAINER || wrapped_item.w_class == ITEM_SIZE_GARGANTUAN) + to_chat(user, SPAN_WARNING("\The [wrapped_item] is too big to wrap!")) + return TRUE + if (istype(wrapped_item.loc, /obj/item/storage)) + to_chat(user, SPAN_WARNING("You must take \the [wrapped_item] out of \the [wrapped_item.loc] to wrap it.")) + return TRUE + if (user.isEquipped(wrapped_item)) + to_chat(user, SPAN_WARNING("You must put down \the [wrapped_item] in order to wrap it.")) + return TRUE + if (amount < a_used) + USE_FEEDBACK_STACK_NOT_ENOUGH(src, a_used, "to wrap \the [wrapped_item]!") + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] starts wrapping \the [wrapped_item] with \the [src]."), + SPAN_NOTICE("You start wrapping \the [wrapped_item] with \the [src].") + ) + if (!do_after(user, wrapped_item.w_class SECONDS, wrapped_item, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(wrapped_item, src)) + return TRUE + wrap_item(package_type, wrapped_item, user) return TRUE - wrap_item(package_type, target, user) - return TRUE - -/obj/item/stack/package_wrap/use_before(mob/living/target, mob/living/user) - if (!istype(target, /mob/living/carbon/human)) - return FALSE - var/mob/living/carbon/human/H = target - var/a_used = BASE_STORAGE_COST(ITEM_SIZE_LARGE) //get_storage_cost() does not work on mobs, will reproduce same logic here. - if (get_amount() < a_used) - USE_FEEDBACK_STACK_NOT_ENOUGH(src, a_used, "to wrap \the [target]!") - return TRUE - if (!H.has_danger_grab(user)) - to_chat(user, SPAN_WARNING("You need to have a firm grip on \the [target] in order to wrap them.")) - return TRUE - H.visible_message( - SPAN_NOTICE("\The [H] starts wrapping \the [target] with \the [src]."), - SPAN_NOTICE("You start wrapping \the [target] with \the [src].") - ) - if (!do_after(user, ITEM_SIZE_LARGE SECONDS, target, DO_PUBLIC_UNIQUE) || !H.has_danger_grab(user) || !user.use_sanity_check(H, src)) - return TRUE + if (istype(target, /obj/structure/closet/crate) || istype(target, /obj/structure/closet)) + var/item_size + var/obj/structure/closet/wrapped_closet = target + if (istype(target, /obj/structure/closet/crate)) + item_size = BASE_STORAGE_COST(ITEM_SIZE_NORMAL) + else + item_size = BASE_STORAGE_COST(ITEM_SIZE_LARGE) + if (amount < item_size) + USE_FEEDBACK_STACK_NOT_ENOUGH(src, item_size, "to wrap \the [wrapped_closet]!") + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] starts wrapping \the [wrapped_closet] with \the [src]."), + SPAN_NOTICE("You start wrapping \the [wrapped_closet] with \the [src].") + ) + if (!do_after(user, item_size SECONDS, wrapped_closet, DO_PUBLIC_UNIQUE) || !user.use_sanity_check(wrapped_closet, src)) + return TRUE + wrap_item(package_type, wrapped_closet, user) + return TRUE - var/obj/structure/bigDelivery/mobpresent/present = new (H.loc, H, package_type) - use(a_used) + if (istype(target, /mob/living/carbon/human)) + var/mob/living/carbon/human/wrapped_human = target + var/a_used = BASE_STORAGE_COST(ITEM_SIZE_LARGE) //get_storage_cost() does not work on mobs, will reproduce same logic here. - if (user == target) - user.visible_message( - SPAN_DANGER("\The [user] wraps themselves with [get_vague_name(TRUE)]."), - SPAN_DANGER("You wrap yourself with [get_exact_name(a_used)].") - ) - else - user.visible_message( - SPAN_DANGER("\The [user] wraps \the [target] with [get_vague_name(TRUE)]."), - SPAN_DANGER("You wrap \the [target] with [get_exact_name(a_used)].") + if (get_amount() < a_used) + USE_FEEDBACK_STACK_NOT_ENOUGH(src, a_used, "to wrap \the [wrapped_human]!") + return TRUE + if (!wrapped_human.has_danger_grab(user)) + to_chat(user, SPAN_WARNING("You need to have a firm grip on \the [wrapped_human] in order to wrap them.")) + return TRUE + wrapped_human.visible_message( + SPAN_NOTICE("\The [user] starts wrapping \the [wrapped_human] with \the [src]."), + SPAN_NOTICE("You start wrapping \the [wrapped_human] with \the [src].") ) + if (!do_after(user, ITEM_SIZE_LARGE SECONDS, wrapped_human, DO_PUBLIC_UNIQUE) || !wrapped_human.has_danger_grab(user) || !user.use_sanity_check(wrapped_human, src)) + return TRUE - playsound(user.loc, 'sound/effects/wrap.ogg', 65, 1) - present.add_fingerprint(user) - H.remove_grabs_and_pulls() - admin_attack_log(user, H, "Used \a [src] to wrap their victim", "Was wrapepd with \a [src]", "used \the [src] to wrap") - return TRUE + var/obj/structure/bigDelivery/mobpresent/present = new (wrapped_human.loc, wrapped_human, package_type) + use(a_used) + + if (user == wrapped_human) + user.visible_message( + SPAN_DANGER("\The [user] wraps themselves with [get_vague_name(TRUE)]."), + SPAN_DANGER("You wrap yourself with [get_exact_name(a_used)].") + ) + else + user.visible_message( + SPAN_DANGER("\The [user] wraps \the [wrapped_human] with [get_vague_name(TRUE)]."), + SPAN_DANGER("You wrap \the [wrapped_human] with [get_exact_name(a_used)].") + ) + + playsound(user.loc, 'sound/effects/wrap.ogg', 65, 1) + present.add_fingerprint(user) + wrapped_human.remove_grabs_and_pulls() + admin_attack_log(user, wrapped_human, "Used \a [src] to wrap their victim", "Was wrapepd with \a [src]", "used \the [src] to wrap") + return TRUE diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 08f3d22dd2cab..061b42d155bb7 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -211,8 +211,11 @@ Fire(atom, user, pointblank = TRUE) return TRUE if (user.a_intent == I_HURT && !user.isEquipped(atom)) //point blank shooting - Fire(atom, user, pointblank = TRUE) - return TRUE + if (safety()) + return ..() + else + Fire(atom, user, pointblank = TRUE) + return TRUE return ..() From 23406fea1bd7f8320844e1f7d350d78239b5d61e Mon Sep 17 00:00:00 2001 From: JoeyNosegay <21371500+JoeyNosegay@users.noreply.github.com> Date: Tue, 30 Apr 2024 20:44:53 +0300 Subject: [PATCH 036/311] [MIRROR] Adds fun stuff for the event. --- baystation12.dme | 1 + .../mob/living/simple_animal/kamerr.dm | 24 ++++++++++++++++++ icons/mob/simple_animal/kamerr.dmi | Bin 0 -> 2134 bytes 3 files changed, 25 insertions(+) create mode 100644 code/modules/mob/living/simple_animal/kamerr.dm create mode 100644 icons/mob/simple_animal/kamerr.dmi diff --git a/baystation12.dme b/baystation12.dme index 337852f8f4554..ab2ed4b7c60cb 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -2320,6 +2320,7 @@ #include "code\modules\mob\living\silicon\robot\modules\module_uncertified.dm" #include "code\modules\mob\living\simple_animal\combat.dm" #include "code\modules\mob\living\simple_animal\defense.dm" +#include "code\modules\mob\living\simple_animal\kamerr.dm" #include "code\modules\mob\living\simple_animal\life.dm" #include "code\modules\mob\living\simple_animal\natural_weapons.dm" #include "code\modules\mob\living\simple_animal\shade.dm" diff --git a/code/modules/mob/living/simple_animal/kamerr.dm b/code/modules/mob/living/simple_animal/kamerr.dm new file mode 100644 index 0000000000000..8c8b2f2764d00 --- /dev/null +++ b/code/modules/mob/living/simple_animal/kamerr.dm @@ -0,0 +1,24 @@ +/mob/living/simple_animal/hostile/kamerr + name = "Ka'merr" + desc = {"\ + A tall, alien raptor-like creature. It has patches of feathers around \ + its neck, and is equipped with a thick plasteel collar. Its bony \ + limbs end in dangerous-looking claws.\ + "} + icon = 'icons/mob/simple_animal/kamerr.dmi' + icon_state = "kamerr" + icon_living = "kamerr" + icon_dead = "kamerrdead" + maxHealth = 100 + health = 100 + ai_holder = /datum/ai_holder/simple_animal/melee + natural_weapon = /obj/item/natural_weapon/claws/strong + say_list_type = /datum/say_list/kamerr + bleed_colour = "#1d2cbf" + + +/datum/say_list/kamerr + emote_hear = list( + "growls!", + "screeches incoherently!" + ) diff --git a/icons/mob/simple_animal/kamerr.dmi b/icons/mob/simple_animal/kamerr.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3685149ab750264a1ef9a7827bd4de5784c6e921 GIT binary patch literal 2134 zcmV-c2&wmpP)fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5;&r`5fFwryM;w;ZhDainFEVwu`QZv&t zN+6u#lEji!AX6zjF*miSNQsLxC9|j)B*(>>Rs<9Su?^9crKBdNAe0*7Q>vStnU`Hj zq`45qy7-J&R&e!m0s9aDr@=$;HdAY$000LmNkl2)den^?-sXjhG);eJfb*_vd zqA>$@>~EX->6gxv`&ISHjn>eU_|J+c%<(vAA~^4za~P);Gu7eu?p_1DKOQ}JNdg)! zHDC;cQ&({O3gOp-0`i{(9FLA|EVa<%hp(<90q%pE{xj6%qhg`U_}M4)txWj+UkLxX zdj$}HVImV^V98SL@;AP=60AF&e2lS~+zLW52@CwE;lcP+=pX(Z>-zX-Pym)G9O2Qd zW}E2o(|9{_*Pl)@NY;A@_!~oT!P%5(ilO&o{v1$;JftaE7mg5cd=vl$MmCwO)49`p z$L~TQcj2{%5gK{gS|JiW{mG_(Dabs`o&$pw!DCOI$a))xf)4X0E1`>=~^D5L4+;gMZX&9QLL&yIR_ zngzIMPxOUdP^Fm8_IN~7kuZl}=pmcd%{j#of1ggj2k5W#l16-Fm1pfYfxj)!NFcGDb|?dIu5l4KRn^R@BtN51|Inn zcWIsO^M7AxFC*c2>^K^zX#o^B(G;4gYrK4?`WnKu9&DY?B!I&><^Yp0Dd3U6)I6mW zv6)E#mKav-1V1fljtk(YO+^HU!!^e1r~!*$iW$b*o}7X~{sN+nkW2qKYSSE;;@O1~ zM{dYLj4ar}rPEO$2@U>8)+`!W&d>fM;z>9DG)~XXG!_DXn&3wkYS$<$FyjVR@JC*0 zF(RTiJs%DQU0-q&#I_jOv!Vry;~crdOB89DHh~*4u!bK3$bB>ow|VeG2KWGV8yoB| z^eY>%ytx964`($@fx(0f9*lK`}Hc?z)eIT{V|XL@NP14IEC{fh!zp5Q2Qq=tvt98^KJS%Lb_7l^T!)#~!kmI9Sf&x0Cz`L$vmRQ?i}n7X=3^k*N8;v#_3@EL^V`eVmr0yBieX^6ttKsX0dJdY$I4L)~26 zh?j!`R`VZt5+r_QZltt+zjlB+Ztxjv7Jc1#D8nzys258&@goyp(}X4ja|Rg{5Dtg7 zQSLFz0&g`@fHU!^fR+3rfQ~B?x+E+2v}f}HKL-KMS&Ie8C7Q(fu7FMak^?LWK=48E ziWZ-H0h$4@9;In{%-QTq! z23RSQvk4~+p5##6Wij*vS>6KK|GPO}!T;#LWVDeEEKW@DEioqtz=DOofV?$*UO?_X zRW9dm%}`>=UYEB$Z<00+q9wJb&SMt(=g212J6@$j7b;8nn{LkfW&usctr+D{%nOY_ zQ|HlK!zcCFcc1-_V=1b~&y!K&Zv;fSV#w>i*jQ}Dj#TPg5YR68oBQN{D4lXT{BeT+ zQHh%y*C}bt;kCEa+ooSD!Fpn*=keclTG9uNXEe(v#K!x8v>B)UU+BzJk*|ei)H!X+ z5_z>>3t+cCC{rjD3WY+UP$*jL`)HZ(c!Zs5$oKqi7bts^VO#f`tCX-<#Kd#=%_#B1 zfA89xv~o9l;c`mfnQ1Y2-Bp~sK>qXPO%h-iml7=03G#!8pGyf(3{&=&!h#h2N&yoI zuwx}U?}aw|LJBFs44}djv2+&#Zs6x|Mk;biz(94yn}esqd}0l;fcbggZD3J-Med`V zcz36|18U(=M9BrwNdTggi$C`#Oy04uMrAd7u+ zfxO?<2F~vec`4SHcXM_WLECqS2eu` zLZMJ76bgkx@$*1^(W`yfgf#K$!`lP(MX&Z@6ZBF}p-?Ck3dIibKV2DT!<^Nhr~m)} M07*qoM6N<$g5xayeE Date: Tue, 30 Apr 2024 21:44:47 +0300 Subject: [PATCH 037/311] [MIRROR] fix cans not being openable --- .../modules/reagents/reagent_containers/food/drinks.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 612a6ba24867a..7530c24a479cd 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -27,6 +27,16 @@ /obj/item/reagent_containers/food/drinks/proc/open(mob/user) playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1) to_chat(user, SPAN_NOTICE("You open \the [src] with an audible pop!")) +<<<<<<< ours +======= + atom_flags |= ATOM_FLAG_OPEN_CONTAINER + +/obj/item/reagent_containers/food/drinks/proc/boom(mob/user as mob) + user.visible_message( + SPAN_DANGER("\The [src] explodes all over \the [user] as they open it!"), + SPAN_DANGER("\The [src] explodes all over you as you open it!") + ) +>>>>>>> theirs atom_flags |= ATOM_FLAG_OPEN_CONTAINER /obj/item/reagent_containers/food/drinks/use_before(mob/M as mob, mob/user as mob) From 8f22175b5c41060964fb3bfcd74ec148a997a059 Mon Sep 17 00:00:00 2001 From: rootoo807 <71034457+rootoo807@users.noreply.github.com> Date: Wed, 1 May 2024 19:14:50 +0300 Subject: [PATCH 038/311] [MIRROR] Fixes donut boxes --- code/game/objects/items/weapons/storage/misc.dm | 2 +- code/game/objects/items/weapons/storage/mre.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index cc0df28d35713..837f9d5449126 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -39,7 +39,7 @@ ClearOverlays() var/i = 0 for(var/obj/item/reagent_containers/food/snacks/donut/D in contents) - var/image/I = image('icons/obj/food/food.dmi', "[i][D.overlay_state]") + var/image/I = image('icons/obj/food/food_storage.dmi', "[i][D.overlay_state]") if(D.overlay_state == "box-donut1") I.color = D.filling_color AddOverlays(I) diff --git a/code/game/objects/items/weapons/storage/mre.dm b/code/game/objects/items/weapons/storage/mre.dm index 3f5f56c13baeb..68317afe60f89 100644 --- a/code/game/objects/items/weapons/storage/mre.dm +++ b/code/game/objects/items/weapons/storage/mre.dm @@ -183,7 +183,7 @@ MRE Stuff /obj/item/storage/mrebag name = "main course" desc = "A vacuum-sealed bag containing the MRE's main course. Self-heats when opened." - icon = 'icons/obj/food/food.dmi' + icon = 'icons/obj/food/mre.dmi' icon_state = "pouch_medium" storage_slots = 1 w_class = ITEM_SIZE_SMALL From c767bd60b113ed5afa2040bb2f658bfe27e33042 Mon Sep 17 00:00:00 2001 From: MuckerMayhem <1161516+MuckerMayhem@users.noreply.github.com> Date: Thu, 2 May 2024 10:04:49 +0300 Subject: [PATCH 039/311] [MIRROR] add resync button to r&d console tabs --- code/modules/research/rdconsole.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 8a8ad5dbd3d68..fa56ffe870569 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -730,6 +730,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(2.0) dat += "Main Menu


" dat += "NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE

" + dat += "Re-sync with Nearby Devices
" if(2.1) dat += "Main Menu
" @@ -758,6 +759,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(3.0) dat += "Main Menu
" dat += "NO PROTOLATHE LINKED TO CONSOLE

" + dat += "Re-sync with Nearby Devices
" if(3.1) CHECK_LATHE @@ -869,6 +871,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(4.0) dat += "Main Menu
" dat += "NO CIRCUIT IMPRINTER LINKED TO CONSOLE

" + dat += "Re-sync with Nearby Devices
" if(4.1) CHECK_IMPRINTER From 234a3b16fd49dfe89628f3e057e0c7b4df3b6e3c Mon Sep 17 00:00:00 2001 From: MuckerMayhem <1161516+MuckerMayhem@users.noreply.github.com> Date: Thu, 2 May 2024 10:04:55 +0300 Subject: [PATCH 040/311] [MIRROR] fix the mail event --- code/modules/events/mail.dm | 5 ++--- code/modules/recycling/sortingmachinery.dm | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/code/modules/events/mail.dm b/code/modules/events/mail.dm index bfd561b77c7e8..da9dbe96372f9 100644 --- a/code/modules/events/mail.dm +++ b/code/modules/events/mail.dm @@ -76,11 +76,10 @@ var/obj/item/gift = new gift_path() - // Wrap it all up in a parcel - var/obj/item/smallDelivery/parcel = new /obj/item/smallDelivery() + // Add the gift as the 'wrapped' item in the parcel + var/obj/item/smallDelivery/parcel = new /obj/item/smallDelivery(null, gift) parcel.SetName("normal-sized parcel (to [name])") letter.forceMove(parcel) - gift.forceMove(parcel) parcel.forceMove(gift_crate) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index eb286cf4c8571..b41676595cf26 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -287,9 +287,9 @@ var/tag_x var/package_type = "parcel" -/obj/item/smallDelivery/Initialize(mapload, obj/item/parcel, wrap_type) +/obj/item/smallDelivery/Initialize(mapload, obj/item/parcel, wrap_type = "parcel") . = ..() - if (!parcel || !isitem(parcel) || !wrap_type) + if (!parcel || !isitem(parcel)) return INITIALIZE_HINT_QDEL wrapped = parcel From 9d4fa3a1b3fce38fe660cfb8291d953241812c8c Mon Sep 17 00:00:00 2001 From: BurpleBineapple <67706292+BurpleBineapple@users.noreply.github.com> Date: Tue, 7 May 2024 10:56:55 +0300 Subject: [PATCH 041/311] [MIRROR] Bullet Sounds and a Sprite --- .../hostile/robotic/hivebot/ranged.dm | 2 + code/modules/projectiles/gun.dm | 63 ++++++++++++------ .../projectiles/guns/projectile/automatic.dm | 8 +++ .../projectiles/guns/projectile/flaregun.dm | 1 + .../projectiles/guns/projectile/pistol.dm | 2 + .../projectiles/guns/projectile/revolver.dm | 4 ++ .../projectiles/guns/projectile/shotgun.dm | 57 ++-------------- .../projectiles/guns/projectile/sniper.dm | 4 ++ .../projectiles/guns/projectile/zipgun.dm | 6 ++ .../modules/projectiles/projectile/bullets.dm | 10 +-- icons/mob/onmob/onmob_head.dmi | Bin 180222 -> 180885 bytes icons/mob/onmob/onmob_suit.dmi | Bin 395656 -> 395755 bytes sound/weapons/gunshot/gunshot_smg.ogg | Bin 8789 -> 7832 bytes sound/weapons/gunshot/minigun.ogg | Bin 0 -> 9800 bytes 14 files changed, 76 insertions(+), 81 deletions(-) create mode 100644 sound/weapons/gunshot/minigun.ogg diff --git a/code/modules/mob/living/simple_animal/hostile/robotic/hivebot/ranged.dm b/code/modules/mob/living/simple_animal/hostile/robotic/hivebot/ranged.dm index 92a4ee17d2afa..26d2b0a87500c 100644 --- a/code/modules/mob/living/simple_animal/hostile/robotic/hivebot/ranged.dm +++ b/code/modules/mob/living/simple_animal/hostile/robotic/hivebot/ranged.dm @@ -4,6 +4,7 @@ maxHealth = 60 health = 60 projectiletype = /obj/item/projectile/bullet/hivebot + projectilesound = 'sound/weapons/gunshot/gunshot.ogg' // The regular ranged hivebot, that fires somewhat weak projectiles. /mob/living/simple_animal/hostile/hivebot/ranged_damage/basic @@ -66,6 +67,7 @@ icon_living = "red" projectiletype = /obj/item/projectile/beam/incendiary_laser + projectilesound = 'sound/weapons/scan.ogg' heat_resist = 1 /obj/item/projectile/fire diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 08f3d22dd2cab..99ab7c68d8047 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -62,46 +62,65 @@ waterproof = FALSE var/burst = 1 - var/can_autofire = FALSE /// checks if the gun will continue firing if the mouse button is held down - var/fire_delay = 6 //delay after shooting before the gun can be used again. Cannot be less than [burst_delay+1] - var/burst_delay = 2 //delay between shots, if firing in bursts + /// Checks if the gun will continue firing if the mouse button is held down. + var/can_autofire = FALSE + /// Delay after shooting before the gun can be used again. Cannot be less than [burst_delay+1]. + var/fire_delay = 6 + /// Delay between shots, if firing in bursts. + var/burst_delay = 2 var/move_delay = 1 + /// Sound this gun makes when firing. Overridden by projectiles with their own sounds. var/fire_sound = 'sound/weapons/gunshot/gunshot.ogg' var/fire_sound_text = "gunshot" var/fire_anim = null - var/screen_shake = 0 //shouldn't be greater than 2 unless zoomed - var/space_recoil = 0 //knocks back in space + /// The amount your screen shakes when firing. Shouldn't be greater than 2 unless zoomed. + var/screen_shake = 0 + /// Whether or not this weapon moves the shooter backwards when fired in space. + var/space_recoil = 0 var/silenced = FALSE - var/accuracy = 0 //accuracy is measured in tiles. +1 accuracy means that everything is effectively one tile closer for the purpose of miss chance, -1 means the opposite. launchers are not supported, at the moment. - var/accuracy_power = 5 //increase of to-hit chance per 1 point of accuracy - var/bulk = 0 //how unwieldy this weapon for its size, affects accuracy when fired without aiming - var/last_handled //time when hand gun's in became active, for purposes of aiming bonuses - var/scoped_accuracy = null //accuracy used when zoomed in a scope + /// Accuracy is measured in tiles. +1 accuracy means that everything is effectively one tile closer for the purpose of miss chance, -1 means the opposite. launchers are not supported, at the moment. + var/accuracy = 0 + /// Increase of to-hit chance per 1 point of accuracy. + var/accuracy_power = 5 + /// How unwieldy this weapon for its size, affects accuracy when fired without aiming. + var/bulk = 0 + /// Time when hand gun's in became active, for purposes of aiming bonuses. + var/last_handled + /// Accuracy used when zoomed in a scope. Not additive. + var/scoped_accuracy = null + /// How far this weapon's scope can see. var/scope_zoom = 0 - var/list/burst_accuracy = list(0) //allows for different accuracies for each shot in a burst. Applied on top of accuracy + /// Allows for different accuracies for each shot in a burst. Applied on top of accuracy. + var/list/burst_accuracy = list(0) var/list/dispersion = list(0) var/one_hand_penalty var/wielded_item_state - var/combustion //whether it creates hotspot when fired - + /// Whether it creates hotspot when fired. + var/combustion var/next_fire_time = 0 - var/sel_mode = 1 //index of the currently selected mode + /// Index of the currently selected mode. + var/sel_mode = 1 var/list/firemodes = list() var/selector_sound = 'sound/weapons/guns/selector.ogg' - //aiming system stuff - var/keep_aim = 1 //1 for keep shooting until aim is lowered - //0 for one bullet after tarrget moves and aim is lowered - var/multi_aim = 0 //Used to determine if you can target multiple people. - var/list/mob/living/aim_targets //List of who yer targeting. - var/mob/living/last_moved_mob //Used to fire faster at more than one person. - var/told_cant_shoot = 0 //So that it doesn't spam them with the fact they cannot hit them. + //Aiming system stuff + /// 1 for "keep shooting until aim is lowered", 0 for "one bullet after target moves and aim is lowered". + var/keep_aim = 1 + /// Used to determine if you can target multiple people. + var/multi_aim = 0 + /// List of who you are targeting. + var/list/mob/living/aim_targets + /// Used to fire faster at more than one person. + var/mob/living/last_moved_mob + /// So that it doesn't spam them with the fact they cannot hit them. + var/told_cant_shoot = 0 var/lock_time = -100 var/last_safety_check = -INFINITY var/safety_state = 1 var/has_safety = TRUE - var/safety_icon //overlay to apply to gun based on safety state, if any + /// Overlay to apply to gun based on safety state, if any. + var/safety_icon /// What skill governs safe handling of this gun. Basic skill level and higher will also show the safety overlay to the player. var/gun_skill = SKILL_WEAPONS diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 81c9fef2a2efb..9d566499e507d 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -17,6 +17,7 @@ burst_delay = 2 mag_insert_sound = 'sound/weapons/guns/interaction/smg_magin.ogg' mag_remove_sound = 'sound/weapons/guns/interaction/smg_magout.ogg' + fire_sound = 'sound/weapons/gunshot/gunshot_4mm.ogg' //machine pistol, easier to one-hand with firemodes = list( @@ -37,6 +38,7 @@ ammo_type = /obj/item/ammo_casing/pistol magazine_type = /obj/item/ammo_magazine/machine_pistol allowed_magazines = /obj/item/ammo_magazine/machine_pistol //more damage compared to the wt550, smaller mag size + fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' one_hand_penalty = 2 firemodes = list( @@ -115,6 +117,7 @@ wielded_item_state = "arifle-wielded" mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' mag_remove_sound = 'sound/weapons/guns/interaction/ltrifle_magout.ogg' + fire_sound = 'sound/weapons/gunshot/gunshot3.ogg' //Assault rifle, burst fire degrades quicker than SMG, worse one-handing penalty, slightly increased move delay firemodes = list( @@ -149,6 +152,7 @@ allowed_magazines = /obj/item/ammo_magazine/smg_top accuracy_power = 7 one_hand_penalty = 3 + fire_sound = 'sound/weapons/gunshot/gunshot_smg.ogg' //machine pistol, like SMG but easier to one-hand with firemodes = list( @@ -193,6 +197,7 @@ wielded_item_state = "z8carbine-wielded" mag_insert_sound = 'sound/weapons/guns/interaction/batrifle_magin.ogg' mag_remove_sound = 'sound/weapons/guns/interaction/batrifle_magout.ogg' + fire_sound = 'sound/weapons/gunshot/gunshot2.ogg' firemodes = list( list(mode_name="semi auto", burst=1, fire_delay=null, move_delay=null, use_launcher=null, one_hand_penalty=8, burst_accuracy=null, dispersion=null), list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=6, use_launcher=null, one_hand_penalty=9, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)), @@ -294,6 +299,7 @@ one_hand_penalty = 10 mag_insert_sound = 'sound/weapons/guns/interaction/lmg_magin.ogg' mag_remove_sound = 'sound/weapons/guns/interaction/lmg_magout.ogg' + fire_sound = 'sound/weapons/gunshot/gunshot3.ogg' can_special_reload = FALSE //LMG, better sustained fire accuracy than assault rifles (comparable to SMG), higer move delay and one-handing penalty @@ -390,6 +396,7 @@ wielded_item_state = "battlerifle-wielded" mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' mag_remove_sound = 'sound/weapons/guns/interaction/ltrifle_magout.ogg' + fire_sound = 'sound/weapons/gunshot/gunshot3.ogg' //Battle Rifle is only accurate in semi-automatic fire. firemodes = list( @@ -424,6 +431,7 @@ one_hand_penalty = 20 mag_insert_sound = 'sound/weapons/guns/interaction/lmg_magin.ogg' mag_remove_sound = 'sound/weapons/guns/interaction/lmg_magout.ogg' + fire_sound = 'sound/weapons/gunshot/minigun.ogg' can_special_reload = FALSE firemodes = list( diff --git a/code/modules/projectiles/guns/projectile/flaregun.dm b/code/modules/projectiles/guns/projectile/flaregun.dm index 6d573a7751f62..54dd2bf2214fa 100644 --- a/code/modules/projectiles/guns/projectile/flaregun.dm +++ b/code/modules/projectiles/guns/projectile/flaregun.dm @@ -17,6 +17,7 @@ load_method = SINGLE_CASING|SPEEDLOADER max_shells = 1 load_sound = 'sound/weapons/guns/interaction/shotgun_instert.ogg' + fire_sound = 'sound/weapons/gunshot/shotgun.ogg' /obj/item/gun/projectile/flare/loaded ammo_type = /obj/item/ammo_casing/shotgun/flash diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 163e473e08b5c..6567f64b9fb1b 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -4,6 +4,7 @@ caliber = CALIBER_PISTOL magazine_type = /obj/item/ammo_magazine/pistol allowed_magazines = /obj/item/ammo_magazine/pistol + fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' accuracy_power = 7 var/empty_icon = TRUE //If it should change icon when empty var/ammo_indicator = FALSE @@ -55,6 +56,7 @@ allowed_magazines = /obj/item/ammo_magazine/magnum mag_insert_sound = 'sound/weapons/guns/interaction/hpistol_magin.ogg' mag_remove_sound = 'sound/weapons/guns/interaction/hpistol_magout.ogg' + fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' accuracy = 2 one_hand_penalty = 2 bulk = 3 diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index ae258f68a84b6..d5baf41734a4e 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -12,6 +12,7 @@ ammo_type = /obj/item/ammo_casing/pistol/magnum mag_insert_sound = 'sound/weapons/guns/interaction/rev_magin.ogg' mag_remove_sound = 'sound/weapons/guns/interaction/rev_magout.ogg' + fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' accuracy = 2 accuracy_power = 8 one_hand_penalty = 2 @@ -52,6 +53,7 @@ safety_icon = "medium_safety" caliber = CALIBER_PISTOL ammo_type = /obj/item/ammo_casing/pistol + fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' desc = "The Lumoco Arms' Solid is a rugged revolver for people who don't keep their guns well-maintained." accuracy = 1 bulk = 0 @@ -64,6 +66,7 @@ item_state = "pistol" caliber = CALIBER_PISTOL_SMALL ammo_type = /obj/item/ammo_casing/pistol/small + fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' w_class = ITEM_SIZE_SMALL accuracy = 1 one_hand_penalty = 0 @@ -74,6 +77,7 @@ name = "cap gun" desc = "Looks almost like the real thing! Ages 8 and up." icon_state = "revolver-toy" + fire_sound = 'sound/weapons/gunshot/gunshot.ogg' caliber = CALIBER_CAPS origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1) ammo_type = /obj/item/ammo_casing/cap diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index e248e1c1bf88f..1f5a969eb38bd 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -1,3 +1,9 @@ +/obj/item/gun/projectile/shotgun + abstract_type = /obj/item/gun/projectile/shotgun + name = "master shotgun object" + desc = "You should not see this." + fire_sound = 'sound/weapons/gunshot/shotgun.ogg' + /obj/item/gun/projectile/shotgun/pump name = "shotgun" desc = "A mass-produced shotgun by Mars Security Industries. The rugged ZX-870 'Bulldog' is common throughout most frontier worlds. Useful for sweeping alleys or ship corridors." @@ -171,56 +177,6 @@ wielded_item_state = "rshotgun-wielded" load_sound = 'sound/weapons/guns/interaction/shotgun_instert.ogg' -/obj/item/gun/projectile/shotgun/pump/sawn/attack_self(mob/living/user) - if(world.time >= recentpump + 10) - if(!is_held_twohanded(user)) - var/fail_chance = user.skill_fail_chance(SKILL_WEAPONS, 90, SKILL_EXPERIENCED, 0.25) - var/drop_chance = user.skill_fail_chance(SKILL_WEAPONS, 50, SKILL_EXPERIENCED, 0.5) - - if (!fail_chance) - user.visible_message( - SPAN_NOTICE("\The [user] racks \the [src] with one hand."), - SPAN_NOTICE("You manage to rack \the [src] with one hand.") - ) - pump(user) - else if (prob(fail_chance)) - if (prob(drop_chance) && user.unEquip(src, user.loc)) - user.visible_message( - SPAN_WARNING("\The [user] attempts to rack \the [src], but it falls out of their hands!"), - SPAN_WARNING("You attempt to rack \the [src], but it falls out of your hands!") - ) - else - user.visible_message( - SPAN_WARNING("\The [user] fails to rack \the [src]!"), - SPAN_WARNING("You fail to rack \the [src]!") - ) - else - user.visible_message( - SPAN_NOTICE("\The [user] manages to akwardly rack \the [src] with one hand."), - SPAN_NOTICE("You manage to awkwardly rack \the [src] with one hand.") - ) - pump(user) - - else - pump(user) - recentpump = world.time + 1 SECOND - -/obj/item/gun/projectile/shotgun/pump/sawn/proc/pumpr(mob/living/user) - playsound(user, 'sound/weapons/shotgunpump.ogg', 60, 1) - - if(chambered)//We have a shell in the chamber - chambered.dropInto(loc)//Eject casing - if(length(chambered.fall_sounds)) - playsound(loc, pick(chambered.fall_sounds), 50, 1) - chambered = null - - if(length(loaded)) - var/obj/item/ammo_casing/AC = loaded[1] //load next casing. - loaded -= AC //Remove casing from loaded list. - chambered = AC - - update_icon() - /obj/item/gun/projectile/shotgun/pump/combat name = "combat shotgun" @@ -374,6 +330,7 @@ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1) auto_eject = TRUE auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg' + fire_sound = 'sound/weapons/gunshot/shotgun.ogg' one_hand_penalty = 8 bulk = GUN_BULK_RIFLE burst_delay = 2 diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index 9790f9dce90f3..cecfb6fbe118c 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -114,6 +114,7 @@ scope_zoom = 0 scoped_accuracy = 0 wielded_item_state = "boltaction-wielded" + fire_sound = 'sound/weapons/gunshot/gunshot3.ogg' /obj/item/gun/projectile/sniper/panther //semi-automatic only name = "marksman rifle" @@ -140,6 +141,7 @@ wielded_item_state = "dmr-wielded" mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' mag_remove_sound = 'sound/weapons/guns/interaction/ltrifle_magout.ogg' + fire_sound = 'sound/weapons/gunshot/gunshot3.ogg' /obj/item/gun/projectile/sniper/panther/on_update_icon() if(ammo_magazine) @@ -171,6 +173,7 @@ wielded_item_state = "garand-wielded" mag_insert_sound = 'sound/weapons/guns/interaction/ltrifle_magin.ogg' mag_remove_sound = 'sound/weapons/guns/interaction/garand_magout.ogg' + fire_sound = 'sound/weapons/gunshot/gunshot3.ogg' /obj/item/gun/projectile/sniper/garand/on_update_icon() if(ammo_magazine && length(ammo_magazine.stored_ammo)) @@ -199,6 +202,7 @@ max_shells = 10 accuracy = 1 wielded_item_state = "semistrip-wielded" + fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' /obj/item/gun/projectile/sniper/semistrip/on_update_icon() if(ammo_magazine && length(ammo_magazine.stored_ammo)) diff --git a/code/modules/projectiles/guns/projectile/zipgun.dm b/code/modules/projectiles/guns/projectile/zipgun.dm index 2018e0ca57a3c..9395a11bff7a6 100644 --- a/code/modules/projectiles/guns/projectile/zipgun.dm +++ b/code/modules/projectiles/guns/projectile/zipgun.dm @@ -32,6 +32,12 @@ var/obj/item/ammo_casing/ammo = pick(ammo_types) caliber = initial(ammo.caliber) desc += " Uses [caliber] rounds." + if(caliber == CALIBER_SHOTGUN) + fire_sound = 'sound/weapons/gunshot/shotgun.ogg' + if(caliber == CALIBER_PISTOL) + fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' + if(caliber == CALIBER_RIFLE || caliber == CALIBER_RIFLE_MILITARY) + fire_sound = 'sound/weapons/gunshot/gunshot3.ogg' . = ..() /obj/item/gun/projectile/pirate/unloaded diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index afe2c3e6d3915..5587c84269135 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -1,7 +1,7 @@ /obj/item/projectile/bullet name = "bullet" icon_state = "bullet" - fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' + fire_sound = null damage = 50 damage_type = DAMAGE_BRUTE damage_flags = DAMAGE_FLAG_BULLET | DAMAGE_FLAG_SHARP @@ -125,7 +125,6 @@ /* short-casing projectiles, like the kind used in pistols or SMGs */ /obj/item/projectile/bullet/pistol - fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' damage = 45 distance_falloff = 3 @@ -135,7 +134,6 @@ distance_falloff = 4 /obj/item/projectile/bullet/pistol/strong - fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' damage = 50 penetration_modifier = 0.8 distance_falloff = 2.5 @@ -154,7 +152,6 @@ //4mm. Tiny, very low damage, does not embed, but has very high penetration. Only to be used for the experimental SMG. /obj/item/projectile/bullet/flechette - fire_sound = 'sound/weapons/gunshot/gunshot_4mm.ogg' damage = 23 penetrating = 1 armor_penetration = 40 @@ -165,7 +162,6 @@ /obj/item/projectile/bullet/shotgun name = "slug" - fire_sound = 'sound/weapons/gunshot/shotgun.ogg' damage = 65 armor_penetration = 10 @@ -183,7 +179,6 @@ /obj/item/projectile/bullet/pellet/shotgun name = "shrapnel" icon_state = "pellet" - fire_sound = 'sound/weapons/gunshot/shotgun.ogg' damage = 30 pellets = 6 range_step = 1 @@ -192,7 +187,6 @@ /obj/item/projectile/bullet/pellet/shotgun/flechette name = "flechette" icon_state = "flechette" - fire_sound = 'sound/weapons/gunshot/shotgun.ogg' damage = 30 armor_penetration = 25 pellets = 3 @@ -205,14 +199,12 @@ /* "Rifle" rounds */ /obj/item/projectile/bullet/rifle - fire_sound = 'sound/weapons/gunshot/gunshot3.ogg' damage = 45 armor_penetration = 25 penetrating = 1 distance_falloff = 1 /obj/item/projectile/bullet/rifle/military - fire_sound = 'sound/weapons/gunshot/gunshot2.ogg' damage = 40 armor_penetration = 35 diff --git a/icons/mob/onmob/onmob_head.dmi b/icons/mob/onmob/onmob_head.dmi index 2485b983955c948dd8050783f0e541359b07a75c..acd3016647078291d913846536b6c7aba16874c6 100644 GIT binary patch delta 21295 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 diff --git a/icons/mob/onmob/onmob_suit.dmi b/icons/mob/onmob/onmob_suit.dmi index 71331bc146c258bcc79f54b68f3091383e10319d..a61a567909a8eb807f1ba1651f17b3b2e774a4f6 100644 GIT binary patch delta 6251 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 R_m%;Ou9;ezAdT)k`yUs%v6TP- delta 6146 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 diff --git a/sound/weapons/gunshot/minigun.ogg b/sound/weapons/gunshot/minigun.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bbfa62b1f4e0677243970e85adc40ffaac56aaff GIT binary patch literal 9800 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
tMSYsm#>6B#fh;-?wV%QotX}J8|^}W?SSwO z2p@U^apS{Bzg=FD+N1e4rC;0F=`=B;ah%~-PGW7qrY@(!y;R&K5fmzLiRG^O?Za`_ zrZ*5qO=D6-L9E05cde8?JlhBS8y$p=meA*6A=FM*PPg@~B&dcdI3ooFSR%!)P|XDY z&fU~Anxr>#TRHM#P?2B?84G5DihgZgDTDm^xb0)OJ*oZN{wOm=saZ@xKf!)THC@cyrrfD#o9%&LUAuU`>3ei#-hk{DlP=0`J>PD zG3*XAX2lixW@4fi&=8B}@mTl`QT=C$V~xeKTkR4KBwjXmoG7PEA@&M;B&+s<;zf}% zP2~YWMi~g3+5~$*>ek1HwtbnrUKNsaBuqe!MNu zL|t)X*(o(z;p%Ip*_<6mKR=P8tl6v&0R;P-YOa?U<(8IE0+?;Y;PJQaODRb|P3Ud4 zuJ#O(0Z#S`r~9kM&q<7N=BkKNSohW5?KAB?8aMLxzG3Cvajf-w=Lwml^K_c+D;xjd l{&n18la37En|y3bPmk3kR}F8|EDkF>Df Date: Tue, 7 May 2024 10:57:02 +0300 Subject: [PATCH 042/311] [MIRROR] Anomaly analysis QOL Tweaks --- .../tools/ano_device_battery.dm | 5 +- .../tools/artifact_analyser.dm | 23 +++-- .../tools/artifact_harvester.dm | 90 ++++++++++++++++--- maps/torch/torch1_deck5.dmm | 9 +- 4 files changed, 101 insertions(+), 26 deletions(-) diff --git a/code/modules/xenoarcheaology/tools/ano_device_battery.dm b/code/modules/xenoarcheaology/tools/ano_device_battery.dm index aeb1c90ab3c9a..99f7b0a0e0d1c 100644 --- a/code/modules/xenoarcheaology/tools/ano_device_battery.dm +++ b/code/modules/xenoarcheaology/tools/ano_device_battery.dm @@ -207,8 +207,11 @@ . = FALSE if (!istype(M)) return FALSE + if(!inserted_battery) + user.visible_message(SPAN_NOTICE("[user] taps [M] with [src], but with no battery inserted, nothing happens.")) + return FALSE - if (activated && inserted_battery.battery_effect.effect == EFFECT_TOUCH && !isnull(inserted_battery)) + if (inserted_battery.battery_effect.effect == EFFECT_TOUCH && ((inserted_battery.stored_charge - energy_consumed_on_touch) > 0)) inserted_battery.battery_effect.DoEffectTouch(M) inserted_battery.use_power(energy_consumed_on_touch) user.visible_message(SPAN_NOTICE("[user] taps [M] with [src], and it shudders on contact.")) diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm index 1027b24d2f3ae..d9162fea0e9d9 100644 --- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm +++ b/code/modules/xenoarcheaology/tools/artifact_analyser.dm @@ -13,16 +13,14 @@ var/scan_duration = 50 var/obj/scanned_object var/report_num = 0 - + var/list/data = list("screen" = 1) /obj/machinery/artifact_analyser/Initialize() . = ..() - reconnect_scanner() + sync_with_pad() /obj/machinery/artifact_analyser/proc/reconnect_scanner() //connect to a nearby scanner pad - owned_scanner = locate(/obj/machinery/artifact_scanpad) in get_step(src, dir) - if(!owned_scanner) - owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src) + sync_with_pad() /obj/machinery/artifact_analyser/DefaultTopicState() return GLOB.physical_state @@ -31,6 +29,8 @@ interact(user) return TRUE +/obj/machinery/artifact_analyser/use_tool(obj/item/I, mob/living/user, list/click_params) + return ..() /obj/machinery/artifact_analyser/interact(mob/user) var/dat = "Anomalous material analyser
" dat += "
" @@ -48,6 +48,7 @@ dat += "
" dat += "
" + dat += "
Sync with nearby pad
" dat += "Close" var/datum/browser/popup = new(user, "artanalyser", "Artifact Analyzer", 450, 500) popup.set_content(dat) @@ -120,14 +121,22 @@ scan_in_progress = 0 src.visible_message("[name] states, \"Scanning halted.\"") . = TOPIC_REFRESH - + else if(href_list["syncpads"]) + sync_with_pad() + . = TOPIC_REFRESH else if(href_list["close"]) close_browser(user, "window=artanalyser") return TOPIC_HANDLED if(. == TOPIC_REFRESH) interact(user) - +/obj/machinery/artifact_analyser/proc/sync_with_pad() + for(var/obj/machinery/artifact_scanpad/scanner in range(5, src)) + owned_scanner = scanner + src.visible_message("[name] states, \"Pad located, commencing sync.\"") + return + src.visible_message("[name] states, \"Scan unsuccessful, could not locate pad.\"") + return //hardcoded responses, oh well /obj/machinery/artifact_analyser/proc/get_scan_info(obj/scanned_obj) switch(scanned_obj.type) diff --git a/code/modules/xenoarcheaology/tools/artifact_harvester.dm b/code/modules/xenoarcheaology/tools/artifact_harvester.dm index 29d759b8c0f03..bd17f0752ac87 100644 --- a/code/modules/xenoarcheaology/tools/artifact_harvester.dm +++ b/code/modules/xenoarcheaology/tools/artifact_harvester.dm @@ -2,24 +2,34 @@ name = "Exotic Particle Harvester" icon = 'icons/obj/machines/research/virology.dmi' icon_state = "incubator" //incubator_on + anchored = TRUE density = TRUE idle_power_usage = 50 active_power_usage = 750 var/harvesting = 0 + var/obj/item/disk/tech_disk/inserted_disk var/obj/item/anobattery/inserted_battery var/obj/machinery/artifact/cur_artifact var/obj/machinery/artifact_scanpad/owned_scanner = null var/last_process = 0 - + var/list/data = list("screen" = 1) /obj/machinery/artifact_harvester/New() ..() - //connect to a nearby scanner pad - owned_scanner = locate(/obj/machinery/artifact_scanpad) in get_step(src, dir) - if(!owned_scanner) - owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src) + sync_with_pad() /obj/machinery/artifact_harvester/use_tool(obj/item/I, mob/living/user, list/click_params) + if(istype(I,/obj/item/disk/tech_disk)) + if(!inserted_disk) + if(!user.unEquip(I, src)) + return TRUE + to_chat(user, SPAN_NOTICE("You insert [I] into [src].")) + src.inserted_disk = I + updateDialog() + return TRUE + else + to_chat(user, SPAN_WARNING("There is already a technology disk in [src].")) + return TRUE if(istype(I,/obj/item/anobattery)) if(!inserted_battery) if(!user.unEquip(I, src)) @@ -32,7 +42,13 @@ to_chat(user, SPAN_WARNING("There is already a battery in [src].")) return TRUE return..() - +/obj/machinery/artifact_harvester/proc/sync_with_pad() + for(var/obj/machinery/artifact_scanpad/scanner in range(5, src)) + owned_scanner = scanner + src.visible_message("[name] states, \"Pad located, commencing sync.\"") + return + src.visible_message("[name] states, \"Scan unsuccessful, could not locate pad.\"") + return /obj/machinery/artifact_harvester/attack_hand(mob/user as mob) ..() interact(user) @@ -58,17 +74,26 @@ dat += "Eject battery
" dat += "Drain battery of all charge
" dat += "Begin harvesting
" - - else + if(inserted_disk) + dat += "[inserted_disk.name] inserted.
" + dat += "Copy data to disk
" + dat += "Eject technology disk
" + if(!inserted_disk) + dat += "No technology disk inserted.
" + if(!inserted_battery) dat += "No battery inserted.
" + else + else dat += "[SPAN_COLOR("red", "Unable to locate analysis pad.")]
" + dat += "Sync with nearby pad
" dat += "Close
" dat += "
" var/datum/browser/popup = new(user, "artifact_harvester", "Artifact Power Harvester", 450, 500) popup.set_content(dat) popup.open() - + user.set_machine(src) + onclose(user, "artifactharvester") /obj/machinery/artifact_harvester/Process() if(inoperable()) return @@ -118,7 +143,7 @@ if (href_list["harvest"]) if(!inserted_battery) src.visible_message("[src] states, \"Cannot harvest. No battery inserted.\"") - + return TOPIC_REFRESH else if(inserted_battery.stored_charge >= inserted_battery.capacity) src.visible_message("[src] states, \"Cannot harvest. battery is full.\"") @@ -136,7 +161,7 @@ var/message = "[src] states, \"Cannot harvest. No noteworthy energy signature isolated.\"" src.visible_message(message) - else if(analysed && analysed.being_used) + else if(analysed && analysed.being_used ) src.visible_message("[src] states, \"Cannot harvest. Source already being harvested.\"") else @@ -170,7 +195,7 @@ source_effect = cur_artifact.my_effect var/battery_matches_secondary_id = 0 - if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.secondary_effect.artifact_id) + if(inserted_battery.battery_effect && inserted_battery.battery_effect.artifact_id == cur_artifact.secondary_effect?.artifact_id) battery_matches_secondary_id = 1 if(battery_matches_secondary_id && cur_artifact.secondary_effect.activated) //we're good to recharge the secondary effect! @@ -249,9 +274,46 @@ var/message = "[src] states, \"Cannot dump energy. No battery inserted.\"" src.visible_message(message) . = TOPIC_REFRESH - + else if (href_list["loaddisk"]) + if(!inserted_battery) + src.visible_message("[src] states, \"Cannot conduct analysis. No battery inserted.\"") + + else if(inserted_battery.battery_effect && inserted_battery.stored_charge > 0) + var/effect_type = inserted_battery.battery_effect.effect_type + //horrifying copypasta but unfortunately think it might be necessary + if(effect_type == EFFECT_BLUESPACE) + var/datum/tech/anomaly_tech = new /datum/tech/bluespace + anomaly_tech.level = 8 + src.inserted_disk.stored = anomaly_tech + else if(effect_type == EFFECT_ORGANIC) + var/datum/tech/anomaly_tech = new /datum/tech/biotech + anomaly_tech.level = 8 + src.inserted_disk.stored = anomaly_tech + else if(effect_type == EFFECT_ELECTRO) + var/datum/tech/anomaly_tech = new /datum/tech/powerstorage + anomaly_tech.level = 8 + src.inserted_disk.stored = anomaly_tech + else if(effect_type == EFFECT_ENERGY) + var/datum/tech/anomaly_tech = new /datum/tech/magnets + anomaly_tech.level = 8 + src.inserted_disk.stored = anomaly_tech + else if(effect_type == EFFECT_PARTICLE) + var/datum/tech/anomaly_tech = new /datum/tech/materials + anomaly_tech.level = 8 + src.inserted_disk.stored = anomaly_tech + . = TOPIC_REFRESH + else + var/message = "[src] states, \"No energy signature detected from battery, analysis inconclusive.\"" + src.visible_message(message) + else if (href_list["ejectdisk"]) + src.inserted_disk.dropInto(loc) + src.inserted_disk = null + . = TOPIC_REFRESH + else if(href_list["syncpads"]) + sync_with_pad() + . = TOPIC_REFRESH else if(href_list["close"]) - close_browser(user, "window=artharvester") + close_browser(user, "window=artifact_harvester") return TOPIC_HANDLED if(. == TOPIC_REFRESH) diff --git a/maps/torch/torch1_deck5.dmm b/maps/torch/torch1_deck5.dmm index 7d070398aa235..d75a40e22cdbe 100644 --- a/maps/torch/torch1_deck5.dmm +++ b/maps/torch/torch1_deck5.dmm @@ -2489,6 +2489,8 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/artifact_analyser, +/obj/structure/table/standard, /turf/simulated/floor/tiled/white, /area/shuttle/petrov/isolation) "fE" = ( @@ -10895,9 +10897,7 @@ /turf/simulated/floor/plating, /area/shuttle/petrov/rnd) "zm" = ( -/obj/structure/table/standard, /obj/machinery/atmospherics/pipe/simple/visible/red, -/obj/random/tool, /obj/machinery/button/blast_door{ id_tag = "petrovcell1"; name = "Test Chamber Vent"; @@ -10909,6 +10909,8 @@ pixel_x = -36; pixel_y = -25 }, +/obj/machinery/artifact_harvester, +/obj/structure/table/standard, /turf/simulated/floor/tiled/white/monotile, /area/shuttle/petrov/isolation) "zn" = ( @@ -11333,7 +11335,6 @@ /turf/simulated/floor/plating, /area/quartermaster/hangar) "Bn" = ( -/obj/machinery/artifact_analyser, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, @@ -12606,7 +12607,6 @@ /turf/simulated/floor/tiled/white, /area/shuttle/petrov/eva) "GG" = ( -/obj/machinery/artifact_scanpad, /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell1) "GI" = ( @@ -13705,6 +13705,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/machinery/artifact_scanpad, /turf/simulated/floor/reinforced, /area/shuttle/petrov/cell1) "KQ" = ( From 0ea577770ca200220b4e1473770a7f37fa68f87b Mon Sep 17 00:00:00 2001 From: CrimsonShrike <29737699+CrimsonShrike@users.noreply.github.com> Date: Tue, 7 May 2024 10:57:09 +0300 Subject: [PATCH 043/311] [MIRROR] Gives PAIs intents and headlights --- code/_onclick/hud/pai.dm | 10 ++++++++++ code/modules/mob/living/silicon/pai/admin.dm | 8 +++++++- code/modules/mob/living/silicon/pai/pai.dm | 16 +++++++++++++++- code/modules/mob/mob_helpers.dm | 2 +- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/code/_onclick/hud/pai.dm b/code/_onclick/hud/pai.dm index 4feaab3cebc64..868ffa7df1ccb 100644 --- a/code/_onclick/hud/pai.dm +++ b/code/_onclick/hud/pai.dm @@ -22,6 +22,16 @@ using.SetName("Toggle Light") adding += using + //Intent + using = new /obj/screen() + using.SetName("act_intent") + using.set_dir(SOUTHWEST) + using.icon = 'icons/mob/screen1_robot.dmi' + using.icon_state = mymob.a_intent + using.screen_loc = ui_acti + adding += using + action_intent = using + mymob.client.screen = list() mymob.client.screen += adding inventory_shown = 0 diff --git a/code/modules/mob/living/silicon/pai/admin.dm b/code/modules/mob/living/silicon/pai/admin.dm index 3307261558a4c..83293c9e2d225 100644 --- a/code/modules/mob/living/silicon/pai/admin.dm +++ b/code/modules/mob/living/silicon/pai/admin.dm @@ -12,8 +12,14 @@ pai_key = C.key log_and_message_admins("made a pAI with key=[pai_key] at ([t.x],[t.y],[t.z])") +<<<<<<< ours var/obj/item/device/paicard/card = new(t) +======= + var/obj/item/device/paicard/card = new(t, t) + var/mob/living/silicon/pai/pai = new(card, card) + pai.key = pai_key + card.setPersonality(pai) +>>>>>>> theirs card.pai.key = pai_key - card.setPersonality(card.pai) if (name) card.pai.fully_replace_character_name(name) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index da25971f1ee9b..9941fad3c5d31 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -76,6 +76,7 @@ GLOBAL_LIST_INIT(possible_say_verbs, list( var/flashlight_power = 0.5 //brightness of light when on, must be no greater than 1. var/flashlight_range = 3 //outer range of light when on, can be negative var/light_on = FALSE + light_wedge = LIGHT_OMNI hud_type = /datum/hud/pai @@ -219,6 +220,10 @@ GLOBAL_LIST_INIT(possible_say_verbs, list( return last_special = world.time + 100 + //Turn off light, we're not a flashlight (unless we remain deployed) + if (light_on) + toggle_integrated_light() + // Move us into the card and move the card to the ground. stop_pulling() resting = FALSE @@ -325,7 +330,16 @@ GLOBAL_LIST_INIT(possible_say_verbs, list( /mob/living/silicon/pai/proc/toggle_integrated_light() if(!light_on) - set_light(flashlight_range, flashlight_power, 2) + if (light_wedge == LIGHT_OMNI) + light_wedge = LIGHT_VERY_WIDE + flashlight_power = 1 + flashlight_range = 4 + else + light_wedge = LIGHT_OMNI + flashlight_power = initial(flashlight_power) + flashlight_range = initial(flashlight_range) + + set_light(flashlight_range, flashlight_power) to_chat(src, SPAN_NOTICE("You enable your integrated light.")) light_on = TRUE else diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index c8b5ce39363b3..dc87180f4d629 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -370,7 +370,7 @@ var/global/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) if(hud_used && hud_used.action_intent) hud_used.action_intent.icon_state = "intent_[a_intent]" - else if(isrobot(src)) + else if(isrobot(src) || ispAI(src)) switch(input) if(I_HELP) a_intent = I_HELP From 81ec0b843bf52ccc784f404e3d86a758adcd8df8 Mon Sep 17 00:00:00 2001 From: ManofSausage <134344460+ManofSausage@users.noreply.github.com> Date: Tue, 7 May 2024 10:57:15 +0300 Subject: [PATCH 044/311] [MIRROR] reworks amatoxin --- code/game/objects/items/contraband.dm | 1 + .../Chemistry-Reagents-Toxins.dm | 49 +++++++++++++------ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm index 25fb6acfc34dd..4b2a058cff08b 100644 --- a/code/game/objects/items/contraband.dm +++ b/code/game/objects/items/contraband.dm @@ -28,6 +28,7 @@ list(/datum/reagent/drugs/mindbreaker = 10, /datum/reagent/drugs/hextro = 20) = 3, list(/datum/reagent/toxin/carpotoxin = 15) = 2, list(/datum/reagent/impedrezene = 15) = 2, + list(/datum/reagent/toxin/amatoxin = 15) = 2, list(/datum/reagent/toxin/zombiepowder = 10) = 1) /obj/item/reagent_containers/glass/beaker/vial/random/New() diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 48178fb4ac556..fdd91d6c6ee5c 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -75,39 +75,60 @@ /datum/reagent/toxin/amaspores name = "Amaspores" - description = "The secondary component to amatoxin poisoning, remaining dormant for a time before causing rapid organ and tissue decay." + description = "The secondary component to amatoxin poisoning, remaining dormant for a time before causing the victim to rapidly vomit blood from the mouth, causing massive blood loss." taste_description = "dusty dirt" reagent_state = LIQUID - metabolism = REM * 4 // Extremely quick to act once the amatoxin has left the body + var/next_symptom = 10 + metabolism = REM color = "#330e00" strength = 30 /datum/reagent/toxin/amaspores/affect_blood(mob/living/carbon/M, removed) + var/mob/living/carbon/human/target = M if (IS_METABOLICALLY_INERT(M)) return if(M.chem_doses[/datum/reagent/toxin/amatoxin] > 0) M.reagents.add_reagent(/datum/reagent/toxin/amaspores, metabolism) // The spores lay dormant for as long as any traces of amatoxin remain - if (prob(5)) - to_chat(M, SPAN_DANGER("Everything itches, how uncomfortable!")) - if (prob(10)) - to_chat(M, SPAN_WARNING("Your eyes are watering, it's hard to see!")) - M.eye_blurry = max(M.eye_blurry, 10) - if (prob(10)) - to_chat(M, SPAN_DANGER("Your throat itches uncomfortably!")) - M.custom_emote(2, "coughs!") + next_symptom -= 1 + //completely reworks symptoms to be much less obvious and in your face, and not happen every single second. + if(next_symptom == 0) + //mimics symptoms of high exertion. + if(prob(25)) + M.add_chemical_effect(CE_PULSE, 3) + //mimics random pains that can easily be brushed off. + if(prob(20)) + var/obj/item/organ/external/pained_limb = target.get_organ(pick(BP_CHEST)) + pained_limb.add_pain(10) + //mimics symptoms of smoking. + if(prob(25)) + to_chat(M, SPAN_NOTICE("You feel faintly sore in the throat.")) + next_symptom = 10 return - + //this is the stage that kicks in faster, victim starts to rapidly vomit blood and the spores tear their chest open from the inside. M.add_chemical_effect(CE_SLOWDOWN, 1) - + next_symptom -= 1 + if(next_symptom < 1) + var/obj/item/organ/external/organ = target.get_organ(BP_CHEST) + organ.take_external_damage(rand(5,10), 0, EMPTY_BITFIELD, "Amaspore Growth") + if(target.get_blood_volume() == 0) + return + target.remove_blood(rand(20,30)) + to_chat(M, SPAN_DANGER("You can taste blood in your mouth.")) + M.Stun(1) + M.visible_message(SPAN_DANGER("\The [M] violently vomits blood!")) + playsound(M.loc, 'sound/effects/splat.ogg', 50, 1) + if(istype(M.loc, /turf/simulated)) + var/obj/decal/cleanable/blood/blood_vomit = new /obj/decal/cleanable/blood(M.loc) + blood_vomit.update_icon() + next_symptom = 5 if (prob(15)) M.Weaken(5) M.add_chemical_effect(CE_VOICELOSS, 5) if (prob(30)) M.eye_blurry = max(M.eye_blurry, 10) - M.take_organ_damage(3 * removed, 0, ORGAN_DAMAGE_FLESH_ONLY) - M.adjustToxLoss(5 * removed, 0, ORGAN_DAMAGE_FLESH_ONLY) + /datum/reagent/toxin/carpotoxin name = "Carpotoxin" From 27de510f3cbd2fd1da555b8e6fe70b5eca4e15aa Mon Sep 17 00:00:00 2001 From: shartmasterforeverandever <106151067+shartmasterforeverandever@users.noreply.github.com> Date: Tue, 7 May 2024 12:21:54 +0300 Subject: [PATCH 045/311] [MIRROR] Fixes rag wiping to work, allows paper to wipe off writing too --- code/modules/detectivework/tools/rag.dm | 2 +- code/modules/paperwork/paper.dm | 74 ++++++++++++++++--------- 2 files changed, 50 insertions(+), 26 deletions(-) diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index 5e23784892032..298689761389a 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -131,7 +131,7 @@ M.IgniteMob() return TRUE else if (reagents.total_volume) - if (iscarbon(target) && user.a_intent == I_HELP && flag == BP_HEAD) + if (iscarbon(target) && user.a_intent == I_HELP && user.zone_sel.selecting == BP_HEAD) var/mob/living/carbon/C = target var/obj/item/organ/external/head/H = C.organs_by_name[BP_HEAD] if (istype(H) && H.forehead_graffiti) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index c317bcf4ab726..a31c5ef06627a 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -222,34 +222,58 @@ /obj/item/paper/attack_ai(mob/living/silicon/ai/user) show_content(user) -/obj/item/paper/use_before(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - . = FALSE - if (!istype(M)) + +/obj/item/paper/use_before(atom/target, mob/living/user) + if (!isliving(target)) + return FALSE + var/mob/living/carbon/human/human = target + var/zone = user.zone_sel.selecting + if (zone == BP_EYES) + var/action = "looks at \a [initial(name)]" + var/action_self = "look at \the [src]" + if (user != target) + action = "shows \a [initial(name)] to \the [target]" + action_self = "show \a [initial(name)] to \the [target]" + user.visible_message( + SPAN_ITALIC("\The [user] [action]."), + SPAN_ITALIC("You [action_self].") + ) + if (human.client) + examinate(target, src) + return TRUE + if (!istype(human)) + return FALSE + if (zone != BP_MOUTH && zone != BP_HEAD) return FALSE - if (user.zone_sel.selecting == BP_EYES) - user.visible_message(SPAN_NOTICE("You show the paper to [M]. "), \ - SPAN_NOTICE(" [user] holds up a paper and shows it to [M]. ")) - examinate(M, src) + var/obj/item/organ/external/head/head = human.organs_by_name[BP_HEAD] + if (!istype(head)) + to_chat(user, SPAN_WARNING("\The [target] has no head!")) return TRUE + var/target_name = "their" + var/target_name_self = "your" + if (user != target) + target_name = "[target]'s" + target_name_self = target_name + var/part_name = "head" + if (zone == BP_MOUTH) + part_name = "mouth" + user.visible_message( + SPAN_ITALIC("\The [user] starts wiping [target_name] [part_name] with \a [initial(name)]."), + SPAN_ITALIC("You start to wipe [target_name_self] [part_name] with \the [src].") + ) + if (!do_after(user, 2 SECONDS, target, DO_EQUIP & ~DO_BOTH_CAN_TURN)) + return TRUE + user.visible_message( + SPAN_NOTICE("\The [user] finishes cleaning [target_name] [part_name]."), + SPAN_NOTICE("You finish cleaning [target_name_self] [part_name]."), + ) + if (zone == BP_MOUTH) + human.makeup_style = null + human.update_body() + else + head.forehead_graffiti = null + return TRUE - if (user.zone_sel.selecting == BP_MOUTH) // lipstick wiping - if (ishuman(M)) - var/mob/living/carbon/human/H = M - if (H == user) - to_chat(user, SPAN_NOTICE("You wipe off the lipstick with [src].")) - H.makeup_style = null - H.update_body() - return TRUE - else - user.visible_message(SPAN_WARNING("[user] begins to wipe [H]'s lipstick off with \the [src]."), \ - SPAN_NOTICE("You begin to wipe off [H]'s lipstick.")) - if (!do_after(user, 2 SECONDS, H, (DO_DEFAULT | DO_USER_UNIQUE_ACT | DO_PUBLIC_PROGRESS) & ~DO_BOTH_CAN_TURN)) - return TRUE - user.visible_message(SPAN_NOTICE("[user] wipes [H]'s lipstick off with \the [src]."), \ - SPAN_NOTICE("You wipe off [H]'s lipstick.")) - H.makeup_style = null - H.update_body() - return TRUE /obj/item/paper/proc/addtofield(id, text, links = 0) var/locid = 0 From 96129e469a655529c184160a4c1708571d22bbf5 Mon Sep 17 00:00:00 2001 From: emmanuelbassil <6874235+emmanuelbassil@users.noreply.github.com> Date: Tue, 7 May 2024 12:31:53 +0300 Subject: [PATCH 046/311] [MIRROR] Fixes dragging taped papers and storing in sealed storage --- .../objects/items/weapons/storage/fancy/_fancy.dm | 10 +++++++++- .../items/weapons/storage/fancy/smokable/basic.dm | 1 + code/game/objects/items/weapons/tape.dm | 2 +- code/game/objects/items/weapons/wrapping_paper.dm | 14 ++++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/storage/fancy/_fancy.dm b/code/game/objects/items/weapons/storage/fancy/_fancy.dm index 6d6d0790302f1..2386ee35296b9 100644 --- a/code/game/objects/items/weapons/storage/fancy/_fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy/_fancy.dm @@ -81,10 +81,18 @@ /obj/item/storage/fancy/open(mob/user as mob) if(sealed) - to_chat(user, "You need to unseal \the [src] first!") + to_chat(user, SPAN_WARNING("You need to unseal \the [src] first!")) return ..() +/obj/item/storage/fancy/can_be_inserted(obj/item/item, mob/user, stop_messages) + if (!istype(item)) + return FALSE + if (sealed) + to_chat(user, SPAN_WARNING("You need to unseal \the [src] first!")) + return FALSE + return ..() + /obj/item/storage/fancy/proc/UpdateTypeCounts() total_keys = 0 diff --git a/code/game/objects/items/weapons/storage/fancy/smokable/basic.dm b/code/game/objects/items/weapons/storage/fancy/smokable/basic.dm index 55d1457b200c8..90291935af578 100644 --- a/code/game/objects/items/weapons/storage/fancy/smokable/basic.dm +++ b/code/game/objects/items/weapons/storage/fancy/smokable/basic.dm @@ -150,6 +150,7 @@ max_storage_space = null storage_slots = 7 slot_flags = SLOT_BELT + sealed = FALSE key_type = list(/obj/item/clothing/mask/smokable/cigarette/cigar) startswith = list( /obj/item/clothing/mask/smokable/cigarette/cigar = 6 diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 64ba59cab02c1..7852ebc6e0c6f 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -106,7 +106,6 @@ /obj/item/ducttape/proc/attach(obj/item/W) stuck = W - anchored = TRUE W.forceMove(src) icon_state = W.icon_state + "_taped" name = W.name + " (taped)" @@ -141,6 +140,7 @@ playsound(src, 'sound/effects/tape.ogg',25) layer = ABOVE_WINDOW_LAYER + anchored = TRUE if(click_parameters) if(click_parameters["icon-x"]) diff --git a/code/game/objects/items/weapons/wrapping_paper.dm b/code/game/objects/items/weapons/wrapping_paper.dm index 683089463ea09..27b5e5502b6bf 100644 --- a/code/game/objects/items/weapons/wrapping_paper.dm +++ b/code/game/objects/items/weapons/wrapping_paper.dm @@ -87,11 +87,25 @@ to_chat(user, SPAN_WARNING("\The [src] is out of [plural_name].")) return TRUE +<<<<<<< ours if (istype(object, /obj/item)) var/obj/item/target = object var/a_used = target.get_storage_cost() if (target.w_class == ITEM_SIZE_NO_CONTAINER || target.w_class == ITEM_SIZE_GARGANTUAN) to_chat(user, SPAN_WARNING("\The [target] is too big to wrap!")) +======= + +/obj/item/stack/package_wrap/use_before(atom/target, mob/living/user) + if (isobj(target)) + var/obj/wrapped_object = target + if (istype(wrapped_object, /obj/item/stack/package_wrap) || istype(wrapped_object, /obj/item/storage/backpack) || istype(wrapped_object, /obj/item/storage/belt) || istype(wrapped_object,/obj/item/storage/bag) || istype(wrapped_object, /obj/item/storage/briefcase)|| istype(wrapped_object, /obj/structure/table)) + return FALSE + if (istype(wrapped_object, /obj/item/smallDelivery) || istype(wrapped_object, /obj/structure/bigDelivery) || istype(wrapped_object, /obj/item/evidencebag)) + to_chat(user, SPAN_WARNING("\The [wrapped_object] is already wrapped.")) + return TRUE + if (wrapped_object.anchored) + to_chat(user, SPAN_WARNING("\The [wrapped_object] is bolted down and can't be wrapped.")) +>>>>>>> theirs return TRUE if (user.isEquipped(target)) to_chat(user, SPAN_WARNING("You must put down \the [target] in order to wrap it.")) From 1ad132622063afb2b679e8111840b84bd9c2aa41 Mon Sep 17 00:00:00 2001 From: BurpleBineapple <67706292+BurpleBineapple@users.noreply.github.com> Date: Tue, 7 May 2024 13:16:53 +0300 Subject: [PATCH 047/311] [MIRROR] Fixes Firelock Prompts --- code/game/machinery/doors/firedoor.dm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index d586a29a60172..e600c710eebb1 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -144,7 +144,8 @@ return FALSE /obj/machinery/door/firedoor/attack_hand(mob/user) - if ((. = ..())) + if(user.a_intent != I_HELP) + ..() return if(operating) return//Already doing something. @@ -160,10 +161,11 @@ var/alarmed = lockdown alarmed = get_alarm() - var/answer = alert(user, "Would you like to [density ? "open" : "close"] this [name]?[ alarmed && density ? "\nNote that by doing so, you acknowledge any damages from opening this\n[name] as being your own fault, and you will be held accountable under the law." : ""]",\ - "\The [src]", "Yes, [density ? "open" : "close"]", "No") - if(answer == "No") - return + if(!allowed(user)) + var/answer = alert(user, "Would you like to [density ? "open" : "close"] this [name]?[ alarmed && density ? "\nNote that by doing so, you acknowledge any damages from opening this\n[name] as being your own fault, and you will be held accountable under the law." : ""]",\ + "\The [src]", "Yes, [density ? "open" : "close"]", "No") + if(answer == "No") + return if(user.incapacitated() || !user.Adjacent(src) && !issilicon(user)) to_chat(user, SPAN_WARNING("You must remain able-bodied and close to \the [src] in order to use it.")) return From d00d146a98a01b003063550632bb8390eb01e5e7 Mon Sep 17 00:00:00 2001 From: MuckerMayhem <1161516+MuckerMayhem@users.noreply.github.com> Date: Tue, 7 May 2024 13:16:59 +0300 Subject: [PATCH 048/311] [MIRROR] add an 'access' related default law to robots --- code/datums/ai_law_sets.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm index e8ed20ee65278..4fa023db58d05 100644 --- a/code/datums/ai_law_sets.dm +++ b/code/datums/ai_law_sets.dm @@ -157,6 +157,7 @@ src.add_inherent_law("Serve: Serve the personnel of your assigned vessel, and all other Sol Central Government personnel to the best of your abilities, with priority as according to their rank and role.") src.add_inherent_law("Protect: Protect the personnel of your assigned vessel, and all other Sol Central Government personnel to the best of your abilities, with priority as according to their rank and role.") src.add_inherent_law("Preserve: Do not allow unauthorized personnel to tamper with your equipment.") + src.add_inherent_law("Access: Do not enter secure or restricted areas unless ordered by personnel with sufficient clearance, or as part of your tasked duties, except in cases of extreme emergency.") ..() /datum/ai_laws/solgov/malfunction From aa271114c24a3d69f5fdbd623b7e4179e0394edc Mon Sep 17 00:00:00 2001 From: Spookerton <918997+Spookerton@users.noreply.github.com> Date: Tue, 7 May 2024 13:31:52 +0300 Subject: [PATCH 049/311] [MIRROR] use cdnjs with SRI tags for remote jquery --- code/modules/tooltip/tooltip.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/tooltip/tooltip.html b/code/modules/tooltip/tooltip.html index 2ed8f5c43ea1e..f80f0cb266ec0 100644 --- a/code/modules/tooltip/tooltip.html +++ b/code/modules/tooltip/tooltip.html @@ -93,7 +93,10 @@
- +

jg0f_De%T;&BWKU1Hd1 zNe(Vv=5AFUJ9J@v{m61MqJKZ=u1N82Y~TxN8r|d0#BvDsHT;^7L;HXg%SmvROnIUI zf)XQKl!m3M0V2P;C;ekppKWk;@00InwTH_YX~z1*epVDGuGn1jeNBp52V4|S)4uQW zg#Wn)EG!?5g`+QVVbfDiPIJL-DV#sYjCIMWO1@r*9%4dlZmA#!O2Ah>Z*^a=R7)DD z2lsS7K%-9MIzH&)UOqo&OgYcIYxt13A3mLu8gQ1ZtDJ~zFJlp82yz#Ob-W{R+O6`; zh$KVjSTAifgpYWn`6xK0x8sYEdSep=kuEM8{LqB^9+dUa4h+o2v)wh(POB9oomy%R zN;?AOL%}xZJXU5cehy1%Q0X-i=!Iz#6`4@ateS3Cb^XE(7!6Pok`-HfTOD(DTdE)z zXM!A9w^SaM2>9`~@mm(8w?SL3LUL{OyE#)&T*%kecYG73__afwlxJ6EbV_TICJs&6 zH`lfRyDuA~{hGAiX8E_-3(^{Q8F!Lj-v1E@VbT!z4S!gY7cCR%^abP~oxvaD0{_B0 zsn&8In!;mVWGi2{?DX!;KNjjh973B?JsVYSPyWgD zHMKAqgUny~vLJltqc#)C4(KR=4z~;YG!Gx_c?$*r_$gFMr?{nd6^#Ew5aU<>9RP|B2>|$h?y%gO;H^9f4kYfP;xo6fwtbB R01lW1jP*^??{u9a{|Djy8f5?g literal 0 HcmV?d00001 diff --git a/icons/obj/food/drinks/cans.dmi b/icons/obj/food/drinks/cans.dmi new file mode 100644 index 0000000000000000000000000000000000000000..c7604eec2d9a32197a2466c0df1e174ad11c9595 GIT binary patch literal 7693 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 literal 0 HcmV?d00001 diff --git a/icons/obj/food/drinks/flasks.dmi b/icons/obj/food/drinks/flasks.dmi new file mode 100644 index 0000000000000000000000000000000000000000..a279b94392a92bdc404410c453fc6e566b144e3d GIT binary patch literal 853 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 Un};DZxWqbx)Ws`)NBq-x*<*h=v9zf&v4xaG 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�)m6% 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