Skip to content

add: Б.O.Р.И.С. модуль. Теперь на парашизе.#8518

Open
Buravka wants to merge 27 commits intoss220-space:master220from
Buravka:barbariska_reborn
Open

add: Б.O.Р.И.С. модуль. Теперь на парашизе.#8518
Buravka wants to merge 27 commits intoss220-space:master220from
Buravka:barbariska_reborn

Conversation

@Buravka
Copy link
Contributor

@Buravka Buravka commented Feb 12, 2026

Что этот ПР делает

Добавляет в игру модуль Б.О.Р.И.С. и другие связанные с ним штуки-дрюки

Если кто не знал, то B.O.R.I.S. или же Bluespace Optimized Remote Intelligence Synchronization module (Лакализавана как Модуль Блюспейс Ориентированной Роботической Искусственной Сети) - это такая деталька для киборгов, которая позволяет ИИ "вселятся" в них и управлять напрямую по аналогии с мехами и маячком ИИ.

P.S. Код в основном был криво украден адаптирован и портирован с ТГ

Эффект после латунизации у киборгов был заменен с тяжелого ЭМИ на простой стан в 6 секунд.

Потому-что вообще-то ЭМИ вредит киборгам, а ломать будущих членов своего культа - не круто

Даже если борг мешает, 6-ти секундного стана хватит, что-бы обезвредить его и забить ножичком


1. СОЗДАНИЕ ОБОЛОЧКИ-ИИ И МОДУЛЯ Б.О.Р.И.С. . ПРИМЕНЕНИЕ МОДУЛЯ Б.О.Р.И.С. .

Модуль устанавливается либо в каркас киборга, заместо стандартного ММИ/робомозга, либо напрямую в робота, как улучшение, но для этого он должен быть в полном ССД, а точнее, за ним вообще не должен быть прикреплен не один активный игрок (Например: мартышки, боргофицированные при помощи робобургера, подойдут для таких целей). В обеих случаях, в итоге получается пустая оболочка-ИИ, готовая к роботе.

При разборе оболочки из неё так-же выпадает модуль Б.О.Р.И.С., который можно будет использовать для восстановления старой или создания новой оболочки-ИИ. При гибе модуль возвращен не будет.

Сам же модуль печатается в Фабрикаторе Экзокостюмов.
Требуемые технологии: ИНЖЕНЕРНЫЕ - 5, ДАННЫЕ - 6, БЛЮСПЕЙС - 6.
Требуемые ресурсы: 2000 метала, 1000 стекла, 1000 плазмы, 500 золота, 100 алмазов, 100 БлюСпейс-Материи.

2. ПОДКЛЮЧЕНИЕ К ОБОЛОЧКЕ. ИЕАРХИЯ ИИ. СИНХРОНИЗАЦИЯ ЗАКОНОВ.

ИИ может подключиться к оболочке напрямую, кликнув на неё, либо воспользоваться кнопкой на своем HUDе или кнопкой в verb-меню, что-бы выбрать нужную оболочку из списка

Мастер-ИИ для оболочки так-же является и "владельцем". Только ИИ-владелец может подключаться к ней. Другим ИИ будет отказано в доступе.
Оболочки, которые по каким-то причинам не имеют владельца считаются "Публичными". К ним могут подключаться любые ИИ, но выгонять друг друга из оболочек они не могут (Зато могут попросить экипаж взорвать/заблокировать с консоли неугодную оболочку, или попросить привязать её к себе) .

Для успешного подключения оболочка должна быть: Не разряженной, не мертвой, в сознании, не должна быть подчиненна Заводному Культу (Латунные ИИ все равно смогут подключиться) , а так-же ИИ должен являться владельцем оболочки или же у неё не должно быть владельца в принципе

Малейший ЭМИ-импульс так по ядру ИИ, так и по самой оболочке тут же разорвет связь между ними. ИИ выкинет без последствий. Если батарейка оболочки сядет до нуля, то ИИ выкинет из неё без последствий. Если в ядре ИИ отключиться свет, то его тут же выкинут из оболочки, вернув в ядро.

Даже если ИИ сидит в оболочке, его все равно можно убить, сломав ядро или просто записать его на интелкартку, что выкинет его из оболочки

Если ядро ИИ получит какой-либо урон, то оболочка сразу-же будет оповещена об этом градом ругательств в чат и характерным звуком сирены, шоб нерадивый холодильник точно понял, что ему кирдык. Одним словом OUR BASE IS UNDER ATTACK!

Законы оболочки не изменяемы привычными методами. Даже если у неё не будет ИИ-владельца, то в аплоуде свободных киборгов доступна она всё равно не будет.

Законы оболочки постоянно синхронизируются с ИИ, который ей управляет (он же мэйнфрейм), а не с привязанным ИИ. Любые изменение законов мэйнфрейма тут-же оповещаются оболочке. Не должно происходить такого, что законы были изменены, а ИИ сидит в борге и не знает об этом.

3. СМЕРТЬ ОБОЛОЧКИ И ИИ.

