Merge branch 'master' into Superbases-goodbye
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
/datum/ntnet_service/proc/connect(datum/ntnet/net)
|
||||
if(!istype(net))
|
||||
return FALSE
|
||||
GET_COMPONENT(interface, /datum/component/ntnet_interface)
|
||||
var/datum/component/ntnet_interface/interface = GetComponent(/datum/component/ntnet_interface)
|
||||
if(!interface.register_connection(net))
|
||||
return FALSE
|
||||
if(!net.register_service(src))
|
||||
@@ -29,7 +29,7 @@
|
||||
/datum/ntnet_service/proc/disconnect(datum/ntnet/net, force = FALSE)
|
||||
if(!istype(net) || (!net.unregister_service(src) && !force))
|
||||
return FALSE
|
||||
GET_COMPONENT(interface, /datum/component/ntnet_interface)
|
||||
var/datum/component/ntnet_interface/interface = GetComponent(/datum/component/ntnet_interface)
|
||||
interface.unregister_connection(net)
|
||||
networks_by_id -= net.network_id
|
||||
return TRUE
|
||||
|
||||
@@ -682,7 +682,7 @@
|
||||
log_admin("[key_name(usr)] delayed the round start.")
|
||||
else
|
||||
to_chat(world, "<b>The game will start in [DisplayTimeText(newtime)].</b>")
|
||||
SEND_SOUND(world, sound('sound/ai/attention.ogg'))
|
||||
SEND_SOUND(world, sound(get_announcer_sound("attention")))
|
||||
log_admin("[key_name(usr)] set the pre-game delay to [DisplayTimeText(newtime)].")
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Delay Game Start") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -25,6 +25,9 @@
|
||||
H.facial_hair_color = H.hair_color
|
||||
H.eye_color = random_eye_color()
|
||||
H.dna.blood_type = random_blood_type()
|
||||
H.saved_underwear = H.underwear
|
||||
H.saved_undershirt = H.undershirt
|
||||
H.saved_socks = H.socks
|
||||
|
||||
// Mutant randomizing, doesn't affect the mob appearance unless it's the specific mutant.
|
||||
H.dna.features["mcolor"] = random_short_color()
|
||||
|
||||
@@ -400,7 +400,7 @@
|
||||
SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Chinese Cartoons"))
|
||||
message_admins("[key_name_admin(usr)] made everything kawaii.")
|
||||
for(var/mob/living/carbon/human/H in GLOB.carbon_list)
|
||||
SEND_SOUND(H, sound('sound/ai/animes.ogg'))
|
||||
SEND_SOUND(H, sound(get_announcer_sound("animes")))
|
||||
|
||||
if(H.dna.species.id == "human")
|
||||
if(H.dna.features["tail_human"] == "None" || H.dna.features["ears"] == "None")
|
||||
@@ -469,7 +469,7 @@
|
||||
if(is_station_level(W.z) && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison))
|
||||
W.req_access = list()
|
||||
message_admins("[key_name_admin(usr)] activated Egalitarian Station mode")
|
||||
priority_announce("CentCom airlock control override activated. Please take this time to get acquainted with your coworkers.", null, 'sound/ai/commandreport.ogg')
|
||||
priority_announce("CentCom airlock control override activated. Please take this time to get acquainted with your coworkers.", null, "commandreport")
|
||||
|
||||
if("ak47s")
|
||||
if(!check_rights(R_FUN))
|
||||
|
||||
@@ -318,6 +318,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
RemoveActive()
|
||||
state = AHELP_CLOSED
|
||||
GLOB.ahelp_tickets.ListInsert(src)
|
||||
to_chat(initiator, "<span class='adminhelp'>Ticket closed by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"].</span>")
|
||||
AddInteraction("<font color='red'>Closed by [key_name].</font>")
|
||||
if(!silent)
|
||||
SSblackbox.record_feedback("tally", "ahelp_stats", 1, "closed")
|
||||
@@ -336,7 +337,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
addtimer(CALLBACK(initiator, /client/proc/giveadminhelpverb), 50)
|
||||
|
||||
AddInteraction("<font color='green'>Resolved by [key_name].</font>")
|
||||
to_chat(initiator, "<span class='adminhelp'>Your ticket has been resolved by an admin. The Adminhelp verb will be returned to you shortly.</span>")
|
||||
to_chat(initiator, "<span class='adminhelp'>Your ticket has been resolved by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"]. The Adminhelp verb will be returned to you shortly.</span>")
|
||||
if(!silent)
|
||||
SSblackbox.record_feedback("tally", "ahelp_stats", 1, "resolved")
|
||||
var/msg = "Ticket [TicketHref("#[id]")] resolved by [key_name]"
|
||||
@@ -353,7 +354,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
|
||||
SEND_SOUND(initiator, sound('sound/effects/adminhelp.ogg'))
|
||||
|
||||
to_chat(initiator, "<font color='red' size='4'><b>- AdminHelp Rejected! -</b></font>")
|
||||
to_chat(initiator, "<font color='red' size='4'><b>- AdminHelp Rejected by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"]! -</b></font>")
|
||||
to_chat(initiator, "<font color='red'><b>Your admin help was rejected.</b> The adminhelp verb has been returned to you so that you may try again.</font>")
|
||||
to_chat(initiator, "Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting.")
|
||||
|
||||
@@ -369,7 +370,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
if(state != AHELP_ACTIVE)
|
||||
return
|
||||
|
||||
var/msg = "<font color='red' size='4'><b>- AdminHelp marked as IC issue! -</b></font><br>"
|
||||
var/msg = "<font color='red' size='4'><b>- AdminHelp marked as IC issue by [usr?.client?.holder?.fakekey? usr.client.holder.fakekey : "an administrator"]! -</b></font><br>"
|
||||
msg += "<font color='red'><b>Losing is part of the game!</b></font><br>"
|
||||
msg += "<font color='red'>It is also possible that your ahelp is unable to be answered properly, due to events occurring in the round.</font>"
|
||||
if(initiator)
|
||||
|
||||
@@ -560,7 +560,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
var/announce_command_report = TRUE
|
||||
switch(confirm)
|
||||
if("Yes")
|
||||
priority_announce(input, null, 'sound/ai/commandreport.ogg')
|
||||
priority_announce(input, null, "commandreport")
|
||||
announce_command_report = FALSE
|
||||
if("Cancel")
|
||||
return
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
sub_role = "Scientist"
|
||||
outfit = /datum/outfit/abductor/scientist
|
||||
landmark_type = /obj/effect/landmark/abductor/scientist
|
||||
greet_text = "Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve."
|
||||
greet_text = "Use your experimental console and surgical equipment to monitor your agent and experiment upon abducted humans."
|
||||
show_in_antagpanel = TRUE
|
||||
|
||||
/datum/antagonist/abductor/create_team(datum/team/abductor_team/new_team)
|
||||
@@ -40,15 +40,14 @@
|
||||
return team
|
||||
|
||||
/datum/antagonist/abductor/on_gain()
|
||||
owner.special_role = "[name] [sub_role]"
|
||||
owner.assigned_role = "[name] [sub_role]"
|
||||
owner.objectives += team.objectives
|
||||
owner.special_role = "[name]"
|
||||
owner.assigned_role = "[name]"
|
||||
objectives += team.objectives
|
||||
finalize_abductor()
|
||||
ADD_TRAIT(owner, TRAIT_ABDUCTOR_TRAINING, ABDUCTOR_ANTAGONIST)
|
||||
return ..()
|
||||
|
||||
/datum/antagonist/abductor/on_removal()
|
||||
owner.objectives -= team.objectives
|
||||
if(owner.current)
|
||||
to_chat(owner.current,"<span class='userdanger'>You are no longer the [owner.special_role]!</span>")
|
||||
owner.special_role = null
|
||||
@@ -66,6 +65,7 @@
|
||||
//Equip
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
H.set_species(/datum/species/abductor)
|
||||
|
||||
H.real_name = "[team.name] [sub_role]"
|
||||
H.equipOutfit(outfit)
|
||||
|
||||
@@ -99,8 +99,8 @@
|
||||
else
|
||||
return
|
||||
new_owner.add_antag_datum(src)
|
||||
log_admin("[key_name(usr)] made [key_name(new_owner.current)] [name] on [choice]!")
|
||||
message_admins("[key_name_admin(usr)] made [key_name_admin(new_owner.current)] [name] on [choice] !")
|
||||
log_admin("[key_name(usr)] made [key_name(new_owner)] [name] on [choice]!")
|
||||
message_admins("[key_name_admin(usr)] made [key_name_admin(new_owner)] [name] on [choice] !")
|
||||
|
||||
/datum/antagonist/abductor/get_admin_commands()
|
||||
. = ..()
|
||||
@@ -153,7 +153,7 @@
|
||||
result += "<span class='header'>The abductors of [name] were:</span>"
|
||||
for(var/datum/mind/abductor_mind in members)
|
||||
result += printplayer(abductor_mind)
|
||||
result += printobjectives(abductor_mind)
|
||||
result += printobjectives(objectives)
|
||||
|
||||
return "<div class='panel redborder'>[result.Join("<br>")]</div>"
|
||||
|
||||
@@ -178,7 +178,6 @@
|
||||
var/objtype = (prob(75) ? /datum/objective/abductee/random : pick(subtypesof(/datum/objective/abductee/) - /datum/objective/abductee/random))
|
||||
var/datum/objective/abductee/O = new objtype()
|
||||
objectives += O
|
||||
owner.objectives += objectives
|
||||
|
||||
/datum/antagonist/abductee/apply_innate_effects(mob/living/mob_override)
|
||||
update_abductor_icons_added(mob_override ? mob_override.mind : owner,"abductee")
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
/obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user)
|
||||
/obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user, datum/action/A)
|
||||
if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to activate the vest if he's actually wearing it.
|
||||
return 1
|
||||
|
||||
@@ -135,12 +135,14 @@
|
||||
/obj/item/abductor/proc/AbductorCheck(mob/user)
|
||||
if(HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING))
|
||||
return TRUE
|
||||
if (istype(user) && user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING))
|
||||
return TRUE
|
||||
to_chat(user, "<span class='warning'>You can't figure how this works!</span>")
|
||||
return FALSE
|
||||
|
||||
/obj/item/abductor/proc/ScientistCheck(mob/user)
|
||||
var/training = HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING)
|
||||
var/sci_training = HAS_TRAIT(user, TRAIT_ABDUCTOR_SCIENTIST_TRAINING)
|
||||
var/training = HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING) || (user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING))
|
||||
var/sci_training = HAS_TRAIT(user, TRAIT_ABDUCTOR_SCIENTIST_TRAINING) || (user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_SCIENTIST_TRAINING))
|
||||
|
||||
if(training && !sci_training)
|
||||
to_chat(user, "<span class='warning'>You're not trained to use this!</span>")
|
||||
@@ -343,8 +345,8 @@
|
||||
if(QDELETED(G))
|
||||
return
|
||||
|
||||
if(istype(C.get_item_by_slot(SLOT_HEAD), /obj/item/clothing/head/foilhat))
|
||||
to_chat(user, "<span class='warning'>Your target seems to have some sort of protective headgear on, blocking the message from being sent!</span>")
|
||||
if(C.anti_magic_check(FALSE, FALSE, TRUE, 0))
|
||||
to_chat(user, "<span class='warning'>Your target seems to have some sort of tinfoil protection on, blocking the message from being sent!</span>")
|
||||
return
|
||||
|
||||
G.mind_control(command, user)
|
||||
@@ -522,10 +524,10 @@ Congratulations! You are now trained for invasive xenobiology research!"}
|
||||
|
||||
/obj/item/abductor_baton/proc/SleepAttack(mob/living/L,mob/living/user)
|
||||
if(L.incapacitated(TRUE, TRUE))
|
||||
if(istype(L.get_item_by_slot(SLOT_HEAD), /obj/item/clothing/head/foilhat))
|
||||
to_chat(user, "<span class='warning'>The specimen's protective headgear is interfering with the sleep inducement!</span>")
|
||||
L.visible_message("<span class='danger'>[user] tried to induced sleep in [L] with [src], but [L.p_their()] headgear protected [L.p_them()]!</span>", \
|
||||
"<span class='userdanger'>You feel a strange wave of heavy drowsiness wash over you, but your headgear deflects most of it!</span>")
|
||||
if(L.anti_magic_check(FALSE, FALSE, TRUE, 0))
|
||||
to_chat(user, "<span class='warning'>The specimen's tinfoil protection is interfering with the sleep inducement!</span>")
|
||||
L.visible_message("<span class='danger'>[user] tried to induced sleep in [L] with [src], but [L.p_their()] tinfoil protected [L.p_them()]!</span>", \
|
||||
"<span class='userdanger'>You feel a strange wave of heavy drowsiness wash over you, but your tinfoil protection deflects most of it!</span>")
|
||||
L.drowsyness += 2
|
||||
return
|
||||
L.visible_message("<span class='danger'>[user] has induced sleep in [L] with [src]!</span>", \
|
||||
@@ -534,10 +536,10 @@ Congratulations! You are now trained for invasive xenobiology research!"}
|
||||
L.Sleeping(1200)
|
||||
log_combat(user, L, "put to sleep")
|
||||
else
|
||||
if(istype(L.get_item_by_slot(SLOT_HEAD), /obj/item/clothing/head/foilhat))
|
||||
to_chat(user, "<span class='warning'>The specimen's protective headgear is completely blocking our sleep inducement methods!</span>")
|
||||
L.visible_message("<span class='danger'>[user] tried to induce sleep in [L] with [src], but [L.p_their()] headgear completely protected [L.p_them()]!</span>", \
|
||||
"<span class='userdanger'>Any sense of drowsiness is quickly diminished as your headgear deflects the effects!</span>")
|
||||
if(L.anti_magic_check(FALSE, FALSE, TRUE, 0))
|
||||
to_chat(user, "<span class='warning'>The specimen's tinfoil protection is completely blocking our sleep inducement methods!</span>")
|
||||
L.visible_message("<span class='danger'>[user] tried to induce sleep in [L] with [src], but [L.p_their()] tinfoil completely protected [L.p_them()]!</span>", \
|
||||
"<span class='userdanger'>Any sense of drowsiness is quickly diminished as your tinfoil protection deflects the effects!</span>")
|
||||
return
|
||||
L.drowsyness += 1
|
||||
to_chat(user, "<span class='warning'>Sleep inducement works fully only on stunned specimens! </span>")
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
/obj/item/organ/heart/gland/examine(mob/user)
|
||||
. = ..()
|
||||
if(HAS_TRAIT(user, TRAIT_ABDUCTOR_SCIENTIST_TRAINING) || isobserver(user))
|
||||
if((user.mind && HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_SCIENTIST_TRAINING)) || isobserver(user))
|
||||
to_chat(user, "<span class='notice'>It is \a [true_name].</span>")
|
||||
|
||||
/obj/item/organ/heart/gland/proc/ownerCheck()
|
||||
@@ -48,19 +48,19 @@
|
||||
|
||||
/obj/item/organ/heart/gland/proc/mind_control(command, mob/living/user)
|
||||
if(!ownerCheck() || !mind_control_uses || active_mind_control)
|
||||
return
|
||||
return FALSE
|
||||
mind_control_uses--
|
||||
to_chat(owner, "<span class='userdanger'>You suddenly feel an irresistible compulsion to follow an order...</span>")
|
||||
to_chat(owner, "<span class='mind_control'>[command]</span>")
|
||||
active_mind_control = TRUE
|
||||
log_admin("[key_name(user)] sent an abductor mind control message to [key_name(owner)]: [command]")
|
||||
message_admins("[key_name(user)] sent an abductor mind control message to [key_name(owner)]: [command]")
|
||||
update_gland_hud()
|
||||
|
||||
addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration)
|
||||
|
||||
/obj/item/organ/heart/gland/proc/clear_mind_control()
|
||||
if(!ownerCheck() || !active_mind_control)
|
||||
return
|
||||
return FALSE
|
||||
to_chat(owner, "<span class='userdanger'>You feel the compulsion fade, and you completely forget about your previous orders.</span>")
|
||||
active_mind_control = FALSE
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(!HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING))
|
||||
if(!HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING) && !HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING))
|
||||
to_chat(user, "<span class='warning'>You start mashing alien buttons at random!</span>")
|
||||
if(do_after(user,100, target = src))
|
||||
TeleporterSend()
|
||||
@@ -178,8 +178,8 @@
|
||||
c.console = src
|
||||
|
||||
/obj/machinery/abductor/console/proc/AddSnapshot(mob/living/carbon/human/target)
|
||||
if(istype(target.get_item_by_slot(SLOT_HEAD), /obj/item/clothing/head/foilhat))
|
||||
say("Subject wearing specialized protective headgear, unable to get a proper scan!")
|
||||
if(target.anti_magic_check(FALSE, FALSE, TRUE, 0))
|
||||
say("Subject wearing specialized protective tinfoil gear, unable to get a proper scan!")
|
||||
return
|
||||
var/datum/icon_snapshot/entry = new
|
||||
entry.name = target.name
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
. = ..()
|
||||
|
||||
/obj/structure/blob/core/proc/generate_announcement()
|
||||
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/outbreak5.ogg')
|
||||
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", "outbreak5")
|
||||
|
||||
/obj/structure/blob/core/scannerreport()
|
||||
return "Directs the blob's expansion, gradually expands, and sustains nearby blob spores and blobbernauts."
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
to_chat(user, "<span class='notice'>Our muscles tense and strengthen.</span>")
|
||||
changeling.chem_recharge_slowdown += 0.5
|
||||
else
|
||||
REMOVE_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles")
|
||||
user.remove_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES)
|
||||
to_chat(user, "<span class='notice'>Our muscles relax.</span>")
|
||||
changeling.chem_recharge_slowdown -= 0.5
|
||||
if(stacks >= 20)
|
||||
@@ -36,12 +36,12 @@
|
||||
/obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user)
|
||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
while(active)
|
||||
ADD_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles")
|
||||
user.add_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
if(user.stat != CONSCIOUS || user.staminaloss >= 90)
|
||||
active = !active
|
||||
to_chat(user, "<span class='notice'>Our muscles relax without the energy to strengthen them.</span>")
|
||||
user.Knockdown(40)
|
||||
REMOVE_TRAIT(user, TRAIT_GOTTAGOFAST, "changeling_muscles")
|
||||
user.remove_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES)
|
||||
changeling.chem_recharge_slowdown -= 0.5
|
||||
break
|
||||
|
||||
|
||||
@@ -366,6 +366,8 @@
|
||||
break
|
||||
|
||||
if(!GLOB.ratvar_awakens)
|
||||
if(GLOB.clockwork_vitality <= 0)
|
||||
break
|
||||
GLOB.clockwork_vitality -= vitality_used
|
||||
|
||||
sleep(2)
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
/obj/item/clockwork/weapon/ratvarian_spear/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
. = ..()
|
||||
if(!QDELETED(target) && target.stat != DEAD && !target.anti_magic_check() && !is_servant_of_ratvar(target)) //we do bonus damage on attacks unless they're a servant, have a null rod, or are dead
|
||||
if(!QDELETED(target) && target.stat != DEAD && !target.anti_magic_check(chargecost = 0) && !is_servant_of_ratvar(target)) //we do bonus damage on attacks unless they're a servant, have a null rod, or are dead
|
||||
var/bonus_damage = bonus_burn //normally a total of 20 damage, 30 with ratvar
|
||||
if(issilicon(target))
|
||||
target.visible_message("<span class='warning'>[target] shudders violently at [src]'s touch!</span>", "<span class='userdanger'>ERROR: Temperature rising!</span>")
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
qdel(blaster)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/glasses/judicial_visor/item_action_slot_check(slot, mob/user)
|
||||
/obj/item/clothing/glasses/judicial_visor/item_action_slot_check(slot, mob/user, datum/action/A)
|
||||
if(slot != SLOT_GLASSES)
|
||||
return 0
|
||||
return ..()
|
||||
@@ -190,8 +190,8 @@
|
||||
for(var/mob/living/L in range(1, src))
|
||||
if(is_servant_of_ratvar(L))
|
||||
continue
|
||||
if(L.anti_magic_check())
|
||||
var/atom/I = L.anti_magic_check()
|
||||
var/atom/I = L.anti_magic_check()
|
||||
if(I)
|
||||
if(isitem(I))
|
||||
L.visible_message("<span class='warning'>Strange energy flows into [L]'s [I.name]!</span>", \
|
||||
"<span class='userdanger'>Your [I.name] shields you from [src]!</span>")
|
||||
|
||||
@@ -119,3 +119,33 @@
|
||||
var/datum/clockwork_scripture/create_object/construct/clockwork_marauder/CM = new()
|
||||
CM.recent_marauders--
|
||||
qdel(CM)
|
||||
|
||||
//Summon Neovgre: Summon a very powerful combat mech that explodes when destroyed for massive damage.
|
||||
/datum/clockwork_scripture/create_object/summon_arbiter
|
||||
descname = "Powerful Assault Mech"
|
||||
name = "Summon Neovgre, the Anima Bulwark"
|
||||
desc = "Calls forth the mighty Anima Bulwark, a weapon of unmatched power,\
|
||||
mech with superior defensive and offensive capabilities. It will \
|
||||
steadily regenerate HP and triple its regeneration speed while standing \
|
||||
on a clockwork tile. It will automatically draw power from nearby sigils of \
|
||||
transmission should the need arise. Its Arbiter laser cannon can decimate foes \
|
||||
from a range and is capable of smashing through any barrier presented to it. \
|
||||
Be warned, choosing to pilot Neovgre is a lifetime commitment, once you are \
|
||||
in you cannot leave and when it is destroyed it will explode catastrophically with you inside."
|
||||
invocations = list("By the strength of the alloy...!!", "...call forth the Arbiter!!")
|
||||
channel_time = 200 // This is a strong fucking weapon, 20 seconds channel time is getting off light I tell ya.
|
||||
power_cost = 75000 //75 KW
|
||||
usage_tip = "Neovgre is a powerful mech that will crush your enemies!"
|
||||
invokers_required = 5
|
||||
multiple_invokers_used = TRUE
|
||||
object_path = /obj/mecha/combat/neovgre
|
||||
tier = SCRIPTURE_APPLICATION
|
||||
primary_component = BELLIGERENT_EYE
|
||||
sort_priority = 2
|
||||
creator_message = "<span class='brass'>Neovgre, the Anima Bulwark towers over you... your enemies reckoning has come.</span>"
|
||||
|
||||
/datum/clockwork_scripture/create_object/summon_arbiter/check_special_requirements()
|
||||
if(GLOB.neovgre_exists)
|
||||
to_chat(invoker, "<span class='brass'>\"You've already got one...\"</span>")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
else
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(!L.anti_magic_check())
|
||||
if(!L.anti_magic_check(chargecost = 0))
|
||||
if(isrevenant(L))
|
||||
var/mob/living/simple_animal/revenant/R = L
|
||||
if(R.revealed)
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
|
||||
/obj/structure/destructible/clockwork/taunting_trail/proc/affect_mob(mob/living/L)
|
||||
if(istype(L) && !is_servant_of_ratvar(L))
|
||||
if(!L.anti_magic_check())
|
||||
if(!L.anti_magic_check(chargecost = 0))
|
||||
L.confused = min(L.confused + 15, 50)
|
||||
L.dizziness = min(L.dizziness + 15, 50)
|
||||
if(L.confused >= 25)
|
||||
|
||||
@@ -275,7 +275,7 @@
|
||||
desc = "A torn, dust-caked hood. Strange letters line the inside."
|
||||
flags_inv = HIDEFACE|HIDEHAIR|HIDEEARS
|
||||
flags_cover = HEADCOVERSEYES
|
||||
armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10)
|
||||
armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 20, "bomb" = 65, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10)
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT
|
||||
heat_protection = HEAD
|
||||
@@ -288,7 +288,7 @@
|
||||
item_state = "cultrobes"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
allowed = list(/obj/item/tome, /obj/item/melee/cultblade)
|
||||
armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10)
|
||||
armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 20, "bomb" = 65, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10)
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
cold_protection = CHEST|GROIN|LEGS|ARMS
|
||||
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
|
||||
|
||||
@@ -107,7 +107,7 @@ This file contains the cult dagger and rune list code
|
||||
if(!(A in summon_objective.summon_spots)) // Check again to make sure they didn't move
|
||||
to_chat(user, "<span class='cultlarge'>The Geometer can only be summoned where the veil is weak - in [english_list(summon_objective.summon_spots)]!</span>")
|
||||
return
|
||||
priority_announce("Figments from an eldritch god are being summoned by [user] into [A.map_name] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensional Affairs", 'sound/ai/spanomalies.ogg')
|
||||
priority_announce("Figments from an eldritch god are being summoned by [user] into [A.map_name] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensional Affairs", "spanomalies")
|
||||
for(var/B in spiral_range_turfs(1, user, 1))
|
||||
var/obj/structure/emergency_shield/sanguine/N = new(B)
|
||||
shields += N
|
||||
|
||||
@@ -237,7 +237,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
to_chat(M, "<span class='warning'>You need at least two invokers to convert [convertee]!</span>")
|
||||
log_game("Offer rune failed - tried conversion with one invoker")
|
||||
return 0
|
||||
if(convertee.anti_magic_check(TRUE, TRUE, FALSE, 0)) //Not chargecost because it can be spammed
|
||||
if(convertee.anti_magic_check(TRUE, TRUE, chargecost = 0)) //Not major because it can be spammed
|
||||
for(var/M in invokers)
|
||||
to_chat(M, "<span class='warning'>Something is shielding [convertee]'s mind!</span>")
|
||||
log_game("Offer rune failed - convertee had anti-magic")
|
||||
@@ -767,7 +767,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
set_light(6, 1, color)
|
||||
for(var/mob/living/L in viewers(T))
|
||||
if(!iscultist(L) && L.blood_volume)
|
||||
var/atom/I = L.anti_magic_check()
|
||||
var/atom/I = L.anti_magic_check(chargecost = 0)
|
||||
if(I)
|
||||
if(isitem(I))
|
||||
to_chat(L, "<span class='userdanger'>[I] suddenly burns hotly before returning to normal!</span>")
|
||||
@@ -797,7 +797,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
set_light(6, 1, color)
|
||||
for(var/mob/living/L in viewers(T))
|
||||
if(!iscultist(L) && L.blood_volume)
|
||||
if(L.anti_magic_check())
|
||||
if(L.anti_magic_check(chargecost = 0))
|
||||
continue
|
||||
L.take_overall_damage(tick_damage*multiplier, tick_damage*multiplier)
|
||||
if(is_servant_of_ratvar(L))
|
||||
|
||||
@@ -31,7 +31,6 @@ the new instance inside the host to be updated to the template's stats.
|
||||
var/browser_open = FALSE
|
||||
|
||||
var/mob/living/following_host
|
||||
var/datum/component/redirect/move_listener
|
||||
var/list/disease_instances
|
||||
var/list/hosts //this list is associative, affected_mob -> disease_instance
|
||||
var/datum/disease/advance/sentient_disease/disease_template
|
||||
@@ -261,16 +260,10 @@ the new instance inside the host to be updated to the template's stats.
|
||||
refresh_adaptation_menu()
|
||||
|
||||
/mob/camera/disease/proc/set_following(mob/living/L)
|
||||
if(following_host)
|
||||
UnregisterSignal(following_host, COMSIG_MOVABLE_MOVED)
|
||||
RegisterSignal(L, COMSIG_MOVABLE_MOVED, .proc/follow_mob)
|
||||
following_host = L
|
||||
if(!move_listener)
|
||||
move_listener = L.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/follow_mob)))
|
||||
else
|
||||
if(L)
|
||||
L.TakeComponent(move_listener)
|
||||
if(QDELING(move_listener))
|
||||
move_listener = null
|
||||
else
|
||||
QDEL_NULL(move_listener)
|
||||
follow_mob()
|
||||
|
||||
/mob/camera/disease/proc/follow_next(reverse = FALSE)
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
/mob/living/simple_animal/revenant/Initialize(mapload)
|
||||
. = ..()
|
||||
AddSpell(new /obj/effect/proc_holder/spell/targeted/night_vision/revenant(null))
|
||||
AddSpell(new /obj/effect/proc_holder/spell/targeted/revenant_transmit(null))
|
||||
AddSpell(new /obj/effect/proc_holder/spell/targeted/telepathy/revenant(null))
|
||||
AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/defile(null))
|
||||
AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/overload(null))
|
||||
AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/revenant/blight(null))
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
if(prob(10))
|
||||
to_chat(target, "You feel as if you are being watched.")
|
||||
return
|
||||
face_atom(target)
|
||||
draining = TRUE
|
||||
essence_drained += rand(15, 20)
|
||||
to_chat(src, "<span class='revennotice'>You search for the soul of [target].</span>")
|
||||
@@ -65,7 +66,7 @@
|
||||
if(target.anti_magic_check(FALSE, TRUE))
|
||||
to_chat(src, "<span class='revenminor'>Something's wrong! [target] seems to be resisting the siphoning, leaving you vulnerable!</span>")
|
||||
target.visible_message("<span class='warning'>[target] slumps onto the ground.</span>", \
|
||||
"<span class='revenwarning'>Violets lights, dancing in your vision, receding--</span>")
|
||||
"<span class='revenwarning'>Violet lights, dancing in your vision, receding--</span>")
|
||||
draining = FALSE
|
||||
return
|
||||
var/datum/beam/B = Beam(target,icon_state="drain_life",time=INFINITY)
|
||||
@@ -104,36 +105,16 @@
|
||||
action_background_icon_state = "bg_revenant"
|
||||
|
||||
//Transmit: the revemant's only direct way to communicate. Sends a single message silently to a single mob
|
||||
/obj/effect/proc_holder/spell/targeted/revenant_transmit
|
||||
name = "Transmit"
|
||||
desc = "Telepathically transmits a message to the target."
|
||||
/obj/effect/proc_holder/spell/targeted/telepathy/revenant
|
||||
name = "Revenant Transmit"
|
||||
panel = "Revenant Abilities"
|
||||
charge_max = 0
|
||||
clothes_req = 0
|
||||
range = 7
|
||||
include_user = 0
|
||||
action_icon = 'icons/mob/actions/actions_revenant.dmi'
|
||||
action_icon_state = "r_transmit"
|
||||
action_background_icon_state = "bg_revenant"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/revenant_transmit/cast(list/targets, mob/living/simple_animal/revenant/user = usr)
|
||||
for(var/mob/living/M in targets)
|
||||
var/msg = stripped_input(usr, "What do you wish to tell [M]?", null, "")
|
||||
if(!msg)
|
||||
charge_counter = charge_max
|
||||
return
|
||||
log_directed_talk(user, M, msg, LOG_SAY, "revenant whisper")
|
||||
to_chat(user, "<span class='revenboldnotice'>You transmit to [M]:</span> <span class='revennotice'>[msg]</span>")
|
||||
if(!M.anti_magic_check(FALSE, TRUE)) //hear no evil
|
||||
to_chat(M, "<span class='revenboldnotice'>You hear something behind you talking...</span> <span class='revennotice'>[msg]</span>")
|
||||
for(var/ded in GLOB.dead_mob_list)
|
||||
if(!isobserver(ded))
|
||||
continue
|
||||
var/follow_rev = FOLLOW_LINK(ded, user)
|
||||
var/follow_whispee = FOLLOW_LINK(ded, M)
|
||||
to_chat(ded, "[follow_rev] <span class='revenboldnotice'>[user] Revenant Transmit:</span> <span class='revennotice'>\"[msg]\" to</span> [follow_whispee] <span class='name'>[M]</span>")
|
||||
|
||||
|
||||
notice = "revennotice"
|
||||
boldnotice = "revenboldnotice"
|
||||
holy_check = TRUE
|
||||
tinfoil_check = FALSE
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/revenant
|
||||
clothes_req = 0
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
disease_flags = CURABLE
|
||||
permeability_mod = 1
|
||||
severity = DISEASE_SEVERITY_DANGEROUS
|
||||
var/finalstage = 0 //Because we're spawning off the cure in the final stage, we need to check if we've done the final stage's effects.
|
||||
var/datum/mood_event/revenant_blight/depression
|
||||
var/finalstage = FALSE //Because we're spawning off the cure in the final stage, we need to check if we've done the final stage's effects.
|
||||
var/depression = FALSE
|
||||
|
||||
/datum/disease/revblight/cure()
|
||||
if(affected_mob)
|
||||
@@ -44,12 +44,13 @@
|
||||
affected_mob.emote("pale")
|
||||
if(3)
|
||||
if(!depression)
|
||||
depression = SEND_SIGNAL(affected_mob, COMSIG_ADD_MOOD_EVENT, "rev_blight", /datum/mood_event/revenant_blight)
|
||||
SEND_SIGNAL(affected_mob, COMSIG_DECREASE_SANITY, 0.12, SANITY_CRAZY)
|
||||
SEND_SIGNAL(affected_mob, COMSIG_ADD_MOOD_EVENT, "rev_blight", /datum/mood_event/revenant_blight)
|
||||
depression = TRUE
|
||||
SEND_SIGNAL(affected_mob, COMSIG_MODIFY_SANITY, -0.12, SANITY_CRAZY)
|
||||
if(prob(10))
|
||||
affected_mob.emote(pick("pale","shiver"))
|
||||
if(4)
|
||||
SEND_SIGNAL(affected_mob, COMSIG_DECREASE_SANITY, 0.18, SANITY_CRAZY)
|
||||
SEND_SIGNAL(affected_mob, COMSIG_MODIFY_SANITY, -0.18, SANITY_CRAZY)
|
||||
if(prob(15))
|
||||
affected_mob.emote(pick("pale","shiver","cries"))
|
||||
if(5)
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
melee_damage_upper = 30
|
||||
see_in_dark = 8
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
var/boost = 0
|
||||
bloodcrawl = BLOODCRAWL_EAT
|
||||
var/playstyle_string = "<span class='big bold'>You are a slaughter demon,</span><B> a terrible creature from another realm. You have a single desire: To kill. \
|
||||
You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and disappearing from the station at will. \
|
||||
@@ -54,24 +53,18 @@
|
||||
if(istype(loc, /obj/effect/dummy/phased_mob/slaughter))
|
||||
bloodspell.phased = TRUE
|
||||
|
||||
/mob/living/simple_animal/slaughter/Life()
|
||||
..()
|
||||
if(boost<world.time)
|
||||
speed = 1
|
||||
else
|
||||
speed = 0
|
||||
|
||||
/obj/effect/decal/cleanable/blood/innards
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
name = "pile of viscera"
|
||||
desc = "A repulsive pile of guts and gore."
|
||||
gender = NEUTER
|
||||
icon_state = "innards"
|
||||
random_icon_states = null
|
||||
|
||||
/mob/living/simple_animal/slaughter/phasein()
|
||||
. = ..()
|
||||
speed = 0
|
||||
boost = world.time + 60
|
||||
add_movespeed_modifier(MOVESPEED_ID_SLAUGHTER, update=TRUE, priority=100, multiplicative_slowdown=-1)
|
||||
addtimer(CALLBACK(src, .proc/remove_movespeed_modifier, MOVESPEED_ID_SLAUGHTER, TRUE), 6 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
|
||||
|
||||
|
||||
//The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl
|
||||
|
||||
@@ -304,7 +304,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
|
||||
sleep(30)
|
||||
if(!owner || QDELETED(owner))
|
||||
return
|
||||
priority_announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", 'sound/ai/aimalf.ogg')
|
||||
priority_announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", "aimalf")
|
||||
set_security_level("delta")
|
||||
var/obj/machinery/doomsday_device/DOOM = new(owner_AI)
|
||||
owner_AI.nuking = TRUE
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
/obj/singularity/wizard/attack_tk(mob/user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
GET_COMPONENT_FROM(insaneinthemembrane, /datum/component/mood, C)
|
||||
var/datum/component/mood/insaneinthemembrane = C.GetComponent(/datum/component/mood)
|
||||
if(insaneinthemembrane.sanity < 15)
|
||||
return //they've already seen it and are about to die, or are just too insane to care
|
||||
to_chat(C, "<span class='userdanger'>OH GOD! NONE OF IT IS REAL! NONE OF IT IS REEEEEEEEEEEEEEEEEEEEEEEEAL!</span>")
|
||||
@@ -324,14 +324,11 @@
|
||||
cooldown = world.time + cooldown_time
|
||||
|
||||
/obj/item/voodoo/proc/update_targets()
|
||||
possible = list()
|
||||
LAZYINITLIST(possible)
|
||||
if(!voodoo_link)
|
||||
return
|
||||
var/list/prints = voodoo_link.return_fingerprints()
|
||||
if(!length(prints))
|
||||
return FALSE
|
||||
for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
|
||||
if(prints[md5(H.dna.uni_identity)])
|
||||
if(md5(H.dna.uni_identity) in voodoo_link.fingerprints)
|
||||
possible |= H
|
||||
|
||||
/obj/item/voodoo/proc/GiveHint(mob/victim,force=0)
|
||||
|
||||
@@ -238,6 +238,7 @@
|
||||
T.stop_sound_channel(CHANNEL_HEARTBEAT)
|
||||
T.invisibility = INVISIBILITY_ABSTRACT
|
||||
T.dust_animation()
|
||||
QDEL_IN(T, 5)
|
||||
var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src)
|
||||
S.status_flags |= GODMODE //So they won't die inside the stone somehow
|
||||
S.canmove = FALSE//Can't move out of the soul stone
|
||||
|
||||
@@ -201,8 +201,10 @@
|
||||
/obj/item/assembly/flash/cyborg
|
||||
|
||||
/obj/item/assembly/flash/cyborg/attack(mob/living/M, mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
new /obj/effect/temp_visual/borgflash(get_turf(src))
|
||||
if(. && !CONFIG_GET(flag/disable_borg_flash_knockdown) && iscarbon(M) && !M.resting && !M.get_eye_protection())
|
||||
M.Knockdown(80)
|
||||
|
||||
/obj/item/assembly/flash/cyborg/attack_self(mob/user)
|
||||
..()
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
var/maxlength = 8
|
||||
var/list/obj/effect/beam/i_beam/beams
|
||||
var/olddir = 0
|
||||
var/datum/component/redirect/listener
|
||||
var/turf/listeningTo
|
||||
var/hearing_range = 3
|
||||
|
||||
/obj/item/assembly/infra/Initialize()
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
/obj/item/assembly/infra/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
QDEL_NULL(listener)
|
||||
listeningTo = null
|
||||
QDEL_LIST(beams)
|
||||
. = ..()
|
||||
|
||||
@@ -163,8 +163,12 @@
|
||||
next_activate = world.time + 30
|
||||
|
||||
/obj/item/assembly/infra/proc/switchListener(turf/newloc)
|
||||
QDEL_NULL(listener)
|
||||
listener = newloc.AddComponent(/datum/component/redirect, list(COMSIG_ATOM_EXITED = CALLBACK(src, .proc/check_exit)))
|
||||
if(listeningTo == newloc)
|
||||
return
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, COMSIG_ATOM_EXITED)
|
||||
RegisterSignal(newloc, COMSIG_ATOM_EXITED, .proc/check_exit)
|
||||
listeningTo = newloc
|
||||
|
||||
/obj/item/assembly/infra/proc/check_exit(datum/source, atom/movable/offender)
|
||||
if(QDELETED(src))
|
||||
|
||||
@@ -210,9 +210,9 @@
|
||||
|
||||
return cached_results["fire"] ? REACTING : NO_REACTION
|
||||
|
||||
//fusion: a terrible idea that was fun but broken. Now reworked to be less broken and more interesting. Again (and again, and again)
|
||||
//fusion: a terrible idea that was fun but broken. Now reworked to be less broken and more interesting. Again (and again, and again). Again!
|
||||
//Fusion Rework Counter: Please increment this if you make a major overhaul to this system again.
|
||||
//5 reworks
|
||||
//6 reworks
|
||||
|
||||
/datum/gas_reaction/fusion
|
||||
exclude = FALSE
|
||||
@@ -220,100 +220,79 @@
|
||||
name = "Plasmic Fusion"
|
||||
id = "fusion"
|
||||
|
||||
//Since fusion isn't really intended to happen in successive chains, the requirements are very high
|
||||
/datum/gas_reaction/fusion/init_reqs()
|
||||
min_requirements = list(
|
||||
"TEMP" = FUSION_TEMPERATURE_THRESHOLD,
|
||||
"ENER" = FUSION_ENERGY_THRESHOLD,
|
||||
/datum/gas/tritium = FUSION_TRITIUM_MOLES_USED,
|
||||
/datum/gas/plasma = FUSION_MOLE_THRESHOLD,
|
||||
/datum/gas/tritium = FUSION_MOLE_THRESHOLD
|
||||
)
|
||||
/datum/gas/carbon_dioxide = FUSION_MOLE_THRESHOLD)
|
||||
|
||||
/datum/gas_reaction/fusion/react(datum/gas_mixture/air, datum/holder)
|
||||
var/list/cached_gases = air.gases
|
||||
var/temperature = air.temperature
|
||||
if(!air.analyzer_results)
|
||||
air.analyzer_results = new
|
||||
var/list/cached_scan_results = air.analyzer_results
|
||||
var/turf/open/location
|
||||
if (istype(holder,/datum/pipeline)) //Find the tile the reaction is occuring on, or a random part of the network if it's a pipenet.
|
||||
var/datum/pipeline/fusion_pipenet = holder
|
||||
location = get_turf(pick(fusion_pipenet.members))
|
||||
else
|
||||
location = get_turf(holder)
|
||||
|
||||
if(!air.analyzer_results)
|
||||
air.analyzer_results = new
|
||||
var/list/cached_scan_results = air.analyzer_results
|
||||
var/old_heat_capacity = air.heat_capacity()
|
||||
var/reaction_energy = 0
|
||||
|
||||
var/mediation = FUSION_MEDIATION_FACTOR*(air.heat_capacity()-(cached_gases[/datum/gas/plasma]*GLOB.meta_gas_specific_heats[/datum/gas/plasma]))/(air.total_moles()-cached_gases[/datum/gas/plasma]) //This is the average specific heat of the mixture,not including plasma.
|
||||
|
||||
var/gases_fused = air.total_moles() - cached_gases[/datum/gas/plasma]
|
||||
var/plasma_differential = (cached_gases[/datum/gas/plasma] - gases_fused) / air.total_moles()
|
||||
var/reaction_efficiency = FUSION_EFFICIENCY_BASE ** -((plasma_differential ** 2) / FUSION_EFFICIENCY_DIVISOR) //https://www.desmos.com/calculator/6jjx3vdrvx
|
||||
|
||||
var/reaction_energy = 0 //Reaction energy can be negative or positive, for both exothermic and endothermic reactions.
|
||||
var/initial_plasma = cached_gases[/datum/gas/plasma]
|
||||
var/initial_carbon = cached_gases[/datum/gas/carbon_dioxide]
|
||||
var/scale_factor = (air.volume)/(PI) //We scale it down by volume/Pi because for fusion conditions, moles roughly = 2*volume, but we want it to be based off something constant between reactions.
|
||||
var/toroidal_size = (2*PI)+TORADIANS(arctan((air.volume-TOROID_VOLUME_BREAKEVEN)/TOROID_VOLUME_BREAKEVEN)) //The size of the phase space hypertorus
|
||||
var/gas_power = 0
|
||||
var/list/gas_fusion_powers = GLOB.meta_gas_fusions
|
||||
for (var/gas_id in cached_gases)
|
||||
gas_power += reaction_efficiency * (GLOB.meta_gas_fusions[gas_id]*cached_gases[gas_id])
|
||||
gas_power += (gas_fusion_powers[gas_id]*cached_gases[gas_id])
|
||||
var/instability = MODULUS((gas_power*INSTABILITY_GAS_POWER_FACTOR)**2,toroidal_size) //Instability effects how chaotic the behavior of the reaction is
|
||||
cached_scan_results[id] = instability//used for analyzer feedback
|
||||
|
||||
var/power_ratio = gas_power/mediation
|
||||
cached_scan_results[id] = power_ratio //used for analyzer feedback
|
||||
var/plasma = (initial_plasma-FUSION_MOLE_THRESHOLD)/(scale_factor) //We have to scale the amounts of carbon and plasma down a significant amount in order to show the chaotic dynamics we want
|
||||
var/carbon = (initial_carbon-FUSION_MOLE_THRESHOLD)/(scale_factor) //We also subtract out the threshold amount to make it harder for fusion to burn itself out.
|
||||
|
||||
for (var/gas_id in cached_gases) //and now we fuse
|
||||
cached_gases[gas_id] = 0
|
||||
//The reaction is a specific form of the Kicked Rotator system, which displays chaotic behavior and can be used to model particle interactions.
|
||||
plasma = MODULUS(plasma - (instability*sin(TODEGREES(carbon))), toroidal_size)
|
||||
carbon = MODULUS(carbon - plasma, toroidal_size)
|
||||
|
||||
var/radiation_power = (FUSION_RADIATION_FACTOR * power_ratio) / (power_ratio + FUSION_RADIATION_CONSTANT) //https://www.desmos.com/calculator/4i1f296phl
|
||||
var/zap_power = ((FUSION_ZAP_POWER_ASYMPTOTE * power_ratio) / (power_ratio + FUSION_ZAP_POWER_CONSTANT)) + FUSION_ZAP_POWER_BASE //https://www.desmos.com/calculator/n0zkdpxnrr
|
||||
var/do_explosion = FALSE
|
||||
var/zap_range //these ones are set later
|
||||
var/fusion_prepare_to_die_edition_rng
|
||||
|
||||
if (power_ratio > FUSION_SUPER_TIER_THRESHOLD) //power ratio 50+: SUPER TIER. The gases become so energized that they fuse into a ton of tritium, which is pretty nice! Until you consider the fact that everything just exploded, the canister is probably going to break and you're irradiated.
|
||||
reaction_energy += gases_fused * FUSION_RELEASE_ENERGY_SUPER * (power_ratio / FUSION_ENERGY_DIVISOR_SUPER)
|
||||
cached_gases[/datum/gas/tritium] += gases_fused * FUSION_GAS_CREATION_FACTOR_TRITIUM //60% of the gas is converted to energy, 40% to trit
|
||||
fusion_prepare_to_die_edition_rng = 100 //Wait a minute..
|
||||
do_explosion = TRUE
|
||||
zap_range = FUSION_ZAP_RANGE_SUPER
|
||||
cached_gases[/datum/gas/plasma] = plasma*scale_factor + FUSION_MOLE_THRESHOLD //Scales the gases back up
|
||||
cached_gases[/datum/gas/carbon_dioxide] = carbon*scale_factor + FUSION_MOLE_THRESHOLD
|
||||
var/delta_plasma = initial_plasma - cached_gases[/datum/gas/plasma]
|
||||
|
||||
else if (power_ratio > FUSION_HIGH_TIER_THRESHOLD) //power ratio 20-50; High tier. The reaction is so energized that it fuses into a small amount of stimulum, and some pluoxium. Very dangerous, but super cool and super useful.
|
||||
reaction_energy += gases_fused * FUSION_RELEASE_ENERGY_HIGH * (power_ratio / FUSION_ENERGY_DIVISOR_HIGH)
|
||||
cached_gases[/datum/gas/stimulum] += gases_fused * FUSION_GAS_CREATION_FACTOR_STIM //40% of the gas is converted to energy, 60% to stim and pluox
|
||||
cached_gases[/datum/gas/pluoxium] += gases_fused * FUSION_GAS_CREATION_FACTOR_PLUOX
|
||||
fusion_prepare_to_die_edition_rng = power_ratio //Now we're getting into dangerous territory
|
||||
do_explosion = TRUE
|
||||
zap_range = FUSION_ZAP_RANGE_HIGH
|
||||
|
||||
else if (power_ratio > FUSION_MID_TIER_THRESHOLD) //power_ratio 5 to 20; Mediation is overpowered, fusion reaction starts to break down.
|
||||
reaction_energy += gases_fused * FUSION_RELEASE_ENERGY_MID * (power_ratio / FUSION_ENERGY_DIVISOR_MID)
|
||||
cached_gases[/datum/gas/nitryl] += gases_fused * FUSION_GAS_CREATION_FACTOR_NITRYL //20% of the gas is converted to energy, 80% to nitryl and N2O
|
||||
cached_gases[/datum/gas/nitrous_oxide] += gases_fused * FUSION_GAS_CREATION_FACTOR_N2O
|
||||
fusion_prepare_to_die_edition_rng = power_ratio * FUSION_MID_TIER_RAD_PROB_FACTOR //Still unlikely, but don't stand next to the reaction unprotected
|
||||
zap_range = FUSION_ZAP_RANGE_MID
|
||||
|
||||
else //power ratio 0 to 5; Gas power is overpowered. Fusion isn't nearly as powerful.
|
||||
reaction_energy += gases_fused * FUSION_RELEASE_ENERGY_LOW * (power_ratio / FUSION_ENERGY_DIVISOR_LOW)
|
||||
cached_gases[/datum/gas/bz] += gases_fused * FUSION_GAS_CREATION_FACTOR_BZ //10% of the gas is converted to energy, 90% to BZ and CO2
|
||||
cached_gases[/datum/gas/carbon_dioxide] += gases_fused * FUSION_GAS_CREATION_FACTOR_CO2
|
||||
fusion_prepare_to_die_edition_rng = power_ratio * FUSION_LOW_TIER_RAD_PROB_FACTOR //Low, but still something to look out for
|
||||
zap_range = FUSION_ZAP_RANGE_LOW
|
||||
|
||||
//All the deadly consequences of fusion, consolidated for your viewing pleasure
|
||||
if (location)
|
||||
if(prob(fusion_prepare_to_die_edition_rng)) //Some.. permanent effects
|
||||
if(do_explosion)
|
||||
explosion(location, 0, 0, 5, power_ratio, TRUE, TRUE) //large shockwave, the actual radius is quite small - people will recognize that you're doing fusion
|
||||
radiation_pulse(location, radiation_power) //You mean causing a super-tier fusion reaction in the halls is a bad idea?
|
||||
SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, 30000)//The science is cool though.
|
||||
playsound(location, 'sound/effects/supermatter.ogg', 100, 0)
|
||||
else
|
||||
playsound(location, 'sound/effects/phasein.ogg', 75, 0)
|
||||
//These will always happen, so be prepared
|
||||
tesla_zap(location, zap_range, zap_power, TESLA_FUSION_FLAGS) //larpers beware
|
||||
location.fire_nuclear_particles(power_ratio) //see code/modules/projectile/energy/nuclear_particle.dm
|
||||
reaction_energy += delta_plasma*PLASMA_BINDING_ENERGY //Energy is gained or lost corresponding to the creation or destruction of mass.
|
||||
if(instability < FUSION_INSTABILITY_ENDOTHERMALITY)
|
||||
reaction_energy = max(reaction_energy,0) //Stable reactions don't end up endothermic.
|
||||
else if (reaction_energy < 0)
|
||||
reaction_energy *= (instability-FUSION_INSTABILITY_ENDOTHERMALITY)**0.5
|
||||
|
||||
if(air.thermal_energy() + reaction_energy < 0) //No using energy that doesn't exist.
|
||||
cached_gases[/datum/gas/plasma] = initial_plasma
|
||||
cached_gases[/datum/gas/carbon_dioxide] = initial_carbon
|
||||
return NO_REACTION
|
||||
cached_gases[/datum/gas/tritium] -= FUSION_TRITIUM_MOLES_USED
|
||||
//The decay of the tritium and the reaction's energy produces waste gases, different ones depending on whether the reaction is endo or exothermic
|
||||
if(reaction_energy > 0)
|
||||
cached_gases[/datum/gas/oxygen] += FUSION_TRITIUM_MOLES_USED*(reaction_energy*FUSION_TRITIUM_CONVERSION_COEFFICIENT)
|
||||
cached_gases[/datum/gas/nitrous_oxide] += FUSION_TRITIUM_MOLES_USED*(reaction_energy*FUSION_TRITIUM_CONVERSION_COEFFICIENT)
|
||||
else
|
||||
cached_gases[/datum/gas/bz] += FUSION_TRITIUM_MOLES_USED*(reaction_energy*-FUSION_TRITIUM_CONVERSION_COEFFICIENT)
|
||||
cached_gases[/datum/gas/nitryl] += FUSION_TRITIUM_MOLES_USED*(reaction_energy*-FUSION_TRITIUM_CONVERSION_COEFFICIENT)
|
||||
|
||||
if(reaction_energy)
|
||||
if(location)
|
||||
var/particle_chance = ((PARTICLE_CHANCE_CONSTANT)/(reaction_energy-PARTICLE_CHANCE_CONSTANT)) + 1//Asymptopically approaches 100% as the energy of the reaction goes up.
|
||||
if(prob(PERCENT(particle_chance)))
|
||||
location.fire_nuclear_particle()
|
||||
var/rad_power = max((FUSION_RAD_COEFFICIENT/instability) + FUSION_RAD_MAX,0)
|
||||
radiation_pulse(location,rad_power)
|
||||
|
||||
var/new_heat_capacity = air.heat_capacity()
|
||||
if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
|
||||
air.temperature = max(((temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB)
|
||||
air.temperature = CLAMP(((air.temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB,INFINITY)
|
||||
return REACTING
|
||||
|
||||
/datum/gas_reaction/nitrylformation //The formation of nitryl. Endothermic. Requires N2O as a catalyst.
|
||||
|
||||
@@ -587,3 +587,57 @@
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
suit = /obj/item/clothing/suit/armor/vest
|
||||
glasses = /obj/item/clothing/glasses/sunglasses/reagent
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight
|
||||
name = "odd cryogenics pod"
|
||||
desc = "A humming cryo pod. You can barely recognise a faint glow underneath the built up ice. The machine is attempting to wake up its occupant."
|
||||
mob_name = "a displaced knight from another dimension"
|
||||
icon = 'icons/obj/machines/sleeper.dmi'
|
||||
icon_state = "sleeper"
|
||||
roundstart = FALSE
|
||||
id_job = "Knight"
|
||||
job_description = "Cydonian Knight"
|
||||
death = FALSE
|
||||
random = TRUE
|
||||
outfit = /datum/outfit/lavaknight
|
||||
mob_species = /datum/species/human
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou are a knight who conveniently has some form of retrograde amnesia. \
|
||||
You cannot remember where you came from. However, a few things remain burnt into your mind, most prominently a vow to never harm another sapient being under any circumstances unless it is hellbent on ending your life. \
|
||||
Remember: hostile creatures and such are fair game for attacking, but <span class='danger'>under no circumstances are you to attack anything capable of thought and/or speech</span> unless it has made it its life's calling to chase you to the ends of the earth."
|
||||
assignedrole = "Cydonian Knight"
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight/special(mob/living/new_spawn)
|
||||
if(ishuman(new_spawn))
|
||||
var/mob/living/carbon/human/H = new_spawn
|
||||
H.dna.features["mam_ears"] = "Cat, Big" //cat people
|
||||
H.dna.features["mcolor"] = H.hair_color
|
||||
H.update_body()
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight/Destroy()
|
||||
new/obj/structure/showcase/machinery/oldpod/used(drop_location())
|
||||
return ..()
|
||||
|
||||
/datum/outfit/lavaknight
|
||||
name = "Cydonian Knight"
|
||||
uniform = /obj/item/clothing/under/assistantformal
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
r_pocket = /obj/item/melee/transforming/energy/sword/cx
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/lavaknight
|
||||
suit_store = /obj/item/tank/internals/oxygen
|
||||
id = /obj/item/card/id/knight/blue
|
||||
|
||||
/obj/effect/mob_spawn/human/lavaknight/captain
|
||||
name = "odd gilded cryogenics pod"
|
||||
desc = "A humming cryo pod that appears to be gilded. You can barely recognise a faint glow underneath the built up ice. The machine is attempting to wake up its occupant."
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou are a knight who conveniently has some form of retrograde amnesia. \
|
||||
You cannot remember where you came from. However, a few things remain burnt into your mind, most prominently a vow to never harm another sapient being under any circumstances unless it is hellbent on ending your life. \
|
||||
Remember: hostile creatures and such are fair game for attacking, but <span class='danger'>under no circumstances are you to attack anything capable of thought and/or speech</span> unless it has made it its life's calling to chase you to the ends of the earth. \
|
||||
You feel a natural instict to lead, and as such, you should strive to lead your comrades to safety, and hopefully home. You also feel a burning determination to uphold your vow, as well as your fellow comrade's."
|
||||
outfit = /datum/outfit/lavaknight/captain
|
||||
id_job = "Knight Captain"
|
||||
|
||||
/datum/outfit/lavaknight/captain
|
||||
name ="Cydonian Knight Captain"
|
||||
l_pocket = /obj/item/twohanded/dualsaber/hypereutactic
|
||||
id = /obj/item/card/id/knight/captain
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
// Paper work done correctly
|
||||
|
||||
/datum/export/paperwork_correct
|
||||
cost = 150
|
||||
cost = 120 // finicky number 20 x 120 = 2400 per crate
|
||||
k_elasticity = 0
|
||||
unit_name = "correct paperwork"
|
||||
export_types = list(/obj/item/folder/paperwork_correct)
|
||||
|
||||
@@ -35,4 +35,4 @@
|
||||
A.flags_1 |= ADMIN_SPAWNED_1
|
||||
else
|
||||
for(var/item in contains)
|
||||
new item(C)
|
||||
new item(C)
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
/datum/supply_pack/security/armory/mindshield
|
||||
name = "Mindshield Implants Crate"
|
||||
desc = "Prevent against radical thoughts with three Mindshield implants. Requires Armory access to open."
|
||||
cost = 4000
|
||||
cost = 3000 //Lowered untill cargo rework MK II is done
|
||||
contains = list(/obj/item/storage/lockbox/loyalty)
|
||||
crate_name = "mindshield implant crate"
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
/datum/supply_pack/security/armory/swat
|
||||
name = "SWAT Crate"
|
||||
desc = "Contains two fullbody sets of tough, fireproof, pressurized suits designed in a joint effort by IS-ERI and Nanotrasen. Each set contains a suit, helmet, mask, combat belt, and combat gloves. Requires Armory access to open."
|
||||
cost = 6750
|
||||
cost = 6000
|
||||
contains = list(/obj/item/clothing/head/helmet/swat/nanotrasen,
|
||||
/obj/item/clothing/head/helmet/swat/nanotrasen,
|
||||
/obj/item/clothing/suit/space/swat,
|
||||
@@ -199,7 +199,7 @@
|
||||
/datum/supply_pack/security/armory/woodstock
|
||||
name = "Classic WoodStock Shotguns Crate"
|
||||
desc = "Contains three rustic, pumpaction shotguns. Requires Armory access to open."
|
||||
cost = 3500
|
||||
cost = 3000
|
||||
contains = list(/obj/item/gun/ballistic/shotgun,
|
||||
/obj/item/gun/ballistic/shotgun,
|
||||
/obj/item/gun/ballistic/shotgun)
|
||||
@@ -208,7 +208,7 @@
|
||||
/datum/supply_pack/security/armory/wt550
|
||||
name = "WT-550 Semi-Auto Rifle Crate"
|
||||
desc = "Contains two high-powered, semiautomatic rifles chambered in 4.6x30mm. Requires Armory access to open."
|
||||
cost = 3250
|
||||
cost = 2550
|
||||
contains = list(/obj/item/gun/ballistic/automatic/wt550,
|
||||
/obj/item/gun/ballistic/automatic/wt550)
|
||||
crate_name = "auto rifle crate"
|
||||
@@ -216,7 +216,7 @@
|
||||
/datum/supply_pack/security/armory/wt550ammo
|
||||
name = "WT-550 Semi-Auto SMG Ammo Crate"
|
||||
desc = "Contains four 20-round magazines for the WT-550 Semi-Auto SMG. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
||||
cost = 2750
|
||||
cost = 1750
|
||||
contains = list(/obj/item/ammo_box/magazine/wt550m9,
|
||||
/obj/item/ammo_box/magazine/wt550m9,
|
||||
/obj/item/ammo_box/magazine/wt550m9,
|
||||
@@ -226,7 +226,7 @@
|
||||
/datum/supply_pack/security/armory/wt550ammo_nonlethal // Takes around 12 shots to stun crit someone
|
||||
name = "WT-550 Semi-Auto SMG Non-Lethal Ammo Crate"
|
||||
desc = "Contains four 20-round magazines for the WT-550 Semi-Auto SMG. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
||||
cost = 1200
|
||||
cost = 1000
|
||||
contains = list(/obj/item/ammo_box/magazine/wt550m9/wtrubber,
|
||||
/obj/item/ammo_box/magazine/wt550m9/wtrubber,
|
||||
/obj/item/ammo_box/magazine/wt550m9/wtrubber,
|
||||
@@ -236,7 +236,7 @@
|
||||
/datum/supply_pack/security/armory/wt550ammo_special
|
||||
name = "WT-550 Semi-Auto SMG Special Ammo Crate"
|
||||
desc = "Contains 2 20-round Armour Piercing and Incendiary magazines for the WT-550 Semi-Auto SMG. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
||||
cost = 3500
|
||||
cost = 3000
|
||||
contains = list(/obj/item/ammo_box/magazine/wt550m9/wtap,
|
||||
/obj/item/ammo_box/magazine/wt550m9/wtap,
|
||||
/obj/item/ammo_box/magazine/wt550m9/wtic,
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
/datum/supply_pack/emergency/vehicle
|
||||
name = "Biker Gang Kit" //TUNNEL SNAKES OWN THIS TOWN
|
||||
desc = "TUNNEL SNAKES OWN THIS TOWN. Contains an unbranded All Terrain Vehicle, and a complete gang outfit -- consists of black gloves, a menacing skull bandanna, and a SWEET leather overcoat!"
|
||||
cost = 2800
|
||||
cost = 2500
|
||||
contraband = TRUE
|
||||
contains = list(/obj/vehicle/ridden/atv,
|
||||
/obj/item/key,
|
||||
@@ -26,7 +26,7 @@
|
||||
/datum/supply_pack/emergency/equipment
|
||||
name = "Emergency Bot/Internals Crate"
|
||||
desc = "Explosions got you down? These supplies are guaranteed to patch up holes, in stations and people alike! Comes with two floorbots, two medbots, five oxygen masks and five small oxygen tanks."
|
||||
cost = 3750
|
||||
cost = 2750
|
||||
contains = list(/mob/living/simple_animal/bot/floorbot,
|
||||
/mob/living/simple_animal/bot/floorbot,
|
||||
/mob/living/simple_animal/bot/medbot,
|
||||
@@ -132,7 +132,7 @@
|
||||
/datum/supply_pack/emergency/metalfoam
|
||||
name = "Metal Foam Grenade Crate"
|
||||
desc = "Seal up those pesky hull breaches with 14 Metal Foam Grenades."
|
||||
cost = 2000
|
||||
cost = 1500
|
||||
contains = list(/obj/item/storage/box/metalfoam,
|
||||
/obj/item/storage/box/metalfoam)
|
||||
crate_name = "metal foam grenade crate"
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
/datum/supply_pack/engineering/engihardsuit
|
||||
name = "Engineering Hardsuit"
|
||||
desc = "Poly 'Who stole all the hardsuits!' Well now you can get more hardsuits if needed! NOTE ONE HARDSUIT IS IN THIS CRATE, as well as one air tank and mask!"
|
||||
cost = 2750
|
||||
cost = 2250
|
||||
contains = list(/obj/item/tank/internals/air,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/suit/space/hardsuit/engine)
|
||||
@@ -84,7 +84,7 @@
|
||||
/datum/supply_pack/engineering/powergamermitts
|
||||
name = "Insulated Gloves Crate"
|
||||
desc = "The backbone of modern society. Barely ever ordered for actual engineering. Contains three insulated gloves."
|
||||
cost = 2750 //Made of pure-grade bullshittinium
|
||||
cost = 2300 //Made of pure-grade bullshittinium
|
||||
contains = list(/obj/item/clothing/gloves/color/yellow,
|
||||
/obj/item/clothing/gloves/color/yellow,
|
||||
/obj/item/clothing/gloves/color/yellow)
|
||||
@@ -121,6 +121,18 @@
|
||||
crate_name = "power cell crate"
|
||||
crate_type = /obj/structure/closet/crate/engineering/electrical
|
||||
|
||||
|
||||
/datum/supply_pack/engineering/siezedpower
|
||||
name = "Siezed Power Cell Crate"
|
||||
desc = "We took the means of power! Contains three high-voltage plus power cells."
|
||||
cost = 1300
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/stock_parts/cell/high/plus,
|
||||
/obj/item/stock_parts/cell/high/plus,
|
||||
/obj/item/stock_parts/cell/high/plus)
|
||||
crate_name = "siezed crate"
|
||||
crate_type = /obj/structure/closet/crate/engineering/electrical
|
||||
|
||||
/datum/supply_pack/engineering/shuttle_engine
|
||||
name = "Shuttle Engine Crate"
|
||||
desc = "Through advanced bluespace-shenanigans, our engineers have managed to fit an entire shuttle engine into one tiny little crate. Requires CE access to open."
|
||||
@@ -129,7 +141,22 @@
|
||||
contains = list(/obj/structure/shuttle/engine/propulsion/burst/cargo)
|
||||
crate_name = "shuttle engine crate"
|
||||
crate_type = /obj/structure/closet/crate/secure/engineering
|
||||
special = TRUE
|
||||
|
||||
/datum/supply_pack/engineering/siezedproduction
|
||||
name = "The Means of Production"
|
||||
desc = "We will win for we have took over the production! S five metal sheets, five wire, three matter bins, one manipulater and one sheet of glass."
|
||||
cost = 1500
|
||||
contraband = TRUE
|
||||
contains = list(/obj/item/stock_parts/cell/high/plus,
|
||||
/obj/item/circuitboard/machine/autolathe,
|
||||
/obj/item/stack/cable_coil/random/five,
|
||||
/obj/item/stack/sheet/metal/five,
|
||||
/obj/item/stock_parts/matter_bin,
|
||||
/obj/item/stock_parts/matter_bin,
|
||||
/obj/item/stock_parts/matter_bin,
|
||||
/obj/item/stock_parts/manipulator,
|
||||
/obj/item/stack/sheet/glass,)
|
||||
crate_name = "siezed crate"
|
||||
|
||||
/datum/supply_pack/engineering/tools
|
||||
name = "Toolbox Crate"
|
||||
@@ -183,7 +210,6 @@
|
||||
)
|
||||
crate_name= "dna samplers crate"
|
||||
|
||||
|
||||
/datum/supply_pack/engineering/shield_sat
|
||||
name = "Shield Generator Satellite"
|
||||
desc = "Protect the very existence of this station with these Anti-Meteor defenses. Contains three Shield Generator Satellites."
|
||||
|
||||
@@ -30,17 +30,31 @@
|
||||
|
||||
/datum/supply_pack/medical/bloodpacks
|
||||
name = "Blood Pack Variety Crate"
|
||||
desc = "Contains eight different blood packs for reintroducing blood to patients."
|
||||
desc = "Contains ten different blood packs for reintroducing blood to patients."
|
||||
cost = 3000
|
||||
contains = list(/obj/item/reagent_containers/blood,
|
||||
/obj/item/reagent_containers/blood,
|
||||
contains = list(/obj/item/reagent_containers/blood/random,
|
||||
/obj/item/reagent_containers/blood/random,
|
||||
/obj/item/reagent_containers/blood/APlus,
|
||||
/obj/item/reagent_containers/blood/AMinus,
|
||||
/obj/item/reagent_containers/blood/BPlus,
|
||||
/obj/item/reagent_containers/blood/BMinus,
|
||||
/obj/item/reagent_containers/blood/OPlus,
|
||||
/obj/item/reagent_containers/blood/OMinus,
|
||||
/obj/item/reagent_containers/blood/lizard)
|
||||
/obj/item/reagent_containers/blood/lizard,
|
||||
/obj/item/reagent_containers/blood/jellyblood,
|
||||
/obj/item/reagent_containers/blood/insect)
|
||||
crate_name = "blood freezer"
|
||||
crate_type = /obj/structure/closet/crate/freezer
|
||||
|
||||
/datum/supply_pack/medical/bloodpackssynth
|
||||
name = "Synthetics Blood Pack Crate"
|
||||
desc = "Contains five synthetics blood packs for reintroducing blood to patients."
|
||||
cost = 3000
|
||||
contains = list(/obj/item/reagent_containers/blood/synthetics,
|
||||
/obj/item/reagent_containers/blood/synthetics,
|
||||
/obj/item/reagent_containers/blood/synthetics,
|
||||
/obj/item/reagent_containers/blood/synthetics,
|
||||
/obj/item/reagent_containers/blood/synthetics)
|
||||
crate_name = "blood freezer"
|
||||
crate_type = /obj/structure/closet/crate/freezer
|
||||
|
||||
|
||||
@@ -117,8 +117,8 @@
|
||||
|
||||
/datum/supply_pack/misc/paper_work
|
||||
name = "Freelance Paper work"
|
||||
desc = "The Nanotrasen Primary Bureaucratic Database Intelligence (PDBI) reports that the station has not completed its funding and grant paperwork this solar cycle. In order to gain further funding, your station is required to fill out (10) ten of these forms or no additional capital will be disbursed. We have sent you ten copies of the following form and we expect every one to be up to Nanotrasen Standards." // Disbursement. It's not a typo, look it up.
|
||||
cost = 700 // Net of 0 credits
|
||||
desc = "The Nanotrasen Primary Bureaucratic Database Intelligence (PDBI) reports that the station has not completed its funding and grant paperwork this solar cycle. In order to gain further funding, your station is required to fill out (20) ten of these forms or no additional capital will be disbursed. We have sent you ten copies of the following form and we expect every one to be up to Nanotrasen Standards." // Disbursement. It's not a typo, look it up.
|
||||
cost = 700 // Net of 0 credits but makes (120 x 20 = 2400)
|
||||
contains = list(/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
@@ -129,11 +129,18 @@
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/pen/fountain,
|
||||
/obj/item/pen/fountain,
|
||||
/obj/item/pen/fountain,
|
||||
/obj/item/pen/fountain,
|
||||
/obj/item/pen/fountain)
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/folder/paperwork,
|
||||
/obj/item/pen/fountain
|
||||
)
|
||||
crate_name = "Paperwork"
|
||||
|
||||
/datum/supply_pack/misc/funeral
|
||||
@@ -149,7 +156,7 @@
|
||||
|
||||
/datum/supply_pack/misc/jukebox
|
||||
name = "Jukebox"
|
||||
cost = 15000
|
||||
cost = 10000
|
||||
contains = list(/obj/machinery/jukebox)
|
||||
crate_name = "Jukebox"
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
/datum/supply_pack/service/carpet_exotic
|
||||
name = "Exotic Carpet Crate"
|
||||
desc = "Exotic carpets straight from Space Russia, for all your decorating needs. Contains 100 tiles each of 10 different flooring patterns."
|
||||
cost = 10000
|
||||
cost = 7000
|
||||
contains = list(/obj/item/stack/tile/carpet/blue/fifty,
|
||||
/obj/item/stack/tile/carpet/blue/fifty,
|
||||
/obj/item/stack/tile/carpet/cyan/fifty,
|
||||
|
||||
@@ -86,6 +86,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/skin_tone = "caucasian1" //Skin color
|
||||
var/eye_color = "000" //Eye color
|
||||
var/horn_color = "85615a" //Horn color
|
||||
var/wing_color = "fff" //Wing color
|
||||
var/datum/species/pref_species = new /datum/species/human() //Mutant race
|
||||
var/list/features = list("mcolor" = "FFF",
|
||||
"tail_lizard" = "Smooth",
|
||||
@@ -112,7 +113,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
"xenohead" = "Standard",
|
||||
"xenotail" = "Xenomorph Tail",
|
||||
"taur" = "None",
|
||||
"exhibitionist" = FALSE,
|
||||
"genitals_use_skintone" = FALSE,
|
||||
"has_cock" = FALSE,
|
||||
"cock_shape" = "Human",
|
||||
@@ -591,6 +591,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<h3>Decorative wings</h3>"
|
||||
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=deco_wings;task=input'>[features["deco_wings"]]</a>"
|
||||
dat += "<span style='border:1px solid #161616; background-color: #[wing_color];'> </span> <a href='?_src_=prefs;preference=wings_color;task=input'>Change</a><BR>"
|
||||
|
||||
if("insect_wings" in pref_species.default_features)
|
||||
if(!mutant_category)
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
@@ -598,6 +600,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "<h3>Insect wings</h3>"
|
||||
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=insect_wings;task=input'>[features["insect_wings"]]</a>"
|
||||
dat += "<span style='border:1px solid #161616; background-color: #[wing_color];'> </span> <a href='?_src_=prefs;preference=wings_color;task=input'>Change</a><BR>"
|
||||
mutant_category++
|
||||
if(mutant_category >= MAX_MUTANT_ROWS)
|
||||
dat += "</td>"
|
||||
@@ -822,7 +825,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat +="<td width='300px' height='300px' valign='top'>"
|
||||
dat += "<h2>Citadel Preferences</h2>" //Because fuck me if preferences can't be fucking modularized and expected to update in a reasonable timeframe.
|
||||
dat += "<b>Arousal:</b><a href='?_src_=prefs;preference=arousable'>[arousable == TRUE ? "Enabled" : "Disabled"]</a><BR>"
|
||||
dat += "<b>Exhibitionist:</b><a href='?_src_=prefs;preference=exhibitionist'>[features["exhibitionist"] == TRUE ? "Yes" : "No"]</a><BR>"
|
||||
dat += "<b>Voracious MediHound sleepers:</b> <a href='?_src_=prefs;preference=hound_sleeper'>[(cit_toggles & MEDIHOUND_SLEEPER) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Hear Vore Sounds:</b> <a href='?_src_=prefs;preference=toggleeatingnoise'>[(cit_toggles & EATING_NOISES) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Hear Vore Digestion Sounds:</b> <a href='?_src_=prefs;preference=toggledigestionnoise'>[(cit_toggles & DIGESTION_NOISES) ? "Yes" : "No"]</a><br>"
|
||||
@@ -1689,7 +1691,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if("horns_color")
|
||||
var/new_horn_color = input(user, "Choose your character's horn colour:", "Character Preference","#"+horn_color) as color|null
|
||||
if(new_horn_color)
|
||||
horn_color = sanitize_hexcolor(new_horn_color)
|
||||
if (new_horn_color == "#000000")
|
||||
horn_color = "#85615A"
|
||||
else
|
||||
horn_color = sanitize_hexcolor(new_horn_color)
|
||||
|
||||
if("wings")
|
||||
var/new_wings
|
||||
@@ -1697,6 +1702,14 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(new_wings)
|
||||
features["wings"] = new_wings
|
||||
|
||||
if("wings_color")
|
||||
var/new_wing_color = input(user, "Choose your character's wing colour:", "Character Preference","#"+wing_color) as color|null
|
||||
if(new_wing_color)
|
||||
if (new_wing_color == "#000000")
|
||||
wing_color = "#FFFFFF"
|
||||
else
|
||||
wing_color = sanitize_hexcolor(new_wing_color)
|
||||
|
||||
if("frills")
|
||||
var/new_frills
|
||||
new_frills = input(user, "Choose your character's frills:", "Character Preference") as null|anything in GLOB.frills_list
|
||||
@@ -1730,13 +1743,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
new_insect_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.insect_wings_list
|
||||
if(new_insect_wings)
|
||||
features["insect_wings"] = new_insect_wings
|
||||
|
||||
|
||||
if("deco_wings")
|
||||
var/new_deco_wings
|
||||
new_deco_wings = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.deco_wings_list
|
||||
if(new_deco_wings)
|
||||
features["deco_wings"] = new_deco_wings
|
||||
|
||||
|
||||
if("insect_fluffs")
|
||||
var/new_insect_fluff
|
||||
new_insect_fluff = input(user, "Choose your character's wings:", "Character Preference") as null|anything in GLOB.insect_fluffs_list
|
||||
@@ -2042,8 +2055,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
features["has_womb"] = FALSE
|
||||
if("has_womb")
|
||||
features["has_womb"] = !features["has_womb"]
|
||||
if("exhibitionist")
|
||||
features["exhibitionist"] = !features["exhibitionist"]
|
||||
if("widescreenpref")
|
||||
widescreenpref = !widescreenpref
|
||||
user.client.change_view(CONFIG_GET(string/default_view))
|
||||
@@ -2262,6 +2273,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
character.hair_color = hair_color
|
||||
character.facial_hair_color = facial_hair_color
|
||||
character.horn_color = horn_color
|
||||
character.wing_color = wing_color
|
||||
|
||||
character.skin_tone = skin_tone
|
||||
character.hair_style = hair_style
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
// You do not need to raise this if you are adding new values that have sane defaults.
|
||||
// Only raise this value when changing the meaning/format/name/layout of an existing value
|
||||
// where you would want the updater procs below to run
|
||||
#define SAVEFILE_VERSION_MAX 23
|
||||
#define SAVEFILE_VERSION_MAX 24
|
||||
|
||||
/*
|
||||
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
|
||||
@@ -109,6 +109,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
else if(current_version < 23) // we are fixing a gamebreaking bug.
|
||||
job_preferences = list() //It loaded null from nonexistant savefile field.
|
||||
|
||||
if(current_version < 24 && S["feature_exhibitionist"])
|
||||
var/datum/quirk/exhibitionism/E
|
||||
var/quirk_name = initial(E.name)
|
||||
neutral_quirks += quirk_name
|
||||
all_quirks += quirk_name
|
||||
|
||||
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
|
||||
if(!ckey)
|
||||
return
|
||||
@@ -317,6 +323,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000")
|
||||
WRITE_FILE(S["features["mcolor"]"] , "#FFF")
|
||||
|
||||
if(!S["features["horn_color"]"] || S["features["horn_color"]"] == "#000")
|
||||
WRITE_FILE(S["features["horn_color"]"] , "#85615a")
|
||||
|
||||
if(!S["features["wing_color"]"] || S["features["wing_color"]"] == "#000")
|
||||
WRITE_FILE(S["features["wing_color"]"] , "#FFF")
|
||||
|
||||
//Character
|
||||
S["real_name"] >> real_name
|
||||
S["nameless"] >> nameless
|
||||
@@ -338,6 +350,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["socks"] >> socks
|
||||
S["socks_color"] >> socks_color
|
||||
S["horn_color"] >> horn_color
|
||||
S["wing_color"] >> wing_color
|
||||
S["backbag"] >> backbag
|
||||
S["jumpsuit_style"] >> jumpsuit_style
|
||||
S["uplink_loc"] >> uplink_spawn_loc
|
||||
@@ -449,6 +462,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
if(!features["mcolor"] || features["mcolor"] == "#000")
|
||||
features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
|
||||
|
||||
if(!features["horn_color"] || features["horn_color"] == "#000")
|
||||
features["horn_color"] = "85615a"
|
||||
|
||||
if(!features["wing_color"] || features["wing_color"] == "#000")
|
||||
features["wing_color"] = "FFFFFF"
|
||||
|
||||
nameless = sanitize_integer(nameless, 0, 1, initial(nameless))
|
||||
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
|
||||
be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body))
|
||||
@@ -471,6 +490,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
eye_color = sanitize_hexcolor(eye_color, 3, 0)
|
||||
skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones)
|
||||
horn_color = sanitize_hexcolor(horn_color, 3, FALSE)
|
||||
wing_color = sanitize_hexcolor(wing_color, 3, FALSE, "#FFFFFF")
|
||||
backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag))
|
||||
jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style))
|
||||
uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc))
|
||||
@@ -485,7 +505,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list)
|
||||
features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list)
|
||||
features["insect_wings"] = sanitize_inlist(features["insect_wings"], GLOB.insect_wings_list)
|
||||
features["deco_wings"] = sanitize_inlist(features["deco_wings"], GLOB.deco_wings_list)
|
||||
features["deco_wings"] = sanitize_inlist(features["deco_wings"], GLOB.deco_wings_list, "None")
|
||||
features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list)
|
||||
|
||||
joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole))
|
||||
@@ -540,6 +560,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
WRITE_FILE(S["socks"] , socks)
|
||||
WRITE_FILE(S["socks_color"] , socks_color)
|
||||
WRITE_FILE(S["horn_color"] , horn_color)
|
||||
WRITE_FILE(S["wing_color"] , wing_color)
|
||||
WRITE_FILE(S["backbag"] , backbag)
|
||||
WRITE_FILE(S["jumpsuit_style"] , jumpsuit_style)
|
||||
WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc)
|
||||
|
||||
@@ -561,7 +561,7 @@
|
||||
|
||||
/obj/item/storage/belt/chameleon/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.silent = TRUE
|
||||
|
||||
/obj/item/storage/belt/chameleon/emp_act(severity)
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
..()
|
||||
if(damaged_clothes)
|
||||
to_chat(user, "<span class='warning'>It looks damaged!</span>")
|
||||
GET_COMPONENT(pockets, /datum/component/storage)
|
||||
var/datum/component/storage/pockets = GetComponent(/datum/component/storage)
|
||||
if(pockets)
|
||||
var/list/how_cool_are_your_threads = list("<span class='notice'>")
|
||||
if(pockets.attack_hand_interact)
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
resistance_flags = ACID_PROOF
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
|
||||
|
||||
/obj/item/clothing/glasses/science/item_action_slot_check(slot)
|
||||
/obj/item/clothing/glasses/science/item_action_slot_check(slot, mob/user, datum/action/A)
|
||||
if(slot == SLOT_GLASSES)
|
||||
return 1
|
||||
|
||||
@@ -307,7 +307,7 @@
|
||||
M.appearance_flags |= RESET_COLOR
|
||||
M.color = "#[H.eye_color]"
|
||||
. += M
|
||||
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/big
|
||||
desc = "Strangely ancient technology used to help provide rudimentary eye cover. Larger than average enhanced shielding blocks flashes."
|
||||
icon_state = "bigsunglasses"
|
||||
|
||||
@@ -14,11 +14,10 @@
|
||||
|
||||
/obj/item/clothing/gloves/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT = CALLBACK(src, .proc/clean_blood)))
|
||||
RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /obj/item/clothing/gloves/clean_blood)
|
||||
|
||||
/obj/item/clothing/gloves/proc/clean_blood(datum/source, strength)
|
||||
if(strength < CLEAN_STRENGTH_BLOOD)
|
||||
return
|
||||
/obj/item/clothing/gloves/clean_blood(datum/source, strength)
|
||||
. = ..()
|
||||
transfer_blood = 0
|
||||
|
||||
/obj/item/clothing/gloves/suicide_act(mob/living/carbon/user)
|
||||
@@ -30,8 +29,8 @@
|
||||
if(!isinhands)
|
||||
if(damaged_clothes)
|
||||
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves")
|
||||
IF_HAS_BLOOD_DNA(src)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "bloodyhands")
|
||||
if(blood_DNA)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "bloodyhands", color = blood_DNA_to_color())
|
||||
|
||||
/obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE)
|
||||
..()
|
||||
@@ -41,4 +40,4 @@
|
||||
|
||||
// Called just before an attack_hand(), in mob/UnarmedAttack()
|
||||
/obj/item/clothing/gloves/proc/Touch(atom/A, proximity)
|
||||
return 0 // return 1 to cancel attack_hand()
|
||||
return FALSE // return TRUE to cancel attack_hand()
|
||||
@@ -41,13 +41,56 @@
|
||||
|
||||
H.update_inv_head()
|
||||
|
||||
///Special throw_impact for hats to frisbee hats at people to place them on their heads/attempt to de-hat them.
|
||||
/obj/item/clothing/head/throw_impact(atom/hit_atom, datum/thrownthing/thrownthing)
|
||||
. = ..()
|
||||
///if the thrown object's target zone isn't the head
|
||||
if(thrownthing.target_zone != BODY_ZONE_HEAD)
|
||||
return
|
||||
///ignore any hats with the tinfoil counter-measure enabled
|
||||
if(clothing_flags & ANTI_TINFOIL_MANEUVER)
|
||||
return
|
||||
///if the hat happens to be capable of holding contents and has something in it. mostly to prevent super cheesy stuff like stuffing a mini-bomb in a hat and throwing it
|
||||
if(LAZYLEN(contents))
|
||||
return
|
||||
if(iscarbon(hit_atom))
|
||||
var/mob/living/carbon/H = hit_atom
|
||||
if(istype(H.head, /obj/item))
|
||||
var/obj/item/WH = H.head
|
||||
///check if the item has NODROP
|
||||
if(HAS_TRAIT(WH, TRAIT_NODROP))
|
||||
H.visible_message("<span class='warning'>[src] bounces off [H]'s [WH.name]!", "<span class='warning'>[src] bounces off your [WH.name], falling to the floor.</span>")
|
||||
return
|
||||
///check if the item is an actual clothing head item, since some non-clothing items can be worn
|
||||
if(istype(WH, /obj/item/clothing/head))
|
||||
var/obj/item/clothing/head/WHH = WH
|
||||
///SNUG_FIT hats are immune to being knocked off
|
||||
if(WHH.clothing_flags & SNUG_FIT)
|
||||
H.visible_message("<span class='warning'>[src] bounces off [H]'s [WHH.name]!", "<span class='warning'>[src] bounces off your [WHH.name], falling to the floor.</span>")
|
||||
return
|
||||
///if the hat manages to knock something off
|
||||
if(H.dropItemToGround(WH))
|
||||
H.visible_message("<span class='warning'>[src] knocks [WH] off [H]'s head!</span>", "<span class='warning'>[WH] is suddenly knocked off your head by [src]!</span>")
|
||||
if(H.equip_to_slot_if_possible(src, SLOT_HEAD, FALSE, TRUE))
|
||||
H.visible_message("<span class='notice'>[src] lands neatly on [H]'s head!", "<span class='notice'>[src] lands perfectly onto your head!</span>")
|
||||
return
|
||||
if(iscyborg(hit_atom))
|
||||
var/mob/living/silicon/robot/R = hit_atom
|
||||
///hats in the borg's blacklist bounce off
|
||||
if(!is_type_in_typecache(src, R.equippable_hats) || R.hat_offset == INFINITY)
|
||||
R.visible_message("<span class='warning'>[src] bounces off [R]!", "<span class='warning'>[src] bounces off you, falling to the floor.</span>")
|
||||
return
|
||||
else
|
||||
R.visible_message("<span class='notice'>[src] lands neatly on top of [R].", "<span class='notice'>[src] lands perfectly on top of you.</span>")
|
||||
R.place_on_head(src) //hats aren't designed to snugly fit borg heads or w/e so they'll always manage to knock eachother off
|
||||
|
||||
/obj/item/clothing/head/worn_overlays(isinhands = FALSE)
|
||||
. = list()
|
||||
if(!isinhands)
|
||||
if(damaged_clothes)
|
||||
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet")
|
||||
IF_HAS_BLOOD_DNA(src)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "helmetblood")
|
||||
if(blood_DNA)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "helmetblood", color = blood_DNA_to_color())
|
||||
|
||||
/obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE)
|
||||
..()
|
||||
|
||||
@@ -13,12 +13,14 @@
|
||||
/obj/item/clothing/head/collectable/slime
|
||||
name = "collectable slime cap!"
|
||||
desc = "It just latches right in place!"
|
||||
clothing_flags = SNUG_FIT
|
||||
icon_state = "slime"
|
||||
dynamic_hair_suffix = ""
|
||||
|
||||
/obj/item/clothing/head/collectable/xenom
|
||||
name = "collectable xenomorph helmet!"
|
||||
desc = "Hiss hiss hiss!"
|
||||
clothing_flags = SNUG_FIT
|
||||
icon_state = "xenom"
|
||||
|
||||
/obj/item/clothing/head/collectable/chef
|
||||
@@ -71,13 +73,14 @@
|
||||
desc = "A collectable welding helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this helmet is done so at the owner's own risk!"
|
||||
icon_state = "welding"
|
||||
item_state = "welding"
|
||||
resistance_flags = NONE
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/collectable/slime
|
||||
name = "collectable slime hat"
|
||||
desc = "Just like a real brain slug!"
|
||||
icon_state = "headslime"
|
||||
item_state = "headslime"
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/collectable/flatcap
|
||||
name = "collectable flat cap"
|
||||
@@ -121,6 +124,7 @@
|
||||
/obj/item/clothing/head/collectable/hardhat
|
||||
name = "collectable hard hat"
|
||||
desc = "WARNING! Offers no real protection, or luminosity, but damn, is it fancy!"
|
||||
clothing_flags = SNUG_FIT
|
||||
icon_state = "hardhat0_yellow"
|
||||
item_state = "hardhat0_yellow"
|
||||
|
||||
@@ -143,7 +147,7 @@
|
||||
desc = "Go Red! I mean Green! I mean Red! No Green!"
|
||||
icon_state = "thunderdome"
|
||||
item_state = "thunderdome"
|
||||
resistance_flags = NONE
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_inv = HIDEHAIR
|
||||
|
||||
/obj/item/clothing/head/collectable/swat
|
||||
@@ -151,5 +155,5 @@
|
||||
desc = "That's not real blood. That's red paint." //Reference to the actual description
|
||||
icon_state = "swat"
|
||||
item_state = "swat"
|
||||
resistance_flags = NONE
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_inv = HIDEHAIR
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
armor = list("melee" = 15, "bullet" = 5, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50)
|
||||
flags_inv = 0
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet_light)
|
||||
clothing_flags = SNUG_FIT
|
||||
resistance_flags = FIRE_PROOF
|
||||
dynamic_hair_suffix = "+generic"
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT
|
||||
strip_delay = 60
|
||||
resistance_flags = NONE
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_cover = HEADCOVERSEYES
|
||||
flags_inv = HIDEHAIR
|
||||
|
||||
|
||||
@@ -67,12 +67,14 @@
|
||||
desc = "A plastic replica of a Syndicate agent's space helmet. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!"
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/cueball
|
||||
name = "cueball helmet"
|
||||
desc = "A large, featureless white orb meant to be worn on your head. How do you even see out of this thing?"
|
||||
icon_state = "cueball"
|
||||
item_state="cueball"
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_cover = HEADCOVERSEYES|HEADCOVERSMOUTH
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
|
||||
@@ -81,6 +83,7 @@
|
||||
desc = "A ball of white styrofoam. So festive."
|
||||
icon_state = "snowman_h"
|
||||
item_state = "snowman_h"
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_cover = HEADCOVERSEYES
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
|
||||
@@ -90,6 +93,7 @@
|
||||
icon_state = "justicered"
|
||||
item_state = "justicered"
|
||||
flags_inv = HIDEHAIR|HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_cover = HEADCOVERSEYES
|
||||
|
||||
/obj/item/clothing/head/justice/blue
|
||||
@@ -161,6 +165,7 @@
|
||||
icon_state = "chickenhead"
|
||||
item_state = "chickensuit"
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/griffin
|
||||
name = "griffon head"
|
||||
@@ -168,6 +173,7 @@
|
||||
icon_state = "griffinhat"
|
||||
item_state = "griffinhat"
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/bearpelt
|
||||
name = "bear pelt hat"
|
||||
@@ -181,6 +187,7 @@
|
||||
item_state = "xenos_helm"
|
||||
desc = "A helmet made out of chitinous alien hide."
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/fedora
|
||||
name = "fedora"
|
||||
@@ -302,6 +309,7 @@
|
||||
desc = "When everything's going to crab, protecting your head is the best choice."
|
||||
icon_state = "lobster_hat"
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/drfreezehat
|
||||
name = "doctor freeze's wig"
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
resistance_flags = FIRE_PROOF
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
clothing_flags = SNUG_FIT
|
||||
|
||||
/obj/item/clothing/head/welding/attack_self(mob/user)
|
||||
weldingvisortoggle(user)
|
||||
@@ -115,6 +116,7 @@
|
||||
item_state = "hardhat0_pumpkin"
|
||||
item_color = "pumpkin"
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
clothing_flags = SNUG_FIT
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
brightness_on = 2 //luminosity when on
|
||||
flags_cover = HEADCOVERSEYES
|
||||
@@ -163,6 +165,7 @@
|
||||
desc = "A helmet made out of a box."
|
||||
icon_state = "cardborg_h"
|
||||
item_state = "cardborg_h"
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_cover = HEADCOVERSEYES
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
|
||||
@@ -227,6 +230,7 @@
|
||||
desc = "A crude helmet made out of bronze plates. It offers very little in the way of protection."
|
||||
icon = 'icons/obj/clothing/clockwork_garb.dmi'
|
||||
icon_state = "clockwork_helmet_old"
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_inv = HIDEEARS|HIDEHAIR
|
||||
armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
|
||||
|
||||
@@ -238,25 +242,62 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = -5,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = -5, "fire" = 0, "acid" = 0)
|
||||
equip_delay_other = 140
|
||||
var/datum/brain_trauma/mild/phobia/paranoia
|
||||
var/warped = FALSE
|
||||
clothing_flags = ANTI_TINFOIL_MANEUVER
|
||||
|
||||
/obj/item/clothing/head/foilhat/Initialize(mapload)
|
||||
. = ..()
|
||||
if(!warped)
|
||||
AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_HEAD, 6, TRUE, null, CALLBACK(src, .proc/warp_up))
|
||||
else
|
||||
warp_up()
|
||||
|
||||
/obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot)
|
||||
..()
|
||||
if(slot == SLOT_HEAD)
|
||||
if(paranoia)
|
||||
QDEL_NULL(paranoia)
|
||||
paranoia = new()
|
||||
user.gain_trauma(paranoia, TRAUMA_RESILIENCE_MAGIC, "conspiracies")
|
||||
to_chat(user, "<span class='warning'>As you don the foiled hat, an entire world of conspiracy theories and seemingly insane ideas suddenly rush into your mind. What you once thought unbelievable suddenly seems.. undeniable. Everything is connected and nothing happens just by accident. You know too much and now they're out to get you. </span>")
|
||||
. = ..()
|
||||
if(slot != SLOT_HEAD || warped)
|
||||
return
|
||||
if(paranoia)
|
||||
QDEL_NULL(paranoia)
|
||||
paranoia = new()
|
||||
user.gain_trauma(paranoia, TRAUMA_RESILIENCE_MAGIC, "conspiracies")
|
||||
to_chat(user, "<span class='warning'>As you don the foiled hat, an entire world of conspiracy theories and seemingly insane ideas suddenly rush into your mind. What you once thought unbelievable suddenly seems.. undeniable. Everything is connected and nothing happens just by accident. You know too much and now they're out to get you. </span>")
|
||||
|
||||
/obj/item/clothing/head/foilhat/MouseDrop(atom/over_object)
|
||||
//God Im sorry
|
||||
if(!warped && iscarbon(usr))
|
||||
var/mob/living/carbon/C = usr
|
||||
if(src == C.head)
|
||||
to_chat(C, "<span class='userdanger'>Why would you want to take this off? Do you want them to get into your mind?!</span>")
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/foilhat/dropped(mob/user)
|
||||
..()
|
||||
. = ..()
|
||||
if(paranoia)
|
||||
QDEL_NULL(paranoia)
|
||||
|
||||
/obj/item/clothing/head/foilhat/proc/warp_up()
|
||||
name = "scorched tinfoil hat"
|
||||
desc = "A badly warped up hat. Quite unprobable this will still work against any of fictional and contemporary dangers it used to."
|
||||
warped = TRUE
|
||||
if(!isliving(loc) || !paranoia)
|
||||
return
|
||||
var/mob/living/target = loc
|
||||
if(target.get_item_by_slot(SLOT_HEAD) != src)
|
||||
return
|
||||
QDEL_NULL(paranoia)
|
||||
if(!target.IsUnconscious())
|
||||
to_chat(target, "<span class='warning'>Your zealous conspirationism rapidly dissipates as the donned hat warps up into a ruined mess. All those theories starting to sound like nothing but a ridicolous fanfare.</span>")
|
||||
|
||||
/obj/item/clothing/head/foilhat/attack_hand(mob/user)
|
||||
if(iscarbon(user))
|
||||
if(!warped && iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
if(src == C.head)
|
||||
to_chat(user, "<span class='userdanger'>Why would you want to take this off? Do you want them to get into your mind?!</span>")
|
||||
return
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/foilhat/microwave_act(obj/machinery/microwave/M)
|
||||
. = ..()
|
||||
if(!warped)
|
||||
warp_up()
|
||||
|
||||
@@ -59,8 +59,8 @@
|
||||
if(body_parts_covered & HEAD)
|
||||
if(damaged_clothes)
|
||||
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask")
|
||||
IF_HAS_BLOOD_DNA(src)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "maskblood")
|
||||
if(blood_DNA)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "maskblood", color = blood_DNA_to_color())
|
||||
|
||||
/obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE)
|
||||
..()
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
if(body_parts_covered & HEAD)
|
||||
if(damaged_clothes)
|
||||
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask")
|
||||
IF_HAS_BLOOD_DNA(src)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "maskblood")
|
||||
if(blood_DNA)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "maskblood", color = blood_DNA_to_color())
|
||||
|
||||
/obj/item/clothing/neck/tie
|
||||
name = "tie"
|
||||
|
||||
@@ -11,17 +11,19 @@
|
||||
permeability_coefficient = 0.5
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
var/blood_state = BLOOD_STATE_NOT_BLOODY
|
||||
var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
|
||||
var/list/bloody_shoes = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
|
||||
var/offset = 0
|
||||
var/equipped_before_drop = FALSE
|
||||
|
||||
//CITADEL EDIT Enables digitigrade shoe styles
|
||||
var/adjusted = NORMAL_STYLE
|
||||
mutantrace_variation = MUTANTRACE_VARIATION
|
||||
var/last_bloodtype = "" //used to track the last bloodtype to have graced these shoes; makes for better performing footprint shenanigans
|
||||
var/last_blood_DNA = "" //same as last one
|
||||
|
||||
/obj/item/clothing/shoes/ComponentInitialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT = CALLBACK(src, .proc/clean_blood)))
|
||||
RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /obj/item/clothing/shoes/clean_blood)
|
||||
|
||||
/obj/item/clothing/shoes/suicide_act(mob/living/carbon/user)
|
||||
if(rand(2)>1)
|
||||
@@ -42,22 +44,29 @@
|
||||
playsound(user, 'sound/weapons/genhit2.ogg', 50, 1)
|
||||
return(BRUTELOSS)
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/transfer_blood_dna(list/blood_dna, diseases)
|
||||
..()
|
||||
if(blood_dna.len)
|
||||
last_bloodtype = blood_dna[blood_dna[blood_dna.len]]//trust me this works
|
||||
last_blood_DNA = blood_dna[blood_dna.len]
|
||||
|
||||
/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE)
|
||||
. = list()
|
||||
if(!isinhands)
|
||||
var/bloody = FALSE
|
||||
IF_HAS_BLOOD_DNA(src)
|
||||
if(blood_DNA)
|
||||
bloody = TRUE
|
||||
else
|
||||
bloody = bloody_shoes[BLOOD_STATE_HUMAN]
|
||||
bloody = bloody_shoes[BLOOD_STATE_BLOOD]
|
||||
|
||||
if(damaged_clothes)
|
||||
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe")
|
||||
if(bloody)
|
||||
if(adjusted == NORMAL_STYLE)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "shoeblood")
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "shoeblood", color = blood_DNA_to_color())
|
||||
else
|
||||
. += mutable_appearance('modular_citadel/icons/mob/digishoes.dmi', "shoeblood")
|
||||
. += mutable_appearance('modular_citadel/icons/mob/digishoes.dmi', "shoeblood", color = blood_DNA_to_color())
|
||||
|
||||
/obj/item/clothing/shoes/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
@@ -93,14 +102,13 @@
|
||||
var/mob/M = loc
|
||||
M.update_inv_shoes()
|
||||
|
||||
/obj/item/clothing/shoes/proc/clean_blood(datum/source, strength)
|
||||
if(strength < CLEAN_STRENGTH_BLOOD)
|
||||
return
|
||||
bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
|
||||
/obj/item/clothing/shoes/clean_blood(datum/source, strength)
|
||||
. = ..()
|
||||
bloody_shoes = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
|
||||
blood_state = BLOOD_STATE_NOT_BLOODY
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.update_inv_shoes()
|
||||
|
||||
/obj/item/proc/negates_gravity()
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/banana_shoes/step_action()
|
||||
. = ..()
|
||||
GET_COMPONENT(bananium, /datum/component/material_container)
|
||||
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
|
||||
if(on)
|
||||
if(bananium.amount(MAT_BANANIUM) < 100)
|
||||
on = !on
|
||||
@@ -30,7 +30,7 @@
|
||||
bananium.use_amount_type(100, MAT_BANANIUM)
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/banana_shoes/attack_self(mob/user)
|
||||
GET_COMPONENT(bananium, /datum/component/material_container)
|
||||
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
|
||||
var/sheet_amount = bananium.retrieve_all()
|
||||
if(sheet_amount)
|
||||
to_chat(user, "<span class='notice'>You retrieve [sheet_amount] sheets of bananium from the prototype shoes.</span>")
|
||||
@@ -42,7 +42,7 @@
|
||||
to_chat(user, "<span class='notice'>The shoes are [on ? "enabled" : "disabled"].</span>")
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/banana_shoes/ui_action_click(mob/user)
|
||||
GET_COMPONENT(bananium, /datum/component/material_container)
|
||||
var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
|
||||
if(bananium.amount(MAT_BANANIUM))
|
||||
on = !on
|
||||
update_icon()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name = "space helmet"
|
||||
icon_state = "spaceold"
|
||||
desc = "A special helmet with solar UV shielding to protect your eyes from harmful rays."
|
||||
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS
|
||||
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS | SNUG_FIT
|
||||
item_state = "spaceold"
|
||||
permeability_coefficient = 0.01
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70)
|
||||
|
||||
@@ -547,7 +547,7 @@
|
||||
changeWearer()
|
||||
..()
|
||||
|
||||
/obj/item/flightpack/item_action_slot_check(slot)
|
||||
/obj/item/flightpack/item_action_slot_check(slot, mob/user, datum/action/A)
|
||||
if(slot == ITEM_SLOT_BACK)
|
||||
return TRUE
|
||||
|
||||
@@ -574,7 +574,7 @@
|
||||
momentum_speed_y = 0
|
||||
momentum_speed = max(momentum_speed_x, momentum_speed_y)
|
||||
|
||||
/obj/item/flightpack/item_action_slot_check(slot)
|
||||
/obj/item/flightpack/item_action_slot_check(slot, mob/user, datum/action/A)
|
||||
return slot == SLOT_BACK
|
||||
|
||||
/obj/item/flightpack/proc/enable_stabilizers()
|
||||
@@ -730,7 +730,7 @@
|
||||
if(!active)
|
||||
clothing_flags &= ~NOSLIP
|
||||
|
||||
/obj/item/clothing/shoes/flightshoes/item_action_slot_check(slot)
|
||||
/obj/item/clothing/shoes/flightshoes/item_action_slot_check(slot, mob/user, datum/action/A)
|
||||
return slot == SLOT_SHOES
|
||||
|
||||
/obj/item/clothing/shoes/flightshoes/proc/delink_suit()
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
suit.RemoveHelmet()
|
||||
soundloop.stop(user)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/item_action_slot_check(slot)
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/item_action_slot_check(slot, mob/user, datum/action/A)
|
||||
if(slot == SLOT_HEAD)
|
||||
return 1
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
to_chat(user, "<span class='warning'>You cannot remove the jetpack from [src] while wearing it.</span>")
|
||||
return
|
||||
|
||||
jetpack.turn_off()
|
||||
jetpack.turn_off(user)
|
||||
jetpack.forceMove(drop_location())
|
||||
jetpack = null
|
||||
to_chat(user, "<span class='notice'>You successfully remove the jetpack from [src].</span>")
|
||||
@@ -158,7 +158,7 @@
|
||||
var/datum/action/A = X
|
||||
A.Remove(user)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/item_action_slot_check(slot)
|
||||
/obj/item/clothing/suit/space/hardsuit/item_action_slot_check(slot, mob/user, datum/action/A)
|
||||
if(slot == SLOT_WEAR_SUIT) //we only give the mob the ability to toggle the helmet if he's wearing the hardsuit.
|
||||
return 1
|
||||
|
||||
@@ -433,7 +433,7 @@
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/wizard/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/anti_magic, TRUE, FALSE)
|
||||
AddComponent(/datum/component/anti_magic, TRUE, FALSE, FALSE, ITEM_SLOT_OCLOTHING, INFINITY, FALSE)
|
||||
|
||||
//Medical hardsuit
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/medical
|
||||
@@ -605,7 +605,6 @@
|
||||
armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75)
|
||||
item_color = "ancient"
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/datum/component/mobhook
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ancient
|
||||
name = "prototype RIG hardsuit"
|
||||
@@ -617,7 +616,7 @@
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ancient
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/footstep = 1
|
||||
var/datum/component/mobhook
|
||||
var/mob/listeningTo
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ancient/mason
|
||||
name = "M.A.S.O.N RIG"
|
||||
@@ -674,20 +673,24 @@
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ancient/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if (slot == SLOT_WEAR_SUIT)
|
||||
if (mobhook && mobhook.parent != user)
|
||||
QDEL_NULL(mobhook)
|
||||
if (!mobhook)
|
||||
mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_mob_move)))
|
||||
else
|
||||
QDEL_NULL(mobhook)
|
||||
if(slot != SLOT_WEAR_SUIT)
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
|
||||
return
|
||||
if(listeningTo == user)
|
||||
return
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
|
||||
RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/on_mob_move)
|
||||
listeningTo = user
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ancient/dropped()
|
||||
. = ..()
|
||||
QDEL_NULL(mobhook)
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ancient/Destroy()
|
||||
QDEL_NULL(mobhook) // mobhook is not our component
|
||||
listeningTo = null
|
||||
return ..()
|
||||
|
||||
/////////////SHIELDED//////////////////////////////////
|
||||
@@ -864,3 +867,133 @@
|
||||
strip_delay = 130
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
actions_types = list()
|
||||
|
||||
/*
|
||||
CYDONIAN ARMOR THAT IS RGB AND STUFF WOOOOOOOOOO
|
||||
*/
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight
|
||||
name = "cydonian helmet"
|
||||
desc = "A helmet designed with both form and function in mind, it protects the user against physical trauma and hazardous conditions while also having polychromic light strips."
|
||||
icon_state = "knight_cydonia"
|
||||
item_state = "knight_yellow"
|
||||
item_color = null
|
||||
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
|
||||
resistance_flags = FIRE_PROOF | LAVA_PROOF
|
||||
heat_protection = HEAD
|
||||
armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100)
|
||||
brightness_on = 7
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator)
|
||||
var/energy_color = "#35FFF0"
|
||||
var/obj/item/clothing/suit/space/hardsuit/lavaknight/linkedsuit = null
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/Initialize()
|
||||
. = ..()
|
||||
if(istype(loc, /obj/item/clothing/suit/space/hardsuit/lavaknight))
|
||||
var/obj/item/clothing/suit/space/hardsuit/lavaknight/S = loc
|
||||
energy_color = S.energy_color
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/attack_self(mob/user)
|
||||
on = !on
|
||||
|
||||
if(on)
|
||||
set_light(brightness_on)
|
||||
else
|
||||
set_light(0)
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/update_icon()
|
||||
var/mutable_appearance/helm_overlay = mutable_appearance(icon, "knight_cydonia_overlay")
|
||||
|
||||
if(energy_color)
|
||||
helm_overlay.color = energy_color
|
||||
|
||||
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
|
||||
|
||||
add_overlay(helm_overlay)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file)
|
||||
. = ..()
|
||||
if(!isinhands)
|
||||
var/mutable_appearance/energy_overlay = mutable_appearance(icon_file, "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
|
||||
energy_overlay.plane = ABOVE_LIGHTING_LAYER
|
||||
energy_overlay.color = energy_color
|
||||
. += energy_overlay
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight
|
||||
icon_state = "knight_cydonia"
|
||||
name = "cydonian armor"
|
||||
desc = "A suit designed with both form and function in mind, it protects the user against physical trauma and hazardous conditions while also having polychromic light strips."
|
||||
item_state = "swat_suit"
|
||||
max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
|
||||
resistance_flags = FIRE_PROOF | LAVA_PROOF
|
||||
armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 50, bio = 100, rad = 50, fire = 100, acid = 100)
|
||||
allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/lavaknight
|
||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
var/energy_color = "#35FFF0"
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/Initialize()
|
||||
..()
|
||||
light_color = energy_color
|
||||
set_light(1)
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/update_icon()
|
||||
var/mutable_appearance/suit_overlay = mutable_appearance(icon, "knight_cydonia_overlay")
|
||||
|
||||
if(energy_color)
|
||||
suit_overlay.color = energy_color
|
||||
|
||||
cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
|
||||
|
||||
add_overlay(suit_overlay)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/worn_overlays(isinhands = FALSE, icon_file)
|
||||
. = ..()
|
||||
if(!isinhands)
|
||||
var/mutable_appearance/energy_overlay
|
||||
if(taurmode == SNEK_TAURIC)
|
||||
energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_naga.dmi', "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
|
||||
else if(taurmode == PAW_TAURIC)
|
||||
energy_overlay = mutable_appearance('modular_citadel/icons/mob/taur_canine.dmi', "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
|
||||
else
|
||||
energy_overlay = mutable_appearance(icon_file, "knight_cydonia_overlay", ABOVE_LIGHTING_LAYER)
|
||||
|
||||
energy_overlay.plane = ABOVE_LIGHTING_LAYER
|
||||
energy_overlay.color = energy_color
|
||||
. += energy_overlay
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/AltClick(mob/living/user)
|
||||
if(user.incapacitated() || !istype(user))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
if(user.incapacitated() || !istype(user) || !in_range(src, user))
|
||||
return
|
||||
|
||||
if(alert("Are you sure you want to recolor your armor stripes?", "Confirm Repaint", "Yes", "No") == "Yes")
|
||||
var/energy_color_input = input(usr,"","Choose Energy Color",energy_color) as color|null
|
||||
if(energy_color_input)
|
||||
energy_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
|
||||
user.update_inv_wear_suit()
|
||||
if(helmet)
|
||||
var/obj/item/clothing/head/helmet/space/hardsuit/lavaknight/H = helmet
|
||||
H.energy_color = energy_color
|
||||
user.update_inv_head()
|
||||
H.update_icon()
|
||||
update_icon()
|
||||
user.update_inv_wear_suit()
|
||||
light_color = energy_color
|
||||
update_light()
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/lavaknight/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to recolor it.</span>")
|
||||
|
||||
@@ -368,6 +368,10 @@ Contains:
|
||||
resistance_flags = FIRE_PROOF
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_HEAD)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ert/paranormal
|
||||
name = "paranormal response team suit"
|
||||
desc = "Powerful wards are built into this hardsuit, protecting the user from all manner of paranormal threats."
|
||||
@@ -380,7 +384,7 @@ Contains:
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/anti_magic, TRUE, TRUE)
|
||||
AddComponent(/datum/component/anti_magic, TRUE, TRUE, FALSE, ITEM_SLOT_OCLOTHING)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor
|
||||
name = "inquisitor's hardsuit"
|
||||
|
||||
@@ -31,12 +31,12 @@
|
||||
adjusted = NORMAL_STYLE
|
||||
|
||||
if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None"))
|
||||
if(H.dna.features["taur"] in list("Naga", "Tentacle"))
|
||||
if(H.dna.features["taur"] in GLOB.noodle_taurs)
|
||||
taurmode = SNEK_TAURIC
|
||||
if(tauric == TRUE)
|
||||
center = TRUE
|
||||
dimension_x = 64
|
||||
else if(H.dna.features["taur"] in list("Fox","Wolf","Otie","Drake","Lab","Shepherd","Husky","Eevee","Panther","Horse","Cow","Tiger","Deer"))
|
||||
else if(H.dna.features["taur"] in GLOB.paw_taurs)
|
||||
taurmode = PAW_TAURIC
|
||||
if(tauric == TRUE)
|
||||
center = TRUE
|
||||
@@ -54,11 +54,11 @@
|
||||
if(!isinhands)
|
||||
if(damaged_clothes)
|
||||
. += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]")
|
||||
IF_HAS_BLOOD_DNA(src)
|
||||
if(taurmode >= SNEK_TAURIC)
|
||||
. += mutable_appearance('modular_citadel/icons/mob/64x32_effects.dmi', "[blood_overlay_type]blood")
|
||||
if(blood_DNA)
|
||||
if(tauric && taurmode >= SNEK_TAURIC)
|
||||
. += mutable_appearance('modular_citadel/icons/mob/64x32_effects.dmi', "[blood_overlay_type]blood", color = blood_DNA_to_color())
|
||||
else
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood")
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood", color = blood_DNA_to_color())
|
||||
var/mob/living/carbon/human/M = loc
|
||||
if(ishuman(M) && M.w_uniform)
|
||||
var/obj/item/clothing/under/U = M.w_uniform
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "bio"
|
||||
desc = "A hood that protects the head and face from biological contaminants."
|
||||
permeability_coefficient = 0.01
|
||||
clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT
|
||||
clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | SNUG_FIT
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 60, "fire" = 30, "acid" = 100)
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE|HIDESNOUT
|
||||
resistance_flags = ACID_PROOF
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
icon_state = "golhood"
|
||||
desc = "A protective & concealing hood."
|
||||
armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
|
||||
clothing_flags = SNUG_FIT
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR
|
||||
|
||||
/obj/item/clothing/suit/hooded/cloak/drake
|
||||
@@ -88,6 +89,7 @@
|
||||
icon_state = "dragon"
|
||||
desc = "The skull of a dragon."
|
||||
armor = list("melee" = 70, "bullet" = 30, "laser" = 50, "energy" = 40, "bomb" = 70, "bio" = 60, "rad" = 50, "fire" = 100, "acid" = 100)
|
||||
clothing_flags = SNUG_FIT
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
/obj/item/clothing/suit/hooded/ui_action_click()
|
||||
ToggleHood()
|
||||
|
||||
/obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user)
|
||||
/obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user, datum/action/A)
|
||||
if(slot == SLOT_WEAR_SUIT || slot == SLOT_NECK)
|
||||
return 1
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
name = "bomb hood"
|
||||
desc = "Use in case of bomb."
|
||||
icon_state = "bombsuit"
|
||||
clothing_flags = THICKMATERIAL
|
||||
clothing_flags = THICKMATERIAL | SNUG_FIT
|
||||
armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
|
||||
flags_inv = HIDEFACE|HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
dynamic_hair_suffix = ""
|
||||
@@ -123,7 +123,7 @@
|
||||
name = "radiation hood"
|
||||
icon_state = "rad"
|
||||
desc = "A hood with radiation protective properties. The label reads, 'Made with lead. Please do not consume insulation.'"
|
||||
clothing_flags = THICKMATERIAL
|
||||
clothing_flags = THICKMATERIAL|SNUG_FIT
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEFACE|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30)
|
||||
strip_delay = 60
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100)
|
||||
strip_delay = 50
|
||||
equip_delay_other = 50
|
||||
clothing_flags = SNUG_FIT
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
dog_fashion = /datum/dog_fashion/head/blue_wizard
|
||||
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
if(!isinhands)
|
||||
if(damaged_clothes)
|
||||
. += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform")
|
||||
IF_HAS_BLOOD_DNA(src)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "uniformblood")
|
||||
if(blood_DNA)
|
||||
. += mutable_appearance('icons/effects/blood.dmi', "uniformblood", color = blood_DNA_to_color())
|
||||
if(accessory_overlay)
|
||||
. += accessory_overlay
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/datum/component/storage/detached_pockets
|
||||
|
||||
/obj/item/clothing/accessory/proc/attach(obj/item/clothing/under/U, user)
|
||||
GET_COMPONENT(storage, /datum/component/storage)
|
||||
var/datum/component/storage/storage = GetComponent(/datum/component/storage)
|
||||
if(storage)
|
||||
if(SEND_SIGNAL(U, COMSIG_CONTAINS_STORAGE))
|
||||
return FALSE
|
||||
|
||||
@@ -715,8 +715,9 @@
|
||||
name = "gear harness"
|
||||
desc = "A simple, inconspicuous harness replacement for a jumpsuit."
|
||||
icon_state = "gear_harness"
|
||||
item_state = "gear_harness" //We dont use golem do to being a item, item without faces making it default to error suit sprites.
|
||||
item_state = "gear_harness"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/durathread
|
||||
name = "durathread jumpsuit"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/datum/crafting_recipe
|
||||
var/name = "" //in-game display name
|
||||
var/reqs[] = list() //type paths of items consumed associated with how many are needed
|
||||
@@ -9,956 +8,4 @@
|
||||
var/chem_catalysts[] = list() //like tools but for reagents
|
||||
var/category = CAT_NONE //where it shows up in the crafting UI
|
||||
var/subcategory = CAT_NONE
|
||||
var/always_availible = TRUE //Set to FALSE if it needs to be learned first.
|
||||
|
||||
/datum/crafting_recipe/pin_removal
|
||||
name = "Pin Removal"
|
||||
result = /obj/item/gun
|
||||
reqs = list(/obj/item/gun = 1)
|
||||
parts = list(/obj/item/gun = 1)
|
||||
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
time = 50
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/IED
|
||||
name = "IED"
|
||||
result = /obj/item/grenade/iedcasing
|
||||
reqs = list(/datum/reagent/fuel = 50,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/assembly/igniter = 1,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans = 1)
|
||||
parts = list(/obj/item/reagent_containers/food/drinks/soda_cans = 1)
|
||||
time = 15
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/lance
|
||||
name = "Explosive Lance (Grenade)"
|
||||
result = /obj/item/twohanded/spear
|
||||
reqs = list(/obj/item/twohanded/spear = 1,
|
||||
/obj/item/grenade = 1)
|
||||
parts = list(/obj/item/twohanded/spear = 1,
|
||||
/obj/item/grenade = 1)
|
||||
time = 15
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/strobeshield
|
||||
name = "Strobe Shield"
|
||||
result = /obj/item/assembly/flash/shield
|
||||
reqs = list(/obj/item/wallframe/flasher = 1,
|
||||
/obj/item/assembly/flash/handheld = 1,
|
||||
/obj/item/shield/riot = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/makeshiftshield
|
||||
name = "Makeshift Metal Shield"
|
||||
result = /obj/item/shield/makeshift
|
||||
reqs = list(/obj/item/stack/cable_coil = 30,
|
||||
/obj/item/stack/sheet/metal = 10,
|
||||
/obj/item/stack/sheet/cloth = 2,
|
||||
/obj/item/stack/sheet/leather = 3)
|
||||
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
time = 100
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/molotov
|
||||
name = "Molotov"
|
||||
result = /obj/item/reagent_containers/food/drinks/bottle/molotov
|
||||
reqs = list(/obj/item/reagent_containers/rag = 1,
|
||||
/obj/item/reagent_containers/food/drinks/bottle = 1)
|
||||
parts = list(/obj/item/reagent_containers/food/drinks/bottle = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/stunprod
|
||||
name = "Stunprod"
|
||||
result = /obj/item/melee/baton/cattleprod
|
||||
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
|
||||
/obj/item/stack/rods = 1,
|
||||
/obj/item/assembly/igniter = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/teleprod
|
||||
name = "Teleprod"
|
||||
result = /obj/item/melee/baton/cattleprod/teleprod
|
||||
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
|
||||
/obj/item/stack/rods = 1,
|
||||
/obj/item/assembly/igniter = 1,
|
||||
/obj/item/stack/ore/bluespace_crystal = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/bola
|
||||
name = "Bola"
|
||||
result = /obj/item/restraints/legcuffs/bola
|
||||
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
|
||||
/obj/item/stack/sheet/metal = 6)
|
||||
time = 20//15 faster than crafting them by hand!
|
||||
category= CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/tailclub
|
||||
name = "Tail Club"
|
||||
result = /obj/item/tailclub
|
||||
reqs = list(/obj/item/organ/tail/lizard = 1,
|
||||
/obj/item/stack/sheet/metal = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/tailwhip
|
||||
name = "Liz O' Nine Tails"
|
||||
result = /obj/item/melee/chainofcommand/tailwhip
|
||||
reqs = list(/obj/item/organ/tail/lizard = 1,
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/catwhip
|
||||
name = "Cat O' Nine Tails"
|
||||
result = /obj/item/melee/chainofcommand/tailwhip/kitty
|
||||
reqs = list(/obj/item/organ/tail/cat = 1,
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/minigun
|
||||
name = "Laser Minigun"
|
||||
result = /obj/item/minigunpack2
|
||||
reqs = list(/obj/item/gun/energy/laser/carbine = 3,
|
||||
/obj/item/stack/sheet/plasteel = 5,
|
||||
/obj/item/stack/cable_coil = 30,
|
||||
/obj/item/stock_parts/cell/bluespace = 2)
|
||||
tools = list(TOOL_WIRECUTTER, TOOL_SCREWDRIVER, TOOL_WELDER)
|
||||
time = 150
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/ed209
|
||||
name = "ED209"
|
||||
result = /mob/living/simple_animal/bot/ed209
|
||||
reqs = list(/obj/item/robot_suit = 1,
|
||||
/obj/item/clothing/head/helmet = 1,
|
||||
/obj/item/clothing/suit/armor/vest = 1,
|
||||
/obj/item/bodypart/l_leg/robot = 1,
|
||||
/obj/item/bodypart/r_leg/robot = 1,
|
||||
/obj/item/stack/sheet/metal = 1,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/gun/energy/e_gun/advtaser = 1,
|
||||
/obj/item/stock_parts/cell = 1,
|
||||
/obj/item/assembly/prox_sensor = 1)
|
||||
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER)
|
||||
time = 60
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/secbot
|
||||
name = "Secbot"
|
||||
result = /mob/living/simple_animal/bot/secbot
|
||||
reqs = list(/obj/item/assembly/signaler = 1,
|
||||
/obj/item/clothing/head/helmet/sec = 1,
|
||||
/obj/item/melee/baton = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1)
|
||||
tools = list(TOOL_WELDER)
|
||||
time = 60
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/cleanbot
|
||||
name = "Cleanbot"
|
||||
result = /mob/living/simple_animal/bot/cleanbot
|
||||
reqs = list(/obj/item/reagent_containers/glass/bucket = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1)
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/floorbot
|
||||
name = "Floorbot"
|
||||
result = /mob/living/simple_animal/bot/floorbot
|
||||
reqs = list(/obj/item/storage/toolbox/mechanical = 1,
|
||||
/obj/item/stack/tile/plasteel = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1)
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/medbot
|
||||
name = "Medbot"
|
||||
result = /mob/living/simple_animal/bot/medbot
|
||||
reqs = list(/obj/item/healthanalyzer = 1,
|
||||
/obj/item/storage/firstaid = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1)
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/honkbot
|
||||
name = "Honkbot"
|
||||
result = /mob/living/simple_animal/bot/honkbot
|
||||
reqs = list(/obj/item/storage/box/clown = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/bikehorn/ = 1)
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/Firebot
|
||||
name = "Firebot"
|
||||
result = /mob/living/simple_animal/bot/firebot
|
||||
reqs = list(/obj/item/extinguisher = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/clothing/head/hardhat/red = 1)
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/potatos
|
||||
name = "Potat-OS"
|
||||
reqs = list(/obj/item/stack/cable_coil = 1, /obj/item/stack/rods = 1, /obj/item/reagent_containers/food/snacks/grown/potato = 1, /obj/item/aicard = 1 )
|
||||
result = /obj/item/aicard/potato
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
|
||||
name = "Pneumatic Cannon"
|
||||
result = /obj/item/pneumatic_cannon/ghetto
|
||||
tools = list(TOOL_WELDER, TOOL_WRENCH)
|
||||
reqs = list(/obj/item/stack/sheet/metal = 4,
|
||||
/obj/item/stack/packageWrap = 8,
|
||||
/obj/item/pipe = 2)
|
||||
time = 300
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/flamethrower
|
||||
name = "Flamethrower"
|
||||
result = /obj/item/flamethrower
|
||||
reqs = list(/obj/item/weldingtool = 1,
|
||||
/obj/item/assembly/igniter = 1,
|
||||
/obj/item/stack/rods = 1)
|
||||
parts = list(/obj/item/assembly/igniter = 1,
|
||||
/obj/item/weldingtool = 1)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 10
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/meteorslug
|
||||
name = "Meteorslug Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/meteorslug
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
|
||||
/obj/item/rcd_ammo = 1,
|
||||
/obj/item/stock_parts/manipulator = 2)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/pulseslug
|
||||
name = "Pulse Slug Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/pulseslug
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
|
||||
/obj/item/stock_parts/capacitor/adv = 2,
|
||||
/obj/item/stock_parts/micro_laser/ultra = 1)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/dragonsbreath
|
||||
name = "Dragonsbreath Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/dragonsbreath
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /datum/reagent/phosphorus = 5)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/frag12
|
||||
name = "FRAG-12 Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/frag12
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
|
||||
/datum/reagent/glycerol = 5,
|
||||
/datum/reagent/toxin/acid = 5,
|
||||
/datum/reagent/toxin/acid/fluacid = 5)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/ionslug
|
||||
name = "Ion Scatter Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/ion
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
|
||||
/obj/item/stock_parts/micro_laser/ultra = 1,
|
||||
/obj/item/stock_parts/subspace/crystal = 1)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/improvisedslug
|
||||
name = "Improvised Shotgun Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/improvised
|
||||
reqs = list(/obj/item/grenade/chem_grenade = 1,
|
||||
/obj/item/stack/sheet/metal = 1,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/datum/reagent/fuel = 10)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/laserslug
|
||||
name = "Scatter Laser Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/laserslug
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
|
||||
/obj/item/stock_parts/capacitor/adv = 1,
|
||||
/obj/item/stock_parts/micro_laser/high = 1)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/ishotgun
|
||||
name = "Improvised Shotgun"
|
||||
result = /obj/item/gun/ballistic/revolver/doublebarrel/improvised
|
||||
reqs = list(/obj/item/weaponcrafting/receiver = 1,
|
||||
/obj/item/pipe = 1,
|
||||
/obj/item/weaponcrafting/stock = 1,
|
||||
/obj/item/stack/packageWrap = 5)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 100
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/irifle
|
||||
name = "Improvised Rifle(7.62mm)"
|
||||
result = /obj/item/gun/ballistic/shotgun/boltaction/improvised
|
||||
reqs = list(/obj/item/weaponcrafting/receiver = 1,
|
||||
/obj/item/pipe = 2,
|
||||
/obj/item/weaponcrafting/stock = 1,
|
||||
/obj/item/stack/packageWrap = 5)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 100
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/chainsaw
|
||||
name = "Chainsaw"
|
||||
result = /obj/item/twohanded/required/chainsaw
|
||||
reqs = list(/obj/item/circular_saw = 1,
|
||||
/obj/item/stack/cable_coil = 3,
|
||||
/obj/item/stack/sheet/plasteel = 5)
|
||||
tools = list(TOOL_WELDER)
|
||||
time = 50
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/spear
|
||||
name = "Spear"
|
||||
result = /obj/item/twohanded/spear
|
||||
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
|
||||
/obj/item/shard = 1,
|
||||
/obj/item/stack/rods = 1)
|
||||
parts = list(/obj/item/shard = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/spooky_camera
|
||||
name = "Camera Obscura"
|
||||
result = /obj/item/camera/spooky
|
||||
time = 15
|
||||
reqs = list(/obj/item/camera = 1,
|
||||
/datum/reagent/water/holywater = 10)
|
||||
parts = list(/obj/item/camera = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/skateboard
|
||||
name = "Skateboard"
|
||||
result = /obj/vehicle/ridden/scooter/skateboard
|
||||
time = 60
|
||||
reqs = list(/obj/item/stack/sheet/metal = 5,
|
||||
/obj/item/stack/rods = 10)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/scooter
|
||||
name = "Scooter"
|
||||
result = /obj/vehicle/ridden/scooter
|
||||
time = 65
|
||||
reqs = list(/obj/item/stack/sheet/metal = 5,
|
||||
/obj/item/stack/rods = 12)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/mousetrap
|
||||
name = "Mouse Trap"
|
||||
result = /obj/item/assembly/mousetrap
|
||||
time = 10
|
||||
reqs = list(/obj/item/stack/sheet/cardboard = 1,
|
||||
/obj/item/stack/rods = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/papersack
|
||||
name = "Paper Sack"
|
||||
result = /obj/item/storage/box/papersack
|
||||
time = 10
|
||||
reqs = list(/obj/item/paper = 5)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/flashlight_eyes
|
||||
name = "Flashlight Eyes"
|
||||
result = /obj/item/organ/eyes/robotic/flashlight
|
||||
time = 10
|
||||
reqs = list(
|
||||
/obj/item/flashlight = 2,
|
||||
/obj/item/restraints/handcuffs/cable = 1
|
||||
)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/paperframes
|
||||
name = "Paper Frames"
|
||||
result = /obj/item/stack/sheet/paperframes/five
|
||||
time = 10
|
||||
reqs = list(/obj/item/stack/sheet/mineral/wood = 5, /obj/item/paper = 20)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/naturalpaper
|
||||
name = "Hand-Pressed Paper"
|
||||
time = 30
|
||||
reqs = list(/datum/reagent/water = 50, /obj/item/stack/sheet/mineral/wood = 1)
|
||||
tools = list(/obj/item/hatchet)
|
||||
result = /obj/item/paper_bin/bundlenatural
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/toysword
|
||||
name = "Toy Sword"
|
||||
reqs = list(/obj/item/light/bulb = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4)
|
||||
result = /obj/item/toy/sword
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/blackcarpet
|
||||
name = "Black Carpet"
|
||||
reqs = list(/obj/item/stack/tile/carpet = 50, /obj/item/toy/crayon/black = 1)
|
||||
result = /obj/item/stack/tile/carpet/black/fifty
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/showercurtain
|
||||
name = "Shower Curtains"
|
||||
reqs = list(/obj/item/stack/sheet/cloth = 2, /obj/item/stack/sheet/plastic = 2, /obj/item/stack/rods = 1)
|
||||
result = /obj/structure/curtain
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/extendohand
|
||||
name = "Extendo-Hand"
|
||||
reqs = list(/obj/item/bodypart/r_arm/robot = 1, /obj/item/clothing/gloves/boxing = 1)
|
||||
result = /obj/item/extendohand
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bluespacehonker
|
||||
name = "Bluespace Bike horn"
|
||||
result = /obj/item/bikehorn/bluespacehonker
|
||||
time = 10
|
||||
reqs = list(/obj/item/stack/ore/bluespace_crystal = 1,
|
||||
/obj/item/toy/crayon/blue = 1,
|
||||
/obj/item/bikehorn = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/toyneb
|
||||
name = "Non-Euplastic Blade"
|
||||
reqs = list(/obj/item/light/tube = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4)
|
||||
result = /obj/item/toy/sword/cx
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/chemical_payload
|
||||
name = "Chemical Payload (C4)"
|
||||
result = /obj/item/bombcore/chemical
|
||||
reqs = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/grenade/plastic/c4 = 1,
|
||||
/obj/item/grenade/chem_grenade = 2
|
||||
)
|
||||
parts = list(/obj/item/stock_parts/matter_bin = 1, /obj/item/grenade/chem_grenade = 2)
|
||||
time = 30
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/chemical_payload2
|
||||
name = "Chemical Payload (Gibtonite)"
|
||||
result = /obj/item/bombcore/chemical
|
||||
reqs = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/twohanded/required/gibtonite = 1,
|
||||
/obj/item/grenade/chem_grenade = 2
|
||||
)
|
||||
parts = list(/obj/item/stock_parts/matter_bin = 1, /obj/item/grenade/chem_grenade = 2)
|
||||
time = 50
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/bonearmor
|
||||
name = "Bone Armor"
|
||||
result = /obj/item/clothing/suit/armor/bone
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/bone = 6)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonetalisman
|
||||
name = "Bone Talisman"
|
||||
result = /obj/item/clothing/accessory/talisman
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/bone = 2,
|
||||
/obj/item/stack/sheet/sinew = 1)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonecodpiece
|
||||
name = "Skull Codpiece"
|
||||
result = /obj/item/clothing/accessory/skullcodpiece
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/bone = 2,
|
||||
/obj/item/stack/sheet/animalhide/goliath_hide = 1)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bracers
|
||||
name = "Bone Bracers"
|
||||
result = /obj/item/clothing/gloves/bracer
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/bone = 2,
|
||||
/obj/item/stack/sheet/sinew = 1)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/skullhelm
|
||||
name = "Skull Helmet"
|
||||
result = /obj/item/clothing/head/helmet/skull
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/bone = 4)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/goliathcloak
|
||||
name = "Goliath Cloak"
|
||||
result = /obj/item/clothing/suit/hooded/cloak/goliath
|
||||
time = 50
|
||||
reqs = list(/obj/item/stack/sheet/leather = 2,
|
||||
/obj/item/stack/sheet/sinew = 2,
|
||||
/obj/item/stack/sheet/animalhide/goliath_hide = 2) //it takes 4 goliaths to make 1 cloak if the plates are skinned
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/drakecloak
|
||||
name = "Ash Drake Armour"
|
||||
result = /obj/item/clothing/suit/hooded/cloak/drake
|
||||
time = 60
|
||||
reqs = list(/obj/item/stack/sheet/bone = 10,
|
||||
/obj/item/stack/sheet/sinew = 2,
|
||||
/obj/item/stack/sheet/animalhide/ashdrake = 5)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonebag
|
||||
name = "Bone Satchel"
|
||||
result = /obj/item/storage/backpack/satchel/bone
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/bone = 3,
|
||||
/obj/item/stack/sheet/sinew = 2)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/gold_horn
|
||||
name = "Golden Bike Horn"
|
||||
result = /obj/item/bikehorn/golden
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/mineral/bananium = 5,
|
||||
/obj/item/bikehorn = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bonedagger
|
||||
name = "Bone Dagger"
|
||||
result = /obj/item/kitchen/knife/combat/bone
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/bone = 2)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonespear
|
||||
name = "Bone Spear"
|
||||
result = /obj/item/twohanded/bonespear
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/bone = 4,
|
||||
/obj/item/stack/sheet/sinew = 1)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/boneaxe
|
||||
name = "Bone Axe"
|
||||
result = /obj/item/twohanded/fireaxe/boneaxe
|
||||
time = 50
|
||||
reqs = list(/obj/item/stack/sheet/bone = 6,
|
||||
/obj/item/stack/sheet/sinew = 3)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonfire
|
||||
name = "Bonfire"
|
||||
time = 60
|
||||
reqs = list(/obj/item/grown/log = 5)
|
||||
result = /obj/structure/bonfire
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/headpike
|
||||
name = "Spike Head (Glass Spear)"
|
||||
time = 65
|
||||
reqs = list(/obj/item/twohanded/spear = 1,
|
||||
/obj/item/bodypart/head = 1)
|
||||
parts = list(/obj/item/bodypart/head = 1,
|
||||
/obj/item/twohanded/spear = 1)
|
||||
result = /obj/structure/headpike
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/headpikebone
|
||||
name = "Spike Head (Bone Spear)"
|
||||
time = 65
|
||||
reqs = list(/obj/item/twohanded/bonespear = 1,
|
||||
/obj/item/bodypart/head = 1)
|
||||
parts = list(/obj/item/bodypart/head = 1,
|
||||
/obj/item/twohanded/bonespear = 1)
|
||||
result = /obj/structure/headpike/bone
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/smallcarton
|
||||
name = "Small Carton"
|
||||
result = /obj/item/reagent_containers/food/drinks/sillycup/smallcarton
|
||||
time = 10
|
||||
reqs = list(/obj/item/stack/sheet/cardboard = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/pressureplate
|
||||
name = "Pressure Plate"
|
||||
result = /obj/item/pressure_plate
|
||||
time = 5
|
||||
reqs = list(/obj/item/stack/sheet/metal = 1,
|
||||
/obj/item/stack/tile/plasteel = 1,
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/assembly/igniter = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
|
||||
/datum/crafting_recipe/wheelchair
|
||||
name = "Wheelchair"
|
||||
result = /obj/vehicle/ridden/wheelchair
|
||||
reqs = list(/obj/item/stack/sheet/plasteel = 2,
|
||||
/obj/item/stack/rods = 8)
|
||||
time = 100
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/rcl
|
||||
name = "Makeshift Rapid Cable Layer"
|
||||
result = /obj/item/twohanded/rcl/ghetto
|
||||
time = 40
|
||||
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH)
|
||||
reqs = list(/obj/item/stack/sheet/metal = 15)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/mummy
|
||||
name = "Mummification Bandages (Mask)"
|
||||
result = /obj/item/clothing/mask/mummy
|
||||
time = 10
|
||||
tools = list(/obj/item/nullrod/egyptian)
|
||||
reqs = list(/obj/item/stack/sheet/cloth = 2)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/mummy/body
|
||||
name = "Mummification Bandages (Body)"
|
||||
result = /obj/item/clothing/under/mummy
|
||||
reqs = list(/obj/item/stack/sheet/cloth = 5)
|
||||
|
||||
/datum/crafting_recipe/guillotine
|
||||
name = "Guillotine"
|
||||
result = /obj/structure/guillotine
|
||||
time = 150 // Building a functioning guillotine takes time
|
||||
reqs = list(/obj/item/stack/sheet/plasteel = 3,
|
||||
/obj/item/stack/sheet/mineral/wood = 20,
|
||||
/obj/item/stack/cable_coil = 10)
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/femur_breaker
|
||||
name = "Femur Breaker"
|
||||
result = /obj/structure/femur_breaker
|
||||
time = 150
|
||||
reqs = list(/obj/item/stack/sheet/metal = 20,
|
||||
/obj/item/stack/cable_coil = 30)
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/lizardhat
|
||||
name = "Lizard Cloche Hat"
|
||||
result = /obj/item/clothing/head/lizard
|
||||
time = 10
|
||||
reqs = list(/obj/item/organ/tail/lizard = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/lizardhat_alternate
|
||||
name = "Lizard Cloche Hat"
|
||||
result = /obj/item/clothing/head/lizard
|
||||
time = 10
|
||||
reqs = list(/obj/item/stack/sheet/animalhide/lizard = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/kittyears
|
||||
name = "Kitty Ears"
|
||||
result = /obj/item/clothing/head/kitty/genuine
|
||||
time = 10
|
||||
reqs = list(/obj/item/organ/tail/cat = 1,
|
||||
/obj/item/organ/ears/cat = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/hudsunsec
|
||||
name = "Security HUDsunglasses"
|
||||
result = /obj/item/clothing/glasses/hud/security/sunglasses
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/security = 1,
|
||||
/obj/item/clothing/glasses/sunglasses = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/hudsunsecremoval
|
||||
name = "Security HUD removal"
|
||||
result = /obj/item/clothing/glasses/sunglasses
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/security/sunglasses = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/hudsunmed
|
||||
name = "Medical HUDsunglasses"
|
||||
result = /obj/item/clothing/glasses/hud/health/sunglasses
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/health = 1,
|
||||
/obj/item/clothing/glasses/sunglasses = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/hudsunmedremoval
|
||||
name = "Medical HUD removal"
|
||||
result = /obj/item/clothing/glasses/sunglasses
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/health/sunglasses = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/beergoggles
|
||||
name = "Beer Goggles"
|
||||
result = /obj/item/clothing/glasses/sunglasses/reagent
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/science = 1,
|
||||
/obj/item/clothing/glasses/sunglasses = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/beergogglesremoval
|
||||
name = "Beer Goggles removal"
|
||||
result = /obj/item/clothing/glasses/sunglasses
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/sunglasses/reagent = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/ghostsheet
|
||||
name = "Ghost Sheet"
|
||||
result = /obj/item/clothing/suit/ghost_sheet
|
||||
time = 5
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/bedsheet = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/briefcase
|
||||
name = "Hand made Briefcase"
|
||||
result = /obj/item/storage/briefcase/crafted
|
||||
time = 35
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/stack/sheet/cardboard = 1,
|
||||
/obj/item/stack/sheet/cloth = 2,
|
||||
/obj/item/stack/sheet/leather = 5)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/aitater
|
||||
name = "intelliTater"
|
||||
result = /obj/item/aicard/aitater
|
||||
time = 30
|
||||
reqs = list(/obj/item/aicard = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/potato = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/paperwork
|
||||
name = "Filed Paper Work"
|
||||
result = /obj/item/folder/paperwork_correct
|
||||
time = 60 //Takes time for people to file and complete paper work!
|
||||
reqs = list(/obj/item/pen = 1,
|
||||
/obj/item/folder/paperwork = 2)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/ghettojetpack
|
||||
name = "Improvised Jetpack"
|
||||
result = /obj/item/tank/jetpack/improvised
|
||||
time = 30
|
||||
reqs = list(/obj/item/tank/internals/oxygen = 2,
|
||||
/obj/item/extinguisher = 1,
|
||||
/obj/item/pipe = 3,
|
||||
/obj/item/stack/cable_coil = 30)
|
||||
category = CAT_MISC
|
||||
tools = list(TOOL_WRENCH, TOOL_WELDER, TOOL_WIRECUTTER)
|
||||
|
||||
/datum/crafting_recipe/goldenbox
|
||||
name = "Gold Plated Toolbox"
|
||||
result = /obj/item/storage/toolbox/gold_fake
|
||||
reqs = list(/obj/item/stack/sheet/cardboard = 1, //so we dont null items in crafting
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/sheet/mineral/gold = 1,
|
||||
/obj/item/stock_parts/cell = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bronze_driver
|
||||
name = "Bronze Plated Screwdriver"
|
||||
result = /obj/item/screwdriver/bronze
|
||||
reqs = list(/obj/item/screwdriver = 1,
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/tile/bronze = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bronze_welder
|
||||
name = "Bronze Plated Welding Tool"
|
||||
result = /obj/item/weldingtool/bronze
|
||||
reqs = list(/obj/item/weldingtool = 1,
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/tile/bronze = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bronze_wirecutters
|
||||
name = "Bronze Plated Wirecutters"
|
||||
result = /obj/item/wirecutters/bronze
|
||||
reqs = list(/obj/item/wirecutters = 1,
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/tile/bronze = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bronze_crowbar
|
||||
name = "Bronze Plated Crowbar"
|
||||
result = /obj/item/crowbar/bronze
|
||||
reqs = list(/obj/item/crowbar = 1,
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/tile/bronze = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bronze_wrench
|
||||
name = "Bronze Plated Wrench"
|
||||
result = /obj/item/wrench/bronze
|
||||
reqs = list(/obj/item/wrench = 1,
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/tile/bronze = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/smartdart
|
||||
name = "Medical smartdart"
|
||||
result = /obj/item/reagent_containers/syringe/dart
|
||||
reqs = list(/obj/item/stack/sheet/metal = 1,
|
||||
/obj/item/stack/sheet/glass = 1,
|
||||
/obj/item/stack/sheet/plastic = 1)
|
||||
time = 10
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/medolier
|
||||
name = "Medolier"
|
||||
result = /obj/item/storage/belt/medolier
|
||||
reqs = list(/obj/item/stack/sheet/metal = 2,
|
||||
/obj/item/stack/sheet/cloth = 3,
|
||||
/obj/item/stack/sheet/plastic = 4)
|
||||
time = 30
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/smartdartgun
|
||||
name = "Smart dartgun"
|
||||
result = /obj/item/gun/syringe/dart
|
||||
reqs = list(/obj/item/stack/sheet/metal = 10,
|
||||
/obj/item/stack/sheet/glass = 5,
|
||||
/obj/item/tank/internals = 1,
|
||||
/obj/item/reagent_containers/glass/beaker = 1,
|
||||
/obj/item/stack/sheet/plastic = 5,
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
time = 150 //It's a gun
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/rapiddartgun
|
||||
name = "Rapid Smart dartgun"
|
||||
result = /obj/item/gun/syringe/dart/rapiddart
|
||||
reqs = list(
|
||||
/obj/item/gun/syringe/dart = 1,
|
||||
/obj/item/stack/sheet/plastic = 5,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/reagent_containers/glass/beaker = 1
|
||||
)
|
||||
parts = list(/obj/item/reagent_containers/glass/beaker = 1)
|
||||
time = 120 //Modifying your gun
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/durathread_duffelbag
|
||||
name = "Durathread Dufflebag"
|
||||
result = /obj/item/storage/backpack/duffelbag/durathread
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 7,
|
||||
/obj/item/stack/sheet/leather = 3)
|
||||
time = 70
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/durathread_toolbelt
|
||||
name = "Durathread Toolbelt"
|
||||
result = /obj/item/storage/belt/durathread
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 5,
|
||||
/obj/item/stack/sheet/leather = 1)
|
||||
time = 30
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/durathread_bandolier
|
||||
name = "Durathread Bandolier"
|
||||
result = /obj/item/storage/belt/bandolier/durathread
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 6,
|
||||
/obj/item/stack/sheet/leather = 2)
|
||||
time = 50
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/durathread_helmet
|
||||
name = "Makeshift Durathread Helmet"
|
||||
result = /obj/item/clothing/head/helmet/durathread
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 4,
|
||||
/obj/item/stack/sheet/leather = 2)
|
||||
time = 30
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/durathread_vest
|
||||
name = "Makeshift Durathread Armour"
|
||||
result = /obj/item/clothing/suit/armor/vest/durathread
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 6,
|
||||
/obj/item/stack/sheet/leather = 3)
|
||||
time = 50
|
||||
category = CAT_CLOTHING
|
||||
var/always_availible = TRUE //Set to FALSE if it needs to be learned first.
|
||||
@@ -0,0 +1,160 @@
|
||||
/datum/crafting_recipe/mummy
|
||||
name = "Mummification Bandages (Mask)"
|
||||
result = /obj/item/clothing/mask/mummy
|
||||
time = 10
|
||||
tools = list(/obj/item/nullrod/egyptian)
|
||||
reqs = list(/obj/item/stack/sheet/cloth = 2)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/mummy/body
|
||||
name = "Mummification Bandages (Body)"
|
||||
result = /obj/item/clothing/under/mummy
|
||||
reqs = list(/obj/item/stack/sheet/cloth = 5)
|
||||
|
||||
/datum/crafting_recipe/lizardhat
|
||||
name = "Lizard Cloche Hat"
|
||||
result = /obj/item/clothing/head/lizard
|
||||
time = 10
|
||||
reqs = list(/obj/item/organ/tail/lizard = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/lizardhat_alternate
|
||||
name = "Lizard Cloche Hat"
|
||||
result = /obj/item/clothing/head/lizard
|
||||
time = 10
|
||||
reqs = list(/obj/item/stack/sheet/animalhide/lizard = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/kittyears
|
||||
name = "Kitty Ears"
|
||||
result = /obj/item/clothing/head/kitty/genuine
|
||||
time = 10
|
||||
reqs = list(/obj/item/organ/tail/cat = 1,
|
||||
/obj/item/organ/ears/cat = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/hudsunsec
|
||||
name = "Security HUDsunglasses"
|
||||
result = /obj/item/clothing/glasses/hud/security/sunglasses
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/security = 1,
|
||||
/obj/item/clothing/glasses/sunglasses = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/hudsunsecremoval
|
||||
name = "Security HUD removal"
|
||||
result = /obj/item/clothing/glasses/sunglasses
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/security/sunglasses = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/hudsunmed
|
||||
name = "Medical HUDsunglasses"
|
||||
result = /obj/item/clothing/glasses/hud/health/sunglasses
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/health = 1,
|
||||
/obj/item/clothing/glasses/sunglasses = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/hudsunmedremoval
|
||||
name = "Medical HUD removal"
|
||||
result = /obj/item/clothing/glasses/sunglasses
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/hud/health/sunglasses = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/beergoggles
|
||||
name = "Beer Goggles"
|
||||
result = /obj/item/clothing/glasses/sunglasses/reagent
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/science = 1,
|
||||
/obj/item/clothing/glasses/sunglasses = 1,
|
||||
/obj/item/stack/cable_coil = 5)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/beergogglesremoval
|
||||
name = "Beer Goggles removal"
|
||||
result = /obj/item/clothing/glasses/sunglasses
|
||||
time = 20
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/clothing/glasses/sunglasses/reagent = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/ghostsheet
|
||||
name = "Ghost Sheet"
|
||||
result = /obj/item/clothing/suit/ghost_sheet
|
||||
time = 5
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/bedsheet = 1)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/briefcase
|
||||
name = "Hand made Briefcase"
|
||||
result = /obj/item/storage/briefcase/crafted
|
||||
time = 35
|
||||
tools = list(TOOL_WIRECUTTER)
|
||||
reqs = list(/obj/item/stack/sheet/cardboard = 1,
|
||||
/obj/item/stack/sheet/cloth = 2,
|
||||
/obj/item/stack/sheet/leather = 5)
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/medolier
|
||||
name = "Medolier"
|
||||
result = /obj/item/storage/belt/medolier
|
||||
reqs = list(/obj/item/stack/sheet/metal = 2,
|
||||
/obj/item/stack/sheet/cloth = 3,
|
||||
/obj/item/stack/sheet/plastic = 4)
|
||||
time = 30
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/durathread_duffelbag
|
||||
name = "Durathread Dufflebag"
|
||||
result = /obj/item/storage/backpack/duffelbag/durathread
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 7,
|
||||
/obj/item/stack/sheet/leather = 3)
|
||||
time = 70
|
||||
always_availible = TRUE
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/durathread_toolbelt
|
||||
name = "Durathread Toolbelt"
|
||||
result = /obj/item/storage/belt/durathread
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 5,
|
||||
/obj/item/stack/sheet/leather = 2)
|
||||
time = 30
|
||||
always_availible = TRUE
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/durathread_bandolier
|
||||
name = "Durathread Bandolier"
|
||||
result = /obj/item/storage/belt/bandolier/durathread
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 6,
|
||||
/obj/item/stack/sheet/leather = 2)
|
||||
time = 50
|
||||
always_availible = TRUE
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/durathread_helmet
|
||||
name = "Makeshift Durathread Helmet"
|
||||
result = /obj/item/clothing/head/helmet/durathread
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 4,
|
||||
/obj/item/stack/sheet/leather = 2)
|
||||
time = 30
|
||||
always_availible = TRUE
|
||||
category = CAT_CLOTHING
|
||||
|
||||
/datum/crafting_recipe/durathread_vest
|
||||
name = "Makeshift Durathread Armour"
|
||||
result = /obj/item/clothing/suit/armor/vest/durathread
|
||||
reqs = list(/obj/item/stack/sheet/durathread = 6,
|
||||
/obj/item/stack/sheet/leather = 3)
|
||||
time = 50
|
||||
always_availible = TRUE
|
||||
category = CAT_CLOTHING
|
||||
@@ -0,0 +1,325 @@
|
||||
/////////////////
|
||||
//Large Objects//
|
||||
/////////////////
|
||||
|
||||
/datum/crafting_recipe/showercurtain
|
||||
name = "Shower Curtains"
|
||||
reqs = list(/obj/item/stack/sheet/cloth = 2,
|
||||
/obj/item/stack/sheet/plastic = 2,
|
||||
/obj/item/stack/rods = 1)
|
||||
result = /obj/structure/curtain
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/guillotine
|
||||
name = "Guillotine"
|
||||
result = /obj/structure/guillotine
|
||||
time = 150 // Building a functioning guillotine takes time
|
||||
reqs = list(/obj/item/stack/sheet/plasteel = 3,
|
||||
/obj/item/stack/sheet/mineral/wood = 20,
|
||||
/obj/item/stack/cable_coil = 10)
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/femur_breaker
|
||||
name = "Femur Breaker"
|
||||
result = /obj/structure/femur_breaker
|
||||
time = 150
|
||||
reqs = list(/obj/item/stack/sheet/metal = 20,
|
||||
/obj/item/stack/cable_coil = 30)
|
||||
tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER)
|
||||
category = CAT_MISC
|
||||
|
||||
///////////////////
|
||||
//Tools & Storage//
|
||||
///////////////////
|
||||
|
||||
/datum/crafting_recipe/ghettojetpack
|
||||
name = "Improvised Jetpack"
|
||||
result = /obj/item/tank/jetpack/improvised
|
||||
time = 30
|
||||
reqs = list(/obj/item/tank/internals/oxygen = 2,
|
||||
/obj/item/extinguisher = 1,
|
||||
/obj/item/pipe = 3,
|
||||
/obj/item/stack/cable_coil = 30)
|
||||
category = CAT_MISC
|
||||
tools = list(TOOL_WRENCH, TOOL_WELDER, TOOL_WIRECUTTER)
|
||||
|
||||
/datum/crafting_recipe/goldenbox
|
||||
name = "Gold Plated Toolbox"
|
||||
result = /obj/item/storage/toolbox/gold_fake
|
||||
reqs = list(/obj/item/stack/sheet/cardboard = 1, //so we dont null items in crafting
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/sheet/mineral/gold = 1,
|
||||
/obj/item/stock_parts/cell = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bronze_driver
|
||||
name = "Bronze Plated Screwdriver"
|
||||
result = /obj/item/screwdriver/bronze
|
||||
reqs = list(/obj/item/screwdriver = 1,
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/tile/bronze = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bronze_welder
|
||||
name = "Bronze Plated Welding Tool"
|
||||
result = /obj/item/weldingtool/bronze
|
||||
reqs = list(/obj/item/weldingtool = 1,
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/tile/bronze = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bronze_wirecutters
|
||||
name = "Bronze Plated Wirecutters"
|
||||
result = /obj/item/wirecutters/bronze
|
||||
reqs = list(/obj/item/wirecutters = 1,
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/tile/bronze = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bronze_crowbar
|
||||
name = "Bronze Plated Crowbar"
|
||||
result = /obj/item/crowbar/bronze
|
||||
reqs = list(/obj/item/crowbar = 1,
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/tile/bronze = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bronze_wrench
|
||||
name = "Bronze Plated Wrench"
|
||||
result = /obj/item/wrench/bronze
|
||||
reqs = list(/obj/item/wrench = 1,
|
||||
/obj/item/stack/cable_coil = 10,
|
||||
/obj/item/stack/tile/bronze = 1,
|
||||
/datum/reagent/water = 15)
|
||||
time = 40
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/rcl
|
||||
name = "Makeshift Rapid Cable Layer"
|
||||
result = /obj/item/twohanded/rcl/ghetto
|
||||
time = 40
|
||||
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WRENCH)
|
||||
reqs = list(/obj/item/stack/sheet/metal = 15)
|
||||
category = CAT_MISC
|
||||
|
||||
////////////
|
||||
//Vehicles//
|
||||
////////////
|
||||
|
||||
/datum/crafting_recipe/wheelchair
|
||||
name = "Wheelchair"
|
||||
result = /obj/vehicle/ridden/wheelchair
|
||||
reqs = list(/obj/item/stack/sheet/plasteel = 2,
|
||||
/obj/item/stack/rods = 8)
|
||||
time = 100
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/skateboard
|
||||
name = "Skateboard"
|
||||
result = /obj/vehicle/ridden/scooter/skateboard
|
||||
time = 60
|
||||
reqs = list(/obj/item/stack/sheet/metal = 5,
|
||||
/obj/item/stack/rods = 10)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/scooter
|
||||
name = "Scooter"
|
||||
result = /obj/vehicle/ridden/scooter
|
||||
time = 65
|
||||
reqs = list(/obj/item/stack/sheet/metal = 5,
|
||||
/obj/item/stack/rods = 12)
|
||||
category = CAT_MISC
|
||||
|
||||
/////////
|
||||
//Toys///
|
||||
/////////
|
||||
|
||||
/datum/crafting_recipe/toysword
|
||||
name = "Toy Sword"
|
||||
reqs = list(/obj/item/light/bulb = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4)
|
||||
result = /obj/item/toy/sword
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/extendohand
|
||||
name = "Extendo-Hand"
|
||||
reqs = list(/obj/item/bodypart/r_arm/robot = 1, /obj/item/clothing/gloves/boxing = 1)
|
||||
result = /obj/item/extendohand
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/toyneb
|
||||
name = "Non-Euplastic Blade"
|
||||
reqs = list(/obj/item/light/tube = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4)
|
||||
result = /obj/item/toy/sword/cx
|
||||
category = CAT_MISC
|
||||
|
||||
////////////
|
||||
//Unsorted//
|
||||
////////////
|
||||
|
||||
/datum/crafting_recipe/blackcarpet
|
||||
name = "Black Carpet"
|
||||
reqs = list(/obj/item/stack/tile/carpet = 50, /obj/item/toy/crayon/black = 1)
|
||||
result = /obj/item/stack/tile/carpet/black/fifty
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/paperframes
|
||||
name = "Paper Frames"
|
||||
result = /obj/item/stack/sheet/paperframes/five
|
||||
time = 10
|
||||
reqs = list(/obj/item/stack/sheet/mineral/wood = 5, /obj/item/paper = 20)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/naturalpaper
|
||||
name = "Hand-Pressed Paper"
|
||||
time = 30
|
||||
reqs = list(/datum/reagent/water = 50, /obj/item/stack/sheet/mineral/wood = 1)
|
||||
tools = list(/obj/item/hatchet)
|
||||
result = /obj/item/paper_bin/bundlenatural
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bluespacehonker
|
||||
name = "Bluespace Bike horn"
|
||||
result = /obj/item/bikehorn/bluespacehonker
|
||||
time = 10
|
||||
reqs = list(/obj/item/stack/ore/bluespace_crystal = 1,
|
||||
/obj/item/toy/crayon/blue = 1,
|
||||
/obj/item/bikehorn = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/aitater
|
||||
name = "intelliTater"
|
||||
result = /obj/item/aicard/aitater
|
||||
time = 30
|
||||
reqs = list(/obj/item/aicard = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/potato = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/mousetrap
|
||||
name = "Mouse Trap"
|
||||
result = /obj/item/assembly/mousetrap
|
||||
time = 10
|
||||
reqs = list(/obj/item/stack/sheet/cardboard = 1,
|
||||
/obj/item/stack/rods = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/papersack
|
||||
name = "Paper Sack"
|
||||
result = /obj/item/storage/box/papersack
|
||||
time = 10
|
||||
reqs = list(/obj/item/paper = 5)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/flashlight_eyes
|
||||
name = "Flashlight Eyes"
|
||||
result = /obj/item/organ/eyes/robotic/flashlight
|
||||
time = 10
|
||||
reqs = list(
|
||||
/obj/item/flashlight = 2,
|
||||
/obj/item/restraints/handcuffs/cable = 1
|
||||
)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/smallcarton
|
||||
name = "Small Carton"
|
||||
result = /obj/item/reagent_containers/food/drinks/sillycup/smallcarton
|
||||
time = 10
|
||||
reqs = list(/obj/item/stack/sheet/cardboard = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/pressureplate
|
||||
name = "Pressure Plate"
|
||||
result = /obj/item/pressure_plate
|
||||
time = 5
|
||||
reqs = list(/obj/item/stack/sheet/metal = 1,
|
||||
/obj/item/stack/tile/plasteel = 1,
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/assembly/igniter = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/gold_horn
|
||||
name = "Golden Bike Horn"
|
||||
result = /obj/item/bikehorn/golden
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/mineral/bananium = 5,
|
||||
/obj/item/bikehorn = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/spooky_camera
|
||||
name = "Camera Obscura"
|
||||
result = /obj/item/camera/spooky
|
||||
time = 15
|
||||
reqs = list(/obj/item/camera = 1,
|
||||
/datum/reagent/water/holywater = 10)
|
||||
parts = list(/obj/item/camera = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/paperwork
|
||||
name = "Filed Paper Work"
|
||||
result = /obj/item/folder/paperwork_correct
|
||||
time = 10 //Takes time for people to file and complete paper work!
|
||||
tools = list(/obj/item/pen)
|
||||
reqs = list(/obj/item/folder/paperwork = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
//////////////
|
||||
//Banners/////
|
||||
//////////////
|
||||
|
||||
/datum/crafting_recipe/command_banner
|
||||
name = "Command Banner"
|
||||
result = /obj/item/banner/command/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/captainparade = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/engineering_banner
|
||||
name = "Engitopia Banner"
|
||||
result = /obj/item/banner/engineering/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/rank/engineer = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/cargo_banner
|
||||
name = "Cargonia Banner"
|
||||
result = /obj/item/banner/cargo/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/rank/cargotech = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/science_banner
|
||||
name = "Sciencia Banner"
|
||||
result = /obj/item/banner/science/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/rank/scientist = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/medical_banner
|
||||
name = "Meditopia Banner"
|
||||
result = /obj/item/banner/medical/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/rank/medical = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/security_banner
|
||||
name = "Securistan Banner"
|
||||
result = /obj/item/banner/security/mundane
|
||||
time = 40
|
||||
reqs = list(/obj/item/stack/rods = 2,
|
||||
/obj/item/clothing/under/rank/security = 1)
|
||||
category = CAT_MISC
|
||||
@@ -0,0 +1,113 @@
|
||||
/datum/crafting_recipe/bonearmor
|
||||
name = "Bone Armor"
|
||||
result = /obj/item/clothing/suit/armor/bone
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/bone = 6)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonetalisman
|
||||
name = "Bone Talisman"
|
||||
result = /obj/item/clothing/accessory/talisman
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/bone = 2,
|
||||
/obj/item/stack/sheet/sinew = 1)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonecodpiece
|
||||
name = "Skull Codpiece"
|
||||
result = /obj/item/clothing/accessory/skullcodpiece
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/bone = 2,
|
||||
/obj/item/stack/sheet/animalhide/goliath_hide = 1)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bracers
|
||||
name = "Bone Bracers"
|
||||
result = /obj/item/clothing/gloves/bracer
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/bone = 2,
|
||||
/obj/item/stack/sheet/sinew = 1)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/skullhelm
|
||||
name = "Skull Helmet"
|
||||
result = /obj/item/clothing/head/helmet/skull
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/bone = 4)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/goliathcloak
|
||||
name = "Goliath Cloak"
|
||||
result = /obj/item/clothing/suit/hooded/cloak/goliath
|
||||
time = 50
|
||||
reqs = list(/obj/item/stack/sheet/leather = 2,
|
||||
/obj/item/stack/sheet/sinew = 2,
|
||||
/obj/item/stack/sheet/animalhide/goliath_hide = 2) //it takes 4 goliaths to make 1 cloak if the plates are skinned
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/drakecloak
|
||||
name = "Ash Drake Armour"
|
||||
result = /obj/item/clothing/suit/hooded/cloak/drake
|
||||
time = 60
|
||||
reqs = list(/obj/item/stack/sheet/bone = 10,
|
||||
/obj/item/stack/sheet/sinew = 2,
|
||||
/obj/item/stack/sheet/animalhide/ashdrake = 5)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonebag
|
||||
name = "Bone Satchel"
|
||||
result = /obj/item/storage/backpack/satchel/bone
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/bone = 3,
|
||||
/obj/item/stack/sheet/sinew = 2)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonedagger
|
||||
name = "Bone Dagger"
|
||||
result = /obj/item/kitchen/knife/combat/bone
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/bone = 2)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonespear
|
||||
name = "Bone Spear"
|
||||
result = /obj/item/twohanded/bonespear
|
||||
time = 30
|
||||
reqs = list(/obj/item/stack/sheet/bone = 4,
|
||||
/obj/item/stack/sheet/sinew = 1)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/boneaxe
|
||||
name = "Bone Axe"
|
||||
result = /obj/item/twohanded/fireaxe/boneaxe
|
||||
time = 50
|
||||
reqs = list(/obj/item/stack/sheet/bone = 6,
|
||||
/obj/item/stack/sheet/sinew = 3)
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/bonfire
|
||||
name = "Bonfire"
|
||||
time = 60
|
||||
reqs = list(/obj/item/grown/log = 5)
|
||||
result = /obj/structure/bonfire
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/headpike
|
||||
name = "Spike Head (Glass Spear)"
|
||||
time = 65
|
||||
reqs = list(/obj/item/twohanded/spear = 1,
|
||||
/obj/item/bodypart/head = 1)
|
||||
parts = list(/obj/item/bodypart/head = 1,
|
||||
/obj/item/twohanded/spear = 1)
|
||||
result = /obj/structure/headpike
|
||||
category = CAT_PRIMAL
|
||||
|
||||
/datum/crafting_recipe/headpikebone
|
||||
name = "Spike Head (Bone Spear)"
|
||||
time = 65
|
||||
reqs = list(/obj/item/twohanded/bonespear = 1,
|
||||
/obj/item/bodypart/head = 1)
|
||||
parts = list(/obj/item/bodypart/head = 1,
|
||||
/obj/item/twohanded/bonespear = 1)
|
||||
result = /obj/structure/headpike/bone
|
||||
category = CAT_PRIMAL
|
||||
@@ -0,0 +1,84 @@
|
||||
|
||||
/datum/crafting_recipe/ed209
|
||||
name = "ED209"
|
||||
result = /mob/living/simple_animal/bot/ed209
|
||||
reqs = list(/obj/item/robot_suit = 1,
|
||||
/obj/item/clothing/head/helmet = 1,
|
||||
/obj/item/clothing/suit/armor/vest = 1,
|
||||
/obj/item/bodypart/l_leg/robot = 1,
|
||||
/obj/item/bodypart/r_leg/robot = 1,
|
||||
/obj/item/stack/sheet/metal = 1,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/gun/energy/e_gun/advtaser = 1,
|
||||
/obj/item/stock_parts/cell = 1,
|
||||
/obj/item/assembly/prox_sensor = 1)
|
||||
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER)
|
||||
time = 60
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/secbot
|
||||
name = "Secbot"
|
||||
result = /mob/living/simple_animal/bot/secbot
|
||||
reqs = list(/obj/item/assembly/signaler = 1,
|
||||
/obj/item/clothing/head/helmet/sec = 1,
|
||||
/obj/item/melee/baton = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1)
|
||||
tools = list(TOOL_WELDER)
|
||||
time = 60
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/cleanbot
|
||||
name = "Cleanbot"
|
||||
result = /mob/living/simple_animal/bot/cleanbot
|
||||
reqs = list(/obj/item/reagent_containers/glass/bucket = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1)
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/floorbot
|
||||
name = "Floorbot"
|
||||
result = /mob/living/simple_animal/bot/floorbot
|
||||
reqs = list(/obj/item/storage/toolbox/mechanical = 1,
|
||||
/obj/item/stack/tile/plasteel = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1)
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/medbot
|
||||
name = "Medbot"
|
||||
result = /mob/living/simple_animal/bot/medbot
|
||||
reqs = list(/obj/item/healthanalyzer = 1,
|
||||
/obj/item/storage/firstaid = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1)
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/honkbot
|
||||
name = "Honkbot"
|
||||
result = /mob/living/simple_animal/bot/honkbot
|
||||
reqs = list(/obj/item/storage/box/clown = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/bikehorn/ = 1)
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/Firebot
|
||||
name = "Firebot"
|
||||
result = /mob/living/simple_animal/bot/firebot
|
||||
reqs = list(/obj/item/extinguisher = 1,
|
||||
/obj/item/bodypart/r_arm/robot = 1,
|
||||
/obj/item/assembly/prox_sensor = 1,
|
||||
/obj/item/clothing/head/hardhat/red = 1)
|
||||
time = 40
|
||||
category = CAT_ROBOT
|
||||
|
||||
/datum/crafting_recipe/potatos
|
||||
name = "Potat-OS"
|
||||
reqs = list(/obj/item/stack/cable_coil = 1, /obj/item/stack/rods = 1, /obj/item/reagent_containers/food/snacks/grown/potato = 1, /obj/item/aicard = 1 )
|
||||
result = /obj/item/aicard/potato
|
||||
category = CAT_ROBOT
|
||||
@@ -0,0 +1,345 @@
|
||||
/datum/crafting_recipe/pin_removal
|
||||
name = "Pin Removal"
|
||||
result = /obj/item/gun
|
||||
reqs = list(/obj/item/gun = 1)
|
||||
parts = list(/obj/item/gun = 1)
|
||||
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
time = 50
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/strobeshield
|
||||
name = "Strobe Shield"
|
||||
result = /obj/item/assembly/flash/shield
|
||||
reqs = list(/obj/item/wallframe/flasher = 1,
|
||||
/obj/item/assembly/flash/handheld = 1,
|
||||
/obj/item/shield/riot = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/makeshiftshield
|
||||
name = "Makeshift Metal Shield"
|
||||
result = /obj/item/shield/makeshift
|
||||
reqs = list(/obj/item/stack/cable_coil = 30,
|
||||
/obj/item/stack/sheet/metal = 10,
|
||||
/obj/item/stack/sheet/cloth = 2,
|
||||
/obj/item/stack/sheet/leather = 3)
|
||||
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
time = 100
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/spear
|
||||
name = "Spear"
|
||||
result = /obj/item/twohanded/spear
|
||||
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
|
||||
/obj/item/shard = 1,
|
||||
/obj/item/stack/rods = 1)
|
||||
parts = list(/obj/item/shard = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/stunprod
|
||||
name = "Stunprod"
|
||||
result = /obj/item/melee/baton/cattleprod
|
||||
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
|
||||
/obj/item/stack/rods = 1,
|
||||
/obj/item/assembly/igniter = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/teleprod
|
||||
name = "Teleprod"
|
||||
result = /obj/item/melee/baton/cattleprod/teleprod
|
||||
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
|
||||
/obj/item/stack/rods = 1,
|
||||
/obj/item/assembly/igniter = 1,
|
||||
/obj/item/stack/ore/bluespace_crystal = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/bola
|
||||
name = "Bola"
|
||||
result = /obj/item/restraints/legcuffs/bola
|
||||
reqs = list(/obj/item/restraints/handcuffs/cable = 1,
|
||||
/obj/item/stack/sheet/metal = 6)
|
||||
time = 20//15 faster than crafting them by hand!
|
||||
category= CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/tailclub
|
||||
name = "Tail Club"
|
||||
result = /obj/item/tailclub
|
||||
reqs = list(/obj/item/organ/tail/lizard = 1,
|
||||
/obj/item/stack/sheet/metal = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/tailwhip
|
||||
name = "Liz O' Nine Tails"
|
||||
result = /obj/item/melee/chainofcommand/tailwhip
|
||||
reqs = list(/obj/item/organ/tail/lizard = 1,
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/catwhip
|
||||
name = "Cat O' Nine Tails"
|
||||
result = /obj/item/melee/chainofcommand/tailwhip/kitty
|
||||
reqs = list(/obj/item/organ/tail/cat = 1,
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/chainsaw
|
||||
name = "Chainsaw"
|
||||
result = /obj/item/twohanded/required/chainsaw
|
||||
reqs = list(/obj/item/circular_saw = 1,
|
||||
/obj/item/stack/cable_coil = 3,
|
||||
/obj/item/stack/sheet/plasteel = 5)
|
||||
tools = list(TOOL_WELDER)
|
||||
time = 50
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
//////////////////
|
||||
///BOMB CRAFTING//
|
||||
//////////////////
|
||||
|
||||
/datum/crafting_recipe/chemical_payload
|
||||
name = "Chemical Payload (C4)"
|
||||
result = /obj/item/bombcore/chemical
|
||||
reqs = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/grenade/plastic/c4 = 1,
|
||||
/obj/item/grenade/chem_grenade = 2
|
||||
)
|
||||
parts = list(/obj/item/stock_parts/matter_bin = 1, /obj/item/grenade/chem_grenade = 2)
|
||||
time = 30
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/chemical_payload2
|
||||
name = "Chemical Payload (Gibtonite)"
|
||||
result = /obj/item/bombcore/chemical
|
||||
reqs = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/twohanded/required/gibtonite = 1,
|
||||
/obj/item/grenade/chem_grenade = 2
|
||||
)
|
||||
parts = list(/obj/item/stock_parts/matter_bin = 1, /obj/item/grenade/chem_grenade = 2)
|
||||
time = 50
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/molotov
|
||||
name = "Molotov"
|
||||
result = /obj/item/reagent_containers/food/drinks/bottle/molotov
|
||||
reqs = list(/obj/item/reagent_containers/rag = 1,
|
||||
/obj/item/reagent_containers/food/drinks/bottle = 1)
|
||||
parts = list(/obj/item/reagent_containers/food/drinks/bottle = 1)
|
||||
time = 40
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/IED
|
||||
name = "IED"
|
||||
result = /obj/item/grenade/iedcasing
|
||||
reqs = list(/datum/reagent/fuel = 50,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/assembly/igniter = 1,
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans = 1)
|
||||
parts = list(/obj/item/reagent_containers/food/drinks/soda_cans = 1)
|
||||
time = 15
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/lance
|
||||
name = "Explosive Lance (Grenade)"
|
||||
result = /obj/item/twohanded/spear
|
||||
reqs = list(/obj/item/twohanded/spear = 1,
|
||||
/obj/item/grenade = 1)
|
||||
parts = list(/obj/item/twohanded/spear = 1,
|
||||
/obj/item/grenade = 1)
|
||||
time = 15
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
//////////////////
|
||||
///GUNS CRAFTING//
|
||||
//////////////////
|
||||
|
||||
|
||||
/datum/crafting_recipe/smartdartgun
|
||||
name = "Smart dartgun"
|
||||
result = /obj/item/gun/syringe/dart
|
||||
reqs = list(/obj/item/stack/sheet/metal = 10,
|
||||
/obj/item/stack/sheet/glass = 5,
|
||||
/obj/item/tank/internals = 1,
|
||||
/obj/item/reagent_containers/glass/beaker = 1,
|
||||
/obj/item/stack/sheet/plastic = 5,
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
time = 150 //It's a gun
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/rapiddartgun
|
||||
name = "Rapid Smart dartgun"
|
||||
result = /obj/item/gun/syringe/dart/rapiddart
|
||||
reqs = list(
|
||||
/obj/item/gun/syringe/dart = 1,
|
||||
/obj/item/stack/sheet/plastic = 5,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/reagent_containers/glass/beaker = 1
|
||||
)
|
||||
parts = list(/obj/item/reagent_containers/glass/beaker = 1)
|
||||
time = 120 //Modifying your gun
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/improvised_pneumatic_cannon
|
||||
name = "Pneumatic Cannon"
|
||||
result = /obj/item/pneumatic_cannon/ghetto
|
||||
tools = list(TOOL_WELDER, TOOL_WRENCH)
|
||||
reqs = list(/obj/item/stack/sheet/metal = 4,
|
||||
/obj/item/stack/packageWrap = 8,
|
||||
/obj/item/pipe = 2)
|
||||
time = 300
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/flamethrower //Gun*
|
||||
name = "Flamethrower"
|
||||
result = /obj/item/flamethrower
|
||||
reqs = list(/obj/item/weldingtool = 1,
|
||||
/obj/item/assembly/igniter = 1,
|
||||
/obj/item/stack/rods = 1)
|
||||
parts = list(/obj/item/assembly/igniter = 1,
|
||||
/obj/item/weldingtool = 1)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 10
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/ishotgun
|
||||
name = "Improvised Shotgun"
|
||||
result = /obj/item/gun/ballistic/revolver/doublebarrel/improvised
|
||||
reqs = list(/obj/item/weaponcrafting/receiver = 1,
|
||||
/obj/item/pipe = 1,
|
||||
/obj/item/weaponcrafting/stock = 1,
|
||||
/obj/item/stack/packageWrap = 5)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 100
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/irifle
|
||||
name = "Improvised Rifle(7.62mm)"
|
||||
result = /obj/item/gun/ballistic/shotgun/boltaction/improvised
|
||||
reqs = list(/obj/item/weaponcrafting/receiver = 1,
|
||||
/obj/item/pipe = 2,
|
||||
/obj/item/weaponcrafting/stock = 1,
|
||||
/obj/item/stack/packageWrap = 5)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 100
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
//////////////////
|
||||
///AMMO CRAFTING//
|
||||
//////////////////
|
||||
|
||||
/datum/crafting_recipe/smartdart
|
||||
name = "Medical smartdart"
|
||||
result = /obj/item/reagent_containers/syringe/dart
|
||||
reqs = list(/obj/item/stack/sheet/metal = 1,
|
||||
/obj/item/stack/sheet/glass = 1,
|
||||
/obj/item/stack/sheet/plastic = 1)
|
||||
time = 10
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/meteorslug
|
||||
name = "Meteorslug Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/meteorslug
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
|
||||
/obj/item/rcd_ammo = 1,
|
||||
/obj/item/stock_parts/manipulator = 2)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/pulseslug
|
||||
name = "Pulse Slug Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/pulseslug
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
|
||||
/obj/item/stock_parts/capacitor/adv = 2,
|
||||
/obj/item/stock_parts/micro_laser/ultra = 1)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/dragonsbreath
|
||||
name = "Dragonsbreath Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/dragonsbreath
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
|
||||
/datum/reagent/phosphorus = 5)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/frag12
|
||||
name = "FRAG-12 Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/frag12
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
|
||||
/datum/reagent/glycerol = 5,
|
||||
/datum/reagent/toxin/acid = 5,
|
||||
/datum/reagent/toxin/acid/fluacid = 5)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/ionslug
|
||||
name = "Ion Scatter Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/ion
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
|
||||
/obj/item/stock_parts/micro_laser/ultra = 1,
|
||||
/obj/item/stock_parts/subspace/crystal = 1)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/improvisedslug
|
||||
name = "Improvised Shotgun Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/improvised
|
||||
reqs = list(/obj/item/grenade/chem_grenade = 1,
|
||||
/obj/item/stack/sheet/metal = 1,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/datum/reagent/fuel = 10)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
|
||||
/datum/crafting_recipe/laserslug
|
||||
name = "Scatter Laser Shell"
|
||||
result = /obj/item/ammo_casing/shotgun/laserslug
|
||||
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,
|
||||
/obj/item/stock_parts/capacitor/adv = 1,
|
||||
/obj/item/stock_parts/micro_laser/high = 1)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 5
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_AMMO
|
||||
@@ -1,111 +1,107 @@
|
||||
//CONTAINS: Suit fibers and Detective's Scanning Computer
|
||||
|
||||
/atom/proc/return_fingerprints()
|
||||
GET_COMPONENT(D, /datum/component/forensics)
|
||||
if(D)
|
||||
. = D.fingerprints
|
||||
/atom/proc/add_fibers(mob/living/carbon/human/M)
|
||||
if(M.gloves && istype(M.gloves, /obj/item/clothing/))
|
||||
var/obj/item/clothing/gloves/G = M.gloves
|
||||
if(G.transfer_blood > 1) //bloodied gloves transfer blood to touched objects
|
||||
if(add_blood_DNA(G.blood_DNA)) //only reduces the bloodiness of our gloves if the item wasn't already bloody
|
||||
G.transfer_blood--
|
||||
else if(M.bloody_hands > 1)
|
||||
if(add_blood_DNA(M.blood_DNA, M.diseases))
|
||||
M.bloody_hands--
|
||||
if(!suit_fibers)
|
||||
suit_fibers = list()
|
||||
var/fibertext
|
||||
var/item_multiplier = isitem(src)?1.2:1
|
||||
if(M.wear_suit)
|
||||
fibertext = "Material from \a [M.wear_suit]."
|
||||
if(prob(10*item_multiplier) && !(fibertext in suit_fibers))
|
||||
suit_fibers += fibertext
|
||||
if(!(M.wear_suit.body_parts_covered & CHEST))
|
||||
if(M.w_uniform)
|
||||
fibertext = "Fibers from \a [M.w_uniform]."
|
||||
if(prob(12*item_multiplier) && !(fibertext in suit_fibers)) //Wearing a suit means less of the uniform exposed.
|
||||
suit_fibers += fibertext
|
||||
if(!(M.wear_suit.body_parts_covered & HANDS))
|
||||
if(M.gloves)
|
||||
fibertext = "Material from a pair of [M.gloves.name]."
|
||||
if(prob(20*item_multiplier) && !(fibertext in suit_fibers))
|
||||
suit_fibers += fibertext
|
||||
else if(M.w_uniform)
|
||||
fibertext = "Fibers from \a [M.w_uniform]."
|
||||
if(prob(15*item_multiplier) && !(fibertext in suit_fibers))
|
||||
// "Added fibertext: [fibertext]"
|
||||
suit_fibers += fibertext
|
||||
if(M.gloves)
|
||||
fibertext = "Material from a pair of [M.gloves.name]."
|
||||
if(prob(20*item_multiplier) && !(fibertext in suit_fibers))
|
||||
suit_fibers += "Material from a pair of [M.gloves.name]."
|
||||
else if(M.gloves)
|
||||
fibertext = "Material from a pair of [M.gloves.name]."
|
||||
if(prob(20*item_multiplier) && !(fibertext in suit_fibers))
|
||||
suit_fibers += "Material from a pair of [M.gloves.name]."
|
||||
|
||||
/atom/proc/return_hiddenprints()
|
||||
GET_COMPONENT(D, /datum/component/forensics)
|
||||
if(D)
|
||||
. = D.hiddenprints
|
||||
|
||||
/atom/proc/return_blood_DNA()
|
||||
GET_COMPONENT(D, /datum/component/forensics)
|
||||
if(D)
|
||||
. = D.blood_DNA
|
||||
/atom/proc/add_hiddenprint(mob/living/M)
|
||||
if(!M || !M.key)
|
||||
return
|
||||
|
||||
/atom/proc/blood_DNA_length()
|
||||
GET_COMPONENT(D, /datum/component/forensics)
|
||||
if(D)
|
||||
. = length(D.blood_DNA)
|
||||
if(!fingerprintshidden) //Add the list if it does not exist
|
||||
fingerprintshidden = list()
|
||||
|
||||
/atom/proc/return_fibers()
|
||||
GET_COMPONENT(D, /datum/component/forensics)
|
||||
if(D)
|
||||
. = D.fibers
|
||||
var/hasgloves = ""
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.gloves)
|
||||
hasgloves = "(gloves)"
|
||||
|
||||
var/current_time = TIME_STAMP("hh:mm:ss", FALSE)
|
||||
if(!fingerprintshidden[M.key])
|
||||
fingerprintshidden[M.key] = "First: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]"
|
||||
else
|
||||
var/laststamppos = findtext(fingerprintshidden[M.key], " Last: ")
|
||||
if(laststamppos)
|
||||
fingerprintshidden[M.key] = copytext(fingerprintshidden[M.key], 1, laststamppos)
|
||||
fingerprintshidden[M.key] += " Last: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]"
|
||||
|
||||
fingerprintslast = M.ckey
|
||||
|
||||
/atom/proc/add_fingerprint_list(list/fingerprints) //ASSOC LIST FINGERPRINT = FINGERPRINT
|
||||
if(length(fingerprints))
|
||||
. = AddComponent(/datum/component/forensics, fingerprints)
|
||||
|
||||
//Set ignoregloves to add prints irrespective of the mob having gloves on.
|
||||
/atom/proc/add_fingerprint(mob/living/M, ignoregloves = FALSE)
|
||||
var/datum/component/forensics/D = AddComponent(/datum/component/forensics)
|
||||
. = D.add_fingerprint(M, ignoregloves)
|
||||
if(!M || !M.key)
|
||||
return
|
||||
|
||||
/atom/proc/add_fiber_list(list/fibertext) //ASSOC LIST FIBERTEXT = FIBERTEXT
|
||||
if(length(fibertext))
|
||||
. = AddComponent(/datum/component/forensics, null, null, null, fibertext)
|
||||
add_hiddenprint(M)
|
||||
|
||||
/atom/proc/add_fibers(mob/living/carbon/human/M)
|
||||
var/old = 0
|
||||
if(M.gloves && istype(M.gloves, /obj/item/clothing))
|
||||
var/obj/item/clothing/gloves/G = M.gloves
|
||||
old = length(G.return_blood_DNA())
|
||||
if(G.transfer_blood > 1) //bloodied gloves transfer blood to touched objects
|
||||
if(add_blood_DNA(G.return_blood_DNA()) && length(G.return_blood_DNA()) > old) //only reduces the bloodiness of our gloves if the item wasn't already bloody
|
||||
G.transfer_blood--
|
||||
else if(M.bloody_hands > 1)
|
||||
old = length(M.return_blood_DNA())
|
||||
if(add_blood_DNA(M.return_blood_DNA()) && length(M.return_blood_DNA()) > old)
|
||||
M.bloody_hands--
|
||||
var/datum/component/forensics/D = AddComponent(/datum/component/forensics)
|
||||
. = D.add_fibers(M)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
/atom/proc/add_hiddenprint_list(list/hiddenprints) //NOTE: THIS IS FOR ADMINISTRATION FINGERPRINTS, YOU MUST CUSTOM SET THIS TO INCLUDE CKEY/REAL NAMES! CHECK FORENSICS.DM
|
||||
if(length(hiddenprints))
|
||||
. = AddComponent(/datum/component/forensics, null, hiddenprints)
|
||||
add_fibers(H)
|
||||
|
||||
/atom/proc/add_hiddenprint(mob/living/M)
|
||||
var/datum/component/forensics/D = AddComponent(/datum/component/forensics)
|
||||
. = D.add_hiddenprint(M)
|
||||
if(H.gloves) //Check if the gloves (if any) hide fingerprints
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
if(G.transfer_prints)
|
||||
ignoregloves = TRUE
|
||||
|
||||
/atom/proc/add_blood_DNA(list/dna) //ASSOC LIST DNA = BLOODTYPE
|
||||
return FALSE
|
||||
if(!ignoregloves)
|
||||
H.gloves.add_fingerprint(H, TRUE) //ignoregloves = TRUE to avoid infinite loop.
|
||||
return
|
||||
|
||||
/obj/add_blood_DNA(list/dna)
|
||||
. = ..()
|
||||
if(length(dna))
|
||||
. = AddComponent(/datum/component/forensics, null, null, dna)
|
||||
|
||||
/obj/item/clothing/gloves/add_blood_DNA(list/blood_dna, list/datum/disease/diseases)
|
||||
. = ..()
|
||||
transfer_blood = rand(2, 4)
|
||||
|
||||
/turf/add_blood_DNA(list/blood_dna, list/datum/disease/diseases)
|
||||
var/obj/effect/decal/cleanable/blood/splatter/B = locate() in src
|
||||
if(!B)
|
||||
B = new /obj/effect/decal/cleanable/blood/splatter(src, diseases)
|
||||
B.add_blood_DNA(blood_dna) //give blood info to the blood decal.
|
||||
return TRUE //we bloodied the floor
|
||||
|
||||
/mob/living/carbon/human/add_blood_DNA(list/blood_dna, list/datum/disease/diseases)
|
||||
if(wear_suit)
|
||||
wear_suit.add_blood_DNA(blood_dna)
|
||||
update_inv_wear_suit()
|
||||
else if(w_uniform)
|
||||
w_uniform.add_blood_DNA(blood_dna)
|
||||
update_inv_w_uniform()
|
||||
if(gloves)
|
||||
var/obj/item/clothing/gloves/G = gloves
|
||||
G.add_blood_DNA(blood_dna)
|
||||
else if(length(blood_dna))
|
||||
AddComponent(/datum/component/forensics, null, null, blood_dna)
|
||||
bloody_hands = rand(2, 4)
|
||||
if(head)
|
||||
head.add_blood_DNA(blood_dna)
|
||||
update_inv_head()
|
||||
else if(wear_mask)
|
||||
wear_mask.add_blood_DNA(blood_dna)
|
||||
update_inv_wear_mask()
|
||||
if(wear_neck)
|
||||
wear_neck.add_blood_DNA(blood_dna)
|
||||
update_inv_neck()
|
||||
update_inv_gloves() //handles bloody hands overlays and updating
|
||||
return TRUE
|
||||
LAZYINITLIST(fingerprints) //Add the list if it does not exist
|
||||
var/full_print = md5(H.dna.uni_identity)
|
||||
fingerprints[full_print] = full_print
|
||||
|
||||
/atom/proc/transfer_fingerprints_to(atom/A)
|
||||
A.add_fingerprint_list(return_fingerprints())
|
||||
A.add_hiddenprint_list(return_hiddenprints())
|
||||
A.fingerprintslast = fingerprintslast
|
||||
// Make sure everything are lists.
|
||||
LAZYINITLIST(A.fingerprints)
|
||||
LAZYINITLIST(A.fingerprintshidden)
|
||||
LAZYINITLIST(fingerprints)
|
||||
LAZYINITLIST(fingerprintshidden)
|
||||
|
||||
// Transfer
|
||||
if(fingerprints)
|
||||
A.fingerprints |= fingerprints.Copy() //detective
|
||||
if(fingerprintshidden)
|
||||
A.fingerprintshidden |= fingerprintshidden.Copy() //admin
|
||||
A.fingerprintslast = fingerprintslast
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/obj/item/evidencebag/attackby(obj/item/I, mob/user, params)
|
||||
if(evidencebagEquip(I, user))
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/evidencebag/handle_atom_del(atom/A)
|
||||
cut_overlays()
|
||||
@@ -25,12 +25,12 @@
|
||||
desc = initial(desc)
|
||||
|
||||
/obj/item/evidencebag/proc/evidencebagEquip(obj/item/I, mob/user)
|
||||
if(!istype(I) || I.anchored == 1)
|
||||
if(!istype(I) || I.anchored == TRUE)
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/evidencebag))
|
||||
to_chat(user, "<span class='notice'>You find putting an evidence bag in another evidence bag to be slightly absurd.</span>")
|
||||
return 1 //now this is podracing
|
||||
return TRUE //now this is podracing
|
||||
|
||||
if(I.w_class > WEIGHT_CLASS_NORMAL)
|
||||
to_chat(user, "<span class='notice'>[I] won't fit in [src].</span>")
|
||||
@@ -62,7 +62,7 @@
|
||||
desc = "An evidence bag containing [I]. [I.desc]"
|
||||
I.forceMove(src)
|
||||
w_class = I.w_class
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/evidencebag/attack_self(mob/user)
|
||||
if(contents.len)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
flags_1 = CONDUCT_1
|
||||
item_flags = NOBLUDGEON
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
var/scanning = 0
|
||||
var/scanning = FALSE
|
||||
var/list/log = list()
|
||||
var/range = 8
|
||||
var/view_check = TRUE
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
/obj/item/detective_scanner/attack_self(mob/user)
|
||||
if(log.len && !scanning)
|
||||
scanning = 1
|
||||
scanning = TRUE
|
||||
to_chat(user, "<span class='notice'>Printing report, please wait...</span>")
|
||||
addtimer(CALLBACK(src, .proc/PrintReport), 100)
|
||||
else
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
// Clear the logs
|
||||
log = list()
|
||||
scanning = 0
|
||||
scanning = FALSE
|
||||
|
||||
/obj/item/detective_scanner/afterattack(atom/A, mob/user, params)
|
||||
. = ..()
|
||||
@@ -70,7 +70,7 @@
|
||||
if((get_dist(A, user) > range) || (!(A in view(range, user)) && view_check) || (loc != user))
|
||||
return
|
||||
|
||||
scanning = 1
|
||||
scanning = TRUE
|
||||
|
||||
user.visible_message("\The [user] points the [src.name] at \the [A] and performs a forensic scan.")
|
||||
to_chat(user, "<span class='notice'>You scan \the [A]. The scanner is now analysing the results...</span>")
|
||||
@@ -80,14 +80,20 @@
|
||||
|
||||
//Make our lists
|
||||
var/list/fingerprints = list()
|
||||
var/list/blood = A.return_blood_DNA()
|
||||
var/list/fibers = A.return_fibers()
|
||||
var/list/blood = list()
|
||||
var/list/fibers = list()
|
||||
var/list/reagents = list()
|
||||
|
||||
var/target_name = A.name
|
||||
|
||||
// Start gathering
|
||||
|
||||
if(A.blood_DNA && A.blood_DNA.len)
|
||||
blood = A.blood_DNA.Copy()
|
||||
|
||||
if(A.suit_fibers && A.suit_fibers.len)
|
||||
fibers = A.suit_fibers.Copy()
|
||||
|
||||
if(ishuman(A))
|
||||
|
||||
var/mob/living/carbon/human/H = A
|
||||
@@ -96,7 +102,8 @@
|
||||
|
||||
else if(!ismob(A))
|
||||
|
||||
fingerprints = A.return_fingerprints()
|
||||
if(A.fingerprints && A.fingerprints.len)
|
||||
fingerprints = A.fingerprints.Copy()
|
||||
|
||||
// Only get reagents from non-mobs.
|
||||
if(A.reagents && A.reagents.reagent_list.len)
|
||||
@@ -115,40 +122,40 @@
|
||||
|
||||
// We gathered everything. Create a fork and slowly display the results to the holder of the scanner.
|
||||
|
||||
var/found_something = 0
|
||||
var/found_something = FALSE
|
||||
add_log("<B>[STATION_TIME_TIMESTAMP("hh:mm:ss")][get_timestamp()] - [target_name]</B>", 0)
|
||||
|
||||
// Fingerprints
|
||||
if(length(fingerprints))
|
||||
sleep(30)
|
||||
sleep(3 SECONDS)
|
||||
add_log("<span class='info'><B>Prints:</B></span>")
|
||||
for(var/finger in fingerprints)
|
||||
add_log("[finger]")
|
||||
found_something = 1
|
||||
found_something = TRUE
|
||||
|
||||
// Blood
|
||||
if (length(blood))
|
||||
sleep(30)
|
||||
sleep(3 SECONDS)
|
||||
add_log("<span class='info'><B>Blood:</B></span>")
|
||||
found_something = 1
|
||||
found_something = TRUE
|
||||
for(var/B in blood)
|
||||
add_log("Type: <font color='red'>[blood[B]]</font> DNA: <font color='red'>[B]</font>")
|
||||
|
||||
//Fibers
|
||||
if(length(fibers))
|
||||
sleep(30)
|
||||
sleep(3 SECONDS)
|
||||
add_log("<span class='info'><B>Fibers:</B></span>")
|
||||
for(var/fiber in fibers)
|
||||
add_log("[fiber]")
|
||||
found_something = 1
|
||||
found_something = TRUE
|
||||
|
||||
//Reagents
|
||||
if(length(reagents))
|
||||
sleep(30)
|
||||
sleep(3 SECONDS)
|
||||
add_log("<span class='info'><B>Reagents:</B></span>")
|
||||
for(var/R in reagents)
|
||||
add_log("Reagent: <font color='red'>[R]</font> Volume: <font color='red'>[reagents[R]]</font>")
|
||||
found_something = 1
|
||||
found_something = TRUE
|
||||
|
||||
// Get a new user
|
||||
var/mob/holder = null
|
||||
@@ -164,10 +171,10 @@
|
||||
to_chat(holder, "<span class='notice'>You finish scanning \the [target_name].</span>")
|
||||
|
||||
add_log("---------------------------------------------------------", 0)
|
||||
scanning = 0
|
||||
scanning = FALSE
|
||||
return
|
||||
|
||||
/obj/item/detective_scanner/proc/add_log(msg, broadcast = 1)
|
||||
/obj/item/detective_scanner/proc/add_log(msg, broadcast = TRUE)
|
||||
if(scanning)
|
||||
if(broadcast && ismob(loc))
|
||||
var/mob/M = loc
|
||||
@@ -207,4 +214,4 @@
|
||||
return
|
||||
to_chat(user, "<span class='notice'><B>Scanner Report</B></span>")
|
||||
for(var/iterLog in log)
|
||||
to_chat(user, iterLog)
|
||||
to_chat(user, iterLog)
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
/datum/round_event/ghost_role/alien_infestation/announce(fake)
|
||||
if(successSpawn || fake)
|
||||
priority_announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", 'sound/ai/aliens.ogg')
|
||||
priority_announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", "aliens")
|
||||
|
||||
|
||||
/datum/round_event/ghost_role/alien_infestation/spawn_role()
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
if(prob(90))
|
||||
priority_announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
if(prob(90))
|
||||
priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
if(prob(90))
|
||||
priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
if(prob(90))
|
||||
priority_announce("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
if(prob(90))
|
||||
priority_announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
weight = 10
|
||||
max_occurrences = 1
|
||||
|
||||
earliest_start = 60 MINUTES
|
||||
min_players = 40
|
||||
|
||||
gamemode_blacklist = list("blob") //Just in case a blob survives that long
|
||||
@@ -15,9 +16,9 @@
|
||||
|
||||
/datum/round_event/ghost_role/blob/announce(fake)
|
||||
if(prob(75))
|
||||
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/outbreak5.ogg')
|
||||
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", "outbreak5")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Rampant brand intelligence has been detected aboard [station_name()]. Please stand by. The origin is believed to be \a [source].", "Machine Learning Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
|
||||
/datum/round_event/disease_outbreak/announce(fake)
|
||||
priority_announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/outbreak7.ogg')
|
||||
priority_announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", "outbreak7")
|
||||
|
||||
/datum/round_event/disease_outbreak/setup()
|
||||
announceWhen = rand(15, 30)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
startWhen = 1
|
||||
|
||||
/datum/round_event/grid_check/announce(fake)
|
||||
priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", 'sound/ai/poweroff.ogg')
|
||||
priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", "poweroff")
|
||||
|
||||
|
||||
/datum/round_event/grid_check/start()
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
/datum/round_event/ion_storm/announce(fake)
|
||||
if(announceEvent == ION_ANNOUNCE || (announceEvent == ION_RANDOM && prob(ionAnnounceChance)) || fake)
|
||||
priority_announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/ai/ionstorm.ogg')
|
||||
priority_announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", "ionstorm")
|
||||
|
||||
|
||||
/datum/round_event/ion_storm/start()
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
if(prob(50))
|
||||
priority_announce(pick(reason), "Collision Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/datum/round_event_control/meteor_wave/meaty
|
||||
name = "Meteor Wave: Meaty"
|
||||
typepath = /datum/round_event/meteor_wave/meaty
|
||||
weight = 2
|
||||
max_occurrences = 1
|
||||
|
||||
/datum/round_event/meteor_wave/meaty
|
||||
wave_name = "meaty"
|
||||
|
||||
/datum/round_event/meteor_wave/meaty/announce(fake)
|
||||
priority_announce("Meaty ores have been detected on collision course with the station.", "Oh crap, get the mop.",'sound/ai/meteors.ogg')
|
||||
/datum/round_event_control/meteor_wave/meaty
|
||||
name = "Meteor Wave: Meaty"
|
||||
typepath = /datum/round_event/meteor_wave/meaty
|
||||
weight = 2
|
||||
max_occurrences = 1
|
||||
|
||||
/datum/round_event/meteor_wave/meaty
|
||||
wave_name = "meaty"
|
||||
|
||||
/datum/round_event/meteor_wave/meaty/announce(fake)
|
||||
priority_announce("Meaty ores have been detected on collision course with the station.", "Oh crap, get the mop.", "meteors")
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
kill()
|
||||
|
||||
/datum/round_event/meteor_wave/announce(fake)
|
||||
priority_announce("Meteors have been detected on collision course with the station. Estimated time until impact: [round(startWhen/60)] minutes.[GLOB.singularity_counter ? " Warning: Anomalous gravity pulse detected, Syndicate technology interference likely." : ""]", "Meteor Alert", 'sound/ai/meteors.ogg')
|
||||
priority_announce("Meteors have been detected on collision course with the station. Estimated time until impact: [round(startWhen/60)] minutes.[GLOB.singularity_counter ? " Warning: Anomalous gravity pulse detected, Syndicate technology interference likely." : ""]", "Meteor Alert", "meteors")
|
||||
|
||||
/datum/round_event/meteor_wave/tick()
|
||||
if(ISMULTIPLE(activeFor, 3))
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
into the [location].", "Migration Alert",
|
||||
'sound/effects/mousesqueek.ogg')
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
ship_name = pick(strings(PIRATE_NAMES_FILE, "ship_names"))
|
||||
|
||||
/datum/round_event/pirates/announce(fake)
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
if(fake)
|
||||
return
|
||||
threat = new
|
||||
@@ -77,7 +77,7 @@
|
||||
else
|
||||
notify_ghosts("Space pirates are waking up!", source = spawner, action=NOTIFY_ATTACK, flashwindow = FALSE)
|
||||
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') //CITADEL EDIT also metabreak here too
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") //CITADEL EDIT also metabreak here too
|
||||
|
||||
//Shuttle equipment
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Gr3y.T1d3 virus detected in [station_name()] door subroutines. Severity level of [severity]. Recommend station AI involvement.", "Security Alert")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
announceWhen = 1
|
||||
|
||||
/datum/round_event/radiation_storm/announce(fake)
|
||||
priority_announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", 'sound/ai/radiation.ogg')
|
||||
priority_announce("High levels of radiation detected near the station. Maintenance is best shielded from radiation.", "Anomaly Alert", "radiation")
|
||||
//sound not longer matches the text, but an audible warning is probably good
|
||||
|
||||
/datum/round_event/radiation_storm/start()
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: The syndicate are trying to infiltrate your station. If you let them hijack your cargo shuttle, you'll save us a headache.","CentCom Counter Intelligence")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
@@ -43,7 +43,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: A group of angry Russians want to have a party. Can you send them your cargo shuttle then make them disappear?","CentCom Russian Outreach Program")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
@@ -54,7 +54,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: The Spider Clan has sent us a mysterious gift. Can we ship it to you to see what's inside?","CentCom Diplomatic Corps")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
@@ -65,7 +65,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: Seems we've ordered doubles of our department resupply packages this month. Can we send them to you?","CentCom Supply Department")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
@@ -76,7 +76,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: Your station has been chosen for an epidemiological research project. Send us your cargo shuttle to receive your research samples.", "CentCom Research Initiatives")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
@@ -87,7 +87,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: It looks like a neighbouring station accidentally delivered their pizza to you instead.", "CentCom Spacepizza Division")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
@@ -98,7 +98,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: One of our freighters carrying a bee shipment has been attacked by eco-terrorists. Can you clean up the mess for us?", "CentCom Janitorial Division")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
@@ -110,7 +110,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: We have discovered an active Syndicate bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it.", "CentCom Security Division")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
@@ -122,7 +122,7 @@
|
||||
if(prob(50))
|
||||
priority_announce("Cargo: We have discovered a warehouse of DELTA locked crates, we cant store any more of them at CC can you take them for us?.", "CentCom Security Division")
|
||||
else
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", 'sound/ai/commandreport.ogg') // CITADEL EDIT metabreak
|
||||
priority_announce("A report has been downloaded and printed out at all communications consoles.", "Incoming Classified Message", "commandreport") // CITADEL EDIT metabreak
|
||||
for(var/obj/machinery/computer/communications/C in GLOB.machines)
|
||||
if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z))
|
||||
var/obj/item/paper/P = new(C.loc)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user