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