Skip to content

Commit

Permalink
More tweaks & updates
Browse files Browse the repository at this point in the history
  • Loading branch information
EgorDinamit committed Jan 23, 2024
1 parent 63679ff commit 96d17f2
Show file tree
Hide file tree
Showing 2 changed files with 133 additions and 2 deletions.
36 changes: 34 additions & 2 deletions code/game/machinery/mind_engraver.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@
var/mob/living/carbon/human/occupant = null
var/currently_imprinting = FALSE
/// How much time it takes to finish a single process
var/imprint_time = 60 SECONDS
var/imprint_time = 80 SECONDS
/// World time when imprint process is finished
var/imprint_end = 0
/// If TRUE - prevents the user from leaving, unless resisted out of
var/locked = FALSE
/// When the next breakout attempt can be done
var/breakout_cooldown = 0
/// Base chance on every Process() tick to do random damage
var/mistake_chance = 4

/obj/machinery/mind_engraver/Destroy()

Check failure on line 28 in code/game/machinery/mind_engraver.dm

View workflow job for this annotation

GitHub Actions / DreamChecker

/obj/machinery/mind_engraver/proc/Destroy sets SpacemanDMM_should_not_sleep but calls blocking proc /mob/proc/emote

Check failure on line 28 in code/game/machinery/mind_engraver.dm

View workflow job for this annotation

GitHub Actions / DreamChecker

/obj/machinery/mind_engraver/proc/Destroy calls /obj/item/organ/proc/replaced which has override child proc that sleeps /obj/item/organ/internal/voxstack/proc/replaced

Check failure on line 28 in code/game/machinery/mind_engraver.dm

View workflow job for this annotation

GitHub Actions / DreamChecker

/obj/machinery/mind_engraver/proc/Destroy sets SpacemanDMM_should_not_sleep but calls blocking proc /mob/proc/custom_emote
GoOut()
Expand All @@ -42,6 +44,18 @@
return

if(world.time < imprint_end)
var/obj/item/organ/external/O_head = occupant.get_organ(BP_HEAD)
if(prob(mistake_chance) && istype(O_head))
var/choice = pick(1, 2, 3)
switch(choice)
if(1)
O_head.take_external_damage(rand(5, 10), 0, DAM_SHARP|DAM_EDGE)
to_chat(occupant, SPAN_DANGER("\The [src] misplaces a surgical incision, damaging your skin!"))
if(2)
occupant.adjustBrainLoss(rand(5, 15))
to_chat(occupant, SPAN_DANGER("\The [src]'s laser accidentaly passes over the exposed sections of your head, damaging your brain!"))
if(3)
occupant.custom_pain(SPAN_WARNING("You feel sudden sharp pain in your hea!"), 20, affecting = O_head)
return

FinishImprint()
Expand Down Expand Up @@ -137,6 +151,9 @@
var/T = Clamp(total_component_rating_of_type(/obj/item/stock_parts/manipulator), 1, 12)
imprint_time = initial(imprint_time) / (T * 0.5)

T = Clamp(total_component_rating_of_type(/obj/item/stock_parts/capacitor), 1, 12)
mistake_chance = max(0, 1 + initial(mistake_chance) - (T * 0.25))

/obj/machinery/mind_engraver/on_update_icon()
if(!occupant)
icon_state = "engraver_0"
Expand Down Expand Up @@ -190,6 +207,21 @@
if(!occupant)
return

if(locked)
return

if(currently_imprinting)
StopImprint()
var/obj/item/organ/external/O_head = occupant.get_organ(BP_HEAD)
if(O_head)
to_chat(occupant, SPAN_DANGER("\The [src]'s tools quickly disengage away from your brain, leaving a terrible tear!"))
occupant.adjustBrainLoss(100)
occupant.custom_pain(SPAN_WARNING("It feels as if your head burst open!"), 50, affecting = O_head)
O_head.take_external_damage(35, 0, DAM_SHARP|DAM_EDGE)
if(!(stat & (NOPOWER|BROKEN)))
visible_message(SPAN_DANGER("\The [src] blares an alarm as its occupant leaves mid-procedure!"))
playsound(src, 'sound/machines/warning-buzzer.ogg', 50, TRUE, 7)

if(occupant.client)
occupant.client.eye = occupant.client.mob
occupant.client.perspective = MOB_PERSPECTIVE
Expand All @@ -200,7 +232,7 @@
if(!occupant)
return

