Merge remote-tracking branch 'upstream/master' into the-p-o-o-l
This commit is contained in:
@@ -95,6 +95,10 @@
|
||||
|
||||
Don't crash the server, OK?
|
||||
|
||||
"UPDATE /mob/living/carbon/monkey SET #null = forceMove(usr.loc)"
|
||||
|
||||
Writing "#null" in front of the "=" will call the proc and discard the return value.
|
||||
|
||||
A quick recommendation: before you run something like a DELETE or another query.. Run it through SELECT
|
||||
first.
|
||||
You'd rather not gib every player on accident.
|
||||
@@ -740,6 +744,9 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
|
||||
var/datum/temp = d
|
||||
var/i = 0
|
||||
for(var/v in sets)
|
||||
if(v == "#null")
|
||||
SDQL_expression(d, set_list[sets])
|
||||
break
|
||||
if(++i == sets.len)
|
||||
if(superuser)
|
||||
if(temp.vars.Find(v))
|
||||
|
||||
@@ -197,11 +197,11 @@
|
||||
if(!ascended)
|
||||
var/b_loss
|
||||
switch (severity)
|
||||
if (1)
|
||||
if (EXPLODE_DEVASTATE)
|
||||
b_loss = 500
|
||||
if (2)
|
||||
if (EXPLODE_HEAVY)
|
||||
b_loss = 150
|
||||
if(3)
|
||||
if(EXPLODE_LIGHT)
|
||||
b_loss = 30
|
||||
if(has_bane(BANE_LIGHT))
|
||||
b_loss *=2
|
||||
|
||||
@@ -822,6 +822,21 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/airalarm/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
|
||||
if((buildstage == 0) && (the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS))
|
||||
return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 20, "cost" = 1)
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/airalarm/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
|
||||
switch(passed_mode)
|
||||
if(RCD_UPGRADE_SIMPLE_CIRCUITS)
|
||||
user.visible_message("<span class='notice'>[user] fabricates a circuit and places it into [src].</span>", \
|
||||
"<span class='notice'>You adapt an air alarm circuit and slot it into the assembly.</span>")
|
||||
buildstage = 1
|
||||
update_icon()
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/airalarm/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc))
|
||||
|
||||
@@ -615,7 +615,7 @@
|
||||
name = "marshmallow"
|
||||
desc = "A marshmallow filled with fluffy marshmallow fluff."
|
||||
icon_state = "marshmallow"
|
||||
list_reagents = list("sugar" = 5, "nutriment" = 2)
|
||||
list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/nutriment = 2)
|
||||
filling_color = "#fafafa"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
tastes = list("marshmallow" = 2)
|
||||
|
||||
@@ -107,15 +107,15 @@ In all, this is a lot like the monkey code. /N
|
||||
return
|
||||
..()
|
||||
switch (severity)
|
||||
if (1)
|
||||
if (EXPLODE_DEVASTATE)
|
||||
gib()
|
||||
return
|
||||
|
||||
if (2)
|
||||
if (EXPLODE_HEAVY)
|
||||
take_overall_damage(60, 60)
|
||||
adjustEarDamage(30,120)
|
||||
|
||||
if(3)
|
||||
if(EXPLODE_LIGHT)
|
||||
take_overall_damage(30,0)
|
||||
if(prob(50))
|
||||
Unconscious(20)
|
||||
|
||||
@@ -392,6 +392,13 @@
|
||||
. += "...?"
|
||||
else
|
||||
. += "[print_flavor_text()]"
|
||||
if(print_flavor_text_2())
|
||||
if(get_visible_name() == "Unknown") //Are we sure we know who this is? Don't show flavor text unless we can recognize them. Prevents certain metagaming with impersonation.
|
||||
. += "...?"
|
||||
else if(skipface) //Sometimes we're not unknown, but impersonating someone in a hardsuit, let's not reveal our flavor text then either.
|
||||
. += "...?"
|
||||
else
|
||||
. += "[print_flavor_text_2()]"
|
||||
. += "*---------*</span>"
|
||||
|
||||
/mob/living/proc/status_effect_examines(pronoun_replacement) //You can include this in any mob's examine() to show the examine texts of status effects!
|
||||
|
||||
@@ -326,38 +326,49 @@
|
||||
..()
|
||||
if (!severity)
|
||||
return
|
||||
var/b_loss = 0
|
||||
var/f_loss = 0
|
||||
var/bomb_armor = max(0,(100-getarmor(null, "bomb"))/100)
|
||||
var/brute_loss = 0
|
||||
var/burn_loss = 0
|
||||
var/bomb_armor = getarmor(null, "bomb")
|
||||
|
||||
//200 max knockdown for EXPLODE_HEAVY
|
||||
//160 max knockdown for EXPLODE_LIGHT
|
||||
|
||||
switch (severity)
|
||||
if (1)
|
||||
if(bomb_armor)
|
||||
b_loss = (350*bomb_armor)+150
|
||||
var/atom/throw_target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src)))
|
||||
throw_at(throw_target, 200, 4)
|
||||
damage_clothes(400*bomb_armor, BRUTE, "bomb")
|
||||
else
|
||||
damage_clothes(400,BRUTE,"bomb")
|
||||
if (EXPLODE_DEVASTATE)
|
||||
if(bomb_armor < EXPLODE_GIB_THRESHOLD) //gibs the mob if their bomb armor is lower than EXPLODE_GIB_THRESHOLD
|
||||
for(var/I in contents)
|
||||
var/atom/A = I
|
||||
A.ex_act(severity)
|
||||
gib()
|
||||
return
|
||||
else
|
||||
brute_loss = 500
|
||||
var/atom/throw_target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src)))
|
||||
throw_at(throw_target, 200, 4)
|
||||
damage_clothes(400 - bomb_armor, BRUTE, "bomb")
|
||||
|
||||
if (2)
|
||||
b_loss = 60*bomb_armor
|
||||
f_loss = 60*bomb_armor
|
||||
damage_clothes(200*bomb_armor, BRUTE, "bomb")
|
||||
if (EXPLODE_HEAVY)
|
||||
brute_loss = 60
|
||||
burn_loss = 60
|
||||
if(bomb_armor)
|
||||
brute_loss = 30*(2 - round(bomb_armor*0.01, 0.05))
|
||||
burn_loss = brute_loss //damage gets reduced from 120 to up to 60 combined brute+burn
|
||||
damage_clothes(200 - bomb_armor, BRUTE, "bomb")
|
||||
if (!istype(ears, /obj/item/clothing/ears/earmuffs))
|
||||
adjustEarDamage(30, 120)
|
||||
Unconscious(200*bomb_armor)
|
||||
Unconscious(20) //short amount of time for follow up attacks against elusive enemies like wizards
|
||||
Knockdown(200 - (bomb_armor * 1.6)) //between ~4 and ~20 seconds of knockdown depending on bomb armor
|
||||
|
||||
if(3)
|
||||
b_loss = 30*bomb_armor
|
||||
if(EXPLODE_LIGHT)
|
||||
brute_loss = 30
|
||||
if(bomb_armor)
|
||||
brute_loss = 15*(2 - round(bomb_armor*0.01, 0.05))
|
||||
damage_clothes(max(50 - bomb_armor, 0), BRUTE, "bomb")
|
||||
if (!istype(ears, /obj/item/clothing/ears/earmuffs))
|
||||
adjustEarDamage(15,60)
|
||||
Unconscious(100*bomb_armor)
|
||||
Knockdown(160 - (bomb_armor * 1.6)) //100 bomb armor will prevent knockdown altogether
|
||||
|
||||
take_overall_damage(b_loss,f_loss)
|
||||
take_overall_damage(brute_loss,burn_loss)
|
||||
|
||||
//attempt to dismember bodyparts
|
||||
if(severity <= 2 || !bomb_armor)
|
||||
|
||||
@@ -189,18 +189,18 @@
|
||||
..()
|
||||
|
||||
switch (severity)
|
||||
if (1)
|
||||
if (EXPLODE_DEVASTATE)
|
||||
gib()
|
||||
return
|
||||
|
||||
if (2)
|
||||
if (EXPLODE_HEAVY)
|
||||
take_overall_damage(60, 60)
|
||||
damage_clothes(200, BRUTE, "bomb")
|
||||
adjustEarDamage(30, 120)
|
||||
if(prob(70))
|
||||
Unconscious(200)
|
||||
|
||||
if(3)
|
||||
if(EXPLODE_LIGHT)
|
||||
take_overall_damage(30, 0)
|
||||
damage_clothes(50, BRUTE, "bomb")
|
||||
adjustEarDamage(15,60)
|
||||
|
||||
@@ -835,7 +835,7 @@
|
||||
|
||||
/obj/item/robot_module/miner/be_transformed_to(obj/item/robot_module/old_module)
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Lavaland", "Heavy", "Sleek", "Marina", "Can", "Spider", "Asteroid", "Droid", "Blade")
|
||||
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Lavaland", "Heavy", "Sleek", "Marina", "Can", "Spider", "Asteroid", "Droid", "Blade", "Vale")
|
||||
if(!borg_icon)
|
||||
return FALSE
|
||||
switch(borg_icon)
|
||||
@@ -868,6 +868,11 @@
|
||||
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
sleeper_overlay = "bladesleeper"
|
||||
dogborg = TRUE
|
||||
if("Vale")
|
||||
cyborg_base_icon = "valemine"
|
||||
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
|
||||
sleeper_overlay = "valeminesleeper"
|
||||
dogborg = TRUE
|
||||
return ..()
|
||||
|
||||
/obj/item/robot_module/syndicate
|
||||
|
||||
@@ -122,19 +122,19 @@
|
||||
..()
|
||||
var/bomb_armor = getarmor(null, "bomb")
|
||||
switch (severity)
|
||||
if (1)
|
||||
if (EXPLODE_DEVASTATE)
|
||||
if(prob(bomb_armor))
|
||||
adjustBruteLoss(500)
|
||||
else
|
||||
gib()
|
||||
return
|
||||
if (2)
|
||||
if (EXPLODE_HEAVY)
|
||||
var/bloss = 60
|
||||
if(prob(bomb_armor))
|
||||
bloss = bloss / 1.5
|
||||
adjustBruteLoss(bloss)
|
||||
|
||||
if(3)
|
||||
if(EXPLODE_LIGHT)
|
||||
var/bloss = 30
|
||||
if(prob(bomb_armor))
|
||||
bloss = bloss / 1.5
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
/mob/living/simple_animal/pet/bumbles
|
||||
name = "Bumbles"
|
||||
desc = "Bumbles, the very humble bumblebee."
|
||||
icon_state = "bumbles"
|
||||
icon_living = "bumbles"
|
||||
icon_dead = "bumbles_dead"
|
||||
turns_per_move = 1
|
||||
response_help = "shoos"
|
||||
response_disarm = "brushes aside"
|
||||
response_harm = "squashes"
|
||||
speak_emote = list("bzzzs")
|
||||
maxHealth = 100
|
||||
health = 100
|
||||
harm_intent_damage = 1
|
||||
friendly = "bzzs"
|
||||
density = FALSE
|
||||
movement_type = FLYING
|
||||
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
|
||||
ventcrawler = VENTCRAWLER_ALWAYS
|
||||
mob_size = MOB_SIZE_TINY
|
||||
mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
|
||||
gold_core_spawnable = FRIENDLY_SPAWN
|
||||
verb_say = "bzzs"
|
||||
verb_ask = "bzzs inquisitively"
|
||||
verb_exclaim = "bzzs intensely"
|
||||
verb_yell = "bzzs intensely"
|
||||
|
||||
/mob/living/simple_animal/pet/bumbles/Initialize()
|
||||
. = ..()
|
||||
verbs += /mob/living/proc/lay_down
|
||||
|
||||
/mob/living/simple_animal/pet/bumbles/ComponentInitialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/wuv, "bzzs!")
|
||||
|
||||
/mob/living/simple_animal/pet/bumbles/update_canmove()
|
||||
..()
|
||||
if(client && stat != DEAD)
|
||||
if (resting)
|
||||
icon_state = "[icon_living]_rest"
|
||||
collar_type = "[initial(collar_type)]_rest"
|
||||
else
|
||||
icon_state = "[icon_living]"
|
||||
collar_type = "[initial(collar_type)]"
|
||||
regenerate_icons()
|
||||
|
||||
/mob/living/simple_animal/pet/bumbles/bee_friendly()
|
||||
return TRUE //treaty signed at the Beeneeva convention
|
||||
@@ -103,13 +103,13 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/ex_act(severity, target)
|
||||
switch (severity)
|
||||
if (1)
|
||||
if (EXPLODE_DEVASTATE)
|
||||
adjustBruteLoss(250)
|
||||
|
||||
if (2)
|
||||
if (EXPLODE_HEAVY)
|
||||
adjustBruteLoss(100)
|
||||
|
||||
if(3)
|
||||
if(EXPLODE_LIGHT)
|
||||
adjustBruteLoss(50)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/proc/SetRecoveryTime(buffer_time)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
//////////////////////////////////////////////////////
|
||||
/mob
|
||||
var/flavor_text = "" //tired of fucking double checking this
|
||||
var/flavor_text_2 = ""
|
||||
|
||||
/mob/proc/update_flavor_text()
|
||||
set src in usr
|
||||
@@ -16,6 +17,19 @@
|
||||
|
||||
flavor_text = msg
|
||||
|
||||
/mob/proc/update_flavor_text_2()
|
||||
set src in usr
|
||||
if(usr != src)
|
||||
to_chat(usr, "No.")
|
||||
var/msg = stripped_multiline_input(usr, "Set the temporary flavor text in your 'examine' verb. This should be used only for things pertaining to the current round!", "Short-Term Flavor Text", html_decode(flavor_text_2), MAX_MESSAGE_LEN*2, TRUE)
|
||||
|
||||
if(!isnull(msg))
|
||||
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
|
||||
msg = html_encode(msg)
|
||||
|
||||
flavor_text_2 = msg
|
||||
|
||||
|
||||
/mob/proc/warn_flavor_changed()
|
||||
if(flavor_text && flavor_text != "") // don't spam people that don't use it!
|
||||
to_chat(src, "<h2 class='alert'>OOC Warning:</h2>")
|
||||
@@ -30,6 +44,16 @@
|
||||
else
|
||||
return "<span class='notice'>[html_encode(copytext(msg, 1, 37))]... <a href='?src=[REF(src)];flavor_more=1'>More...</span></a>"
|
||||
|
||||
/mob/proc/print_flavor_text_2()
|
||||
if(flavor_text && flavor_text != "")
|
||||
// We are decoding and then encoding to not only get correct amount of characters, but also to prevent partial escaping characters being shown.
|
||||
var/msg = html_decode(replacetext(flavor_text_2, "\n", " "))
|
||||
if(length(msg) <= 40)
|
||||
return "<span class='notice'>[html_encode(msg)]</span>"
|
||||
else
|
||||
return "<span class='notice'>[html_encode(copytext(msg, 1, 37))]... <a href='?src=[REF(src)];flavor_more=1'>More...</span></a>"
|
||||
|
||||
|
||||
/mob/proc/get_top_level_mob()
|
||||
if(istype(src.loc,/mob)&&src.loc!=src)
|
||||
var/mob/M=src.loc
|
||||
|
||||
@@ -701,6 +701,52 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/apc/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
|
||||
if(the_rcd.upgrade & RCD_UPGRADE_SIMPLE_CIRCUITS)
|
||||
if(!has_electronics)
|
||||
if(stat & BROKEN)
|
||||
to_chat(user, "<span class='warning'>[src]'s frame is too damaged to support a circuit.</span>")
|
||||
return FALSE
|
||||
return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 20, "cost" = 1)
|
||||
else if(!cell)
|
||||
if(stat & MAINT)
|
||||
to_chat(user, "<span class='warning'>There's no connector for a power cell.</span>")
|
||||
return FALSE
|
||||
return list("mode" = RCD_UPGRADE_SIMPLE_CIRCUITS, "delay" = 50, "cost" = 10) //16 for a wall
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] has both electronics and a cell.</span>")
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/power/apc/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
|
||||
switch(passed_mode)
|
||||
if(RCD_UPGRADE_SIMPLE_CIRCUITS)
|
||||
if(!has_electronics)
|
||||
if(stat & BROKEN)
|
||||
to_chat(user, "<span class='warning'>[src]'s frame is too damaged to support a circuit.</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] fabricates a circuit and places it into [src].</span>", \
|
||||
"<span class='notice'>You adapt a power control board and click it into place in [src]'s guts.</span>")
|
||||
has_electronics = TRUE
|
||||
locked = TRUE
|
||||
return TRUE
|
||||
else if(!cell)
|
||||
if(stat & MAINT)
|
||||
to_chat(user, "<span class='warning'>There's no connector for a power cell.</span>")
|
||||
return FALSE
|
||||
var/obj/item/stock_parts/cell/crap/empty/C = new(src)
|
||||
C.forceMove(src)
|
||||
cell = C
|
||||
chargecount = 0
|
||||
user.visible_message("<span class='notice'>[user] fabricates a weak power cell and places it into [src].</span>", \
|
||||
"<span class='warning'>Your [the_rcd.name] whirrs with strain as you create a weak power cell and place it into [src]!</span>")
|
||||
update_icon()
|
||||
return TRUE
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] has both electronics and a cell.</span>")
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/power/apc/AltClick(mob/user)
|
||||
. = ..()
|
||||
if(!user.canUseTopic(src, !issilicon(user)) || !isturf(loc))
|
||||
|
||||
@@ -92,8 +92,15 @@
|
||||
|
||||
/obj/machinery/chem_dispenser/Initialize()
|
||||
. = ..()
|
||||
for(var/list/L in list(dispensable_reagents, emagged_reagents, upgrade_reagents, upgrade_reagents2, upgrade_reagents3))
|
||||
L = sortList(L, /proc/cmp_reagents_asc)
|
||||
if(emagged_reagents)
|
||||
emagged_reagents = sortList(emagged_reagents, /proc/cmp_reagents_asc)
|
||||
if(upgrade_reagents)
|
||||
upgrade_reagents = sortList(upgrade_reagents, /proc/cmp_reagents_asc)
|
||||
if(upgrade_reagents2)
|
||||
upgrade_reagents2 = sortList(upgrade_reagents2, /proc/cmp_reagents_asc)
|
||||
if(upgrade_reagents3)
|
||||
upgrade_reagents3 = sortList(upgrade_reagents3, /proc/cmp_reagents_asc)
|
||||
dispensable_reagents = sortList(dispensable_reagents, /proc/cmp_reagents_asc)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/chem_dispenser/Destroy()
|
||||
|
||||
@@ -709,3 +709,41 @@
|
||||
id = /datum/reagent/carpet/royalblue
|
||||
results = list(/datum/reagent/carpet/royalblue = 2)
|
||||
required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/medicine/clonexadone = 1)
|
||||
|
||||
//////////////////////////////////// Glitter ///////////////////////////////////////////
|
||||
|
||||
/datum/chemical_reaction/white_glitter/blue
|
||||
name = "white glitter from blue"
|
||||
id = "white_glitter_blue"
|
||||
results = list(/datum/reagent/glitter/white = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/blue = 1, /datum/reagent/colorful_reagent/crayonpowder/white = 1)
|
||||
|
||||
/datum/chemical_reaction/white_glitter/pink
|
||||
name = "white glitter from pink"
|
||||
id = "white_glitter_pink"
|
||||
results = list(/datum/reagent/glitter/white = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/pink = 1, /datum/reagent/colorful_reagent/crayonpowder/white = 1)
|
||||
|
||||
/datum/chemical_reaction/pink_glitter/blue
|
||||
name = "pink glitter from blue"
|
||||
id = "pink_glitter_blue"
|
||||
results = list(/datum/reagent/glitter/pink = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/blue = 1, /datum/reagent/colorful_reagent/crayonpowder/red = 1)
|
||||
|
||||
/datum/chemical_reaction/pink_glitter/white
|
||||
name = "pink glitter from white"
|
||||
id = "pink_glitter_white"
|
||||
results = list(/datum/reagent/glitter/pink = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/white = 1, /datum/reagent/colorful_reagent/crayonpowder/red = 1)
|
||||
|
||||
/datum/chemical_reaction/blue_glitter/pink
|
||||
name = "blue glitter from pink"
|
||||
id = "blue_glitter_pink"
|
||||
results = list(/datum/reagent/glitter/blue = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/pink = 1, /datum/reagent/colorful_reagent/crayonpowder/blue = 1)
|
||||
|
||||
/datum/chemical_reaction/blue_glitter/white
|
||||
name = "blue glitter from white"
|
||||
id = "blue_glitter_white"
|
||||
results = list(/datum/reagent/glitter/blue = 2)
|
||||
required_reagents = list(/datum/reagent/glitter/white = 1, /datum/reagent/colorful_reagent/crayonpowder/blue = 1)
|
||||
|
||||
@@ -31,6 +31,7 @@ Borg Hypospray
|
||||
var/accepts_reagent_upgrades = TRUE //If upgrades can increase number of reagents dispensed.
|
||||
var/list/modes = list() //Basically the inverse of reagent_ids. Instead of having numbers as "keys" and strings as values it has strings as keys and numbers as values.
|
||||
//Used as list for input() in shakers.
|
||||
var/list/reagent_names = list()
|
||||
|
||||
/obj/item/reagent_containers/borghypo/Initialize()
|
||||
. = ..()
|
||||
@@ -54,7 +55,7 @@ Borg Hypospray
|
||||
return 1
|
||||
|
||||
// Use this to add more chemicals for the borghypo to produce.
|
||||
/obj/item/reagent_containers/borghypo/proc/add_reagent(reagent)
|
||||
/obj/item/reagent_containers/borghypo/proc/add_reagent(datum/reagent/reagent)
|
||||
reagent_ids |= reagent
|
||||
var/datum/reagents/RG = new(30)
|
||||
RG.my_atom = src
|
||||
@@ -64,9 +65,11 @@ Borg Hypospray
|
||||
R.add_reagent(reagent, 30)
|
||||
|
||||
modes[reagent] = modes.len + 1
|
||||
reagent_names[initial(reagent.name)] = reagent
|
||||
|
||||
/obj/item/reagent_containers/borghypo/proc/del_reagent(reagent)
|
||||
/obj/item/reagent_containers/borghypo/proc/del_reagent(datum/reagent/reagent)
|
||||
reagent_ids -= reagent
|
||||
reagent_names -= initial(reagent.name)
|
||||
var/datum/reagents/RG
|
||||
var/datum/reagents/TRG
|
||||
for(var/i in 1 to reagent_ids.len)
|
||||
@@ -112,7 +115,7 @@ Borg Hypospray
|
||||
log_combat(user, M, "injected", src, "(CHEMICALS: [english_list(injected)])")
|
||||
|
||||
/obj/item/reagent_containers/borghypo/attack_self(mob/user)
|
||||
var/chosen_reagent = modes[input(user, "What reagent do you want to dispense?") as null|anything in reagent_ids]
|
||||
var/chosen_reagent = modes[reagent_names[input(user, "What reagent do you want to dispense?") as null|anything in reagent_names]]
|
||||
if(!chosen_reagent)
|
||||
return
|
||||
mode = chosen_reagent
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
icon_state = "virus_food"
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
reagent_id = /datum/reagent/toxin/mutagen/mutagenvirusfood
|
||||
reagent_id = /datum/reagent/consumable/virus_food
|
||||
|
||||
/obj/structure/reagent_dispensers/cooking_oil
|
||||
name = "vat of cooking oil"
|
||||
|
||||
@@ -24,7 +24,15 @@
|
||||
id = "sleeper"
|
||||
build_path = /obj/item/circuitboard/machine/sleeper
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
category = list ("Medical Machinery")
|
||||
category = list("Medical Machinery")
|
||||
|
||||
/datum/design/board/syndiesleeper
|
||||
name = "Machine Design (Syndicate Sleeper Board)"
|
||||
desc = "The circuit board for a Syndicate sleeper, with controls inside."
|
||||
id = "syndiesleeper"
|
||||
build_path = /obj/item/circuitboard/machine/sleeper/syndie
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
category = list("Medical Machinery")
|
||||
|
||||
/datum/design/board/cryotube
|
||||
name = "Machine Design (Cryotube Board)"
|
||||
|
||||
@@ -389,13 +389,23 @@
|
||||
////////////Tools//////////////
|
||||
///////////////////////////////
|
||||
|
||||
/datum/design/rcd_upgrade
|
||||
name = "Advanced RCD designs upgrade"
|
||||
/datum/design/rcd_upgrade/frames
|
||||
name = "RCD frames designs upgrade"
|
||||
desc = "Adds the computer frame and machine frame to the RCD."
|
||||
id = "rcd_upgrade"
|
||||
id = "rcd_upgrade_frames"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 2500, MAT_SILVER = 1500, MAT_TITANIUM = 2000)
|
||||
build_path = /obj/item/rcd_upgrade
|
||||
build_path = /obj/item/rcd_upgrade/frames
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/rcd_upgrade/simple_circuits
|
||||
name = "RCD simple circuits designs upgrade"
|
||||
desc = "Adds the simple circuits to the RCD."
|
||||
id = "rcd_upgrade_simple_circuits"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 2500, MAT_SILVER = 1500, MAT_TITANIUM = 2000)
|
||||
build_path = /obj/item/rcd_upgrade/simple_circuits
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
@@ -429,6 +439,26 @@
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/rcd_loaded
|
||||
name = "Rapid Construction Device"
|
||||
desc = "A tool that can construct and deconstruct walls, airlocks and floors on the fly."
|
||||
id = "rcd_loaded"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) // costs more than what it did in the autolathe, this one comes loaded.
|
||||
build_path = /obj/item/construction/rcd/loaded
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/rpd
|
||||
name = "Rapid Pipe Dispenser"
|
||||
desc = "A tool that can construct and deconstruct pipes on the fly."
|
||||
id = "rpd"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 75000, MAT_GLASS = 37500)
|
||||
build_path = /obj/item/pipe_dispenser
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/alienwrench
|
||||
name = "Alien Wrench"
|
||||
desc = "An advanced wrench obtained through Abductor technology."
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
display_name = "Advanced Engineering"
|
||||
description = "Pushing the boundaries of physics, one chainsaw-fist at a time."
|
||||
prereq_ids = list("engineering", "emp_basic")
|
||||
design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask", "tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription", "rcd_upgrade")
|
||||
design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask" , "rcd_loaded", "rpd", "tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription", "rcd_upgrade_frames", "rcd_upgrade_simple_circuits")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000)
|
||||
export_price = 5000
|
||||
|
||||
@@ -1081,7 +1081,7 @@
|
||||
display_name = "Illegal Technology"
|
||||
description = "Dangerous research used to create dangerous objects."
|
||||
prereq_ids = list("adv_engi", "adv_weaponry", "explosive_weapons")
|
||||
design_ids = list("decloner", "borg_syndicate_module", "suppressor", "largecrossbow", "donksofttoyvendor")
|
||||
design_ids = list("decloner", "borg_syndicate_module", "suppressor", "largecrossbow", "donksofttoyvendor", "syndiesleeper")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
|
||||
export_price = 5000
|
||||
hidden = TRUE
|
||||
|
||||
@@ -1,15 +1,5 @@
|
||||
/////AUGMENTATION SURGERIES//////
|
||||
//SURGERY STEPS
|
||||
/datum/surgery_step/replace
|
||||
name = "sever muscles"
|
||||
implements = list(TOOL_SCALPEL = 100, TOOL_WIRECUTTER = 55)
|
||||
time = 32
|
||||
|
||||
|
||||
/datum/surgery_step/replace/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
display_results(user, target, "<span class ='notice'>You begin to sever the muscles on [target]'s [parse_zone(user.zone_selected)]...</span>",
|
||||
"[user] begins to sever the muscles on [target]'s [parse_zone(user.zone_selected)].",
|
||||
"[user] begins an incision on [target]'s [parse_zone(user.zone_selected)].")
|
||||
|
||||
/datum/surgery_step/replace_limb
|
||||
name = "replace limb"
|
||||
@@ -37,7 +27,7 @@
|
||||
//ACTUAL SURGERIES
|
||||
/datum/surgery/augmentation
|
||||
name = "Augmentation"
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/replace, /datum/surgery_step/saw, /datum/surgery_step/replace_limb)
|
||||
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/replace_limb)
|
||||
target_mobtypes = list(/mob/living/carbon/human)
|
||||
possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD)
|
||||
requires_real_bodypart = TRUE
|
||||
|
||||
Reference in New Issue
Block a user