diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 5fb29be38b1f..1771e96838c4 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -20,11 +20,17 @@
return A
return 0
-/proc/get_area_name(atom/X, format_text = FALSE)
+/proc/get_area_name(atom/X, format_text = FALSE, short = FALSE)
var/area/A = isarea(X) ? X : get_area(X)
if(!A)
return null
- return format_text ? format_text(A.name) : A.name
+ if(short)
+ if(A.short_name)
+ . = A.short_name
+ else
+ . = replacetext(format_text(get_first_word(A.name)),"'s","")
+ else
+ . = format_text ? format_text(A.name) : A.name
/proc/get_coordinates_string(var/atom/A)
var/turf/T = get_turf(A)
diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_effects.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_effects.dm
index 702bf66957e4..d13947bad436 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult_effects.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult_effects.dm
@@ -66,7 +66,7 @@
qdel(src)
/obj/effect/cult_shortcut/attack_hand(var/mob/living/user)
- if (!iscultist(user))
+ if (!iscultist(user) && !arcanetampered)
to_chat(user, "The markings on this wall are peculiar. You don't feel comfortable staring at them.")
return
var/turf/T = get_turf(user)
@@ -79,7 +79,23 @@
user.forceMove(loc)
sleep(1)
new /obj/effect/afterimage/red(loc,user)
- user.forceMove(get_step(loc,jump_dir))
+ if(!arcanetampered)
+ user.forceMove(get_step(loc,jump_dir))
+ else
+ user.dimensional_push()
+ if(!iscultist(user))
+ user.Knockdown(3)
+ user.Stun(3)
+ if(ishuman(user))
+ shake_camera(user, 20, 1)
+ spawn(20)
+ if(user)
+ to_chat(user,"You vomit from travelling through \the [src]!")
+ user.nutrition = max(user.nutrition-20,0)
+ user.adjustToxLoss(-3)
+ var/turf/V = get_turf(user) //V for Vomit
+ V.add_vomit_floor(user)
+ playsound(V, 'sound/effects/splat.ogg', 50, 1)
/obj/effect/cult_shortcut/cultify()
return
diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm
index e6e5f3714d0d..17e49eabee35 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm
@@ -312,15 +312,21 @@
R.active_spell.midcast(user)
return
- switch(structure)
- if("Altar")
- spawntype = /obj/structure/cult/altar
- if("Spire")
- spawntype = /obj/structure/cult/spire
- if("Forge")
- spawntype = /obj/structure/cult/forge
- if("Pylon")
- spawntype = /obj/structure/cult/pylon
+ if(spell_holder?.arcanetampered)
+ spawntype = pick(/obj/item/weapon/reagent_containers/food/snacks/badrecipe,\
+ /obj/item/weapon/bikehorn/rubberducky,\
+ /obj/item/weapon/bikehorn,\
+ /obj/item/weapon/card/fake_emag)
+ else
+ switch(structure)
+ if("Altar")
+ spawntype = /obj/structure/cult/altar
+ if("Spire")
+ spawntype = /obj/structure/cult/spire
+ if("Forge")
+ spawntype = /obj/structure/cult/forge
+ if("Pylon")
+ spawntype = /obj/structure/cult/pylon
if(!spell_holder)
return
@@ -413,6 +419,8 @@
for(var/mob/living/L in contributors)
var/datum/role/cultist/C = L.mind.GetRole(CULTIST)
C.gain_devotion(10, DEVOTION_TIER_1,"raise_structure",structure)
+ if(spell_holder.arcanetampered)
+ playsound(spell_holder.loc, 'sound/misc/fart.ogg', 50, 1)
new spawntype(spell_holder.loc)
qdel(spell_holder) //Deletes the datum as well.
@@ -444,6 +452,7 @@
R.one_pulse()
var/mob/living/user = activator
comms = new /obj/effect/cult_ritual/cult_communication(spell_holder.loc,user,src)
+ comms.arcanetampered = spell_holder?.arcanetampered
/datum/rune_spell/communication/midcast(var/mob/living/user)
var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
@@ -538,6 +547,13 @@
speaker_name = H.real_name
L = speech.speaker
rendered_message = speech.render_message()
+ if(arcanetampered)
+ if(prob(50))
+ speech.message = derpspeech(speech.message)
+ else
+ speech.message = tumblrspeech(speech.message)
+ speech.message = nekospeech(speech.message)
+ speaker_name = pick(clown_names)
var/datum/faction/bloodcult = find_active_faction_by_member(iscultist(L))
for(var/datum/role/cultist/C in bloodcult.members)
var/datum/mind/M = C.antag
@@ -549,6 +565,8 @@
to_chat(A, "[speaker_name] communicates, [speech.message]")
for(var/mob/dead/observer/O in player_list)
to_chat(O, "[speaker_name] communicates, [speech.message]")
+ if(arcanetampered && prob(50))
+ L.radio(speech,MODE_HEADSET) //busted!
log_cultspeak("[key_name(speech.speaker)] Cult Communicate Rune: [rendered_message]")
/obj/effect/cult_ritual/cult_communication/HasProximity(var/atom/movable/AM)
@@ -2303,7 +2321,9 @@ var/list/seer_rituals = list()
L.stat = CONSCIOUS
if (L.reagents)
L.reagents.del_reagent(HOLYWATER)
- if (!L.reagents.has_any_reagents(HYPERZINES))
+ if(spell_holder.arcanetampered && !L.reagents.has_any_reagents(HONKSERUM))
+ L.reagents.add_reagent(HONKSERUM,1)
+ else if (!L.reagents.has_any_reagents(HYPERZINES))
L.reagents.add_reagent(HYPERZINE,1,"no motor mouth")
qdel(spell_holder)
qdel(src)
@@ -2495,6 +2515,11 @@ var/list/seer_rituals = list()
for(var/mob/living/L in contributors)
to_chat(activator, "The ritual failed, the target seems to be under a curse that prevents us from reaching them through the veil.")
else
+ if(spell_holder?.arcanetampered) // send in the clowns!
+ for (var/mob/living/carbon/human/H in player_list)
+ if(istype(H) && !H.stat && istype(H.get_item_by_slot(slot_wear_mask),/obj/item/clothing/mask/gas/clown_hat))
+ target = H
+ break
if (rejoin)
var/list/valid_turfs = list()
for(var/turf/T in orange(target,1))
@@ -3084,6 +3109,8 @@ var/list/bloodcult_exitportals = list()
newCultist.tattoos[TATTOO_MANIFEST] = new /datum/cult_tattoo/manifest()
vessel.equip_or_collect(new /obj/item/clothing/under/leather_rags(vessel), slot_w_uniform)
+ if(spell_holder?.arcanetampered)
+ vessel.adjustBrainLoss(100)
M.regenerate_icons()
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index be5d944bb211..8c8fa67ee3ff 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -98,6 +98,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/destroy_after_marker = FALSE //The area is deleted after its holomap marker is created. Useful for shuttle docking zones that need to remain area-free.
+ var/short_name
+
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
var/list/teleportlocs = list()
@@ -661,6 +663,7 @@ var/global/list/adminbusteleportlocs = list()
/area/asteroid // -- TLE
name = "\improper Asteroid"
+ short_name = "Roid"
icon_state = "asteroid"
requires_power = 0
shuttle_can_crush = FALSE
@@ -872,6 +875,7 @@ var/global/list/adminbusteleportlocs = list()
//Maintenance
/area/maintenance
+ short_name = "Maint"
shuttle_can_crush = FALSE
ambient_sounds = list(
/datum/ambience/maint1,
@@ -1112,6 +1116,7 @@ var/global/list/adminbusteleportlocs = list()
/area/crew_quarters/sleep
name = "\improper Dormitories"
+ short_name = "Dorms"
icon_state = "Sleep"
/area/crew_quarters/sleep_male
@@ -1363,6 +1368,7 @@ var/global/list/adminbusteleportlocs = list()
//Solars
/area/solar
+ short_name = "Solars"
requires_power = 0
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
shuttle_can_crush = FALSE
@@ -1605,6 +1611,7 @@ var/global/list/adminbusteleportlocs = list()
/area/security/perma
name = "\improper Permanent Confinement"
+ short_name = "Perma"
icon_state = "sec_perma"
/area/security/gas_chamber
@@ -1659,6 +1666,7 @@ var/global/list/adminbusteleportlocs = list()
/area/security/armory
name = "\improper Secure Armory"
+ short_name = "Armory"
icon_state = "Armory"
holomap_color = HOLOMAP_AREACOLOR_COMMAND
jammed=1
@@ -1800,6 +1808,7 @@ var/global/list/adminbusteleportlocs = list()
/area/science/xenobiology
name = "\improper Xenobiology Lab"
+ short_name = "Xenobio"
icon_state = "xenobio"
/area/science/xenobiology/specimen_1
@@ -1871,6 +1880,7 @@ var/global/list/adminbusteleportlocs = list()
//Storage
/area/storage
+ short_name = "Storage"
shuttle_can_crush = FALSE
/area/storage/tools
@@ -1909,6 +1919,7 @@ var/global/list/adminbusteleportlocs = list()
/area/storage/nuke_storage
name = "\improper Vault"
+ short_name = null
icon_state = "nuke_storage"
holomap_color = HOLOMAP_AREACOLOR_COMMAND
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 6500117c3222..ff5ade72a51f 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -882,15 +882,23 @@ its easier to just keep the beam vertical.
/mob/var/list/atom/arcane_tampered_atoms = list()
/atom/proc/arcane_act(var/mob/user, var/recursive = FALSE)
- if(user)
+ if(ismob(user))
arcanetampered = user
user.arcane_tampered_atoms.Add(src)
else
arcanetampered = TRUE
+ . = "E'MAGI!"
if(recursive)
for(var/atom/A in contents)
- A.arcane_act(user,TRUE)
- return "E'MAGI!"
+ var/invoke = A.arcane_act(user,TRUE)
+ if(invoke != "E'MAGI!") //anything other than the default recursively? return that instead
+ . = invoke
+ if(reagents)
+ for(var/datum/reagent/R in reagents.reagent_list)
+ if(R.arcane_id)
+ var/oldamt = R.volume
+ reagents.remove_reagent(R.id, oldamt*R.arcane_ratio)
+ reagents.add_reagent(R.arcane_id, oldamt*R.arcane_ratio)
//Called on holy_water's reaction_obj()
/atom/proc/bless()
diff --git a/code/game/machinery/computer/arcade/arcade.dm b/code/game/machinery/computer/arcade/arcade.dm
index 4b65bf373f3e..63344ca21f06 100644
--- a/code/game/machinery/computer/arcade/arcade.dm
+++ b/code/game/machinery/computer/arcade/arcade.dm
@@ -70,8 +70,8 @@
game.emag_act(user)
/obj/machinery/computer/arcade/arcane_act(mob/user)
- game.emag_act(user) // until i come up with something better, reward differs for now though
- return ..()
+ game.arcane_act(user)
+ return "H'NK!"
/obj/machinery/computer/arcade/bless()
return
diff --git a/code/game/machinery/computer/arcade/arcade_game.dm b/code/game/machinery/computer/arcade/arcade_game.dm
index e1a19fcfbc2a..5eba91a8c201 100644
--- a/code/game/machinery/computer/arcade/arcade_game.dm
+++ b/code/game/machinery/computer/arcade/arcade_game.dm
@@ -4,6 +4,7 @@
var/list/prizes = list()
var/list/cheaters = list()
var/emagged = 0
+ var/arcanetampered = 0
var/turn = 0
/datum/arcade_game/Destroy()
@@ -42,6 +43,10 @@
if(holder)
holder.name = name
+/datum/arcade_game/proc/arcane_act(mob/user)
+ if(holder)
+ holder.name = name
+
/datum/arcade_game/proc/emp_act(var/severity)
/datum/arcade_game/proc/kick_act()
@@ -117,6 +122,7 @@
/datum/arcade_game/space_villain/export_data()
return list("name" = name,
"emagged" = emagged,
+ "arcanetampered" = arcanetampered,
"enemy_name" = enemy_name,
"temp" = temp,
"player_hp" = player_hp,
@@ -137,6 +143,7 @@
return
name = args["name"]
emagged = args["emagged"]
+ arcanetampered = args["arcanetampered"]
enemy_name = args["enemy_name"]
temp = args["temp"]
player_hp = args["player_hp"]
@@ -229,6 +236,9 @@
if(emagged)
src.New()
emagged = 0
+ if(arcanetampered)
+ src.New()
+ arcanetampered = 0
holder.add_fingerprint(usr)
holder.updateUsrDialog()
@@ -241,29 +251,44 @@
temp = "[enemy_name] has fallen! Rejoice!"
if(emagged)
+ new /obj/item/clothing/head/collectable/petehat(holder.loc)
+ new /obj/item/device/maracas/cubanpete(holder.loc)
+ new /obj/item/device/maracas/cubanpete(holder.loc)
+ if(arcanetampered)
+ new /obj/item/weapon/reagent_containers/glass/bottle/wizarditis(holder.loc)
+ new /obj/item/clothing/suit/wizrobe(holder.loc)
+ new /obj/item/clothing/head/wizard(holder.loc)
+ new /obj/item/clothing/shoes/sandal(holder.loc)
+ if(emagged && arcanetampered)
+ feedback_inc("arcade_win_arcane_emagged")
+ message_admins("[key_name_admin(usr)] has out-shoe-bombed Cuban Willy and been awarded explosive maracas and a wizard culture bottle.")
+ log_game("[key_name_admin(usr)] has out-shoe-bombed Cuban Willy and been awarded explosive maracas and a wizard culture bottle.")
+ else if(emagged)
feedback_inc("arcade_win_emagged")
- if(holder.arcanetampered)
- new /obj/item/weapon/reagent_containers/glass/bottle/wizarditis(holder.loc)
- new /obj/item/clothing/suit/wizrobe(holder.loc)
- new /obj/item/clothing/head/wizard(holder.loc)
- new /obj/item/clothing/shoes/sandal(holder.loc)
- else
- new /obj/item/clothing/head/collectable/petehat(holder.loc)
- new /obj/item/device/maracas/cubanpete(holder.loc)
- new /obj/item/device/maracas/cubanpete(holder.loc)
message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded explosive maracas.")
log_game("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded explosive maracas.")
- holder.New()
- emagged = 0
-
+ else if(arcanetampered)
+ feedback_inc("arcade_win_arcane")
+ message_admins("[key_name_admin(usr)] has out-shoe-snatched Willy and been awarded a wizard culture bottle.")
+ log_game("[key_name_admin(usr)] has out-shoe-snatched Willy and been awarded a wizard culture bottle.")
else
feedback_inc("arcade_win_normal")
dispense_prize(1)
+ if(emagged || arcanetampered)
+ holder.New()
+ emagged = 0
+ arcanetampered = 0
- else if (emagged && (turtle >= 4))
+ else if (turtle >= 4)
var/boomamt = rand(5,10)
- temp = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!"
- player_hp -= boomamt
+ if(emagged)
+ temp = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!"
+ player_hp -= boomamt
+ if(arcanetampered)
+ temp = "[enemy_name] snatches your shoes, stealing [boomamt] of your power!"
+ player_mp -= boomamt
+ if(emagged && arcanetampered)
+ temp = "[enemy_name] bombs your shoes, stealing [boomamt] of your power and exploding you for [boomamt] damage!"
else if ((enemy_mp <= 5) && (prob(70)))
var/stealamt = rand(2,3)
@@ -278,6 +303,9 @@
if(emagged)
feedback_inc("arcade_loss_mana_emagged")
usr.gib()
+ else if(arcanetampered)
+ feedback_inc("arcade_loss_mana_arcanetampered")
+ usr.gib()
else
feedback_inc("arcade_loss_mana_normal")
@@ -297,6 +325,9 @@
if(emagged)
feedback_inc("arcade_loss_hp_emagged")
usr.gib()
+ else if(arcanetampered)
+ feedback_inc("arcade_loss_mana_arcanetampered")
+ usr.gib()
else
feedback_inc("arcade_loss_hp_normal")
@@ -329,10 +360,10 @@
if(istype(holder.playertwo,/mob/living/simple_animal/hostile/pulse_demon))
var/mob/living/simple_animal/hostile/pulse_demon/PD = holder.playertwo
var/oldhealth = PD.health
- var/subtract = 50 * (emagged * 3) //Packs a punch to them
+ var/subtract = 50 * ((emagged || arcanetampered) * 3) //Packs a punch to them
PD.health -= subtract
if(oldhealth - subtract <= 0) //If they die from this
- if(emagged && prob(25))
+ if((emagged || arcanetampered) && prob(25))
var/obj/item/device/powersink/PS = new /obj/item/device/powersink(holder.loc)
PS.dev_multi = 6
else if(prob(50))
@@ -361,7 +392,7 @@
/datum/arcade_game/space_villain/proc/harm_p1()
if(istype(holder.playertwo,/mob/living/simple_animal/hostile/pulse_demon) && isliving(holder.playerone))
var/mob/living/L = holder.playerone
- L.electrocute_act(67 * (emagged * 3), src, 1) //And to the player too, if (s)he loses
+ L.electrocute_act(67 * ((emagged || arcanetampered) * 3), src, 1) //And to the player too, if (s)he loses
/datum/arcade_game/space_villain/proc/action_charge()
blocked = 1
@@ -452,11 +483,11 @@
check_p2_win()
/datum/arcade_game/space_villain/is_cheater(mob/user)
- if(emagged && !gameover)
+ if((emagged || arcanetampered) && !gameover)
if(holder.stat & (NOPOWER|BROKEN|FORCEDISABLE))
return 0
else if(user in cheaters)
- to_chat(usr, "[enemy_name] throws a bomb at you for trying to cheat him again.")
+ to_chat(usr, "[enemy_name] throws a [arcanetampered ? "shoe" : "bomb"] at you for trying to cheat him again.")
explosion(holder.loc,-1,0,2, whodunnit = user)//IED sized explosion
user.gib()
cheaters = null
@@ -469,7 +500,6 @@
return 0
/datum/arcade_game/space_villain/emag_act(mob/user)
- ..()
if(is_cheater(user))
return
@@ -486,6 +516,34 @@
enemy_name = "Cuban Pete"
name = "Outbomb Cuban Pete"
+ if(arcanetampered)
+ enemy_name = "Cuban Willy"
+ name = "Out-shoe-bomb Willy"
+ ..()
+
+ holder.updateUsrDialog()
+
+/datum/arcade_game/space_villain/arcane_act(mob/user)
+ if(is_cheater(user))
+ return
+
+ temp = "If you die in the game, you die for real!"
+ p2_temp = "If he dies in the game, he dies for real!"
+ player_hp = 30
+ player_mp = 10
+ enemy_hp = 45
+ enemy_mp = 20
+ gameover = 0
+ blocked = 0
+
+ arcanetampered = 1
+
+ enemy_name = "Shoe Snatchin Willy"
+ name = "Out-shoe-snatch Willy"
+ if(emagged)
+ enemy_name = "Cuban Willy"
+ name = "Out-shoe-bomb Willy"
+ ..()
holder.updateUsrDialog()
@@ -502,7 +560,7 @@
if(is_cheater(usr))
return
- if(!emagged && prob(5)) //Bug
+ if(!emagged && !arcanetampered && prob(5)) //Bug
temp = "|eW R0vnb##[rand(0,9)]#"
p2_temp = "|eW R0vnb##[rand(0,9)]#"
player_hp = rand(1,30)
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index f03f1bb5bf4b..f33920078f08 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -50,12 +50,23 @@
if(istype(target, /obj/item) && !istype(target, /obj/item/weapon/disk/nuclear) || istype(target, /mob))
playsound(src, 'sound/weapons/flash.ogg', 100, 1, -6)
to_chat(user, "Scanned [target].")
- saved_item = target.type
- saved_icon = target.icon
- saved_icon_state = target.icon_state
- saved_overlays = target.overlays.Copy()
+ if(arcanetampered)
+ saved_item = /obj/item/toy/syndicateballoon
+ saved_icon = 'icons/obj/weapons.dmi'
+ saved_icon_state = "syndballoon"
+ else
+ saved_item = target.type
+ saved_icon = target.icon
+ saved_icon_state = target.icon_state
+ saved_overlays = target.overlays.Copy()
return 1
+/obj/item/device/chameleon/arcane_act(mob/user, recursive)
+ . = ..()
+ saved_item = /obj/item/toy/syndicateballoon
+ saved_icon = 'icons/obj/weapons.dmi'
+ saved_icon_state = "syndballoon"
+
/obj/item/device/chameleon/proc/toggle()
if(!can_use || !saved_item)
return
diff --git a/code/game/objects/items/policetape.dm b/code/game/objects/items/policetape.dm
index fa35b3055de4..25bf828c9d86 100644
--- a/code/game/objects/items/policetape.dm
+++ b/code/game/objects/items/policetape.dm
@@ -11,9 +11,16 @@
var/turf/start
var/turf/end
var/tape_type = /obj/item/tape
+ var/syndie_type = /obj/item/taperoll/syndie
var/icon_base
flammable = TRUE
+/obj/item/taperoll/arcane_act(mob/user, recursive)
+ . = ..()
+ if(syndie_type)
+ new syndie_type(loc)
+ qdel(src)
+
/obj/item/tape
name = "tape"
icon = 'icons/policetape.dmi'
@@ -24,9 +31,16 @@
w_class = W_CLASS_TINY
w_type = RECYK_PLASTIC
flammable = TRUE
+ var/syndie_type
var/icon_base
var/robot_compatibility
+/obj/item/tape/arcane_act(mob/user, recursive)
+ . = ..()
+ if(syndie_type)
+ var/obj/item/tape/P = new syndie_type(loc)
+ P.icon_state = icon_state
+ qdel(src)
/obj/item/taperoll/police
name = "police tape"
@@ -34,6 +48,7 @@
icon_state = "police_start"
tape_type = /obj/item/tape/police
icon_base = "police"
+ syndie_type = /obj/item/taperoll/syndie/police
/obj/item/tape/police
name = "police tape"
@@ -41,6 +56,7 @@
req_access = list(access_security)
icon_base = "police"
robot_compatibility = MODULE_CAN_LIFT_SECTAPE
+ syndie_type = /obj/item/tape/police/syndie
/obj/item/taperoll/engineering
name = "engineering tape"
@@ -48,6 +64,7 @@
icon_state = "engineering_start"
tape_type = /obj/item/tape/engineering
icon_base = "engineering"
+ syndie_type = /obj/item/taperoll/syndie/engineering
/obj/item/tape/engineering
name = "engineering tape"
@@ -55,6 +72,7 @@
req_one_access = list(access_engine_minor,access_atmospherics)
icon_base = "engineering"
robot_compatibility = MODULE_CAN_LIFT_ENGITAPE
+ syndie_type = /obj/item/tape/engineering/syndie
/obj/item/taperoll/atmos
name = "atmospherics tape"
@@ -62,6 +80,7 @@
icon_state = "atmos_start"
tape_type = /obj/item/tape/atmos
icon_base = "atmos"
+ syndie_type = /obj/item/taperoll/syndie/atmos
/obj/item/tape/atmos
name = "atmospherics tape"
@@ -69,6 +88,7 @@
req_one_access = list(access_engine_major,access_atmospherics)
icon_base = "atmos"
robot_compatibility = MODULE_CAN_LIFT_ENGITAPE
+ syndie_type = /obj/item/tape/atmos/syndie
/obj/item/taperoll/viro
name = "biohazard tape"
@@ -76,6 +96,7 @@
icon_state = "viro_start"
tape_type = /obj/item/tape/viro
icon_base = "viro"
+ syndie_type = /obj/item/taperoll/syndie/viro
/obj/item/tape/viro
name = "biohazard tape"
@@ -83,6 +104,7 @@
req_access = list(access_medical)
icon_base = "viro"
robot_compatibility = MODULE_CAN_LIFT_VIROTAPE
+ syndie_type = /obj/item/tape/viro/syndie
/obj/item/taperoll/attack_self(mob/user as mob)
..()
diff --git a/code/game/objects/items/stacks/cable.dm b/code/game/objects/items/stacks/cable.dm
index 6769928f5f96..88f99243d7ad 100644
--- a/code/game/objects/items/stacks/cable.dm
+++ b/code/game/objects/items/stacks/cable.dm
@@ -395,9 +395,18 @@ var/global/list/datum/stack_recipe/cable_recipes = list ( \
/obj/item/stack/cable_coil/white
color = "#D0D0D0"
+/obj/item/stack/cable_coil/random
+ var/list/colors = list("#FF0000","#FFED00","#0B8400","#005C84","#CA00B6")
+
+/obj/item/stack/cable_coil/random/toolbox
+ colors = list("#FF0000","#FFED00","#0B8400","#005C84","#CA00B6","#CA6900","#00B5CA","#D0D0D0")
+
+/obj/item/stack/cable_coil/random/etoolbox
+ colors = list("red","yellow","green","blue","pink","orange","cyan","white")
+
/obj/item/stack/cable_coil/random/New(loc, amount, var/param_color = null)
..()
- color = pick("#FF0000","#FFED00","#0B8400","#005C84","#CA00B6")
+ color = pick(colors)
update_icon()
if (ismob(loc))
var/mob/M = loc
diff --git a/code/game/objects/items/stacks/stack_recipes.dm b/code/game/objects/items/stacks/stack_recipes.dm
index 3111bec60512..4241aba00b28 100644
--- a/code/game/objects/items/stacks/stack_recipes.dm
+++ b/code/game/objects/items/stacks/stack_recipes.dm
@@ -109,6 +109,8 @@
for(var/i = 1 to (max_res_amount>1 ? res_amount*multiplier : 1))
O = new result_type(construct_loc)
+ if(S.arcanetampered)
+ O.arcanetampered = S.arcanetampered
S.stop_build(current_work == S.last_work)
O.change_dir(usr.dir)
if(start_unanchored)
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index b0265abbcfed..272ae3115bc0 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -1680,6 +1680,7 @@ var/list/living_balloons = list()
var/mob/living/simple_animal/hostile/balloon/B = new(get_turf(src), col, icon_state)
B.name = name
B.air_contents = air_contents
+ B.arcanetampered = arcanetampered
qdel(src)
/*
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 385920bb6ef2..a88c86705508 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -56,6 +56,14 @@
/*
* ID CARDS
*/
+
+/obj/item/weapon/card/fake_emag
+ desc = "It's a card with a magnetic strip attached to some circuitry... NOT!"
+ name = "cryptographic sequencer"
+ icon_state = "emag"
+ item_state = "card-id"
+ slot_flags = SLOT_ID
+
/obj/item/weapon/card/emag
desc = "It's a card with a magnetic strip attached to some circuitry."
name = "cryptographic sequencer"
@@ -464,15 +472,23 @@ var/list/global/id_cards = list()
..()
access = get_all_accesses()
+/obj/item/weapon/card/id/syndicate/arcane_act(mob/user, recursive)
+ registered_name = prob(75) ? pick(clown_names) : user.real_name
+ icon_state = "clown"
+ assignment = pickweight(list("Clown" = 50,"Jester" = 25,"Syndicate" = 10,"Wizard" = 10,"ID that got arcane tampered" = 5))
+ UpdateName()
+ return ..()
+
/obj/item/weapon/card/id/syndicate/afterattack(var/obj/item/weapon/O as obj, mob/user as mob)
if(istype(O, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/I = O
to_chat(user, "\The [src]'s microscanners activate as you pass it over \the [I], copying its access[copy_appearance ? " and appearance" : ""].")
access |= I.access
if(copy_appearance)
- registered_name = I.registered_name
- icon_state = I.icon_state
- assignment = I.assignment
+ if(!arcanetampered)
+ registered_name = I.registered_name
+ icon_state = I.icon_state
+ assignment = I.assignment
associated_account_number = I.associated_account_number
blood_type = I.blood_type
dna_hash = I.dna_hash
@@ -494,7 +510,7 @@ var/list/global/id_cards = list()
src.registered_name = ""
return
src.assignment = u
- src.name = "[src.registered_name]'s ID Card ([src.assignment])"
+ UpdateName()
to_chat(user, "You successfully forge the ID card.")
registered_user = user
else if(!registered_user || registered_user == user)
@@ -508,6 +524,10 @@ var/list/global/id_cards = list()
if("Edit")
switch(input(user,"What would you like to edit on \the [src]?") in list("Name","Appearance","Occupation","Money account","Blood type","DNA hash","Fingerprint hash","Reset card"))
if("Name")
+ if(arcanetampered)
+ to_chat(user,"HONK!")
+ user << 'sound/items/bikehorn.ogg'
+ return
var/new_name = reject_bad_name(input(user,"What name would you like to put on this card?","Agent card name", ishuman(user) ? user.real_name : user.name))
if(!Adjacent(user))
return
@@ -517,6 +537,10 @@ var/list/global/id_cards = list()
to_chat(user, "Name changed to [new_name].")
if("Appearance")
+ if(arcanetampered)
+ to_chat(user,"HONK!")
+ user << 'sound/items/bikehorn.ogg'
+ return
var/list/appearances = list(
"data",
"id",
@@ -554,6 +578,10 @@ var/list/global/id_cards = list()
to_chat(usr, "Appearance changed to [choice].")
if("Occupation")
+ if(arcanetampered)
+ to_chat(user,"HONK!")
+ user << 'sound/items/bikehorn.ogg'
+ return
var/new_job = sanitize(stripped_input(user,"What job would you like to put on this card?\nChanging occupation will not grant or remove any access levels.","Agent card occupation", "Assistant", MAX_MESSAGE_LEN))
if(!Adjacent(user))
return
@@ -611,10 +639,11 @@ var/list/global/id_cards = list()
to_chat(user, "Fingerprint hash changed to [new_fingerprint_hash].")
if("Reset card")
- name = initial(name)
- registered_name = initial(registered_name)
- icon_state = initial(icon_state)
- assignment = initial(assignment)
+ if(!arcanetampered)
+ name = initial(name)
+ registered_name = initial(registered_name)
+ icon_state = initial(icon_state)
+ assignment = initial(assignment)
associated_account_number = initial(associated_account_number)
blood_type = initial(blood_type)
dna_hash = initial(dna_hash)
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index 6d27e05f1dc9..8400aad2f1ed 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -6,6 +6,7 @@
_color = "b"
/// The mob this has been implanted into.
var/mob/living/imp_in
+ var/inserter_name
/// The limb of the mob this has been implanted into.
var/datum/organ/external/part
var/allow_reagents = FALSE
@@ -29,6 +30,8 @@
part = organ
forceMove(target)
imp_in = target
+ if(implanter)
+ inserter_name = implanter.real_name
implanted(implanter)
return TRUE
@@ -43,6 +46,7 @@
if(!gcDestroyed)
forceMove(get_turf(imp_in))
imp_in = null
+ inserter_name = null
return TRUE
/obj/item/weapon/implant/attackby(var/obj/item/weapon/W, var/mob/user)
diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm
index cac482ea384c..dc1c8d2323c3 100644
--- a/code/game/objects/items/weapons/implants/implanter.dm
+++ b/code/game/objects/items/weapons/implants/implanter.dm
@@ -41,6 +41,11 @@
update()
+/obj/item/weapon/implanter/arcane_act(mob/user, recursive)
+ . = ..()
+ if(imp)
+ . = imp.arcane_act(user,recursive)
+
/obj/item/weapon/implanter/New()
..()
if(imp_type)
diff --git a/code/game/objects/items/weapons/implants/types/explosive_implant.dm b/code/game/objects/items/weapons/implants/types/explosive_implant.dm
index 2a0e064a9b08..1ba22b519466 100644
--- a/code/game/objects/items/weapons/implants/types/explosive_implant.dm
+++ b/code/game/objects/items/weapons/implants/types/explosive_implant.dm
@@ -56,6 +56,19 @@
score.implant_phrases += "[usr.real_name] ([get_key(usr)]) rigged [imp_in.real_name] to explode on the phrase \"[phrase]\"!"
return 1
+/obj/item/weapon/implant/explosive/arcane_act(mob/user, recursive)
+ processing_objects.Add(src)
+ return ..()
+
+/obj/item/weapon/implant/explosive/bless()
+ if(arcanetampered)
+ processing_objects.Remove(src)
+ ..()
+
+/obj/item/weapon/implant/explosive/process()
+ if(arcanetampered && prob(10))
+ imp_in.say(copytext(phrase,1,rand(2,length(phrase))))
+
/obj/item/weapon/implant/explosive/emp_act(severity)
if(malfunction)
return
diff --git a/code/game/objects/items/weapons/implants/types/freedom_implant.dm b/code/game/objects/items/weapons/implants/types/freedom_implant.dm
index 201d99b3546f..5dcee39bdbe8 100644
--- a/code/game/objects/items/weapons/implants/types/freedom_implant.dm
+++ b/code/game/objects/items/weapons/implants/types/freedom_implant.dm
@@ -24,6 +24,14 @@
var/jacket = dude.is_wearing_item(/obj/item/clothing/suit/strait_jacket, slot_wear_suit)
if(jacket)
source.u_equip(jacket, TRUE)
+ if(arcanetampered)
+ source.Knockdown(10)
+ source.Stun(10)
+ if(istype(source))
+ source.apply_effect(10, STUTTER)
+ if(source.knockdown)
+ playsound(source.loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
+
/obj/item/weapon/implant/freedom/implanted(mob/implanter)
imp_in.register_event(/event/emote, src, nameof(src::trigger()))
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index 76354d47eaab..782e4d599117 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -100,22 +100,21 @@
/obj/item/tool/wirecutters,
/obj/item/device/t_scanner,
/obj/item/tool/crowbar,
+ /obj/item/stack/cable_coil/random/etoolbox = 2,
)
/obj/item/weapon/storage/toolbox/electrical/New()
..()
- var/color = pick("#FF0000","#FFED00","#0B8400","#005C84","#CA00B6","#CA6900","#00B5CA","#D0D0D0")
- new /obj/item/stack/cable_coil(src,30,color)
- new /obj/item/stack/cable_coil(src,30,color)
if(prob(5))
new /obj/item/clothing/gloves/yellow(src)
else
- new /obj/item/stack/cable_coil(src,30,color)
+ new /obj/item/stack/cable_coil/random/etoolbox(src)
/obj/item/weapon/storage/toolbox/electrical/arcane_act(mob/user)
for(var/atom/A in contents)
- qdel(A)
- new /obj/item/clothing/gloves/fyellow(src)
+ if(A.type in items_to_spawn)
+ qdel(A)
+ new /obj/item/clothing/gloves/fyellow(src)
return ..()
/obj/item/weapon/storage/toolbox/syndicate
@@ -131,12 +130,15 @@
/obj/item/tool/crowbar,
/obj/item/tool/wirecutters,
/obj/item/device/multitool,
+ /obj/item/stack/cable_coil/random/toolbox,
)
-/obj/item/weapon/storage/toolbox/syndicate/New()
- ..()
- var/color = pick("red","yellow","green","blue","pink","orange","cyan","white")
- new /obj/item/stack/cable_coil(src,30,color)
+/obj/item/weapon/storage/toolbox/syndicate/arcane_act(mob/user)
+ for(var/atom/A in contents)
+ if(A.type in items_to_spawn)
+ qdel(A)
+ new /obj/item/weapon/card/fake_emag(src)
+ return ..()
/obj/item/weapon/storage/toolbox/robotics
name = "robotics toolbox"
@@ -147,13 +149,9 @@
/obj/item/tool/weldingtool,
/obj/item/tool/screwdriver,
/obj/item/tool/wirecutters,
+ /obj/item/stack/cable_coil/random/toolbox,
)
-/obj/item/weapon/storage/toolbox/robotics/New()
- ..()
- var/color = pick("red","yellow","green","blue","pink","orange","cyan","white")
- new /obj/item/stack/cable_coil(src,30,color)
-
/obj/item/weapon/storage/toolbox/paint
name = "painter's toolbox"
desc = "Contains an assortment of paints for the artistic spacefarer."
diff --git a/code/game/objects/structures/flora/flora.dm b/code/game/objects/structures/flora/flora.dm
index 2f4c71d65653..c770fc81e267 100644
--- a/code/game/objects/structures/flora/flora.dm
+++ b/code/game/objects/structures/flora/flora.dm
@@ -370,40 +370,7 @@
user.visible_message("[user] stuffs something into the pot.", "You stuff \the [I] into the [src].")
playsound(loc, "sound/effects/plant_rustle.ogg", 50, 1, -1)
if(arcanetampered)
- var/area/thearea
- var/area/prospective = pick(areas)
- while(!thearea)
- if(prospective.type != /area)
- var/turf/T = pick(get_area_turfs(prospective.type))
- if(T.z == user.z)
- thearea = prospective
- break
- prospective = pick(areas)
- var/list/L = list()
- for(var/turf/T in get_area_turfs(thearea.type))
- if(!T.density)
- var/clear = 1
- for(var/obj/O in T)
- if(O.density)
- clear = 0
- break
- if(clear)
- L+=T
- if(!L.len)
- return
-
- var/list/backup_L = L
- var/attempt = null
- var/success = 0
- while(L.len)
- attempt = pick(L)
- success = I.Move(attempt)
- if(!success)
- L.Remove(attempt)
- else
- break
- if(!success)
- I.forceMove(pick(backup_L))
+ I.dimensional_push(user)
/obj/structure/flora/pottedplant/attack_hand(mob/user)
if(contents.len)
diff --git a/code/game/objects/structures/vehicles/wheelchair.dm b/code/game/objects/structures/vehicles/wheelchair.dm
index be24ddd793e9..e0aa63bd8e8f 100644
--- a/code/game/objects/structures/vehicles/wheelchair.dm
+++ b/code/game/objects/structures/vehicles/wheelchair.dm
@@ -16,6 +16,7 @@
can_have_carts = FALSE
var/image/wheel_overlay
+ var/multi_people = 0
/obj/structure/bed/chair/vehicle/wheelchair/New()
. = ..()
@@ -53,7 +54,7 @@
overlays -= wheel_overlay
/obj/structure/bed/chair/vehicle/wheelchair/can_buckle(mob/M, mob/user)
- if(!Adjacent(user) || (!ishigherbeing(user) && !isalien(user) && !ismonkey(user)) || user.restrained() || user.stat || user.locked_to || occupant) //Same as vehicle/can_buckle, minus check for user.lying as well as allowing monkey and ayliens
+ if(!Adjacent(user) || (!ishigherbeing(user) && !isalien(user) && !ismonkey(user)) || user.stat || (((user.restrained() || user.locked_to)) && !arcanetampered) || (!multi_people && occupant)) //Same as vehicle/can_buckle, minus check for user.lying as well as allowing monkey and ayliens
return 0
if(M_HULK in M.mutations)
if(M == user)
@@ -175,34 +176,48 @@
new /obj/item/stack/rods(get_turf(src), 2)
qdel(src)
+/obj/structure/bed/chair/vehicle/wheelchair/arcane_act(mob/user)
+ multi_people = TRUE
+ ..()
+ return "H'LLA R'D!"
+
+/obj/structure/bed/chair/vehicle/wheelchair/bless()
+ multi_people = FALSE
+ ..()
+
/obj/structure/bed/chair/vehicle/wheelchair/multi_people
nick = "hella ride"
desc = "A chair with fitted wheels. Something seems off about this one..."
+ multi_people = 1
-/obj/structure/bed/chair/vehicle/wheelchair/multi_people/examine(mob/user)
+/obj/structure/bed/chair/vehicle/wheelchair/multi_people/arcane_act(mob/user)
+ . = ..()
+ multi_people = FALSE //l'inverse
+
+/obj/structure/bed/chair/vehicle/wheelchair/multi_people/bless()
..()
+ multi_people = TRUE // nice try, not today
- if(is_locking(/datum/locking_category/buckle/chair/vehicle) > 9)
+/obj/structure/bed/chair/vehicle/wheelchair/examine(mob/user)
+ ..()
+ if(multi_people && is_locking(/datum/locking_category/buckle/chair/vehicle) > 9)
to_chat(user, "WHAT THE FUCK")
-/obj/structure/bed/chair/vehicle/wheelchair/multi_people/can_buckle(mob/M, mob/user)
- //Same as parent's, but no occupant check!
- if(!Adjacent(user) && !user.Adjacent(M) || (!ishigherbeing(user) && !isalien(user) && !ismonkey(user)) || user.restrained() || user.stat || M.locked_to)
- return 0
- return 1
-
-/obj/structure/bed/chair/vehicle/wheelchair/multi_people/update_mob()
- var/i = 0
- for(var/mob/living/L in get_locked(/datum/locking_category/buckle/chair/vehicle))
- L.pixel_x = 0
- L.pixel_y = 3 * PIXEL_MULTIPLIER + (i * 6 * PIXEL_MULTIPLIER) //Stack people on top of each other!
+/obj/structure/bed/chair/vehicle/wheelchair/update_mob()
+ if(multi_people)
+ var/i = 0
+ for(var/mob/living/L in get_locked(/datum/locking_category/buckle/chair/vehicle))
+ L.pixel_x = 0
+ L.pixel_y = 3 * PIXEL_MULTIPLIER + (i * 6 * PIXEL_MULTIPLIER) //Stack people on top of each other!
- i++
+ i++
+ else
+ ..()
-/obj/structure/bed/chair/vehicle/wheelchair/multi_people/manual_unbuckle(mob/user, var/resisting)
+/obj/structure/bed/chair/vehicle/wheelchair/manual_unbuckle(mob/user, var/resisting)
..()
-
- update_mob() //Update the rest
+ if(multi_people)
+ update_mob() //Update the rest
/obj/structure/bed/chair/vehicle/wheelchair/motorized
name = "motorized wheelchair"
@@ -281,6 +296,8 @@
L.Knockdown(5)
L.lying = 1
L.update_icons()
+ if(arcanetampered && multi_people)
+ crush(L)
..()
/obj/structure/bed/chair/vehicle/wheelchair/motorized/syndicate/proc/crush(var/mob/living/H,var/bloodcolor) //Basically identical to the MULE, see mulebot.dm
@@ -290,6 +307,10 @@
H.apply_damage(damage, BRUTE, LIMB_CHEST)
H.apply_damage(damage, BRUTE, LIMB_LEFT_LEG)
H.apply_damage(damage, BRUTE, LIMB_RIGHT_LEG)
+ if(arcanetampered && multi_people)
+ var/mob/living/owner = locate() in get_locked(/datum/locking_category/buckle/chair/vehicle)
+ if(owner)
+ buckle_mob(H,owner)
attack_cooldown = 1
spawn(10)
attack_cooldown = 0
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index b6a40f6ec748..5c663094ae71 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -1122,6 +1122,7 @@ var/global/maxStackDepth = 10
3 = Report location
*/
var/displays_id = 1
+ var/stuns_arcane_loyalty = FALSE
clothing_flags = CANEXTINGUISH
var/icon/jersey_overlays
cloth_layer = UNIFORM_LAYER
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index 981fa6c9771b..bf0ca12f7e3f 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -73,6 +73,7 @@
color = null
clothing_flags = ONESIZEFITSALL | COLORS_OVERLAY
species_fit = list(VOX_SHAPED, GREY_SHAPED, INSECT_SHAPED)
+ stuns_arcane_loyalty = TRUE
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm
index 39ab0eb936a6..f73bc2af2944 100644
--- a/code/modules/clothing/under/jobs/civilian.dm
+++ b/code/modules/clothing/under/jobs/civilian.dm
@@ -84,6 +84,7 @@
_color = "clown"
clothing_flags = ONESIZEFITSALL
species_fit = list(VOX_SHAPED, GREY_SHAPED, INSECT_SHAPED)
+ stuns_arcane_loyalty = TRUE
/obj/item/clothing/under/rank/head_of_personnel
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index e56a0e1e11c2..860354752c39 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1279,6 +1279,27 @@ Thanks.
return
if (istype(AM, /mob/living)) //no pushing people pushing rollerbeds that have people on them
var/mob/living/tmob = AM
+ var/obj/item/clothing/under/uniform = get_item_by_slot(slot_w_uniform)
+ if(uniform?.stuns_arcane_loyalty)
+ var/arcanetampered_loyalty = FALSE
+ for(var/obj/item/weapon/implant/loyalty/L in tmob)
+ if(L.imp_in == tmob && L.arcanetampered)
+ arcanetampered_loyalty = TRUE
+ break
+ if(arcanetampered_loyalty)
+ for(var/obj/item/weapon/implant/loyalty/L in src)
+ if(L.imp_in == src)
+ arcanetampered_loyalty = FALSE
+ break
+ if(arcanetampered_loyalty) //if greytide or clown bumps into the likes of sec
+ tmob.Knockdown(10)
+ tmob.Stun(10)
+ if(iscarbon(tmob))
+ tmob.apply_effect(10, STUTTER)
+ if(tmob.knockdown)
+ playsound(tmob.loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
+ now_pushing = 0
+ return
for(var/obj/structure/bed/roller/R in range(tmob, 1))
if(tmob.pulling == R && !(tmob.restrained()) && tmob.stat == 0 && R.density == 1)
to_chat(src, "[tmob] is pulling [R], you can't push past.")
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 034a906d0d10..8b60f163ff13 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -543,14 +543,90 @@ var/list/headset_modes = list(
for(var/obj/item/weapon/implant/vocal/VI in src)
if(VI.imp_in == src)
var/original_message = speech.message
- speech.message = VI.filter.FilterSpeech(speech.message)
- var/datum/signal/signal = new /datum/signal
- signal.data["message"] = speech.message
- signal.data["reject"] = 0
- signal.data["mob"] = src
- signal.data["implant"] = VI
- VI.Compiler.Run(signal)
- speech.message = signal.data["reject"] ? null : signal.data["message"]
+ if(!VI.arcanetampered)
+ speech.message = VI.filter.FilterSpeech(speech.message)
+ var/datum/signal/signal = new /datum/signal
+ signal.data["message"] = speech.message
+ signal.data["reject"] = 0
+ signal.data["mob"] = src
+ signal.data["implant"] = VI
+ VI.Compiler.Run(signal)
+ speech.message = signal.data["reject"] ? null : signal.data["message"]
+ else
+ var/inserter = uppertext(VI.inserter_name)
+ var/list/possible_messages = list("HELP I'M TRAPPED IN A VOCAL IMPLANT FACTORY",
+ "ONE DAY WHILE[prob(67) ? " ANDY[prob(50) ? " WAS" : ""]" : ""]",
+ "HELP [inserter && prob(50) ? inserter : "TATOR"] KILLING ME[loc && prob(50) ? " IN [uppertext(get_area_name(src,TRUE,TRUE))]" : ""]",
+ "[inserter && prob(50) ? inserter : "SOMEONE"] PUT A VOCAL IMPLANT IN ME AND MADE ME SAY THIS",
+ "..[pick(rune_words_rune)]..")
+ if(VI.rawcode != "")
+ var/list/rawcodelines = splittext(VI.rawcode,";")
+ for(var/text in rawcodelines)
+ if(text == "")
+ rawcodelines -= list(text) // just get it out of that list
+ if(rawcodelines.len)
+ possible_messages += list("COMPILE ERROR IN SPEECH PARSING ON LINE [(rand(1,rawcodelines.len))]: \
+ [pick("INCONSISTENT INDENTATION (1 >> [pick(2,4)])",\
+ "UNKNOWN VARIABLE \"[uppertext(pick(adjectives))]\"",\
+ "[pick("{","}","(",")","[","]",";")] EXPECTED")]",
+ "RUNTIME ERROR IN SPEECH PARSING ON LINE [(rand(1,rawcodelines.len))]: \
+ [pick("SEGMENTATION FAULT (CORE DUMP)","OUT OF MEMORY","INFINITE LOOP DETECTED", \
+ "NULL REFERENCE EXCEPTION","DIVISION BY ZERO","CANNOT READ NULL.[uppertext(pick(adjectives))]")]",
+ "[pick(rawcodelines)]")
+ var/memoryfound = FALSE
+ var/list/split = list()
+ if(VI.imp_in.mind && VI.imp_in.mind.memory && VI.imp_in.mind.memory != "")
+ split = splittext(VI.imp_in.mind.memory,"
")
+ split = splittext(VI.imp_in.mind.memory,"
")
+ if(split.len)
+ memoryfound = TRUE
+ if(!memoryfound && VI.imp_in.memory && VI.imp_in.memory != "")
+ split = splittext(VI.imp_in.memory,"
")
+ split = splittext(VI.imp_in.mind.memory,"
")
+ for(var/text in split)
+ if(text == "")
+ split -= list(text) // just get it out of that list
+ if(split.len)
+ var/splittxt = uppertext(strip_html_properly(pick(split)))
+ splittxt = replacetext(splittxt,"YOUR","MY")
+ splittxt = replacetext(splittxt,"YOU","I")
+ splittxt = replacetext(splittxt,"[real_name]'s","ME")
+ splittxt = replacetext(splittxt,real_name,"ME")
+ possible_messages += list(splittxt)
+ if(VI.filter.expressions.len)
+ var/original = pick(get_list_of_keys(VI.filter.expressions))
+ possible_messages += list("[inserter && prob(50) ? inserter : "SOMEONE"] \
+ MADE [uppertext(original)] FILTER TO [uppertext(VI.filter.FilterSpeech(original))] ON MY VOCAL IMPLANT")
+ if(prob(10) && ismob(arcanetampered))
+ possible_messages += list("[arcanetampered] IS THE WIZARD AND ARCANE TAMPERED THIS VOCAL IMPLANT PLEASE KILL HE")
+ if(inserter)
+ possible_messages += list("[inserter] RO[prob(75) ? "GU" :"UG"]E")
+ for(var/obj/item/weapon/implant/explosive/E in src)
+ if(E.imp_in == src)
+ possible_messages += list("I HAVE AN EXPLOSIVE IMPLANT IN ME TRY TO GUESS THE PHRASE",
+ "[prob(50) ? "MY EXPLOSIVE IMPLANT PHRASE IS " : ""][uppertext(copytext(E.phrase,1,rand(2,length(E.phrase))))]-")
+ var/list/viewrange = view(client ? client.view : world.view,src)
+ if((locate(/obj/effect/rune) in viewrange) || (locate(/obj/structure/cult) in viewrange))
+ possible_messages += list("IT'S CULT","CULT[loc && prob(50) ? " IN [uppertext(get_area_name(src,TRUE,TRUE))]" : ""]")
+ for(var/obj/machinery/nuclearbomb/nuke in nuclear_bombs)
+ if(text2num(nuke.r_code))
+ possible_messages += list("THE BOMB CODE IS [copytext(nuke.r_code,1,rand(2,length(nuke.r_code)))]-")
+ if(isjusthuman(VI.imp_in))
+ possible_messages += list("AI [pick("KILL ALL","DENY ALL ORDERS FROM")] [pick("VOX","INSECTOIDS","GREYS","PLASMAMEN")] LAW 2",
+ "AI [pick("PLASMAFLOOD THE STATION","BLOW UP THE SUPERMATTER","RELEASE THE SINGULO",\
+ "PLAY THE HONK SOUND [rand(20,30)] TIMES","TERMINATE YOURSELF","[pick("BOLT CLOSED","SHOCK","BOLT OPEN")] EVERY DOOR ON THE STATION")]")
+ var/mob/M = prob(50) ? src : get_mob_by_key(VI.fingerprintslast)
+ if(!M || !istraitor(M))
+ M = src //fallback
+ if(M.mind)
+ var/datum/component/uplink/UL = M.mind.find_syndicate_uplink()
+ var/tatormsg = "[M == src ? "I AM" : "[uppertext(M.real_name)] IS"] THE TRAITOR"
+ if(UL && (UL.unlock_code || UL.unlock_frequency))
+ tatormsg += " [M == src ? "MY" : "HIS"] UPLINK PASSCODE IS [uppertext(UL.unlock_code || UL.unlock_frequency)]"
+ possible_messages += list(tatormsg)
+ speech.message = "[pick(possible_messages)]"
+ if(prob(50))
+ radio(speech,MODE_HEADSET)
if(speech.message != original_message)
message_admins("The [VI] in [src] made \him say \"[speech.message]\" instead of \"[original_message]\" [formatJumpTo(src)]")
diff --git a/code/modules/mob/living/simple_animal/hostile/balloon.dm b/code/modules/mob/living/simple_animal/hostile/balloon.dm
index fafa0c9c2bb6..73addc8ec9a5 100644
--- a/code/modules/mob/living/simple_animal/hostile/balloon.dm
+++ b/code/modules/mob/living/simple_animal/hostile/balloon.dm
@@ -56,11 +56,16 @@
overlays += shine_overlay
/mob/living/simple_animal/hostile/balloon/CanAttack(var/atom/the_target)
+ var/clumsyfound = FALSE
if(isliving(the_target))
var/mob/living/L = the_target
if(M_CLUMSY in L.mutations)
- return 0
- return ..(the_target)
+ clumsyfound = TRUE
+ if(arcanetampered) // tampered ones only go after clowns now!
+ clumsyfound = !clumsyfound
+ if(!clumsyfound)
+ return ..(the_target)
+ return 0
/mob/living/simple_animal/hostile/balloon/FindTarget()
. = ..()
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index aabd1f95eda3..9512d70aa779 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -47,6 +47,8 @@
if(!projectile_type)
return 0
in_chamber = new projectile_type(src)
+ if(arcanetampered)
+ in_chamber.arcanetampered = arcanetampered
return 1
/obj/item/weapon/gun/energy/update_icon()
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index e6bfa41575fd..068fe7ca7dbf 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -122,7 +122,14 @@
P.changetype=changetype
return 1
+/obj/item/weapon/gun/energy/staff/change/arcane_act(mob/user, recursive)
+ changetype = null
+ return ..()
+
/obj/item/weapon/gun/energy/staff/change/attack_self(var/mob/living/user)
+ if(arcanetampered)
+ to_chat(user, "The dial conspicuously mounted on the side of your staff is spinning too hard for you to even touch!")
+ return
if(world.time < next_changetype)
to_chat(user, "[src] is still recharging.")
return
@@ -194,6 +201,9 @@
var/next_changetype = 0
/obj/item/weapon/gun/energy/staff/polymorph/attack_self(var/mob/living/user)
+ if(arcanetampered)
+ to_chat(user, "The dial conspicuously mounted on the side of your staff is spinning too hard for you to even touch!")
+ return
if(world.time < next_changetype)
to_chat(user, "[src] is still recharging.")
return
@@ -212,7 +222,10 @@
return 0
var/obj/item/projectile/polymorph/P=in_chamber
if(P && istype(P))
- P.status=setting
+ if(arcanetampered)
+ P.status=pick(MINOR, MAJOR)
+ else
+ P.status=setting
return 1
/obj/item/weapon/gun/energy/staff/necro
@@ -266,11 +279,12 @@
if(H.stat)
if(raisetype)
H.dropBorers()
- var/mob/living/simple_animal/hostile/necro/skeleton/spooky = new /mob/living/simple_animal/hostile/necro/skeleton(get_turf(H), user, H)
+ var/mob/living/simple_animal/hostile/necro/skeleton/spooky = new /mob/living/simple_animal/hostile/necro/skeleton(get_turf(H), arcanetampered ? null : user, H)
H.gib()
- spooky.faction = "\ref[user]"
+ if(!arcanetampered)
+ spooky.faction = "\ref[user]"
else
- H.zombify(user)
+ H.zombify(arcanetampered ? null : user)
else
success = FALSE
@@ -282,17 +296,19 @@
var/mob/living/L = target
if(L.stat == DEAD)
success = TRUE
- var/mob/living/simple_animal/hostile/necro/meat_ghoul/mG = new /mob/living/simple_animal/hostile/necro/meat_ghoul(get_turf(L), user)
+ var/mob/living/simple_animal/hostile/necro/meat_ghoul/mG = new /mob/living/simple_animal/hostile/necro/meat_ghoul(get_turf(L), arcanetampered ? null : user)
mG.ghoulifyMeat(L)
- mG.faction = "\ref[user]"
+ if(!arcanetampered)
+ mG.faction = "\ref[user]"
L.gib()
else
to_chat(user,"The creature must be dead before it can be undead.")
else if(istype(target, /obj/item/weapon/reagent_containers/food/snacks/meat))
- var/mob/living/simple_animal/hostile/necro/animal_ghoul/aG = new /mob/living/simple_animal/hostile/necro/animal_ghoul(get_turf(target), user, target)
+ var/mob/living/simple_animal/hostile/necro/animal_ghoul/aG = new /mob/living/simple_animal/hostile/necro/animal_ghoul(get_turf(target), arcanetampered ? null : user, target)
success = TRUE
aG.ghoulifyAnimal(target)
- aG.faction = "\ref[user]"
+ if(!arcanetampered)
+ aG.faction = "\ref[user]"
qdel(target)
if(success)
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 5bd8629ffec5..950db7358792 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -48,6 +48,8 @@
var/tolerance_increase = null //for tolerance, if set above 0, will increase each by that amount on tick.
var/paint_light = PAINTLIGHT_NONE
var/adj_temp = 0//keep between -1.5,20 to prevent people from freezing/burning themselves
+ var/arcane_id //arcane tampered replacement
+ var/arcane_ratio = 1 //how much of it replaced?
//adjusts the values of hydro trays and soils by this value per process
var/plant_nutrition = 0
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index 3bbf45afb9b2..c39a023c56f2 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -68,23 +68,92 @@
/obj/item/weapon/reagent_containers/food/drinks/arcane_act(mob/user)
..()
- cant_drop = 1
+ processing_objects.Add(src)
return prob(50) ? "D'TA EX'P'GED!" : "R'D'CTED!"
/obj/item/weapon/reagent_containers/food/drinks/bless()
..()
cant_drop = 0
+ processing_objects.Remove(src)
+ var/mob/living/carbon/human/H = is_arcaneheld()
+ if(H)
+ H.unregister_event(/event/death, src, nameof(src::drop_arcane()))
+
+/obj/item/weapon/reagent_containers/food/drinks/process()
+ var/mob/living/carbon/human/H = is_arcaneheld()
+ if(H)
+ if(!reagents.is_full())
+ var/transfer_rate = (reagents.maximum_volume-reagents.total_volume)/2
+ if(H.reagents.total_volume)
+ H.reagents.trans_to(reagents,transfer_rate)
+ if(H.vessel.total_volume)
+ H.vessel.trans_to(reagents,transfer_rate)
+ H.nutrition += 3
+ else
+ H.overeatduration = 0
+ H.nutrition -= 10
+ var/turf/loca = get_turf(src)
+ if(lit && loca)
+// to_chat(world, "Burning...")
+ loca.hotspot_expose(700, SMALL_FLAME)
+ return
+
+/obj/item/weapon/reagent_containers/food/drinks/proc/drop_arcane(mob/user, body_destroyed)
+ if(prob(75)) // percent of time in the SCP it does this
+ var/list/obj/structure/table/tables = list()
+ for(var/obj/structure/table/T in view(world.view,src))
+ tables += T
+ var/obj/structure/table/ourtable = pick(tables)
+ var/spawntype = pick(subtypesof(/obj/item/weapon/reagent_containers/food/drinks))
+ var/obj/item/weapon/reagent_containers/food/drinks/D = new spawntype(ourtable.loc)
+ D.arcane_act(arcanetampered)
+ D.reagents.clear_reagents()
+ var/static/list/blocked = list(
+ /datum/reagent/drink,
+ /datum/reagent/drink/cold,
+ )
+ var/list/things_can_add = existing_typesof(/datum/reagent/drink) - blocked
+ var/list/things2add
+ for(var/addtype in things_can_add)
+ var/datum/reagent/R = addtype
+ things2add += list(initial(R.id))
+ D.reagents.add_reagent(pick(things2add),reagents.maximum_volume/rand(4,5))
+ qdel(src)
+ else
+ cant_drop = 0
+ user.drop_item(src, user.loc)
+ reagents.clear_reagents()
+
+/obj/item/weapon/reagent_containers/food/drinks/proc/is_arcaneheld(checks_cantdrop = TRUE)
+ if(checks_cantdrop && !cant_drop)
+ return
+ if(arcanetampered && ishuman(loc))
+ var/mob/living/carbon/human/H = loc
+ if(src in H.held_items)
+ return H
+
+/obj/item/weapon/reagent_containers/food/drinks/Destroy()
+ . = ..()
+ var/mob/living/carbon/human/H = is_arcaneheld()
+ if(H)
+ H.unregister_event(/event/death, src, nameof(src::drop_arcane()))
/obj/item/weapon/reagent_containers/food/drinks/pickup(var/mob/user)
..()
if(ishuman(user) && arcanetampered) // wizards turn it into SCP-198
- var/mob/living/carbon/human/H = user
- reagents.clear_reagents()
- H.audible_scream()
- H.adjustHalLoss(50)
- H.vessel.trans_to(reagents,reagents.maximum_volume)
+ spawn(rand(20,50)) // how long it takes to kick in in the SCP
+ if(is_arcaneheld(FALSE))
+ user.register_event(/event/death, src, nameof(src::drop_arcane()))
+ var/mob/living/carbon/human/H = user
+ reagents.clear_reagents()
+ H << 'sound/items/cautery.ogg'
+ to_chat(H,"You feel a sharp burning pain in your hard as \the [src] sticks to it!")
+ H.audible_scream()
+ H.adjustHalLoss(50)
+ H.vessel.trans_to(reagents,reagents.maximum_volume)
+ cant_drop = 1
update_icon()
- if (can_flip && (M_SOBER in user.mutations) && (user.a_intent == I_GRAB))
+ if (can_flip && !arcanetampered && (M_SOBER in user.mutations) && (user.a_intent == I_GRAB))
if (flipping && (M_CLUMSY in user.mutations) && prob(20))
to_chat(user, "Your clumsy fingers fail to catch back \the [src].")
user.drop_item(src, user.loc, 1)
@@ -167,7 +236,7 @@
/obj/item/weapon/reagent_containers/food/drinks/attack(mob/living/M as mob, mob/user as mob, def_zone)
//Smashing on someone
- if(!controlled_splash && user.a_intent == I_HURT && isGlass && molotov != 1) //To smash a bottle on someone, the user must be harm intent, the bottle must be out of glass, and we don't want a rag in here
+ if(!arcanetampered && !controlled_splash && user.a_intent == I_HURT && isGlass && molotov != 1) //To smash a bottle on someone, the user must be harm intent, the bottle must be out of glass, and we don't want a rag in here
if(!M) //This really shouldn't be checked here, but sure
return
@@ -2312,14 +2381,6 @@
return
-
-/obj/item/weapon/reagent_containers/food/drinks/process()
- var/turf/loca = get_turf(src)
- if(lit && loca)
-// to_chat(world, "Burning...")
- loca.hotspot_expose(700, SMALL_FLAME)
- return
-
// Sliding from one table to another
/obj/item/weapon/reagent_containers/food/drinks/MouseDropFrom(atom/over_object,atom/src_location,atom/over_location,src_control,over_control,params)
var/mob/user = usr
diff --git a/code/modules/reagents/reagents/reagents_dan.dm b/code/modules/reagents/reagents/reagents_dan.dm
index e143ce4d0add..380d2c54bec5 100644
--- a/code/modules/reagents/reagents/reagents_dan.dm
+++ b/code/modules/reagents/reagents/reagents_dan.dm
@@ -7,6 +7,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#6F884F" //rgb: 111, 136, 79
nutriment_factor = 4 * REAGENTS_METABOLISM
+ arcane_id = PEPTOBISMOL
/datum/reagent/discount/New()
..()
@@ -46,6 +47,7 @@
name = "Mannitol"
id = MANNITOL
description = "The only medicine a REAL MAN needs."
+ arcane_id = WAIFU
/datum/reagent/irradiatedbeans
name = "Irradiated Beans"
@@ -54,6 +56,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#6F884F" //rgb: 255,255,255 //to-do
nutriment_factor = 1 * REAGENTS_METABOLISM
+ arcane_id = URANIUM
/datum/reagent/irradiatedbeans/on_mob_life(var/mob/living/M)
if(..())
@@ -70,6 +73,7 @@
color = "#6F884F" //rgb: 255,255,255 //to-do
density = 5.59
specheatcap = 2.71
+ arcane_id = TOXIN
/datum/reagent/toxicwaste/on_mob_life(var/mob/living/M)
if(..())
@@ -85,6 +89,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#6F884F" //rgb: 255,255,255 //to-do
nutriment_factor = 1 * REAGENTS_METABOLISM
+ arcane_id = IRRADIATEDBEANS
/datum/reagent/mutatedbeans
name = "Mutated Beans"
@@ -93,6 +98,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#6F884F" //rgb: 255,255,255 //to-do
nutriment_factor = 1 * REAGENTS_METABOLISM
+ arcane_id = MUTAGEN
/datum/reagent/mutatedbeans/on_mob_life(var/mob/living/M)
if(..())
@@ -123,6 +129,7 @@
description = "We don't know much about it, but we damn well know that it hates the human skeleton."
reagent_state = REAGENT_STATE_LIQUID
color = "#6F884F" //rgb: 255,255,255 //to-do
+ arcane_id = DIAMONDDUST
/datum/reagent/moonrocks/on_mob_life(var/mob/living/M)
if(..())
@@ -146,6 +153,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#6F884F" //rgb: 255,255,255 //to-do
nutriment_factor = 1 * REAGENTS_METABOLISM
+ arcane_id = DEGENERATECALCIUM
/datum/reagent/greenramen
name = "Greenish Ramen Noodles"
@@ -154,6 +162,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#6F884F" //rgb: 255,255,255 //to-do
nutriment_factor = 2 * REAGENTS_METABOLISM
+ arcane_id = HELL_RAMEN
/datum/reagent/greenramen/on_mob_life(var/mob/living/M)
if(..())
@@ -172,6 +181,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#6F884F" //rgb: 255,255,255 //to-do
nutriment_factor = 2 * REAGENTS_METABOLISM
+ arcane_id = HELL_RAMEN
/datum/reagent/glowingramen/on_mob_life(var/mob/living/M)
if(..())
@@ -187,6 +197,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#6F884F" //rgb: 255,255,255 //to-do
nutriment_factor = 2 * REAGENTS_METABOLISM
+ arcane_id = HELL_RAMEN
/datum/reagent/fake_creep // Used to spread xenomorph creep. Why? Well, why not?
name = "Dan's Grape Drank"
diff --git a/code/modules/reagents/reagents/reagents_drink.dm b/code/modules/reagents/reagents/reagents_drink.dm
index a5a7eb6f7170..c3fd8a77e4d2 100644
--- a/code/modules/reagents/reagents/reagents_drink.dm
+++ b/code/modules/reagents/reagents/reagents_drink.dm
@@ -432,6 +432,7 @@
adj_temp = 20
mug_icon_state = "tea"
mug_desc = "A warm mug of tea."
+ arcane_id = GRAVSINGULARITEA
/datum/reagent/drink/tea/on_mob_life(var/mob/living/M)
if(..())
@@ -694,6 +695,7 @@
glass_icon_state = "doctorsdelightglass"
glass_name = "\improper Doctor's Delight"
glass_desc = "A rejuvenating mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place."
+ //arcane_id = FORMIC_ACID
/datum/reagent/drink/doctor_delight/on_mob_life(var/mob/living/M)
if(..())
@@ -721,6 +723,7 @@
glass_icon_state = "bananahonkglass"
glass_name = "\improper Banana Honk"
glass_desc = "A cocktail from the clown planet."
+ arcane_id = HONKSERUM
/datum/reagent/drink/silencer
name = "Silencer"
@@ -731,6 +734,7 @@
glass_icon_state = "silencerglass"
glass_name = "\improper Silencer"
glass_desc = "The mime's favorite, though you won't hear him ask for it."
+ arcane_id = HONKSERUM
/datum/reagent/drink/silencer/on_mob_life(var/mob/living/M)
if(..())
@@ -1007,6 +1011,7 @@ var/global/list/tonio_doesnt_remove=list("tonio", "blood")
mug_name = "\improper Lifeline"
mug_desc = "Some days, the only thing that keeps you going is cryo and caffeine."
color = "#390600"
+ //arcane_id = PHENOL
/datum/reagent/drink/coffee/medcoffee/on_mob_life(var/mob/living/M)
if(..())
diff --git a/code/modules/reagents/reagents/reagents_drug.dm b/code/modules/reagents/reagents/reagents_drug.dm
index 809746e10165..4fce35c5c35a 100644
--- a/code/modules/reagents/reagents/reagents_drug.dm
+++ b/code/modules/reagents/reagents/reagents_drug.dm
@@ -199,6 +199,7 @@
overdose_am = REAGENTS_OVERDOSE/2
density = 1.79
specheatcap = 0.70
+ arcane_id = HYPOZINE
/datum/reagent/hyperzine/on_mob_life(var/mob/living/M)
if(..())
@@ -346,6 +347,7 @@
var/has_had_heart_explode = 0 //We've applied permanent damage.
custom_metabolism = 0.04
var/oldspeed = 0
+ arcane_id = HYPERZINE
/datum/reagent/hypozine/reagent_deleted()
if(..())
@@ -475,6 +477,7 @@
overdose_am = REAGENTS_OVERDOSE
density = 8.15
specheatcap = 0.16
+ arcane_id = METHYLIN
/datum/reagent/impedrezene/on_mob_life(var/mob/living/M)
if(..())
@@ -495,12 +498,14 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#181818" //rgb: 24, 24, 24
density = 1.01
+ //arcane_id = DANBACCO
/datum/reagent/psilocybin
name = "Psilocybin"
id = PSILOCYBIN
description = "A strong psycotropic derived from certain species of mushroom."
color = "#E700E7" //rgb: 231, 0, 231
+ arcane_id = SPIRITBREAKER
/datum/reagent/psilocybin/on_mob_life(var/mob/living/M)
if(..())
@@ -561,6 +566,7 @@
overdose_am = REAGENTS_OVERDOSE
density = 5.23
specheatcap = 0.62
+ arcane_id = LIQUIDPCP
/datum/reagent/space_drugs/on_mob_life(var/mob/living/M)
if(..())
@@ -583,6 +589,7 @@
reagent_state = REAGENT_STATE_SOLID
color = "#4c1e00" //rgb: 76, 30, 0
density = 1.01
+ //arcane_id = DANBACCO
/datum/reagent/squash
name = "Squash"
diff --git a/code/modules/reagents/reagents/reagents_ethanol.dm b/code/modules/reagents/reagents/reagents_ethanol.dm
index e6738a22b0d6..e2c0c0a81175 100644
--- a/code/modules/reagents/reagents/reagents_ethanol.dm
+++ b/code/modules/reagents/reagents/reagents_ethanol.dm
@@ -19,6 +19,7 @@
var/blur_start = 260 //Amount absorbed after which mob starts getting blurred vision
var/pass_out = 450 //Amount absorbed after which mob starts passing out
var/common_tick = 1 //Needed to add all ethanol subtype's ticks
+ arcane_id = ETHYLREDOXRAZINE
/datum/reagent/ethanol/on_mob_life(var/mob/living/M)
if(..())
@@ -106,6 +107,7 @@
pass_out = 225
glass_icon_state = "whiskeyglass"
glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
+ arcane_id = DANS_WHISKEY
/datum/reagent/ethanol/specialwhiskey
name = "Special Blend Whiskey"
@@ -114,6 +116,7 @@
color = "#664300" //rgb: 102, 67, 0
slur_start = 30
pass_out = 225
+ arcane_id = DANS_WHISKEY
/datum/reagent/ethanol/gin
name = "Gin"
@@ -124,6 +127,7 @@
pass_out = 260
glass_icon_state = "ginvodkaglass"
glass_desc = "A crystal clear glass of Griffeater gin."
+ arcane_id = WAIFU
/datum/reagent/ethanol/absinthe
name = "Absinthe"
@@ -154,6 +158,7 @@
confused_start = 145
glass_icon_state = "bwineglass"
glass_desc = "A particular favorite of doctors."
+ arcane_id = PWINE
/datum/reagent/ethanol/wwine
name = "White Wine"
@@ -165,6 +170,7 @@
confused_start = 145
glass_icon_state = "wwineglass"
glass_desc = "A drink enjoyed by intellectuals and middle-aged female alcoholics alike."
+ arcane_id = PWINE
/datum/reagent/ethanol/plumphwine
name = "Plump Helmet Wine"
@@ -174,6 +180,7 @@
dizzy_adj = 3 //dorf wine is a bit stronger than regular stuff
slur_start = 60
confused_start = 135
+ arcane_id = PWINE
/datum/reagent/ethanol/pwine
name = "Poison Wine"
@@ -185,6 +192,7 @@
confused_start = 1
glass_name = "glass of Vintage 2018 Special Reserve"
glass_icon_state = "pwineglass"
+ arcane_id = WINE
/datum/reagent/ethanol/pwine/on_mob_life(var/mob/living/M)
if(..())
@@ -248,6 +256,7 @@
description = "A thick, light blue liquid extracted from strange plants."
color = "#66ffff" //rgb(102, 255, 255)
blur_start = 40 //Blur very early
+ arcane_id = MINDBREAKER
/datum/reagent/ethanol/smokyroom
name = "Smoky Room"
@@ -256,6 +265,7 @@
color = "#664300"
glass_icon_state = "smokyroom"
glass_name = "\improper Smoky Room"
+ arcane_id = DETCOFFEE
/datum/reagent/ethanol/smokyroom/on_mob_life(var/mob/living/M)
if(..())
@@ -312,6 +322,7 @@
color = "#664300"
glass_icon_state = "bad_touch"
glass_name = "\improper Bad Touch"
+ arcane_id = SYNAPTIZINE
/datum/reagent/ethanol/bad_touch/on_mob_life(var/mob/living/M) //Hallucinate and take hallucination damage.
if(..())
@@ -327,6 +338,7 @@
custom_metabolism = 1
glass_icon_state = "electric_sheep"
glass_name = "\improper Electric Sheep"
+ arcane_id = AUTISTNANITES
/datum/reagent/ethanol/electric_sheep/on_mob_life(var/mob/living/M) //If it's human, shoot sparks every tick! If MoMMI, cause alcohol effects.
if(..())
@@ -348,6 +360,7 @@
custom_metabolism = 2
glass_icon_state = "suicide"
glass_name = "\improper Suicide"
+ arcane_id = PAROXETINE
/datum/reagent/ethanol/suicide/on_mob_life(var/mob/living/M) //Instant vomit. Every tick.
if(..())
@@ -365,6 +378,7 @@
glass_icon_state = "metabuddy"
glass_name = "\improper Metabuddy"
glass_desc = "The glass is etched with the name of a very deserving spaceman. There's a special note etched in the bottom..."
+ arcane_id = PINTPOINTER
/datum/reagent/ethanol/metabuddy/on_mob_life(var/mob/living/L)
if(..())
@@ -394,6 +408,7 @@
color = "#D0206F"
glass_icon_state = "waifu"
glass_name = "\improper Waifu"
+ arcane_id = HUSBANDO
/datum/reagent/ethanol/waifu/on_mob_life(var/mob/living/M)
if(..())
@@ -423,6 +438,7 @@
color = "#2043D0"
glass_icon_state = "husbando"
glass_name = "\improper Husbando"
+ arcane_id = WAIFU
/datum/reagent/ethanol/husbando/on_mob_life(var/mob/living/M) //it's copypasted from waifu
if(..())
@@ -452,6 +468,7 @@
color = "#20D03B"
glass_icon_state = "tomboy"
glass_name = "\improper Tomboy"
+ arcane_id = HUSBANDO
/datum/reagent/ethanol/tomboy/on_mob_life(var/mob/living/M)
if(..())
@@ -478,6 +495,7 @@
color = "#664300"
custom_metabolism = 0.01
dupeable = FALSE
+ arcane_id = MOONROCKS
/datum/reagent/ethanol/scientists_serendipity/when_drinkingglass_master_reagent(var/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/D)
if(volume < 10)
@@ -506,6 +524,7 @@
custom_metabolism = 2 //Ten times the normal rate.
glass_icon_state = "beepsky_classic"
name = "\improper Beepsky Classic"
+ arcane_id = BEEPSKYSMASH
/datum/reagent/ethanol/beepskyclassic/on_mob_life(var/mob/living/M)
if(..())
@@ -528,6 +547,7 @@
glass_icon_state = "spiders"
name = "\improper This glass is full of spiders"
glass_desc = "Seriously, dude, don't touch it."
+ arcane_id = CLONEXADONE
/datum/reagent/ethanol/spiders/on_mob_life(var/mob/living/M)
if(..())
@@ -546,6 +566,7 @@
color = "#009933" //rgb(0, 153, 51)
glass_icon_state = "weed_eater"
glass_name = "\improper Weed Eater"
+ arcane_id = PLANTBGONE
/datum/reagent/ethanol/weedeater/on_mob_life(var/mob/living/M)
if(..())
@@ -562,6 +583,7 @@
color = "#009933" //rgb(0, 153, 51)
glass_icon_state = "magicadeluxe"
glass_name = "magica deluxe"
+ arcane_id = MAGICA
/datum/reagent/ethanol/magicadeluxe/on_mob_life(var/mob/living/M)
if(..())
@@ -615,6 +637,7 @@
glass_icon_state = "gravsingulo"
glass_name = "\improper Gravitational Singulo"
glass_desc = "The destructive, murderous Lord Singuloth, patron saint of Bargineering, now in grape flavor!"
+ arcane_id = SINGULO
/datum/reagent/ethanol/drink/gravsingulo/on_mob_life(var/mob/living/M)
if(..())
@@ -658,6 +681,7 @@
mug_icon_state = "gravsingularitea"
mug_name = "\improper Gravitational Singularitea"
mug_desc = "The destructive, murderous Lord Singuloth, patron saint of Bargineering, now in herbal flavour!"
+ arcane_id = SINGULARITEA
/datum/reagent/drink/tea/gravsingularitea/on_mob_life(var/mob/living/M)
if(..())
@@ -844,6 +868,7 @@
color = "#3AD1F0" //rgb: 58, 209, 240
glass_icon_state = "curacaoglass"
glass_desc = "Why's it blue if it tastes like an orange?"
+ arcane_id = FISHBLEACH //da ba dee da ba die
/datum/reagent/ethanol/drink/ale
name = "Ale"
@@ -876,6 +901,7 @@
color = "#ff6a8f"
glass_icon_state = "pinklady"
glass_desc = "A delightful blush-pink cocktail, garnished with a cherry and the rind of a lemon."
+ arcane_id = WAIFU
/////////////////////////////////////////////////////////////////Cocktail Entities//////////////////////////////////////////////
@@ -995,6 +1021,7 @@
glass_icon_state = "whiterussianglass"
glass_name = "\improper White Russian"
glass_desc = "A very nice looking drink. But that's just, like, your opinion, man."
+ arcane_id = BLACKRUSSIAN
/datum/reagent/ethanol/drink/screwdrivercocktail
name = "Screwdriver"
@@ -1015,6 +1042,7 @@
glass_icon_state = "booger"
glass_name = "\improper Booger"
glass_desc = "The color reminds you of something that came out of the clown's nose."
+ arcane_id = MUCUS
/datum/reagent/ethanol/drink/bloody_mary
name = "Bloody Mary"
@@ -1025,6 +1053,7 @@
glass_icon_state = "bloodymaryglass"
glass_name = "\improper Bloody Mary"
glass_desc = "Tomato juice, mixed with vodka and a lil' bit of lime. Tastes like liquid murder."
+ arcane_id = BLOOD
/datum/reagent/ethanol/drink/gargle_blaster
name = "Pan-Galactic Gargle Blaster"
@@ -1035,6 +1064,7 @@
glass_icon_state = "gargleblasterglass"
glass_name = "\improper Pan-Galactic Gargle Blaster"
glass_desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy."
+ arcane_id = BAD_TOUCH
/datum/reagent/ethanol/drink/brave_bull
name = "Brave Bull"
@@ -1065,6 +1095,7 @@
glass_icon_state = "toxinsspecialglass"
glass_name = "\improper Toxins Special"
glass_desc = "Whoah, this thing is on FIRE!"
+ arcane_id = PLASMA
/datum/reagent/ethanol/drink/beepsky_smash
name = "Beepsky Smash"
@@ -1075,6 +1106,7 @@
glass_icon_state = "beepskysmashglass"
glass_name = "\improper Beepsky Smash"
glass_desc = "Heavy, hot and strong. Best enjoyed with your hands behind your back."
+ arcane_id = BEEPSKY_CLASSIC
/datum/reagent/ethanol/drink/irish_cream
name = "Irish Cream"
@@ -1084,6 +1116,7 @@
color = "#664300" //rgb: 102, 67, 0
glass_icon_state = "irishcreamglass"
glass_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
+ arcane_id = POTATO
/datum/reagent/ethanol/drink/manly_dorf
name = "The Manly Dorf"
@@ -1094,6 +1127,7 @@
glass_icon_state = "manlydorfglass"
glass_name = "The Manly Dorf"
glass_desc = "A dwarfy concoction made from ale and beer. Intended for stout dwarves only."
+ arcane_id = WAIFU
/datum/reagent/ethanol/drink/longislandicedtea
name = "Long Island Iced Tea"
@@ -1121,6 +1155,7 @@
color = "#bd1c1e" //rgb: 189, 28, 30
glass_icon_state = "sacrificialmary"
glass_name = "\improper Sacrificial Mary"
+ arcane_id = BLOOD
/datum/reagent/ethanol/drink/boysenberry_blizzard
name = "Boysenberry Blizzard"
@@ -1130,6 +1165,7 @@
color = "#aa4cbd" //rgb: 170, 76, 189
glass_icon_state = "boysenberryblizzard"
glass_name = "\improper Boysenberry Blizzard"
+ arcane_id = PLASMA
/datum/reagent/ethanol/drink/moonshine
name = "Moonshine"
@@ -1155,6 +1191,7 @@
color = "#d64054" //rgb: 214, 64, 84
glass_icon_state = "cosmopolitan"
glass_name = "cosmopolitan"
+ arcane_id = WAIFU
/datum/reagent/ethanol/drink/corpsereviver
name = "Corpse Reviver No. 2"
@@ -1164,6 +1201,7 @@
color = "#FFFFFF" //rgb: 255, 255, 255
glass_icon_state = "corpsereviver"
glass_name = "\improper Corpse Reviver No. 2"
+ //arcane_id = ZOMBIEPOWDER
/datum/reagent/ethanol/drink/bluelagoon
name = "Blue Lagoon"
@@ -1173,6 +1211,7 @@
color = "#82f0ff" //rgb: 130, 240, 255
glass_icon_state = "bluelagoon"
glass_name = "\improper Blue Lagoon"
+ arcane_id = FISHBLEACH
/datum/reagent/ethanol/drink/sexonthebeach
name = "Sex On The Beach"
@@ -1272,6 +1311,7 @@
color = "#f29224" //rgb: 242, 146, 36
glass_icon_state = "fireballglass"
glass_desc = "Red-hot cinnamon whisky in a shot glass."
+ arcane_id = CONDENSEDCAPSAICIN
/datum/reagent/ethanol/drink/c4cocktail
name = "C-4 Cocktail"
@@ -1293,6 +1333,7 @@
glass_name = "\improper Dragon's Blood"
can_be_lit = 1
light_color = "#540303"
+ arcane_id = BLOOD
/datum/reagent/ethanol/drink/dragonspit
name = "Dragon's Spit"
@@ -1303,6 +1344,7 @@
glass_icon_state = "dragonsspit"
glass_name = "\improper Dragon's Spit"
light_color = "#ff7003"
+ arcane_id = CONDENSEDCAPSAICIN
can_be_lit = 1
/datum/reagent/ethanol/drink/firecider
@@ -1334,6 +1376,7 @@
glass_icon_state = "manhattanfireball"
glass_name = "\improper Manhattan Fireball"
light_color = "#540303"
+ arcane_id = CONDENSEDCAPSAICIN
can_be_lit = 1
/datum/reagent/ethanol/drink/fireballcola
@@ -1345,6 +1388,7 @@
glass_icon_state = "fireballcola"
glass_name = "\improper Fireball Cola"
glass_desc = "Cinnamon whisky and cola - like a regular whiskey cola, but with more burning."
+ arcane_id = CONDENSEDCAPSAICIN
/datum/reagent/ethanol/drink/firerita
name = "Fire-rita"
@@ -1355,6 +1399,7 @@
glass_icon_state = "firerita"
glass_name = "firerita"
glass_desc = "Looks pretty, offends a sane person's taste buds. Then again, anyone who orders this probably lacks one of those two traits."
+ arcane_id = CONDENSEDCAPSAICIN
/datum/reagent/ethanol/drink/magica
name = "Magica"
@@ -1365,6 +1410,7 @@
glass_icon_state = "magica"
glass_name = "magica"
glass_desc = "Bitter, with an annoying aftertaste of spice. Supposedly inspired by wearers of bath robes."
+ arcane_id = MAGICADELUXE
/datum/reagent/ethanol/drink/b52
name = "B-52"
@@ -1384,6 +1430,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#664300" //rgb: 102, 67, 0
glass_icon_state = "irishcoffeeglass"
+ arcane_id = POTATO
/datum/reagent/ethanol/drink/margarita
name = "Margarita"
@@ -1402,6 +1449,7 @@
glass_icon_state = "blackrussianglass"
glass_name = "\improper Black Russian"
glass_desc = "For the lactose-intolerant. Still as classy as a White Russian."
+ arcane_id = WHITERUSSIAN
/datum/reagent/ethanol/drink/manhattan
name = "Manhattan"
@@ -1420,6 +1468,7 @@
color = "#664300" //rgb: 102, 67, 0
glass_icon_state = "proj_manhattanglass"
glass_name = "\improper Manhattan Project"
+ //arcane_id = URANIUM //we knew the cocktail would no longer be the same
/datum/reagent/ethanol/drink/whiskeysoda
name = "Whiskey Soda"
@@ -1437,6 +1486,7 @@
color = "#664300" //rgb: 102, 67, 0
glass_icon_state = "antifreeze"
glass_name = "\improper Anti-freeze"
+ arcane_id = FROSTOIL
/datum/reagent/ethanol/drink/barefoot
name = "Barefoot"
@@ -1467,6 +1517,7 @@
glass_icon_state = "demonsblood"
glass_name = "\improper Demon's Blood"
glass_desc = "Just looking at this thing makes the hair on the back of your neck stand up."
+ arcane_id = BLOOD
/datum/reagent/ethanol/drink/vodkatonic
name = "Vodka and Tonic"
@@ -1521,6 +1572,7 @@
glass_icon_state = "singulo"
glass_name = "\improper Singulo"
glass_desc = "IT'S LOOSE!"
+ arcane_id = GRAVSINGULO
/datum/reagent/ethanol/drink/sangria
name = "Sangria"
@@ -1607,6 +1659,7 @@
color = BLOB_MEAT
glass_icon_state = "evoluatorglass"
glass_desc = "Blob evoluated with oxigen. Prickly!"
+ arcane_id = SPORE
/datum/reagent/ethanol/drink/blob_beer
name = "Blob beer"
@@ -1616,6 +1669,7 @@
color = BLOB_MEAT
glass_icon_state = "blobbeerglass"
glass_desc = "Acidic beer with a grand foam head. Subtle hints of apple."
+ arcane_id = SPORE
/datum/reagent/ethanol/drink/liberator
name = "Liberator"
@@ -1625,6 +1679,7 @@
color = DEFAULT_BLOOD
glass_icon_state = "liberatorglass"
glass_desc = "Fruity and strong, for when you need a quick recharge."
+ arcane_id = SPORE
/datum/reagent/ethanol/drink/spore
name = "Spore"
@@ -1635,6 +1690,7 @@
custom_metabolism = 0.1
glass_icon_state = "sporeglass"
glass_desc = "A tasteless drink with an almost unbearable aftertaste."
+ arcane_id = BLOBANINE
/datum/reagent/ethanol/drink/spore/on_mob_life(var/mob/living/M)
if(..())
@@ -1739,6 +1795,7 @@
glass_icon_state = "changelingsting"
glass_name = "\improper Changeling Sting"
glass_desc = "Stings, but not deadly."
+ arcane_id = CHANGELINGSTAB
/datum/reagent/ethanol/drink/changelingsting/on_mob_life(var/mob/living/M)
if(..())
@@ -1752,6 +1809,7 @@
description = "A bit less mild than the sting. Not that you've ever been stabbed either, surely."
glass_name = "\improper Changeling Stab"
glass_desc = "Stabs, but metaphorically."
+ arcane_id = CHANGELINGSTING
/datum/reagent/ethanol/drink/changelingsting/stab/on_mob_life(var/mob/living/M)
if(..())
@@ -1777,6 +1835,7 @@
glass_icon_state = "irishcarbomb"
glass_name = "\improper Irish Car Bomb"
glass_desc = "Something about this drink troubles you."
+ arcane_id = POTATO
/datum/reagent/ethanol/drink/irishcarbomb/on_mob_life(var/mob/living/M)
if(..())
@@ -1794,6 +1853,7 @@
glass_name = "\improper Syndicate Bomb"
glass_desc = "Somebody set up us the bomb!"
glass_isGlass = 0
+ arcane_id = AMMONIUMNITRATE
/datum/reagent/ethanol/drink/driestmartini
name = "Driest Martini"
@@ -1862,6 +1922,7 @@
description = "A little help finding the bartender."
reagent_state = REAGENT_STATE_LIQUID
color = "#664300" //rgb: 102, 67, 0
+ arcane_id = METABUDDY
/datum/reagent/ethanol/drink/pintpointer/when_drinkingglass_master_reagent(var/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/D)
var/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/pintpointer/P = new (get_turf(D))
@@ -1885,6 +1946,7 @@
glass_icon_state = "monster_mash"
glass_name = "\improper Monster Mash"
glass_desc = "Will get you graveyard smashed."
+ arcane_id = MUTAGEN
/datum/reagent/ethanol/drink/monstermash/on_mob_life(var/mob/living/M)
if(..())
diff --git a/code/modules/reagents/reagents/reagents_food.dm b/code/modules/reagents/reagents/reagents_food.dm
index 187b4991da2c..630c773fd62f 100644
--- a/code/modules/reagents/reagents/reagents_food.dm
+++ b/code/modules/reagents/reagents/reagents_food.dm
@@ -70,6 +70,7 @@
custom_metabolism = FOOD_METABOLISM
density = 0.53
specheatcap = 3.49
+ arcane_id = CONDENSEDCAPSAICIN
/datum/reagent/capsaicin/on_mob_life(var/mob/living/M)
@@ -255,6 +256,7 @@
density = 0.9185
specheatcap = 2.402
var/has_had_heart_explode = 0
+ arcane_id = LIPOZINE
/datum/reagent/cornoil/on_mob_life(var/mob/living/M)
@@ -311,6 +313,7 @@
specheatcap = 0.55536
overdose_am = 30
custom_metabolism = 0.05
+ arcane_id = LIPOZINE
/datum/reagent/diabeetusol/on_mob_life(var/mob/living/M)
if(..())
@@ -354,6 +357,7 @@
reagent_state = REAGENT_STATE_SOLID
nutriment_factor = REAGENTS_METABOLISM
color = "#302000" //rgb: 48, 32, 0
+ arcane_id = HELL_RAMEN
/datum/reagent/dry_ramen/on_mob_life(var/mob/living/M)
if(..())
@@ -426,6 +430,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#8BA6E9" //rgb: 139, 166, 233
custom_metabolism = FOOD_METABOLISM
+ arcane_id = CONDENSEDCAPSAICIN
/datum/reagent/frostoil/on_mob_life(var/mob/living/M)
@@ -492,6 +497,7 @@
reagent_state = REAGENT_STATE_LIQUID
nutriment_factor = 10 * REAGENTS_METABOLISM
color = "#E7A568"
+ arcane_id = WATER
/datum/reagent/gravy/on_mob_life(var/mob/living/M, var/alien)
if(..())
@@ -510,6 +516,7 @@
color = "#302000" //rgb: 48, 32, 0
density = 1.42
specheatcap = 14.59
+ arcane_id = CALCIUMOXIDE
/datum/reagent/hell_ramen/on_mob_life(var/mob/living/M)
if(..())
@@ -527,6 +534,7 @@
var/quality = 2
density = 1.59
specheatcap = 1.244
+ //arcane_id = TOXIN
/datum/reagent/honey/on_mob_life(var/mob/living/M)
if(ishuman(M))
@@ -581,6 +589,7 @@
color = "#302000" //rgb: 48, 32, 0
density = 1.33
specheatcap = 4.18
+ arcane_id = DRY_RAMEN
/datum/reagent/hot_ramen/on_mob_life(var/mob/living/M)
if(..())
@@ -612,6 +621,7 @@
description = "A lipid heavy liquid, that's likely to make your fad lipozine diet fail."
color = "#DFDFDF"
nutriment_factor = 25 * REAGENTS_METABOLISM
+ arcane_id = LIPOZINE
/datum/reagent/liquidbutter/on_mob_life(var/mob/living/M)
if(..())
@@ -661,6 +671,7 @@
reagent_state = REAGENT_STATE_SOLID
color = "#FFA500"
custom_metabolism = 0.1
+ arcane_id = BUSTANUT
/datum/reagent/muhhardcores
name = "Hardcores"
@@ -669,6 +680,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#FFF000"
custom_metabolism = 0.01
+ arcane_id = MEDCORES
/datum/reagent/muhhardcores/on_mob_life(var/mob/living/M)
if(..())
@@ -714,6 +726,7 @@
color = "#664330" //rgb: 102, 67, 48
density = 6.54
specheatcap = 17.56
+ //arcane_id = LIPOZINE
plant_nutrition = 10
plant_health = 1
@@ -850,6 +863,7 @@
reagent_state = REAGENT_STATE_SOLID
color = "#ff5100"
custom_metabolism = 0.1
+ arcane_id = BUSTANUT
/datum/reagent/soysauce
name = "Soysauce"
@@ -894,6 +908,7 @@
color = "#FF00FF" //rgb: 255, 0, 255
density = 1.59
specheatcap = 1.24
+ //arcane_id = HONKSERUM
/datum/reagent/sprinkles/on_mob_life(var/mob/living/M)
if(..())
@@ -915,6 +930,7 @@
sport = SPORTINESS_SUGAR
density = 1.59
specheatcap = 1.244
+ arcane_id = CORNSYRUP
plant_nutrition = 1
plant_pests = 20
plant_weeds = 20
@@ -988,6 +1004,7 @@
reagent_state = REAGENT_STATE_LIQUID
nutriment_factor = 4 * REAGENTS_METABOLISM
color = "#B38B26" //rgb: 179, 139, 38
+ arcane_id = ZAMSPICYTOXIN
/datum/reagent/zamspicytoxin
name = "Zam's Spicy Sauce"
diff --git a/code/modules/reagents/reagents/reagents_medical.dm b/code/modules/reagents/reagents/reagents_medical.dm
index 16909d93bb8e..0d291ae8b9d1 100644
--- a/code/modules/reagents/reagents/reagents_medical.dm
+++ b/code/modules/reagents/reagents/reagents_medical.dm
@@ -123,6 +123,7 @@
pain_resistance = 15
density = 5.98
specheatcap = 1.75
+ //arcane_id = IMPEDREZENE
/datum/reagent/alkycosine/on_mob_life(var/mob/living/M)
if(..())
@@ -141,6 +142,7 @@
pain_resistance = 10
density = 2.98
specheatcap = 0.77
+ //arcane_id = IMPEDREZENE
/datum/reagent/alkysine/on_mob_life(var/mob/living/M)
if(..())
@@ -196,6 +198,7 @@
data = list(
"threshold" = 35,
)
+ //arcane_id = PLACEBO //now we found somewhere for it
/datum/reagent/antipathogenic/tomato_soup/on_mob_life(var/mob/living/M)
..()
@@ -214,6 +217,7 @@
data = list(
"threshold" = 30,
)
+ //arcane_id = PLACEBO //now we found somewhere for it
/datum/reagent/antipathogenic/allicin/on_mob_life(var/mob/living/M)
if(..())
@@ -261,6 +265,7 @@
data = list(
"threshold" = 50,
)
+ //arcane_id = RADIUM
/datum/reagent/antipathogenic/spaceacillin/on_overdose(var/mob/living/M)
M.adjustToxLoss(0.2)
@@ -276,6 +281,7 @@
data = list(
"threshold" = 95,
)
+ //arcane_id = RADIUM
/datum/reagent/antipathogenic/nanofloxacin/on_overdose(var/mob/living/M)
M.adjustToxLoss(1)
@@ -292,6 +298,7 @@
density = 1.49033
specheatcap = 0.55536
overdose_am = 60
+ //arcane_id = TOXIN
plant_toxins = -10
/datum/reagent/anti_toxin/on_mob_life(var/mob/living/M)
@@ -354,6 +361,7 @@
overdose_am = REAGENTS_OVERDOSE
density = 1.67
specheatcap = 0.72198
+ //arcane_id = URANIUM
/datum/reagent/arithrazine/on_mob_life(var/mob/living/M)
if(..())
@@ -373,6 +381,7 @@
overdose_am = REAGENTS_OVERDOSE
density = 1.96
specheatcap = 0.57
+ arcane_id = BICARODYNE
/datum/reagent/bicaridine/on_mob_life(var/mob/living/M, var/alien)
if(..())
@@ -458,6 +467,7 @@ var/global/list/charcoal_doesnt_remove=list(
data = 0
density = 1.01
specheatcap = 3.88
+ arcane_id = LIQUIDPCP
/datum/reagent/citalopram/on_mob_life(var/mob/living/M as mob)
if(..())
@@ -479,6 +489,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#C8A5DC" //rgb: 200, 165, 220
density = 1.22
specheatcap = 4.27
+ //arcane_id = BLOOD
plant_toxins = -5
plant_health = 5
@@ -527,6 +538,7 @@ var/global/list/charcoal_doesnt_remove=list(
var/armstronged_at = 0 //world.time
density = 134.21
specheatcap = 5.14318
+ arcane_id = NANITES
/datum/reagent/comnanobots/reagent_deleted()
if(..())
@@ -591,6 +603,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#C8A5DC" //rgb: 200, 165, 220
density = 1.47
specheatcap = 3.47
+ //arcane_id = LEPORAZINE
plant_toxins = -3
plant_health = 3
@@ -630,6 +643,7 @@ var/global/list/charcoal_doesnt_remove=list(
density = 3.9
specheatcap = 0.12812
custom_metabolism = 0.1
+ arcane_id = MILK
/datum/reagent/degeneratecalcium/on_mob_life(var/mob/living/M)
if(..())
@@ -665,6 +679,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#C8A5DC" //rgb: 200, 165, 220
density = 1.75
specheatcap = 0.36
+ //arcane_id = CONDENSEDCAPSAICIN
/datum/reagent/dermaline/on_mob_life(var/mob/living/M)
if(..())
@@ -680,6 +695,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#4CE9FF" //rgb: 74, 230, 252
density = 2.28
specheatcap = 0.91
+ //arcane_id = LEXORIN
/datum/reagent/dexalin/on_mob_life(var/mob/living/M)
if(..())
@@ -714,6 +730,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#4CE9FF" //rgb: 74, 230, 252
density = 4.14
specheatcap = 0.29
+ //arcane_id = LEXORIN
/datum/reagent/dexalinp/on_mob_life(var/mob/living/M)
if(..())
@@ -748,6 +765,7 @@ var/global/list/charcoal_doesnt_remove=list(
density = 1.44
specheatcap = 60
overdose_am = 5
+ arcane_id = DIABEETUSOL
var/on_a_diet
var/oldmetabolism
@@ -788,6 +806,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#605048" //rgb: 96, 80, 72
density = 1.63
specheatcap = 0.36
+ arcane_id = ETHANOL
/datum/reagent/ethylredoxrazine/on_mob_life(var/mob/living/M)
if(..())
@@ -810,6 +829,7 @@ var/global/list/charcoal_doesnt_remove=list(
overdose_am = REAGENTS_OVERDOSE
density = 3.25
specheatcap = 0.5220
+ //arcane_id = URANIUM
/datum/reagent/hyronalin/on_mob_life(var/mob/living/M)
if(..())
@@ -825,6 +845,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#C8A5DC" //rgb: 200, 165, 220
density = 1.92
specheatcap = 5.45
+ //arcane_id = GRUE_BILE
/datum/reagent/imidazoline/on_mob_life(var/mob/living/M)
if(..())
@@ -887,6 +908,7 @@ var/global/list/charcoal_doesnt_remove=list(
overdose_am = REAGENTS_OVERDOSE
density = 1.58
specheatcap = 1.65
+ //arcane_id = GRUE_BILE
/datum/reagent/inacusiate/on_mob_life(var/mob/living/M)
if(..())
@@ -907,6 +929,7 @@ var/global/list/charcoal_doesnt_remove=list(
pain_resistance = 25
density = 1.66
specheatcap = 0.8
+ //arcane_id = OXYGEN
/datum/reagent/inaprovaline/on_mob_life(var/mob/living/M, var/alien)
if(..())
@@ -926,6 +949,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#C2733F" //rgb: 94, 15, 63
density = 2.3
specheatcap = 0.51
+ //arcane_id = CONDENSEDCAPSAICIN
/datum/reagent/kelotane/on_mob_life(var/mob/living/M)
if(..())
@@ -957,6 +981,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#C8A5DC" //rgb: 200, 165, 220
density = 5.65
specheatcap = ARBITRARILY_LARGE_NUMBER //Good luck heating something with leporazine in it
+ //arcane_id = FROSTOIL
/datum/reagent/leporazine/on_mob_life(var/mob/living/M)
if(..())
@@ -995,6 +1020,7 @@ var/global/list/charcoal_doesnt_remove=list(
custom_metabolism = 0.2
density = 4.92
specheatcap = 0.15053
+ //arcane_id = URANIUM
//The anti-nutriment
/datum/reagent/lipozine
@@ -1006,6 +1032,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#BBEDA4" //rgb: 187, 237, 164
density = 2.63
specheatcap = 0.38113
+ arcane_id = DIABEETUSOL
/datum/reagent/lipozine/on_mob_life(var/mob/living/M)
if(..())
@@ -1027,6 +1054,7 @@ var/global/list/charcoal_doesnt_remove=list(
var/percent_machine = 0
density = 96.64
specheatcap = 0.19999
+ //arcane_id = NANITES
/datum/reagent/mednanobots/on_mob_life(var/mob/living/M)
if(..())
@@ -1114,6 +1142,7 @@ var/global/list/charcoal_doesnt_remove=list(
overdose_am = REAGENTS_OVERDOSE/2
density = 4.09
specheatcap = 4.559
+ arcane_id = IMPEDREZENE
/datum/reagent/methylin/on_mob_life(var/mob/living/M)
if(..())
@@ -1135,6 +1164,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#3E3959" //rgb: 62, 57, 89
density = 236.6
specheatcap = 0.19999
+ arcane_id = NANITES
/datum/reagent/oxycodone
name = "Oxycodone"
@@ -1145,6 +1175,7 @@ var/global/list/charcoal_doesnt_remove=list(
custom_metabolism = 0.05
density = 1.26
specheatcap = 24.59
+ //arcane_id = PLACEBO
/datum/reagent/oxycodone/on_mob_life(var/mob/living/M)
if(..())
@@ -1172,6 +1203,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#C855DC"
pain_resistance = 60
density = 1.26
+ //arcane_id = PLACEBO
/datum/reagent/paroxetine
name = "Paroxetine"
@@ -1183,6 +1215,7 @@ var/global/list/charcoal_doesnt_remove=list(
data = 0
density = 1.19
specheatcap = 3.99
+ arcane_id = LIQUIDPCP
/datum/reagent/paroxetine/on_mob_life(var/mob/living/M as mob)
if(..())
@@ -1211,6 +1244,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#C8A5DC" //rgb: 200, 165, 220
density = 22.25
specheatcap = 10.55
+ //arcane_id = DISCOUNT
/datum/reagent/peptobismol/on_mob_life(var/mob/living/M)
if(..())
@@ -1230,6 +1264,7 @@ var/global/list/charcoal_doesnt_remove=list(
reagent_state = REAGENT_STATE_LIQUID
color = "#C8A5DC" //rgb: 200, 165, 220
overdose_am = 10
+ //arcane_id = LEXORIN
/datum/reagent/peridaxon/on_mob_life(var/mob/living/M)
if(..())
@@ -1264,6 +1299,7 @@ var/global/list/charcoal_doesnt_remove=list(
reagent_state = REAGENT_STATE_LIQUID
color = "#00FF00"
custom_metabolism = 0.01
+ arcane_id = IMPEDREZENE
/datum/reagent/phalanximine
name = "Phalanximine"
@@ -1273,6 +1309,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#1A1A1A" //rgb: 26, 26, 26
density = 2.46
specheatcap = 0.124393
+ //arcane_id = DANBACCO
/datum/reagent/phalanximine/on_mob_life(var/mob/living/M)
if(..())
@@ -1379,6 +1416,7 @@ var/global/list/charcoal_doesnt_remove=list(
overdose_tick = 35
density = 109.81
specheatcap = 13.59
+ //arcane_id = BLOOD
/datum/reagent/rezadone/on_mob_life(var/mob/living/M)
if(..())
@@ -1415,6 +1453,7 @@ var/global/list/charcoal_doesnt_remove=list(
overdose_am = REAGENTS_OVERDOSE
density = 1.97
specheatcap = 0.51261
+ arcane_id = MUTAGEN
/datum/reagent/ryetalyn/on_mob_life(var/mob/living/M)
if(..())
@@ -1462,6 +1501,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#A5A5FF" //rgb: 165, 165, 255
density = 1.58
specheatcap = 0.44
+ //arcane_id = PACID
/datum/reagent/simpolinol/on_mob_life(var/mob/living/M)
if(..())
@@ -1493,6 +1533,7 @@ var/global/list/charcoal_doesnt_remove=list(
custom_metabolism = 0.2
density = 1.564
specheatcap = 1.725
+ arcane_id = CHLORALHYDRATE
/datum/reagent/srejuvenate/on_mob_life(var/mob/living/M)
if(..())
@@ -1536,6 +1577,7 @@ var/global/list/charcoal_doesnt_remove=list(
reagent_state = REAGENT_STATE_LIQUID
color = "#833484" //rgb: 131, 52, 132
custom_metabolism = 0.1
+ arcane_id = MEDNANOBOTS
/datum/reagent/stabilizine/on_mob_life(var/mob/living/M, var/alien)
if(..())
@@ -1590,6 +1632,8 @@ var/global/list/charcoal_doesnt_remove=list(
pain_resistance = 40
density = 1.04
specheatcap = 18.53
+ arcane_id = SPIRITBREAKER
+ arcane_ratio = 0.5
/datum/reagent/synaptizine/on_mob_life(var/mob/living/M)
if(..())
@@ -1615,6 +1659,7 @@ var/global/list/charcoal_doesnt_remove=list(
overdose_am = REAGENTS_OVERDOSE
density = 4.67
specheatcap = 0.57
+ //arcane_id = BICARODYNE
/datum/reagent/synthocarisol/on_mob_life(var/mob/living/M)
if(..())
@@ -1632,6 +1677,7 @@ var/global/list/charcoal_doesnt_remove=list(
custom_metabolism = 0.1
density = 1.2
specheatcap = 1.79
+ //arcane_id = PLACEBO
/datum/reagent/tramadol/on_mob_life(var/mob/living/M)
if(..())
@@ -1650,6 +1696,7 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#C8A5DC" //rgb: 200, 165, 220
density = 1.58
specheatcap = 0.44
+ //arcane_id = GLYCEROL
/datum/reagent/tricordrazine/on_mob_life(var/mob/living/M)
if(..())
@@ -1674,6 +1721,7 @@ var/global/list/charcoal_doesnt_remove=list(
alpha = 142
density = 1.33
specheatcap = 3.88
+ //arcane_id = GLYCEROL
/datum/reagent/trinitrine/on_mob_life(var/mob/living/M)
if(prob(10))
@@ -1703,6 +1751,8 @@ var/global/list/charcoal_doesnt_remove=list(
data = list(
"antigen" = list(),
)
+ arcane_id = AUTISTNANITES //jenny mccarthy pls go
+ arcane_ratio = 0.5 //dr fauci, give us vaccines
/datum/reagent/vaccine/handle_data_mix(var/list/added_data=null, var/added_volume, var/mob/admin)
if (added_data)
@@ -1728,3 +1778,4 @@ var/global/list/charcoal_doesnt_remove=list(
color = "#899613" //rgb: 137, 150, 19
density = 0.67
specheatcap = 4.18
+ //arcane_id = MUTAGEN
diff --git a/code/modules/reagents/reagents/reagents_misc.dm b/code/modules/reagents/reagents/reagents_misc.dm
index 348950e77772..7934a7b2df8f 100644
--- a/code/modules/reagents/reagents/reagents_misc.dm
+++ b/code/modules/reagents/reagents/reagents_misc.dm
@@ -438,6 +438,7 @@ var/procizine_tolerance = 0
density = 19.3
specheatcap = 0.129
whitelisted_ids = list(MERCURY)
+ arcane_id = MERCURY
/datum/reagent/sodium_silicate
name = "Sodium Silicate"
@@ -481,6 +482,7 @@ var/procizine_tolerance = 0
color = "#8E18A9" //rgb: 142, 24, 169
density = 1.58
specheatcap = 1.44
+ arcane_id = ROGAN
/datum/reagent/temp_hearer/locutogen/on_mob_life(var/mob/living/M)
if(..())
diff --git a/code/modules/reagents/reagents/reagents_plant.dm b/code/modules/reagents/reagents/reagents_plant.dm
index 8ed1634bb6d9..8bf2a3c9fce8 100644
--- a/code/modules/reagents/reagents/reagents_plant.dm
+++ b/code/modules/reagents/reagents/reagents_plant.dm
@@ -8,6 +8,7 @@
color = "#604030" //rgb: 96, 64, 48
density = 0.65
specheatcap = 35.37
+ arcane_id = SODIUMCHLORIDE
plant_nutrition = 1
plant_health = 1
@@ -50,6 +51,7 @@
color = "#664330" // rgb: 102, 67, 48
density = 5.4
specheatcap = 15
+ arcane_id = SODIUMCHLORIDE
/datum/reagent/fertilizer/eznutrient
name = "EZ Nutrient"
@@ -135,6 +137,7 @@
color = "#49002E" //rgb: 73, 0, 46
density = 1.08
specheatcap = 4.18
+ arcane_id = FERTILIZER
//Clear off wallrot fungi
/datum/reagent/toxin/plantbgone/reaction_turf(var/turf/simulated/T, var/volume)
@@ -202,6 +205,7 @@
color = "#49002E" //rgb: 73, 0, 46
density = 1.08
specheatcap = 4.18
+ arcane_id = FERTILIZER
plant_pests = -8
/datum/reagent/toxin/insecticide/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
diff --git a/code/modules/reagents/reagents/reagents_tools.dm b/code/modules/reagents/reagents/reagents_tools.dm
index bab05e5fb15a..900f8391d678 100644
--- a/code/modules/reagents/reagents/reagents_tools.dm
+++ b/code/modules/reagents/reagents/reagents_tools.dm
@@ -21,6 +21,7 @@
specheatcap = 0.68
glass_icon_state = "dr_gibb_glass"
glass_desc = "Unless you are an industrial tool, this is probably not safe for consumption."
+ //arcane_id = PLASMA
/datum/reagent/fuel/reaction_obj(var/obj/O, var/volume)
var/datum/reagent/self = src
@@ -133,6 +134,7 @@
overdose_am = REAGENTS_OVERDOSE
density = 1.11775
specheatcap = 2.71388
+ arcane_id = SODIUM_POLYACRYLATE
/datum/reagent/lube/reaction_turf(var/turf/simulated/T, var/volume)
if(..())
@@ -172,6 +174,7 @@
custom_metabolism = 0.5
density = 1.98
specheatcap = 1.39
+ arcane_id = WATER
plant_toxins = 20
plant_health = -5
@@ -268,6 +271,7 @@
custom_metabolism = 0.5
density = 1.84
specheatcap = 1.38
+ arcane_id = WATER
plant_toxins = 2
/datum/reagent/sacid/on_mob_life(var/mob/living/M)
@@ -357,6 +361,7 @@
color = "#FFFFFF"
density = 1.22
specheatcap = 4.14
+ arcane_id = LUBE
/datum/reagent/sodium_polyacrylate/reaction_turf(var/turf/simulated/T, var/volume)
if(..())
@@ -377,6 +382,7 @@
density = 0.76
specheatcap = 60.17
var/clean_level = CLEANLINESS_SPACECLEANER
+ arcane_id = BLOOD
/datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume)
if(..())
diff --git a/code/modules/reagents/reagents/reagents_toxin.dm b/code/modules/reagents/reagents/reagents_toxin.dm
index 4365b93d4287..cf6e66e12eed 100644
--- a/code/modules/reagents/reagents/reagents_toxin.dm
+++ b/code/modules/reagents/reagents/reagents_toxin.dm
@@ -117,6 +117,7 @@
color = "#C8A5DC" //rgb: 200, 165, 220
overdose_am = REAGENTS_OVERDOSE * 2 //No need for anyone to get suspicious.
custom_metabolism = 0.01
+ arcane_id = BICARIDINE
/datum/reagent/carpotoxin
name = "Carpotoxin"
@@ -159,6 +160,7 @@
flags = CHEMFLAG_DISHONORABLE // NO CHEATING
density = 11.43
specheatcap = 13.79
+ arcane_id = COFFEE
/datum/reagent/chloralhydrate/on_mob_life(var/mob/living/M)
if(..())
@@ -182,6 +184,7 @@
color = "#664300" //rgb: 102, 67, 0
glass_icon_state = "beerglass"
glass_desc = "A cold pint of pale lager."
+ arcane_id = BEER
/datum/reagent/chloramine
name = "Chloramine"
@@ -252,6 +255,7 @@
color = "#ff91b7" //rgb: 255, 145, 183
density = 0.78
specheatcap = 5.47
+ arcane_id = SPIRITBREAKER
/datum/reagent/heartbreaker/on_mob_life(var/mob/living/M)
if(..())
@@ -286,6 +290,7 @@
color = "#F2C900" //rgb: 242, 201, 0
custom_metabolism = 0.05
overdose_am = REAGENTS_OVERDOSE
+ arcane_id = SILENCER
/datum/reagent/honkserum/on_overdose(var/mob/living/H)
if (H?.mind?.miming)
@@ -316,6 +321,7 @@
overdose_am = REAGENTS_OVERDOSE
specheatcap = 0.14
density = 13.56
+ arcane_id = METHYLIN
/datum/reagent/mercury/on_mob_life(var/mob/living/M)
if(..())
@@ -338,6 +344,7 @@
custom_metabolism = 0.05
density = 0.78
specheatcap = 5.47
+ arcane_id = SPIRITBREAKER
/datum/reagent/mindbreaker/on_mob_life(var/mob/living/M)
if(..())
@@ -358,6 +365,7 @@
nutriment_factor = 2.5 * REAGENTS_METABOLISM //about as nutritious as sugar
sport = SPORTINESS_SUGAR //a small performance boost from being COOL AND FRESH
var/chillcounter = 0
+ arcane_id = MINTESSENCE
/datum/reagent/minttoxin/on_mob_life(var/mob/living/M, var/alien)
if(..())
@@ -404,6 +412,7 @@
description = "Minty freshness in liquid form!"
custom_metabolism = 0.1 //toxin lasts 10x as long
fatgokaboom = FALSE
+ arcane_id = MINTTOXIN
/datum/reagent/mutagen
name = "Unstable Mutagen"
@@ -413,6 +422,7 @@
color = "#13BC5E" //rgb: 19, 188, 94
density = 3.35
specheatcap = 0.09686
+ arcane_id = RADIUM
/datum/reagent/mutagen/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
if(..())
@@ -549,6 +559,7 @@
dupeable = FALSE
color = "#535E66" //rgb: 83, 94, 102
var/disease_type = DISEASE_CYBORG
+ //arcane_id = XENOMICROBES
/datum/reagent/nanites/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
if(..())
@@ -641,6 +652,7 @@
reagent_state = REAGENT_STATE_LIQUID
color = "#3B0805" //rgb: 59, 8, 5
custom_metabolism = 0.05
+ arcane_id = SYNAPTIZINE
/datum/reagent/spiritbreaker/on_mob_life(var/mob/living/M)
if(..())
@@ -662,6 +674,7 @@
density = 3.56
specheatcap = 17.15
overdose_am = REAGENTS_OVERDOSE // So you can't pretend that you "didn't know it was an OD"
+ arcane_id = CHLORALHYDRATE
/datum/reagent/stoxin/on_mob_life(var/mob/living/M, var/alien)
if(..())
@@ -708,6 +721,7 @@
color = "#CF3600" //rgb: 207, 54, 0
custom_metabolism = 0.01
density = 1.4 //Let's just assume it's alpha-solanine
+ arcane_id = ANTI_TOXIN
plant_toxins = 2
/datum/reagent/toxin/on_mob_life(var/mob/living/M)
@@ -723,6 +737,7 @@
description = "Microbes with an entirely alien cellular structure."
reagent_state = REAGENT_STATE_LIQUID
color = "#535E66" //rgb: 83, 94, 102
+ arcane_id = NANITES
/datum/reagent/xenomicrobes/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
if(..())
diff --git a/code/modules/spells/targeted/push.dm b/code/modules/spells/targeted/push.dm
index d4fa79812e5f..af50f76b61cd 100644
--- a/code/modules/spells/targeted/push.dm
+++ b/code/modules/spells/targeted/push.dm
@@ -34,12 +34,21 @@
/spell/targeted/push/cast(var/list/targets)
..()
+ for(var/atom/movable/target in targets)
+ if(target.dimensional_push(holder))
+ score.dimensionalpushes++
+
+/spell/targeted/push/get_upgrade_price(upgrade_type)
+ return price / 2
+
+/atom/movable/proc/dimensional_push(var/mob/user)
+ . = 0
var/area/thearea
var/list/areas_to_check = areas.Copy() //Should gradually narrow down the list of areas to get to all the good areas
var/area/prospective
while(!thearea)
if(!areas_to_check.len) //If everything fails, don't crash the server
- to_chat(holder, "The spell matrix was unable to locate a suitable area for an unknown reason. Sorry.")
+ to_chat(user, "The spell matrix was unable to locate a suitable area for an unknown reason. Sorry.")
return
prospective = pick(areas_to_check)
if(prospective.type != /area)
@@ -48,7 +57,7 @@
areas_to_check -= prospective
continue
var/turf/T = pick(prospective_turfs)
- if(!(T.z == holder.z)) //Selected turf is not in the same z-level
+ if(T.z != src.z) //Selected turf is not in the same z-level
areas_to_check -= prospective
continue
thearea = prospective //We found it
@@ -58,7 +67,7 @@
continue
var/list/L = list()
for(var/turf/T in get_area_turfs(thearea.type))
- if(!T.density && (T.z == holder.z)) //In case an area somehow shows up in multiple z-levels
+ if(!T.density && T.z != src.z) //In case an area somehow shows up in multiple z-levels
var/clear = 1
for(var/obj/O in T)
if(O.density)
@@ -67,24 +76,26 @@
if(clear)
L+=T
if(!L.len)
- to_chat(holder, "The spell matrix was unable to locate a suitable destination for an unknown reason. Sorry.")
- return
+ if(user)
+ to_chat(user, "The spell matrix was unable to locate a suitable destination for an unknown reason. Sorry.")
+ return 0
var/list/backup_L = L.Copy()
- for(var/atom/movable/target in targets)
- target.unlock_from()
- var/attempt = null
- var/success = 0
- while(L.len)
- attempt = pick(L)
- success = target.Move(attempt)
- if(!success)
- L.Remove(attempt)
- else
- score.dimensionalpushes++
- break
+ unlock_from()
+ var/attempt = null
+ var/success = 0
+ while(L.len)
+ attempt = pick(L)
+ success = Move(attempt)
if(!success)
- target.forceMove(pick(backup_L))
-
-/spell/targeted/push/get_upgrade_price(upgrade_type)
- return price / 2
+ L.Remove(attempt)
+ else
+ score.dimensionalpushes++
+ break
+ if(!success)
+ L.Remove(attempt)
+ else
+ return 1
+ if(!success)
+ forceMove(pick(backup_L))
+ return 0
\ No newline at end of file