From 307d1aafccdf6c60be0a3bc42c24d9135fb89e72 Mon Sep 17 00:00:00 2001
From: Vladisvell <73733747+Vladisvell@users.noreply.github.com>
Date: Wed, 11 Dec 2024 15:00:37 +0500
Subject: [PATCH 1/3] Revert "bugfix: Camera console broken screen textures
fix" (#6246)
Revert "bugfix: Camera console broken screen textures fix (#6233)"
This reverts commit 709eae69cb3122220228089d826bc93bc58c22b1.
---
code/game/machinery/computer/camera.dm | 3 ---
1 file changed, 3 deletions(-)
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 8d5244cd0ad..0d3da129c58 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -68,9 +68,6 @@
// Open UI
ui = new(user, src, "CameraConsole", name)
ui.open()
- sleep(1) //Fast and furious: assets were too slow and camera got screwed!
- if(!ui.closing)
- ui.window?.reinitialize()
/obj/machinery/computer/security/ui_assets(mob/user)
return list(
From 35c53e3d09ffe0289dd6e11a9ee8750ed9a1f26f Mon Sep 17 00:00:00 2001
From: Vladisvell <73733747+Vladisvell@users.noreply.github.com>
Date: Wed, 11 Dec 2024 19:32:38 +0500
Subject: [PATCH 2/3] bugfix: Removes experimentor tech exploit (#6247)
---
code/modules/research/experimentor.dm | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 78594494b1d..8de8ec25b37 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -347,18 +347,21 @@
cloneCount = badThingCoeff
investigate_log("Experimentor has made a clone of [exp_on]", INVESTIGATE_EXPERIMENTOR)
ejectItem()
+
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
visible_message("[src] malfunctions, melting [exp_on] and leaking radiation!")
for(var/mob/living/m in oview(1, src))
m.apply_effect(25,IRRADIATE)
investigate_log("Experimentor has irradiated [key_name_log(m)]", INVESTIGATE_EXPERIMENTOR) //One entry per person so we know what was irradiated.
ejectItem(TRUE)
+
if(prob(EFFECT_PROB_LOW-badThingCoeff))
visible_message("[src] malfunctions, spewing toxic waste!")
for(var/turf/T in oview(1, src))
if(!T.density)
if(prob(EFFECT_PROB_VERYHIGH))
new /obj/effect/decal/cleanable/greenglow(T)
+
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
var/savedName = "[exp_on]"
ejectItem(TRUE)
@@ -369,19 +372,14 @@
if(istype(loaded_item,/obj/item/grenade/chem_grenade))
var/obj/item/grenade/chem_grenade/CG = loaded_item
CG.prime()
+
ejectItem()
+
else if(prob(EFFECT_PROB_VERYLOW))
visible_message("The [exp_on] has activated an unknown subroutine!")
clone_next = TRUE
ejectItem()
qdel(exp_on)
-
- var/T = rand(1, linked_console.files.known_tech.len)
- var/datum/tech/KT = linked_console.files.known_tech[linked_console.files.known_tech[T]]
- var/new_level = linked_console.files.UpdateTech(linked_console.files.known_tech[T], KT.level + 1)
- var/tech_log = "[T] [new_level], "
- if(tech_log)
- investigate_log("[usr] increased tech experimentoring [loaded_item]: [tech_log]. ", INVESTIGATE_RESEARCH)
else
exp = FAIL
From 535eedf63384140b07d4619626b71e65985221dc Mon Sep 17 00:00:00 2001
From: Explosi00N <164616179+Explosi00N@users.noreply.github.com>
Date: Fri, 13 Dec 2024 22:30:54 +0900
Subject: [PATCH 3/3] qol: tendril loot translation (#6236)
* Update tendril_loot.dm
* Update tendril_loot.dm
* updae
* upde
* upe
* ue
* u
Co-authored-by: PlayerUnknown14 <139672964+PlayerUnknown14@users.noreply.github.com>
* e
Co-authored-by: PlayerUnknown14 <139672964+PlayerUnknown14@users.noreply.github.com>
* updat
Co-authored-by: PlayerUnknown14 <139672964+PlayerUnknown14@users.noreply.github.com>
* pdte
* pizdec
* apply suggests
---------
Co-authored-by: PlayerUnknown14 <139672964+PlayerUnknown14@users.noreply.github.com>
Co-authored-by: Antoonij <42318445+Antoonij@users.noreply.github.com>
---
.../mining/lavaland/loot/tendril_loot.dm | 178 ++++++++++++++----
1 file changed, 141 insertions(+), 37 deletions(-)
diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm
index 21d4e613711..1a312d331fb 100644
--- a/code/modules/mining/lavaland/loot/tendril_loot.dm
+++ b/code/modules/mining/lavaland/loot/tendril_loot.dm
@@ -3,7 +3,15 @@
//Internal
/obj/item/storage/backpack/shared
name = "paradox bag"
- desc = "Somehow, it's in two places at once."
+ desc = "Каким-то образом, эта сумка существует в двух местах одновременно."
+ ru_names = list(
+ NOMINATIVE = "парадоксальная сумка",
+ GENITIVE = "парадоксальной сумки",
+ DATIVE = "парадоксальной сумке",
+ ACCUSATIVE = "парадоксальную сумку",
+ INSTRUMENTAL = "парадоксальной сумкой",
+ PREPOSITIONAL = "парадоксальной сумке"
+ )
max_combined_w_class = 60
max_w_class = WEIGHT_CLASS_NORMAL
cant_hold = list(/obj/item/storage/backpack/shared)
@@ -13,7 +21,7 @@
// basically we cannot put one bag in the storage if another one is already there
if(istype(I) && I.bag && I.bag == src && I.twin_storage && I.twin_storage.loc == src)
if(!stop_messages)
- to_chat(usr, span_warning("Yo dawg, and how are you going to do it?"))
+ balloon_alert(usr, "невозможно!")
return FALSE
return ..()
@@ -21,7 +29,15 @@
//External
/obj/item/shared_storage
name = "paradox bag"
- desc = "Somehow, it's in two places at once."
+ desc = "Каким-то образом, эта сумка существует в двух местах одновременно."
+ ru_names = list(
+ NOMINATIVE = "парадоксальная сумка",
+ GENITIVE = "парадоксальной сумки",
+ DATIVE = "парадоксальной сумке",
+ ACCUSATIVE = "парадоксальную сумку",
+ INSTRUMENTAL = "парадоксальной сумкой",
+ PREPOSITIONAL = "парадоксальной сумке"
+ )
icon = 'icons/obj/storage.dmi'
icon_state = "cultpack"
slot_flags = ITEM_SLOT_BACK
@@ -111,7 +127,15 @@
/obj/item/book_of_babel
name = "Book of Babel"
- desc = "An ancient tome written in countless tongues."
+ desc = "Древнейший фолиант, написанный в бесчисленном множестве языков."
+ ru_names = list(
+ NOMINATIVE = "книга Вавилона",
+ GENITIVE = "книги Вавилона",
+ DATIVE = "книге Вавилона",
+ ACCUSATIVE = "книгу Вавилона",
+ INSTRUMENTAL = "книгой Вавилона",
+ PREPOSITIONAL = "книге Вавилона"
+ )
icon = 'icons/obj/library.dmi'
icon_state = "book1"
w_class = 2
@@ -119,11 +143,14 @@
/obj/item/book_of_babel/attack_self(mob/living/carbon/user)
if(HAS_TRAIT(user, TRAIT_NO_BABEL))
- user.visible_message(span_notice("[user] suddenly stops, releasing [src]."))
- to_chat(user, span_warning("You don't know what a book is or what to do with it."))
+ user.visible_message(
+ span_notice("[user] внезапно останавлива[pluralize_ru(user, "ет", "ют")]ся, недоумённо глядя на [declent_ru(GENITIVE)]."),
+ span_warning("Вы понятия не имеете, что это такое и что с этим делать.")
+ )
+
return
- to_chat(user, "You flip through the pages of the book, quickly and conveniently learning every language in existence. Somewhat less conveniently, the aging book crumbles to dust in the process. Whoops.")
+ to_chat(user, "Вы упоённо пролистываете страницы книги, вбирая в себя знания всех существующих языков во Вселенной. К сожалению, [declent_ru(NOMINATIVE)] не выдерживает такого напора и рассыпается в прах. Ой...")
user.grant_all_babel_languages()
new /obj/effect/decal/cleanable/ash(get_turf(user))
user.temporarily_remove_item_from_inventory(src)
@@ -138,7 +165,15 @@
/obj/item/reagent_containers/glass/bottle/potion/flight
name = "strange elixir"
- desc = "A flask with an almost-holy aura emitting from it. The label on the bottle says: 'erqo'hyy tvi'rf lbh jv'atf'."
+ desc = "Флакон с едва ли не святой аурой, исходящей от него. Вы пытаетесь прочитать надпись на бутылке, но текст неразборчив."
+ ru_names = list(
+ NOMINATIVE = "странный эликсир",
+ GENITIVE = "странного эликсира",
+ DATIVE = "странному эликсиру",
+ ACCUSATIVE = "странный эликсир",
+ INSTRUMENTAL = "странным эликсиром",
+ PREPOSITIONAL = "странном эликсире"
+ )
list_reagents = list("flightpotion" = 5)
/obj/item/reagent_containers/glass/bottle/potion/update_icon_state()
@@ -150,20 +185,20 @@
/datum/reagent/flightpotion
name = "Flight Potion"
id = "flightpotion"
- description = "Strange mutagenic compound of unknown origins."
+ description = "Странный мутагенный состав неизвестного происхождения."
reagent_state = LIQUID
color = "#FFEBEB"
/datum/reagent/flightpotion/reaction_mob(mob/living/M, method = REAGENT_TOUCH, reac_volume, show_message = 1)
- to_chat(M, "This item is currently non-functional.")
+ to_chat(M, span_warning("Данный предмет нефункционален на текущий момент."))
/*if(ishuman(M) && M.stat != DEAD)
var/mob/living/carbon/human/H = M
if(!ishumanbasic(H) || reac_volume < 5) // implying xenohumans are holy
if(method == INGEST && show_message)
- to_chat(H, "You feel nothing but a terrible aftertaste.")
+ to_chat(H, span_notice("Кроме отвратительного послевкусия у вас во рту, вы ничего не почувствовали."))
return ..()
- to_chat(H, "A terrible pain travels down your back as wings burst out!")
+ to_chat(H, span_danger("Невыносимая боль проходит через вашу спину, как вдруг оттуда вырываются крылья!"))
H.set_species(/datum/species/angel)
playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1)
H.adjustBruteLoss(20)
@@ -172,7 +207,15 @@
/obj/item/jacobs_ladder
name = "jacob's ladder"
- desc = "A celestial ladder that violates the laws of physics."
+ desc = "Небесная лестница, нарушающая законы физики."
+ ru_names = list(
+ NOMINATIVE = "лестница Иакова",
+ GENITIVE = "лестницы Иакова",
+ DATIVE = "лестнице Иакова",
+ ACCUSATIVE = "лестницу Иакова",
+ INSTRUMENTAL = "лестницей Иакова",
+ PREPOSITIONAL = "лестнице Иакова"
+ )
icon = 'icons/obj/structures.dmi'
icon_state = "ladder"
@@ -180,7 +223,7 @@
var/turf/T = get_turf(src)
var/ladder_x = T.x
var/ladder_y = T.y
- to_chat(user, "You unfold the ladder. It extends much farther than you were expecting.")
+ to_chat(user, span_notice("Вы разворачиваете лестницу. Она уходит значительно дальше, чем вы ожидали."))
var/last_ladder = null
for(var/i in 1 to world.maxz)
if(is_admin_level(i) || is_away_level(i) || is_taipan(i))
@@ -195,12 +238,27 @@
// Inherit from unbreakable but don't set ID, to suppress the default Z linkage
/obj/structure/ladder/unbreakable/jacob
name = "jacob's ladder"
- desc = "An indestructible celestial ladder that violates the laws of physics."
-
+ desc = "Нерушимая небесная лестница, нарушающая законы физики."
+ ru_names = list(
+ NOMINATIVE = "лестница Иакова",
+ GENITIVE = "лестницы Иакова",
+ DATIVE = "лестнице Иакова",
+ ACCUSATIVE = "лестницу Иакова",
+ INSTRUMENTAL = "лестницей Иакова",
+ PREPOSITIONAL = "лестнице Иакова"
+ )
//Wisp Lantern
/obj/item/wisp_lantern
name = "spooky lantern"
- desc = "This lantern gives off no light, but is home to a friendly wisp."
+ desc = "Эта лампа не источает света, но является пристанищем для дружелюбного духа."
+ ru_names = list(
+ NOMINATIVE = "жуткая лампа",
+ GENITIVE = "жуткой лампы",
+ DATIVE = "жуткой лампе",
+ ACCUSATIVE = "жуткую лампу",
+ INSTRUMENTAL = "жуткой лампой",
+ PREPOSITIONAL = "жуткой лампе"
+ )
icon = 'icons/obj/lighting.dmi'
icon_state = "lantern-blue"
item_state = "lantern"
@@ -222,33 +280,31 @@
/obj/item/wisp_lantern/attack_self(mob/user)
if(!wisp)
- to_chat(user, "The wisp has gone missing!")
+ balloon_alert(user, "дух исчезает")
update_icon(UPDATE_ICON_STATE)
return
if(wisp.loc == src)
RegisterSignal(user, COMSIG_MOB_UPDATE_SIGHT, PROC_REF(update_user_sight))
- to_chat(user, "You release the wisp. It begins to bob around your head.")
+ balloon_alert(user, "дух выпущен")
wisp.forceMove(user)
update_icon(UPDATE_ICON_STATE)
INVOKE_ASYNC(wisp, TYPE_PROC_REF(/atom/movable, orbit), user, 20)
set_light_on(FALSE)
user.update_sight()
- to_chat(user, "The wisp enhances your vision.")
SSblackbox.record_feedback("tally", "wisp_lantern", 1, "Freed") // freed
else
UnregisterSignal(user, COMSIG_MOB_UPDATE_SIGHT)
- to_chat(user, "You return the wisp to the lantern.")
+ balloon_alert("дух возвращён")
wisp.stop_orbit()
wisp.forceMove(src)
set_light_on(TRUE)
user.update_sight()
- to_chat(user, "Your vision returns to normal.")
update_icon(UPDATE_ICON_STATE)
SSblackbox.record_feedback("tally", "wisp_lantern", 1, "Returned") // returned
@@ -263,7 +319,7 @@
if(wisp.loc == src)
qdel(wisp)
else
- wisp.visible_message("[wisp] has a sad feeling for a moment, then it passes.")
+ wisp.visible_message(span_notice("Дух огорчённо вздыхает, а затем улетает восвояси."))
return ..()
/obj/item/wisp_lantern/proc/update_user_sight(mob/user)
@@ -273,7 +329,15 @@
/obj/effect/wisp
name = "friendly wisp"
- desc = "Happy to light your way."
+ desc = "Счастливо освещает вам путь."
+ ru_names = list(
+ NOMINATIVE = "дружелюбный дух",
+ GENITIVE = "дружелюбного духа",
+ DATIVE = "дружелюбному духу",
+ ACCUSATIVE = "дружелюбного духа",
+ INSTRUMENTAL = "дружелюбным духом",
+ PREPOSITIONAL = "дружелюбном духе"
+ )
icon = 'icons/obj/lighting.dmi'
icon_state = "orb"
light_range = 7
@@ -282,7 +346,15 @@
//Red/Blue Cubes
/obj/item/warp_cube
name = "blue cube"
- desc = "A mysterious blue cube."
+ desc = "Мистический синий куб."
+ ru_names = list(
+ NOMINATIVE = "синий куб",
+ GENITIVE = "синего куба",
+ DATIVE = "синему кубу",
+ ACCUSATIVE = "синий куб",
+ INSTRUMENTAL = "синим кубом",
+ PREPOSITIONAL = "синем кубе"
+ )
icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "blue_cube"
var/obj/item/warp_cube/linked
@@ -295,11 +367,11 @@
/obj/item/warp_cube/attack_self(mob/user)
if(!linked)
- to_chat(user, "[src] fizzles uselessly.")
+ balloon_alert(user, "куб искрится и шипит")
return
if(is_in_teleport_proof_area(user) || is_in_teleport_proof_area(linked))
- to_chat(user, "[src] sparks and fizzles.")
+ balloon_alert(user, "куб искрится и шипит.")
return
if(do_after(user, 1.5 SECONDS, user))
var/datum/effect_system/smoke_spread/smoke = new
@@ -313,12 +385,20 @@
smoke2.set_up(1, 0, user.loc)
smoke2.start()
else
- to_chat(user, "You need to hold still to use [src].")
+ balloon_alert(user, "прервано из-за движения")
/obj/item/warp_cube/red
name = "red cube"
- desc = "A mysterious red cube."
+ desc = "Мистический красный куб."
+ ru_names = list(
+ NOMINATIVE = "красный куб",
+ GENITIVE = "красного куба",
+ DATIVE = "красному кубу",
+ ACCUSATIVE = "красный куб",
+ INSTRUMENTAL = "красным кубом",
+ PREPOSITIONAL = "красном кубе"
+ )
icon_state = "red_cube"
/obj/item/warp_cube/red/New()
@@ -332,7 +412,15 @@
/obj/item/gun/magic/hook
name = "meat hook"
- desc = "Mid or feed."
+ desc = "Ты погляди, свежее мясо!"
+ ru_names = list(
+ NOMINATIVE = "мясной крюк",
+ GENITIVE = "мясного крюка",
+ DATIVE = "мясному крюку",
+ ACCUSATIVE = "мясной крюк",
+ INSTRUMENTAL = "мясным крюком",
+ PREPOSITIONAL = "мясном крюке"
+ )
ammo_type = /obj/item/ammo_casing/magic/hook
icon_state = "hook"
item_state = "chain"
@@ -343,7 +431,15 @@
/obj/item/ammo_casing/magic/hook
name = "hook"
- desc = "a hook."
+ desc = "Это крюк."
+ ru_names = list(
+ NOMINATIVE = "крюк",
+ GENITIVE = "крюка",
+ DATIVE = "крюку",
+ ACCUSATIVE = "крюк",
+ INSTRUMENTAL = "крюком",
+ PREPOSITIONAL = "крюке"
+ )
projectile_type = /obj/item/projectile/hook
caliber = "hook"
icon_state = "hook"
@@ -372,7 +468,7 @@
var/turf/firer_turf = get_turf(firer)
var/mob/living/L = target
if(!L.anchored && L.loc)
- L.visible_message("[L] is snagged by [firer]'s hook!")
+ L.visible_message(span_danger("[firer] зацепля[pluralize_ru(firer, "ет", "ют")] [L] [declent_ru(INSTRUMENTAL)]!"))
ADD_TRAIT(L, TRAIT_UNDENSE, UNIQUE_TRAIT_SOURCE(src)) // Ensures the hook does not hit the target multiple times
L.forceMove(firer_turf)
REMOVE_TRAIT(L, TRAIT_UNDENSE, UNIQUE_TRAIT_SOURCE(src))
@@ -385,7 +481,15 @@
//Immortality Talisman
/obj/item/immortality_talisman
name = "Immortality Talisman"
- desc = "A dread talisman that can render you completely invulnerable."
+ desc = "Таинственный талисман, способный даровать неуязвимость."
+ ru_names = list(
+ NOMINATIVE = "Талисман Бессмертия",
+ GENITIVE = "Талисмана Бессмертия",
+ DATIVE = "Талисману Бессмертия",
+ ACCUSATIVE = "Талисман Бессмертия",
+ INSTRUMENTAL = "Талисманом Бессмертия",
+ PREPOSITIONAL = "Талисмане Бессмертия"
+ )
icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "talisman"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
@@ -406,7 +510,7 @@
/obj/item/immortality_talisman/attack_self(mob/user)
if(!COOLDOWN_FINISHED(src, last_used_immortality_talisman))
- to_chat(user, span_warning("[src] is still recharging."))
+ balloon_alert(user, "ещё не готово!")
return
var/turf/source_turf = get_turf(src)
@@ -415,11 +519,11 @@
COOLDOWN_START(src, last_used_immortality_talisman, 60 SECONDS)
SSblackbox.record_feedback("amount", "immortality_talisman_uses", 1)
- user.visible_message(span_danger("[user] vanishes from reality, leaving a a hole in [user.p_their()] place!"))
+ user.visible_message(span_danger("[user] исчеза[pluralize_ru(user, "ет", "ют")] из реальности, оставляя после себя дыру в пространстве!"))
var/obj/effect/immortality_talisman/effect = new(source_turf)
effect.name = "hole in reality"
- effect.desc = "It's shaped an awful lot like [user.name]."
+ effect.desc = "Подозрительно походит на силуэт [user.name]."
effect.setDir(user.dir)
user.forceMove(effect)
user.add_traits(list(TRAIT_NO_TRANSFORM, TRAIT_GODMODE), UNIQUE_TRAIT_SOURCE(src))
@@ -438,7 +542,7 @@
user.remove_traits(list(TRAIT_NO_TRANSFORM, TRAIT_GODMODE), UNIQUE_TRAIT_SOURCE(src))
user.forceMove(effect_turf)
- user.visible_message(span_danger("[user] pops back into reality!"))
+ user.visible_message(span_danger("[user] материализу[pluralize_ru(user.gender, "ет", "ют")]ся в пространстве, вновь возвращаясь в нашу реальность!"))
effect.can_destroy = TRUE
if(length(effect.contents))