Если оболочку подбивают и выводят из строя, то ИИ с шансом 50 на 50 либо просто возвращается в ядро без последствий, либо ему наносится 200 урона энерго-потерью (Фаталити) и тот отправляется на отдых в ядро. При гибе происходит тоже самое.

Принесение в жертву культом крови убьет ИИ в оболочке со 100 процентным шансом, хотя, это все ещё будет просто смерть без гиба и обращения в крамушек (Оболочка гибнется, а вот крамушка не ждите. Разума то нет!)

4. ОСОБЕНОСТИ ОБОЛОЧКИ

Оболочка ИИ имеет несколько отличий от обычных боргов:

В консоли контроля киборгов над оболочками можно совершать все те же действия, что и над обычными роботами, а так-же в интерфейсе всегда будет отображено имя того ИИ, который прямо сейчас управляет оболочкой.

Оболочка-ИИ не может быть емагнута, однако, если во время процедуры емага в оболочке сидел ИИ, то тот вместе с оболочкой умрет со 100 процентным шансом. Законы переписаны никак не будут. Емаг все ещё может разблокировать айди-замок на тех. панели оболочки.

Оболочка-ИИ не быть подчиненна праведниками Рат'вара привычными методами, однако, если во время латунизации в оболочке сидел ИИ, то тот отключиться от неё и станет латунным и потом сможет подключиться к оболачкам, что-бы латунизировать и их.

Диагностический визор позволяет отслеживать состояние и статус оболочек. Он помечает соответствующими знаками киборгов, являющихся оболочками, оболочек, которыми прямо сейчас управляет ИИ, а так-же помечает ИИ, которые прямо сейчас управляют оболочкой.

Почему это хорошо для игры

Прыкольная механика

Демонстрация изменений

Демонстрации изменений

Икона способности "Вернуться в ядро"(Возвращает ИИ обратно в ядро из оболочки).
Снимок экрана 2026-02-11 180358

Икона кнопки "Подключиться к оболочке" на ХУДе ИИ(Позволяет выбрать ИИ оболочку из списка и подключиться к ней).

Снимок экрана 2026-02-11 180506

Борисе модуль собственной персоной!(приписка "r" означает "real")

Снимок экрана 2026-02-11 180602

Иконки худа для ИИ и оболочки. Правая иконка показывается на ИИ, когда тот сидит в оболочке и над боргами, когда они являются оболочками-ИИ. Левая же показывается только над оболочками, когда в тех сидит ИИ.

Снимок экрана 2026-02-11 180724

Тестирование

Спавнил оболочки-ИИ. Делал оболочки-ИИ в робототехнике.. Подключался к оболочкам-ИИ. Бил себя сваркой оболочками-ИИ. Оболочками-ИИ.

chomasuke and others added 7 commits February 10, 2026 00:53
zalupa

экшены оболочки для мода
оболочка для мода перенесена в мехфаб
маркер. удаление устаревшего переопределённого прока get_equipped_items,
замена передаваемых аргументов на битфлаги, где этого ещё не было.
компоненту лазера добавлен кд на использование 1 секунда
@github-actions github-actions bot added 🎨 Спрайты PR содержит изменения в файлах DMI. 💻 TGUI PR содержит изменения в файлах TGUI. labels Feb 12, 2026
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces the B.O.R.I.S. module, enabling AI players to remotely control robot shells. While the technical implementation is generally satisfactory, a critical logic flaw has been identified in the AI evacuation procedure during shell destruction. This vulnerability can lead to a denial-of-service state for the AI player, trapping them in a deleted object or forcing them into a ghost state without a way to return to their core. Additionally, several areas require attention for improved code quality and stability, including macro name typos, issues in AI shell creation logic, style guide violations, incorrect handling of unpowered shells, and code duplication in evacuate_ai and law_manager.dm. Minor issues like potential HTML injection and improper power cell handling were also noted.

Comment on lines 247 to 277
if(istype(I, /obj/item/borg/upgrade/ai))

var/obj/item/borg/upgrade/ai/M = I
if(check_completion())
if(!isturf(loc))
to_chat(user, span_warning("You cannot install [M], the frame has to be standing on the ground to be perfectly precise!"))
return
qdel(M)
var/mob/living/silicon/robot/robot = new /mob/living/silicon/robot/shell(get_turf(src))

if(!aisync)
lawsync = FALSE
robot.set_connected_ai(null)
else
if(forced_ai)
robot.set_connected_ai(forced_ai)
robot.notify_ai(AI_NOTIFICATION_AI_SHELL)
if(!lawsync)
robot.lawupdate = FALSE
robot.make_laws()

robot.cell = chest.cell
chest.cell.forceMove(robot)

robot.locked = panel_locked
robot.job = JOB_TITLE_CYBORG
forceMove(robot)
robot.robot_suit = src
if(!locomotion)
robot.set_lockcharge(TRUE)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

