Merge branch 'master' into xantholne-christmas03
This commit is contained in:
@@ -1,4 +0,0 @@
|
||||
/datum/material/plastic
|
||||
name = "Plastic"
|
||||
id = MAT_PLASTIC
|
||||
sheet_type = /obj/item/stack/sheet/plastic
|
||||
@@ -179,7 +179,7 @@
|
||||
|
||||
/datum/status_effect/chem/astral_insurance/tick(mob/living/carbon/M)
|
||||
. = ..()
|
||||
if(owner.reagents.has_reagent("astral"))
|
||||
if(owner.reagents.has_reagent(/datum/reagent/fermi/astral))
|
||||
return
|
||||
if(owner.mind == originalmind) //If they're home, let the chem deal with deletion.
|
||||
return
|
||||
@@ -284,15 +284,15 @@
|
||||
var/mob/living/carbon/M = owner
|
||||
|
||||
//chem calculations
|
||||
if(!owner.reagents.has_reagent("enthrall") && !owner.reagents.has_reagent("enthrallTest"))
|
||||
if(!owner.reagents.has_reagent(/datum/chemical_reaction/fermi/enthrall) && !owner.reagents.has_reagent(/datum/reagent/fermi/enthrall/test))
|
||||
if (phase < 3 && phase != 0)
|
||||
deltaResist += 3//If you've no chem, then you break out quickly
|
||||
if(prob(5))
|
||||
to_chat(owner, "<span class='notice'><i>Your mind starts to restore some of it's clarity as you feel the effects of the drug wain.</i></span>")
|
||||
if (mental_capacity <= 500 || phase == 4)
|
||||
if (owner.reagents.has_reagent("mannitol"))
|
||||
if (owner.reagents.has_reagent(/datum/reagent/medicine/mannitol))
|
||||
mental_capacity += 5
|
||||
if (owner.reagents.has_reagent("neurine"))
|
||||
if (owner.reagents.has_reagent(/datum/reagent/medicine/neurine))
|
||||
mental_capacity += 10
|
||||
|
||||
//mindshield check
|
||||
@@ -369,7 +369,7 @@
|
||||
if(lewd && prob(1) && !customEcho)
|
||||
to_chat(owner, "<span class='love'><i>[pick("I belong to [enthrallGender].", "[enthrallGender] knows whats best for me.", "Obedence is pleasure.", "I exist to serve [enthrallGender].", "[enthrallGender] is so dominant, it feels right to obey them.")].</i></span>")
|
||||
if (4) //mindbroken
|
||||
if (mental_capacity >= 499 && (owner.getOrganLoss(ORGAN_SLOT_BRAIN) <=0 || HAS_TRAIT(M, TRAIT_MINDSHIELD)) && !owner.reagents.has_reagent("MKUltra"))
|
||||
if (mental_capacity >= 499 && (owner.getOrganLoss(ORGAN_SLOT_BRAIN) <=0 || HAS_TRAIT(M, TRAIT_MINDSHIELD)) && !owner.reagents.has_reagent(/datum/reagent/fermi/enthrall))
|
||||
phase = 2
|
||||
mental_capacity = 500
|
||||
customTriggers = list()
|
||||
@@ -739,18 +739,18 @@
|
||||
deltaResist*= 0.5-(((2/200)*M.arousalloss)/1)//more aroused you are, the weaker resistance you can give, the less you are, the more you gain. (+/- 0.5)
|
||||
|
||||
//chemical resistance, brain and annaphros are the key to undoing, but the subject has to to be willing to resist.
|
||||
if (owner.reagents.has_reagent("mannitol"))
|
||||
if (owner.reagents.has_reagent(/datum/reagent/medicine/mannitol))
|
||||
deltaResist *= 1.25
|
||||
if (owner.reagents.has_reagent("neurine"))
|
||||
if (owner.reagents.has_reagent(/datum/reagent/medicine/neurine))
|
||||
deltaResist *= 1.5
|
||||
if (!(owner.client?.prefs.cit_toggles & NO_APHRO) && M.canbearoused && lewd)
|
||||
if (owner.reagents.has_reagent("anaphro"))
|
||||
if (owner.reagents.has_reagent(/datum/reagent/drug/anaphrodisiac))
|
||||
deltaResist *= 1.5
|
||||
if (owner.reagents.has_reagent("anaphro+"))
|
||||
if (owner.reagents.has_reagent(/datum/reagent/drug/anaphrodisiacplus))
|
||||
deltaResist *= 2
|
||||
if (owner.reagents.has_reagent("aphro"))
|
||||
if (owner.reagents.has_reagent(/datum/reagent/drug/aphrodisiac))
|
||||
deltaResist *= 0.75
|
||||
if (owner.reagents.has_reagent("aphro+"))
|
||||
if (owner.reagents.has_reagent(/datum/reagent/drug/aphrodisiacplus))
|
||||
deltaResist *= 0.5
|
||||
//Antag resistance
|
||||
//cultists are already brainwashed by their god
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
/datum/wires/autoylathe
|
||||
holder_type = /obj/machinery/autoylathe
|
||||
proper_name = "Autoylathe"
|
||||
|
||||
/datum/wires/autoylathe/New(atom/holder)
|
||||
wires = list(
|
||||
WIRE_HACK, WIRE_DISABLE,
|
||||
WIRE_SHOCK, WIRE_ZAP
|
||||
)
|
||||
add_duds(6)
|
||||
..()
|
||||
|
||||
/datum/wires/autoylathe/interactable(mob/user)
|
||||
var/obj/machinery/autoylathe/A = holder
|
||||
if(A.panel_open)
|
||||
return TRUE
|
||||
|
||||
/datum/wires/autoylathe/get_status()
|
||||
var/obj/machinery/autoylathe/A = holder
|
||||
var/list/status = list()
|
||||
status += "The red light is [A.disabled ? "on" : "off"]."
|
||||
status += "The blue light is [A.hacked ? "on" : "off"]."
|
||||
return status
|
||||
|
||||
/datum/wires/autoylathe/on_pulse(wire)
|
||||
var/obj/machinery/autoylathe/A = holder
|
||||
switch(wire)
|
||||
if(WIRE_HACK)
|
||||
A.adjust_hacked(!A.hacked)
|
||||
addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60)
|
||||
if(WIRE_SHOCK)
|
||||
A.shocked = !A.shocked
|
||||
addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60)
|
||||
if(WIRE_DISABLE)
|
||||
A.disabled = !A.disabled
|
||||
addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60)
|
||||
|
||||
/datum/wires/autoylathe/on_cut(wire, mend)
|
||||
var/obj/machinery/autoylathe/A = holder
|
||||
switch(wire)
|
||||
if(WIRE_HACK)
|
||||
A.adjust_hacked(!mend)
|
||||
if(WIRE_HACK)
|
||||
A.shocked = !mend
|
||||
if(WIRE_DISABLE)
|
||||
A.disabled = !mend
|
||||
if(WIRE_ZAP)
|
||||
A.shock(usr, 50)
|
||||
@@ -1,2 +0,0 @@
|
||||
/obj/machinery/sleeper
|
||||
min_health = 30
|
||||
@@ -1,5 +0,0 @@
|
||||
/obj/structure/displaycase/clown
|
||||
desc = "In the event of clown, honk glass."
|
||||
alert = 1
|
||||
start_showpiece_type = /obj/item/bikehorn
|
||||
req_access = list(ACCESS_CENT_GENERAL)
|
||||
@@ -1,389 +0,0 @@
|
||||
#define AUTOYLATHE_MAIN_MENU 1
|
||||
#define AUTOYLATHE_CATEGORY_MENU 2
|
||||
#define AUTOYLATHE_SEARCH_MENU 3
|
||||
|
||||
/obj/machinery/autoylathe
|
||||
name = "autoylathe"
|
||||
desc = "It produces toys using plastic, metal and glass."
|
||||
icon_state = "autolathe"
|
||||
density = TRUE
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 100
|
||||
circuit = /obj/item/circuitboard/machine/autoylathe
|
||||
layer = BELOW_OBJ_LAYER
|
||||
|
||||
var/operating = FALSE
|
||||
var/list/L = list()
|
||||
var/list/LL = list()
|
||||
var/hacked = FALSE
|
||||
var/disabled = 0
|
||||
var/shocked = FALSE
|
||||
var/hack_wire
|
||||
var/disable_wire
|
||||
var/shock_wire
|
||||
|
||||
var/busy = FALSE
|
||||
var/prod_coeff = 1
|
||||
|
||||
var/datum/design/being_built
|
||||
var/datum/techweb/stored_research
|
||||
var/list/datum/design/matching_designs
|
||||
var/selected_category
|
||||
var/screen = 1
|
||||
|
||||
var/list/categories = list(
|
||||
"Toys",
|
||||
"Figurines",
|
||||
"Pistols",
|
||||
"Rifles",
|
||||
"Heavy",
|
||||
"Melee",
|
||||
"Armor",
|
||||
"Adult",
|
||||
"Misc",
|
||||
"Imported"
|
||||
)
|
||||
|
||||
/obj/machinery/autoylathe/Initialize()
|
||||
AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_PLASTIC), 0, TRUE, null, null, CALLBACK(src, .proc/AfterMaterialInsert))
|
||||
. = ..()
|
||||
|
||||
wires = new /datum/wires/autoylathe(src)
|
||||
stored_research = new /datum/techweb/specialized/autounlocking/autoylathe
|
||||
matching_designs = list()
|
||||
|
||||
/obj/machinery/autoylathe/Destroy()
|
||||
QDEL_NULL(wires)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/autoylathe/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(!is_operational())
|
||||
return
|
||||
|
||||
if(shocked && !(stat & NOPOWER))
|
||||
shock(user,50)
|
||||
|
||||
var/dat
|
||||
|
||||
switch(screen)
|
||||
if(AUTOYLATHE_MAIN_MENU)
|
||||
dat = main_win(user)
|
||||
if(AUTOYLATHE_CATEGORY_MENU)
|
||||
dat = category_win(user,selected_category)
|
||||
if(AUTOYLATHE_SEARCH_MENU)
|
||||
dat = search_win(user)
|
||||
|
||||
var/datum/browser/popup = new(user, "Autoylathe", name, 400, 500)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/machinery/autoylathe/on_deconstruction()
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
materials.retrieve_all()
|
||||
|
||||
/obj/machinery/autoylathe/attackby(obj/item/O, mob/user, params)
|
||||
if (busy)
|
||||
to_chat(user, "<span class=\"alert\">The autoylathe is busy. Please wait for completion of previous operation.</span>")
|
||||
return TRUE
|
||||
|
||||
if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", O))
|
||||
updateUsrDialog()
|
||||
return TRUE
|
||||
|
||||
if(default_deconstruction_crowbar(O))
|
||||
return TRUE
|
||||
|
||||
if(panel_open && is_wire_tool(O))
|
||||
wires.interact(user)
|
||||
return TRUE
|
||||
|
||||
if(user.a_intent == INTENT_HARM) //so we can hit the machine
|
||||
return ..()
|
||||
|
||||
if(stat)
|
||||
return TRUE
|
||||
|
||||
if(istype(O, /obj/item/disk/design_disk))
|
||||
user.visible_message("[user] begins to load \the [O] in \the [src]...",
|
||||
"You begin to load a design from \the [O]...",
|
||||
"You hear the chatter of a floppy drive.")
|
||||
busy = TRUE
|
||||
var/obj/item/disk/design_disk/D = O
|
||||
if(do_after(user, 14.4, target = src))
|
||||
for(var/B in D.blueprints)
|
||||
if(B)
|
||||
stored_research.add_design(B)
|
||||
busy = FALSE
|
||||
return TRUE
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/autoylathe/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted)
|
||||
if(ispath(type_inserted, /obj/item/stack/ore/bluespace_crystal))
|
||||
use_power(amount_inserted / 10)
|
||||
else
|
||||
switch(id_inserted)
|
||||
if (MAT_METAL)
|
||||
flick("autolathe_o",src)//plays metal insertion animation
|
||||
if (MAT_GLASS)
|
||||
flick("autolathe_r",src)//plays glass insertion animation
|
||||
if (MAT_PLASTIC)
|
||||
flick("autolathe_o",src)//plays metal insertion animation
|
||||
use_power(amount_inserted / 10)
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/autoylathe/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if (!busy)
|
||||
if(href_list["menu"])
|
||||
screen = text2num(href_list["menu"])
|
||||
updateUsrDialog()
|
||||
|
||||
if(href_list["category"])
|
||||
selected_category = href_list["category"]
|
||||
updateUsrDialog()
|
||||
|
||||
if(href_list["make"])
|
||||
|
||||
/////////////////
|
||||
//href protection
|
||||
being_built = stored_research.isDesignResearchedID(href_list["make"])
|
||||
if(!being_built)
|
||||
return
|
||||
|
||||
var/multiplier = text2num(href_list["multiplier"])
|
||||
var/is_stack = ispath(being_built.build_path, /obj/item/stack)
|
||||
multiplier = CLAMP(multiplier,1,50)
|
||||
|
||||
/////////////////
|
||||
|
||||
var/coeff = (is_stack ? 1 : prod_coeff) //stacks are unaffected by production coefficient
|
||||
var/metal_cost = being_built.materials[MAT_METAL]
|
||||
var/glass_cost = being_built.materials[MAT_GLASS]
|
||||
var/plastic_cost = being_built.materials[MAT_PLASTIC]
|
||||
var/power = max(2000, (metal_cost+glass_cost+plastic_cost)*multiplier/5)
|
||||
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
if((materials.amount(MAT_METAL) >= metal_cost*multiplier*coeff) && (materials.amount(MAT_GLASS) >= glass_cost*multiplier*coeff) && (materials.amount(MAT_PLASTIC) >= plastic_cost*multiplier*coeff))
|
||||
busy = TRUE
|
||||
use_power(power)
|
||||
icon_state = "autolathe_n"
|
||||
var/time = is_stack ? 32 : 32*coeff*multiplier
|
||||
addtimer(CALLBACK(src, .proc/make_item, power, metal_cost, glass_cost, plastic_cost, multiplier, coeff, is_stack), time)
|
||||
|
||||
if(href_list["search"])
|
||||
matching_designs.Cut()
|
||||
|
||||
for(var/v in stored_research.researched_designs)
|
||||
var/datum/design/D = SSresearch.techweb_design_by_id(v)
|
||||
if(findtext(D.name,href_list["to_search"]))
|
||||
matching_designs.Add(D)
|
||||
updateUsrDialog()
|
||||
else
|
||||
to_chat(usr, "<span class=\"alert\">The autoylathe is busy. Please wait for completion of previous operation.</span>")
|
||||
|
||||
updateUsrDialog()
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/autoylathe/proc/make_item(power, metal_cost, glass_cost, plastic_cost, multiplier, coeff, is_stack)
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
var/atom/A = drop_location()
|
||||
use_power(power)
|
||||
var/list/materials_used = list(MAT_METAL=metal_cost*coeff*multiplier, MAT_GLASS=glass_cost*coeff*multiplier, MAT_PLASTIC=plastic_cost*coeff*multiplier)
|
||||
materials.use_amount(materials_used)
|
||||
|
||||
if(is_stack)
|
||||
var/obj/item/stack/N = new being_built.build_path(A, multiplier)
|
||||
N.update_icon()
|
||||
N.autoylathe_crafted(src)
|
||||
else
|
||||
for(var/i=1, i<=multiplier, i++)
|
||||
var/obj/item/new_item = new being_built.build_path(A)
|
||||
new_item.materials = new_item.materials.Copy()
|
||||
for(var/mat in materials_used)
|
||||
new_item.materials[mat] = materials_used[mat] / multiplier
|
||||
new_item.autoylathe_crafted(src)
|
||||
icon_state = "autolathe"
|
||||
busy = FALSE
|
||||
updateDialog()
|
||||
|
||||
/obj/machinery/autoylathe/RefreshParts()
|
||||
var/T = 0
|
||||
for(var/obj/item/stock_parts/matter_bin/MB in component_parts)
|
||||
T += MB.rating*75000
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
materials.max_amount = T
|
||||
T=1.2
|
||||
for(var/obj/item/stock_parts/manipulator/M in component_parts)
|
||||
T -= M.rating*0.2
|
||||
prod_coeff = CLAMP(T,1,0) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4
|
||||
|
||||
/obj/machinery/autoylathe/proc/main_win(mob/user)
|
||||
var/dat = "<div class='statusDisplay'><h3>Autoylathe Menu:</h3><br>"
|
||||
dat += materials_printout()
|
||||
|
||||
dat += "<form name='search' action='?src=[REF(src)]'>\
|
||||
<input type='hidden' name='src' value='[REF(src)]'>\
|
||||
<input type='hidden' name='search' value='to_search'>\
|
||||
<input type='hidden' name='menu' value='[AUTOYLATHE_SEARCH_MENU]'>\
|
||||
<input type='text' name='to_search'>\
|
||||
<input type='submit' value='Search'>\
|
||||
</form><hr>"
|
||||
|
||||
var/line_length = 1
|
||||
dat += "<table style='width:100%' align='center'><tr>"
|
||||
|
||||
for(var/C in categories)
|
||||
if(line_length > 2)
|
||||
dat += "</tr><tr>"
|
||||
line_length = 1
|
||||
|
||||
dat += "<td><A href='?src=[REF(src)];category=[C];menu=[AUTOYLATHE_CATEGORY_MENU]'>[C]</A></td>"
|
||||
line_length++
|
||||
|
||||
dat += "</tr></table></div>"
|
||||
return dat
|
||||
|
||||
/obj/machinery/autoylathe/proc/category_win(mob/user,selected_category)
|
||||
var/dat = "<A href='?src=[REF(src)];menu=[AUTOYLATHE_MAIN_MENU]'>Return to main menu</A>"
|
||||
dat += "<div class='statusDisplay'><h3>Browsing [selected_category]:</h3><br>"
|
||||
dat += materials_printout()
|
||||
|
||||
for(var/v in stored_research.researched_designs)
|
||||
var/datum/design/D = SSresearch.techweb_design_by_id(v)
|
||||
if(!(selected_category in D.category))
|
||||
continue
|
||||
|
||||
if(disabled || !can_build(D))
|
||||
dat += "<span class='linkOff'>[D.name]</span>"
|
||||
else
|
||||
dat += "<a href='?src=[REF(src)];make=[D.id];multiplier=1'>[D.name]</a>"
|
||||
|
||||
if(ispath(D.build_path, /obj/item/stack))
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS] ?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY,D.materials[MAT_PLASTIC] ?round(materials.amount(MAT_PLASTIC)/D.materials[MAT_PLASTIC]):INFINITY)
|
||||
if (max_multiplier>10 && !disabled)
|
||||
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=10'>x10</a>"
|
||||
if (max_multiplier>25 && !disabled)
|
||||
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=25'>x25</a>"
|
||||
if(max_multiplier > 0 && !disabled)
|
||||
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=[max_multiplier]'>x[max_multiplier]</a>"
|
||||
else
|
||||
if(!disabled && can_build(D, 5))
|
||||
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=5'>x5</a>"
|
||||
if(!disabled && can_build(D, 10))
|
||||
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=10'>x10</a>"
|
||||
|
||||
dat += "[get_design_cost(D)]<br>"
|
||||
|
||||
dat += "</div>"
|
||||
return dat
|
||||
|
||||
/obj/machinery/autoylathe/proc/search_win(mob/user)
|
||||
var/dat = "<A href='?src=[REF(src)];menu=[AUTOYLATHE_MAIN_MENU]'>Return to main menu</A>"
|
||||
dat += "<div class='statusDisplay'><h3>Search results:</h3><br>"
|
||||
dat += materials_printout()
|
||||
|
||||
for(var/v in matching_designs)
|
||||
var/datum/design/D = v
|
||||
if(disabled || !can_build(D))
|
||||
dat += "<span class='linkOff'>[D.name]</span>"
|
||||
else
|
||||
dat += "<a href='?src=[REF(src)];make=[D.id];multiplier=1'>[D.name]</a>"
|
||||
|
||||
if(ispath(D.build_path, /obj/item/stack))
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
var/max_multiplier = min(D.maxstack, D.materials[MAT_METAL] ?round(materials.amount(MAT_METAL)/D.materials[MAT_METAL]):INFINITY,D.materials[MAT_GLASS] ?round(materials.amount(MAT_GLASS)/D.materials[MAT_GLASS]):INFINITY,D.materials[MAT_PLASTIC] ?round(materials.amount(MAT_PLASTIC)/D.materials[MAT_PLASTIC]):INFINITY)
|
||||
if (max_multiplier>10 && !disabled)
|
||||
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=10'>x10</a>"
|
||||
if (max_multiplier>25 && !disabled)
|
||||
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=25'>x25</a>"
|
||||
if(max_multiplier > 0 && !disabled)
|
||||
dat += " <a href='?src=[REF(src)];make=[D.id];multiplier=[max_multiplier]'>x[max_multiplier]</a>"
|
||||
|
||||
dat += "[get_design_cost(D)]<br>"
|
||||
|
||||
dat += "</div>"
|
||||
return dat
|
||||
|
||||
/obj/machinery/autoylathe/proc/materials_printout()
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
var/dat = "<b>Total amount:</b> [materials.total_amount] / [materials.max_amount] cm<sup>3</sup><br>"
|
||||
for(var/mat_id in materials.materials)
|
||||
var/datum/material/M = materials.materials[mat_id]
|
||||
dat += "<b>[M.name] amount:</b> [M.amount] cm<sup>3</sup><br>"
|
||||
return dat
|
||||
|
||||
/obj/machinery/autoylathe/proc/can_build(datum/design/D, amount = 1)
|
||||
if(D.make_reagents.len)
|
||||
return FALSE
|
||||
|
||||
var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff)
|
||||
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
if(D.materials[MAT_METAL] && (materials.amount(MAT_METAL) < (D.materials[MAT_METAL] * coeff * amount)))
|
||||
return FALSE
|
||||
if(D.materials[MAT_GLASS] && (materials.amount(MAT_GLASS) < (D.materials[MAT_GLASS] * coeff * amount)))
|
||||
return FALSE
|
||||
if(D.materials[MAT_PLASTIC] && (materials.amount(MAT_PLASTIC) < (D.materials[MAT_PLASTIC] * coeff * amount)))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/autoylathe/proc/get_design_cost(datum/design/D)
|
||||
var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff)
|
||||
var/dat
|
||||
if(D.materials[MAT_METAL])
|
||||
dat += "[D.materials[MAT_METAL] * coeff] metal "
|
||||
if(D.materials[MAT_GLASS])
|
||||
dat += "[D.materials[MAT_GLASS] * coeff] glass "
|
||||
if(D.materials[MAT_PLASTIC])
|
||||
dat += "[D.materials[MAT_PLASTIC] * coeff] plastic"
|
||||
return dat
|
||||
|
||||
/obj/machinery/autoylathe/proc/reset(wire)
|
||||
switch(wire)
|
||||
if(WIRE_HACK)
|
||||
if(!wires.is_cut(wire))
|
||||
adjust_hacked(FALSE)
|
||||
if(WIRE_SHOCK)
|
||||
if(!wires.is_cut(wire))
|
||||
shocked = FALSE
|
||||
if(WIRE_DISABLE)
|
||||
if(!wires.is_cut(wire))
|
||||
disabled = FALSE
|
||||
|
||||
/obj/machinery/autoylathe/proc/shock(mob/user, prb)
|
||||
if(stat & (BROKEN|NOPOWER)) // unpowered, no shock
|
||||
return FALSE
|
||||
if(!prob(prb))
|
||||
return FALSE
|
||||
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
s.start()
|
||||
if (electrocute_mob(user, get_area(src), src, 0.7, TRUE))
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/autoylathe/proc/adjust_hacked(state)
|
||||
hacked = state
|
||||
for(var/id in SSresearch.techweb_designs)
|
||||
var/datum/design/D = SSresearch.techweb_designs[id]
|
||||
if((D.build_type & AUTOYLATHE) && ("hacked" in D.category))
|
||||
if(hacked)
|
||||
stored_research.add_design(D)
|
||||
else
|
||||
stored_research.remove_design(D)
|
||||
|
||||
/obj/machinery/autoylathe/hacked/Initialize()
|
||||
. = ..()
|
||||
adjust_hacked(TRUE)
|
||||
|
||||
//Called when the object is constructed by an autoylathe
|
||||
//Has a reference to the autoylathe so you can do !!FUN!! things with hacked lathes
|
||||
/obj/item/proc/autoylathe_crafted(obj/machinery/autoylathe/A)
|
||||
return
|
||||
@@ -1,121 +0,0 @@
|
||||
/obj/machinery/vending/medical
|
||||
products = list(/obj/item/reagent_containers/syringe = 12,
|
||||
/obj/item/reagent_containers/dropper = 3,
|
||||
/obj/item/healthanalyzer = 4,
|
||||
/obj/item/sensor_device = 2,
|
||||
/obj/item/pinpointer/crew = 2,
|
||||
/obj/item/reagent_containers/medspray/sterilizine = 1,
|
||||
/obj/item/stack/medical/gauze = 8,
|
||||
/obj/item/reagent_containers/pill/patch/styptic = 5,
|
||||
/obj/item/reagent_containers/medspray/styptic = 2,
|
||||
/obj/item/reagent_containers/pill/patch/silver_sulf = 5,
|
||||
/obj/item/reagent_containers/medspray/silver_sulf = 2,
|
||||
/obj/item/reagent_containers/pill/insulin = 10,
|
||||
/obj/item/reagent_containers/pill/salbutamol = 2,
|
||||
/obj/item/reagent_containers/glass/bottle/charcoal = 4,
|
||||
/obj/item/reagent_containers/glass/bottle/epinephrine = 4,
|
||||
/obj/item/reagent_containers/glass/bottle/salglu_solution = 3,
|
||||
/obj/item/reagent_containers/glass/bottle/morphine = 4,
|
||||
/obj/item/reagent_containers/glass/bottle/toxin = 3,
|
||||
/obj/item/reagent_containers/syringe/antiviral = 6,
|
||||
/obj/item/storage/hypospraykit/fire = 2,
|
||||
/obj/item/storage/hypospraykit/toxin = 2,
|
||||
/obj/item/storage/hypospraykit/o2 = 2,
|
||||
/obj/item/storage/hypospraykit/brute = 2,
|
||||
/obj/item/storage/hypospraykit/enlarge = 2,
|
||||
/obj/item/reagent_containers/glass/bottle/vial/small = 5)
|
||||
|
||||
/obj/machinery/vending/wardrobe/chap_wardrobe
|
||||
premium = list(/obj/item/toy/plush/plushvar = 1,
|
||||
/obj/item/toy/plush/narplush = 1)
|
||||
|
||||
#define STANDARD_CHARGE 1
|
||||
#define CONTRABAND_CHARGE 2
|
||||
#define COIN_CHARGE 3
|
||||
|
||||
/obj/machinery/vending/kink
|
||||
name = "KinkMate"
|
||||
desc = "A vending machine for all your unmentionable desires."
|
||||
icon = 'icons/obj/citvending.dmi'
|
||||
icon_state = "kink"
|
||||
circuit = /obj/item/circuitboard/machine/kinkmate
|
||||
product_slogans = "Kinky!;Sexy!;Check me out, big boy!"
|
||||
vend_reply = "Have fun, you shameless pervert!"
|
||||
products = list(
|
||||
/obj/item/clothing/under/maid = 5,
|
||||
/obj/item/clothing/under/janimaid = 5,
|
||||
/obj/item/clothing/neck/petcollar = 5,
|
||||
/obj/item/clothing/neck/petcollar/choker = 5,
|
||||
/obj/item/clothing/neck/petcollar/leather = 5,
|
||||
/obj/item/restraints/handcuffs/fake/kinky = 5,
|
||||
/obj/item/clothing/glasses/sunglasses/blindfold = 4,
|
||||
/obj/item/clothing/mask/muzzle = 4,
|
||||
/obj/item/clothing/under/stripper_pink = 3,
|
||||
/obj/item/clothing/under/stripper_green = 3,
|
||||
/obj/item/clothing/under/corset = 3,
|
||||
/obj/item/clothing/under/gear_harness = 10,
|
||||
/obj/item/dildo/custom = 5,
|
||||
/obj/item/electropack/shockcollar = 3,
|
||||
/obj/item/assembly/signaler = 3
|
||||
)
|
||||
contraband = list(
|
||||
/obj/item/clothing/neck/petcollar/locked = 2,
|
||||
/obj/item/key/collar = 2,
|
||||
/obj/item/clothing/head/kitty = 3,
|
||||
/obj/item/clothing/head/rabbitears = 3,
|
||||
/obj/item/clothing/under/keyholesweater = 2,
|
||||
/obj/item/clothing/under/mankini = 2,
|
||||
/obj/item/clothing/under/jabroni = 2,
|
||||
/obj/item/dildo/flared/huge = 3,
|
||||
/obj/item/reagent_containers/glass/bottle/crocin = 5,
|
||||
/obj/item/reagent_containers/glass/bottle/camphor = 5
|
||||
)
|
||||
premium = list(
|
||||
/obj/item/clothing/accessory/skullcodpiece/fake = 3,
|
||||
/obj/item/reagent_containers/glass/bottle/hexacrocin = 10,
|
||||
/obj/item/clothing/under/pants/chaps = 5
|
||||
)
|
||||
refill_canister = /obj/item/vending_refill/kink
|
||||
|
||||
/obj/machinery/vending/sovietvend
|
||||
name = "KomradeVendtink"
|
||||
desc = "Rodina-mat' zovyot!"
|
||||
icon = 'icons/obj/citvending.dmi'
|
||||
icon_state = "soviet"
|
||||
vend_reply = "The fascist and capitalist svin'ya shall fall, komrade!"
|
||||
product_slogans = "Quality worth waiting in line for!; Get Hammer and Sickled!; Sosvietsky soyuz above all!; With capitalist pigsky, you would have paid a fortunetink! ; Craftink in Motherland herself!"
|
||||
products = list(
|
||||
/obj/item/clothing/under/soviet = 20,
|
||||
/obj/item/clothing/head/ushanka = 20,
|
||||
/obj/item/clothing/shoes/jackboots = 20,
|
||||
/obj/item/clothing/head/squatter_hat = 20,
|
||||
/obj/item/clothing/under/squatter_outfit = 20,
|
||||
/obj/item/clothing/under/russobluecamooutfit = 20,
|
||||
/obj/item/clothing/head/russobluecamohat = 20
|
||||
)
|
||||
contraband = list(
|
||||
/obj/item/clothing/under/syndicate/tacticool = 4,
|
||||
/obj/item/clothing/mask/balaclava = 4,
|
||||
/obj/item/clothing/suit/russofurcoat = 4,
|
||||
/obj/item/clothing/head/russofurhat = 4,
|
||||
/obj/item/clothing/suit/space/hardsuit/soviet = 3,
|
||||
/obj/item/gun/energy/laser/LaserAK = 4
|
||||
)
|
||||
premium = list()
|
||||
|
||||
refill_canister = /obj/item/vending_refill/soviet
|
||||
|
||||
|
||||
#undef STANDARD_CHARGE
|
||||
#undef CONTRABAND_CHARGE
|
||||
#undef COIN_CHARGE
|
||||
|
||||
|
||||
/obj/item/vending_refill/kink
|
||||
machine_name = "KinkMate"
|
||||
icon = 'modular_citadel/icons/vending_restock.dmi'
|
||||
icon_state = "refill_kink"
|
||||
|
||||
/obj/item/vending_refill/soviet
|
||||
machine_name = "sovietvend"
|
||||
icon_state = "refill_soviet"
|
||||
@@ -1,12 +0,0 @@
|
||||
/obj/item/circuitboard/machine/kinkmate
|
||||
name = "Kinkmate Vendor (Machine Board)"
|
||||
build_path = /obj/machinery/vending/kink
|
||||
req_components = list(/obj/item/vending_refill/kink = 3)
|
||||
|
||||
/obj/item/circuitboard/machine/autoylathe
|
||||
name = "Autoylathe (Machine Board)"
|
||||
build_path = /obj/machinery/autoylathe
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 3,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stack/sheet/glass = 1)
|
||||
@@ -11,6 +11,7 @@
|
||||
strip_delay = 60
|
||||
equip_delay_other = 60
|
||||
materials = list(MAT_METAL=5000, MAT_GLASS=2000)
|
||||
|
||||
var/tagname = null
|
||||
|
||||
/datum/design/electropack/shockcollar
|
||||
@@ -25,18 +26,17 @@
|
||||
if(loc == user && user.get_item_by_slot(SLOT_NECK))
|
||||
to_chat(user, "<span class='warning'>The collar is fastened tight! You'll need help taking this off!</span>")
|
||||
return
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/item/electropack/shockcollar/receive_signal(datum/signal/signal)
|
||||
if(!signal || signal.data["code"] != code)
|
||||
return
|
||||
|
||||
if(isliving(loc) && on)
|
||||
if(shock_cooldown != 0)
|
||||
if(shock_cooldown == TRUE)
|
||||
return
|
||||
shock_cooldown = 1
|
||||
spawn(100)
|
||||
shock_cooldown = 0
|
||||
shock_cooldown = TRUE
|
||||
addtimer(VARSET_CALLBACK(src, shock_cooldown, FALSE), 100)
|
||||
var/mob/living/L = loc
|
||||
step(L, pick(GLOB.cardinals))
|
||||
|
||||
@@ -51,33 +51,27 @@
|
||||
master.receive_signal()
|
||||
return
|
||||
|
||||
/obj/item/electropack/shockcollar/attack_self(mob/user) //Turns out can't fully source this from the parent item, spritepath gets confused if power toggled. Will come back to this when I know how to code better and readd powertoggle..
|
||||
var/option = "Change Name"
|
||||
option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Change Frequency")
|
||||
switch(option)
|
||||
if("Change Name")
|
||||
var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text
|
||||
if(t)
|
||||
tagname = copytext(sanitize(t), 1, MAX_NAME_LEN)
|
||||
name = "[initial(name)] - [tagname]"
|
||||
if("Change Frequency")
|
||||
if(!ishuman(user))
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = {"<SK><BR>
|
||||
<B>Frequency/Code</B> for shock collar:<BR>
|
||||
Frequency:
|
||||
<A href='byond://?src=\ref[src];freq=-10'>-</A>
|
||||
<A href='byond://?src=\ref[src];freq=-2'>-</A> [format_frequency(frequency)]
|
||||
<A href='byond://?src=\ref[src];freq=2'>+</A>
|
||||
<A href='byond://?src=\ref[src];freq=10'>+</A><BR>
|
||||
Code:
|
||||
<A href='byond://?src=\ref[src];code=-5'>-</A>
|
||||
<A href='byond://?src=\ref[src];code=-1'>-</A> [code]
|
||||
<A href='byond://?src=\ref[src];code=1'>+</A>
|
||||
<A href='byond://?src=\ref[src];code=5'>+</A><BR>
|
||||
</SK>"}
|
||||
/obj/item/electropack/shockcollar/attackby(obj/item/W, mob/user, params) //moves it here because on_click is being bad
|
||||
if(istype(W, /obj/item/pen))
|
||||
var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text
|
||||
if(t)
|
||||
tagname = copytext(sanitize(t), 1, MAX_NAME_LEN)
|
||||
name = "[initial(name)] - [tagname]"
|
||||
else
|
||||
return ..()
|
||||
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
return
|
||||
/obj/item/electropack/shockcollar/ui_interact(mob/user) //on_click calls this
|
||||
var/dat = {"
|
||||
<TT>
|
||||
<B>Frequency/Code</B> for shock collar:<BR>
|
||||
Frequency:
|
||||
[format_frequency(src.frequency)]
|
||||
<A href='byond://?src=[REF(src)];set=freq'>Set</A><BR>
|
||||
|
||||
Code:
|
||||
[src.code]
|
||||
<A href='byond://?src=[REF(src)];set=code'>Set</A><BR>
|
||||
</TT>"}
|
||||
user << browse(dat, "window=radio")
|
||||
onclose(user, "radio")
|
||||
return
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
/obj/structure/chair/alt_attack_hand(mob/living/user)
|
||||
if(Adjacent(user) && istype(user))
|
||||
if(!item_chair || !user.can_hold_items() || !has_buckled_mobs() || buckled_mobs.len > 1 || dir != user.dir || flags_1 & NODECONSTRUCT_1)
|
||||
return TRUE
|
||||
if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return TRUE
|
||||
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(user, "<span class='warning'>You're too exhausted for that.</span>")
|
||||
return TRUE
|
||||
var/mob/living/poordude = buckled_mobs[1]
|
||||
if(!istype(poordude))
|
||||
return TRUE
|
||||
user.visible_message("<span class='notice'>[user] pulls [src] out from under [poordude].</span>", "<span class='notice'>You pull [src] out from under [poordude].</span>")
|
||||
var/C = new item_chair(loc)
|
||||
user.put_in_hands(C)
|
||||
poordude.Knockdown(20)//rip in peace
|
||||
user.adjustStaminaLoss(5)
|
||||
unbuckle_all_mobs(TRUE)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
@@ -1,10 +0,0 @@
|
||||
/obj/structure/table/alt_attack_hand(mob/user)
|
||||
if(user && Adjacent(user) && !user.incapacitated())
|
||||
if(istype(user) && user.a_intent == INTENT_HARM)
|
||||
user.visible_message("<span class='warning'>[user] slams [user.p_their()] palms down on [src].</span>", "<span class='warning'>You slam your palms down on [src].</span>")
|
||||
playsound(src, 'sound/weapons/sonic_jackhammer.ogg', 50, 1)
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] slaps [user.p_their()] hands on [src].</span>", "<span class='notice'>You slap your hands on [src].</span>")
|
||||
playsound(src, 'sound/weapons/tap.ogg', 50, 1)
|
||||
user.do_attack_animation(src)
|
||||
return TRUE
|
||||
@@ -8,7 +8,7 @@
|
||||
var/orgasm_verb = "cumming" //present continous
|
||||
var/fluid_transfer_factor = 0 //How much would a partner get in them if they climax using this?
|
||||
var/size = 2 //can vary between num or text, just used in icon_state strings
|
||||
var/fluid_id = null
|
||||
var/datum/reagent/fluid_id = null
|
||||
var/fluid_max_volume = 50
|
||||
var/fluid_efficiency = 1
|
||||
var/fluid_rate = CUM_RATE
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
zone = BODY_ZONE_CHEST
|
||||
slot = ORGAN_SLOT_BREASTS
|
||||
size = "c" //refer to the breast_values static list below for the cups associated number values
|
||||
fluid_id = "milk"
|
||||
fluid_id = /datum/reagent/consumable/milk
|
||||
fluid_rate = MILK_RATE
|
||||
shape = "pair"
|
||||
genital_flags = CAN_MASTURBATE_WITH|CAN_CLIMAX_WITH|GENITAL_FUID_PRODUCTION
|
||||
@@ -44,7 +44,7 @@
|
||||
desc += " You estimate that they're [uppertext(size)]-cups."
|
||||
|
||||
if(CHECK_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION) && aroused_state)
|
||||
desc += " They're leaking [fluid_id]."
|
||||
desc += " They're leaking [initial(fluid_id.name)]."
|
||||
var/string
|
||||
if(owner)
|
||||
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/size_name = "average"
|
||||
shape = "Single"
|
||||
var/sack_size = BALLS_SACK_SIZE_DEF
|
||||
fluid_id = "semen"
|
||||
fluid_id = /datum/reagent/consumable/semen
|
||||
masturbation_verb = "massage"
|
||||
layer_index = TESTICLES_LAYER_INDEX
|
||||
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
zone = BODY_ZONE_PRECISE_GROIN
|
||||
slot = ORGAN_SLOT_WOMB
|
||||
genital_flags = GENITAL_INTERNAL|GENITAL_FUID_PRODUCTION
|
||||
fluid_id = "femcum"
|
||||
fluid_id = /datum/reagent/consumable/femcum
|
||||
linked_organ_slot = ORGAN_SLOT_VAGINA
|
||||
|
||||
@@ -103,4 +103,31 @@
|
||||
name = "Green Santa Hat"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/christmashatg
|
||||
*/
|
||||
*/
|
||||
|
||||
/datum/gear/cowboyhat
|
||||
name = "Cowboy Hat, Brown"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/cowboyhat
|
||||
|
||||
/datum/gear/cowboyhat/black
|
||||
name = "Cowboy Hat, Black"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/cowboyhat/black
|
||||
|
||||
/datum/gear/cowboyhat/white
|
||||
name = "Cowboy Hat, White"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/cowboyhat/white
|
||||
|
||||
/datum/gear/cowboyhat/pink
|
||||
name = "Cowboy Hat, Pink"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/cowboyhat/pink
|
||||
|
||||
/datum/gear/cowboyhat/sec
|
||||
name = "Cowboy Hat, Security"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/cowboyhat/sec
|
||||
restricted_desc = "Security"
|
||||
restricted_roles = list("Warden","Detective","Security Officer","Head of Security")
|
||||
|
||||
@@ -71,4 +71,14 @@
|
||||
/datum/gear/santaboots
|
||||
name = "Santa Boots"
|
||||
category = SLOT_SHOES
|
||||
path= /obj/item/clothing/shoes/winterboots/santaboots
|
||||
path= /obj/item/clothing/shoes/winterboots/santaboots
|
||||
|
||||
/datum/gear/cowboyboots
|
||||
name = "Cowboy Boots, Brown"
|
||||
category = SLOT_SHOES
|
||||
path = /obj/item/clothing/shoes/cowboyboots
|
||||
|
||||
/datum/gear/cowboyboots/black
|
||||
name = "Cowboy Boots, Black"
|
||||
category = SLOT_SHOES
|
||||
path = /obj/item/clothing/shoes/cowboyboots/black
|
||||
@@ -13,7 +13,7 @@
|
||||
secondary_color = "#FFFFFF"
|
||||
tertiary_color = "#808080"
|
||||
|
||||
/obj/item/clothing/neck/cloak/polychromic/worn_overlays(isinhands, icon_file) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon
|
||||
/obj/item/clothing/neck/cloak/polychromic/worn_overlays(isinhands, icon_file, style_flags = NONE) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon
|
||||
. = ..()
|
||||
if(hasprimary | hassecondary | hastertiary)
|
||||
if(!isinhands) //prevents the worn sprites from showing up if you're just holding them
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi'
|
||||
icon_state = "hostrench"
|
||||
item_state = "hostrench"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
body_parts_covered = CHEST|ARMS|LEGS
|
||||
|
||||
/obj/item/clothing/suit/hooded/cloak/david
|
||||
@@ -20,11 +20,11 @@
|
||||
desc = "Ever wanted to look like a badass without ANY effort? Try this nanotrasen brand red cloak, perfect for kids"
|
||||
hoodtype = /obj/item/clothing/head/hooded/cloakhood/david
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/head/hooded/cloakhood/david
|
||||
name = "red cloak hood"
|
||||
icon_state = "golhood"
|
||||
desc = "conceal your face in shame with this nanotrasen brand hood"
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
desc = "Oooh... right."
|
||||
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
|
||||
force_alternate_icon = TRUE
|
||||
mutantrace_variation = NONE
|
||||
item_state = ""
|
||||
can_adjust = FALSE //to prevent you from "wearing it casually"
|
||||
|
||||
@@ -95,10 +95,9 @@
|
||||
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
|
||||
icon_state = "trek_ds9_coat"
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
|
||||
force_alternate_icon = TRUE
|
||||
item_state = "trek_ds9_coat"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
permeability_coefficient = 0.50
|
||||
allowed = list(
|
||||
/obj/item/flashlight, /obj/item/analyzer,
|
||||
@@ -140,11 +139,9 @@
|
||||
desc = "A uniform jacket from the United Federation. Set phasers to awesome."
|
||||
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
|
||||
force_alternate_icon = TRUE
|
||||
icon_state = "fedcoat"
|
||||
item_state = "fedcoat"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
mutantrace_variation = NONE
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
allowed = list(
|
||||
@@ -207,7 +204,6 @@
|
||||
desc = "A modern uniform jacket from the United Federation."
|
||||
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
|
||||
force_alternate_icon = TRUE
|
||||
icon_state = "fedmodern"
|
||||
item_state = "fedmodern"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
@@ -240,7 +236,6 @@
|
||||
icon = 'modular_citadel/icons/obj/clothing/trek_item_icon.dmi'
|
||||
icon_state = "fedcapofficer"
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi'
|
||||
force_alternate_icon = TRUE
|
||||
item_state = "fedcapofficer"
|
||||
|
||||
//Variants
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0)
|
||||
can_adjust = TRUE
|
||||
alt_covers_chest = TRUE
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/structure/closet/secure_closet/CMO/PopulateContents() //This is placed here because it's a very specific addition for a very specific niche
|
||||
..()
|
||||
@@ -29,7 +29,7 @@
|
||||
item_state = "bl_suit"
|
||||
item_color = "tactifool"
|
||||
has_sensor = TRUE
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
|
||||
/obj/item/clothing/under/syndicate/tacticool
|
||||
@@ -47,7 +47,7 @@
|
||||
can_adjust = TRUE
|
||||
icon = 'modular_citadel/icons/obj/clothing/turtlenecks.dmi'
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/bb_sweater/black
|
||||
name = "black sweater"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi'
|
||||
item_state = "r_suit"
|
||||
can_adjust = FALSE
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/rank/captain/femformal
|
||||
name ="captain's female formal outfit"
|
||||
@@ -26,4 +26,4 @@
|
||||
can_adjust = FALSE
|
||||
sensor_mode = SENSOR_COORDS //it's still a captain's suit nerd
|
||||
random_sensor = FALSE
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
//For custom items.
|
||||
|
||||
// Unless there's a digitigrade version make sure you add mutantrace_variation = NO_MUTANTRACE_VARIATION to all clothing/under and shoes - Pooj
|
||||
// Unless there's a digitigrade version make sure you add mutantrace_variation = NONE to all clothing/under and shoes - Pooj
|
||||
// Digitigrade stuff is uniform_digi.dmi and digishoes.dmi in icons/mob
|
||||
|
||||
/obj/item/custom/ceb_soap
|
||||
@@ -85,7 +85,7 @@
|
||||
item_state = "darkcarapace"
|
||||
blood_overlay_type = "armor"
|
||||
dog_fashion = /datum/dog_fashion/back
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
icon_state = "labred"
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
item_state = "labred"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/suit/toggle/labcoat/labredblack
|
||||
name = "Black and Red Coat"
|
||||
@@ -127,7 +127,7 @@
|
||||
icon_state = "labredblack"
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
item_state = "labredblack"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/toy/plush/carrot
|
||||
name = "carrot plushie"
|
||||
@@ -233,7 +233,7 @@
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
item_state = "hos-g"
|
||||
body_parts_covered = CHEST|GROIN|ARMS|LEGS
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/flask/russian
|
||||
name = "russian flask"
|
||||
@@ -277,14 +277,14 @@
|
||||
fitted = NO_FEMALE_UNIFORM
|
||||
alternate_worn_layer = ABOVE_SHOES_LAYER
|
||||
can_adjust = 0
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/shoes/sneakers/pink
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
icon_state = "pink"
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
item_state = "pink"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/neck/tie/bloodred
|
||||
name = "Blood Red Tie"
|
||||
@@ -301,7 +301,7 @@
|
||||
icon_state = "puffydress"
|
||||
item_state = "puffydress"
|
||||
body_parts_covered = CHEST|GROIN|LEGS
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/suit/vermillion
|
||||
name = "vermillion clothing"
|
||||
@@ -311,11 +311,11 @@
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/bb_sweater/black/naomi
|
||||
name = "worn black sweater"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
desc = "A well-loved sweater, showing signs of several cleanings and re-stitchings. And a few stains. Is that cat fur?"
|
||||
|
||||
/obj/item/clothing/neck/petcollar/naomi
|
||||
@@ -345,7 +345,7 @@
|
||||
icon_state = "rdcoat"
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
item_state = "rdcoat"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/custom/leechjar
|
||||
name = "Jar of Leeches"
|
||||
@@ -379,7 +379,7 @@
|
||||
desc = "Comfy Lucky Jackboots with the word Luck on them."
|
||||
item_state = "luckyjack"
|
||||
icon_state = "luckyjack"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/lunasune
|
||||
name = "Divine Robes"
|
||||
@@ -388,7 +388,7 @@
|
||||
desc = "Heavenly robes of the kitsune Luna Pumpkin,you can feel radiance coming from them."
|
||||
item_state = "Divine_robes"
|
||||
icon_state = "Divine_robes"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/leoskimpy
|
||||
name = "Leon's Skimpy Outfit"
|
||||
@@ -397,7 +397,7 @@
|
||||
desc = "A rather skimpy outfit."
|
||||
item_state = "shark_cloth"
|
||||
icon_state = "shark_cloth"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/mimeoveralls
|
||||
name = "Mime's Overalls"
|
||||
@@ -406,7 +406,7 @@
|
||||
desc = "A less-than-traditional mime's attire, completed by a set of dorky-looking overalls."
|
||||
item_state = "moveralls"
|
||||
icon_state = "moveralls"
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/suit/hooded/cloak/zuliecloak
|
||||
name = "Project: Zul-E"
|
||||
@@ -418,7 +418,7 @@
|
||||
hoodtype = /obj/item/clothing/head/hooded/cloakhood/zuliecloak
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
slot_flags = SLOT_WEAR_SUIT | ITEM_SLOT_NECK //it's a cloak. it's cosmetic. so why the hell not? what could possibly go wrong?
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/head/hooded/cloakhood/zuliecloak
|
||||
name = "NT Special Issue"
|
||||
@@ -428,7 +428,7 @@
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
flags_inv = HIDEEARS|HIDEHAIR
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/suit/blackredgold
|
||||
name = "Multicolor Coat"
|
||||
@@ -438,7 +438,7 @@
|
||||
icon_state = "redgoldjacket"
|
||||
item_state = "redgoldjacket"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/suit/kimono
|
||||
name = "Blue Kimono"
|
||||
@@ -448,7 +448,7 @@
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/suit/commjacket
|
||||
name = "Dusty Commisar's Cloak"
|
||||
@@ -458,7 +458,7 @@
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/mw2_russian_para
|
||||
name = "Russian Paratrooper Jumper"
|
||||
@@ -467,7 +467,7 @@
|
||||
item_state = "mw2_russian_para"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/gloves/longblackgloves
|
||||
name = "Luna's Gauntlets"
|
||||
@@ -484,7 +484,7 @@
|
||||
item_state = "trendy_fit"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/head/blueberet
|
||||
name = "Atmos Beret"
|
||||
@@ -518,7 +518,7 @@
|
||||
item_state = "mikubikini"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/suit/mikujacket
|
||||
name = "starlight singer jacket"
|
||||
@@ -527,7 +527,7 @@
|
||||
item_state = "mikujacket"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/head/mikuhair
|
||||
name = "starlight singer hair"
|
||||
@@ -536,7 +536,7 @@
|
||||
item_state = "mikuhair"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
flags_inv = HIDEHAIR
|
||||
|
||||
/obj/item/clothing/gloves/mikugloves
|
||||
@@ -546,7 +546,7 @@
|
||||
item_state = "mikugloves"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/shoes/sneakers/mikuleggings
|
||||
name = "starlight singer leggings"
|
||||
@@ -555,4 +555,4 @@
|
||||
item_state = "mikuleggings"
|
||||
icon = 'icons/obj/custom.dmi'
|
||||
alternate_worn_icon = 'icons/mob/custom_w.dmi'
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
mutantrace_variation = NONE
|
||||
|
||||
@@ -70,113 +70,124 @@
|
||||
message = "makes a very loud noise."
|
||||
. = ..()
|
||||
|
||||
/datum/emote/sound/carbon/snap
|
||||
key = "snap"
|
||||
key_third_person = "snaps"
|
||||
muzzle_ignore = TRUE
|
||||
restraint_check = TRUE
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
sound = 'sound/effects/snap01.ogg'
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/)
|
||||
|
||||
|
||||
/datum/emote/living/snap
|
||||
key = "snap"
|
||||
key_third_person = "snaps"
|
||||
message = "snaps their fingers."
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
muzzle_ignore = TRUE
|
||||
restraint_check = TRUE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
|
||||
|
||||
/datum/emote/living/snap/run_emote(mob/living/user, params)
|
||||
if(ishuman(user))
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/snap.ogg', 50, 1, -1)
|
||||
. = ..()
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/snap.ogg', 50, 1, -1)
|
||||
|
||||
/datum/emote/living/snap2
|
||||
key = "snap2"
|
||||
key_third_person = "snaps twice"
|
||||
message = "snaps twice."
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
muzzle_ignore = TRUE
|
||||
restraint_check = TRUE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
|
||||
|
||||
/datum/emote/living/snap2/run_emote(mob/living/user, params)
|
||||
if(ishuman(user))
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/snap2.ogg', 50, 1, -1)
|
||||
. = ..()
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/snap2.ogg', 50, 1, -1)
|
||||
|
||||
/datum/emote/living/snap3
|
||||
key = "snap3"
|
||||
key_third_person = "snaps thrice"
|
||||
message = "snaps thrice."
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
muzzle_ignore = TRUE
|
||||
restraint_check = TRUE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
|
||||
|
||||
/datum/emote/living/snap3/run_emote(mob/living/user, params)
|
||||
if(ishuman(user))
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/snap3.ogg', 50, 1, -1)
|
||||
. = ..()
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/snap3.ogg', 50, 1, -1)
|
||||
|
||||
/datum/emote/living/awoo
|
||||
key = "awoo"
|
||||
key_third_person = "lets out an awoo"
|
||||
message = "lets out an awoo!"
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
muzzle_ignore = FALSE
|
||||
restraint_check = FALSE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
|
||||
|
||||
/datum/emote/living/awoo/run_emote(mob/living/user, params)
|
||||
if(ishuman(user))
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/awoo.ogg', 50, 1, -1)
|
||||
. = ..()
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/awoo.ogg', 50, 1, -1)
|
||||
|
||||
/datum/emote/living/nya
|
||||
key = "nya"
|
||||
key_third_person = "lets out a nya"
|
||||
message = "lets out a nya!"
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
muzzle_ignore = FALSE
|
||||
restraint_check = FALSE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
|
||||
|
||||
/datum/emote/living/nya/run_emote(mob/living/user, params)
|
||||
if(ishuman(user))
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/nya.ogg', 50, 1, -1)
|
||||
. = ..()
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/nya.ogg', 50, 1, -1)
|
||||
|
||||
/datum/emote/living/weh
|
||||
key = "weh"
|
||||
key_third_person = "lets out a weh"
|
||||
message = "lets out a weh!"
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
muzzle_ignore = FALSE
|
||||
restraint_check = FALSE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
|
||||
|
||||
/datum/emote/living/weh/run_emote(mob/living/user, params)
|
||||
if(ishuman(user))
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/weh.ogg', 50, 1, -1)
|
||||
. = ..()
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/weh.ogg', 50, 1, -1)
|
||||
|
||||
/datum/emote/living/peep
|
||||
key = "peep"
|
||||
key_third_person = "peeps like a bird"
|
||||
message = "peeps like a bird!"
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
muzzle_ignore = FALSE
|
||||
restraint_check = FALSE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
|
||||
|
||||
/datum/emote/living/peep/run_emote(mob/living/user, params)
|
||||
if(ishuman(user))
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/peep.ogg', 50, 1, -1)
|
||||
. = ..()
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/peep.ogg', 50, 1, -1)
|
||||
|
||||
/datum/emote/living/dab
|
||||
key = "dab"
|
||||
@@ -190,41 +201,49 @@
|
||||
key_third_person = "lets out a tiny squeak"
|
||||
message = "lets out a tiny squeak!"
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon)
|
||||
muzzle_ignore = FALSE
|
||||
restraint_check = FALSE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
|
||||
|
||||
/datum/emote/living/mothsqueak/run_emote(mob/living/user, params)
|
||||
if(ishuman(user))
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/mothsqueak.ogg', 50, 1, -1)
|
||||
. = ..()
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/mothsqueak.ogg', 50, 1, -1)
|
||||
|
||||
/datum/emote/living/merp
|
||||
key = "merp"
|
||||
key_third_person = "merps"
|
||||
message = "merps!"
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
muzzle_ignore = FALSE
|
||||
restraint_check = FALSE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
|
||||
|
||||
/datum/emote/living/merp/run_emote(mob/living/user, params)
|
||||
if(ishuman(user))
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/merp.ogg', 50, 1, -1)
|
||||
. = ..()
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
playsound(user, 'modular_citadel/sound/voice/merp.ogg', 50, 1, -1)
|
||||
|
||||
/datum/emote/living/bark
|
||||
key = "bark"
|
||||
key_third_person = "barks"
|
||||
message = "barks!"
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
muzzle_ignore = FALSE
|
||||
restraint_check = FALSE
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon, /mob/living/silicon/pai)
|
||||
|
||||
/datum/emote/living/bark/run_emote(mob/living/user, params)
|
||||
if(ishuman(user))
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
var/sound = pick('modular_citadel/sound/voice/bark1.ogg', 'modular_citadel/sound/voice/bark2.ogg')
|
||||
playsound(user, sound, 50, 1, -1)
|
||||
. = ..()
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(user.nextsoundemote >= world.time)
|
||||
return
|
||||
user.nextsoundemote = world.time + 7
|
||||
var/sound = pick('modular_citadel/sound/voice/bark1.ogg', 'modular_citadel/sound/voice/bark2.ogg')
|
||||
playsound(user, sound, 50, 1, -1)
|
||||
|
||||
@@ -1,449 +1,449 @@
|
||||
/*
|
||||
DOG BORG EQUIPMENT HERE
|
||||
SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
*/
|
||||
|
||||
/obj/item/dogborg/jaws
|
||||
name = "Dogborg jaws"
|
||||
desc = "The jaws of the debug errors oh god."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
force = 1
|
||||
throwforce = 0
|
||||
w_class = 3
|
||||
hitsound = 'sound/weapons/bite.ogg'
|
||||
sharpness = IS_SHARP
|
||||
var/stamtostunconversion = 0.1 //Total stamloss gets multiplied by this value for the help intent hard stun. Resting adds an additional 2x multiplier on top. Keep this low or so help me god.
|
||||
var/stuncooldown = 4 SECONDS //How long it takes before you're able to attempt to stun a target again
|
||||
var/nextstuntime
|
||||
|
||||
/obj/item/dogborg/jaws/examine(mob/user)
|
||||
. = ..()
|
||||
if(!CONFIG_GET(flag/weaken_secborg))
|
||||
. += "<span class='notice'>Use help intent to attempt to non-lethally incapacitate the target by latching on with your maw. This is more effective against exhausted and resting targets.</span>"
|
||||
|
||||
/obj/item/dogborg/jaws/big
|
||||
name = "combat jaws"
|
||||
desc = "The jaws of the law. Very sharp."
|
||||
icon_state = "jaws"
|
||||
force = 15 //Chomp chomp. Crew harm.
|
||||
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
|
||||
stamtostunconversion = 0.2 // 100*0.2*2=40. Stun's just long enough to slap on cuffs with click delay if the target is near hard stamcrit.
|
||||
stuncooldown = 6 SECONDS
|
||||
|
||||
|
||||
/obj/item/dogborg/jaws/small
|
||||
name = "puppy jaws"
|
||||
desc = "Rubberized teeth designed to protect accidental harm. Sharp enough for specialized tasks however."
|
||||
icon_state = "smalljaws"
|
||||
force = 6
|
||||
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
|
||||
var/status = 0
|
||||
|
||||
/obj/item/dogborg/jaws/attack(atom/A, mob/living/silicon/robot/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(!CONFIG_GET(flag/weaken_secborg) && user.a_intent != INTENT_HARM && istype(A, /mob/living))
|
||||
if(A == user.pulling)
|
||||
to_chat(user, "<span class='warning'>You already have [A] in your jaws.</span>")
|
||||
return
|
||||
if(nextstuntime >= world.time)
|
||||
to_chat(user, "<span class='warning'>Your jaw servos are still recharging.</span>")
|
||||
return
|
||||
nextstuntime = world.time + stuncooldown
|
||||
var/mob/living/M = A
|
||||
var/cachedstam = M.getStaminaLoss()
|
||||
var/totalstuntime = cachedstam * stamtostunconversion * (M.lying ? 2 : 1)
|
||||
if(!M.resting)
|
||||
M.Knockdown(cachedstam*2) //BORK BORK. GET DOWN.
|
||||
M.Stun(totalstuntime)
|
||||
user.do_attack_animation(A, ATTACK_EFFECT_BITE)
|
||||
user.start_pulling(M, TRUE) //Yip yip. Come with.
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
M.visible_message("<span class='danger'>[user] clamps [user.p_their()] [src] onto [M] and latches on!</span>", "<span class='userdanger'>[user] clamps [user.p_their()] [src] onto you and latches on!</span>")
|
||||
if(totalstuntime >= 4 SECONDS)
|
||||
playsound(usr, 'sound/effects/k9_jaw_strong.ogg', 75, FALSE, 2) //Wuff wuff. Big stun.
|
||||
else
|
||||
playsound(usr, 'sound/effects/k9_jaw_weak.ogg', 50, TRUE, -1) //Arf arf. Pls buff.
|
||||
else
|
||||
. = ..()
|
||||
user.do_attack_animation(A, ATTACK_EFFECT_BITE)
|
||||
|
||||
/obj/item/dogborg/jaws/small/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.cell && R.cell.charge > 100)
|
||||
if(R.emagged && status == 0)
|
||||
name = "combat jaws"
|
||||
icon_state = "jaws"
|
||||
desc = "The jaws of the law."
|
||||
force = 12
|
||||
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
|
||||
stamtostunconversion = 0.15
|
||||
stuncooldown = 5 SECONDS
|
||||
status = 1
|
||||
to_chat(user, "<span class='notice'>Your jaws are now [status ? "Combat" : "Pup'd"].</span>")
|
||||
else
|
||||
name = "puppy jaws"
|
||||
icon_state = "smalljaws"
|
||||
desc = "The jaws of a small dog."
|
||||
force = initial(force)
|
||||
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
|
||||
stamtostunconversion = initial(stamtostunconversion)
|
||||
stuncooldown = initial(stuncooldown)
|
||||
status = 0
|
||||
if(R.emagged)
|
||||
to_chat(user, "<span class='notice'>Your jaws are now [status ? "Combat" : "Pup'd"].</span>")
|
||||
update_icon()
|
||||
|
||||
//Boop
|
||||
|
||||
/obj/item/analyzer/nose
|
||||
name = "boop module"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "nose"
|
||||
desc = "The BOOP module"
|
||||
flags_1 = CONDUCT_1
|
||||
force = 0
|
||||
throwforce = 0
|
||||
attack_verb = list("nuzzles", "pushes", "boops")
|
||||
w_class = 1
|
||||
|
||||
/obj/item/analyzer/nose/attack_self(mob/user)
|
||||
user.visible_message("[user] sniffs around the air.", "<span class='warning'>You sniff the air for gas traces.</span>")
|
||||
|
||||
var/turf/location = user.loc
|
||||
if(!istype(location))
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/environment = location.return_air()
|
||||
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles()
|
||||
|
||||
to_chat(user, "<span class='info'><B>Results:</B></span>")
|
||||
if(abs(pressure - ONE_ATMOSPHERE) < 10)
|
||||
to_chat(user, "<span class='info'>Pressure: [round(pressure,0.1)] kPa</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Pressure: [round(pressure,0.1)] kPa</span>")
|
||||
if(total_moles)
|
||||
var/list/env_gases = environment.gases
|
||||
|
||||
var/o2_concentration = env_gases[/datum/gas/oxygen]/total_moles
|
||||
var/n2_concentration = env_gases[/datum/gas/nitrogen]/total_moles
|
||||
var/co2_concentration = env_gases[/datum/gas/carbon_dioxide]/total_moles
|
||||
var/plasma_concentration = env_gases[/datum/gas/plasma]/total_moles
|
||||
GAS_GARBAGE_COLLECT(environment.gases)
|
||||
|
||||
if(abs(n2_concentration - N2STANDARD) < 20)
|
||||
to_chat(user, "<span class='info'>Nitrogen: [round(n2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Nitrogen: [round(n2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(abs(o2_concentration - O2STANDARD) < 2)
|
||||
to_chat(user, "<span class='info'>Oxygen: [round(o2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Oxygen: [round(o2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(co2_concentration > 0.01)
|
||||
to_chat(user, "<span class='alert'>CO2: [round(co2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='info'>CO2: [round(co2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(plasma_concentration > 0.005)
|
||||
to_chat(user, "<span class='alert'>Plasma: [round(plasma_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='info'>Plasma: [round(plasma_concentration*100, 0.01)] %</span>")
|
||||
|
||||
|
||||
for(var/id in env_gases)
|
||||
if(id in GLOB.hardcoded_gases)
|
||||
continue
|
||||
var/gas_concentration = env_gases[id]/total_moles
|
||||
to_chat(user, "<span class='alert'>[GLOB.meta_gas_names[id]]: [round(gas_concentration*100, 0.01)] %</span>")
|
||||
to_chat(user, "<span class='info'>Temperature: [round(environment.temperature-T0C)] °C</span>")
|
||||
|
||||
/obj/item/analyzer/nose/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
do_attack_animation(target, null, src)
|
||||
user.visible_message("<span class='notice'>[user] [pick(attack_verb)] \the [target.name] with their nose!</span>")
|
||||
|
||||
//Delivery
|
||||
/obj/item/storage/bag/borgdelivery
|
||||
name = "fetching storage"
|
||||
desc = "Fetch the thing!"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "dbag"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
|
||||
/obj/item/storage/bag/borgdelivery/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY
|
||||
STR.max_combined_w_class = 5
|
||||
STR.max_items = 1
|
||||
STR.cant_hold = typecacheof(list(/obj/item/disk/nuclear, /obj/item/radio/intercom))
|
||||
|
||||
//Tongue stuff
|
||||
/obj/item/soap/tongue
|
||||
name = "synthetic tongue"
|
||||
desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "synthtongue"
|
||||
hitsound = 'sound/effects/attackblob.ogg'
|
||||
cleanspeed = 80
|
||||
var/status = 0
|
||||
|
||||
/obj/item/soap/tongue/scrubpup
|
||||
cleanspeed = 25 //slightly faster than a mop.
|
||||
|
||||
/obj/item/soap/tongue/New()
|
||||
..()
|
||||
item_flags |= NOBLUDGEON //No more attack messages
|
||||
|
||||
/obj/item/soap/tongue/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.cell && R.cell.charge > 100)
|
||||
if(R.emagged && status == 0)
|
||||
status = !status
|
||||
name = "energized tongue"
|
||||
desc = "Your tongue is energized for dangerously maximum efficency."
|
||||
icon_state = "syndietongue"
|
||||
to_chat(user, "<span class='notice'>Your tongue is now [status ? "Energized" : "Normal"].</span>")
|
||||
cleanspeed = 10 //(nerf'd)tator soap stat
|
||||
else
|
||||
status = 0
|
||||
name = "synthetic tongue"
|
||||
desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
|
||||
icon_state = "synthtongue"
|
||||
cleanspeed = initial(cleanspeed)
|
||||
if(R.emagged)
|
||||
to_chat(user, "<span class='notice'>Your tongue is now [status ? "Energized" : "Normal"].</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/soap/tongue/afterattack(atom/target, mob/user, proximity)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(!proximity || !check_allowed_items(target))
|
||||
return
|
||||
if(R.client && (target in R.client.screen))
|
||||
to_chat(R, "<span class='warning'>You need to take that [target.name] off before cleaning it!</span>")
|
||||
else if(is_cleanable(target))
|
||||
R.visible_message("[R] begins to lick off \the [target.name].", "<span class='warning'>You begin to lick off \the [target.name]...</span>")
|
||||
if(do_after(R, src.cleanspeed, target = target))
|
||||
if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish licking off \the [target.name].</span>")
|
||||
qdel(target)
|
||||
R.cell.give(50)
|
||||
else if(isobj(target)) //hoo boy. danger zone man
|
||||
if(istype(target,/obj/item/trash))
|
||||
R.visible_message("[R] nibbles away at \the [target.name].", "<span class='warning'>You begin to nibble away at \the [target.name]...</span>")
|
||||
if(!do_after(R, src.cleanspeed, target = target))
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
qdel(target)
|
||||
R.cell.give(250)
|
||||
return
|
||||
if(istype(target,/obj/item/stock_parts/cell))
|
||||
R.visible_message("[R] begins cramming \the [target.name] down its throat.", "<span class='warning'>You begin cramming \the [target.name] down your throat...</span>")
|
||||
if(!do_after(R, 50, target = target))
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
var/obj/item/stock_parts/cell/C = target
|
||||
R.cell.charge = R.cell.charge + (C.charge / 3) //Instant full cell upgrades op idgaf
|
||||
qdel(target)
|
||||
return
|
||||
var/obj/item/I = target //HAHA FUCK IT, NOT LIKE WE ALREADY HAVE A SHITTON OF WAYS TO REMOVE SHIT
|
||||
if(!I.anchored && R.emagged)
|
||||
R.visible_message("[R] begins chewing up \the [target.name]. Looks like it's trying to loophole around its diet restriction!", "<span class='warning'>You begin chewing up \the [target.name]...</span>")
|
||||
if(!do_after(R, 100, target = I)) //Nerf dat time yo
|
||||
return //If they moved away, you can't eat them.
|
||||
visible_message("<span class='warning'>[R] chews up \the [target.name] and cleans off the debris!</span>")
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
qdel(I)
|
||||
R.cell.give(500)
|
||||
return
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
else if(ishuman(target))
|
||||
var/mob/living/L = target
|
||||
if(status == 0 && check_zone(R.zone_selected) == "head")
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]'s face!</span>", "<span class='notice'>You affectionally lick \the [L]'s face!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
if(istype(L) && L.fire_stacks > 0)
|
||||
L.adjust_fire_stacks(-10)
|
||||
return
|
||||
else if(status == 0)
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]!</span>", "<span class='notice'>You affectionally lick \the [L]!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
if(istype(L) && L.fire_stacks > 0)
|
||||
L.adjust_fire_stacks(-10)
|
||||
return
|
||||
else
|
||||
if(R.cell.charge <= 800)
|
||||
to_chat(R, "Insufficent Power!")
|
||||
return
|
||||
L.Stun(4) // normal stunbaton is force 7 gimme a break good sir!
|
||||
L.Knockdown(80)
|
||||
L.apply_effect(EFFECT_STUTTER, 4)
|
||||
L.visible_message("<span class='danger'>[R] has shocked [L] with its tongue!</span>", \
|
||||
"<span class='userdanger'>[R] has shocked you with its tongue!</span>")
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
R.cell.use(666)
|
||||
log_combat(R, L, "tongue stunned")
|
||||
|
||||
else if(istype(target, /obj/structure/window))
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
target.set_opacity(initial(target.opacity))
|
||||
else
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
var/obj/effect/decal/cleanable/C = locate() in target
|
||||
qdel(C)
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
|
||||
target.wash_cream()
|
||||
return
|
||||
|
||||
//Nerfed tongue for flavour reasons (haha geddit?). Used for aux skins for regular borgs
|
||||
/obj/item/soap/tongue/flavour
|
||||
desc = "For giving affectionate kisses."
|
||||
|
||||
/obj/item/soap/tongue/flavour/attack_self(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/soap/tongue/flavour/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(ishuman(target))
|
||||
var/mob/living/L = target
|
||||
if(status == 0 && check_zone(R.zone_selected) == "head")
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]'s face!</span>", "<span class='notice'>You affectionally lick \the [L]'s face!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
return
|
||||
else if(status == 0)
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]!</span>", "<span class='notice'>You affectionally lick \the [L]!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
return
|
||||
|
||||
//Same as above but for noses
|
||||
/obj/item/analyzer/nose/flavour/AltClick(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/analyzer/nose/flavour/attack_self(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/analyzer/nose/flavour/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
do_attack_animation(target, null, src)
|
||||
user.visible_message("<span class='notice'>[user] [pick(attack_verb)] \the [target.name] with their nose!</span>")
|
||||
|
||||
|
||||
//Dogfood
|
||||
|
||||
/obj/item/trash/rkibble
|
||||
name = "robo kibble"
|
||||
desc = "A novelty bowl of assorted mech fabricator byproducts. Mockingly feed this to the sec-dog to help it recharge."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state= "kibble"
|
||||
|
||||
// Pounce stuff for K-9
|
||||
|
||||
/obj/item/dogborg/pounce
|
||||
name = "pounce"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "pounce"
|
||||
desc = "Leap at your target to momentarily stun them."
|
||||
force = 0
|
||||
throwforce = 0
|
||||
|
||||
/obj/item/dogborg/pounce/New()
|
||||
..()
|
||||
item_flags |= NOBLUDGEON
|
||||
|
||||
/mob/living/silicon/robot
|
||||
var/leaping = 0
|
||||
var/pounce_cooldown = 0
|
||||
var/pounce_cooldown_time = 30 //Time in deciseconds between pounces
|
||||
var/pounce_spoolup = 5 //Time in deciseconds for the pounce to happen after clicking
|
||||
var/pounce_stamloss_cap = 120 //How much staminaloss pounces alone are capable of bringing a spaceman to
|
||||
var/pounce_stamloss = 80 //Base staminaloss value of the pounce
|
||||
var/leap_at
|
||||
var/disabler
|
||||
var/laser
|
||||
var/sleeper_g
|
||||
var/sleeper_r
|
||||
var/sleeper_nv
|
||||
|
||||
#define MAX_K9_LEAP_DIST 4 //because something's definitely borked the pounce functioning from a distance.
|
||||
|
||||
/obj/item/dogborg/pounce/afterattack(atom/A, mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R && (world.time >= R.pounce_cooldown))
|
||||
R.pounce_cooldown = world.time + R.pounce_cooldown_time
|
||||
to_chat(R, "<span class ='warning'>Your targeting systems lock on to [A]...</span>")
|
||||
playsound(R, 'sound/effects/servostep.ogg', 100, TRUE)
|
||||
addtimer(CALLBACK(R, /mob/living/silicon/robot.proc/leap_at, A), R.pounce_spoolup)
|
||||
else if(R && (world.time < R.pounce_cooldown))
|
||||
to_chat(R, "<span class='danger'>Your leg actuators are still recharging!</span>")
|
||||
|
||||
/mob/living/silicon/robot/proc/leap_at(atom/A)
|
||||
if(leaping || stat || buckled || lying)
|
||||
return
|
||||
|
||||
if(!has_gravity(src) || !has_gravity(A))
|
||||
to_chat(src,"<span class='danger'>It is unsafe to leap without gravity!</span>")
|
||||
//It's also extremely buggy visually, so it's balance+bugfix
|
||||
return
|
||||
|
||||
if(cell.charge <= 750)
|
||||
to_chat(src,"<span class='danger'>Insufficent reserves for jump actuators!</span>")
|
||||
return
|
||||
|
||||
else
|
||||
leaping = 1
|
||||
weather_immunities += "lava"
|
||||
pixel_y = 10
|
||||
update_icons()
|
||||
throw_at(A, MAX_K9_LEAP_DIST, 1, spin=0, diagonals_first = 1)
|
||||
cell.use(750) //Less than a stunbaton since stunbatons hit everytime.
|
||||
playsound(src, 'sound/effects/stealthoff.ogg', 25, TRUE, -1)
|
||||
weather_immunities -= "lava"
|
||||
|
||||
/mob/living/silicon/robot/throw_impact(atom/A)
|
||||
|
||||
if(!leaping)
|
||||
return ..()
|
||||
|
||||
if(A)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(!L.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK))
|
||||
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
|
||||
L.Knockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1)
|
||||
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
|
||||
step_towards(src,L)
|
||||
log_combat(src, L, "borg pounced")
|
||||
else
|
||||
Knockdown(15, 1, 1)
|
||||
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
spawn(pounce_cooldown_time) //3s by default
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
else if(A.density && !A.CanPass(src))
|
||||
visible_message("<span class ='danger'>[src] smashes into [A]!</span>", "<span class ='userdanger'>You smash into [A]!</span>")
|
||||
playsound(src, 'sound/items/trayhit1.ogg', 50, 1)
|
||||
Knockdown(15, 1, 1)
|
||||
|
||||
if(leaping)
|
||||
leaping = 0
|
||||
pixel_y = initial(pixel_y)
|
||||
update_icons()
|
||||
update_canmove()
|
||||
/*
|
||||
DOG BORG EQUIPMENT HERE
|
||||
SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
|
||||
*/
|
||||
|
||||
/obj/item/dogborg/jaws
|
||||
name = "Dogborg jaws"
|
||||
desc = "The jaws of the debug errors oh god."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
force = 1
|
||||
throwforce = 0
|
||||
w_class = 3
|
||||
hitsound = 'sound/weapons/bite.ogg'
|
||||
sharpness = IS_SHARP
|
||||
var/stamtostunconversion = 0.1 //Total stamloss gets multiplied by this value for the help intent hard stun. Resting adds an additional 2x multiplier on top. Keep this low or so help me god.
|
||||
var/stuncooldown = 4 SECONDS //How long it takes before you're able to attempt to stun a target again
|
||||
var/nextstuntime
|
||||
|
||||
/obj/item/dogborg/jaws/examine(mob/user)
|
||||
. = ..()
|
||||
if(!CONFIG_GET(flag/weaken_secborg))
|
||||
. += "<span class='notice'>Use help intent to attempt to non-lethally incapacitate the target by latching on with your maw. This is more effective against exhausted and resting targets.</span>"
|
||||
|
||||
/obj/item/dogborg/jaws/big
|
||||
name = "combat jaws"
|
||||
desc = "The jaws of the law. Very sharp."
|
||||
icon_state = "jaws"
|
||||
force = 15 //Chomp chomp. Crew harm.
|
||||
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
|
||||
stamtostunconversion = 0.2 // 100*0.2*2=40. Stun's just long enough to slap on cuffs with click delay if the target is near hard stamcrit.
|
||||
stuncooldown = 6 SECONDS
|
||||
|
||||
|
||||
/obj/item/dogborg/jaws/small
|
||||
name = "puppy jaws"
|
||||
desc = "Rubberized teeth designed to protect accidental harm. Sharp enough for specialized tasks however."
|
||||
icon_state = "smalljaws"
|
||||
force = 6
|
||||
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
|
||||
var/status = 0
|
||||
|
||||
/obj/item/dogborg/jaws/attack(atom/A, mob/living/silicon/robot/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(!CONFIG_GET(flag/weaken_secborg) && user.a_intent != INTENT_HARM && istype(A, /mob/living))
|
||||
if(A == user.pulling)
|
||||
to_chat(user, "<span class='warning'>You already have [A] in your jaws.</span>")
|
||||
return
|
||||
if(nextstuntime >= world.time)
|
||||
to_chat(user, "<span class='warning'>Your jaw servos are still recharging.</span>")
|
||||
return
|
||||
nextstuntime = world.time + stuncooldown
|
||||
var/mob/living/M = A
|
||||
var/cachedstam = M.getStaminaLoss()
|
||||
var/totalstuntime = cachedstam * stamtostunconversion * (M.lying ? 2 : 1)
|
||||
if(!M.resting)
|
||||
M.Knockdown(cachedstam*2) //BORK BORK. GET DOWN.
|
||||
M.Stun(totalstuntime)
|
||||
user.do_attack_animation(A, ATTACK_EFFECT_BITE)
|
||||
user.start_pulling(M, TRUE) //Yip yip. Come with.
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
M.visible_message("<span class='danger'>[user] clamps [user.p_their()] [src] onto [M] and latches on!</span>", "<span class='userdanger'>[user] clamps [user.p_their()] [src] onto you and latches on!</span>")
|
||||
if(totalstuntime >= 4 SECONDS)
|
||||
playsound(usr, 'sound/effects/k9_jaw_strong.ogg', 75, FALSE, 2) //Wuff wuff. Big stun.
|
||||
else
|
||||
playsound(usr, 'sound/effects/k9_jaw_weak.ogg', 50, TRUE, -1) //Arf arf. Pls buff.
|
||||
else
|
||||
. = ..()
|
||||
user.do_attack_animation(A, ATTACK_EFFECT_BITE)
|
||||
|
||||
/obj/item/dogborg/jaws/small/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.cell && R.cell.charge > 100)
|
||||
if(R.emagged && status == 0)
|
||||
name = "combat jaws"
|
||||
icon_state = "jaws"
|
||||
desc = "The jaws of the law."
|
||||
force = 12
|
||||
attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
|
||||
stamtostunconversion = 0.15
|
||||
stuncooldown = 5 SECONDS
|
||||
status = 1
|
||||
to_chat(user, "<span class='notice'>Your jaws are now [status ? "Combat" : "Pup'd"].</span>")
|
||||
else
|
||||
name = "puppy jaws"
|
||||
icon_state = "smalljaws"
|
||||
desc = "The jaws of a small dog."
|
||||
force = initial(force)
|
||||
attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
|
||||
stamtostunconversion = initial(stamtostunconversion)
|
||||
stuncooldown = initial(stuncooldown)
|
||||
status = 0
|
||||
if(R.emagged)
|
||||
to_chat(user, "<span class='notice'>Your jaws are now [status ? "Combat" : "Pup'd"].</span>")
|
||||
update_icon()
|
||||
|
||||
//Boop
|
||||
|
||||
/obj/item/analyzer/nose
|
||||
name = "boop module"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "nose"
|
||||
desc = "The BOOP module"
|
||||
flags_1 = CONDUCT_1
|
||||
force = 0
|
||||
throwforce = 0
|
||||
attack_verb = list("nuzzles", "pushes", "boops")
|
||||
w_class = 1
|
||||
|
||||
/obj/item/analyzer/nose/attack_self(mob/user)
|
||||
user.visible_message("[user] sniffs around the air.", "<span class='warning'>You sniff the air for gas traces.</span>")
|
||||
|
||||
var/turf/location = user.loc
|
||||
if(!istype(location))
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/environment = location.return_air()
|
||||
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles()
|
||||
|
||||
to_chat(user, "<span class='info'><B>Results:</B></span>")
|
||||
if(abs(pressure - ONE_ATMOSPHERE) < 10)
|
||||
to_chat(user, "<span class='info'>Pressure: [round(pressure,0.1)] kPa</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Pressure: [round(pressure,0.1)] kPa</span>")
|
||||
if(total_moles)
|
||||
var/list/env_gases = environment.gases
|
||||
|
||||
var/o2_concentration = env_gases[/datum/gas/oxygen]/total_moles
|
||||
var/n2_concentration = env_gases[/datum/gas/nitrogen]/total_moles
|
||||
var/co2_concentration = env_gases[/datum/gas/carbon_dioxide]/total_moles
|
||||
var/plasma_concentration = env_gases[/datum/gas/plasma]/total_moles
|
||||
GAS_GARBAGE_COLLECT(environment.gases)
|
||||
|
||||
if(abs(n2_concentration - N2STANDARD) < 20)
|
||||
to_chat(user, "<span class='info'>Nitrogen: [round(n2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Nitrogen: [round(n2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(abs(o2_concentration - O2STANDARD) < 2)
|
||||
to_chat(user, "<span class='info'>Oxygen: [round(o2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='alert'>Oxygen: [round(o2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(co2_concentration > 0.01)
|
||||
to_chat(user, "<span class='alert'>CO2: [round(co2_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='info'>CO2: [round(co2_concentration*100, 0.01)] %</span>")
|
||||
|
||||
if(plasma_concentration > 0.005)
|
||||
to_chat(user, "<span class='alert'>Plasma: [round(plasma_concentration*100, 0.01)] %</span>")
|
||||
else
|
||||
to_chat(user, "<span class='info'>Plasma: [round(plasma_concentration*100, 0.01)] %</span>")
|
||||
|
||||
|
||||
for(var/id in env_gases)
|
||||
if(id in GLOB.hardcoded_gases)
|
||||
continue
|
||||
var/gas_concentration = env_gases[id]/total_moles
|
||||
to_chat(user, "<span class='alert'>[GLOB.meta_gas_names[id]]: [round(gas_concentration*100, 0.01)] %</span>")
|
||||
to_chat(user, "<span class='info'>Temperature: [round(environment.temperature-T0C)] °C</span>")
|
||||
|
||||
/obj/item/analyzer/nose/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
do_attack_animation(target, null, src)
|
||||
user.visible_message("<span class='notice'>[user] [pick(attack_verb)] \the [target.name] with their nose!</span>")
|
||||
|
||||
//Delivery
|
||||
/obj/item/storage/bag/borgdelivery
|
||||
name = "fetching storage"
|
||||
desc = "Fetch the thing!"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "dbag"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
|
||||
/obj/item/storage/bag/borgdelivery/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY
|
||||
STR.max_combined_w_class = 5
|
||||
STR.max_items = 1
|
||||
STR.cant_hold = typecacheof(list(/obj/item/disk/nuclear, /obj/item/radio/intercom))
|
||||
|
||||
//Tongue stuff
|
||||
/obj/item/soap/tongue
|
||||
name = "synthetic tongue"
|
||||
desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "synthtongue"
|
||||
hitsound = 'sound/effects/attackblob.ogg'
|
||||
cleanspeed = 80
|
||||
var/status = 0
|
||||
|
||||
/obj/item/soap/tongue/scrubpup
|
||||
cleanspeed = 25 //slightly faster than a mop.
|
||||
|
||||
/obj/item/soap/tongue/New()
|
||||
..()
|
||||
item_flags |= NOBLUDGEON //No more attack messages
|
||||
|
||||
/obj/item/soap/tongue/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.cell && R.cell.charge > 100)
|
||||
if(R.emagged && status == 0)
|
||||
status = !status
|
||||
name = "energized tongue"
|
||||
desc = "Your tongue is energized for dangerously maximum efficency."
|
||||
icon_state = "syndietongue"
|
||||
to_chat(user, "<span class='notice'>Your tongue is now [status ? "Energized" : "Normal"].</span>")
|
||||
cleanspeed = 10 //(nerf'd)tator soap stat
|
||||
else
|
||||
status = 0
|
||||
name = "synthetic tongue"
|
||||
desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
|
||||
icon_state = "synthtongue"
|
||||
cleanspeed = initial(cleanspeed)
|
||||
if(R.emagged)
|
||||
to_chat(user, "<span class='notice'>Your tongue is now [status ? "Energized" : "Normal"].</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/soap/tongue/afterattack(atom/target, mob/user, proximity)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(!proximity || !check_allowed_items(target))
|
||||
return
|
||||
if(R.client && (target in R.client.screen))
|
||||
to_chat(R, "<span class='warning'>You need to take that [target.name] off before cleaning it!</span>")
|
||||
else if(is_cleanable(target))
|
||||
R.visible_message("[R] begins to lick off \the [target.name].", "<span class='warning'>You begin to lick off \the [target.name]...</span>")
|
||||
if(do_after(R, src.cleanspeed, target = target))
|
||||
if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish licking off \the [target.name].</span>")
|
||||
qdel(target)
|
||||
R.cell.give(50)
|
||||
else if(isobj(target)) //hoo boy. danger zone man
|
||||
if(istype(target,/obj/item/trash))
|
||||
R.visible_message("[R] nibbles away at \the [target.name].", "<span class='warning'>You begin to nibble away at \the [target.name]...</span>")
|
||||
if(!do_after(R, src.cleanspeed, target = target))
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
qdel(target)
|
||||
R.cell.give(250)
|
||||
return
|
||||
if(istype(target,/obj/item/stock_parts/cell))
|
||||
R.visible_message("[R] begins cramming \the [target.name] down its throat.", "<span class='warning'>You begin cramming \the [target.name] down your throat...</span>")
|
||||
if(!do_after(R, 50, target = target))
|
||||
return //If they moved away, you can't eat them.
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
var/obj/item/stock_parts/cell/C = target
|
||||
R.cell.charge = R.cell.charge + (C.charge / 3) //Instant full cell upgrades op idgaf
|
||||
qdel(target)
|
||||
return
|
||||
var/obj/item/I = target //HAHA FUCK IT, NOT LIKE WE ALREADY HAVE A SHITTON OF WAYS TO REMOVE SHIT
|
||||
if(!I.anchored && R.emagged)
|
||||
R.visible_message("[R] begins chewing up \the [target.name]. Looks like it's trying to loophole around its diet restriction!", "<span class='warning'>You begin chewing up \the [target.name]...</span>")
|
||||
if(!do_after(R, 100, target = I)) //Nerf dat time yo
|
||||
return //If they moved away, you can't eat them.
|
||||
visible_message("<span class='warning'>[R] chews up \the [target.name] and cleans off the debris!</span>")
|
||||
to_chat(R, "<span class='notice'>You finish off \the [target.name].</span>")
|
||||
qdel(I)
|
||||
R.cell.give(500)
|
||||
return
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
else if(ishuman(target))
|
||||
var/mob/living/L = target
|
||||
if(status == 0 && check_zone(R.zone_selected) == "head")
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]'s face!</span>", "<span class='notice'>You affectionally lick \the [L]'s face!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
if(istype(L) && L.fire_stacks > 0)
|
||||
L.adjust_fire_stacks(-10)
|
||||
return
|
||||
else if(status == 0)
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]!</span>", "<span class='notice'>You affectionally lick \the [L]!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
if(istype(L) && L.fire_stacks > 0)
|
||||
L.adjust_fire_stacks(-10)
|
||||
return
|
||||
else
|
||||
if(R.cell.charge <= 800)
|
||||
to_chat(R, "Insufficent Power!")
|
||||
return
|
||||
L.Stun(4) // normal stunbaton is force 7 gimme a break good sir!
|
||||
L.Knockdown(80)
|
||||
L.apply_effect(EFFECT_STUTTER, 4)
|
||||
L.visible_message("<span class='danger'>[R] has shocked [L] with its tongue!</span>", \
|
||||
"<span class='userdanger'>[R] has shocked you with its tongue!</span>")
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
R.cell.use(666)
|
||||
log_combat(R, L, "tongue stunned")
|
||||
|
||||
else if(istype(target, /obj/structure/window))
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
target.set_opacity(initial(target.opacity))
|
||||
else
|
||||
R.visible_message("[R] begins to lick \the [target.name] clean...", "<span class='notice'>You begin to lick \the [target.name] clean...</span>")
|
||||
if(do_after(user, src.cleanspeed, target = target))
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
var/obj/effect/decal/cleanable/C = locate() in target
|
||||
qdel(C)
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
SEND_SIGNAL(target, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM)
|
||||
target.wash_cream()
|
||||
return
|
||||
|
||||
//Nerfed tongue for flavour reasons (haha geddit?). Used for aux skins for regular borgs
|
||||
/obj/item/soap/tongue/flavour
|
||||
desc = "For giving affectionate kisses."
|
||||
|
||||
/obj/item/soap/tongue/flavour/attack_self(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/soap/tongue/flavour/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(ishuman(target))
|
||||
var/mob/living/L = target
|
||||
if(status == 0 && check_zone(R.zone_selected) == "head")
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]'s face!</span>", "<span class='notice'>You affectionally lick \the [L]'s face!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
return
|
||||
else if(status == 0)
|
||||
R.visible_message("<span class='warning'>\the [R] affectionally licks \the [L]!</span>", "<span class='notice'>You affectionally lick \the [L]!</span>")
|
||||
playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
|
||||
return
|
||||
|
||||
//Same as above but for noses
|
||||
/obj/item/analyzer/nose/flavour/AltClick(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/analyzer/nose/flavour/attack_self(mob/user)
|
||||
return
|
||||
|
||||
/obj/item/analyzer/nose/flavour/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
do_attack_animation(target, null, src)
|
||||
user.visible_message("<span class='notice'>[user] [pick(attack_verb)] \the [target.name] with their nose!</span>")
|
||||
|
||||
|
||||
//Dogfood
|
||||
|
||||
/obj/item/trash/rkibble
|
||||
name = "robo kibble"
|
||||
desc = "A novelty bowl of assorted mech fabricator byproducts. Mockingly feed this to the sec-dog to help it recharge."
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state= "kibble"
|
||||
|
||||
// Pounce stuff for K-9
|
||||
|
||||
/obj/item/dogborg/pounce
|
||||
name = "pounce"
|
||||
icon = 'icons/mob/dogborg.dmi'
|
||||
icon_state = "pounce"
|
||||
desc = "Leap at your target to momentarily stun them."
|
||||
force = 0
|
||||
throwforce = 0
|
||||
|
||||
/obj/item/dogborg/pounce/New()
|
||||
..()
|
||||
item_flags |= NOBLUDGEON
|
||||
|
||||
/mob/living/silicon/robot
|
||||
var/leaping = 0
|
||||
var/pounce_cooldown = 0
|
||||
var/pounce_cooldown_time = 30 //Time in deciseconds between pounces
|
||||
var/pounce_spoolup = 5 //Time in deciseconds for the pounce to happen after clicking
|
||||
var/pounce_stamloss_cap = 120 //How much staminaloss pounces alone are capable of bringing a spaceman to
|
||||
var/pounce_stamloss = 80 //Base staminaloss value of the pounce
|
||||
var/leap_at
|
||||
var/disabler
|
||||
var/laser
|
||||
var/sleeper_g
|
||||
var/sleeper_r
|
||||
var/sleeper_nv
|
||||
|
||||
#define MAX_K9_LEAP_DIST 4 //because something's definitely borked the pounce functioning from a distance.
|
||||
|
||||
/obj/item/dogborg/pounce/afterattack(atom/A, mob/user)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R && (world.time >= R.pounce_cooldown))
|
||||
R.pounce_cooldown = world.time + R.pounce_cooldown_time
|
||||
to_chat(R, "<span class ='warning'>Your targeting systems lock on to [A]...</span>")
|
||||
playsound(R, 'sound/effects/servostep.ogg', 100, TRUE)
|
||||
addtimer(CALLBACK(R, /mob/living/silicon/robot.proc/leap_at, A), R.pounce_spoolup)
|
||||
else if(R && (world.time < R.pounce_cooldown))
|
||||
to_chat(R, "<span class='danger'>Your leg actuators are still recharging!</span>")
|
||||
|
||||
/mob/living/silicon/robot/proc/leap_at(atom/A)
|
||||
if(leaping || stat || buckled || lying)
|
||||
return
|
||||
|
||||
if(!has_gravity(src) || !has_gravity(A))
|
||||
to_chat(src,"<span class='danger'>It is unsafe to leap without gravity!</span>")
|
||||
//It's also extremely buggy visually, so it's balance+bugfix
|
||||
return
|
||||
|
||||
if(cell.charge <= 750)
|
||||
to_chat(src,"<span class='danger'>Insufficent reserves for jump actuators!</span>")
|
||||
return
|
||||
|
||||
else
|
||||
leaping = 1
|
||||
weather_immunities += "lava"
|
||||
pixel_y = 10
|
||||
update_icons()
|
||||
throw_at(A, MAX_K9_LEAP_DIST, 1, spin=0, diagonals_first = 1)
|
||||
cell.use(750) //Less than a stunbaton since stunbatons hit everytime.
|
||||
playsound(src, 'sound/effects/stealthoff.ogg', 25, TRUE, -1)
|
||||
weather_immunities -= "lava"
|
||||
|
||||
/mob/living/silicon/robot/throw_impact(atom/A)
|
||||
|
||||
if(!leaping)
|
||||
return ..()
|
||||
|
||||
if(A)
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(!L.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK))
|
||||
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
|
||||
L.Knockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice.
|
||||
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1)
|
||||
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
|
||||
step_towards(src,L)
|
||||
log_combat(src, L, "borg pounced")
|
||||
else
|
||||
Knockdown(15, 1, 1)
|
||||
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
spawn(pounce_cooldown_time) //3s by default
|
||||
pounce_cooldown = !pounce_cooldown
|
||||
else if(A.density && !A.CanPass(src))
|
||||
visible_message("<span class ='danger'>[src] smashes into [A]!</span>", "<span class ='userdanger'>You smash into [A]!</span>")
|
||||
playsound(src, 'sound/items/trayhit1.ogg', 50, 1)
|
||||
Knockdown(15, 1, 1)
|
||||
|
||||
if(leaping)
|
||||
leaping = 0
|
||||
pixel_y = initial(pixel_y)
|
||||
update_icons()
|
||||
update_canmove()
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@
|
||||
id = "10mminc"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASMA = 50000, MAT_METAL = 18000)
|
||||
reagents_list = list("plasma" = 120, "napalm" = 240)
|
||||
reagents_list = list(/datum/reagent/toxin/plasma = 120, /datum/reagent/napalm = 240)
|
||||
build_path = /obj/item/ammo_box/magazine/m10mm/fire
|
||||
category = list("Weapons")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
@@ -25,7 +25,7 @@
|
||||
id = "10mmhp"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 40000, MAT_GLASS = 50000)
|
||||
reagents_list = list("sonic_powder" = 280)
|
||||
reagents_list = list(/datum/reagent/sonic_powder = 280)
|
||||
build_path = /obj/item/ammo_box/magazine/m10mm/hp
|
||||
category = list("Ammo")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
@@ -43,7 +43,7 @@ obj/item/gun/energy/e_gun/cx/AltClick(mob/living/user)
|
||||
body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
|
||||
update_icon()
|
||||
|
||||
obj/item/gun/energy/e_gun/cx/worn_overlays(isinhands, icon_file)
|
||||
obj/item/gun/energy/e_gun/cx/worn_overlays(isinhands, icon_file, style_flags = NONE)
|
||||
. = ..()
|
||||
if(isinhands)
|
||||
var/mutable_appearance/body_inhand = mutable_appearance(icon_file, "cxe_body")
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
. = ..()
|
||||
. += "<span class='notice'>Alt-click to change firing modes.</span>"
|
||||
|
||||
/obj/item/gun/energy/pumpaction/worn_overlays(isinhands, icon_file) //ammo counter for inhands
|
||||
/obj/item/gun/energy/pumpaction/worn_overlays(isinhands, icon_file, style_flags = NONE) //ammo counter for inhands
|
||||
. = ..()
|
||||
var/ratio = CEILING((cell.charge / cell.maxcharge) * charge_sections, 1)
|
||||
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
|
||||
|
||||
@@ -131,7 +131,6 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
|
||||
/datum/reagent/fermi/enthrall
|
||||
name = "MKUltra"
|
||||
id = "enthrall"
|
||||
description = "A forbidden deep red mixture that increases a person's succeptability to another's words. When taken by the creator, it will enhance the draw of their voice to those affected by it."
|
||||
color = "#660015" // rgb: , 0, 255
|
||||
taste_description = "synthetic chocolate, a base tone of alcohol, and high notes of roses"
|
||||
@@ -149,7 +148,6 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
|
||||
/datum/reagent/fermi/enthrall/test
|
||||
name = "MKUltraTest"
|
||||
id = "enthrallTest"
|
||||
description = "A forbidden deep red mixture that makes you like Fermis a little too much. Unobtainable and due to be removed from the wiki."
|
||||
data = list("creatorID" = "honkatonkbramblesnatch", "creatorGender" = "Mistress", "creatorName" = "Fermis Yakumo")
|
||||
creatorID = "honkatonkbramblesnatch"//ckey
|
||||
@@ -158,7 +156,6 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
purity = 1
|
||||
|
||||
/datum/reagent/fermi/enthrall/test/on_new()
|
||||
id = "enthrall"
|
||||
..()
|
||||
creator = get_mob_by_key(creatorID)
|
||||
|
||||
@@ -171,7 +168,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
/datum/reagent/fermi/enthrall/on_mob_add(mob/living/carbon/M)
|
||||
. = ..()
|
||||
if(M.client?.prefs.cit_toggles & NEVER_HYPNO) // Just in case people are opting out of this
|
||||
holder.remove_reagent(id, 10000000)
|
||||
holder.del_reagent(type)
|
||||
return
|
||||
if(!ishuman(M))//Just to make sure screwy stuff doesn't happen.
|
||||
return
|
||||
@@ -221,7 +218,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
|
||||
if(LAZYLEN(seen))
|
||||
return
|
||||
M.reagents.remove_reagent(id, volume)
|
||||
M.reagents.del_reagent(type)
|
||||
FallInLove(M, pick(seen))
|
||||
return
|
||||
|
||||
@@ -230,7 +227,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
if(M.has_status_effect(STATUS_EFFECT_INLOVE))
|
||||
return
|
||||
if((C in viewers(7, get_turf(M))) && (C.client))
|
||||
M.reagents.remove_reagent(id, volume)
|
||||
M.reagents.del_reagent(type)
|
||||
FallInLove(C, M)
|
||||
return
|
||||
if (M.ckey == creatorID && creatorName == M.real_name)//If you yourself drink it, it supresses the vocal effects, for stealth. NEVERMIND ADD THIS LATER I CAN'T GET IT TO WORK
|
||||
@@ -282,7 +279,6 @@ Creating a chem with a low purity will make you permanently fall in love with so
|
||||
//Creates a gas cloud when the reaction blows up, causing everyone in it to fall in love with someone/something while it's in their system.
|
||||
/datum/reagent/fermi/enthrallExplo//Created in a gas cloud when it explodes
|
||||
name = "Gaseous MKUltra"
|
||||
id = "enthrallExplo"
|
||||
description = "A forbidden deep red gas that overwhelms a foreign body, causing the person they next lay their eyes on to become more interesting. Studies have shown that people are 66% more likely to make friends with this in the air. Produced when MKUltra explodes."
|
||||
color = "#2C051A" // rgb: , 0, 255
|
||||
metabolization_rate = 0.1
|
||||
|
||||
@@ -39,7 +39,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
//Clone serum #chemClone
|
||||
/datum/reagent/fermi/SDGF //vars, mostly only care about keeping track if there's a player in the clone or not.
|
||||
name = "synthetic-derived growth factor"
|
||||
id = "SDGF"
|
||||
description = "A rapidly diving mass of Embryonic stem cells. These cells are missing a nucleus and quickly replicate a host’s DNA before growing to form an almost perfect clone of the host. In some cases neural replication takes longer, though the underlying reason underneath has yet to be determined."
|
||||
color = "#a502e0" // rgb: 96, 0, 255
|
||||
var/playerClone = FALSE
|
||||
@@ -49,9 +48,9 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
var/list/candies = list()
|
||||
var/pollStarted = FALSE
|
||||
var/startHunger
|
||||
impure_chem = "SDGFtox"
|
||||
impure_chem = /datum/reagent/impure/SDGFtox
|
||||
inverse_chem_val = 0.5
|
||||
inverse_chem = "SDZF"
|
||||
inverse_chem = /datum/reagent/impure/SDZF
|
||||
can_synth = TRUE
|
||||
|
||||
|
||||
@@ -122,8 +121,8 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
SM.nutrition = startHunger/2
|
||||
|
||||
//Transfer remaining reagent to clone. I think around 30u will make a healthy clone, otherwise they'll have clone damage, blood loss, brain damage and hunger.
|
||||
SM.reagents.add_reagent("SDGFheal", volume)
|
||||
M.reagents.remove_reagent(id, volume)
|
||||
SM.reagents.add_reagent(/datum/reagent/fermi/SDGFheal, volume)
|
||||
M.reagents.remove_reagent(type, volume)
|
||||
log_game("FERMICHEM: [volume]u of SDGFheal has been transferred to the clone")
|
||||
SSblackbox.record_feedback("tally", "fermi_chem", 1, "Sentient clones made")
|
||||
return ..()
|
||||
@@ -141,7 +140,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
M.adjustBruteLoss(-1, 0)
|
||||
M.adjustFireLoss(-1, 0)
|
||||
M.heal_bodypart_damage(1,1)
|
||||
M.reagents.remove_reagent(id, 1)//faster rate of loss.
|
||||
M.reagents.remove_reagent(type, 1)//faster rate of loss.
|
||||
else //If there's no ghosts, but they've made a large amount, then proceed to make flavourful clone, where you become fat and useless until you split.
|
||||
switch(current_cycle)
|
||||
if(21)
|
||||
@@ -185,7 +184,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
log_game("FERMICHEM: [M] ckey: [M.key] has created a mindless clone of themselves")
|
||||
SSblackbox.record_feedback("tally", "fermi_chem", 1, "Braindead clones made")
|
||||
if(87 to INFINITY)
|
||||
M.reagents.remove_reagent(id, volume)//removes SGDF on completion. Has to do it this way because of how i've coded it. If some madlab gets over 1k of SDGF, they can have the clone healing.
|
||||
M.reagents.remove_reagent(type, volume)//removes SGDF on completion. Has to do it this way because of how i've coded it. If some madlab gets over 1k of SDGF, they can have the clone healing.
|
||||
|
||||
|
||||
..()
|
||||
@@ -265,18 +264,17 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
SM.set_species(mutation)
|
||||
|
||||
//Transfer remaining reagent to clone. I think around 30u will make a healthy clone, otherwise they'll have clone damage, blood loss, brain damage and hunger.
|
||||
SM.reagents.add_reagent("SDGFheal", volume)
|
||||
M.reagents.remove_reagent(id, volume)
|
||||
|
||||
SM.reagents.add_reagent(/datum/reagent/fermi/SDGFheal, volume)
|
||||
log_combat(M, M, "SDGF clone-vived", src)
|
||||
M.reagents.del_reagent(type)
|
||||
SM.updatehealth()
|
||||
SM.emote("gasp")
|
||||
log_combat(M, M, "SDGF clone-vived", src)
|
||||
return
|
||||
..()
|
||||
|
||||
//Unobtainable, used in clone spawn.
|
||||
/datum/reagent/fermi/SDGFheal
|
||||
name = "synthetic-derived healing factor"
|
||||
id = "SDGFheal"
|
||||
description = "Leftover SDGF is transferred into the resulting clone, which quickly heals up the stresses from suddenly splitting. Restores blood, nutrition, and repaires brain and clone damage quickly. Only obtainable from using excess SDGF, and only enters the cloned body."
|
||||
metabolization_rate = 0.8
|
||||
can_synth = FALSE
|
||||
@@ -292,7 +290,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
//Unobtainable, used if SDGF is impure but not too impure
|
||||
/datum/reagent/impure/SDGFtox
|
||||
name = "Synthetic-derived apoptosis factor"
|
||||
id = "SDGFtox"
|
||||
description = "Impure synthetic-derived growth factor causes certain cells to undergo cell death, causing clone damage, and damaging blood cells."//i.e. tell me please, figure it's a good way to get pinged for bugfixes.
|
||||
metabolization_rate = 1
|
||||
can_synth = FALSE
|
||||
@@ -305,7 +302,6 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
//Fail state of SDGF
|
||||
/datum/reagent/impure/SDZF
|
||||
name = "synthetic-derived zombie factor"
|
||||
id = "SDZF"
|
||||
description = "A horribly peverse mass of Embryonic stem cells made real by the hands of a failed chemist. Emulates normal synthetic-derived growth factor, but produces a hostile zombie at the end of it."
|
||||
color = "#a502e0" // rgb: 96, 0, 255
|
||||
metabolization_rate = 0.2 * REAGENTS_METABOLISM
|
||||
@@ -338,7 +334,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
M.adjustToxLoss(1, 0)// the warning!
|
||||
|
||||
if(86)//mean clone time!
|
||||
if (!M.reagents.has_reagent("pen_acid"))//Counterplay is pent.)
|
||||
if (!M.reagents.has_reagent(/datum/reagent/medicine/pen_acid))//Counterplay is pent.)
|
||||
message_admins("(non-infectious) SDZF: Zombie spawned at [M] [COORD(M)]!")
|
||||
M.nutrition = startHunger - 500//YOU BEST BE RUNNING AWAY AFTER THIS YOU BADDIE
|
||||
M.next_move_modifier = 1
|
||||
@@ -352,7 +348,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
ZI.name = M.real_name
|
||||
ZI.desc = "[M]'s clone, gone horribly wrong."
|
||||
log_game("FERMICHEM: [M] ckey: [M.key]'s clone has become a horrifying zombie instead")
|
||||
M.reagents.remove_reagent(id, 20)
|
||||
M.reagents.remove_reagent(type, 20)
|
||||
|
||||
else//easier to deal with
|
||||
to_chat(M, "<span class='notice'>The pentetic acid seems to have stopped the decay for now, clumping up the cells into a horrifying tumour!</span>")
|
||||
@@ -362,12 +358,12 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
|
||||
S.name = "Living teratoma"
|
||||
S.real_name = "Living teratoma"//horrifying!!
|
||||
S.rabid = 1//Make them an angery boi
|
||||
M.reagents.remove_reagent(id, volume)
|
||||
M.reagents.remove_reagent(type, volume)
|
||||
to_chat(M, "<span class='warning'>A large glob of the tumour suddenly splits itself from your body. You feel grossed out and slimey...</span>")
|
||||
log_game("FERMICHEM: [M] ckey: [M.key]'s clone has become a horrifying teratoma instead")
|
||||
SSblackbox.record_feedback("tally", "fermi_chem", 1, "Zombie clones made!")
|
||||
|
||||
if(87 to INFINITY)
|
||||
M.adjustToxLoss(2, 0)
|
||||
M.reagents.remove_reagent(id, 1)
|
||||
M.reagents.remove_reagent(type, 1)
|
||||
..()
|
||||
|
||||
@@ -15,7 +15,6 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
|
||||
|
||||
/datum/reagent/fermi/astral // Gives you the ability to astral project for a moment!
|
||||
name = "Astrogen"
|
||||
id = "astral"
|
||||
description = "An opalescent murky liquid that is said to distort your soul from your being."
|
||||
color = "#A080H4" // rgb: , 0, 255
|
||||
taste_description = "your mind"
|
||||
@@ -41,7 +40,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
|
||||
if(origin.mind && origin.mind != originalmind)
|
||||
to_chat(originalmind.current, "<span class='warning'><b><i>There's a foreign presence in your body blocking your return!</b></i></span>")
|
||||
return ..()
|
||||
if(origin.reagents.has_reagent("astral") )
|
||||
if(origin.reagents.has_reagent(/datum/reagent/fermi/astral) )
|
||||
var/datum/reagent/fermi/astral/As = locate(/datum/reagent/fermi/astral) in origin.reagents.reagent_list
|
||||
if(As.current_cycle < 10)
|
||||
to_chat(originalmind.current, "<span class='warning'><b><i>The intensity of the astrogen in your body is too much allow you to return to yourself yet!</b></i></span>")
|
||||
@@ -54,7 +53,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
|
||||
/datum/reagent/fermi/astral/reaction_turf(turf/T, reac_volume)
|
||||
if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
|
||||
var/turf/open/floor/F = T
|
||||
F.PlaceOnTop(/turf/open/floor/fakespace)
|
||||
F.PlaceOnTop(/turf/open/floor/fakespace, flags = CHANGETURF_INHERIT_AIR)
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/astral/reaction_obj(obj/O, reac_volume)
|
||||
@@ -90,7 +89,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die
|
||||
if(prob(50))
|
||||
to_chat(G, "<span class='warning'>The high conentration of Astrogen in your blood causes you to lapse your concentration for a moment, bringing your projection back to yourself!</b></span>")
|
||||
do_teleport(G, M.loc)
|
||||
M.reagents.remove_reagent(id, current_cycle/10, FALSE)//exponent
|
||||
metabolization_rate = current_cycle/10 //exponential
|
||||
sleepytime+=5
|
||||
if(G)//This is a mess because of how slow qdel is, so this is all to stop runtimes.
|
||||
if(G.mind)
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
|
||||
/datum/reagent/fermi/eigenstate
|
||||
name = "Eigenstasium"
|
||||
id = "eigenstate"
|
||||
description = "A strange mixture formed from a controlled reaction of bluespace with plasma, that causes localised eigenstate fluxuations within the patient"
|
||||
taste_description = "wiggly cosmic dust."
|
||||
color = "#5020F4" // rgb: 50, 20, 255
|
||||
@@ -69,7 +68,7 @@
|
||||
/datum/reagent/fermi/eigenstate/on_mob_delete(mob/living/M) //returns back to original location
|
||||
do_sparks(5,FALSE,M)
|
||||
to_chat(M, "<span class='userdanger'>You feel your wavefunction collapse!</span>")
|
||||
if(!M.reagents.has_reagent("stabilizing_agent"))
|
||||
if(!M.reagents.has_reagent(/datum/reagent/stabilizing_agent))
|
||||
do_teleport(M, location_return, 0, asoundin = 'sound/effects/phasein.ogg') //Teleports home
|
||||
do_sparks(5,FALSE,M)
|
||||
qdel(Eigenstate)
|
||||
@@ -169,7 +168,7 @@
|
||||
|
||||
if(prob(20))
|
||||
do_sparks(5,FALSE,M)
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "[id]_overdose")//holdover until above fix works
|
||||
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "[type]_overdose")//holdover until above fix works
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/eigenstate/reaction_turf(turf/T, reac_volume)
|
||||
|
||||
@@ -20,15 +20,14 @@
|
||||
|
||||
/datum/reagent/fermi/breast_enlarger
|
||||
name = "Succubus milk"
|
||||
id = "breast_enlarger"
|
||||
description = "A volatile collodial mixture derived from milk that encourages mammary production via a potent estrogen mix."
|
||||
color = "#E60584" // rgb: 96, 0, 255
|
||||
taste_description = "a milky ice cream like flavour."
|
||||
overdose_threshold = 17
|
||||
metabolization_rate = 0.25
|
||||
impure_chem = "BEsmaller" //If you make an inpure chem, it stalls growth
|
||||
impure_chem = /datum/reagent/fermi/BEsmaller //If you make an inpure chem, it stalls growth
|
||||
inverse_chem_val = 0.35
|
||||
inverse_chem = "BEsmaller" //At really impure vols, it just becomes 100% inverse
|
||||
inverse_chem = /datum/reagent/fermi/BEsmaller //At really impure vols, it just becomes 100% inverse
|
||||
can_synth = FALSE
|
||||
var/message_spam = FALSE
|
||||
|
||||
@@ -44,7 +43,7 @@
|
||||
M.Knockdown(50)
|
||||
M.Stun(50)
|
||||
B.throw_at(T2, 8, 1)
|
||||
M.reagents.remove_reagent(id, volume)
|
||||
M.reagents.del_reagent(type)
|
||||
return
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.getorganslot(ORGAN_SLOT_BREASTS) && H.emergent_genital_call())
|
||||
@@ -78,7 +77,7 @@
|
||||
B.cached_size = 0
|
||||
B.prev_size = 0
|
||||
to_chat(H, "<span class='warning'>Your chest feels warm, tingling with newfound sensitivity.</b></span>")
|
||||
H.reagents.remove_reagent(id, 5)
|
||||
H.reagents.remove_reagent(type, 5)
|
||||
B.Insert(H)
|
||||
|
||||
//If they have them, increase size. If size is comically big, limit movement and rip clothes.
|
||||
@@ -122,7 +121,6 @@
|
||||
|
||||
/datum/reagent/fermi/BEsmaller
|
||||
name = "Modesty milk"
|
||||
id = "BEsmaller"
|
||||
description = "A volatile collodial mixture derived from milk that encourages mammary reduction via a potent estrogen mix. Produced by reacting impure Succubus milk."
|
||||
color = "#E60584" // rgb: 96, 0, 255
|
||||
taste_description = "a milky ice cream like flavour."
|
||||
@@ -140,7 +138,6 @@
|
||||
|
||||
/datum/reagent/fermi/BEsmaller_hypo
|
||||
name = "Rectify milk" //Rectify
|
||||
id = "BEsmaller_hypo"
|
||||
color = "#E60584"
|
||||
taste_description = "a milky ice cream like flavour."
|
||||
metabolization_rate = 0.25
|
||||
@@ -179,15 +176,14 @@
|
||||
//Since someone else made this in the time it took me to PR it, I merged them.
|
||||
/datum/reagent/fermi/penis_enlarger // Due to popular demand...!
|
||||
name = "Incubus draft"
|
||||
id = "penis_enlarger"
|
||||
description = "A volatile collodial mixture derived from various masculine solutions that encourages a larger gentleman's package via a potent testosterone mix, formula derived from a collaboration from Fermichem and Doctor Ronald Hyatt, who is well known for his phallus palace." //The toxic masculinity thing is a joke because I thought it would be funny to include it in the reagents, but I don't think many would find it funny? dumb
|
||||
color = "#888888" // This is greyish..?
|
||||
taste_description = "chinese dragon powder"
|
||||
overdose_threshold = 17 //ODing makes you male and removes female genitals
|
||||
metabolization_rate = 0.5
|
||||
impure_chem = "PEsmaller" //If you make an inpure chem, it stalls growth
|
||||
impure_chem = /datum/reagent/fermi/PEsmaller //If you make an inpure chem, it stalls growth
|
||||
inverse_chem_val = 0.35
|
||||
inverse_chem = "PEsmaller" //At really impure vols, it just becomes 100% inverse and shrinks instead.
|
||||
inverse_chem = /datum/reagent/fermi/PEsmaller //At really impure vols, it just becomes 100% inverse and shrinks instead.
|
||||
can_synth = FALSE
|
||||
var/message_spam = FALSE
|
||||
|
||||
@@ -203,7 +199,7 @@
|
||||
M.Knockdown(50)
|
||||
M.Stun(50)
|
||||
P.throw_at(T2, 8, 1)
|
||||
M.reagents.remove_reagent(id, volume)
|
||||
M.reagents.del_reagent(type)
|
||||
return
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.getorganslot(ORGAN_SLOT_PENIS) && H.emergent_genital_call())
|
||||
@@ -228,7 +224,7 @@
|
||||
P.length = 1
|
||||
to_chat(H, "<span class='warning'>Your groin feels warm, as you feel a newly forming bulge down below.</b></span>")
|
||||
P.prev_length = 1
|
||||
H.reagents.remove_reagent(id, 5)
|
||||
H.reagents.remove_reagent(type, 5)
|
||||
P.Insert(H)
|
||||
|
||||
P.modify_size(0.1)
|
||||
@@ -271,7 +267,6 @@
|
||||
|
||||
/datum/reagent/fermi/PEsmaller // Due to cozmo's request...!
|
||||
name = "Chastity draft"
|
||||
id = "PEsmaller"
|
||||
description = "A volatile collodial mixture derived from various masculine solutions that encourages a smaller gentleman's package via a potent testosterone mix. Produced by reacting impure Incubus draft."
|
||||
color = "#888888" // This is greyish..?
|
||||
taste_description = "chinese dragon powder"
|
||||
@@ -293,7 +288,6 @@
|
||||
|
||||
/datum/reagent/fermi/PEsmaller_hypo
|
||||
name = "Rectify draft"
|
||||
id = "PEsmaller_hypo"
|
||||
color = "#888888" // This is greyish..?
|
||||
taste_description = "chinese dragon powder"
|
||||
description = "A medicine used to treat organomegaly in a patient's penis."
|
||||
|
||||
@@ -3,13 +3,12 @@
|
||||
|
||||
/datum/reagent/fermi
|
||||
name = "Fermi" //This should never exist, but it does so that it can exist in the case of errors..
|
||||
id = "fermi"
|
||||
taste_description = "affection and love!"
|
||||
can_synth = FALSE
|
||||
value = 20
|
||||
impure_chem = "fermiTox"// What chemical is metabolised with an inpure reaction
|
||||
impure_chem = /datum/reagent/impure/fermiTox // What chemical is metabolised with an inpure reaction
|
||||
inverse_chem_val = 0.25 // If the impurity is below 0.5, replace ALL of the chem with inverse_chemupon metabolising
|
||||
inverse_chem = "fermiTox"
|
||||
inverse_chem = /datum/reagent/impure/fermiTox
|
||||
|
||||
|
||||
//This should process fermichems to find out how pure they are and what effect to do.
|
||||
@@ -32,7 +31,6 @@
|
||||
|
||||
/datum/reagent/fermi/hatmium //for hatterhat
|
||||
name = "Hat growth serium"
|
||||
id = "hatmium"
|
||||
description = "A strange substance that draws in a hat from the hat dimention."
|
||||
color = "#7c311a" // rgb: , 0, 255
|
||||
taste_description = "like jerky, whiskey and an off aftertaste of a crypt."
|
||||
@@ -80,7 +78,6 @@
|
||||
|
||||
/datum/reagent/fermi/furranium
|
||||
name = "Furranium"
|
||||
id = "furranium"
|
||||
description = "OwO whats this?"
|
||||
color = "#f9b9bc" // rgb: , 0, 255
|
||||
taste_description = "dewicious degenyewacy"
|
||||
@@ -170,13 +167,12 @@
|
||||
|
||||
/datum/reagent/fermi/nanite_b_gone
|
||||
name = "Nanite bane"
|
||||
id = "nanite_b_gone"
|
||||
description = "A stablised EMP that is highly volatile, shocking small nano machines that will kill them off at a rapid rate in a patient's system."
|
||||
color = "#708f8f"
|
||||
overdose_threshold = 15
|
||||
impure_chem = "nanite_b_goneTox" //If you make an inpure chem, it stalls growth
|
||||
impure_chem = /datum/reagent/fermi/nanite_b_goneTox //If you make an inpure chem, it stalls growth
|
||||
inverse_chem_val = 0.25
|
||||
inverse_chem = "nanite_b_goneTox" //At really impure vols, it just becomes 100% inverse
|
||||
inverse_chem = /datum/reagent/fermi/nanite_b_goneTox //At really impure vols, it just becomes 100% inverse
|
||||
taste_description = "what can only be described as licking a battery."
|
||||
pH = 9
|
||||
value = 90
|
||||
@@ -214,7 +210,6 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
|
||||
/datum/reagent/fermi/nanite_b_goneTox
|
||||
name = "Electromagnetic crystals"
|
||||
id = "nanite_b_goneTox"
|
||||
description = "Causes items upon the patient to sometimes short out, as well as causing a shock in the patient, if the residual charge between the crystals builds up to sufficient quantities"
|
||||
metabolization_rate = 0.5
|
||||
chemical_flags = REAGENT_INVISIBLE
|
||||
@@ -237,7 +232,6 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
|
||||
/datum/reagent/fermi/fermiAcid
|
||||
name = "Acid vapour"
|
||||
id = "fermiAcid"
|
||||
description = "Someone didn't do like an otter, and add acid to water."
|
||||
taste_description = "acid burns, ow"
|
||||
color = "#FFFFFF"
|
||||
@@ -280,7 +274,6 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
|
||||
/datum/reagent/fermi/fermiTest
|
||||
name = "Fermis Test Reagent"
|
||||
id = "fermiTest"
|
||||
description = "You should be really careful with this...! Also, how did you get this?"
|
||||
chemical_flags = REAGENT_FORCEONNEW
|
||||
can_synth = FALSE
|
||||
@@ -290,7 +283,7 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
if(LAZYLEN(holder.reagent_list) == 1)
|
||||
return
|
||||
else
|
||||
holder.remove_reagent("fermiTest", volume)//Avoiding recurrsion
|
||||
holder.del_reagent(type)//Avoiding recurrsion
|
||||
var/location = get_turf(holder.my_atom)
|
||||
if(cached_purity < 0.34 || cached_purity == 1)
|
||||
var/datum/effect_system/foam_spread/s = new()
|
||||
@@ -303,10 +296,10 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
if(cached_purity >= 0.67)
|
||||
for (var/datum/reagent/reagent in holder.reagent_list)
|
||||
if (istype(reagent, /datum/reagent/fermi))
|
||||
var/datum/chemical_reaction/fermi/Ferm = GLOB.chemical_reagents_list[reagent.id]
|
||||
var/datum/chemical_reaction/fermi/Ferm = GLOB.chemical_reagents_list[reagent.type]
|
||||
Ferm.FermiExplode(src, holder.my_atom, holder, holder.total_volume, holder.chem_temp, holder.pH)
|
||||
else
|
||||
var/datum/chemical_reaction/Ferm = GLOB.chemical_reagents_list[reagent.id]
|
||||
var/datum/chemical_reaction/Ferm = GLOB.chemical_reagents_list[reagent.type]
|
||||
Ferm.on_reaction(holder, reagent.volume)
|
||||
for(var/mob/M in viewers(8, location))
|
||||
to_chat(M, "<span class='danger'>The solution reacts dramatically, with a meow!</span>")
|
||||
@@ -315,7 +308,6 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
|
||||
/datum/reagent/fermi/acidic_buffer
|
||||
name = "Acidic buffer"
|
||||
id = "acidic_buffer"
|
||||
description = "This reagent will consume itself and move the pH of a beaker towards acidity when added to another."
|
||||
color = "#fbc314"
|
||||
pH = 0
|
||||
@@ -323,7 +315,7 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
|
||||
//Consumes self on addition and shifts pH
|
||||
/datum/reagent/fermi/acidic_buffer/on_new(datapH)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
|
||||
return ..()
|
||||
data = datapH
|
||||
if(LAZYLEN(holder.reagent_list) == 1)
|
||||
@@ -333,19 +325,18 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The beaker fizzes as the pH changes!</b></span>")
|
||||
playsound(get_turf(holder.my_atom), 'sound/FermiChem/bufferadd.ogg', 50, 1)
|
||||
holder.remove_reagent(id, volume, ignore_pH = TRUE)
|
||||
holder.remove_reagent(type, volume, ignore_pH = TRUE)
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/basic_buffer
|
||||
name = "Basic buffer"
|
||||
id = "basic_buffer"
|
||||
description = "This reagent will consume itself and move the pH of a beaker towards alkalinity when added to another."
|
||||
color = "#3853a4"
|
||||
pH = 14
|
||||
can_synth = TRUE
|
||||
|
||||
/datum/reagent/fermi/basic_buffer/on_new(datapH)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
if(holder.has_reagent(/datum/reagent/stabilizing_agent))
|
||||
return ..()
|
||||
data = datapH
|
||||
if(LAZYLEN(holder.reagent_list) == 1)
|
||||
@@ -355,14 +346,13 @@ datum/reagent/fermi/nanite_b_gone/reaction_obj(obj/O, reac_volume)
|
||||
for(var/mob/M in seen)
|
||||
to_chat(M, "<span class='warning'>The beaker froths as the pH changes!</b></span>")
|
||||
playsound(get_turf(holder.my_atom), 'sound/FermiChem/bufferadd.ogg', 50, 1)
|
||||
holder.remove_reagent(id, volume, ignore_pH = TRUE)
|
||||
holder.remove_reagent(type, volume, ignore_pH = TRUE)
|
||||
..()
|
||||
|
||||
//Turns you into a cute catto while it's in your system.
|
||||
//If you manage to gamble perfectly, makes you have cat ears after you transform back. But really, you shouldn't end up with that with how random it is.
|
||||
/datum/reagent/fermi/secretcatchem //Should I hide this from code divers? A secret cit chem?
|
||||
name = "secretcatchem" //an attempt at hiding it
|
||||
id = "secretcatchem"
|
||||
description = "An illegal and hidden chem that turns people into cats. It's said that it's so rare and unstable that having it means you've been blessed. If used on someone in crit, it will turn them into a cat permanently, until the cat is killed."
|
||||
taste_description = "hairballs and cream"
|
||||
color = "#ffc224"
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
/datum/reagent/fermi/yamerol
|
||||
name = "Yamerol"
|
||||
id = "yamerol"
|
||||
description = "For when you've trouble speaking or breathing, just yell YAMEROL! A chem that helps soothe any congestion problems and at high concentrations restores damaged lungs and tongues!"
|
||||
taste_description = "a weird, syrupy flavour, yamero"
|
||||
color = "#68e83a"
|
||||
pH = 8.6
|
||||
overdose_threshold = 35
|
||||
impure_chem = "yamerol_tox"
|
||||
impure_chem = /datum/reagent/impure/yamerol_tox
|
||||
inverse_chem_val = 0.4
|
||||
inverse_chem = "yamerol_tox"
|
||||
inverse_chem = /datum/reagent/impure/yamerol_tox
|
||||
can_synth = TRUE
|
||||
|
||||
/datum/reagent/fermi/yamerol/on_mob_life(mob/living/carbon/C)
|
||||
@@ -34,7 +33,7 @@
|
||||
qdel(T)
|
||||
nT.Insert(C)
|
||||
to_chat(C, "<span class='notice'>You feel your tongue.... unfluffify...?</span>")
|
||||
holder.remove_reagent(src.id, "10")
|
||||
holder.remove_reagent(type, 10)
|
||||
..()
|
||||
|
||||
/datum/reagent/fermi/yamerol/overdose_process(mob/living/carbon/C)
|
||||
@@ -50,7 +49,7 @@
|
||||
T = new()
|
||||
T.Insert(C)
|
||||
to_chat(C, "<span class='notice'>You feel your tongue reform in your mouth.</span>")
|
||||
holder.remove_reagent(src.id, "10")
|
||||
holder.remove_reagent(type, 10)
|
||||
else
|
||||
if((oT.name == "fluffy tongue") && (purity == 1))
|
||||
var/obj/item/organ/tongue/T
|
||||
@@ -62,19 +61,18 @@
|
||||
qdel(oT)
|
||||
T.Insert(C)
|
||||
to_chat(C, "<span class='notice'>You feel your tongue.... unfluffify...?</span>")
|
||||
holder.remove_reagent(src.id, "10")
|
||||
holder.remove_reagent(type, 10)
|
||||
|
||||
if(!C.getorganslot(ORGAN_SLOT_LUNGS))
|
||||
var/obj/item/organ/lungs/yamerol/L = new()
|
||||
L.Insert(C)
|
||||
to_chat(C, "<span class='notice'>You feel the yamerol merge in your chest.</span>")
|
||||
holder.remove_reagent(src.id, "10")
|
||||
holder.remove_reagent(type, 10)
|
||||
C.adjustOxyLoss(-3)
|
||||
..()
|
||||
|
||||
/datum/reagent/impure/yamerol_tox
|
||||
name = "Yamer oh no"
|
||||
id = "yamerol_tox"
|
||||
description = "A dangerous, cloying toxin that stucks to a patient’s respiratory system, damaging their tongue, lungs and causing suffocation."
|
||||
taste_description = "a weird, syrupy flavour, yamero"
|
||||
color = "#68e83a"
|
||||
@@ -96,7 +94,6 @@
|
||||
|
||||
/datum/reagent/synthtissue
|
||||
name = "Synthtissue"
|
||||
id = "synthtissue"
|
||||
description = "Synthetic tissue used for grafting onto damaged organs during surgery, or for treating limb damage. Has a very tight growth window between 305-320, any higher and the temperature will cause the cells to die. Additionally, growth time is considerably long, so chemists are encouraged to leave beakers with said reaction ongoing, while they tend to their other duties."
|
||||
pH = 7.6
|
||||
metabolization_rate = 0.05 //Give them time to graft
|
||||
@@ -143,7 +140,7 @@
|
||||
if(data["grown_volume"] > 175) //I don't think this is even possible, but damn to I want to see if someone can (bare in mind it takes 2s to grow 0.05u)
|
||||
if(volume >= 14)
|
||||
if(C.regenerate_organs(only_one = TRUE))
|
||||
C.reagents.remove_reagent(id, 15)
|
||||
C.reagents.remove_reagent(type, 15)
|
||||
to_chat(C, "<span class='notice'>You feel something reform inside of you!</span>")
|
||||
|
||||
data["injected_vol"] -= metabolization_rate
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/datum/reagent/syndicateadrenals
|
||||
name = "Syndicate Adrenaline"
|
||||
id = "syndicateadrenals"
|
||||
description = "Regenerates your stamina and increases your reaction time."
|
||||
color = "#E62111"
|
||||
overdose_threshold = 6
|
||||
|
||||
@@ -9,19 +9,19 @@
|
||||
/datum/chemical_reaction/proc/FermiFinish(datum/reagents/holder, var/atom/my_atom, reactVol)
|
||||
if(clear_conversion == REACTION_CLEAR_IMPURE | REACTION_CLEAR_INVERSE)
|
||||
for(var/id in results)
|
||||
var/datum/reagent/R = my_atom.reagents.has_reagent("[id]")
|
||||
var/datum/reagent/R = my_atom.reagents.has_reagent(id)
|
||||
if(R.purity == 1)
|
||||
continue
|
||||
|
||||
var/cached_volume = R.volume
|
||||
if(clear_conversion == REACTION_CLEAR_INVERSE && R.inverse_chem)
|
||||
if(R.inverse_chem_val > R.purity)
|
||||
my_atom.reagents.remove_reagent(R.id, cached_volume, FALSE)
|
||||
my_atom.reagents.remove_reagent(R.type, cached_volume, FALSE)
|
||||
my_atom.reagents.add_reagent(R.inverse_chem, cached_volume, FALSE, other_purity = 1)
|
||||
|
||||
else if (clear_conversion == REACTION_CLEAR_IMPURE && R.impure_chem)
|
||||
var/impureVol = cached_volume * (1 - R.purity)
|
||||
my_atom.reagents.remove_reagent(R.id, (impureVol), FALSE)
|
||||
my_atom.reagents.remove_reagent(R.type, (impureVol), FALSE)
|
||||
my_atom.reagents.add_reagent(R.impure_chem, impureVol, FALSE, other_purity = 1)
|
||||
R.cached_purity = R.purity
|
||||
R.purity = 1
|
||||
@@ -76,14 +76,15 @@
|
||||
var/datum/effect_system/smoke_spread/chem/s = new()
|
||||
R.my_atom = my_atom //Give the gas a fingerprint
|
||||
|
||||
for (var/datum/reagent/reagent in R0.reagent_list) //make gas for reagents, has to be done this way, otherwise it never stops Exploding
|
||||
R.add_reagent(reagent.id, reagent.volume/3) //Seems fine? I think I fixed the infinite explosion bug.
|
||||
for (var/A in R0.reagent_list) //make gas for reagents, has to be done this way, otherwise it never stops Exploding
|
||||
var/datum/reagent/R2 = A
|
||||
R.add_reagent(R2.type, R2.volume/3) //Seems fine? I think I fixed the infinite explosion bug.
|
||||
|
||||
if (reagent.purity < 0.6)
|
||||
ImpureTot = (ImpureTot + (1-reagent.purity)) / 2
|
||||
if (R2.purity < 0.6)
|
||||
ImpureTot = (ImpureTot + (1-R2.purity)) / 2
|
||||
|
||||
if(pH < 4) //if acidic, make acid spray
|
||||
R.add_reagent("fermiAcid", (volume/3))
|
||||
R.add_reagent(/datum/reagent/impure/fermiTox, (volume/3))
|
||||
if(R.reagent_list)
|
||||
s.set_up(R, (volume/5), my_atom)
|
||||
s.start()
|
||||
@@ -103,9 +104,9 @@
|
||||
|
||||
/datum/chemical_reaction/fermi/eigenstate
|
||||
name = "Eigenstasium"
|
||||
id = "eigenstate"
|
||||
results = list("eigenstate" = 1)
|
||||
required_reagents = list("bluespace" = 1, "stable_plasma" = 1, "sugar" = 1)
|
||||
id = /datum/reagent/fermi/eigenstate
|
||||
results = list(/datum/reagent/fermi/eigenstate = 1)
|
||||
required_reagents = list(/datum/reagent/bluespace = 1, /datum/reagent/stable_plasma = 1, /datum/reagent/consumable/caramel = 1)
|
||||
mix_message = "the reaction zaps suddenly!"
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 350 // Lower area of bell curve for determining heat based rate reactions
|
||||
@@ -137,9 +138,9 @@
|
||||
//serum
|
||||
/datum/chemical_reaction/fermi/SDGF
|
||||
name = "Synthetic-derived growth factor"
|
||||
id = "SDGF"
|
||||
results = list("SDGF" = 3)
|
||||
required_reagents = list("stable_plasma" = 1.5, "clonexadone" = 1.5, "uranium" = 1.5, "synthflesh" = 1.5)
|
||||
id = /datum/reagent/fermi/SDGF
|
||||
results = list(/datum/reagent/fermi/SDGF = 3)
|
||||
required_reagents = list(/datum/reagent/stable_plasma = 1.5, /datum/reagent/medicine/clonexadone = 1.5, /datum/reagent/uranium = 1.5, /datum/reagent/medicine/synthflesh = 1.5)
|
||||
mix_message = "the reaction gives off a blorble!"
|
||||
required_temp = 1
|
||||
//FermiChem vars:
|
||||
@@ -178,9 +179,9 @@
|
||||
|
||||
/datum/chemical_reaction/fermi/breast_enlarger
|
||||
name = "Sucubus milk"
|
||||
id = "breast_enlarger"
|
||||
results = list("breast_enlarger" = 8)
|
||||
required_reagents = list("salglu_solution" = 1, "milk" = 1, "synthflesh" = 2, "silicon" = 3, "aphro" = 3)
|
||||
id = /datum/reagent/fermi/breast_enlarger
|
||||
results = list(/datum/reagent/fermi/breast_enlarger = 8)
|
||||
required_reagents = list(/datum/reagent/medicine/salglu_solution = 1, /datum/reagent/consumable/milk = 1, /datum/reagent/medicine/synthflesh = 2, /datum/reagent/silicon = 3, /datum/reagent/drug/aphrodisiac = 3)
|
||||
mix_message = "the reaction gives off a mist of milk."
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 200
|
||||
@@ -203,8 +204,8 @@
|
||||
var/datum/reagent/fermi/breast_enlarger/BE = locate(/datum/reagent/fermi/breast_enlarger) in my_atom.reagents.reagent_list
|
||||
var/cached_volume = BE.volume
|
||||
if(BE.purity < 0.35)
|
||||
holder.remove_reagent(src.id, cached_volume)
|
||||
holder.add_reagent("BEsmaller", cached_volume)
|
||||
holder.remove_reagent(type, cached_volume)
|
||||
holder.add_reagent(/datum/reagent/fermi/BEsmaller, cached_volume)
|
||||
|
||||
|
||||
/datum/chemical_reaction/fermi/breast_enlarger/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)
|
||||
@@ -218,9 +219,9 @@
|
||||
|
||||
/datum/chemical_reaction/fermi/penis_enlarger
|
||||
name = "Incubus draft"
|
||||
id = "penis_enlarger"
|
||||
results = list("penis_enlarger" = 8)
|
||||
required_reagents = list("blood" = 5, "synthflesh" = 2, "carbon" = 2, "aphro" = 2, "salglu_solution" = 1)
|
||||
id = /datum/reagent/fermi/penis_enlarger
|
||||
results = list(/datum/reagent/fermi/penis_enlarger = 8)
|
||||
required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/medicine/synthflesh = 2, /datum/reagent/carbon = 2, /datum/reagent/drug/aphrodisiac = 2, /datum/reagent/medicine/salglu_solution = 1)
|
||||
mix_message = "the reaction gives off a spicy mist."
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 200
|
||||
@@ -252,14 +253,14 @@
|
||||
var/datum/reagent/fermi/penis_enlarger/PE = locate(/datum/reagent/fermi/penis_enlarger) in my_atom.reagents.reagent_list
|
||||
var/cached_volume = PE.volume
|
||||
if(PE.purity < 0.35)
|
||||
holder.remove_reagent(src.id, cached_volume)
|
||||
holder.add_reagent("PEsmaller", cached_volume)
|
||||
holder.remove_reagent(type, cached_volume)
|
||||
holder.add_reagent(/datum/reagent/fermi/PEsmaller, cached_volume)
|
||||
|
||||
/datum/chemical_reaction/fermi/astral
|
||||
name = "Astrogen"
|
||||
id = "astral"
|
||||
results = list("astral" = 5)
|
||||
required_reagents = list("eigenstate" = 1, "plasma" = 3, "synaptizine" = 1, "aluminium" = 5)
|
||||
id = /datum/reagent/fermi/astral
|
||||
results = list(/datum/reagent/fermi/astral = 5)
|
||||
required_reagents = list(/datum/reagent/fermi/eigenstate = 1, /datum/reagent/toxin/plasma = 3, /datum/reagent/medicine/synaptizine = 1, /datum/reagent/aluminium = 5)
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 700
|
||||
OptimalTempMax = 800
|
||||
@@ -278,12 +279,12 @@
|
||||
PurityMin = 0.25
|
||||
|
||||
|
||||
/datum/chemical_reaction/fermi/enthrall/ //check this
|
||||
/datum/chemical_reaction/fermi/enthrall //check this
|
||||
name = "MKUltra"
|
||||
id = "enthrall"
|
||||
results = list("enthrall" = 5)
|
||||
required_reagents = list("cocoa" = 1, "bluespace" = 1, "mindbreaker" = 1, "psicodine" = 1, "happiness" = 1)
|
||||
required_catalysts = list("blood" = 1)
|
||||
id = /datum/reagent/fermi/enthrall
|
||||
results = list(/datum/reagent/fermi/enthrall = 5)
|
||||
required_reagents = list(/datum/reagent/consumable/coco = 1, /datum/reagent/bluespace = 1, /datum/reagent/toxin/mindbreaker = 1, /datum/reagent/medicine/psicodine = 1, /datum/reagent/drug/happiness = 1)
|
||||
required_catalysts = list(/datum/reagent/blood = 1)
|
||||
mix_message = "the reaction gives off a burgundy plume of smoke!"
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 780
|
||||
@@ -325,7 +326,8 @@
|
||||
|
||||
//So slimes can play too.
|
||||
/datum/chemical_reaction/fermi/enthrall/slime
|
||||
required_catalysts = list("jellyblood" = 1)
|
||||
id = "enthrall2"
|
||||
required_catalysts = list(/datum/reagent/blood/jellyblood = 1)
|
||||
|
||||
/datum/chemical_reaction/fermi/enthrall/slime/FermiFinish(datum/reagents/holder, var/atom/my_atom)
|
||||
var/datum/reagent/blood/jellyblood/B = locate(/datum/reagent/blood/jellyblood) in my_atom.reagents.reagent_list//The one line change.
|
||||
@@ -350,16 +352,16 @@
|
||||
var/turf/T = get_turf(my_atom)
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
var/datum/effect_system/smoke_spread/chem/s = new()
|
||||
R.add_reagent("enthrallExplo", volume)
|
||||
R.add_reagent(/datum/reagent/fermi/enthrallExplo, volume)
|
||||
s.set_up(R, volume/2, T)
|
||||
s.start()
|
||||
my_atom.reagents.clear_reagents()
|
||||
|
||||
/datum/chemical_reaction/fermi/hatmium // done
|
||||
name = "Hat growth serum"
|
||||
id = "hatmium"
|
||||
results = list("hatmium" = 5)
|
||||
required_reagents = list("ethanol" = 1, "nutriment" = 3, "cooking_oil" = 2, "iron" = 1, "gold" = 3)
|
||||
id = /datum/reagent/fermi/hatmium
|
||||
results = list(/datum/reagent/fermi/hatmium = 5)
|
||||
required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/cooking_oil = 2, /datum/reagent/iron = 1, /datum/reagent/gold = 3)
|
||||
//mix_message = ""
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 500
|
||||
@@ -392,9 +394,9 @@
|
||||
|
||||
/datum/chemical_reaction/fermi/furranium
|
||||
name = "Furranium"
|
||||
id = "furranium"
|
||||
results = list("furranium" = 5)
|
||||
required_reagents = list("aphro" = 1, "moonsugar" = 1, "silver" = 2, "salglu_solution" = 1)
|
||||
id = /datum/reagent/fermi/furranium
|
||||
results = list(/datum/reagent/fermi/furranium = 5)
|
||||
required_reagents = list(/datum/reagent/drug/aphrodisiac = 1, /datum/reagent/moonsugar = 1, /datum/reagent/silver = 2, /datum/reagent/medicine/salglu_solution = 1)
|
||||
mix_message = "You think you can hear a howl come from the beaker."
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 350
|
||||
@@ -413,7 +415,8 @@
|
||||
PurityMin = 0.3
|
||||
|
||||
/datum/chemical_reaction/fermi/furranium/organic
|
||||
required_reagents = list("aphro" = 1, "catnip" = 1, "silver" = 2, "salglu_solution" = 1)
|
||||
id = "furranium_organic"
|
||||
required_reagents = list(/datum/reagent/drug/aphrodisiac = 1, /datum/reagent/pax/catnip = 1, /datum/reagent/silver = 2, /datum/reagent/medicine/salglu_solution = 1)
|
||||
|
||||
//FOR INSTANT REACTIONS - DO NOT MULTIPLY LIMIT BY 10.
|
||||
//There's a weird rounding error or something ugh.
|
||||
@@ -421,9 +424,9 @@
|
||||
//Nano-b-gone
|
||||
/datum/chemical_reaction/fermi/nanite_b_gone//done test
|
||||
name = "Naninte bain"
|
||||
id = "nanite_b_gone"
|
||||
results = list("nanite_b_gone" = 4)
|
||||
required_reagents = list("synthflesh" = 1, "uranium" = 1, "iron" = 1, "salglu_solution" = 1)
|
||||
id = /datum/reagent/fermi/nanite_b_gone
|
||||
results = list(/datum/reagent/fermi/nanite_b_gone = 4)
|
||||
required_reagents = list(/datum/reagent/medicine/synthflesh = 1, /datum/reagent/uranium = 1, /datum/reagent/iron = 1, /datum/reagent/medicine/salglu_solution = 1)
|
||||
mix_message = "the reaction gurgles, encapsulating the reagents in flesh before the emp can be set off."
|
||||
required_temp = 450//To force fermireactions before EMP.
|
||||
//FermiChem vars:
|
||||
@@ -443,9 +446,9 @@
|
||||
|
||||
/datum/chemical_reaction/fermi/acidic_buffer//done test
|
||||
name = "Acetic acid buffer"
|
||||
id = "acidic_buffer"
|
||||
results = list("acidic_buffer" = 10) //acetic acid
|
||||
required_reagents = list("salglu_solution" = 1, "ethanol" = 3, "oxygen" = 3, "water" = 3)
|
||||
id = /datum/reagent/fermi/acidic_buffer
|
||||
results = list(/datum/reagent/fermi/acidic_buffer = 10) //acetic acid
|
||||
required_reagents = list(/datum/reagent/medicine/salglu_solution = 1, /datum/reagent/consumable/ethanol = 3, /datum/reagent/oxygen = 3, /datum/reagent/water = 3)
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 250
|
||||
OptimalTempMax = 500
|
||||
@@ -470,10 +473,10 @@
|
||||
|
||||
/datum/chemical_reaction/fermi/basic_buffer//done test
|
||||
name = "Ethyl Ethanoate buffer"
|
||||
id = "basic_buffer"
|
||||
results = list("basic_buffer" = 5)
|
||||
required_reagents = list("lye" = 1, "ethanol" = 2, "water" = 2)
|
||||
required_catalysts = list("sacid" = 1) //vagely acetic
|
||||
id = /datum/reagent/fermi/basic_buffer
|
||||
results = list(/datum/reagent/fermi/basic_buffer = 5)
|
||||
required_reagents = list(/datum/reagent/lye = 1, /datum/reagent/consumable/ethanol = 2, /datum/reagent/water = 2)
|
||||
required_catalysts = list(/datum/reagent/toxin/acid = 1) //vagely acetic
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 250
|
||||
OptimalTempMax = 500
|
||||
@@ -502,10 +505,10 @@
|
||||
//ChemReactionVars:
|
||||
/datum/chemical_reaction/fermi/secretcatchem //DONE
|
||||
name = "secretcatchem"
|
||||
id = "secretcatchem"
|
||||
results = list("secretcatchem" = 5)
|
||||
required_reagents = list("stable_plasma" = 1, "sugar" = 1, "cream" = 1, "clonexadone" = 1)//Yes this will make a kitty if you don't lucky guess. It'll eat all your reagents too.
|
||||
required_catalysts = list("SDGF" = 1)
|
||||
id = /datum/reagent/fermi/secretcatchem
|
||||
results = list(/datum/reagent/fermi/secretcatchem = 5)
|
||||
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/consumable/caramel = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/medicine/clonexadone = 1)//Yes this will make a kitty if you don't lucky guess. It'll eat all your reagents too.
|
||||
required_catalysts = list(/datum/reagent/fermi/SDGF = 1)
|
||||
required_temp = 500
|
||||
mix_message = "the reaction gives off a meow!"
|
||||
mix_sound = "modular_citadel/sound/voice/merowr.ogg"
|
||||
@@ -536,8 +539,8 @@
|
||||
HIonRelease += (rand(-25, 25)/100)
|
||||
RateUpLim += (rand(1, 1000)/100)
|
||||
PurityMin += (rand(-1, 1)/10)
|
||||
var/additions = list("aluminium", "silver", "gold", "plasma", "silicon", "uranium", "milk")
|
||||
required_reagents[pick(additions)] = rand(1, 5)//weird
|
||||
var/picked = pick(/datum/reagent/aluminium, /datum/reagent/silver, /datum/reagent/gold, /datum/reagent/toxin/plasma, /datum/reagent/silicon, /datum/reagent/uranium, /datum/reagent/consumable/milk)
|
||||
required_reagents[picked] = rand(1, 5)//weird
|
||||
|
||||
/datum/chemical_reaction/fermi/secretcatchem/FermiFinish(datum/reagents/holder, var/atom/my_atom)
|
||||
SSblackbox.record_feedback("tally", "catgirlium")//log
|
||||
@@ -555,9 +558,9 @@
|
||||
|
||||
/datum/chemical_reaction/fermi/yamerol//done test
|
||||
name = "Yamerol"
|
||||
id = "yamerol"
|
||||
results = list("yamerol" = 3)
|
||||
required_reagents = list("perfluorodecalin" = 1, "salbutamol" = 1, "water" = 1)
|
||||
id = /datum/reagent/fermi/yamerol
|
||||
results = list(/datum/reagent/fermi/yamerol = 3)
|
||||
required_reagents = list(/datum/reagent/medicine/perfluorodecalin = 1, /datum/reagent/medicine/salbutamol = 1, /datum/reagent/water = 1)
|
||||
//FermiChem vars:
|
||||
OptimalTempMin = 300
|
||||
OptimalTempMax = 500
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//body bluids
|
||||
/datum/reagent/consumable/semen
|
||||
name = "Semen"
|
||||
id = "semen"
|
||||
description = "Sperm from some animal. I bet you'll drink this out of a bucket someday."
|
||||
taste_description = "something salty"
|
||||
taste_mult = 2 //Not very overpowering flavor
|
||||
@@ -45,7 +44,6 @@
|
||||
|
||||
/datum/reagent/consumable/femcum
|
||||
name = "Female Ejaculate"
|
||||
id = "femcum"
|
||||
description = "Vaginal lubricant found in most mammals and other animals of similar nature. Where you found this is your own business."
|
||||
taste_description = "something with a tang" // wew coders who haven't eaten out a girl.
|
||||
taste_mult = 2
|
||||
@@ -93,7 +91,6 @@
|
||||
|
||||
/datum/reagent/drug/aphrodisiac
|
||||
name = "Crocin"
|
||||
id = "aphro"
|
||||
description = "Naturally found in the crocus and gardenia flowers, this drug acts as a natural and safe aphrodisiac."
|
||||
taste_description = "strawberry roofies"
|
||||
taste_mult = 2 //Hide the roofies in stronger flavors
|
||||
@@ -112,7 +109,6 @@
|
||||
|
||||
/datum/reagent/drug/aphrodisiacplus
|
||||
name = "Hexacrocin"
|
||||
id = "aphro+"
|
||||
description = "Chemically condensed form of basic crocin. This aphrodisiac is extremely powerful and addictive in most animals.\
|
||||
Addiction withdrawals can cause brain damage and shortness of breath. Overdosage can lead to brain damage and a \
|
||||
permanent increase in libido (commonly referred to as 'bimbofication')."
|
||||
@@ -167,7 +163,6 @@
|
||||
|
||||
/datum/reagent/drug/anaphrodisiac
|
||||
name = "Camphor"
|
||||
id = "anaphro"
|
||||
description = "Naturally found in some species of evergreen trees, camphor is a waxy substance. When injested by most animals, it acts as an anaphrodisiac\
|
||||
, reducing libido and calming them. Non-habit forming and not addictive."
|
||||
taste_description = "dull bitterness"
|
||||
@@ -182,7 +177,6 @@
|
||||
|
||||
/datum/reagent/drug/anaphrodisiacplus
|
||||
name = "Hexacamphor"
|
||||
id = "anaphro+"
|
||||
description = "Chemically condensed camphor. Causes an extreme reduction in libido and a permanent one if overdosed. Non-addictive."
|
||||
taste_description = "tranquil celibacy"
|
||||
color = "#D9D9D9"//rgb(217, 217, 217)
|
||||
@@ -206,32 +200,32 @@
|
||||
//recipes
|
||||
/datum/chemical_reaction/aphro
|
||||
name = "crocin"
|
||||
id = "aphro"
|
||||
results = list("aphro" = 6)
|
||||
required_reagents = list("carbon" = 2, "hydrogen" = 2, "oxygen" = 2, "water" = 1)
|
||||
id = /datum/reagent/drug/aphrodisiac
|
||||
results = list(/datum/reagent/drug/aphrodisiac = 6)
|
||||
required_reagents = list(/datum/reagent/carbon = 2, /datum/reagent/hydrogen = 2, /datum/reagent/oxygen = 2, /datum/reagent/water = 1)
|
||||
required_temp = 400
|
||||
mix_message = "The mixture boils off a pink vapor..."//The water boils off, leaving the crocin
|
||||
|
||||
/datum/chemical_reaction/aphroplus
|
||||
name = "hexacrocin"
|
||||
id = "aphro+"
|
||||
results = list("aphro+" = 1)
|
||||
required_reagents = list("aphro" = 6, "phenol" = 1)
|
||||
id = /datum/reagent/drug/aphrodisiacplus
|
||||
results = list(/datum/reagent/drug/aphrodisiacplus = 1)
|
||||
required_reagents = list(/datum/reagent/drug/aphrodisiac = 6, /datum/reagent/phenol = 1)
|
||||
required_temp = 400
|
||||
mix_message = "The mixture rapidly condenses and darkens in color..."
|
||||
|
||||
/datum/chemical_reaction/anaphro
|
||||
name = "camphor"
|
||||
id = "anaphro"
|
||||
results = list("anaphro" = 6)
|
||||
required_reagents = list("carbon" = 2, "hydrogen" = 2, "oxygen" = 2, "sulfur" = 1)
|
||||
id = /datum/reagent/drug/anaphrodisiac
|
||||
results = list(/datum/reagent/drug/anaphrodisiac = 6)
|
||||
required_reagents = list(/datum/reagent/carbon = 2, /datum/reagent/hydrogen = 2, /datum/reagent/oxygen = 2, /datum/reagent/sulfur = 1)
|
||||
required_temp = 400
|
||||
mix_message = "The mixture boils off a yellow, smelly vapor..."//Sulfur burns off, leaving the camphor
|
||||
|
||||
/datum/chemical_reaction/anaphroplus
|
||||
name = "pentacamphor"
|
||||
id = "anaphro+"
|
||||
results = list("anaphro+" = 1)
|
||||
required_reagents = list("anaphro" = 5, "acetone" = 1)
|
||||
id = /datum/reagent/drug/anaphrodisiacplus
|
||||
results = list(/datum/reagent/drug/anaphrodisiacplus = 1)
|
||||
required_reagents = list(/datum/reagent/drug/aphrodisiac = 5, /datum/reagent/acetone = 1)
|
||||
required_temp = 300
|
||||
mix_message = "The mixture thickens and heats up slighty..."
|
||||
|
||||
@@ -1,708 +0,0 @@
|
||||
/datum/design/autoylathe
|
||||
build_type = AUTOYLATHE
|
||||
|
||||
/datum/design/autoylathe/mech
|
||||
category = list("initial", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/mech/contraband
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/figure
|
||||
category = list("initial", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/balloon
|
||||
name = "Empty Water balloon"
|
||||
id = "waterballoon"
|
||||
materials = list(MAT_PLASTIC = 50)
|
||||
build_path = /obj/item/toy/balloon
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/spinningtoy
|
||||
name = "Toy Singularity"
|
||||
id = "singuloutoy"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/spinningtoy
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/capgun
|
||||
name = "Cap Gun"
|
||||
id = "capgun"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/gun
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/autoylathe/capgunammo
|
||||
name = "Capgun Ammo"
|
||||
id = "capgunammo"
|
||||
materials = list(MAT_PLASTIC = 50)
|
||||
build_path = /obj/item/toy/ammo/gun
|
||||
category = list("initial", "misc")
|
||||
|
||||
/datum/design/autoylathe/toysword
|
||||
name = "Toy Sword"
|
||||
id = "toysword"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/sword
|
||||
category = list("initial", "Melee")
|
||||
|
||||
/datum/design/autoylathe/foamblade
|
||||
name = "Foam Armblade"
|
||||
id = "foamblade"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/foamblade
|
||||
category = list("initial", "Melee")
|
||||
|
||||
/datum/design/autoylathe/windupbox
|
||||
name = "Wind Up Toolbox"
|
||||
id = "windupbox"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/windupToolbox
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/toydualsword
|
||||
name = "Double-Bladed Toy Sword"
|
||||
id = "dbtoysword"
|
||||
materials = list(MAT_PLASTIC = 1000)
|
||||
build_path = /obj/item/twohanded/dualsaber/toy
|
||||
category = list("initial", "Melee")
|
||||
|
||||
/datum/design/autoylathe/toykatana
|
||||
name = "Replica Katana"
|
||||
id = "toykatana"
|
||||
materials = list(MAT_PLASTIC = 50, MAT_METAL = 450)
|
||||
build_path = /obj/item/toy/katana
|
||||
category = list("initial", "Melee")
|
||||
|
||||
/datum/design/autoylathe/snappop
|
||||
name = "Snap Pop"
|
||||
id = "snappop_phoenix"
|
||||
materials = list(MAT_PLASTIC = 50)
|
||||
build_path = /obj/item/toy/snappop
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/mech/model1
|
||||
name = "Toy Ripley"
|
||||
id = "toymech1"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/ripley
|
||||
|
||||
/datum/design/autoylathe/mech/model2
|
||||
name = "Toy Firefighter Ripley"
|
||||
id = "toymech2"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/fireripley
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model3
|
||||
name = "Toy Deathsquad fireripley "
|
||||
id = "toymech3"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/deathripley
|
||||
|
||||
/datum/design/autoylathe/mech/model4
|
||||
name = "Toy Gygax"
|
||||
id = "toymech4"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/gygax
|
||||
|
||||
/datum/design/autoylathe/mech/model5
|
||||
name = "Toy Durand"
|
||||
id = "toymech5"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/durand
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model6
|
||||
name = "Toy H.O.N.K."
|
||||
id = "toymech6"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/honk
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model7
|
||||
name = "Toy Marauder"
|
||||
id = "toymech7"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/marauder
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model8
|
||||
name = "Toy Seraph"
|
||||
id = "toymech8"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/seraph
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model9
|
||||
name = "Toy Mauler"
|
||||
id = "toymech9"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/mauler
|
||||
|
||||
/datum/design/autoylathe/mech/model10
|
||||
name = "Toy Odysseus"
|
||||
id = "toymech10"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/odysseus
|
||||
|
||||
/datum/design/autoylathe/mech/model11
|
||||
name = "Toy Phazon"
|
||||
id = "toymech11"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/phazon
|
||||
|
||||
/datum/design/autoylathe/mech/contraband/model12
|
||||
name = "Toy Reticence"
|
||||
id = "toymech12"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/prize/reticence
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/talking/AI
|
||||
name = "Toy AI"
|
||||
id = "ToyAICore"
|
||||
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/talking/AI
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/talking/codex_gigas
|
||||
name = "Toy Codex Gigas"
|
||||
id = "ToyCodex"
|
||||
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/talking/codex_gigas
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/talking/owl
|
||||
name = "Owl Action Figure"
|
||||
id = "owlactionfig"
|
||||
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/talking/owl
|
||||
|
||||
/datum/design/autoylathe/talking/griffin
|
||||
name = "Griffon Action Figure"
|
||||
id = "griffinactionfig"
|
||||
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/talking/griffin
|
||||
|
||||
/datum/design/autoylathe/cards
|
||||
name = "Deck of Cards"
|
||||
id = "carddeck"
|
||||
materials = list(MAT_PLASTIC = 250)
|
||||
build_path = /obj/item/toy/cards/deck
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/nuke
|
||||
name = "Nuclear Fission Explosive Toy"
|
||||
id = "nuketoy"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/nuke
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/minimeteor
|
||||
name = "Mini-Meteor"
|
||||
id = "meattoy"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/minimeteor
|
||||
category = list("hacked", "Misc")
|
||||
|
||||
/datum/design/autoylathe/redbutton
|
||||
name = "Big Red Button"
|
||||
id = "redbutton"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/redbutton
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/beach_ball
|
||||
name = "Beach Ball"
|
||||
id = "beachball"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/beach_ball
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/clockwork_watch
|
||||
name = "Clockwork Watch"
|
||||
id = "clockwatch"
|
||||
materials = list(MAT_PLASTIC = 1000)
|
||||
build_path = /obj/item/toy/clockwork_watch
|
||||
category = list("initial", "misc")
|
||||
|
||||
/datum/design/autoylathe/dagger
|
||||
name = "Toy Dagger"
|
||||
id = "toydagger"
|
||||
materials = list(MAT_PLASTIC = 1000)
|
||||
build_path = /obj/item/toy/toy_dagger
|
||||
category = list("initial", "Melee")
|
||||
|
||||
/datum/design/autoylathe/xeno
|
||||
name = "Xenomorph"
|
||||
id = "xenomorph"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/toy_xeno
|
||||
|
||||
/datum/design/autoylathe/cattoy
|
||||
name = "Toy Mouse"
|
||||
id = "cattoy"
|
||||
materials = list(MAT_PLASTIC = 500)
|
||||
build_path = /obj/item/toy/cattoy
|
||||
category = list("initial", "Toys")
|
||||
|
||||
/datum/design/autoylathe/figure/assistant
|
||||
name = "Assistant"
|
||||
id = "assfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/assistant
|
||||
|
||||
/datum/design/autoylathe/figure/atmos
|
||||
name = "Atmos Tech"
|
||||
id = "atmfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/atmos
|
||||
|
||||
/datum/design/autoylathe/figure/bartender
|
||||
name = "Bartender"
|
||||
id = "barfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/bartender
|
||||
|
||||
/datum/design/autoylathe/figure/botanist
|
||||
name = "Botanist"
|
||||
id = "botfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/botanist
|
||||
|
||||
/datum/design/autoylathe/figure/captain
|
||||
name = "Captain"
|
||||
id = "capfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/captain
|
||||
|
||||
/datum/design/autoylathe/figure/cargotech
|
||||
name = "Cargo Technician"
|
||||
id = "carfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/cargotech
|
||||
|
||||
/datum/design/autoylathe/figure/ce
|
||||
name = "Chief Engineer"
|
||||
id = "cefigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/ce
|
||||
|
||||
/datum/design/autoylathe/figure/chaplain
|
||||
name = "Chaplain"
|
||||
id = "chafigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/chaplain
|
||||
|
||||
/datum/design/autoylathe/figure/chef
|
||||
name = "Chef"
|
||||
id = "chefigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/chef
|
||||
|
||||
/datum/design/autoylathe/figure/chemist
|
||||
name = "Chemist"
|
||||
id = "chmfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/chemist
|
||||
|
||||
/datum/design/autoylathe/figure/clown
|
||||
name = "Clown"
|
||||
id = "clnfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/clown
|
||||
|
||||
/datum/design/autoylathe/figure/cmo
|
||||
name = "Chief Medical Officer"
|
||||
id = "cmofigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/cmo
|
||||
|
||||
/datum/design/autoylathe/figure/curator
|
||||
name = "Curator"
|
||||
id = "curfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/curator
|
||||
|
||||
/datum/design/autoylathe/figure/borg
|
||||
name = "Cyborg"
|
||||
id = "cybfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/borg
|
||||
|
||||
/datum/design/autoylathe/figure/detective
|
||||
name = "Detective"
|
||||
id = "detfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/detective
|
||||
|
||||
/datum/design/autoylathe/figure/engineer
|
||||
name = "Engineer"
|
||||
id = "engfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/engineer
|
||||
|
||||
/datum/design/autoylathe/figure/geneticist
|
||||
name = "Geneticist"
|
||||
id = "genfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/geneticist
|
||||
|
||||
/datum/design/autoylathe/figure/hop
|
||||
name = "Head of Personnel"
|
||||
id = "hopfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/hop
|
||||
|
||||
/datum/design/autoylathe/figure/hos
|
||||
name = "Head of Security"
|
||||
id = "hosfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/hos
|
||||
|
||||
/datum/design/autoylathe/figure/janitor
|
||||
name = "Janitor"
|
||||
id = "janfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/janitor
|
||||
|
||||
/datum/design/autoylathe/figure/lawyer
|
||||
name = "Lawyer"
|
||||
id = "lawfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/lawyer
|
||||
|
||||
/datum/design/autoylathe/figure/md
|
||||
name = "Medical Doctor"
|
||||
id = "medfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/md
|
||||
|
||||
/datum/design/autoylathe/figure/mime
|
||||
name = "Mime"
|
||||
id = "mimfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/mime
|
||||
|
||||
/datum/design/autoylathe/figure/miner
|
||||
name = "Miner"
|
||||
id = "minfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/miner
|
||||
|
||||
/datum/design/autoylathe/figure/rd
|
||||
name = "Research Director"
|
||||
id = "rdfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/rd
|
||||
|
||||
/datum/design/autoylathe/figure/robotocist
|
||||
name = "Robotocist"
|
||||
id = "robfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/roboticist
|
||||
|
||||
/datum/design/autoylathe/figure/qm
|
||||
name = "Quartermaster"
|
||||
id = "qtmfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/qm
|
||||
|
||||
/datum/design/autoylathe/figure/scientist
|
||||
name = "Scientist"
|
||||
id = "scifigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/scientist
|
||||
|
||||
/datum/design/autoylathe/figure/secofficer
|
||||
name = "Security Officer"
|
||||
id = "secfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/secofficer
|
||||
|
||||
/datum/design/autoylathe/figure/virologist
|
||||
name = "Virologist"
|
||||
id = "virfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/virologist
|
||||
|
||||
/datum/design/autoylathe/figure/warden
|
||||
name = "Warden"
|
||||
id = "warfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/warden
|
||||
|
||||
/datum/design/autoylathe/figure/dsquad
|
||||
name = "Deathsquad"
|
||||
id = "dsqfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/dsquad
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/figure/ian
|
||||
name = "Ian"
|
||||
id = "ianfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/ian
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/figure/ninja
|
||||
name = "Ninja"
|
||||
id = "ninfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/ninja
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/figure/syndie
|
||||
name = "Nuclear Operative"
|
||||
id = "nucfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/syndie
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/figure/wizard
|
||||
name = "Wizard"
|
||||
id = "wizfigure"
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 50)
|
||||
build_path = /obj/item/toy/figure/wizard
|
||||
category = list("hacked", "Figurines")
|
||||
|
||||
/datum/design/autoylathe/dildo
|
||||
name = "Customizable Dildo"
|
||||
id = "dildo"
|
||||
materials = list(MAT_PLASTIC = 2000)
|
||||
build_path = /obj/item/dildo/custom
|
||||
category = list("initial", "Adult")
|
||||
|
||||
/datum/design/autoylathe/collar
|
||||
name = "Collar"
|
||||
id = "collar"
|
||||
materials = list(MAT_PLASTIC = 250, MAT_METAL = 50)
|
||||
build_path = /obj/item/clothing/neck/petcollar
|
||||
category = list("initial", "Adult")
|
||||
|
||||
/datum/design/autoylathe/lastag/blue/gun
|
||||
name = "Blue Lasertag Rifle"
|
||||
id = "lastagrifleblue"
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/gun/energy/laser/bluetag
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/autoylathe/lastag/red/gun
|
||||
name = "Red Lasertag Rifle"
|
||||
id = "lastagriflered"
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/gun/energy/laser/redtag
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/autoylathe/lastag/blue/hat
|
||||
name = "Blue Lasertag Helmet"
|
||||
id = "lastaghatblue"
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 1000, MAT_GLASS = 500)
|
||||
build_path = /obj/item/clothing/head/helmet/bluetaghelm
|
||||
category = list("initial", "Armor")
|
||||
|
||||
/datum/design/autoylathe/lastag/blue/armor
|
||||
name = "Blue Lasertag Armor"
|
||||
id = "lastagarmorblue"
|
||||
materials = list(MAT_PLASTIC = 8000, MAT_METAL = 2000, MAT_GLASS = 100)
|
||||
build_path = /obj/item/clothing/suit/bluetag
|
||||
category = list("initial", "Armor")
|
||||
|
||||
/datum/design/autoylathe/lastag/red/hat
|
||||
name = "Red Lasertag Helmet"
|
||||
id = "lastaghelmetred"
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 1000, MAT_GLASS = 500)
|
||||
build_path = /obj/item/clothing/head/helmet/redtaghelm
|
||||
category = list("initial", "Armor")
|
||||
|
||||
/datum/design/autoylathe/lastag/red/armor
|
||||
name = "Red Lasertag Armor"
|
||||
id = "lastagarmorred"
|
||||
materials = list(MAT_PLASTIC = 8000, MAT_METAL = 2000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/clothing/suit/redtag
|
||||
category = list("initial", "Armor")
|
||||
|
||||
//because why not make a boxed kit with all of the lastag shit?
|
||||
/obj/item/storage/box/blueteam
|
||||
name = "Blue Team Kit"
|
||||
|
||||
/obj/item/storage/box/blueteam/PopulateContents()
|
||||
new /obj/item/clothing/head/helmet/bluetaghelm(src)
|
||||
new /obj/item/clothing/suit/bluetag(src)
|
||||
new /obj/item/gun/energy/laser/bluetag(src)
|
||||
new /obj/item/clothing/gloves/color/blue(src)
|
||||
new /obj/item/clothing/shoes/sneakers/blue(src)
|
||||
new /obj/item/clothing/under/color/blue(src)
|
||||
|
||||
/obj/item/storage/box/redteam
|
||||
name = "Red Team Kit"
|
||||
|
||||
/obj/item/storage/box/redteam/PopulateContents()
|
||||
new /obj/item/clothing/head/helmet/redtaghelm(src)
|
||||
new /obj/item/clothing/suit/redtag(src)
|
||||
new /obj/item/gun/energy/laser/redtag(src)
|
||||
new /obj/item/clothing/gloves/color/red(src)
|
||||
new /obj/item/clothing/shoes/sneakers/red(src)
|
||||
new /obj/item/clothing/under/color/red(src)
|
||||
|
||||
/datum/design/autoylathe/lastag/blue
|
||||
name = "Blue Lasertag Kit"
|
||||
id = "lastagkitblue"
|
||||
materials = list(MAT_PLASTIC = 16000, MAT_METAL = 4000, MAT_GLASS = 2000)
|
||||
build_path = /obj/item/storage/box/blueteam
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/autoylathe/lastag/red
|
||||
name = "Red Lasertag Kit"
|
||||
id = "lastagkitred"
|
||||
materials = list(MAT_PLASTIC = 16000, MAT_METAL = 4000, MAT_GLASS = 2000)
|
||||
build_path = /obj/item/storage/box/redteam
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_x9
|
||||
name = "Foam Force X9 Rifle"
|
||||
id = "foam_x9"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/automatic/x9/toy
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/foam_dart
|
||||
name = "Box of Foam Darts"
|
||||
id = "foam_dart"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 100)
|
||||
build_path = /obj/item/ammo_box/foambox
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_magpistol
|
||||
name = "Foam Force Magpistol"
|
||||
id = "magfoam_launcher"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
|
||||
build_path = /obj/item/gun/ballistic/shotgun/toy/mag
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/foam_magrifle
|
||||
name = "Foam Force MagRifle"
|
||||
id = "foam_magrifle"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/automatic/magrifle/toy
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/foam_hyperburst
|
||||
name = "MagTag Hyper Rifle"
|
||||
id = "foam_hyperburst"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 2000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/gun/energy/laser/practice/hyperburst
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/foam_sp
|
||||
name = "Foam Force Stealth Pistol"
|
||||
id = "foam_sp"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 1000)
|
||||
build_path = /obj/item/gun/ballistic/automatic/toy/pistol/stealth
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/toyray
|
||||
name = "RayTag Gun"
|
||||
id = "toyray"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 1000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/gun/energy/laser/practice/raygun
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/am4c
|
||||
name = "Foam Force AM4-C Rifle"
|
||||
id = "foam_am4c"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/automatic/AM4C
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/foam_f3
|
||||
name = "Replica F3 Justicar"
|
||||
id = "foam_f3"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
|
||||
build_path = /obj/item/toy/gun/justicar
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/toy_blaster
|
||||
name = "pump-action plastic blaster"
|
||||
id = "toy_blaster"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 750, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/gun/energy/pumpaction/toy
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/capammo
|
||||
name = "Box of Caps"
|
||||
id = "capammo"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_METAL = 10, MAT_GLASS = 10)
|
||||
build_path = /obj/item/toy/ammo/gun
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_smg
|
||||
name = "Foam Force SMG"
|
||||
id = "foam_smg"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
|
||||
build_path = /obj/item/gun/ballistic/automatic/toy/unrestricted
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/foam_pistol
|
||||
name = "Foam Force Pistol"
|
||||
id = "foam_pistol"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
|
||||
build_path = /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/foam_shotgun
|
||||
name = "Foam Force Shotgun"
|
||||
id = "foam_shotgun"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/shotgun/toy/unrestricted
|
||||
category = list("initial", "Rifles")
|
||||
|
||||
/datum/design/foam_dartred
|
||||
name = "Box of Lastag Red Foam Darts"
|
||||
id = "redfoam_dart"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 100)
|
||||
build_path = /obj/item/ammo_box/foambox/tag/red
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_dartblue
|
||||
name = "Box of Lastag Blue Foam Darts"
|
||||
id = "bluefoam_dart"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 500, MAT_METAL = 100)
|
||||
build_path = /obj/item/ammo_box/foambox/tag/blue
|
||||
category = list("initial", "Misc")
|
||||
|
||||
/datum/design/foam_bow
|
||||
name = "Foam Force Crossbow"
|
||||
id = "foam_bow"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 2000, MAT_METAL = 250)
|
||||
build_path = /obj/item/gun/ballistic/shotgun/toy/crossbow
|
||||
category = list("initial", "Pistols")
|
||||
|
||||
/datum/design/foam_c20
|
||||
name = "Donksoft C20R"
|
||||
id = "foam_c20"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted
|
||||
category = list("hacked", "Rifles")
|
||||
|
||||
/datum/design/foam_l6
|
||||
name = "Donksoft LMG"
|
||||
id = "foam_LMG"
|
||||
build_type = AUTOYLATHE
|
||||
materials = list(MAT_PLASTIC = 4000, MAT_METAL = 500)
|
||||
build_path = /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted
|
||||
category = list("hacked", "Rifles")
|
||||
Reference in New Issue
Block a user