visible_message(SPAN_DANGER("\The [src] blares an alarm as it loses power and forcefuly ejects the occupant!"))
visible_message(SPAN_DANGER("\The [src] blares an alarm as it loses power[locked ? "" : " and forcefuly ejects the occupant"]!"))
playsound(src, 'sound/machines/warning-buzzer.ogg', 50, TRUE, 7)
return GoOut()

Expand Down
99 changes: 99 additions & 0 deletions code/game/objects/items/devices/mind_engraver_chip.dm
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,30 @@
stored_data = null
return ..()

/* Presets */
/obj/item/mind_engraver_chip/human_languages
name = "mind engraver nanochip - \"Languages of the Humanity\""
desc = "A relatively big chip with tiny label saying \"Languages of the Humanity\"."
icon_state = "romos2"
stored_data = /datum/engraver_data/language/diplomatic

/obj/item/mind_engraver_chip/diplomatic_languages
name = "mind engraver nanochip - \"Dominion Diplomacy\""
desc = "A bigger chip used by Terran Dominion to grant instant knowledge on all languages important to the Diplomatic \
procedures in the universe."
icon_state = "romos2"
stored_data = /datum/engraver_data/language/diplomatic

/* Randomized spawns */
/obj/item/mind_engraver_chip/random_skills
stored_data = /datum/engraver_data/skill/random

/obj/item/mind_engraver_chip/random_languages
stored_data = /datum/engraver_data/language/random

///////////
/* Datum */
///////////
/datum/engraver_data
var/chip_type = "UNKNOWN"

Expand Down Expand Up @@ -65,6 +89,18 @@
target.skillset.on_levels_change()
return TRUE

// Random
/datum/engraver_data/skill/random/New()
. = ..()
var/list/valid_skills = GLOB.skills.Copy()
for(var/i = 1 to rand(1, max_skills_count))
if(!LAZYLEN(valid_skills))
return
var/decl/hierarchy/skill/S = pick(valid_skills)
valid_skills -= S
skills |= S.type

// Presets
/datum/engraver_data/skill/max_combat
skills = list(
SKILL_COMBAT = SKILL_MAX,
Expand All @@ -84,3 +120,66 @@
SKILL_ANATOMY = SKILL_TRAINED,
SKILL_CHEMISTRY = SKILL_TRAINED,
)

/* Languages */
/datum/engraver_data/language
chip_type = "Language Imprint"
var/max_language_count = 3
var/list/languages = list()

/datum/engraver_data/language/PrintFunction()
if(!LAZYLEN(languages))
return SPAN_DANGER("MISSING SKILL DATA")
var/func_text = "<br>"
for(var/lang in languages)
if(!all_languages[lang])
continue
func_text += " - Imprints professional level knowledge on [lowertext(lang)] language<br>"
return func_text

/datum/engraver_data/language/ApplyEffect(mob/living/carbon/human/target)
if(!..())
return FALSE

for(var/lang in languages)
if(!target.add_language(lang))
continue
to_chat(target, SPAN_NOTICE("You gain professional understanding of [lowertext(lang)] language!"))

return TRUE

// Random
/datum/engraver_data/language/random/New()
. = ..()
var/list/valid_languages = all_languages.Copy()
for(var/i = 1 to rand(1, max_language_count))
if(!LAZYLEN(valid_languages))
return
var/datum/language/L = pick(valid_languages)
valid_languages -= L
languages |= L.name

// Presets
/datum/engraver_data/language/humanity/New()
. = ..()
for(var/lang in subtypesof(/datum/language/human))
var/datum/language/L = lang
languages |= initial(L.name)

/datum/engraver_data/language/diplomatic
languages = list(
LANGUAGE_COMMON,
LANGUAGE_SPACER,
LANGUAGE_HUMAN_ENGLISH,
LANGUAGE_SKRELLIAN,
LANGUAGE_UNATHI_SINTA,
)

/datum/engraver_data/language/english
languages = list(LANGUAGE_HUMAN_ENGLISH)

/datum/engraver_data/language/skrell
languages = list(LANGUAGE_SKRELLIAN)

/datum/engraver_data/language/adherent
languages = list(LANGUAGE_ADHERENT)

0 comments on commit 96d17f2

Please sign in to comment.