🟡 Рекомендация по улучшению: Логика создания оболочки ИИ при использовании модуля Б.О.Р.И.С. на каркасе киборга имеет несколько недостатков:

  • Используется qdel(M) вместо user.drop_transfer_item_to_loc(M, src), что может привести к некорректному удалению объекта из инвентаря пользователя.
  • Отсутствует проверка на !check_completion(), что может привести к созданию оболочки на незавершенном каркасе.
  • Процедура не возвращает ATTACK_CHAIN_BLOCKED_ALL после успешного создания, что может привести к выполнению лишнего кода.
    Рекомендую переработать этот блок, сделав его более надежным и консистентным с логикой установки ММИ.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну тут ему кажется просто от ТГшного кода просто башку снесло. Так там все легит.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

как минимум по паре пунктов он прав. предмет нужно убирать из инвентаря перед удалением, так же код должен возвращать ATTACK_CHAIN флаг, а вот какой - уже другой вопрос. Так же нужно вынести логически отдельные блоки кода в отдельные проки. Прок слишком большой

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А еще запомни. ТГ код не ультимативен. Там тоже говна хватает

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я не увидел решения по моим замечаниям. Прок нужно разбить на составные части

@Buravka
Copy link
Contributor Author

Buravka commented Feb 12, 2026

Все. Пусть маринуется до лучших времен.

@Buravka
Copy link
Contributor Author

Buravka commented Feb 18, 2026

Опа, разработка ожила???

@pilygun
Copy link
Contributor

pilygun commented Feb 24, 2026

К смысловой части перевода вопросов нет, технически сделано тоже верно.

@pilygun pilygun added the ☑️ Локализация одобрена PR проверен и одобрен Ведущим локализатором. label Feb 24, 2026
pilygun
pilygun previously approved these changes Feb 24, 2026
@Buravka
Copy link
Contributor Author

Buravka commented Feb 27, 2026

Выпустите уже борьку погулять на парашиз. Синтград заждался.

AurothWyvern
AurothWyvern previously approved these changes Feb 27, 2026
Copy link
Collaborator

@AurothWyvern AurothWyvern left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Локализация в порядке 👍

icon_state = "AIshell"

/atom/movable/screen/ai/connect_to_shell/Click()
if(isAI(usr))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ранний ретурн

cell_component.installed = TRUE

/obj/item/robot_parts/robot_suit/proc/check_locomotion(mob/living/silicon/robot/target)
if(!locomotion)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ранний ретурн

@github-actions github-actions bot added Merge Conflict PR содержит изменения, конфликтующие с master-веткой. labels Feb 28, 2026

return TRUE

/mob/living/silicon/ai/verb/deploy_to_shell(mob/living/silicon/robot/target)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Уверен, что нельзя сделать это экшеном, заместо верба?

AI.adjustOxyLoss(200)
else
mainframe.disconnect_shell()
to_chat(AI, span_danger("ВНИМАНИЕ: Беcпроводное подключение с оболочкой было принудительно прервано!"))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

разбей с помощью ранних ретурнов

if(connected_ai != user)
to_chat(user, span_warning("Отказано в доступе. Подключение невозможно."))
return
if(tgui_alert(user, "Подключиться к [name]?", "Подключение к оболочке", list("Подключиться", "Отмена")) != "Подключиться")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Выборы дефайнизировать

var/shell = FALSE
var/deployed = FALSE
var/mob/living/silicon/ai/mainframe = null
var/datum/action/innate/undeployment/undeployment_action = new
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

если ты добавляешь новые ссылки в датум, их нужно обнулять в дестрое, либо удалять объект вместе с обнулением, если он нигде не используется


/mob/living/silicon/ai/adjustFireLoss(amount, updating_health = TRUE, def_zone = null, blocked = 0, forced = FALSE, used_weapon = null, sharp = FALSE, silent = FALSE, affect_robotic = TRUE,)
. = ..()
if(amount > 0)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ранний ретурн


/mob/living/silicon/ai/adjustBruteLoss(amount = 0, updating_health = TRUE, def_zone = null, blocked = 0, forced = FALSE, used_weapon = null, sharp = FALSE, silent = FALSE, affect_robotic = TRUE,)
. = ..()
if(amount > 0)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

и тут

to_chat(src, span_warning("Во время установки cоеденения с оболочкой произошла ошибка."))
return

else if(mind)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ранний ретурн

var/list/possible = list()

for(var/shell in GLOB.available_ai_shells)
var/mob/living/silicon/robot/R = shell
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

имя переменной

var/obj/item/radio/headset/heads/ai_integrated/aiRadio = null

//AI SHELL CONTROL
var/mob/living/silicon/robot/deployed_shell
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ссылка

@github-actions github-actions bot removed the Merge Conflict PR содержит изменения, конфликтующие с master-веткой. label Mar 1, 2026
@Buravka Buravka requested a review from dageavtobusnick March 1, 2026 17:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🎨 Спрайты PR содержит изменения в файлах DMI. ☑️ Локализация одобрена PR проверен и одобрен Ведущим локализатором. 💻 TGUI PR содержит изменения в файлах TGUI.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants