From 4178dbb094af00abf7bd538bbb7a8bda4426156f Mon Sep 17 00:00:00 2001 From: LordNest Date: Fri, 26 Jan 2024 00:20:20 +0400 Subject: [PATCH 01/18] =?UTF-8?q?=D0=A2=D1=80=D0=B8=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D1=81=D0=BA=D0=BE=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mods/antagonists/_antagonists.dme | 1 + mods/antagonists/code/operative.dm | 2 +- mods/antagonists/code/traitor.dm | 121 ++++++++++++++++++++--------- mods/antagonists/code/uplink.dm | 87 +++++++++++++++++++++ 4 files changed, 172 insertions(+), 39 deletions(-) create mode 100644 mods/antagonists/code/uplink.dm diff --git a/mods/antagonists/_antagonists.dme b/mods/antagonists/_antagonists.dme index f571dcf97e1e1..d15bcfb945540 100644 --- a/mods/antagonists/_antagonists.dme +++ b/mods/antagonists/_antagonists.dme @@ -9,5 +9,6 @@ #include "code/operative.dm" #include "code/traitor.dm" #include "code/teleportation.dm" +#include "code/uplink.dm" #endif diff --git a/mods/antagonists/code/operative.dm b/mods/antagonists/code/operative.dm index 9b3644ea5150b..a2fe9515d1a12 100644 --- a/mods/antagonists/code/operative.dm +++ b/mods/antagonists/code/operative.dm @@ -59,6 +59,6 @@ /obj/item/clothing/mask/gas/syndicate, /obj/item/storage/backpack/dufflebag/syndie_kit/plastique, /obj/item/storage/box/anti_photons, - /obj/item/device/encryptionkey/syndicate, + /obj/item/device/encryptionkey/syndie_full, /obj/item/card/emag ) diff --git a/mods/antagonists/code/traitor.dm b/mods/antagonists/code/traitor.dm index 15331e19b5362..ad58cade54310 100644 --- a/mods/antagonists/code/traitor.dm +++ b/mods/antagonists/code/traitor.dm @@ -42,16 +42,6 @@ airlock.ex_act(1) qdel(src) -// -// Uplink part -// - -/datum/uplink_item/item/tools/door_charge - name = "Door Charge" - desc = "Special explosive, which can be planted on doors and will explode when somebody will open this door." - item_cost = 14 - path = /obj/item/door_charge - // // BLUESPACE JAUNTER // @@ -107,31 +97,10 @@ to_chat(user, "You can't link [src] to [target]!") update_icon() -// -// Uplink part -// - /obj/item/storage/box/syndie_kit/jaunter startswith = list(/obj/item/device/syndietele, /obj/item/device/syndiejaunter) -/datum/uplink_item/item/tools/jaunter - name = "Bluespace Jaunter" - item_cost = 42 - path = /obj/item/storage/box/syndie_kit/jaunter - desc = "Disposable one way teleportation device. Use with care. Don't forget to link jaunter to the beacon!" - - -// -// Psi Amp - Uplink part (Here because turned off by Bay12) -// - -/datum/uplink_item/item/visible_weapons/psi_amp - name = "Cerebroenergetic Psionic Amplifier" - item_cost = 50 - path = /obj/item/clothing/head/helmet/space/psi_amp/lesser - desc = "A powerful, illegal psi-amp. Boosts latent psi-faculties to extremely high levels." - // // HOLOBOMBS // @@ -215,12 +184,88 @@ startswith = list(/obj/item/device/holobomb = 5, /obj/item/paper/holobomb = 1) // -// Holobombs - Uplink part +// Poison // -/datum/uplink_item/item/tools/holobomb - name = "Box of holobombs" - item_cost = 32 - path =/obj/item/storage/box/syndie_kit/holobombs - desc = "Contains 5 holobomb and instruction. \ - A bomb that changes appearance, and can destroy some hands." +/obj/item/storage/box/syndie_kit/bioterror + startswith = list( + /obj/item/reagent_containers/glass/beaker/vial/random/toxin/bioterror = 7 + ) + +/obj/item/reagent_containers/glass/beaker/vial/random/toxin/bioterror + random_reagent_list = list( + list(/datum/reagent/drugs/mindbreaker = 10, /datum/reagent/drugs/hextro = 20) = 2, + list(/datum/reagent/toxin/carpotoxin = 30) = 2, + list(/datum/reagent/impedrezene = 30) = 2, + list(/datum/reagent/mutagen = 30) = 2, + list(/datum/reagent/toxin/amatoxin = 30) = 2, + list(/datum/reagent/drugs/cryptobiolin = 30) = 2, + list(/datum/reagent/impedrezene = 30) = 2, + list(/datum/reagent/toxin/potassium_chlorophoride = 30) = 2, + list(/datum/reagent/acid/polyacid = 30) = 2, + list(/datum/reagent/radium = 30) = 2, + list(/datum/reagent/toxin/zombiepowder = 30) = 1) + +// Key + +/obj/item/device/encryptionkey/syndie_full + icon_state = "cypherkey" + channels = list("Mercenary" = 1, "Command" = 1, "Security" = 1, "Engineering" = 1, "Exploration" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1) + origin_tech = list(TECH_ESOTERIC = 3) + syndie = 1 + +// Stimm + +/obj/item/reagent_containers/hypospray/autoinjector/stimpack + name = "stimpack" + band_color = COLOR_PINK //inf //was: COLOR_DARK_GRAY + starts_with = list(/datum/reagent/nitritozadole = 5) + +/datum/reagent/nitritozadole + name = "Nitritozadole" + description = "Nitritozadole is a very dangerous mix, which can increase your speed temporarly." + taste_description = "metal" + reagent_state = LIQUID + color = "#ff2681" + metabolism = REM * 0.20 + overdose = REAGENTS_OVERDOSE / 3 + value = 4.5 + +/datum/reagent/nitritozadole/affect_blood(mob/living/carbon/M, alien, removed) + if(alien == SPECIES_DIONA) + return + + if(prob(2)) + to_chat(M, SPAN_DANGER("My heart gonna break out from the chest!")) + M.stun_effect_act(0, 15, BP_CHEST, "heart damage") //a small pain without damage + if(prob(15)) + for(var/obj/item/organ/internal/heart/H in M.internal_organs) + H.damage += 1 + + if(prob(5)) + M.emote(pick("twitch", "blink_r", "shiver")) + M.add_chemical_effect(CE_SPEEDBOOST, 1.5) + M.add_chemical_effect(CE_PULSE, 3) + + +// Radlaser + +/obj/item/device/scanner/health/syndie + name = "health analyzer" + desc = "A hand-held body scanner able to distinguish vital signs of the subject." + item_flags = ITEM_FLAG_NO_BLUDGEON + matter = list(MATERIAL_ALUMINIUM = 200) + origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ESOTERIC = 2) + +/obj/item/device/scanner/health/syndie/scan(mob/living/carbon/human/A, mob/user) + playsound(src, 'sound/effects/fastbeep.ogg', 20) + if(!istype(A)) + return + + A.apply_damage(30, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) + +/obj/item/device/scanner/health/syndie/examine(mob/user) + . = ..() + if (isobserver(user) || (user.mind && user.mind.special_role != null) || user.skill_check(SKILL_DEVICES, SKILL_MASTER) || user.skill_check(SKILL_MEDICAL, SKILL_MASTER)) + to_chat(user, "The scanner contacts do not look as they should. ") + return diff --git a/mods/antagonists/code/uplink.dm b/mods/antagonists/code/uplink.dm new file mode 100644 index 0000000000000..2944d5670568e --- /dev/null +++ b/mods/antagonists/code/uplink.dm @@ -0,0 +1,87 @@ +// +// DOOR CHARGE Uplink part +// + +/datum/uplink_item/item/tools/door_charge + name = "Door Charge" + desc = "Special explosive, which can be planted on doors and will explode when somebody will open this door." + item_cost = 14 + path = /obj/item/door_charge + +// +// JAINTER Uplink part +// + +/datum/uplink_item/item/tools/jaunter + name = "Bluespace Jaunter" + item_cost = 42 + path = /obj/item/storage/box/syndie_kit/jaunter + desc = "Disposable one way teleportation device. Use with care. Don't forget to link jaunter to the beacon!" + +// +// Psi Amp - Uplink part (Here because turned off by Bay12) +// + +/datum/uplink_item/item/visible_weapons/psi_amp + name = "Cerebroenergetic Psionic Amplifier" + item_cost = 50 + path = /obj/item/clothing/head/helmet/space/psi_amp/lesser + desc = "A powerful, illegal psi-amp. Boosts latent psi-faculties to extremely high levels." + +// +// Holobombs - Uplink part +// + +/datum/uplink_item/item/tools/holobomb + name = "Box of holobombs" + item_cost = 32 + path =/obj/item/storage/box/syndie_kit/holobombs + desc = "Contains 5 holobomb and instruction. \ + A bomb that changes appearance, and can destroy some hands." + +// +// С-4 pack - Uplink part +// + +/datum/uplink_item/item/tools/plastique_bag + name = "Box of holobombs" + item_cost = 48 + path =/obj/item/storage/backpack/dufflebag/syndie_kit/plastique + desc = "Contains 6 C-4 charges at 50% discount." + +// +// Poison - Uplink part +// + +/datum/uplink_item/item/tools/bioterror + name = "Poisons kit" + desc = "A box, containing 7 vials of random and very deadly poisons." + item_cost = 48 + path = /obj/item/storage/box/syndie_kit/bioterror + +// +// Encrypt key - Uplink part +// + +/datum/uplink_item/item/tools/encryptionkey_full + name = "Special Encryption Key" + desc = "This headset encryption key will allow you listen and speak on any channel! Use a screwdriver on your headset to exchange keys." + item_cost = 24 + path = /obj/item/device/encryptionkey/syndie_full + +// Stimpack + +/datum/uplink_item/item/tools/stimpack + name = "Stimpack" + desc = "Autoinjector, containing 5u of experimental stimulants, that will increase your speed temporarly." + item_cost = 18 + antag_costs = list(MODE_MERCENARY = 12) + path = /obj/item/reagent_containers/hypospray/autoinjector/stimpack + +// Radlaser + +/datum/uplink_item/item/tools/radlaser + name = "Radioactive Microlaser" + item_cost = 18 + path = /obj/item/device/scanner/health/syndie + desc = "A tiny microlaser, hidden in health analyzer, that can irradiate your targets." From 9d40fc35d4ef30771fbbb62766d1d5669a2f194a Mon Sep 17 00:00:00 2001 From: LordNest Date: Sat, 27 Jan 2024 09:58:36 +0400 Subject: [PATCH 02/18] =?UTF-8?q?=D1=88=D0=BA=D0=B0=D1=84=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- maps/sierra/z1-z5_sierra.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/sierra/z1-z5_sierra.dmm b/maps/sierra/z1-z5_sierra.dmm index 54b85115f4edc..4ebbb817441d4 100644 --- a/maps/sierra/z1-z5_sierra.dmm +++ b/maps/sierra/z1-z5_sierra.dmm @@ -29818,7 +29818,7 @@ "eqV" = ( /obj/floor_decal/corner/red/mono, /obj/structure/closet/secure_closet{ - name = "Security Equipment Locker"; + name = "Checkpoint Locker"; req_access = list("ACCESS_SECURITY") }, /obj/floor_decal/industrial/outline/yellow, From 7e461631f769acda86261777cfcbb40804011797 Mon Sep 17 00:00:00 2001 From: LordNest Date: Sat, 27 Jan 2024 10:14:48 +0400 Subject: [PATCH 03/18] =?UTF-8?q?=D0=94=D1=83=D0=B1=D0=BB=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=BF=D0=B8=D0=BB=D0=B8=D0=B2=D0=B0=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mods/hairs_ports/code/_accessory_hair.dm | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/mods/hairs_ports/code/_accessory_hair.dm b/mods/hairs_ports/code/_accessory_hair.dm index 0e0bbeab39175..3dfd957cd056c 100644 --- a/mods/hairs_ports/code/_accessory_hair.dm +++ b/mods/hairs_ports/code/_accessory_hair.dm @@ -41,9 +41,6 @@ /datum/sprite_accessory/hair/modpack_hairs_port/aurora_belenko name = "Belenko" icon_state = "hair_belenko" -/datum/sprite_accessory/hair/modpack_hairs_port/aurora_braid_grande - name = "Braid Grande" - icon_state = "hair_braid_grande" /datum/sprite_accessory/hair/modpack_hairs_port/aurora_afrobig name = "Afro Big" icon_state = "hair_afrobig" @@ -51,9 +48,6 @@ /datum/sprite_accessory/hair/modpack_hairs_port/aurora_bangshort name = "Bang Short" icon_state = "hair_bangshort" -/datum/sprite_accessory/hair/modpack_hairs_port/aurora_braid_medium - name = "Braid Medium" - icon_state = "hair_braid_medium" /datum/sprite_accessory/hair/modpack_hairs_port/aurora_bun_casual name = "Bun Casual" icon_state = "hair_bun_casual" @@ -116,9 +110,6 @@ /datum/sprite_accessory/hair/modpack_hairs_port/inf_pigtails_kagami name = "Pigtails Kagami" icon_state = "hair_pigtails_kagami" -/datum/sprite_accessory/hair/modpack_hairs_port/inf_ponytail_hayasaka - name = "Ponytail Hayasaka" - icon_state = "hair_ponytail_hayasaka" /datum/sprite_accessory/hair/modpack_hairs_port/inf_roxy name = "Roxy" icon_state = "hair_roxy" @@ -167,9 +158,6 @@ /datum/sprite_accessory/hair/modpack_hairs_port/inf_pigtails_low name = "Pigtail Slow" icon_state = "hair_pigtails_low" -/datum/sprite_accessory/hair/modpack_hairs_port/inf_ponytailpiky - name = "Ponytail Spiky" - icon_state = "hair_ponytailpiky" /datum/sprite_accessory/hair/modpack_hairs_port/inf_toph name = "Toph" icon_state = "hair_toph" From af91fa7a25c5d80f973840338d89b94d443f2c86 Mon Sep 17 00:00:00 2001 From: LordNest Date: Sat, 27 Jan 2024 12:57:30 +0400 Subject: [PATCH 04/18] =?UTF-8?q?=D0=9A=D0=BE=D1=81=D1=82=D1=8B=D0=BB?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=BE=D0=B8=20=D0=BA=D0=BE=D1=81=D1=82=D1=8B?= =?UTF-8?q?=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mods/antagonists/_antagonists.dme | 1 + mods/antagonists/code/blackout.dm | 80 ++++++++++++++++++++++++ mods/antagonists/code/uplink.dm | 6 ++ mods/antagonists/icons/obj/blackout.dmi | Bin 0 -> 619 bytes packs/infinity/icons/obj/items.dmi | Bin 24210 -> 24259 bytes 5 files changed, 87 insertions(+) create mode 100644 mods/antagonists/code/blackout.dm create mode 100644 mods/antagonists/icons/obj/blackout.dmi diff --git a/mods/antagonists/_antagonists.dme b/mods/antagonists/_antagonists.dme index d15bcfb945540..911fe25f76179 100644 --- a/mods/antagonists/_antagonists.dme +++ b/mods/antagonists/_antagonists.dme @@ -3,6 +3,7 @@ #include "_antagonists.dm" +#include "code/blackout.dm" #include "code/ert.dm" #include "code/mercenary.dm" #include "code/revolutionary.dm" diff --git a/mods/antagonists/code/blackout.dm b/mods/antagonists/code/blackout.dm new file mode 100644 index 0000000000000..a2ae602143c73 --- /dev/null +++ b/mods/antagonists/code/blackout.dm @@ -0,0 +1,80 @@ +// Too complex, so different file for it +// Blackout tool, used to trigger massive electricity outttage on ship or station, including connected levels. +// It may have additional shots to use, but currently balanced to one shot. + +/datum/uplink_item/item/tools/blackout + name = "High Pulse Electricity Outage Tool" + item_cost = 36 + path = /obj/item/device/blackout + desc = "A device which can create power surge in terminal, spread it in power network and temporally creating blackout." + +/obj/item/device/blackout + name = "Energy network scanner" + desc = "A device with several metal antennas. It looks like a scanner or multimeter, but this one is completely black." + icon = 'mods/antagonists/icons/obj/blackout.dmi' + icon_state = "device_blackout-off" + + var/severity = 2 + var/shots = 1 + var/lastUse = 0 + var/Cooldown = (20 MINUTES) + +/obj/item/device/blackout/afterattack(obj/target as obj, mob/user as mob, proximity) + if(!proximity) + return + if(!istype(target)) + return + + target.add_fingerprint(user) + + if(istype(target, /obj/machinery/power/terminal)) + var/obj/machinery/power/terminal/terminal = target + + if(!terminal.powernet) + to_chat(user, SPAN_WARNING("This power station isn't connected to power net.")) + return + + if(check_to_use()) + to_chat(user, SPAN_WARNING("Device does not respond. Perhaps you need to try later.")) + return + + if(!shots) + to_chat(user, SPAN_WARNING("Device does not respond.")) + return + + hacktheenergy(terminal, user) + +/obj/item/device/blackout/proc/hacktheenergy(obj/machinery/power/terminal/terminal_in, mob/user) + if(!istype(terminal_in) || !user) return // security + + src.audible_message("Synthesized recording states, \"-- Вас приветствует Ассистент КиДжи. Начало. Производится подключение к терминалу. --\"") + if(!do_after(user, 60, terminal_in)) return + + src.audible_message("Synthesized recording states, \"-- Подключение к терминалу успешно. Начато получение информации о конфигурации электросети... --\"") + if(!do_after(user, 160, terminal_in)) return + + src.audible_message("Synthesized recording states, \"-- Сканирование корабельной электросети успешно. Начинается процедура перегрузки корабельной электросети. Не прерывайте работу терминала. --\"") + icon_state = "device_blackout-on" + playsound(src, 'sound/items/goggles_charge.ogg', 50, 1) + + if(do_after(user, 80, terminal_in)) + src.audible_message("Synthesized recording states, \"-- Перегрузка завершена. Можете отсоединять терминал. \ + Утилизируйте устройство после использования. --\"") + + shots-- + Cooldown = world.time + + power_failure() + + log_and_message_admins("[key_name(usr)] used \the [src.name] on \the [admin_jump_link(terminal_in, src)] to shutdown entire ship.") + + icon_state = "device_blackout-off" + +/obj/item/device/blackout/proc/check_to_use() + return lastUse <= (world.time - Cooldown) + +/obj/item/device/blackout/examine(mob/user) + . = ..() + if (isobserver(user) || (user.mind && user.mind.special_role != null) || user.skill_check(SKILL_DEVICES, SKILL_EXPERIENCED) || user.skill_check(SKILL_ELECTRICAL, SKILL_EXPERIENCED)) + to_chat(user, "This device appears to be able to send a signal to overload the power grid. ") + return diff --git a/mods/antagonists/code/uplink.dm b/mods/antagonists/code/uplink.dm index 2944d5670568e..0d07d687bfd62 100644 --- a/mods/antagonists/code/uplink.dm +++ b/mods/antagonists/code/uplink.dm @@ -85,3 +85,9 @@ item_cost = 18 path = /obj/item/device/scanner/health/syndie desc = "A tiny microlaser, hidden in health analyzer, that can irradiate your targets." + +/datum/uplink_item/item/tools/blackout + name = "High Pulse Electricity Outage Tool" + item_cost = 24 + path = /obj/item/device/blackout + desc = "A device which can create power surge in terminal, spread it in power network and temporally creating blackout." diff --git a/mods/antagonists/icons/obj/blackout.dmi b/mods/antagonists/icons/obj/blackout.dmi new file mode 100644 index 0000000000000000000000000000000000000000..a0d4df3eeef5cc1959bb667807820309b252e3fa GIT binary patch literal 619 zcmV-x0+juUP)eL_t(oh3%KoZo@DL zMeQ2gW=`F$?Y1oc|DnU~GdKz&N+a`_gWwWJ4%fM@!yEGhG&mV^7YuosE}Vkn=G5}~ zye3$2BAybw9j5>U39Gqz13-*YhL*eYW%xMTaR5khys{GX98-*Wyc%(Ofhl3WWwt=& zpQ|}3xP9HF2Jj#*G=Qhb_b`F15a4@@34Sya6oq_&*BSk4C*TXTC&=^}V@9@sl9vRM zfKmY!r;B77hUqf>8F5D!2}y{FRjB0Ukmh+#{42l|f|t1$I3-jCLIEA8L&6f7yKc3- zWR$Su^^XCT{21~6>wEVH-5+#+(EY(K{K5L&v$gp(x8v6C`P#mv)p3!+78m`&5`}7i zuwLPU33Liu9!{;WJwf*ed+-Or2XX)REgl5k{lQWF!9QErCv};y?lk}a002ovPDHLk FV1gbA0gnIx literal 0 HcmV?d00001 diff --git a/packs/infinity/icons/obj/items.dmi b/packs/infinity/icons/obj/items.dmi index 64c4dcf6f4a00026678ff245949b9830dee5caa5..3d7cc108faef4c83aa5a957a7a277ac037c2d0b6 100644 GIT binary patch literal 24259 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⋓A5egJ+zM; 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 From 8bf871b26368543a9909251b00ad1dea7b71804f Mon Sep 17 00:00:00 2001 From: LordNest Date: Sat, 27 Jan 2024 16:13:05 +0400 Subject: [PATCH 05/18] =?UTF-8?q?=D0=A0=D0=B5=D0=BA=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- maps/sierra/z1-z5_sierra.dmm | 1 + mods/leroy_beasts/README.md | 81 +++++++ mods/leroy_beasts/_leroy_beasts.dm | 4 +- mods/leroy_beasts/_leroy_beasts.dme | 2 + mods/leroy_beasts/code/beasts.dm | 29 --- mods/leroy_beasts/code/commanded.dm | 161 ++++++++++++++ mods/leroy_beasts/code/datums.dm | 319 ++++++++++++++++++++++++++++ packs/infinity/mobs/simple/fox.dm | 1 + 8 files changed, 567 insertions(+), 31 deletions(-) create mode 100644 mods/leroy_beasts/README.md create mode 100644 mods/leroy_beasts/code/commanded.dm create mode 100644 mods/leroy_beasts/code/datums.dm diff --git a/maps/sierra/z1-z5_sierra.dmm b/maps/sierra/z1-z5_sierra.dmm index 4ebbb817441d4..dd3484f8607df 100644 --- a/maps/sierra/z1-z5_sierra.dmm +++ b/maps/sierra/z1-z5_sierra.dmm @@ -92673,6 +92673,7 @@ d2 = 4; icon_state = "0-4" }, +/mob/living/simple_animal/hostile/commanded/rex, /turf/simulated/floor/wood/mahogany, /area/crew_quarters/heads/office/hos/cobed) "nSz" = ( diff --git a/mods/leroy_beasts/README.md b/mods/leroy_beasts/README.md new file mode 100644 index 0000000000000..ccf926ad802e3 --- /dev/null +++ b/mods/leroy_beasts/README.md @@ -0,0 +1,81 @@ + +#### Список PRов: + +- https://github.com/SierraBay/SierraBay12/pull/##### + + + +## Мод-пример + +ID мода: LEROY_BEASTS + + +### Описание мода + +Этот мод служит примером для разработчиков и существует лишь для того, +чтобы его можно было легко скопировать и вставить в другое место. + + +### Изменения *кор кода* + +- `Отсутствуют` + + +### Оверрайды + +- `Отсутствуют` + + + +### Дефайны + +- `Отсутствуют` + + +### Используемые файлы, не содержащиеся в модпаке + +- `Отсутствуют` + + +### Авторы: + +LordNest (Code) +PapaLeroy (Sprites) +Zhuzhila (AI) + diff --git a/mods/leroy_beasts/_leroy_beasts.dm b/mods/leroy_beasts/_leroy_beasts.dm index 1b4c5dfaa6da6..937c86168bbc6 100644 --- a/mods/leroy_beasts/_leroy_beasts.dm +++ b/mods/leroy_beasts/_leroy_beasts.dm @@ -1,5 +1,5 @@ /singleton/modpack/leroy_beasts - name = "Leroy's Beasts" - desc = "Набор различных зверей от Лероя: мейн-кун, каракал, несколько пород собак, горилла, лягушка, кролик и много других." + name = "Beasts pack and AI" + desc = "Набор различных зверей от Лероя: мейн-кун, каракал, несколько пород собак, горилла, лягушка, кролик и много других. Также вставлен ИИ от Жужжилы." author = "Papa Leroy#5647" diff --git a/mods/leroy_beasts/_leroy_beasts.dme b/mods/leroy_beasts/_leroy_beasts.dme index 8271737bdb306..a83527f22b832 100644 --- a/mods/leroy_beasts/_leroy_beasts.dme +++ b/mods/leroy_beasts/_leroy_beasts.dme @@ -3,5 +3,7 @@ #include "_leroy_beasts.dm" #include "code/beasts.dm" +#include "code/commanded.dm" +#include "code/datums.dm" #endif diff --git a/mods/leroy_beasts/code/beasts.dm b/mods/leroy_beasts/code/beasts.dm index a7ce2a9d5cbcf..c135a1c49a7ea 100644 --- a/mods/leroy_beasts/code/beasts.dm +++ b/mods/leroy_beasts/code/beasts.dm @@ -88,19 +88,6 @@ emote_hear = list("woofs", "barks") speak = list("Bark!", "Woof!") -/mob/living/simple_animal/friendly/dogs/german - name = "german shepherd" - real_name = "german shepherd" - desc = "That very type of a dog that appears in everybody's mind in the first place." - icon_state = "german_shepherd" - icon_living = "german_shepherd" - icon_dead = "german_shepherd_dead" - -/mob/living/simple_animal/friendly/dogs/german/black - icon_state = "german_shepherd_black" - icon_living = "german_shepherd_black" - icon_dead = "german_shepherd_black_dead" - /mob/living/simple_animal/friendly/dogs/pug // Some kind of solitude is measured out in you name = "pug" real_name = "pug" @@ -115,14 +102,6 @@ ai_holder = /datum/ai_holder/simple_animal/passive/corgi say_list_type = /datum/say_list/corgi //we don't need repeat main say list here, aren't we? -/mob/living/simple_animal/friendly/dogs/golden_retriever - name = "golden retriever" - real_name = "golden retriever" - desc = "Your perfect companion." - icon_state = "golden_retriever" - icon_living = "golden_retriever" - icon_dead = "golden_retriever_dead" - /mob/living/simple_animal/friendly/dogs/shiba_inu name = "shiba inu" real_name = "shiba inu" @@ -131,14 +110,6 @@ icon_living = "shiba_inu" icon_dead = "shiba_inu_dead" -/mob/living/simple_animal/friendly/dogs/bullterrier - name = "bullterrier" - real_name = "bullterrier" - desc = "Don't tempt this perky guy." - icon_state = "bullterrier" - icon_living = "bullterrier" - icon_dead = "bullterrier_dead" - // Big Mon'keigh, ahem, just a normal gorilla /mob/living/simple_animal/hostile/gorilla diff --git a/mods/leroy_beasts/code/commanded.dm b/mods/leroy_beasts/code/commanded.dm new file mode 100644 index 0000000000000..a9b65a8ad6f98 --- /dev/null +++ b/mods/leroy_beasts/code/commanded.dm @@ -0,0 +1,161 @@ +/mob/living/simple_animal/hostile/commanded/rex + var/list/possible_natural_weapon // Rex can attack with random natural weapon + name = "Rex" + desc = "A large.... dog?" + + icon_state = "lavadog" + icon_living = "lavadog" + icon_dead = "lavadog_dead" + + + health = 45 + maxHealth = 45 + speed = 8 + + density = TRUE + + natural_weapon = /obj/item/natural_weapon/bite + possible_natural_weapon = list(/obj/item/natural_weapon/bite, /obj/item/natural_weapon/claws) + can_escape = TRUE + + max_gas = list(GAS_PHORON = 10, GAS_CO2 = 10) + + response_help = "pets" + response_harm = "bites" + response_disarm = "pushes" + + known_commands = list("stay", "stop", "attack", "follow", "guard", "forget master", "obey", "forget target") + ai_holder = /datum/ai_holder/simple_animal/melee/commanded + +/mob/living/simple_animal/hostile/commanded/rex/get_natural_weapon() + if(natural_weapon) + qdel(natural_weapon) + natural_weapon = pick(possible_natural_weapon) + return ..() + +/mob/living/simple_animal/hostile/commanded/rex/hear_say(message, verb = "says", datum/language/language = null, alt_name = "", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol) + + if(!master && istype(speaker, /mob/living/carbon/human)) + var/mob/living/carbon/human/S = speaker + if ("ACCESS_HEAD_OF_SECURITY" in S.GetAccess()) + master = S + ai_holder.leader = S + friends |= weakref(S) + allowed_targets -= S + S.guards += src + ..() + +/mob/living/simple_animal/hostile/commanded/rex/attackby(obj/item/O as obj, mob/user as mob) + if(istype(O, /obj/item/reagent_containers/food/snacks/meat) && stat != DEAD) + if(user != master) + visible_message(SPAN_WARNING("\The [src] started to growl")) + else + visible_message(SPAN_NOTICE("\The [user] start feeding the [src] [O]")) + if(do_after(user, 30, src)) + var/prev_AI_busy = ai_holder.busy + set_AI_busy(FALSE) + heal_overall_damage(10, 10) + qdel(O) + visible_message(SPAN_NOTICE("\The [src] ate [O]")) + set_AI_busy(prev_AI_busy) + + else + ..() + +/mob/living/simple_animal/hostile/commanded/rex/attack_hand(mob/living/carbon/human/target) + if(target.a_intent != I_HELP && retribution) //assume he wants to hurt us. + var/dealt_damage = harm_intent_damage + var/harm_verb = response_harm + if(ishuman(target) && target.species) + var/datum/unarmed_attack/attack = target.get_unarmed_attack(src) + dealt_damage = max(dealt_damage, attack.damage) + harm_verb = pick(attack.attack_verb) + if(attack.sharp || attack.edge) + adjustBleedTicks(dealt_damage) + + adjustBruteLoss(dealt_damage) + target.visible_message(SPAN_WARNING("[target] [harm_verb] \the [src]!")) + target.do_attack_animation(src) + + if((target == master) && prob(80)) + visible_message(SPAN_WARNING("The [src] whines")) + return TRUE + + target_mob = target + allowed_targets |= target + stance = STANCE_ATTACK + friends |= weakref(target) + set_AI_busy(FALSE) + ai_holder.react_to_attack(target) + return TRUE + + + else if(target.a_intent == I_HELP) + if((target == master) || (weakref(target) in friends)) + visible_message("The [src] wags its tail") + if(prob(20)) + say("Wuff!") + return TRUE + + visible_message(SPAN_WARNING("\The [src] started to growl")) + if(prob(10)) + attack_target(target) + + . = ..() + +/mob/living/simple_animal/hostile/commanded/dog + icon = 'mods/leroy_beasts/icons/leroy_beasts_32x32.dmi' + speak_emote = list("barks", "woofs") + turns_per_move = 10 + response_help = "pets" + response_disarm = "bops" + response_harm = "kicks" + see_in_dark = 5 + mob_size = 15 + possession_candidate = 1 + pass_flags = PASS_FLAG_TABLE + density = FALSE + + meat_type = /obj/item/reagent_containers/food/snacks/meat/corgi + meat_amount = 5 + skin_material = MATERIAL_SKIN_FUR_ORANGE + + var/obj/item/inventory_head + var/obj/item/inventory_back + + ai_holder = /datum/ai_holder/simple_animal/melee/commanded + say_list_type = /datum/say_list/dog + +/datum/say_list/dog + emote_see = list("wiggles its tail warily", "scratches itself") + emote_hear = list("woofs", "barks") + speak = list("Bark!", "Woof!") + +/mob/living/simple_animal/hostile/commanded/dog/german + name = "german shepherd" + real_name = "german shepherd" + desc = "That very type of a dog that appears in everybody's mind in the first place." + icon_state = "german_shepherd" + icon_living = "german_shepherd" + icon_dead = "german_shepherd_dead" + +/mob/living/simple_animal/hostile/commanded/dog/german/black + icon_state = "german_shepherd_black" + icon_living = "german_shepherd_black" + icon_dead = "german_shepherd_black_dead" + +/mob/living/simple_animal/hostile/commanded/dog/golden_retriever + name = "golden retriever" + real_name = "golden retriever" + desc = "Your perfect companion." + icon_state = "golden_retriever" + icon_living = "golden_retriever" + icon_dead = "golden_retriever_dead" + +/mob/living/simple_animal/hostile/commanded/dog/bullterrier + name = "bullterrier" + real_name = "bullterrier" + desc = "Don't tempt this perky guy." + icon_state = "bullterrier" + icon_living = "bullterrier" + icon_dead = "bullterrier_dead" diff --git a/mods/leroy_beasts/code/datums.dm b/mods/leroy_beasts/code/datums.dm new file mode 100644 index 0000000000000..fcf4b2b9b2d68 --- /dev/null +++ b/mods/leroy_beasts/code/datums.dm @@ -0,0 +1,319 @@ +#define COMMANDED_STOP 6 //basically 'do nothing' +#define COMMANDED_FOLLOW 7 //follows a target +#define COMMANDED_MISC 8 //catch all state for misc commands that need one. + +/mob/living/carbon + var/list/guards = list() // We need this list here + +/mob/living/simple_animal/hostile/commanded + name = "commanded" + stance = COMMANDED_STOP + natural_weapon = /obj/item/natural_weapon + density = FALSE + var/list/command_buffer = list() + var/list/known_commands = list("stay", "stop", "attack", "follow", "guard", "forget master", "forget target", "obey") + var/mob/master = null //undisputed master. Their commands hold ultimate sway and ultimate power. + var/list/allowed_targets = list() //WHO CAN I KILL D: + var/retribution = 1 //whether or not they will attack us if we attack them like some kinda dick. + var/list/protected_mobs = list() // who under our protection + + ai_holder = /datum/ai_holder/simple_animal/melee/commanded + +/datum/ai_holder/simple_animal/melee/commanded/can_attack(atom/movable/the_target, vision_required) + var/mob/living/simple_animal/hostile/commanded/H = holder + if(!(the_target in H.allowed_targets)) + return FALSE + return ..() + +/datum/ai_holder/simple_animal/melee/commanded/find_target(list/possible_targets, has_targets_list) + ai_log("commanded/find_target() : Entered.", AI_LOG_TRACE) + var/mob/living/simple_animal/hostile/commanded/C = holder + if(!C.allowed_targets.len) + return null + var/mode = "specific" + if(C.allowed_targets[1] == "everyone") //we have been given the golden gift of murdering everything. Except our master, of course. And our friends. So just mostly everyone. + mode = "everyone" + for(var/atom/A in list_targets()) + var/mob/M = null + if(A == src) + continue + if(isliving(A)) + M = A + if(M && M.stat) + continue + if(mode == "specific") + if(!(A in C.allowed_targets)) + continue + C.stance = STANCE_IDLE + give_target(A) + return A + else + C.allowed_targets += A + if(M == C.master || (weakref(M) in C.friends)) + continue + C.stance = STANCE_IDLE + give_target(M) + return A + return ..() + +/mob/living/simple_animal/hostile/commanded/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) + if(((weakref(speaker) in friends) && !master) || speaker == master) + command_buffer.Add(speaker) + command_buffer.Add(lowertext(html_decode(message))) + return FALSE + +/mob/living/simple_animal/hostile/commanded/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0) + if(((weakref(speaker) in friends) && !master) || speaker == master) + command_buffer.Add(speaker) + command_buffer.Add(lowertext(html_decode(message))) + return FALSE + +/mob/living/simple_animal/hostile/commanded/Life() + . = ..() + if(!.) + return FALSE + while(command_buffer.len > 0) + var/mob/speaker = command_buffer[1] + var/text = command_buffer[2] + var/filtered_name = lowertext(html_decode(name)) + if(dd_hasprefix(text,filtered_name) || dd_hasprefix(text,"everyone") || dd_hasprefix(text, "everybody")) //in case somebody wants to command 8 bears at once. + var/substring = copytext(text,length(filtered_name)+1) //get rid of the name. + listen(speaker,substring) + command_buffer.Remove(command_buffer[1],command_buffer[2]) + . = ..() + if(.) + switch(stance) + if(COMMANDED_FOLLOW) + follow_target() + if(COMMANDED_STOP) + commanded_stop() + + +//TODO:use AI following behaviour +/mob/living/simple_animal/hostile/commanded/proc/follow_target() + set_AI_busy(TRUE) + if(!target_mob) + return + + if(target_mob in ai_holder.list_targets()) + walk_to(src,target_mob,1,move_speed) + ai_holder.destination = target_mob.loc + else if(ai_holder.destination) + ai_holder.min_distance_to_destination = 0 + ai_holder.walk_to_destination() + step(src, get_dir(src.loc, target_mob.loc), move_speed) + if(get_dist(src,target_mob)<=3) + step(src, get_dir(src.loc, target_mob.loc), move_speed) + ai_holder.min_distance_to_destination = 1 + + +/mob/living/simple_animal/hostile/commanded/proc/commanded_stop() //basically a proc that runs whenever we are asked to stay put. Probably going to remain unused. + return + +/mob/living/simple_animal/hostile/commanded/proc/listen(var/mob/speaker, var/text) + for(var/command in known_commands) + if(findtext(text,command)) + switch(command) + if("stay") + if(stay_command(speaker,text)) //find a valid command? Stop. Don't try and find more. + break + if("stop") + if(stop_command(speaker,text)) + break + if("attack") + if(attack_command(speaker,text)) + break + if("follow") + if(follow_command(speaker,text)) + break + if("guard") + if(guard_command(speaker,text)) + break + if("forget master") + if(forget_master_command(speaker,text)) + break + if("forget target") + if(forget_target_command(speaker,text)) + break + if("obey") + if(obey_command(speaker,text)) + break + else + misc_command(speaker,text) //for specific commands + + return TRUE + +//returns a list of everybody we wanna do stuff with. +/mob/living/simple_animal/hostile/commanded/proc/get_targets_by_name(text, filter_friendlies = 0) + var/list/possible_targets = hearers(src,10) + . = list() + for(var/mob/M in possible_targets) + if(filter_friendlies && ((weakref(M) in friends) || M.faction == faction || M == master || M == src)) + continue + var/found = 0 + if(findtext(text, "[M]")) + found = 1 + else + var/list/parsed_name = splittext(replace_characters(lowertext(html_decode("[M]")),list("-"=" ", "."=" ", "," = " ", "'" = " ")), " ") //this big MESS is basically 'turn this into words, no punctuation, lowercase so we can check first name/last name/etc' + for(var/a in parsed_name) + if(a == "the" || length(a) < 2) //get rid of shit words. + continue + if(findtext(text,"[a]")) + found = 1 + break + if(found) + . += M + + +/mob/living/simple_animal/hostile/commanded/proc/clear_protected_mobs() + for(var/mob/living/carbon/guarded in protected_mobs) + guarded.guards -= src + friends -= weakref(guarded) + + protected_mobs = list() + +/mob/living/simple_animal/hostile/commanded/proc/attack_command(mob/speaker, text) + clear_protected_mobs() // I must attack something, don`t guard + target_mob = null //want me to attack something? Well I better forget my old target. + set_AI_busy(FALSE) + walk_to(src,0) + stance = STANCE_ATTACK + if(text == " attack." || findtext(text,"everyone") || findtext(text,"anybody") || findtext(text, "somebody") || findtext(text, "someone")) //if its just 'attack' then just attack anybody, same for if they say 'everyone', somebody, anybody. Assuming non-pickiness. + allowed_targets = list("everyone")//everyone? EVERYONE + return TRUE + + var/list/targets = get_targets_by_name(text) + allowed_targets -= "everyone" + for(var/target in targets) + allowed_targets |= target + + return targets.len != 0 + +/mob/living/simple_animal/hostile/commanded/proc/stay_command(mob/speaker, text) + target_mob = null + stance = COMMANDED_STOP + set_AI_busy(TRUE) + walk_to(src,0) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/stop_command(mob/speaker, text) + clear_protected_mobs() + allowed_targets = list() + walk_to(src,0) + ai_holder.target = null + target_mob = null //gotta stop SOMETHIN + stance = STANCE_IDLE + set_AI_busy(FALSE) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/follow_command(mob/speaker, text) + //we can assume 'stop following' is handled by stop_command + clear_protected_mobs() + if(findtext(text,"me")) + stance = COMMANDED_FOLLOW + target_mob = speaker //this wont bite me in the ass later. + friends |= weakref(target_mob) + return TRUE + + var/list/targets = get_targets_by_name(text) + if(targets.len > 1 || !targets.len) //CONFUSED. WHO DO I FOLLOW? + return FALSE + + stance = COMMANDED_FOLLOW //GOT SOMEBODY. BETTER FOLLOW EM. + target_mob = targets[1] //YEAH GOOD IDEA + friends |= weakref(target_mob) + + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/guard_command(mob/living/carbon/speaker, text) + if(findtext(text,"me")) + stance = COMMANDED_FOLLOW + target_mob = speaker + clear_protected_mobs() + speaker.guards |= src + friends |= weakref(target_mob) + return TRUE + + var/list/targets = get_targets_by_name(text) + if(!targets.len) + return FALSE + + for(var/mob/living/carbon/guarded_mob in targets) // only carbon lives need protection + if(!(src in guarded_mob.guards)) + guarded_mob.guards += src + protected_mobs += guarded_mob + friends |= weakref(guarded_mob) + + stance = COMMANDED_FOLLOW + target_mob = pick(targets) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/forget_target_command(mob/speaker, text) + allowed_targets = list() + ai_holder.target = null + target_mob = null //gotta stop SOMETHIN + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/forget_master_command(mob/speaker, text) + if(speaker != master) + return FALSE + friends -= weakref(master) + + master = null // I`m alone, again, maybe my name is Hachiko? + ai_holder.leader = null + walk_to(src,0) + target_mob = null //gotta stop SOMETHIN + stance = STANCE_IDLE + set_AI_busy(FALSE) + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/obey_command(mob/speaker, text) + if(speaker != master) + return FALSE + + var/list/targets = list() + for(var/mob/living/carbon/human/H in get_targets_by_name(text)) //I want to obey humans + targets += H + if(targets.len > 1 || !targets.len) //CONFUSED. WHO DO I OBEY? + return FALSE + master = targets[1] + friends |= weakref(master) + ai_holder.leader = master + return TRUE + +/mob/living/simple_animal/hostile/commanded/proc/misc_command(mob/speaker, text) + return FALSE + +/mob/living/simple_animal/hostile/commanded/hit_with_weapon(obj/item/O, mob/living/user, effective_force, hit_zone) + //if they attack us, we want to kill them. None of that "you weren't given a command so free kill" bullshit. + . = ..() + if(. && retribution) + target_mob = user + allowed_targets |= target_mob //fuck this guy in particular. + stance = STANCE_ATTACK + friends -= weakref(user) + set_AI_busy(FALSE) + ai_holder.react_to_attack(user) + + +/mob/living/simple_animal/hostile/commanded/attack_hand(mob/living/carbon/human/M as mob) + ..() + if(M.a_intent == I_HURT && retribution) //assume he wants to hurt us. + target_mob = M + allowed_targets |= M //fuck this guy in particular. + stance = STANCE_ATTACK + friends -= weakref(M) + set_AI_busy(FALSE) + ai_holder.react_to_attack(M) + + +/mob/living/simple_animal/hostile/commanded/proc/hunt_on(mob/M) + if(M in ai_holder.list_targets()) + friends -= weakref(M) + set_AI_busy(FALSE) + stance = STANCE_ATTACK + allowed_targets |= M + +#undef COMMANDED_STOP +#undef COMMANDED_FOLLOW +#undef COMMANDED_MISC diff --git a/packs/infinity/mobs/simple/fox.dm b/packs/infinity/mobs/simple/fox.dm index f0d86f8622ac7..c43879086228c 100644 --- a/packs/infinity/mobs/simple/fox.dm +++ b/packs/infinity/mobs/simple/fox.dm @@ -30,4 +30,5 @@ name = "Renault" desc = "Renault, the Captain's trustworthy female fox. Sometimes a bit smarter than an actual captain..." gender = FEMALE + density = TRUE universal_speak = TRUE //actually smart. But rememer: Ack-Ack! From 3770d0f5b4d4bd6b8bfbbf7560483fd34bd0e922 Mon Sep 17 00:00:00 2001 From: LordNest Date: Sat, 27 Jan 2024 16:42:07 +0400 Subject: [PATCH 06/18] =?UTF-8?q?=D0=B2=D0=B0=D1=80=D1=8B=20=D0=B2=D0=BE?= =?UTF-8?q?=D1=82=20=D1=8D=D1=82=D0=B8=20=D0=B2=D1=81=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mods/leroy_beasts/code/datums.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mods/leroy_beasts/code/datums.dm b/mods/leroy_beasts/code/datums.dm index fcf4b2b9b2d68..2fad8acdabf72 100644 --- a/mods/leroy_beasts/code/datums.dm +++ b/mods/leroy_beasts/code/datums.dm @@ -56,13 +56,13 @@ return A return ..() -/mob/living/simple_animal/hostile/commanded/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "", var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) +/mob/living/simple_animal/hostile/commanded/hear_say(message, verb = "says", datum/language/language = null, alt_name = "", italics = 0, mob/speaker = null, sound/speech_sound, sound_vol) if(((weakref(speaker) in friends) && !master) || speaker == master) command_buffer.Add(speaker) command_buffer.Add(lowertext(html_decode(message))) return FALSE -/mob/living/simple_animal/hostile/commanded/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0) +/mob/living/simple_animal/hostile/commanded/hear_radio(message, verb="says", datum/language/language=null, part_a, part_b, part_c, mob/speaker = null, hard_to_hear = 0) if(((weakref(speaker) in friends) && !master) || speaker == master) command_buffer.Add(speaker) command_buffer.Add(lowertext(html_decode(message))) @@ -110,7 +110,7 @@ /mob/living/simple_animal/hostile/commanded/proc/commanded_stop() //basically a proc that runs whenever we are asked to stay put. Probably going to remain unused. return -/mob/living/simple_animal/hostile/commanded/proc/listen(var/mob/speaker, var/text) +/mob/living/simple_animal/hostile/commanded/proc/listen(mob/speaker, text) for(var/command in known_commands) if(findtext(text,command)) switch(command) From 8967793fd6a9023895182ec41da41cc07a494aeb Mon Sep 17 00:00:00 2001 From: LordNest Date: Sat, 27 Jan 2024 19:09:08 +0400 Subject: [PATCH 07/18] =?UTF-8?q?=D0=A1=D0=BA=D0=BE=D1=81=D0=BF=D0=BB?= =?UTF-8?q?=D0=B5=D0=B8=D0=BC=20=D0=92=D0=B0=D0=BB=D0=BB=D0=B0=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Я потому что не совсем уверен, куда именно это пихать --- code/modules/ventcrawl/ventcrawl_atmospherics.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/ventcrawl/ventcrawl_atmospherics.dm b/code/modules/ventcrawl/ventcrawl_atmospherics.dm index d356caa32424e..763cb0b729a0b 100644 --- a/code/modules/ventcrawl/ventcrawl_atmospherics.dm +++ b/code/modules/ventcrawl/ventcrawl_atmospherics.dm @@ -20,7 +20,11 @@ /obj/machinery/atmospherics/relaymove(mob/living/user, direction) if(user.loc != src || !(direction & initialize_directions)) //can't go in a way we aren't connecting to return - ventcrawl_to(user,findConnecting(direction),direction) + // [SIERRA-EDIT] - SSINPUT + // ventcrawl_to(user,findConnecting(direction),direction) // SIERRA-EDIT - ORIGINAL + direction &= ~(direction & ~initialize_directions) + ventcrawl_to(user,findConnecting(direction), direction) + // [SIERRA-EDIT] - SSINPUT /obj/machinery/atmospherics/proc/ventcrawl_to(mob/living/user, obj/machinery/atmospherics/target_move, direction) if(target_move) From 4baec90f78c991705f00602970c20fa79cfeb764 Mon Sep 17 00:00:00 2001 From: LordNest Date: Sat, 27 Jan 2024 21:36:15 +0400 Subject: [PATCH 08/18] =?UTF-8?q?=D0=90=D0=B2=D1=82=D0=BE=D1=85=D0=B8?= =?UTF-8?q?=D1=81=D1=81=D1=81=D1=81=D1=81=D1=81=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datums/species/species_overrides.dm | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/maps/sierra/datums/species/species_overrides.dm b/maps/sierra/datums/species/species_overrides.dm index 21846cf9e8ae3..49a2d057030cd 100644 --- a/maps/sierra/datums/species/species_overrides.dm +++ b/maps/sierra/datums/species/species_overrides.dm @@ -7,3 +7,30 @@ Various overrides for standart species, which are too tiny to have their own mod /obj/item/organ/internal/eyes/skrell eye_icon = 'maps/sierra/icons/mob/human_races/species/skrell/eyes.dmi' apply_eye_colour = FALSE + +// Unathi + +/datum/species/unathi + autohiss_basic_map = list( + "s" = list("ss", "sss", "ssss"), + + "с" = list("с", "сс", "ссс") + ) + autohiss_extra_map = list( + "x" = list("ks", "kss", "ksss"), + + "к" = list("х"), + + "г" = list("х"), + + "з" = list("с", "сс", "ссс"), + + "ч" = list("щ", "щщ", "щщщ"), + + "ж" = list("ш", "шш", "шшш") + + ) + autohiss_exempt = list( + LANGUAGE_UNATHI_SINTA, + LANGUAGE_UNATHI_YEOSA + ) From dcca776f0acb1ae6ff50c44e1698e4914f87e216 Mon Sep 17 00:00:00 2001 From: LordNest Date: Sat, 27 Jan 2024 22:05:59 +0400 Subject: [PATCH 09/18] =?UTF-8?q?=D0=9A=D0=B8=D0=B10=D1=80=D0=B3-=D1=83?= =?UTF-8?q?=D0=B1=D0=B8=D0=B9=D1=86=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/controllers/subsystems/initialization/robots.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/controllers/subsystems/initialization/robots.dm b/code/controllers/subsystems/initialization/robots.dm index ca1eb2913fc42..f00807792e22e 100644 --- a/code/controllers/subsystems/initialization/robots.dm +++ b/code/controllers/subsystems/initialization/robots.dm @@ -15,6 +15,7 @@ SUBSYSTEM_DEF(robots) ) var/list/mmi_types_by_title = list( + "cyborg" = /obj/item/device/mmi, // [SIERRA-ADD], "robot" = /obj/item/organ/internal/posibrain, "drone" = /obj/item/device/mmi/digital/robot, "robot, flying" = /obj/item/organ/internal/posibrain, From 27aced379608bdc83d86dbb607e7cf0f5fd40a83 Mon Sep 17 00:00:00 2001 From: LordNest Date: Sun, 28 Jan 2024 01:14:32 +0400 Subject: [PATCH 10/18] =?UTF-8?q?=D0=98=D1=81=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=B4=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B1=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- maps/sierra/icons/mob/onmob/item/lefthand.dmi | Bin 0 -> 1329 bytes .../mob/onmob/item}/lefthand_guns_secure.dmi | Bin .../icons/mob/onmob/item}/mob_holder.dmi | Bin .../sierra/icons/mob/onmob/item/righthand.dmi | Bin 0 -> 1551 bytes .../mob/onmob/item}/righthand_guns_secure.dmi | Bin .../sierra/icons/obj/baton.dmi | Bin maps/sierra/items/items.dm | 28 ++++++++++++++++++ .../icons/mob/onmob/items/lefthand.dmi | Bin 1186 -> 0 bytes .../icons/mob/onmob/items/righthand.dmi | Bin 1679 -> 0 bytes packs/infinity/mobs/simple/rabbit.dm | 4 +-- 10 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 maps/sierra/icons/mob/onmob/item/lefthand.dmi rename {packs/infinity/icons/mob/onmob/items => maps/sierra/icons/mob/onmob/item}/lefthand_guns_secure.dmi (100%) rename {packs/infinity/icons/mob/onmob/items => maps/sierra/icons/mob/onmob/item}/mob_holder.dmi (100%) create mode 100644 maps/sierra/icons/mob/onmob/item/righthand.dmi rename {packs/infinity/icons/mob/onmob/items => maps/sierra/icons/mob/onmob/item}/righthand_guns_secure.dmi (100%) rename packs/infinity/icons/obj/item/weapons.dmi => maps/sierra/icons/obj/baton.dmi (100%) delete mode 100644 packs/infinity/icons/mob/onmob/items/lefthand.dmi delete mode 100644 packs/infinity/icons/mob/onmob/items/righthand.dmi diff --git a/maps/sierra/icons/mob/onmob/item/lefthand.dmi b/maps/sierra/icons/mob/onmob/item/lefthand.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0ab48a0cf6f883cbfb46d11049d053b12448012e GIT binary patch literal 1329 zcmV-11004jp1^@s6jALRO0001jdQ@0+L}hbh za%pgMX>V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+ z(=$pSoZ^zil2jm5Nr{UyC9|j)$TZ~QOe;#vO@*-G3X&2_^7G;olS?woQW1(x@F*sz zs-P%8g(yV?tW{QU^>YFH8URSgN7ujMhP40y1Zqh{K~#90?cG048$lGu@d0s!q`{&{ zX{1OT0f~enby85IOTr1#q%aCCC$KmG5~NOng2WM!BH=O>G|3SnZT2k;GLF4}*qM1V z0000000000002O4R-IUw23Sr&2JDkH?eO6taC}z`> zAVn;l&+Kx3UtCk|cei3Buf@3A@>ZYhSHRgxSac6=yI(3?k0-bK1huiTQJ7D~ann7w z+FtHg?Vo|R<8CXr`UGK%)pio>eyJC^>$uy>r9MIQEmEpQ4t3qB)+Y#8#YwHmp|3Z! z`T%+Jb&uqpUXS`1|3#q4^{5X300000000000000000000003u(!{OWyEG{Y~3_d1y|QdV!nt9iOxpOSMK4u9t6~*X|?RHA46hz?2Kz zq)&f3IaYd{oSdBKbam>TZeX_^f_G2lS z9shL5qL}~G3p~$se>yv^z6G|EC7qw7{a8_TB8$_a@z1Vs^0VgrKYCcP4^`XS+veux z#(X_IlpT_L=#fGmj7DZK7?{h;OXIRJ;&hGn_xGc$&7$#3*w$YB`R|(T?NQAC^u0Xj zFLumle>yp*bbxYwUYDLa{wU@@g#tJ6-6AaZ8ub}}6l06xBAzHzf4W#}gB##sE;l80=qE%qHb=YnE#v$>`KlxiehY0Tm;lG{{R30 z00003FsFVera(0NeDZt2#Yh(NK&1+9yn#RU(+3G)&T-{G@dgpdI0^0qqp4xcLoP*)Nm z@reNHO6K2!n?%t*44q}Q0@~LJyZo<4tbn?*3ZUp3LIS8Oy8w1Y0Ci>a91v+DfKWvM np^5-P6#;}Q0ti(E5UTzGQ=G$QqGaqy00000NkvXXu0mjf7i4;^ literal 0 HcmV?d00001 diff --git a/packs/infinity/icons/mob/onmob/items/lefthand_guns_secure.dmi b/maps/sierra/icons/mob/onmob/item/lefthand_guns_secure.dmi similarity index 100% rename from packs/infinity/icons/mob/onmob/items/lefthand_guns_secure.dmi rename to maps/sierra/icons/mob/onmob/item/lefthand_guns_secure.dmi diff --git a/packs/infinity/icons/mob/onmob/items/mob_holder.dmi b/maps/sierra/icons/mob/onmob/item/mob_holder.dmi similarity index 100% rename from packs/infinity/icons/mob/onmob/items/mob_holder.dmi rename to maps/sierra/icons/mob/onmob/item/mob_holder.dmi diff --git a/maps/sierra/icons/mob/onmob/item/righthand.dmi b/maps/sierra/icons/mob/onmob/item/righthand.dmi new file mode 100644 index 0000000000000000000000000000000000000000..69294665fcaa0ff1760039764e954f0d9c6daeaa GIT binary patch literal 1551 zcmbW1X;2af7>2PtQ1d>QEVLanCDZcUL@3idP*hOJwpP@rwFD`}_10DKNOU*MsU{E9 zveq<7ltbIdvrI%gydVvaRr3UuHPdjN{n?LZc4yx2d*_|!*Z1T7@&b^a8fqXl005xj z?d6Wzar(}r1C@6+H6ncPj%6eUor!hF$3$FMd)69Ay( zTFljx396sW!Xr-G4I{`Efl_)vL z0d5?9&hKvyDg;AF6)0^+;72ziZJ9BG{dp=PsR?%LPJ)0c=UpWHD&UtSKqp-vB@FD< z%u%AR6gTg776DD~eM5pjT*O-&AKH4PJ%YOEU)TdFs(5IZ%jB)rcq%WBTW~w(b)JDF z{&{D9X*el)H#1_gLAq~y1CJHux*C-N#lwOf7M%$_HJfo23S+(P zo!JB@WfsoMoVn|OzoItkf5`%a#a4koA4qpT3WtMTv%pG>`4{^|J|Fo+K9|u?h>D_O zFqlg4I#d<6G#-NjhAnW z6REsVll}V*{mWq1aXIa{l-u#Pu59gU<7fRtrPU^FTrQVR@K4sGxqU~iL1~r;@+l%3 zo6X8#J2csQ&OyTF#?g)Fi;(e!`-slW9IebI7uiwYSCBB|xLr-LMDk^mP6#LgqKd)p z4;pldw!T8ve^n4mA?POP%6wO`s9VO(TX8m5*t1U) zd$zK7J!t`nhs$HlHnoMHqDqi!0G5VlFy=Dfr_e#Qs1jM`M{T+r13bUOh*X*Z!_OIs zK4L!YLk&sMa~Tblfvz7OMt`(qb=vQaAJRGIWNlAb0uiDG0k zshqgQ*?Dr?(Ox$mJaKC_@CloZ<@5RaT@dCiDTL-2#UE@^t zO}nNS`H%*RWActA^OFD;#o`*hYG#0i7C7ET4|T-+qQQ+<=A4>$Es**W!?AaeU38F* z0<;cR4rvXR9p?^px6eGSOMf=E`qxWLt4f)^SfjX#}$~MG^MF6T?3pVg?__5B(?A=UeboW!$ glVx8Wu@mJg$`17f^j0Wt=feZMJ&^8?-EbNI07-ks<^TWy literal 0 HcmV?d00001 diff --git a/packs/infinity/icons/mob/onmob/items/righthand_guns_secure.dmi b/maps/sierra/icons/mob/onmob/item/righthand_guns_secure.dmi similarity index 100% rename from packs/infinity/icons/mob/onmob/items/righthand_guns_secure.dmi rename to maps/sierra/icons/mob/onmob/item/righthand_guns_secure.dmi diff --git a/packs/infinity/icons/obj/item/weapons.dmi b/maps/sierra/icons/obj/baton.dmi similarity index 100% rename from packs/infinity/icons/obj/item/weapons.dmi rename to maps/sierra/icons/obj/baton.dmi diff --git a/maps/sierra/items/items.dm b/maps/sierra/items/items.dm index 22385dc949995..793cfbed5b2c7 100644 --- a/maps/sierra/items/items.dm +++ b/maps/sierra/items/items.dm @@ -453,6 +453,34 @@ Passports icon_state = "gangtool-white" region_access = ACCESS_REGION_GENERAL +// Overrides + +/obj/item/melee/baton + icon = 'maps/sierra/icons/obj/baton.dmi' + icon_state = "stunbaton" + item_state = "baton" + item_icons = list( + slot_r_hand_str = 'maps/sierra/icons/mob/onmob/item/righthand.dmi', + slot_l_hand_str = 'maps/sierra/icons/mob/onmob/item/lefthand.dmi', + ) + +/obj/item/melee/baton/on_update_icon() + if(status) + icon_state = "[initial(icon_state)]_active" + item_state = "[initial(item_state)]_active" + else if(!bcell) + icon_state = "[initial(icon_state)]_nocell" + item_state = "[initial(item_state)]" + else + icon_state = "[initial(icon_state)]" + item_state = "[initial(item_state)]" + + if(icon_state == "[initial(item_state)]_active") + set_light(1.5, 2, "#75acff") + else + set_light(0) + loc.update_icon() + #undef REMOTE_OPEN #undef REMOTE_BOLT #undef REMOTE_ELECT diff --git a/packs/infinity/icons/mob/onmob/items/lefthand.dmi b/packs/infinity/icons/mob/onmob/items/lefthand.dmi deleted file mode 100644 index f609ee977cc5d29f4391e99f19c1fd85f878814d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1186 zcmeAS@N?(olHy`uVBq!ia0vp^3xK$RgAGXbBqvD&sgA0Uh!U67;^d;tf|AVqJO+k} zIl*BCMWx@r1Q&e#`b5iHSL@uF^T8WJ4K5l#c%*aQNAqL=kYo1f(HW1kKIb(W3%b08 zyn{q@M5j#IVG(T9-34Uw?6kPtB~%=&n6sm4$&pEa_WU^VWYU>UAuUP5HeH;nv@}ln zD|!hsW=|E3`5Pk=Q)9c6!Q;65_3KFovKSbcuX?&ThE&XXdv|}{tpJhZADxdXPgpAG zd`x=fBzeW4MLc(nE7n`3C#q&$w_$w5xak9nkB!qZBO_Jk+3pTjvZs1An0{MrdoTa{ zcjPR#H+MeoW}mF|GlT``Stw{|@fE8wk9_gxNb={CPVZ~hpKM>WOMA}ZsWo<{wTB{r zlHYesxqbKg=jP+jl$83tcfO4h7P}hzP-gAZ%iU~SW*h7jt&HjFIPvL$=IP^0PrUnh z&SatU-E~$o`^6`>-aA=7*I&%){@+Ryo9oY)E_zwDYg&K!91EwZ@9bWX3nz9FGE6AZuR(Gt*>ako#!T1^uJx{lby+jqVHj)_4VuZ_4z+NUjD*C zW#@J|(TnZ*{6%$km#=22PFL#Xal13u+0|v;x^*hoa{R9DzuQw%@$uXJS?%Ka&2Qa+ zY%`9H{}2D&zeK2DX5)#3vbuGvuX@dzcPi8P*XQ5m!OL^*to+44`~0T+{b~Pu4XcW4 zW#8WJ?%w9!a&%tc++T}V=yti*Oj!T3WMkSDm%o8m#EvT2Em-}3R{7PCzboI_U$BYe zJi4oHYsPA`=l|88JpDRVO=m;gdUpNw>yzxSyq%@-t^R*-vCQ?SJ&QmlDM);iM-6%v z?JGYFN?h);S(#mDd0D(qb0y#OpCzfs*`?*%w%mN_T{$m&U(;K8?L)lJe=Jx8lyU0k zcU~0p{PNBX$CsGQ=g(_<>c4W`sTwQsi@p5L$x)dHR(*cC$|KQEUg^U3pEVpS-hcin tAR#}Up}~KTtg?lgxuV4^0jLumeG;D+dGw)JiR*Nbh^MQc%Q~loCIGP2JRbl6 diff --git a/packs/infinity/icons/mob/onmob/items/righthand.dmi b/packs/infinity/icons/mob/onmob/items/righthand.dmi deleted file mode 100644 index b8387078775743c4b8321652db8c85dcb9e18f0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1679 zcmZ`)dpOf;9RGF5tw}>BR=J%lx#SY7%&3X6kV)y7TSv@YlO|K+IAOVDEnSom3eRCX zE0>l_2bnvWToTI2YSiOSW;;9QdCsNtbpH6hpZ9&g-}n1`-|zc*K5v?vi-V$qh5`Tp zifBiay9DzkMwXM2jOk|sG$oLF$>VekDv)sYJU%K09~l7v#CurJsPh+A7O_!tOOpo9 zMh4xTJy_<+{V&bmP8jxJ_O`i67M2qeosM0Y9#~=&#aY?eeS6q;8m$J7HM>TUOhHfK zT#7OQs~uL8RMbor)~+^BQaf25$pI?X6!|g(Si7sX6L?eT&F$VB-m2at#8beL<1jcF z@H_+nHaDVCb{@ogv!iy-ns_K@PCWCeU@-(iV}=&Eoq%<2*=BZ2VZ?`LFGt+gSPPgG zpBZp8sVDpM$G$_9oWivhV4nZPA^Wwx#4SFEEI1rr;)=nYHE&z6Ziveh+B{nJ%R}cy z2Bn`9DY6VzbZGQmSzB(#CS_GAJ(!H68|Zqzx|W@(ZBhVP`UN0Q`O{I-Cru>cHYA3# z+ns_=8GLoKN$`=wV)zqGoWS{)ev2Jp&4ecZu|Ha6I4&G^Og=Qgtb-KGxuIS^3(w97 zMCy9@zp+Mwvt!c+nQRD>QC@zBB+RZQk}g}WFAf)uR!Pd6=n10R#4k?Ft?l?SwC93V zdPX3=A+B%OM4(Z%q66bjZ+f+5P2k&5UVWw04uGqHuE!2nCf@Q(I{zNzc=_M$`QN^M z)8Xz53;#7xk zecr5i^b+|-i)q=hLU0lOZkCElfXi5)w~G22o7i8&+%)%N40b#=%!OyB%vj{Ey_hN<;OvGDz>&yEqwo6J z53QewJ?mxPjE@kEZNSe6^X<%vy-KqUbHMQz{(`yiuC{$0Z1zU*m2}x)v#sFli@CXp zZ5+t2=K2hb;NxQ9#&ncUlG%9~i-h4Jyk(^bl)Y%c62F%67$jl)EDn4@>^}aGFA7!c zje+9ts)=T0hRwT0q3gS@M`Nm^SLl&P_pX* zSA(cc#=4BfmmUL~aCY^@%8OP6r;K!mJf4K0ymA8FOFf#Wv@ Date: Sun, 28 Jan 2024 10:59:22 +0400 Subject: [PATCH 11/18] =?UTF-8?q?=20=D1=83=D0=B4=D0=BB=D0=B8=D0=BD=D0=BD?= =?UTF-8?q?=D0=B8=D0=BB=D0=B8=20len=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mods/leroy_beasts/code/datums.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mods/leroy_beasts/code/datums.dm b/mods/leroy_beasts/code/datums.dm index 2fad8acdabf72..139aa6fcc9a3e 100644 --- a/mods/leroy_beasts/code/datums.dm +++ b/mods/leroy_beasts/code/datums.dm @@ -28,7 +28,7 @@ /datum/ai_holder/simple_animal/melee/commanded/find_target(list/possible_targets, has_targets_list) ai_log("commanded/find_target() : Entered.", AI_LOG_TRACE) var/mob/living/simple_animal/hostile/commanded/C = holder - if(!C.allowed_targets.len) + if(!length(C.allowed_targets)) return null var/mode = "specific" if(C.allowed_targets[1] == "everyone") //we have been given the golden gift of murdering everything. Except our master, of course. And our friends. So just mostly everyone. @@ -72,7 +72,7 @@ . = ..() if(!.) return FALSE - while(command_buffer.len > 0) + while(length(command_buffer) > 0) var/mob/speaker = command_buffer[1] var/text = command_buffer[2] var/filtered_name = lowertext(html_decode(name)) @@ -187,7 +187,7 @@ for(var/target in targets) allowed_targets |= target - return targets.len != 0 + return length(targets) != 0 /mob/living/simple_animal/hostile/commanded/proc/stay_command(mob/speaker, text) target_mob = null @@ -216,7 +216,7 @@ return TRUE var/list/targets = get_targets_by_name(text) - if(targets.len > 1 || !targets.len) //CONFUSED. WHO DO I FOLLOW? + if(length(targets) > 1 || !length(targets)) //CONFUSED. WHO DO I FOLLOW? return FALSE stance = COMMANDED_FOLLOW //GOT SOMEBODY. BETTER FOLLOW EM. @@ -235,7 +235,7 @@ return TRUE var/list/targets = get_targets_by_name(text) - if(!targets.len) + if(!length(targets)) return FALSE for(var/mob/living/carbon/guarded_mob in targets) // only carbon lives need protection @@ -274,7 +274,7 @@ var/list/targets = list() for(var/mob/living/carbon/human/H in get_targets_by_name(text)) //I want to obey humans targets += H - if(targets.len > 1 || !targets.len) //CONFUSED. WHO DO I OBEY? + if(length(targets) > 1 || !length(targets)) //CONFUSED. WHO DO I OBEY? return FALSE master = targets[1] friends |= weakref(master) From 584dd67797eeb427358976b65546478cfb68cdb4 Mon Sep 17 00:00:00 2001 From: LordNest Date: Sun, 28 Jan 2024 11:12:41 +0400 Subject: [PATCH 12/18] =?UTF-8?q?=D0=B5=D1=89=D1=91=20=D1=87=D1=83=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BB=D0=B8=D1=81=D1=83=20=D0=BF=D0=BE=D1=84?= =?UTF-8?q?=D0=B8=D0=BA=D1=81=D0=B8=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mods/leroy_beasts/code/commanded.dm | 2 +- packs/infinity/mobs/simple/fox.dm | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/mods/leroy_beasts/code/commanded.dm b/mods/leroy_beasts/code/commanded.dm index a9b65a8ad6f98..30315b0f32300 100644 --- a/mods/leroy_beasts/code/commanded.dm +++ b/mods/leroy_beasts/code/commanded.dm @@ -45,7 +45,7 @@ S.guards += src ..() -/mob/living/simple_animal/hostile/commanded/rex/attackby(obj/item/O as obj, mob/user as mob) +/mob/living/simple_animal/hostile/commanded/rex/can_use_item(obj/item/O as obj, mob/user as mob) if(istype(O, /obj/item/reagent_containers/food/snacks/meat) && stat != DEAD) if(user != master) visible_message(SPAN_WARNING("\The [src] started to growl")) diff --git a/packs/infinity/mobs/simple/fox.dm b/packs/infinity/mobs/simple/fox.dm index c43879086228c..f1145ca06f412 100644 --- a/packs/infinity/mobs/simple/fox.dm +++ b/packs/infinity/mobs/simple/fox.dm @@ -1,3 +1,21 @@ +/mob/living/simple_animal/friendly/fox + holder_type = /obj/item/holder/fox + +/obj/item/holder/fox + slot_flags = null + icon = 'packs/infinity/icons/mob/mobs.dmi' + icon_state = "fox" + + item_icons = list( + slot_l_hand_str = 'maps/sierra/icons/mob/onmob/item/mob_holder.dmi', + slot_r_hand_str = 'maps/sierra/icons/mob/onmob/item/mob_holder.dmi', + ) + + item_state_slots = list( + slot_l_hand_str = "fox_l", + slot_r_hand_str = "fox_r", + ) + //Foxxy /mob/living/simple_animal/friendly/fox name = "fox" @@ -12,6 +30,8 @@ response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" + mob_size = MOB_SMALL + density = TRUE ai_holder = /datum/ai_holder/simple_animal/passive/fox say_list_type = /datum/say_list/fox @@ -30,5 +50,4 @@ name = "Renault" desc = "Renault, the Captain's trustworthy female fox. Sometimes a bit smarter than an actual captain..." gender = FEMALE - density = TRUE universal_speak = TRUE //actually smart. But rememer: Ack-Ack! From 84377423a9e1e6e0e949c1158e1f8b8030a99ddc Mon Sep 17 00:00:00 2001 From: LordNest <77477080+LordNest@users.noreply.github.com> Date: Sun, 28 Jan 2024 11:14:20 +0400 Subject: [PATCH 13/18] Update code/modules/ventcrawl/ventcrawl_atmospherics.dm Co-authored-by: SuhEugene <32931701+SuhEugene@users.noreply.github.com> --- code/modules/ventcrawl/ventcrawl_atmospherics.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/ventcrawl/ventcrawl_atmospherics.dm b/code/modules/ventcrawl/ventcrawl_atmospherics.dm index 763cb0b729a0b..f0a54cbf1497e 100644 --- a/code/modules/ventcrawl/ventcrawl_atmospherics.dm +++ b/code/modules/ventcrawl/ventcrawl_atmospherics.dm @@ -20,11 +20,10 @@ /obj/machinery/atmospherics/relaymove(mob/living/user, direction) if(user.loc != src || !(direction & initialize_directions)) //can't go in a way we aren't connecting to return - // [SIERRA-EDIT] - SSINPUT - // ventcrawl_to(user,findConnecting(direction),direction) // SIERRA-EDIT - ORIGINAL + // [SIERRA-ADD] - SSINPUT direction &= ~(direction & ~initialize_directions) - ventcrawl_to(user,findConnecting(direction), direction) - // [SIERRA-EDIT] - SSINPUT + // [SIERRA-ADD] + ventcrawl_to(user,findConnecting(direction),direction) /obj/machinery/atmospherics/proc/ventcrawl_to(mob/living/user, obj/machinery/atmospherics/target_move, direction) if(target_move) From 5f3c6602a215c6b233a961d08aaf868b1825b519 Mon Sep 17 00:00:00 2001 From: LordNest <77477080+LordNest@users.noreply.github.com> Date: Sun, 28 Jan 2024 11:14:49 +0400 Subject: [PATCH 14/18] Update mods/antagonists/code/blackout.dm Co-authored-by: SuhEugene <32931701+SuhEugene@users.noreply.github.com> --- mods/antagonists/code/blackout.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/antagonists/code/blackout.dm b/mods/antagonists/code/blackout.dm index a2ae602143c73..6fa3a05258b47 100644 --- a/mods/antagonists/code/blackout.dm +++ b/mods/antagonists/code/blackout.dm @@ -19,7 +19,7 @@ var/lastUse = 0 var/Cooldown = (20 MINUTES) -/obj/item/device/blackout/afterattack(obj/target as obj, mob/user as mob, proximity) +/obj/item/device/blackout/afterattack(obj/target, mob/user, proximity) if(!proximity) return if(!istype(target)) From fef2d309fcf97ceac863ba821810d03db11aab4a Mon Sep 17 00:00:00 2001 From: LordNest Date: Sun, 28 Jan 2024 11:54:59 +0400 Subject: [PATCH 15/18] =?UTF-8?q?=D0=9A=D0=BE=D0=BD=D1=82=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=BD=D1=8B=D0=B9=20=D0=B7=D0=BE=D0=BE=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- maps/sierra/sierra.dm | 2 +- mods/antagonists/code/blackout.dm | 6 ++-- mods/leroy_beasts/_leroy_beasts.dm | 5 --- mods/leroy_beasts/_leroy_beasts.dme | 9 ----- mods/{leroy_beasts => petting_zoo}/README.md | 8 ++--- mods/petting_zoo/_petting_zoo.dm | 5 +++ mods/petting_zoo/_petting_zoo.dme | 12 +++++++ .../code/beasts.dm | 32 +++++++++--------- .../code/commanded.dm | 4 +-- .../code/datums.dm | 0 .../simple => mods/petting_zoo/code}/fox.dm | 8 ++--- .../simple => mods/petting_zoo/code}/koala.dm | 2 +- .../petting_zoo/code}/rabbit.dm | 8 ++--- .../icons/leroy_beasts_32x32.dmi | Bin .../icons/leroy_beasts_32x64.dmi | Bin .../mob => mods/petting_zoo/icons}/mobs.dmi | Bin .../petting_zoo/icons/onmob}/mob_holder.dmi | Bin mods/ssinput/README.md | 2 ++ packs/infinity/_pack.dm | 5 --- 19 files changed, 54 insertions(+), 54 deletions(-) delete mode 100644 mods/leroy_beasts/_leroy_beasts.dm delete mode 100644 mods/leroy_beasts/_leroy_beasts.dme rename mods/{leroy_beasts => petting_zoo}/README.md (89%) create mode 100644 mods/petting_zoo/_petting_zoo.dm create mode 100644 mods/petting_zoo/_petting_zoo.dme rename mods/{leroy_beasts => petting_zoo}/code/beasts.dm (93%) rename mods/{leroy_beasts => petting_zoo}/code/commanded.dm (98%) rename mods/{leroy_beasts => petting_zoo}/code/datums.dm (100%) rename {packs/infinity/mobs/simple => mods/petting_zoo/code}/fox.dm (84%) rename {packs/infinity/mobs/simple => mods/petting_zoo/code}/koala.dm (94%) rename {packs/infinity/mobs/simple => mods/petting_zoo/code}/rabbit.dm (88%) rename mods/{leroy_beasts => petting_zoo}/icons/leroy_beasts_32x32.dmi (100%) rename mods/{leroy_beasts => petting_zoo}/icons/leroy_beasts_32x64.dmi (100%) rename {packs/infinity/icons/mob => mods/petting_zoo/icons}/mobs.dmi (100%) rename {maps/sierra/icons/mob/onmob/item => mods/petting_zoo/icons/onmob}/mob_holder.dmi (100%) diff --git a/maps/sierra/sierra.dm b/maps/sierra/sierra.dm index de73b541825dd..d99b22d1947e2 100644 --- a/maps/sierra/sierra.dm +++ b/maps/sierra/sierra.dm @@ -182,7 +182,7 @@ #include "../../mods/fancy_sofas/_fancy_sofas.dme" #include "../../mods/jukebox_tapes/_jukebox_tapes.dme" #include "../../mods/legalese_language/_legalese.dme" - #include "../../mods/leroy_beasts/_leroy_beasts.dme" + #include "../../mods/petting_zoo/_petting_zoo.dme" #include "../../mods/screentips/_screentips.dme" #include "../../mods/tajara/_tajara.dme" diff --git a/mods/antagonists/code/blackout.dm b/mods/antagonists/code/blackout.dm index 6fa3a05258b47..8d298493a3667 100644 --- a/mods/antagonists/code/blackout.dm +++ b/mods/antagonists/code/blackout.dm @@ -17,7 +17,7 @@ var/severity = 2 var/shots = 1 var/lastUse = 0 - var/Cooldown = (20 MINUTES) + var/cooldown = (20 MINUTES) /obj/item/device/blackout/afterattack(obj/target, mob/user, proximity) if(!proximity) @@ -62,7 +62,7 @@ Утилизируйте устройство после использования. --\"") shots-- - Cooldown = world.time + cooldown = world.time power_failure() @@ -71,7 +71,7 @@ icon_state = "device_blackout-off" /obj/item/device/blackout/proc/check_to_use() - return lastUse <= (world.time - Cooldown) + return lastUse <= (world.time - cooldown) /obj/item/device/blackout/examine(mob/user) . = ..() diff --git a/mods/leroy_beasts/_leroy_beasts.dm b/mods/leroy_beasts/_leroy_beasts.dm deleted file mode 100644 index 937c86168bbc6..0000000000000 --- a/mods/leroy_beasts/_leroy_beasts.dm +++ /dev/null @@ -1,5 +0,0 @@ - -/singleton/modpack/leroy_beasts - name = "Beasts pack and AI" - desc = "Набор различных зверей от Лероя: мейн-кун, каракал, несколько пород собак, горилла, лягушка, кролик и много других. Также вставлен ИИ от Жужжилы." - author = "Papa Leroy#5647" diff --git a/mods/leroy_beasts/_leroy_beasts.dme b/mods/leroy_beasts/_leroy_beasts.dme deleted file mode 100644 index a83527f22b832..0000000000000 --- a/mods/leroy_beasts/_leroy_beasts.dme +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef MODPACK_LEROY_BEASTS -#define MODPACK_LEROY_BEASTS - -#include "_leroy_beasts.dm" -#include "code/beasts.dm" -#include "code/commanded.dm" -#include "code/datums.dm" - -#endif diff --git a/mods/leroy_beasts/README.md b/mods/petting_zoo/README.md similarity index 89% rename from mods/leroy_beasts/README.md rename to mods/petting_zoo/README.md index ccf926ad802e3..b8382692fc398 100644 --- a/mods/leroy_beasts/README.md +++ b/mods/petting_zoo/README.md @@ -1,7 +1,8 @@ #### Список PRов: -- https://github.com/SierraBay/SierraBay12/pull/##### +- https://github.com/SierraBay/SierraBay12/pull/16 +- https://github.com/SierraBay/SierraBay12/pull/1824 ## Мод-пример -ID мода: LEROY_BEASTS +ID мода: PETTING_ZOO