mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 07:33:34 +01:00
Merge branch 'master' into fuckyougit
This commit is contained in:
@@ -14,6 +14,18 @@
|
||||
lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/clothing_righthand.dmi'
|
||||
|
||||
var/flash_protect = 0 //What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS
|
||||
var/tint = 0 //Sets the item's level of visual impairment tint, normally set to the same as flash_protect
|
||||
var/up = 0 //but seperated to allow items to protect but not impair vision, like space helmets
|
||||
var/visor_flags = 0 //flags that are added/removed when an item is adjusted up/down
|
||||
var/visor_flags_inv = 0 //same as visor_flags, but for flags_inv
|
||||
|
||||
var/toggle_message = null
|
||||
var/alt_toggle_message = null
|
||||
var/active_sound = null
|
||||
var/toggle_cooldown = null
|
||||
var/cooldown = 0
|
||||
|
||||
//BS12: Species-restricted clothing check.
|
||||
/obj/item/clothing/mob_can_equip(M as mob, slot)
|
||||
|
||||
@@ -139,8 +151,6 @@
|
||||
var/vision_flags = 0
|
||||
var/darkness_view = 0//Base human is 2
|
||||
var/invisa_view = 0
|
||||
var/flash_protect = 0 //Mal: What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS
|
||||
var/tint = 0 //Mal: Sets the item's level of visual impairment tint, normally set to the same as flash_protect
|
||||
var/color_view = null//overrides client.color while worn
|
||||
strip_delay = 20 // but seperated to allow items to protect but not impair vision, like space helmets
|
||||
put_on_delay = 25
|
||||
@@ -264,12 +274,11 @@ BLIND // can't see anything
|
||||
body_parts_covered = HEAD
|
||||
slot_flags = SLOT_HEAD
|
||||
var/blockTracking // Do we block AI tracking?
|
||||
var/flash_protect = 0
|
||||
var/tint = 0
|
||||
var/HUDType = null
|
||||
var/darkness_view = 0
|
||||
var/vision_flags = 0
|
||||
var/see_darkness = 1
|
||||
var/can_toggle = null
|
||||
|
||||
//Mask
|
||||
/obj/item/clothing/mask
|
||||
@@ -280,8 +289,6 @@ BLIND // can't see anything
|
||||
var/mask_adjusted = 0
|
||||
var/ignore_maskadjust = 1
|
||||
var/adjusted_flags = null
|
||||
var/flash_protect = 0
|
||||
var/tint = 0
|
||||
strip_delay = 40
|
||||
put_on_delay = 40
|
||||
|
||||
@@ -351,6 +358,8 @@ BLIND // can't see anything
|
||||
slot_flags = SLOT_FEET
|
||||
|
||||
var/silence_steps = 0
|
||||
var/shoe_sound_footstep = 1
|
||||
var/shoe_sound = null
|
||||
|
||||
permeability_coefficient = 0.50
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
@@ -369,6 +378,7 @@ BLIND // can't see anything
|
||||
processing_objects.Add(M)
|
||||
M.update_icon()
|
||||
user.visible_message("<span class='warning'>[user] strikes a [M] on the bottom of [src], lighting it.</span>","<span class='warning'>You strike the [M] on the bottom of [src] to light it.</span>")
|
||||
playsound(user.loc, 'sound/goonstation/misc/matchstick_light.ogg', 50, 1)
|
||||
else if(M.lit == 1) // Match is lit, not extinguished.
|
||||
M.dropped()
|
||||
user.visible_message("<span class='warning'>[user] crushes the [M] into the bottom of [src], extinguishing it.</span>","<span class='warning'>You crush the [M] into the bottom of [src], extinguishing it.</span>")
|
||||
@@ -396,6 +406,25 @@ BLIND // can't see anything
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/clothing/shoes/proc/step_action(var/mob/living/carbon/human/H) //squeek squeek
|
||||
if(shoe_sound)
|
||||
var/turf/T = get_turf(H)
|
||||
|
||||
if(!istype(H) || !istype(T))
|
||||
return 0
|
||||
|
||||
if(H.m_intent == "run")
|
||||
if(shoe_sound_footstep >= 2)
|
||||
if(T.shoe_running_volume)
|
||||
playsound(src, shoe_sound, T.shoe_running_volume, 1)
|
||||
shoe_sound_footstep = 0
|
||||
else
|
||||
shoe_sound_footstep++
|
||||
else if(T.shoe_walking_volume)
|
||||
playsound(src, shoe_sound, T.shoe_walking_volume, 1)
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/proc/negates_gravity()
|
||||
return 0
|
||||
|
||||
@@ -458,8 +487,10 @@ BLIND // can't see anything
|
||||
set name = "Open/Close Jacket"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
if(!isliving(usr))
|
||||
return
|
||||
if(usr.stat)
|
||||
return
|
||||
adjustsuit(user)
|
||||
|
||||
/obj/item/clothing/suit/ui_action_click() //This is what happens when you click the HUD action button to adjust your suit.
|
||||
|
||||
@@ -302,7 +302,6 @@
|
||||
icon_state = "welding-g"
|
||||
item_state = "welding-g"
|
||||
action_button_name = "Flip welding goggles"
|
||||
var/up = 0
|
||||
flash_protect = 2
|
||||
tint = 2
|
||||
species_fit = list("Vox")
|
||||
|
||||
@@ -16,6 +16,24 @@
|
||||
"Vox" = 'icons/mob/species/vox/helmet.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/helmet/attack_self(mob/user)
|
||||
if(can_toggle && !user.incapacitated())
|
||||
if(world.time > cooldown + toggle_cooldown)
|
||||
cooldown = world.time
|
||||
up = !up
|
||||
flags ^= visor_flags
|
||||
flags_inv ^= visor_flags_inv
|
||||
icon_state = "[initial(icon_state)][up ? "up" : ""]"
|
||||
user << "[up ? alt_toggle_message : toggle_message] \the [src]"
|
||||
|
||||
user.update_inv_head()
|
||||
|
||||
if(active_sound)
|
||||
while(up)
|
||||
playsound(src.loc, "[active_sound]", 100, 0, 4)
|
||||
sleep(15)
|
||||
|
||||
|
||||
/obj/item/clothing/head/helmet/visor
|
||||
name = "visor helmet"
|
||||
desc = "A helmet with a built-in visor. It doesn't seem to do anything, but it sure looks cool!"
|
||||
@@ -66,6 +84,25 @@
|
||||
flags_inv = HIDEEARS
|
||||
strip_delay = 80
|
||||
|
||||
/obj/item/clothing/head/helmet/justice
|
||||
name = "helmet of justice"
|
||||
desc = "WEEEEOOO. WEEEEEOOO. WEEEEOOOO."
|
||||
icon_state = "justice"
|
||||
toggle_message = "You turn off the lights on"
|
||||
alt_toggle_message = "You turn on the lights on"
|
||||
action_button_name = "Toggle JUSTICE"
|
||||
can_toggle = 1
|
||||
toggle_cooldown = 20
|
||||
active_sound = 'sound/items/WEEOO1.ogg'
|
||||
|
||||
/obj/item/clothing/head/helmet/justice/escape
|
||||
name = "alarm helmet"
|
||||
desc = "WEEEEOOO. WEEEEEOOO. STOP THAT MONKEY. WEEEOOOO."
|
||||
icon_state = "justice2"
|
||||
toggle_message = "You turn off the light on"
|
||||
alt_toggle_message = "You turn on the light on"
|
||||
|
||||
|
||||
/obj/item/clothing/head/helmet/swat
|
||||
name = "\improper SWAT helmet"
|
||||
desc = "They're often used by highly trained Swat Members."
|
||||
|
||||
@@ -338,7 +338,6 @@
|
||||
item_state = "griffinhat"
|
||||
flags = BLOCKHAIR|NODROP
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
var/cooldown = 0
|
||||
action_button_name = "Caw"
|
||||
|
||||
/obj/item/clothing/head/griffin/attack_self()
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
flags = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
item_state = "welding"
|
||||
materials = list(MAT_METAL=1750, MAT_GLASS=400)
|
||||
var/up = 0
|
||||
flash_protect = 2
|
||||
tint = 2
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
icon_state = "weldingmask"
|
||||
item_state = "weldingmask"
|
||||
materials = list(MAT_METAL=4000, MAT_GLASS=2000)
|
||||
var/up = 0
|
||||
flash_protect = 2
|
||||
tint = 2
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
@@ -166,7 +165,6 @@
|
||||
desc = "Twoooo!"
|
||||
icon_state = "owl"
|
||||
flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | NODROP
|
||||
var/cooldown = 0
|
||||
action_button_name = "Hoot"
|
||||
|
||||
/obj/item/clothing/mask/gas/owl_mask/attack_self()
|
||||
@@ -193,7 +191,6 @@
|
||||
desc = "A standard issue Security gas mask with integrated 'Compli-o-nator 3000' device, plays over a dozen pre-recorded compliance phrases designed to get scumbags to stand still whilst you taze them. Do not tamper with the device."
|
||||
action_button_name = "HALT!"
|
||||
icon_state = "sechailer"
|
||||
var/cooldown = 0
|
||||
var/aggressiveness = 2
|
||||
var/safety = 1
|
||||
ignore_maskadjust = 0
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
/obj/item/clothing/shoes/proc/step_action(var/mob/living/carbon/human/H) //squeek squeek
|
||||
|
||||
/obj/item/clothing/shoes/syndigaloshes
|
||||
desc = "A pair of brown shoes. They seem to have extra grip."
|
||||
name = "brown shoes"
|
||||
@@ -77,18 +75,7 @@
|
||||
var/footstep = 1 //used for squeeks whilst walking
|
||||
species_restricted = null
|
||||
silence_steps = 1
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/step_action(var/mob/living/carbon/human/H)
|
||||
if(!istype(H)) return 0
|
||||
|
||||
if(H.m_intent == "run")
|
||||
if(footstep >= 2)
|
||||
playsound(src, "clownstep", 50, 1)
|
||||
footstep = 0
|
||||
else
|
||||
footstep++
|
||||
else
|
||||
playsound(src, "clownstep", 20, 1)
|
||||
shoe_sound = "clownstep"
|
||||
|
||||
/obj/item/clothing/shoes/jackboots
|
||||
name = "jackboots"
|
||||
@@ -101,18 +88,7 @@
|
||||
put_on_delay = 50
|
||||
var/footstep = 1
|
||||
silence_steps = 1
|
||||
|
||||
/obj/item/clothing/shoes/jackboots/step_action(var/mob/living/carbon/human/H)
|
||||
if(!istype(H)) return 0
|
||||
|
||||
if(H.m_intent == "run")
|
||||
if(footstep >= 2)
|
||||
playsound(src, "jackboot", 50, 1)
|
||||
footstep = 0
|
||||
else
|
||||
footstep++
|
||||
else
|
||||
playsound(src, "jackboot", 20, 1)
|
||||
shoe_sound = "jackboot"
|
||||
|
||||
/obj/item/clothing/shoes/jackboots/jacksandals
|
||||
name = "jacksandals"
|
||||
@@ -190,6 +166,7 @@
|
||||
/obj/item/clothing/shoes/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/shoe_silencer))
|
||||
silence_steps = 1
|
||||
shoe_sound = null
|
||||
user.unEquip(I)
|
||||
qdel(I)
|
||||
else . = ..()
|
||||
|
||||
@@ -40,7 +40,6 @@
|
||||
armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
|
||||
var/up = 0 //So Unathi helmets play nicely with the weldervision check.
|
||||
species_restricted = list("Unathi")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/unathi/helmet_cheap
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
var/activating = 0
|
||||
var/activated = 0
|
||||
var/cooldowntime = 50 //deciseconds
|
||||
var/cooldown = 0
|
||||
var/teleporting = 0
|
||||
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
suit_adjusted = 1
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/device/antibody_scanner,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/device/rad_laser)
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/device/antibody_scanner,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/device/rad_laser)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 50, rad = 0)
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
|
||||
@@ -283,22 +283,78 @@
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = HIDEFACE
|
||||
|
||||
/obj/item/clothing/under/fluff/tactical_suit //chronx100: Hughe O'Splash
|
||||
name = "Hughe O'Splash's tactical suit"
|
||||
desc = "A very comfortable suit that covers your entire body; it makes you feel very stealthy."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "chronx_suit"
|
||||
item_state = "chronx_suit"
|
||||
item_color = "chronxsuit"
|
||||
/obj/item/weapon/nullrod/fluff/chronx //chronx100: Hughe O'Splash
|
||||
transform_into = /obj/item/weapon/nullrod/sword/fluff/chronx
|
||||
transform_via = list(/obj/item/clothing/suit/armor/riot/knight/templar, /obj/item/clothing/suit/chaplain_hoodie/fluff/chronx)
|
||||
|
||||
/obj/item/clothing/mask/fluff/tactical_balaclava //chronx100: Hughe O'Splash
|
||||
name = "Hughe O'Splash's tactical balaclava"
|
||||
desc = "Keeps your face warm and tactical during those cold space winter months, sadly it's not so effective against the cold void of space itself."
|
||||
/obj/item/weapon/nullrod/sword/fluff/chronx
|
||||
name = "Soul Collector"
|
||||
desc = "An ancient scythe used by the worshipers of Cthulhu. Tales say it is used to prepare souls for Cthulhu's great devouring. Someone carved their name into the handle: Hughe O'Splash"
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "chronx_balaclava"
|
||||
item_state = "chronx_balaclava"
|
||||
flags = BLOCKHAIR
|
||||
w_class = 2
|
||||
icon_state = "chronx_scythe"
|
||||
item_state = "chronx_scythe"
|
||||
|
||||
/obj/item/clothing/head/fluff/chronx //chronx100: Hughe O'Splash
|
||||
name = "Cthulhu's Hood"
|
||||
desc = "Hood worn by the worshipers of Cthulhu. You see a name inscribed in blood on the inside: Hughe O'Splash"
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "chronx_hood"
|
||||
item_state = "chronx_hood"
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR
|
||||
action_button_name = "Transform Hood"
|
||||
var/adjusted = 0
|
||||
|
||||
/obj/item/clothing/head/fluff/chronx/ui_action_click()
|
||||
adjust()
|
||||
|
||||
/obj/item/clothing/head/fluff/chronx/verb/adjust()
|
||||
set name = "Transform Hood"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!isliving(src))
|
||||
return
|
||||
if(!usr.incapacitated())
|
||||
if(adjusted)
|
||||
icon_state = initial(icon_state)
|
||||
item_state = initial(item_state)
|
||||
usr << "You untransform \the [src]."
|
||||
adjusted = 0
|
||||
else
|
||||
icon_state += "_open"
|
||||
item_state += "_open"
|
||||
usr << "You transform \the [src]."
|
||||
adjusted = 1
|
||||
usr.update_inv_head()
|
||||
|
||||
/obj/item/clothing/suit/chaplain_hoodie/fluff/chronx //chronx100: Hughe O'Splash
|
||||
name = "Cthulhu's Robes"
|
||||
desc = "Robes worn by the worshipers of Cthulhu. You see a name inscribed in blood on the inside: Hughe O'Splash"
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "chronx_robe"
|
||||
item_state = "chronx_robe"
|
||||
flags = ONESIZEFITSALL
|
||||
action_button_name = "Transform Robes"
|
||||
adjust_flavour = "untransform"
|
||||
ignore_suitadjust = 0
|
||||
|
||||
/obj/item/clothing/suit/chaplain_hoodie/fluff/chronx/New()
|
||||
..()
|
||||
verbs -= /obj/item/clothing/suit/verb/openjacket
|
||||
|
||||
/obj/item/clothing/suit/chaplain_hoodie/fluff/chronx/verb/adjust()
|
||||
set name = "Transform Robes"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living))
|
||||
return
|
||||
adjustsuit(usr)
|
||||
|
||||
/obj/item/clothing/shoes/black/fluff/chronx //chronx100: Hughe O'Splash
|
||||
name = "Cthulhu's Boots"
|
||||
desc = "Boots worn by the worshipers of Cthulhu. You see a name inscribed in blood on the inside: Hughe O'Splash"
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "chronx_shoes"
|
||||
item_state = "chronx_shoes"
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/fluff/tactical //m3hillus: Medusa Schlofield
|
||||
name = "tactical armor vest"
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
if(log.len && !scanning)
|
||||
scanning = 1
|
||||
user << "<span class='notice'>Printing report, please wait...</span>"
|
||||
|
||||
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
|
||||
spawn(100)
|
||||
|
||||
// Create our paper
|
||||
|
||||
@@ -330,6 +330,7 @@ log transactions
|
||||
usr << "<span class='notice'>The [src.name] flashes an error on its display.</span>"
|
||||
return
|
||||
lastprint = world.timeofday
|
||||
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
|
||||
var/obj/item/weapon/paper/R = new(src.loc)
|
||||
R.name = "Account balance: [authenticated_account.owner_name]"
|
||||
R.info = {"<b>NT Automated Teller Account Statement</b><br><br>
|
||||
|
||||
@@ -89,6 +89,7 @@ var/global/list/all_money_accounts = list()
|
||||
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(source_db.loc)
|
||||
|
||||
var/obj/item/weapon/paper/R = new /obj/item/weapon/paper(P)
|
||||
playsound(source_db.loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
|
||||
P.wrapped = R
|
||||
R.name = "Account information: [M.owner_name]"
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
var/creating_new_account = 0
|
||||
var/activated = 1
|
||||
var/const/fund_cap = 1000000
|
||||
|
||||
|
||||
light_color = LIGHT_COLOR_GREEN
|
||||
|
||||
/obj/machinery/computer/account_database/proc/get_access_level(var/mob/user)
|
||||
@@ -127,11 +127,11 @@
|
||||
ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
|
||||
/obj/machinery/computer/account_database/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
|
||||
if(href_list["insert_card"])
|
||||
if(held_card)
|
||||
held_card.forceMove(loc)
|
||||
@@ -146,8 +146,8 @@
|
||||
var/obj/item/weapon/card/id/C = I
|
||||
usr.drop_item()
|
||||
C.forceMove(src)
|
||||
held_card = C
|
||||
|
||||
held_card = C
|
||||
|
||||
if(!get_access_level(usr))
|
||||
return 1
|
||||
|
||||
@@ -176,10 +176,10 @@
|
||||
if("finalise_create_account")
|
||||
var/account_name = href_list["holder_name"]
|
||||
var/starting_funds = max(text2num(href_list["starting_funds"]), 0)
|
||||
|
||||
|
||||
starting_funds = Clamp(starting_funds, 0, station_account.money) // Not authorized to put the station in debt.
|
||||
starting_funds = min(starting_funds, fund_cap) // Not authorized to give more than the fund cap.
|
||||
|
||||
starting_funds = min(starting_funds, fund_cap) // Not authorized to give more than the fund cap.
|
||||
|
||||
create_account(account_name, starting_funds, src)
|
||||
if(starting_funds > 0)
|
||||
//subtract the money
|
||||
@@ -218,6 +218,7 @@
|
||||
|
||||
if("print")
|
||||
var/text
|
||||
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
|
||||
var/obj/item/weapon/paper/P = new(loc)
|
||||
if (detailed_account_view)
|
||||
P.name = "account #[detailed_account_view.account_number] details"
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
linked_account = station_account
|
||||
|
||||
/obj/item/device/eftpos/proc/print_reference()
|
||||
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
|
||||
var/obj/item/weapon/paper/R = new(src.loc)
|
||||
R.name = "Reference: [eftpos_name]"
|
||||
|
||||
|
||||
@@ -201,6 +201,7 @@ var/const/POS_HEADER = {"<html>
|
||||
</tr>"}
|
||||
receipt += "</table></body></html>"
|
||||
|
||||
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
|
||||
var/obj/item/weapon/paper/P = new(loc)
|
||||
P.name="Receipt #[id]-[++sales]"
|
||||
P.info=receipt
|
||||
|
||||
@@ -21,16 +21,17 @@
|
||||
if(temp_vent.parent.other_atmosmch.len > 50) //Stops Aliens getting stuck in small networks. See: Security, Virology
|
||||
vents += temp_vent
|
||||
|
||||
var/list/candidates = get_candidates(ROLE_ALIEN,ALIEN_AFK_BRACKET)
|
||||
spawn()
|
||||
var/list/candidates = pollCandidates("Do you want to play as an alien?", ROLE_ALIEN, 1)
|
||||
|
||||
while(spawncount > 0 && vents.len && candidates.len)
|
||||
var/obj/vent = pick_n_take(vents)
|
||||
var/client/C = pick_n_take(candidates)
|
||||
if(C)
|
||||
respawnable_list -= C
|
||||
var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc)
|
||||
new_xeno.key = C.key
|
||||
while(spawncount > 0 && vents.len && candidates.len)
|
||||
var/obj/vent = pick_n_take(vents)
|
||||
var/mob/C = pick_n_take(candidates)
|
||||
if(C)
|
||||
respawnable_list -= C.client
|
||||
var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc)
|
||||
new_xeno.key = C.key
|
||||
|
||||
spawncount--
|
||||
successSpawn = 1
|
||||
spawncount--
|
||||
successSpawn = 1
|
||||
|
||||
|
||||
@@ -2,56 +2,44 @@
|
||||
var/key_of_slaughter
|
||||
|
||||
/datum/event/spawn_slaughter/proc/get_slaughter(var/end_if_fail = 0)
|
||||
key_of_slaughter = null
|
||||
if(!key_of_slaughter)
|
||||
var/list/candidates = get_candidates(ROLE_DEMON)
|
||||
spawn()
|
||||
var/list/candidates = pollCandidates("Do you want to play as a slaughter demon?", ROLE_DEMON, 1)
|
||||
if(!candidates.len)
|
||||
if(end_if_fail)
|
||||
return 0
|
||||
return find_slaughter()
|
||||
var/client/C = pick(candidates)
|
||||
key_of_slaughter = null
|
||||
return kill()
|
||||
var/mob/C = pick(candidates)
|
||||
key_of_slaughter = C.key
|
||||
if(!key_of_slaughter)
|
||||
if(end_if_fail)
|
||||
return 0
|
||||
return find_slaughter()
|
||||
var/datum/mind/player_mind = new /datum/mind(key_of_slaughter)
|
||||
player_mind.active = 1
|
||||
var/list/spawn_locs = list()
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(isturf(L.loc))
|
||||
switch(L.name)
|
||||
if("revenantspawn")
|
||||
spawn_locs += L.loc
|
||||
if(!spawn_locs) //If we can't find any revenant spawns, try the carp spawns
|
||||
|
||||
if(!key_of_slaughter)
|
||||
return kill()
|
||||
|
||||
var/datum/mind/player_mind = new /datum/mind(key_of_slaughter)
|
||||
player_mind.active = 1
|
||||
var/list/spawn_locs = list()
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(isturf(L.loc))
|
||||
switch(L.name)
|
||||
if("carpspawn")
|
||||
if("revenantspawn")
|
||||
spawn_locs += L.loc
|
||||
if(!spawn_locs) //If we can't find either, just spawn the revenant at the player's location
|
||||
spawn_locs += get_turf(player_mind.current)
|
||||
if(!spawn_locs) //If we can't find THAT, then just retry
|
||||
return find_slaughter()
|
||||
var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(pick(spawn_locs))
|
||||
var/mob/living/simple_animal/slaughter/S = new /mob/living/simple_animal/slaughter/(holder)
|
||||
S.holder = holder
|
||||
player_mind.transfer_to(S)
|
||||
player_mind.assigned_role = "Slaughter Demon"
|
||||
player_mind.special_role = "Slaughter Demon"
|
||||
message_admins("[key_of_slaughter] has been made into a Slaughter Demon by an event.")
|
||||
log_game("[key_of_slaughter] was spawned as a Slaughter Demon by an event.")
|
||||
return 1
|
||||
if(!spawn_locs) //If we can't find any revenant spawns, try the carp spawns
|
||||
for(var/obj/effect/landmark/L in landmarks_list)
|
||||
if(isturf(L.loc))
|
||||
switch(L.name)
|
||||
if("carpspawn")
|
||||
spawn_locs += L.loc
|
||||
if(!spawn_locs) //If we can't find either, just spawn the revenant at the player's location
|
||||
spawn_locs += get_turf(player_mind.current)
|
||||
if(!spawn_locs) //If we can't find THAT, then just retry
|
||||
return kill()
|
||||
var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(pick(spawn_locs))
|
||||
var/mob/living/simple_animal/slaughter/S = new /mob/living/simple_animal/slaughter/(holder)
|
||||
S.holder = holder
|
||||
player_mind.transfer_to(S)
|
||||
player_mind.assigned_role = "Slaughter Demon"
|
||||
player_mind.special_role = "Slaughter Demon"
|
||||
message_admins("[key_of_slaughter] has been made into a Slaughter Demon by an event.")
|
||||
log_game("[key_of_slaughter] was spawned as a Slaughter Demon by an event.")
|
||||
return 1
|
||||
|
||||
/datum/event/spawn_slaughter/start()
|
||||
get_slaughter()
|
||||
|
||||
/datum/event/spawn_slaughter/proc/find_slaughter()
|
||||
message_admins("Attempted to spawn a Slaughter Demon but there was no players available. Will try again momentarily.")
|
||||
spawn(50)
|
||||
if(get_slaughter(1))
|
||||
message_admins("Situation has been resolved, [key_of_slaughter] has been spawned as a Slaughter Demon.")
|
||||
log_game("[key_of_slaughter] was spawned as a Slaughter Demon by an event.")
|
||||
return 0
|
||||
message_admins("Unfortunately, no candidates were available for becoming a Slaugter Demon. Shutting down.")
|
||||
kill()
|
||||
get_slaughter()
|
||||
@@ -31,6 +31,7 @@
|
||||
if(!last_data)
|
||||
user << "There is no scan data to print."
|
||||
return
|
||||
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src))
|
||||
P.name = "paper - [form_title]"
|
||||
P.info = "[last_data]"
|
||||
|
||||
@@ -277,6 +277,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
|
||||
if("6")
|
||||
if(!bibledelay)
|
||||
|
||||
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
|
||||
var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible(src.loc)
|
||||
if(ticker && ( ticker.Bible_icon_state && ticker.Bible_item_state) )
|
||||
B.icon_state = ticker.Bible_icon_state
|
||||
@@ -375,6 +376,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
|
||||
var/author = query.item[2]
|
||||
var/title = query.item[3]
|
||||
var/content = query.item[4]
|
||||
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
|
||||
var/obj/item/weapon/book/B = new(src.loc)
|
||||
B.name = "Book: [title]"
|
||||
B.title = title
|
||||
|
||||
@@ -64,6 +64,12 @@
|
||||
materials = list(MAT_BANANIUM = 400)
|
||||
credits = 600 //makes the clown cri
|
||||
|
||||
/obj/item/weapon/coin/mime
|
||||
cmineral = "tranquillite"
|
||||
icon_state = "coin_tranquillite_heads"
|
||||
materials = list(MAT_TRANQUILLITE = 400)
|
||||
credits = 600 //makes the mime cri
|
||||
|
||||
/obj/item/weapon/coin/adamantine
|
||||
cmineral = "adamantine"
|
||||
icon_state = "coin_adamantine_heads"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
var/ore_pickup_rate = 15
|
||||
var/sheet_per_ore = 1
|
||||
var/point_upgrade = 1
|
||||
var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("uranium" = 30), ("diamond" = 50), ("bananium" = 60))
|
||||
var/list/ore_values = list(("sand" = 1), ("iron" = 1), ("plasma" = 15), ("silver" = 16), ("gold" = 18), ("uranium" = 30), ("diamond" = 50), ("bananium" = 60), ("tranquillite" = 60))
|
||||
var/list/supply_consoles = list("Science", "Robotics", "Research Director's Desk", "Mechanic", "Engineering" = list("metal", "glass", "plasma"), "Chief Engineer's Desk" = list("metal", "glass", "plasma"), "Atmospherics" = list("metal", "glass", "plasma"), "Bar" = list("uranium", "plasma"))
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/New()
|
||||
@@ -721,7 +721,7 @@
|
||||
speak_emote = list("states")
|
||||
wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver,
|
||||
/obj/item/weapon/ore/plasma, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/iron,
|
||||
/obj/item/weapon/ore/bananium, /obj/item/weapon/ore/glass)
|
||||
/obj/item/weapon/ore/bananium, /obj/item/weapon/ore/tranquillite, /obj/item/weapon/ore/glass)
|
||||
|
||||
/mob/living/simple_animal/hostile/mining_drone/attackby(obj/item/I as obj, mob/user as mob, params)
|
||||
if(istype(I, /obj/item/weapon/weldingtool))
|
||||
@@ -875,6 +875,10 @@
|
||||
user << "<span class='info'>[src] is only effective on lesser beings.</span>"
|
||||
return
|
||||
|
||||
/obj/item/weapon/lazarus_injector/emag_act()
|
||||
if(!malfunctioning)
|
||||
malfunctioning = 1
|
||||
|
||||
/obj/item/weapon/lazarus_injector/emp_act()
|
||||
if(!malfunctioning)
|
||||
malfunctioning = 1
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/laborstacker
|
||||
var/points = 0 //The unclaimed value of ore stacked. Value for each ore loosely relative to its rarity.
|
||||
var/list/ore_values = list(("glass" = 1), ("metal" = 2), ("solid plasma" = 20), ("plasteel" = 23), ("reinforced glass" = 4), ("gold" = 20), ("silver" = 20), ("uranium" = 20), ("diamond" = 25), ("bananium" = 50))
|
||||
var/list/ore_values = list(("glass" = 1), ("metal" = 2), ("solid plasma" = 20), ("plasteel" = 23), ("reinforced glass" = 4), ("gold" = 20), ("silver" = 20), ("uranium" = 20), ("diamond" = 25), ("bananium" = 50), ("tranquillite" = 50))
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/laborstacker/proc/get_ore_values()
|
||||
var/dat = "<table border='0' width='200'>"
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
var/dat = "<b>Smelter control console</b><br><br>"
|
||||
//iron
|
||||
if(machine.ore_iron || machine.ore_glass || machine.ore_plasma || machine.ore_uranium || machine.ore_gold || machine.ore_silver || machine.ore_diamond || machine.ore_clown || machine.ore_adamantine)
|
||||
if(machine.ore_iron || machine.ore_glass || machine.ore_plasma || machine.ore_uranium || machine.ore_gold || machine.ore_silver || machine.ore_diamond || machine.ore_clown || machine.ore_mime || machine.ore_adamantine)
|
||||
if(machine.ore_iron)
|
||||
if (machine.selected_iron==1)
|
||||
dat += text("<A href='?src=\ref[src];sel_iron=no'><font color='green'>Smelting</font></A> ")
|
||||
@@ -102,6 +102,16 @@
|
||||
else
|
||||
machine.selected_clown = 0
|
||||
|
||||
//tranquillite
|
||||
if(machine.ore_mime)
|
||||
if (machine.selected_mime==1)
|
||||
dat += text("<A href='?src=\ref[src];sel_mime=no'><font color='green'>Smelting</font></A> ")
|
||||
else
|
||||
dat += text("<A href='?src=\ref[src];sel_mime=yes'><font color='red'>Not smelting</font></A> ")
|
||||
dat += text("Tranquillite: [machine.ore_mime]<br>")
|
||||
else
|
||||
machine.selected_mime = 0
|
||||
|
||||
|
||||
//On or off
|
||||
dat += text("Machine is currently ")
|
||||
@@ -160,6 +170,11 @@
|
||||
machine.selected_clown = 1
|
||||
else
|
||||
machine.selected_clown = 0
|
||||
if(href_list["sel_mime"])
|
||||
if (href_list["sel_mime"] == "yes")
|
||||
machine.selected_mime = 1
|
||||
else
|
||||
machine.selected_mime = 0
|
||||
if(href_list["set_on"])
|
||||
if (href_list["set_on"] == "on")
|
||||
machine.on = 1
|
||||
@@ -178,15 +193,16 @@
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/obj/machinery/mineral/CONSOLE = null
|
||||
var/ore_gold = 0;
|
||||
var/ore_silver = 0;
|
||||
var/ore_diamond = 0;
|
||||
var/ore_glass = 0;
|
||||
var/ore_plasma = 0;
|
||||
var/ore_uranium = 0;
|
||||
var/ore_iron = 0;
|
||||
var/ore_clown = 0;
|
||||
var/ore_adamantine = 0;
|
||||
var/ore_gold = 0
|
||||
var/ore_silver = 0
|
||||
var/ore_diamond = 0
|
||||
var/ore_glass = 0
|
||||
var/ore_plasma = 0
|
||||
var/ore_uranium = 0
|
||||
var/ore_iron = 0
|
||||
var/ore_clown = 0
|
||||
var/ore_mime = 0
|
||||
var/ore_adamantine = 0
|
||||
var/selected_gold = 0
|
||||
var/selected_silver = 0
|
||||
var/selected_diamond = 0
|
||||
@@ -195,20 +211,21 @@
|
||||
var/selected_uranium = 0
|
||||
var/selected_iron = 0
|
||||
var/selected_clown = 0
|
||||
var/selected_mime = 0
|
||||
var/on = 0 //0 = off, 1 =... oh you know!
|
||||
|
||||
/obj/machinery/mineral/processing_unit/process()
|
||||
var/i
|
||||
for (i = 0; i < 10; i++)
|
||||
if (on)
|
||||
if (selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0)
|
||||
if (selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
|
||||
if (ore_glass > 0)
|
||||
ore_glass--;
|
||||
generate_mineral(/obj/item/stack/sheet/glass)
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
if (selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0)
|
||||
if (selected_glass == 1 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0)
|
||||
if (ore_glass > 0 && ore_iron > 0)
|
||||
ore_glass--;
|
||||
ore_iron--;
|
||||
@@ -216,49 +233,49 @@
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
if (selected_glass == 0 && selected_gold == 1 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0)
|
||||
if (selected_glass == 0 && selected_gold == 1 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
|
||||
if (ore_gold > 0)
|
||||
ore_gold--;
|
||||
generate_mineral(/obj/item/stack/sheet/mineral/gold)
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 1 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0)
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 1 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
|
||||
if (ore_silver > 0)
|
||||
ore_silver--;
|
||||
generate_mineral(/obj/item/stack/sheet/mineral/silver)
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 1 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0)
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 1 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
|
||||
if (ore_diamond > 0)
|
||||
ore_diamond--;
|
||||
generate_mineral(/obj/item/stack/sheet/mineral/diamond)
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0)
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
|
||||
if (ore_plasma > 0)
|
||||
ore_plasma--;
|
||||
generate_mineral(/obj/item/stack/sheet/mineral/plasma)
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 1 && selected_iron == 0 && selected_clown == 0)
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 1 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
|
||||
if (ore_uranium > 0)
|
||||
ore_uranium--;
|
||||
generate_mineral(/obj/item/stack/sheet/mineral/uranium)
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0)
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0)
|
||||
if (ore_iron > 0)
|
||||
ore_iron--;
|
||||
generate_mineral(/obj/item/stack/sheet/metal)
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0)
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 1 && selected_clown == 0 && selected_mime == 0)
|
||||
if (ore_iron > 0 && ore_plasma > 0)
|
||||
ore_iron--;
|
||||
ore_plasma--;
|
||||
@@ -266,16 +283,23 @@
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 1)
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 1 && selected_mime == 0)
|
||||
if (ore_clown > 0)
|
||||
ore_clown--;
|
||||
generate_mineral(/obj/item/stack/sheet/mineral/bananium)
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 0 && selected_plasma == 0 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 1)
|
||||
if (ore_mime > 0)
|
||||
ore_mime--;
|
||||
generate_mineral(/obj/item/stack/sheet/mineral/tranquillite)
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
//THESE TWO ARE CODED FOR URIST TO USE WHEN HE GETS AROUND TO IT.
|
||||
//They were coded on 18 Feb 2012. If you're reading this in 2015, then firstly congratulations on the world not ending on 21 Dec 2012 and secondly, Urist is apparently VERY lazy. ~Errorage
|
||||
/*if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 1 && selected_plasma == 0 && selected_uranium == 1 && selected_iron == 0 && selected_clown == 0)
|
||||
/*if (selected_glass == 0 && selected_gold == 0 && selected_silver == 0 && selected_diamond == 1 && selected_plasma == 0 && selected_uranium == 1 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
|
||||
if (ore_uranium >= 2 && ore_diamond >= 1)
|
||||
ore_uranium -= 2
|
||||
ore_diamond -= 1
|
||||
@@ -283,7 +307,7 @@
|
||||
else
|
||||
on = 0
|
||||
continue
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 1 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0)
|
||||
if (selected_glass == 0 && selected_gold == 0 && selected_silver == 1 && selected_diamond == 0 && selected_plasma == 1 && selected_uranium == 0 && selected_iron == 0 && selected_clown == 0 && selected_mime == 0)
|
||||
if (ore_silver >= 1 && ore_plasma >= 3)
|
||||
ore_silver -= 1
|
||||
ore_plasma -= 3
|
||||
@@ -324,6 +348,9 @@
|
||||
if (selected_clown == 1)
|
||||
if (ore_clown <= 0)
|
||||
b = 0
|
||||
if (selected_mime == 1)
|
||||
if (ore_mime <= 0)
|
||||
b = 0
|
||||
|
||||
if (b) //if they are, deduct one from each, produce slag and shut the machine off
|
||||
if (selected_gold == 1)
|
||||
@@ -340,6 +367,8 @@
|
||||
ore_iron--
|
||||
if (selected_clown == 1)
|
||||
ore_clown--
|
||||
if (selected_mime == 1)
|
||||
ore_mime--
|
||||
generate_mineral(/obj/item/weapon/ore/slag)
|
||||
on = 0
|
||||
else
|
||||
@@ -387,6 +416,10 @@
|
||||
ore_clown++
|
||||
O.loc = null
|
||||
continue
|
||||
if (istype(O,/obj/item/weapon/ore/tranquillite))
|
||||
ore_mime++
|
||||
O.loc = null
|
||||
continue
|
||||
unload_mineral(O)
|
||||
|
||||
/obj/machinery/mineral/processing_unit/proc/generate_mineral(var/P)
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg')
|
||||
var/drill_verb = "picking"
|
||||
sharp = 1
|
||||
|
||||
edge = 1
|
||||
var/excavation_amount = 100
|
||||
|
||||
/obj/item/weapon/pickaxe/proc/playDigSound()
|
||||
|
||||
@@ -133,6 +133,8 @@ var/global/list/rockTurfEdgeCache
|
||||
M = new/turf/simulated/mineral/gibtonite(src)
|
||||
if("Bananium")
|
||||
M = new/turf/simulated/mineral/clown(src)
|
||||
if("Tranquillite")
|
||||
M = new/turf/simulated/mineral/mime(src)
|
||||
if("BScrystal")
|
||||
M = new/turf/simulated/mineral/bscrystal(src)
|
||||
if(M)
|
||||
@@ -156,7 +158,7 @@ var/global/list/rockTurfEdgeCache
|
||||
mineralSpawnChanceList = list(
|
||||
"Uranium" = 35, "Diamond" = 2,
|
||||
"Gold" = 5, "Silver" = 5, "Plasma" = 25,
|
||||
"Iron" = 30, "Clown" = 15, "BScrystal" = 10)
|
||||
"Iron" = 30, "Bananium" = 15, "Tranquillite" = 15, "BScrystal" = 10)
|
||||
|
||||
/turf/simulated/mineral/random/high_chance/New()
|
||||
icon_state = "rock"
|
||||
@@ -239,6 +241,15 @@ var/global/list/rockTurfEdgeCache
|
||||
spread = 0
|
||||
hidden = 0
|
||||
|
||||
/turf/simulated/mineral/mime
|
||||
name = "tranquillite deposit"
|
||||
icon_state = "rock_Mime"
|
||||
mineralType = /obj/item/weapon/ore/tranquillite
|
||||
mineralAmt = 3
|
||||
spreadChance = 0
|
||||
spread = 0
|
||||
hidden = 0
|
||||
|
||||
/turf/simulated/mineral/bscrystal
|
||||
name = "bluespace crystal deposit"
|
||||
icon_state = "rock_BScrystal"
|
||||
|
||||
+28
-10
@@ -14,6 +14,7 @@
|
||||
var/amt_plasma = 0
|
||||
var/amt_uranium = 0
|
||||
var/amt_clown = 0
|
||||
var/amt_mime = 0
|
||||
var/amt_adamantine = 0
|
||||
var/amt_mythril = 0
|
||||
var/newCoins = 0 //how many coins the machine made in it's last load
|
||||
@@ -46,6 +47,9 @@
|
||||
if (istype(O, /obj/item/stack/sheet/mineral/bananium))
|
||||
amt_clown += 100 * O.amount
|
||||
O.loc = null
|
||||
if (istype(O, /obj/item/stack/sheet/mineral/tranquillite))
|
||||
amt_mime += 100 * O.amount
|
||||
O.loc = null
|
||||
return
|
||||
|
||||
|
||||
@@ -78,7 +82,7 @@
|
||||
dat += text("chosen")
|
||||
else
|
||||
dat += text("<A href='?src=\ref[src];choose=plasma'>Choose</A>")
|
||||
dat += text("<br><font color='#008800'><b>uranium inserted: </b>[amt_uranium]</font> ")
|
||||
dat += text("<br><font color='#008800'><b>Uranium inserted: </b>[amt_uranium]</font> ")
|
||||
if (chosen == "uranium")
|
||||
dat += text("chosen")
|
||||
else
|
||||
@@ -89,6 +93,12 @@
|
||||
dat += text("chosen")
|
||||
else
|
||||
dat += text("<A href='?src=\ref[src];choose=clown'>Choose</A>")
|
||||
if(amt_mime > 0)
|
||||
dat += text("<br><font color='#666666'><b>Tranquillite inserted: </b>[amt_mime]</font> ")
|
||||
if (chosen == "mime")
|
||||
dat += text("chosen")
|
||||
else
|
||||
dat += text("<A href='?src=\ref[src];choose=mime'>Choose</A>")
|
||||
dat += text("<br><font color='#888888'><b>Adamantine inserted: </b>[amt_adamantine]</font> ")//I don't even know these color codes, so fuck it.
|
||||
if (chosen == "adamantine")
|
||||
dat += text("chosen")
|
||||
@@ -132,7 +142,7 @@
|
||||
coinsToProduce--
|
||||
newCoins++
|
||||
src.updateUsrDialog()
|
||||
sleep(5);
|
||||
sleep(5)
|
||||
if("gold")
|
||||
while(amt_gold > 0 && coinsToProduce > 0)
|
||||
create_coins(/obj/item/weapon/coin/gold)
|
||||
@@ -140,7 +150,7 @@
|
||||
coinsToProduce--
|
||||
newCoins++
|
||||
src.updateUsrDialog()
|
||||
sleep(5);
|
||||
sleep(5)
|
||||
if("silver")
|
||||
while(amt_silver > 0 && coinsToProduce > 0)
|
||||
create_coins(/obj/item/weapon/coin/silver)
|
||||
@@ -148,7 +158,7 @@
|
||||
coinsToProduce--
|
||||
newCoins++
|
||||
src.updateUsrDialog()
|
||||
sleep(5);
|
||||
sleep(5)
|
||||
if("diamond")
|
||||
while(amt_diamond > 0 && coinsToProduce > 0)
|
||||
create_coins(/obj/item/weapon/coin/diamond)
|
||||
@@ -156,7 +166,7 @@
|
||||
coinsToProduce--
|
||||
newCoins++
|
||||
src.updateUsrDialog()
|
||||
sleep(5);
|
||||
sleep(5)
|
||||
if("plasma")
|
||||
while(amt_plasma > 0 && coinsToProduce > 0)
|
||||
create_coins(/obj/item/weapon/coin/plasma)
|
||||
@@ -164,7 +174,7 @@
|
||||
coinsToProduce--
|
||||
newCoins++
|
||||
src.updateUsrDialog()
|
||||
sleep(5);
|
||||
sleep(5)
|
||||
if("uranium")
|
||||
while(amt_uranium > 0 && coinsToProduce > 0)
|
||||
create_coins(/obj/item/weapon/coin/uranium)
|
||||
@@ -180,7 +190,15 @@
|
||||
coinsToProduce--
|
||||
newCoins++
|
||||
src.updateUsrDialog()
|
||||
sleep(5);
|
||||
sleep(5)
|
||||
if("mime")
|
||||
while(amt_mime > 0 && coinsToProduce > 0)
|
||||
create_coins(/obj/item/weapon/coin/mime)
|
||||
amt_mime -= 20
|
||||
coinsToProduce--
|
||||
newCoins++
|
||||
src.updateUsrDialog()
|
||||
sleep(5)
|
||||
if("adamantine")
|
||||
while(amt_adamantine > 0 && coinsToProduce > 0)
|
||||
create_coins(/obj/item/weapon/coin/adamantine)
|
||||
@@ -188,7 +206,7 @@
|
||||
coinsToProduce--
|
||||
newCoins++
|
||||
src.updateUsrDialog()
|
||||
sleep(5);
|
||||
sleep(5)
|
||||
if("mythril")
|
||||
while(amt_adamantine > 0 && coinsToProduce > 0)
|
||||
create_coins(/obj/item/weapon/coin/mythril)
|
||||
@@ -196,9 +214,9 @@
|
||||
coinsToProduce--
|
||||
newCoins++
|
||||
src.updateUsrDialog()
|
||||
sleep(5);
|
||||
sleep(5)
|
||||
icon_state = "coinpress0"
|
||||
processing = 0;
|
||||
processing = 0
|
||||
coinsToProduce = temp_coins
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -17,25 +17,28 @@
|
||||
var/amt_plasma = 0
|
||||
var/amt_uranium = 0
|
||||
var/amt_clown = 0
|
||||
var/amt_mime = 0
|
||||
var/amt_adamantine = 0
|
||||
|
||||
for (var/obj/item/weapon/coin/C in contents)
|
||||
if (istype(C,/obj/item/weapon/coin/diamond))
|
||||
amt_diamond++;
|
||||
amt_diamond++
|
||||
if (istype(C,/obj/item/weapon/coin/plasma))
|
||||
amt_plasma++;
|
||||
amt_plasma++
|
||||
if (istype(C,/obj/item/weapon/coin/iron))
|
||||
amt_iron++;
|
||||
amt_iron++
|
||||
if (istype(C,/obj/item/weapon/coin/silver))
|
||||
amt_silver++;
|
||||
amt_silver++
|
||||
if (istype(C,/obj/item/weapon/coin/gold))
|
||||
amt_gold++;
|
||||
amt_gold++
|
||||
if (istype(C,/obj/item/weapon/coin/uranium))
|
||||
amt_uranium++;
|
||||
amt_uranium++
|
||||
if (istype(C,/obj/item/weapon/coin/clown))
|
||||
amt_clown++;
|
||||
amt_clown++
|
||||
if (istype(C,/obj/item/weapon/coin/mime))
|
||||
amt_mime++
|
||||
if (istype(C,/obj/item/weapon/coin/adamantine))
|
||||
amt_adamantine++;
|
||||
amt_adamantine++
|
||||
|
||||
var/dat = text("<b>The contents of the moneybag reveal...</b><br>")
|
||||
if (amt_gold)
|
||||
@@ -52,6 +55,8 @@
|
||||
dat += text("Uranium coins: [amt_uranium] <A href='?src=\ref[src];remove=uranium'>Remove one</A><br>")
|
||||
if (amt_clown)
|
||||
dat += text("Bananium coins: [amt_clown] <A href='?src=\ref[src];remove=clown'>Remove one</A><br>")
|
||||
if (amt_mime)
|
||||
dat += text("Tranquillite coins: [amt_mime] <A href='?src=\ref[src];remove=mime'>Remove one</A><br>")
|
||||
if (amt_adamantine)
|
||||
dat += text("Adamantine coins: [amt_adamantine] <A href='?src=\ref[src];remove=adamantine'>Remove one</A><br>")
|
||||
user << browse("[dat]", "window=moneybag")
|
||||
@@ -93,6 +98,8 @@
|
||||
COIN = locate(/obj/item/weapon/coin/uranium,src.contents)
|
||||
if("clown")
|
||||
COIN = locate(/obj/item/weapon/coin/clown,src.contents)
|
||||
if("mime")
|
||||
COIN = locate(/obj/item/weapon/coin/mime,src.contents)
|
||||
if("adamantine")
|
||||
COIN = locate(/obj/item/weapon/coin/adamantine,src.contents)
|
||||
if(!COIN)
|
||||
|
||||
@@ -130,6 +130,14 @@
|
||||
refined_type = /obj/item/stack/sheet/mineral/bananium
|
||||
materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT)
|
||||
|
||||
/obj/item/weapon/ore/tranquillite
|
||||
name = "tranquillite ore"
|
||||
icon_state = "Mime ore"
|
||||
origin_tech = "materials=4"
|
||||
points = 60
|
||||
refined_type = /obj/item/stack/sheet/mineral/tranquillite
|
||||
materials = list(MAT_TRANQUILLITE=MINERAL_MATERIAL_AMOUNT)
|
||||
|
||||
/obj/item/weapon/ore/slag
|
||||
name = "slag"
|
||||
desc = "Completely useless"
|
||||
|
||||
@@ -31,25 +31,28 @@
|
||||
var/amt_plasma = 0
|
||||
var/amt_uranium = 0
|
||||
var/amt_clown = 0
|
||||
var/amt_mime = 0
|
||||
var/amt_bluespace = 0
|
||||
|
||||
for (var/obj/item/weapon/ore/C in contents)
|
||||
if (istype(C,/obj/item/weapon/ore/diamond))
|
||||
amt_diamond++;
|
||||
amt_diamond++
|
||||
if (istype(C,/obj/item/weapon/ore/glass))
|
||||
amt_glass++;
|
||||
amt_glass++
|
||||
if (istype(C,/obj/item/weapon/ore/plasma))
|
||||
amt_plasma++;
|
||||
amt_plasma++
|
||||
if (istype(C,/obj/item/weapon/ore/iron))
|
||||
amt_iron++;
|
||||
amt_iron++
|
||||
if (istype(C,/obj/item/weapon/ore/silver))
|
||||
amt_silver++;
|
||||
amt_silver++
|
||||
if (istype(C,/obj/item/weapon/ore/gold))
|
||||
amt_gold++;
|
||||
amt_gold++
|
||||
if (istype(C,/obj/item/weapon/ore/uranium))
|
||||
amt_uranium++;
|
||||
amt_uranium++
|
||||
if (istype(C,/obj/item/weapon/ore/bananium))
|
||||
amt_clown++;
|
||||
amt_clown++
|
||||
if (istype(C,/obj/item/weapon/ore/tranquillite))
|
||||
amt_mime++
|
||||
if (istype(C,/obj/item/weapon/ore/bluespace_crystal))
|
||||
amt_bluespace++
|
||||
|
||||
@@ -70,6 +73,8 @@
|
||||
dat += text("Uranium ore: [amt_uranium]<br>")
|
||||
if (amt_clown)
|
||||
dat += text("Bananium ore: [amt_clown]<br>")
|
||||
if (amt_mime)
|
||||
dat += text("Tranquillite ore: [amt_mime]<br>")
|
||||
if (amt_bluespace)
|
||||
dat += text("Bluespace crystals: [amt_bluespace]<br>")
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
icon = null
|
||||
invisibility = 101
|
||||
|
||||
playsound(src.loc, 'sound/effects/gib.ogg', 100, 1, 10)
|
||||
playsound(src.loc, 'sound/goonstation/effects/gib.ogg', 50, 1)
|
||||
|
||||
animation = new(loc)
|
||||
animation.icon_state = "blank"
|
||||
|
||||
@@ -77,14 +77,12 @@
|
||||
name = "diona nymph"
|
||||
desc = "It's a tiny plant critter."
|
||||
icon_state = "nymph"
|
||||
origin_tech = "magnets=3;biotech=5"
|
||||
|
||||
/obj/item/weapon/holder/drone
|
||||
|
||||
name = "maintenance drone"
|
||||
desc = "It's a small maintenance robot."
|
||||
icon_state = "drone"
|
||||
origin_tech = "magnets=3;engineering=5"
|
||||
|
||||
/obj/item/weapon/holder/pai
|
||||
name = "pAI"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure
|
||||
|
||||
if(Toxins_pp) // Detect toxins in air
|
||||
adjustToxLoss(breath.toxins*250)
|
||||
adjustPlasma(breath.toxins*250)
|
||||
toxins_alert = max(toxins_alert, 1)
|
||||
|
||||
toxins_used = breath.toxins
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
// This is to replace the previous datum/disease/alien_embryo for slightly improved handling and maintainability
|
||||
// It functions almost identically (see code/datums/diseases/alien_embryo.dm)
|
||||
var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
|
||||
|
||||
/obj/item/organ/internal/body_egg/alien_embryo
|
||||
name = "alien embryo"
|
||||
desc = "All slimy and yuck."
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
icon_state = "larva0_dead"
|
||||
var/mob/living/affected_mob
|
||||
var/stage = 0
|
||||
var/growing = 0
|
||||
|
||||
/obj/item/organ/internal/body_egg/alien_embryo/on_find(mob/living/finder)
|
||||
..()
|
||||
@@ -53,63 +52,55 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds
|
||||
owner.adjustToxLoss(10)
|
||||
|
||||
/obj/item/organ/internal/body_egg/alien_embryo/egg_process()
|
||||
if(!affected_mob) return
|
||||
if(loc != affected_mob)
|
||||
affected_mob.status_flags &= ~(XENO_HOST)
|
||||
if(istype(affected_mob,/mob/living/carbon))
|
||||
var/mob/living/carbon/H = affected_mob
|
||||
H.med_hud_set_status()
|
||||
processing_objects.Remove(src)
|
||||
spawn(0)
|
||||
RemoveInfectionImages(affected_mob)
|
||||
affected_mob = null
|
||||
return
|
||||
|
||||
if(stage < 5 && prob(3))
|
||||
stage++
|
||||
spawn(0)
|
||||
RefreshInfectionImage()
|
||||
|
||||
|
||||
if(stage == 5 && prob(50))
|
||||
AttemptGrow()
|
||||
|
||||
/obj/item/organ/internal/body_egg/alien_embryo/proc/AttemptGrow(var/gib_on_success = 1)
|
||||
var/list/candidates = get_candidates(ROLE_ALIEN,ALIEN_AFK_BRACKET,1)
|
||||
var/client/C = null
|
||||
|
||||
// To stop clientless larva, we will check that our host has a client
|
||||
// if we find no ghosts to become the alien. If the host has a client
|
||||
// he will become the alien but if he doesn't then we will set the stage
|
||||
// to 2, so we don't do a process heavy check everytime.
|
||||
|
||||
if(candidates.len)
|
||||
C = pick(candidates)
|
||||
else if(affected_mob.client)
|
||||
C = affected_mob.client
|
||||
else
|
||||
stage = 4 // Let's try again later.
|
||||
if(growing)
|
||||
return
|
||||
growing = 1
|
||||
|
||||
if(affected_mob.lying)
|
||||
affected_mob.overlays += image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "burst_lie")
|
||||
else
|
||||
affected_mob.overlays += image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "burst_stand")
|
||||
spawn(6)
|
||||
var/mob/living/carbon/alien/larva/new_xeno = new(affected_mob.loc)
|
||||
new_xeno.key = C.key
|
||||
if(ticker && ticker.mode)
|
||||
ticker.mode.xenos += new_xeno.mind
|
||||
new_xeno.mind.name = new_xeno.name
|
||||
new_xeno.mind.assigned_role = "MODE"
|
||||
new_xeno.mind.special_role = "Alien"
|
||||
new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100) //To get the player's attention
|
||||
if(gib_on_success)
|
||||
affected_mob.gib()
|
||||
if(istype(new_xeno.loc,/mob/living/carbon))
|
||||
var/mob/living/carbon/digester = new_xeno.loc
|
||||
digester.stomach_contents += new_xeno
|
||||
qdel(src)
|
||||
spawn()
|
||||
var/list/candidates = pollCandidates("Do you want to play as an alien?", ROLE_ALIEN, 0)
|
||||
var/mob/C = null
|
||||
|
||||
// To stop clientless larva, we will check that our host has a client
|
||||
// if we find no ghosts to become the alien. If the host has a client
|
||||
// he will become the alien but if he doesn't then we will set the stage
|
||||
// to 2, so we don't do a process heavy check everytime.
|
||||
|
||||
if(candidates.len)
|
||||
C = pick(candidates)
|
||||
else if(owner.client)
|
||||
C = owner
|
||||
else
|
||||
stage = 4 // Let's try again later.
|
||||
return
|
||||
|
||||
if(owner.lying)
|
||||
owner.overlays += image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_lie")
|
||||
else
|
||||
owner.overlays += image('icons/mob/alien.dmi', loc = owner, icon_state = "burst_stand")
|
||||
spawn(6)
|
||||
var/mob/living/carbon/alien/larva/new_xeno = new(owner.loc)
|
||||
new_xeno.key = C.key
|
||||
if(ticker && ticker.mode)
|
||||
ticker.mode.xenos += new_xeno.mind
|
||||
new_xeno.mind.name = new_xeno.name
|
||||
new_xeno.mind.assigned_role = "MODE"
|
||||
new_xeno.mind.special_role = "Alien"
|
||||
new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100) //To get the player's attention
|
||||
if(gib_on_success)
|
||||
owner.gib()
|
||||
if(istype(new_xeno.loc,/mob/living/carbon))
|
||||
var/mob/living/carbon/digester = new_xeno.loc
|
||||
digester.stomach_contents += new_xeno
|
||||
qdel(src)
|
||||
|
||||
/*----------------------------------------
|
||||
Proc: RefreshInfectionImage()
|
||||
@@ -126,7 +117,7 @@ Des: Adds the infection image to all aliens for this embryo
|
||||
/obj/item/organ/internal/body_egg/alien_embryo/AddInfectionImages()
|
||||
for(var/mob/living/carbon/alien/alien in player_list)
|
||||
if(alien.client)
|
||||
var/I = image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "infected[stage]")
|
||||
var/I = image('icons/mob/alien.dmi', loc = owner, icon_state = "infected[stage]")
|
||||
alien.client.images += I
|
||||
|
||||
/*----------------------------------------
|
||||
@@ -137,5 +128,5 @@ Des: Removes all images from the mob infected by this embryo
|
||||
for(var/mob/living/carbon/alien/alien in player_list)
|
||||
if(alien.client)
|
||||
for(var/image/I in alien.client.images)
|
||||
if(dd_hasprefix_case(I.icon_state, "infected") && I.loc == affected_mob)
|
||||
if(dd_hasprefix_case(I.icon_state, "infected") && I.loc == owner)
|
||||
qdel(I)
|
||||
@@ -67,8 +67,8 @@
|
||||
|
||||
if(borer)
|
||||
borer.detatch() //Should remove borer if the brain is removed - RR
|
||||
|
||||
B.transfer_identity(user)
|
||||
if(owner.mind)//don't transfer if the owner does not have a mind.
|
||||
B.transfer_identity(user)
|
||||
|
||||
if(istype(owner,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
@@ -104,6 +104,13 @@
|
||||
desc = "A complex, organic knot of jelly and crystalline particles."
|
||||
icon = 'icons/mob/slimes.dmi'
|
||||
icon_state = "green slime extract"
|
||||
// parent_organ = "chest" Hello I am from the ministry of rubber forehead aliens how are you
|
||||
|
||||
/obj/item/organ/brain/slime/take_damage(var/amount, var/silent = 1)
|
||||
//Slimes are 150% more vulnerable to brain damage
|
||||
damage = between(0, src.damage + (1.5*amount), max_damage) //Since they take the damage twice, this is +150%
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/organ/internal/brain/golem
|
||||
name = "Runic mind"
|
||||
|
||||
@@ -98,7 +98,6 @@
|
||||
src.brainmob << "<b>You are a positronic brain, brought into existence on [station_name()].</b>"
|
||||
src.brainmob << "<b>As a synthetic intelligence, you answer to all crewmembers, as well as the AI.</b>"
|
||||
src.brainmob << "<b>Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm.</b>"
|
||||
src.brainmob << "<b>Use say :b to speak to other artificial intelligences.</b>"
|
||||
src.brainmob.mind.assigned_role = "Positronic Brain"
|
||||
|
||||
var/turf/T = get_turf_or_move(src.loc)
|
||||
@@ -200,4 +199,4 @@
|
||||
|
||||
/obj/item/device/mmi/posibrain/ipc
|
||||
desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. The speaker switch is set to 'off'."
|
||||
silenced = 1
|
||||
silenced = 1
|
||||
|
||||
@@ -732,4 +732,80 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/proc/can_eat(flags = 255)
|
||||
return 1
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/proc/eat(var/obj/item/weapon/reagent_containers/food/toEat, mob/user)
|
||||
if(!istype(toEat))
|
||||
return 0
|
||||
var/fullness = 0
|
||||
if(istype(toEat, /obj/item/weapon/reagent_containers/food/snacks))
|
||||
fullness = nutrition + (reagents.get_reagent_amount("nutriment") * 20) + (reagents.get_reagent_amount("protein") * 25) + (reagents.get_reagent_amount("plantmatter") * 25)
|
||||
if(user == src)
|
||||
if(istype(toEat, /obj/item/weapon/reagent_containers/food/drinks))
|
||||
if(!selfDrink(toEat))
|
||||
return 0
|
||||
else
|
||||
if(!selfFeed(toEat, fullness))
|
||||
return 0
|
||||
else
|
||||
if(!forceFed(toEat, user, fullness))
|
||||
return 0
|
||||
consume(toEat)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/proc/selfFeed(var/obj/item/weapon/reagent_containers/food/toEat, fullness)
|
||||
if(istype(toEat, /obj/item/weapon/reagent_containers/food/pill))
|
||||
src << "<span class='notify'>You [toEat.apply_method] [toEat].</span>"
|
||||
else
|
||||
if (fullness <= 50)
|
||||
src << "<span class='warning'>You hungrily chew out a piece of [toEat] and gobble it!</span>"
|
||||
else if (fullness > 50 && fullness <= 150)
|
||||
src << "<span class='notice'>You hungrily begin to eat [toEat].</span>"
|
||||
else if (fullness > 150 && fullness <= 350)
|
||||
src << "<span class='notice'>You take a bite of [toEat].</span>"
|
||||
else if (fullness > 350 && fullness <= 550)
|
||||
src << "<span class='notice'>You unwillingly chew a bit of [toEat].</span>"
|
||||
else if (fullness > (550 * (1 + overeatduration / 2000))) // The more you eat - the more you can eat
|
||||
src << "<span class='warning'>You cannot force any more of [toEat] to go down your throat.</span>"
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/proc/selfDrink(var/obj/item/weapon/reagent_containers/food/drinks/toDrink, mob/user)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/proc/forceFed(var/obj/item/weapon/reagent_containers/food/toEat, mob/user, fullness)
|
||||
if (fullness <= (550 * (1 + overeatduration / 1000)))
|
||||
visible_message("<span class='warning'>[user] attempts to force [src] to [toEat.apply_method] [toEat].</span>")
|
||||
else
|
||||
visible_message("<span class='warning'>[user] cannot force anymore of [toEat] down [src]'s throat.</span>")
|
||||
return 0
|
||||
if(!do_mob(user, src))
|
||||
return 0
|
||||
forceFedAttackLog(toEat, user)
|
||||
visible_message("<span class='warning'>[user] forces [src] to [toEat.apply_method] [toEat].</span>")
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/proc/forceFedAttackLog(var/obj/item/weapon/reagent_containers/food/toEat, mob/user)
|
||||
attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [toEat.name] by [user.name] ([user.ckey]) Reagents: [toEat.reagentlist(toEat)]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [toEat.name] to [name] ([ckey]) Reagents: [toEat.reagentlist(toEat)]</font>")
|
||||
log_attack("[user.name] ([user.ckey]) fed [name] ([ckey]) with [toEat.name] Reagents: [toEat.reagentlist(toEat)] (INTENT: [uppertext(user.a_intent)])")
|
||||
if(!iscarbon(user))
|
||||
LAssailant = null
|
||||
else
|
||||
LAssailant = user
|
||||
|
||||
|
||||
/*TO DO - If/when stomach organs are introduced, override this at the human level sending the item to the stomach
|
||||
so that different stomachs can handle things in different ways VB*/
|
||||
/mob/living/carbon/proc/consume(var/obj/item/weapon/reagent_containers/food/toEat)
|
||||
if(!toEat.reagents)
|
||||
return
|
||||
if(toEat.consume_sound)
|
||||
playsound(loc, toEat.consume_sound, rand(10,50), 1)
|
||||
if(toEat.reagents.total_volume)
|
||||
toEat.reagents.reaction(src, toEat.apply_type)
|
||||
spawn(0)
|
||||
if(toEat.reagents.total_volume > toEat.bitesize)
|
||||
toEat.reagents.trans_to(src, toEat.bitesize*toEat.transfer_efficiency)
|
||||
else
|
||||
toEat.reagents.trans_to(src, toEat.reagents.total_volume*toEat.transfer_efficiency)
|
||||
@@ -11,7 +11,7 @@
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
playsound(src.loc, 'sound/effects/gib.ogg', 100, 1, 10)
|
||||
playsound(src.loc, 'sound/goonstation/effects/gib.ogg', 50, 1)
|
||||
|
||||
for(var/obj/item/organ/internal/I in internal_organs)
|
||||
if(istype(loc,/turf))
|
||||
|
||||
@@ -782,8 +782,6 @@
|
||||
|
||||
var/turf/location = get_turf(src)
|
||||
var/aoe_range=2 // Default
|
||||
if(SUPER_FART in mutations)
|
||||
aoe_range+=3 //Was 5
|
||||
|
||||
// Process toxic farts first.
|
||||
if(TOXIC_FARTS in mutations)
|
||||
@@ -803,26 +801,6 @@
|
||||
continue
|
||||
M.reagents.add_reagent("space_drugs",rand(1,10))
|
||||
|
||||
if(SUPER_FART in mutations)
|
||||
visible_message("\red <b>[name]</b> hunches down and grits their teeth!")
|
||||
if(do_after(usr,30, target = src))
|
||||
visible_message("\red <b>[name]</b> unleashes a [pick("tremendous","gigantic","colossal")] fart!","You hear a [pick("tremendous","gigantic","colossal")] fart.")
|
||||
//playsound(L.loc, 'superfart.ogg', 50, 0)
|
||||
for(var/mob/living/V in range(location,aoe_range))
|
||||
shake_camera(V,10,5)
|
||||
if (V == src)
|
||||
continue
|
||||
if(!airborne_can_reach(get_turf(src), get_turf(V)))
|
||||
continue
|
||||
V << "\red You are sent flying!"
|
||||
V.Weaken(5) // why the hell was this set to 12 christ
|
||||
step_away(V,location,15)
|
||||
step_away(V,location,15)
|
||||
step_away(V,location,15)
|
||||
else
|
||||
usr << "\red You were interrupted and couldn't fart! Rude!"
|
||||
|
||||
|
||||
if ("help")
|
||||
var/emotelist = "aflap(s), airguitar, blink(s), blink(s)_r, blush(es), bow(s)-(none)/mob, burp(s), choke(s), chuckle(s), clap(s), collapse(s), cough(s),cry, cries, custom, dap(s)(none)/mob," \
|
||||
+ " deathgasp(s), drool(s), eyebrow,fart(s), faint(s), flap(s), flip(s), frown(s), gasp(s), giggle(s), glare(s)-(none)/mob, grin(s), groan(s), grumble(s), handshake-mob, hug(s)-(none)/mob," \
|
||||
|
||||
@@ -308,6 +308,9 @@
|
||||
var/b_loss = null
|
||||
var/f_loss = null
|
||||
|
||||
if(status_flags & GODMODE)
|
||||
return 0
|
||||
|
||||
switch(severity)
|
||||
if(1)
|
||||
b_loss += 500
|
||||
@@ -1490,6 +1493,8 @@
|
||||
if(species.default_language)
|
||||
remove_language(species.default_language)
|
||||
|
||||
species.handle_pre_change(src)
|
||||
|
||||
species = all_species[new_species]
|
||||
|
||||
if(oldspecies)
|
||||
@@ -1882,3 +1887,27 @@
|
||||
|
||||
/mob/living/carbon/human/can_eat(flags = 255)
|
||||
return species && (species.dietflags & flags)
|
||||
|
||||
/mob/living/carbon/human/selfFeed(var/obj/item/weapon/reagent_containers/food/toEat, fullness)
|
||||
if(!check_has_mouth())
|
||||
src << "Where do you intend to put \the [toEat]? You don't have a mouth!"
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/forceFed(var/obj/item/weapon/reagent_containers/food/toEat, mob/user, fullness)
|
||||
if(!check_has_mouth())
|
||||
if(!((istype(toEat, /obj/item/weapon/reagent_containers/food/drinks) && (get_species() == "Machine"))))
|
||||
user << "Where do you intend to put \the [toEat]? \The [src] doesn't have a mouth!"
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/selfDrink(var/obj/item/weapon/reagent_containers/food/drinks/toDrink)
|
||||
if(!check_has_mouth())
|
||||
if(!get_species() == "Machine")
|
||||
src << "Where do you intend to put \the [src]? You don't have a mouth!"
|
||||
return 0
|
||||
else
|
||||
src << "<span class='notice'>You pour a bit of liquid from [toDrink] into your connection port.</span>"
|
||||
else
|
||||
src << "<span class='notice'>You swallow a gulp of [toDrink].</span>"
|
||||
return 1
|
||||
|
||||
@@ -70,6 +70,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
handle_pain()
|
||||
handle_heartbeat()
|
||||
handle_heartattack()
|
||||
species.handle_life(src)
|
||||
|
||||
if(!client)
|
||||
species.handle_npc(src)
|
||||
@@ -457,19 +458,20 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
//Body temperature is too hot.
|
||||
fire_alert = max(fire_alert, 1)
|
||||
if(status_flags & GODMODE) return 1 //godmode
|
||||
var/mult = species.hot_env_multiplier
|
||||
|
||||
if(bodytemperature >= species.heat_level_1 && bodytemperature <= species.heat_level_2)
|
||||
take_overall_damage(burn=HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature")
|
||||
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature")
|
||||
fire_alert = max(fire_alert, 2)
|
||||
if(bodytemperature > species.heat_level_2 && bodytemperature <= species.heat_level_3)
|
||||
take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
|
||||
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
|
||||
fire_alert = max(fire_alert, 2)
|
||||
if(bodytemperature > species.heat_level_3 && bodytemperature < INFINITY)
|
||||
if(on_fire)
|
||||
take_overall_damage(burn=HEAT_DAMAGE_LEVEL_3, used_weapon = "Fire")
|
||||
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_3, used_weapon = "Fire")
|
||||
fire_alert = max(fire_alert, 2)
|
||||
else
|
||||
take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
|
||||
take_overall_damage(burn=mult*HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature")
|
||||
fire_alert = max(fire_alert, 2)
|
||||
|
||||
else if(bodytemperature < species.cold_level_1)
|
||||
@@ -479,14 +481,15 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
|
||||
if(stat == DEAD) return 1 //ZomgPonies -- No need for cold burn damage if dead
|
||||
|
||||
if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell))
|
||||
var/mult = species.cold_env_multiplier
|
||||
if(bodytemperature >= species.cold_level_2 && bodytemperature <= species.cold_level_1)
|
||||
take_overall_damage(burn=COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature")
|
||||
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_1, used_weapon = "Low Body Temperature")
|
||||
fire_alert = max(fire_alert, 1)
|
||||
if(bodytemperature >= species.cold_level_3 && bodytemperature < species.cold_level_2)
|
||||
take_overall_damage(burn=COLD_DAMAGE_LEVEL_2, used_weapon = "Low Body Temperature")
|
||||
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_2, used_weapon = "Low Body Temperature")
|
||||
fire_alert = max(fire_alert, 1)
|
||||
if(bodytemperature > -INFINITY && bodytemperature < species.cold_level_3)
|
||||
take_overall_damage(burn=COLD_DAMAGE_LEVEL_3, used_weapon = "Low Body Temperature")
|
||||
take_overall_damage(burn=mult*COLD_DAMAGE_LEVEL_3, used_weapon = "Low Body Temperature")
|
||||
fire_alert = max(fire_alert, 1)
|
||||
|
||||
// Account for massive pressure differences. Done by Polymorph
|
||||
|
||||
@@ -32,10 +32,12 @@
|
||||
var/cold_level_1 = 260 // Cold damage level 1 below this point.
|
||||
var/cold_level_2 = 200 // Cold damage level 2 below this point.
|
||||
var/cold_level_3 = 120 // Cold damage level 3 below this point.
|
||||
var/cold_env_multiplier = 1 // Damage multiplier for being in a cold environment
|
||||
|
||||
var/heat_level_1 = 360 // Heat damage level 1 above this point.
|
||||
var/heat_level_2 = 400 // Heat damage level 2 above this point.
|
||||
var/heat_level_3 = 460 // Heat damage level 3 above this point; used for body temperature
|
||||
var/hot_env_multiplier = 1 // Damage multiplier for being in a hot environment
|
||||
var/heat_level_3_breathe = 1000 // Heat damage level 3 above this point; used for breathed air temperature
|
||||
|
||||
var/body_temperature = 310.15 //non-IS_SYNTHETIC species will try to stabilize at this temperature. (also affects temperature processing)
|
||||
@@ -128,6 +130,7 @@
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right)
|
||||
)
|
||||
var/cyborg_type = "Cyborg"
|
||||
var/list/proc/species_abilities = list()
|
||||
|
||||
/datum/species/New()
|
||||
//If the species has eyes, they are the default vision organ
|
||||
@@ -294,33 +297,60 @@
|
||||
|
||||
switch(breath.temperature)
|
||||
if(-INFINITY to cold_level_3)
|
||||
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold")
|
||||
H.apply_damage(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold")
|
||||
H.fire_alert = max(H.fire_alert, 1)
|
||||
|
||||
if(cold_level_3 to cold_level_2)
|
||||
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold")
|
||||
H.apply_damage(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold")
|
||||
H.fire_alert = max(H.fire_alert, 1)
|
||||
|
||||
if(cold_level_2 to cold_level_1)
|
||||
H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold")
|
||||
H.apply_damage(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold")
|
||||
H.fire_alert = max(H.fire_alert, 1)
|
||||
|
||||
if(heat_level_1 to heat_level_2)
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat")
|
||||
H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat")
|
||||
H.fire_alert = max(H.fire_alert, 2)
|
||||
|
||||
if(heat_level_2 to heat_level_3_breathe)
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat")
|
||||
H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat")
|
||||
H.fire_alert = max(H.fire_alert, 2)
|
||||
|
||||
if(heat_level_3_breathe to INFINITY)
|
||||
H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat")
|
||||
H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat")
|
||||
H.fire_alert = max(H.fire_alert, 2)
|
||||
return
|
||||
|
||||
/datum/species/proc/handle_post_spawn(var/mob/living/carbon/C) //Handles anything not already covered by basic species assignment.
|
||||
grant_abilities(C)
|
||||
return
|
||||
|
||||
/datum/species/proc/grant_abilities(var/mob/living/carbon/human/H)
|
||||
for(var/proc/ability in species_abilities)
|
||||
H.verbs += ability
|
||||
return
|
||||
|
||||
/datum/species/proc/handle_pre_change(var/mob/living/carbon/human/H)
|
||||
remove_abilities(H)
|
||||
return
|
||||
|
||||
/datum/species/proc/remove_abilities(var/mob/living/carbon/human/H)
|
||||
for (var/proc/ability in species_abilities)
|
||||
H.verbs -= ability
|
||||
return
|
||||
|
||||
// Do species-specific reagent handling here
|
||||
// Return 1 if it should do normal processing too
|
||||
// Return 0 if it shouldn't deplete and do its normal effect
|
||||
// Other return values will cause weird badness
|
||||
/datum/species/proc/handle_reagents(var/mob/living/carbon/human/H, var/datum/reagent/R)
|
||||
return 1
|
||||
|
||||
// For special snowflake species effects
|
||||
// (Slime People changing color based on the reagents they consume)
|
||||
/datum/species/proc/handle_life(var/mob/living/carbon/human/H)
|
||||
return 1
|
||||
|
||||
/datum/species/proc/handle_dna(var/mob/living/carbon/C, var/remove) //Handles DNA mutations, as that doesn't work at init. Make sure you call genemutcheck on any blocks changed here
|
||||
return
|
||||
|
||||
@@ -613,10 +643,3 @@ It'll return null if the organ doesn't correspond, so include null checks when u
|
||||
if(!(organ_slot in has_organ))
|
||||
return null
|
||||
return has_organ[organ_slot]
|
||||
|
||||
// Do species-specific reagent handling here
|
||||
// Return 1 if it should do normal processing too
|
||||
// Return 0 if it shouldn't deplete and do its normal effect
|
||||
// Other return values will cause weird badness
|
||||
/datum/species/proc/handle_reagents(var/mob/living/carbon/human/H, var/datum/reagent/R)
|
||||
return 1
|
||||
@@ -367,6 +367,12 @@
|
||||
path = /mob/living/carbon/human/slime
|
||||
unarmed_type = /datum/unarmed_attack/punch
|
||||
|
||||
// More sensitive to the cold
|
||||
cold_level_1 = 280
|
||||
cold_level_2 = 240
|
||||
cold_level_3 = 200
|
||||
cold_env_multiplier = 3
|
||||
|
||||
flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN
|
||||
clothing_flags = HAS_SOCKS
|
||||
bodyflags = HAS_SKIN_COLOR | NO_EYES
|
||||
@@ -381,8 +387,158 @@
|
||||
|
||||
suicide_messages = list(
|
||||
"is melting into a puddle!",
|
||||
"is turning a dull, brown color and melting into a puddle!",
|
||||
"is ripping out their own core!")
|
||||
"is ripping out their own core!",
|
||||
"is turning a dull, brown color and melting into a puddle!")
|
||||
|
||||
var/list/mob/living/carbon/human/recolor_list = list()
|
||||
|
||||
species_abilities = list(
|
||||
/mob/living/carbon/human/verb/toggle_recolor_verb,
|
||||
/mob/living/carbon/human/proc/regrow_limbs
|
||||
)
|
||||
|
||||
/datum/species/slime/handle_life(var/mob/living/carbon/human/H)
|
||||
//This is allegedly for code "style". Like a plaid sweater?
|
||||
#define SLIMEPERSON_COLOR_SHIFT_TRIGGER 0.1
|
||||
#define SLIMEPERSON_ICON_UPDATE_PERIOD 200 // 20 seconds
|
||||
#define SLIMEPERSON_BLOOD_SCALING_FACTOR 5 // Used to adjust how much of an effect the blood has on the rate of color change. Higher is slower.
|
||||
// Slowly shifting to the color of the reagents
|
||||
if((H in recolor_list) && H.reagents.total_volume > SLIMEPERSON_COLOR_SHIFT_TRIGGER)
|
||||
var/blood_amount = H.vessel.total_volume
|
||||
var/r_color = mix_color_from_reagents(H.reagents.reagent_list)
|
||||
var/new_body_color = BlendRGB(r_color, rgb(H.r_skin, H.g_skin, H.b_skin), (blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)/((blood_amount*SLIMEPERSON_BLOOD_SCALING_FACTOR)+(H.reagents.total_volume)))
|
||||
var/list/new_color_list = ReadRGB(new_body_color)
|
||||
H.r_skin = new_color_list[1]
|
||||
H.g_skin = new_color_list[2]
|
||||
H.b_skin = new_color_list[3]
|
||||
if(world.time % SLIMEPERSON_ICON_UPDATE_PERIOD > SLIMEPERSON_ICON_UPDATE_PERIOD - 20) // The 20 is because this gets called every 2 seconds, from the mob controller
|
||||
for(var/organname in H.organs_by_name)
|
||||
var/obj/item/organ/external/E = H.organs_by_name[organname]
|
||||
if(istype(E) && E.dna.species == "Slime People")
|
||||
E.sync_colour_to_human(H)
|
||||
H.update_hair(0)
|
||||
H.update_body()
|
||||
return ..()
|
||||
|
||||
#undef SLIMEPERSON_COLOR_SHIFT_TRIGGER
|
||||
#undef SLIMEPERSON_ICON_UPDATE_PERIOD
|
||||
#undef SLIMEPERSON_BLOOD_SCALING_FACTOR
|
||||
|
||||
/mob/living/carbon/human/proc/toggle_recolor(var/silent = 0)
|
||||
var/datum/species/slime/S = all_species[get_species()]
|
||||
if(!istype(S))
|
||||
if(!silent)
|
||||
src << "You're not a slime person!"
|
||||
return
|
||||
|
||||
if(src in S.recolor_list)
|
||||
S.recolor_list -= src
|
||||
if(!silent)
|
||||
src << "You adjust your internal chemistry to filter out pigments from things you consume."
|
||||
else
|
||||
S.recolor_list += src
|
||||
if(!silent)
|
||||
src << "You adjust your internal chemistry to permit pigments in chemicals you consume to tint you."
|
||||
|
||||
/mob/living/carbon/human/verb/toggle_recolor_verb()
|
||||
set category = "IC"
|
||||
set name = "Toggle Reagent Recoloring"
|
||||
set desc = "While active, you'll slowly adjust your body's color to that of the reagents inside of you, moderated by how much blood you have."
|
||||
|
||||
toggle_recolor()
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/regrow_limbs()
|
||||
set category = "IC"
|
||||
set name = "Regrow Limbs"
|
||||
set desc = "Regrow one of your missing limbs at the cost of a large amount of hunger"
|
||||
|
||||
#define SLIMEPERSON_HUNGERCOST 125
|
||||
#define SLIMEPERSON_MINHUNGER 300
|
||||
#define SLIMEPERSON_REGROWTHDELAY 450 // 45 seconds
|
||||
|
||||
if(stat || paralysis || stunned)
|
||||
src << "<span class='warning'>You cannot regenerate missing limbs in your current state.</span>"
|
||||
return
|
||||
|
||||
if(nutrition < SLIMEPERSON_MINHUNGER)
|
||||
src << "<span class='warning'>You're too hungry to regenerate a limb!</span>"
|
||||
return
|
||||
|
||||
var/list/missing_limbs = list()
|
||||
for(var/l in organs_by_name)
|
||||
var/obj/item/organ/external/E = organs_by_name[l]
|
||||
if(!istype(E) || istype(E, /obj/item/organ/external/stump))
|
||||
var/list/limblist = species.has_limbs[l]
|
||||
var/obj/item/organ/external/limb = limblist["path"]
|
||||
var/parent_organ = initial(limb.parent_organ)
|
||||
var/obj/item/organ/external/parentLimb = organs_by_name[parent_organ]
|
||||
if(!istype(parentLimb) || parentLimb.is_stump())
|
||||
continue
|
||||
missing_limbs[initial(limb.name)] = l
|
||||
|
||||
if(!missing_limbs.len)
|
||||
src << "<span class='warning'>You're not missing any limbs!</span>"
|
||||
return
|
||||
|
||||
var/limb_select = input(src, "Choose a limb to regrow", "Limb Regrowth") as null|anything in missing_limbs
|
||||
var/chosen_limb = missing_limbs[limb_select]
|
||||
|
||||
visible_message("<span class='notice'>[src] begins to hold still and concentrate on their missing [limb_select]...</span>", "<span class='notice'>You begin to focus on regrowing your missing [limb_select]... (This will take [round(SLIMEPERSON_REGROWTHDELAY/10)] seconds, and you must hold still.)</span>")
|
||||
if(do_after(src, SLIMEPERSON_REGROWTHDELAY, needhand=0, target = src))
|
||||
if(stat || paralysis || stunned)
|
||||
src << "<span class='warning'>You cannot regenerate missing limbs in your current state.</span>"
|
||||
return
|
||||
|
||||
if(nutrition < SLIMEPERSON_MINHUNGER)
|
||||
src << "<span class='warning'>You're too hungry to regenerate a limb!</span>"
|
||||
return
|
||||
|
||||
var/obj/item/organ/external/O = organs_by_name[chosen_limb]
|
||||
|
||||
var/stored_brute = 0
|
||||
var/stored_burn = 0
|
||||
if(istype(O))
|
||||
if(!O.is_stump())
|
||||
src << "<span class='warning'>Your limb has already been replaced in some way!</span>"
|
||||
return
|
||||
else
|
||||
src << "<span class='warning'>You distribute the damaged tissue around your body, out of the way of your new pseudopod!</span>"
|
||||
var/obj/item/organ/external/doomedStump = O
|
||||
stored_brute = doomedStump.brute_dam
|
||||
stored_burn = doomedStump.burn_dam
|
||||
qdel(O)
|
||||
|
||||
var/limb_list = species.has_limbs[chosen_limb]
|
||||
var/obj/item/organ/external/limb_path = limb_list["path"]
|
||||
// Parent check
|
||||
var/obj/item/organ/external/potential_parent = organs_by_name[initial(limb_path.parent_organ)]
|
||||
if(!istype(potential_parent) || potential_parent.is_stump())
|
||||
src << "<span class='danger'>You've lost the organ that you've been growing your new part on!</span>"
|
||||
return // No rayman for you
|
||||
// Grah this line will leave a "not used" warning, in spite of the fact that the new() proc WILL do the thing.
|
||||
// Bothersome.
|
||||
var/obj/item/organ/external/new_limb = new limb_path(src)
|
||||
new_limb.open = 0 // This is just so that the compiler won't think that new_limb is unused, because the compiler is horribly stupid.
|
||||
adjustBruteLoss(stored_brute)
|
||||
adjustFireLoss(stored_burn)
|
||||
update_body()
|
||||
updatehealth()
|
||||
UpdateDamageIcon()
|
||||
nutrition -= SLIMEPERSON_HUNGERCOST
|
||||
visible_message("<span class='notice'>[src] finishes regrowing their missing [new_limb]!</span>", "<span class='notice'>You finish regrowing your [limb_select]</span>")
|
||||
else
|
||||
src << "<span class='warning'>You need to hold still in order to regrow a limb!</span>"
|
||||
return
|
||||
|
||||
#undef SLIMEPERSON_HUNGERCOST
|
||||
#undef SLIMEPERSON_MINHUNGER
|
||||
#undef SLIMEPERSON_REGROWTHDELAY
|
||||
|
||||
/datum/species/slime/handle_pre_change(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
if(H in recolor_list)
|
||||
H.toggle_recolor(silent = 1)
|
||||
|
||||
/datum/species/grey
|
||||
name = "Grey"
|
||||
@@ -464,12 +620,13 @@
|
||||
has_organ = list(
|
||||
"nutrient channel" = /obj/item/organ/internal/liver/diona,
|
||||
"neural strata" = /obj/item/organ/internal/heart/diona,
|
||||
"receptor node" = /obj/item/organ/internal/eyes/diona,
|
||||
"receptor node" = /obj/item/organ/internal/diona_receptor,
|
||||
"gas bladder" = /obj/item/organ/internal/brain/diona,
|
||||
"polyp segment" = /obj/item/organ/internal/kidneys/diona,
|
||||
"anchoring ligament" = /obj/item/organ/internal/appendix/diona
|
||||
)
|
||||
|
||||
vision_organ = /obj/item/organ/internal/diona_receptor
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/diona/chest),
|
||||
"groin" = list("path" = /obj/item/organ/external/diona/groin),
|
||||
@@ -486,8 +643,8 @@
|
||||
|
||||
suicide_messages = list(
|
||||
"is losing branches!",
|
||||
"is pulling themselves apart!",
|
||||
"pulls out a secret stash of herbicide and takes a hearty swig!")
|
||||
"pulls out a secret stash of herbicide and takes a hearty swig!",
|
||||
"is pulling themselves apart!")
|
||||
|
||||
/datum/species/diona/can_understand(var/mob/other)
|
||||
var/mob/living/simple_animal/diona/D = other
|
||||
@@ -586,15 +743,15 @@
|
||||
"is powering down!",
|
||||
"is smashing their own monitor!",
|
||||
"is twisting their own neck!",
|
||||
"is blocking their ventilation port!",
|
||||
"is downloading extra RAM!",
|
||||
"is frying their own circuits!")
|
||||
"is frying their own circuits!",
|
||||
"is blocking their ventilation port!")
|
||||
|
||||
species_abilities = list(
|
||||
/mob/living/carbon/human/proc/change_monitor
|
||||
)
|
||||
|
||||
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
|
||||
H.h_style = ""
|
||||
spawn(100)
|
||||
if(H) H.update_hair()
|
||||
|
||||
/datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
H.verbs += /mob/living/carbon/human/proc/change_monitor
|
||||
if(H) H.update_hair()
|
||||
@@ -583,4 +583,10 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75
|
||||
/mob/living/carbon/slime/can_use_vents()
|
||||
if(Victim)
|
||||
return "You cannot ventcrawl while feeding."
|
||||
..()
|
||||
..()
|
||||
|
||||
/mob/living/carbon/slime/forceFed(var/obj/item/weapon/reagent_containers/food/toEat, mob/user, fullness)
|
||||
if(istype(toEat, /obj/item/weapon/reagent_containers/food/drinks))
|
||||
return 1
|
||||
user << "This creature does not seem to have a mouth!"
|
||||
return 0
|
||||
@@ -11,6 +11,8 @@
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
playsound(src.loc, 'sound/goonstation/effects/robogib.ogg', 50, 1)
|
||||
|
||||
// flick("gibbed-r", animation)
|
||||
robogibs(loc, viruses)
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = src
|
||||
|
||||
playsound(src.loc, 'sound/goonstation/effects/robogib.ogg', 50, 1)
|
||||
|
||||
flick("gibbed-r", animation)
|
||||
robogibs(loc, viruses)
|
||||
|
||||
|
||||
@@ -1355,7 +1355,7 @@ var/list/robot_verbs_default = list(
|
||||
if(isnull(ckey) && !searching_for_ckey)
|
||||
searching_for_ckey = 1
|
||||
user << "<span class='notice'>Now checking for possible borgs.</span>"
|
||||
var/list/borg_candidates = pollCandidates("Do you want to play as a Nanotrasen Combat borg?", poll_time = 300)
|
||||
var/list/borg_candidates = pollCandidates("Do you want to play as a Nanotrasen Combat borg?")
|
||||
if(borg_candidates.len > 0 && isnull(ckey))
|
||||
searching_for_ckey = 0
|
||||
var/mob/M = pick(borg_candidates)
|
||||
|
||||
@@ -203,7 +203,8 @@ var/list/alldepartments = list()
|
||||
return 0 //You can't send faxes to "Unknown"
|
||||
|
||||
flick("faxreceive", src)
|
||||
playsound(loc, "sound/items/polaroid1.ogg", 50, 1)
|
||||
|
||||
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
|
||||
|
||||
// give the sprite some time to flick
|
||||
sleep(20)
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
|
||||
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
|
||||
for(var/i = 0, i < copies, i++)
|
||||
if(toner <= 0)
|
||||
break
|
||||
@@ -99,6 +100,7 @@
|
||||
if (!selection)
|
||||
return
|
||||
|
||||
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
|
||||
var/obj/item/weapon/photo/p = new /obj/item/weapon/photo (src.loc)
|
||||
p.construct(selection)
|
||||
if (p.desc == "")
|
||||
|
||||
@@ -157,11 +157,12 @@
|
||||
/datum/data/pda/utility/scanmode/notes/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob)
|
||||
if(notes && istype(A, /obj/item/weapon/paper))
|
||||
var/obj/item/weapon/paper/P = A
|
||||
var/list/brlist = list("p", "/p", "br", "hr", "h1", "h2", "h3", "h4", "/h1", "/h2", "/h3", "/h4")
|
||||
|
||||
// JMO 20140705: Makes scanned document show up properly in the notes. Not pretty for formatted documents,
|
||||
// as this will clobber the HTML, but at least it lets you scan a document. You can restore the original
|
||||
// notes by editing the note again. (Was going to allow you to edit, but scanned documents are too long.)
|
||||
var/raw_scan = P.info
|
||||
var/raw_scan = sanitize_simple(P.info, list("\t" = "", "ÿ" = ""))
|
||||
var/formatted_scan = ""
|
||||
// Scrub out the tags (replacing a few formatting ones along the way)
|
||||
// Find the beginning and end of the first tag.
|
||||
@@ -177,7 +178,7 @@
|
||||
// If we have a space after the tag (and presumably attributes) just crop that off.
|
||||
if(tagend)
|
||||
tag = copytext(tag, 1, tagend)
|
||||
if(tag == "p" || tag == "/p" || tag == "br") // Check if it's I vertical space tag.
|
||||
if(tag in brlist) // Check if it's I vertical space tag.
|
||||
formatted_scan = formatted_scan + "<br>" // If so, add some padding in.
|
||||
raw_scan = copytext(raw_scan, tag_stop + 1) // continue on with the stuff after the tag
|
||||
// Look for the next tag in what's left
|
||||
@@ -187,9 +188,9 @@
|
||||
formatted_scan = formatted_scan + raw_scan
|
||||
// If there is something in there already, pad it out.
|
||||
if(length(notes.note) > 0)
|
||||
notes.note = notes.note + "<br><br>"
|
||||
notes.note += "<br><br>"
|
||||
// Store the scanned document to the notes
|
||||
notes.note = "Scanned Document. Edit to restore previous notes/delete scan.<br>----------<br>" + formatted_scan + "<br>"
|
||||
notes.note += "Scanned Document. Edit to restore previous notes/delete scan.<br>----------<br>" + formatted_scan + "<br>"
|
||||
// notehtml ISN'T set to allow user to get their old notes back. A better implementation would add a "scanned documents"
|
||||
// feature to the PDA, which would better convey the availability of the feature, but this will work for now.
|
||||
// Inform the user
|
||||
|
||||
@@ -141,7 +141,7 @@ obj/item/weapon/gun/energy/staff/focus
|
||||
icon_state = "toxgun"
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
w_class = 3.0
|
||||
origin_tech = "combat=5;plasmatech=4"
|
||||
origin_tech = "combat=4;plasmatech=3"
|
||||
projectile_type = "/obj/item/projectile/energy/plasma"
|
||||
|
||||
/obj/item/weapon/gun/energy/sniperrifle
|
||||
|
||||
@@ -160,15 +160,23 @@
|
||||
|
||||
|
||||
/obj/item/projectile/bullet/mime
|
||||
damage = 20
|
||||
damage = 0
|
||||
stun = 5
|
||||
weaken = 5
|
||||
slur = 20
|
||||
stutter = 20
|
||||
|
||||
/obj/item/projectile/bullet/mime/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(istype(target, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = target
|
||||
M.silent = max(M.silent, 10)
|
||||
|
||||
|
||||
|
||||
..(target, blocked)
|
||||
if(istype(target, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = target
|
||||
M.silent = max(M.silent, 10)
|
||||
else if(istype(target, /obj/mecha/combat/honker))
|
||||
var/obj/mecha/chassis = target
|
||||
chassis.occupant_message("A mimetech anti-honk bullet has hit \the [chassis]!")
|
||||
chassis.use_power(chassis.get_charge() / 2)
|
||||
for(var/obj/item/mecha_parts/mecha_equipment/weapon/honker in chassis.equipment)
|
||||
honker.set_ready_state(0)
|
||||
|
||||
/obj/item/projectile/bullet/dart
|
||||
name = "dart"
|
||||
|
||||
@@ -478,6 +478,7 @@
|
||||
src.printing = 1
|
||||
for(var/mob/O in viewers(usr))
|
||||
O.show_message("\blue \the [src] rattles and prints out a sheet of paper.", 1)
|
||||
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc )
|
||||
P.info = "<CENTER><B>Chemical Analysis</B></CENTER><BR>"
|
||||
P.info += "<b>Time of analysis:</b> [worldtime2text(world.time)]<br><br>"
|
||||
@@ -583,7 +584,7 @@
|
||||
return
|
||||
name = reject_bad_text(name)
|
||||
while (count--)
|
||||
var/obj/item/weapon/reagent_containers/pill/P = new/obj/item/weapon/reagent_containers/pill(src.loc)
|
||||
var/obj/item/weapon/reagent_containers/food/pill/P = new/obj/item/weapon/reagent_containers/food/pill(src.loc)
|
||||
if(!name) name = reagents.get_master_reagent_name()
|
||||
P.name = "[name] pill"
|
||||
P.pixel_x = rand(-7, 7) //random position
|
||||
@@ -623,7 +624,7 @@
|
||||
return
|
||||
name = reject_bad_text(name)
|
||||
while (count--)
|
||||
var/obj/item/weapon/reagent_containers/pill/patch/P = new/obj/item/weapon/reagent_containers/pill/patch(src.loc)
|
||||
var/obj/item/weapon/reagent_containers/food/pill/patch/P = new/obj/item/weapon/reagent_containers/food/pill/patch(src.loc)
|
||||
if(!name) name = reagents.get_master_reagent_name()
|
||||
P.name = "[name] patch"
|
||||
P.pixel_x = rand(-7, 7) //random position
|
||||
@@ -819,6 +820,7 @@
|
||||
/obj/item/stack/sheet/mineral/plasma = list("plasma" = 20),
|
||||
/obj/item/stack/sheet/mineral/uranium = list("uranium" = 20),
|
||||
/obj/item/stack/sheet/mineral/bananium = list("banana" = 20),
|
||||
/obj/item/stack/sheet/mineral/tranquillite = list("nothing" = 20),
|
||||
/obj/item/stack/sheet/mineral/silver = list("silver" = 20),
|
||||
/obj/item/stack/sheet/mineral/gold = list("gold" = 20),
|
||||
/obj/item/weapon/grown/novaflower = list("capsaicin" = 0),
|
||||
@@ -828,7 +830,7 @@
|
||||
|
||||
|
||||
//All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.!
|
||||
/obj/item/weapon/reagent_containers/pill = list(),
|
||||
/obj/item/weapon/reagent_containers/food/pill = list(),
|
||||
/obj/item/weapon/reagent_containers/food = list()
|
||||
)
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
required_reagents = list("gintonic" = 1, "methamphetamine" = 1)
|
||||
result_amount = 2
|
||||
mix_message = "The drink turns electric blue and starts quivering violently."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/reagent/ginsonic/on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
@@ -62,6 +63,7 @@
|
||||
result = "jackrose"
|
||||
required_reagents = list("applejack" = 4, "lemonjuice" = 1)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
|
||||
// ROBOT ALCOHOL PAST THIS POINT
|
||||
@@ -93,7 +95,7 @@
|
||||
|
||||
/datum/reagent/ethanol/synthanol/on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
|
||||
var/d = data
|
||||
var/d = data
|
||||
|
||||
if(d >= collapse_start && prob(10))
|
||||
M.emote("collapse")
|
||||
@@ -118,6 +120,7 @@
|
||||
required_reagents = list("synthanol" = 1, "oil" = 1, "sodawater" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The ingredients combine into a stiff, dark goo."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/reagent/ethanol/synthanol/trinary
|
||||
name = "Trinary"
|
||||
@@ -133,6 +136,7 @@
|
||||
required_reagents = list("synthanol" = 1, "limejuice" = 1, "orangejuice" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The ingredients mix into a colorful substance."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/reagent/ethanol/synthanol/servo
|
||||
name = "Servo"
|
||||
@@ -148,5 +152,6 @@
|
||||
required_reagents = list("synthanol" = 2, "cream" = 1, "hot_coco" = 1)
|
||||
result_amount = 4
|
||||
mix_message = "The ingredients mix into a dark brown substance."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
// ROBOT ALCOHOL ENDS
|
||||
|
||||
@@ -154,6 +154,7 @@
|
||||
result_amount = 6
|
||||
mix_message = "The mixture dries into a pale blue powder."
|
||||
min_temp = 380
|
||||
mix_sound = 'sound/goonstation/misc/fuse.ogg'
|
||||
|
||||
/datum/reagent/methamphetamine
|
||||
name = "Methamphetamine"
|
||||
@@ -244,6 +245,7 @@
|
||||
result = "saltpetre"
|
||||
required_reagents = list("potassium" = 1, "nitrogen" = 1, "oxygen" = 3)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/fuse.ogg'
|
||||
|
||||
/datum/reagent/saltpetre
|
||||
name = "Saltpetre"
|
||||
@@ -289,6 +291,7 @@
|
||||
result_amount = 6
|
||||
min_temp = 374
|
||||
mix_message = "Tiny cubic crystals precipitate out of the mixture. Huh."
|
||||
mix_sound = 'sound/goonstation/misc/fuse.ogg'
|
||||
|
||||
/datum/reagent/bath_salts/overdose_process(var/mob/living/M as mob)
|
||||
M.hallucination += 10
|
||||
|
||||
@@ -41,6 +41,7 @@ datum/reagent/triple_citrus
|
||||
required_reagents = list("lemonjuice" = 1, "limejuice" = 1, "orangejuice" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The citrus juices begin to blend together."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
datum/reagent/triple_citrus/reaction_mob(var/mob/living/carbon/M as mob, var/method=TOUCH, var/volume)
|
||||
if(!istype(M, /mob/living/carbon))
|
||||
@@ -106,6 +107,7 @@ datum/reagent/vhfcs/on_mob_life(var/mob/living/M as mob)
|
||||
required_reagents = list("carbon" = 1, "oxygen" = 1, "water" = 1, "sugar" = 1)
|
||||
result_amount = 4
|
||||
mix_message = "The mixture begins to fizz."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/reagent/honey
|
||||
name = "Honey"
|
||||
|
||||
@@ -125,6 +125,7 @@ datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob)
|
||||
result_amount = 2
|
||||
mix_message = "The mixture yields a fine black powder."
|
||||
min_temp = 380
|
||||
mix_sound = 'sound/goonstation/misc/fuse.ogg'
|
||||
|
||||
/datum/chemical_reaction/silver_sulfadiazine
|
||||
name = "Silver Sulfadiazine"
|
||||
@@ -133,6 +134,7 @@ datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob)
|
||||
required_reagents = list("ammonia" = 1, "silver" = 1, "sulfur" = 1, "oxygen" = 1, "chlorine" = 1)
|
||||
result_amount = 5
|
||||
mix_message = "A strong and cloying odor begins to bubble from the mixture."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/salglu_solution
|
||||
name = "Saline-Glucose Solution"
|
||||
@@ -307,6 +309,7 @@ datum/reagent/sal_acid/overdose_process(var/mob/living/M as mob)
|
||||
required_reagents = list("sodium" = 1, "phenol" = 1, "carbon" = 1, "oxygen" = 1, "sacid" = 1)
|
||||
result_amount = 5
|
||||
mix_message = "The mixture crystallizes."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
datum/reagent/salbutamol
|
||||
name = "Salbutamol"
|
||||
@@ -331,6 +334,7 @@ datum/reagent/salbutamol/on_mob_life(var/mob/living/M as mob)
|
||||
required_reagents = list("sal_acid" = 1, "lithium" = 1, "aluminum" = 1, "bromine" = 1, "ammonia" = 1)
|
||||
result_amount = 5
|
||||
mix_message = "The solution bubbles freely, creating a head of bluish foam."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
datum/reagent/perfluorodecalin
|
||||
name = "Perfluorodecalin"
|
||||
@@ -358,6 +362,7 @@ datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob)
|
||||
result_amount = 3
|
||||
min_temp = 370
|
||||
mix_message = "The mixture rapidly turns into a dense pink liquid."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
datum/reagent/ephedrine
|
||||
name = "Ephedrine"
|
||||
@@ -440,6 +445,7 @@ datum/reagent/diphenhydramine/on_mob_life(var/mob/living/M as mob)
|
||||
required_reagents = list("oil" = 1, "carbon" = 1, "bromine" = 1, "diethylamine" = 1, "ethanol" = 1)
|
||||
result_amount = 4
|
||||
mix_message = "The mixture fizzes gently."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
datum/reagent/morphine
|
||||
name = "Morphine"
|
||||
@@ -637,6 +643,7 @@ datum/reagent/epinephrine/overdose_process(var/mob/living/M as mob)
|
||||
required_reagents = list("phenol" = 1, "acetone" = 1, "diethylamine" = 1, "oxygen" = 1, "chlorine" = 1, "hydrogen" = 1)
|
||||
result_amount = 6
|
||||
mix_message = "Tiny white crystals precipitate out of the solution."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
datum/reagent/strange_reagent
|
||||
name = "Strange Reagent"
|
||||
@@ -815,6 +822,7 @@ datum/reagent/antihol/on_mob_life(var/mob/living/M as mob)
|
||||
required_reagents = list("ethanol" = 1, "charcoal" = 1)
|
||||
result_amount = 2
|
||||
mix_message = "A minty and refreshing smell drifts from the effervescent mixture."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/reagent/stimulants
|
||||
name = "Stimulants"
|
||||
@@ -923,6 +931,7 @@ datum/reagent/teporone/on_mob_life(var/mob/living/M as mob)
|
||||
required_reagents = list("acetone" = 1, "silicon" = 1, "plasma" = 1)
|
||||
result_amount = 2
|
||||
mix_message = "The mixture turns an odd lavender color."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
datum/reagent/haloperidol
|
||||
name = "Haloperidol"
|
||||
|
||||
@@ -99,6 +99,7 @@ datum/reagent/acetone
|
||||
required_reagents = list("water" = 1, "chlorine" = 1, "oil" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The mixture bubbles and gives off an unpleasant medicinal odor."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/ash
|
||||
name = "Ash"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/reagent_containers/pill/patch
|
||||
/obj/item/weapon/reagent_containers/food/pill/patch
|
||||
name = "chemical patch"
|
||||
desc = "A chemical patch for touch based applications."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
@@ -10,35 +10,35 @@
|
||||
apply_method = "apply"
|
||||
transfer_efficiency = 0.5 //patches aren't as effective at getting chemicals into the bloodstream.
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/patch/New()
|
||||
/obj/item/weapon/reagent_containers/food/pill/patch/New()
|
||||
..()
|
||||
icon_state = "bandaid"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/patch/afterattack(obj/target, mob/user , proximity)
|
||||
/obj/item/weapon/reagent_containers/food/pill/patch/afterattack(obj/target, mob/user , proximity)
|
||||
return // thanks inheritance again
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/patch/styptic
|
||||
/obj/item/weapon/reagent_containers/food/pill/patch/styptic
|
||||
name = "healing patch"
|
||||
desc = "Helps with brute injuries."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("styptic_powder", 40)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/patch/silver_sulf
|
||||
/obj/item/weapon/reagent_containers/food/pill/patch/silver_sulf
|
||||
name = "burn patch"
|
||||
desc = "Helps with burn injuries."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("silver_sulfadiazine", 40)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/patch/synthflesh
|
||||
/obj/item/weapon/reagent_containers/food/pill/patch/synthflesh
|
||||
name = "syntheflesh patch"
|
||||
desc = "Helps with burn injuries."
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("synthflesh", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/patch/nicotine
|
||||
/obj/item/weapon/reagent_containers/food/pill/patch/nicotine
|
||||
name = "nicotine patch"
|
||||
desc = "Helps temporarily curb the cravings of nicotine dependency."
|
||||
New()
|
||||
|
||||
@@ -170,6 +170,7 @@
|
||||
result = "blackpowder"
|
||||
required_reagents = list("saltpetre" = 1, "charcoal" = 1, "sulfur" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/fuse.ogg'
|
||||
|
||||
/datum/chemical_reaction/blackpowder_explosion
|
||||
name = "Black Powder Kaboom"
|
||||
@@ -479,6 +480,7 @@ datum/reagent/cryostylane
|
||||
result = "cryostylane"
|
||||
required_reagents = list("water" = 1, "plasma" = 1, "nitrogen" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
datum/reagent/cryostylane/on_mob_life(var/mob/living/M as mob) //TODO: code freezing into an ice cube
|
||||
if(M.reagents.has_reagent("oxygen"))
|
||||
@@ -557,6 +559,7 @@ datum/reagent/firefighting_foam
|
||||
required_reagents = list("carbon" = 1, "chlorine" = 1, "sulfur" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The mixture bubbles gently."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
datum/reagent/firefighting_foam/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
|
||||
if(!istype(M, /mob/living))
|
||||
|
||||
@@ -180,6 +180,7 @@
|
||||
result_amount = 3
|
||||
min_temp = 380
|
||||
mix_message = "The mixture gives off a faint scent of almonds."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
|
||||
/datum/reagent/itching_powder
|
||||
@@ -412,6 +413,7 @@
|
||||
required_reagents = list("acetone" = 1, "diethylamine" = 1, "sulfur" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The mixture gives off quite a stench."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/reagent/sulfonal/on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
@@ -527,6 +529,7 @@
|
||||
result_amount = 8
|
||||
mix_message = "The mixture yields a colorless, odorless liquid."
|
||||
min_temp = 374
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/reagent/tabun/on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
result = "hot_coco"
|
||||
required_reagents = list("water" = 5, "cocoa" = 1)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/chocolate_milk
|
||||
name = "Chocolate Milk"
|
||||
@@ -13,6 +14,7 @@
|
||||
required_reagents = list("chocolate" = 1, "milk" = 1)
|
||||
result_amount = 2
|
||||
mix_message = "The mixture turns a nice brown color."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/coffee
|
||||
name = "Coffee"
|
||||
@@ -20,6 +22,7 @@
|
||||
result = "coffee"
|
||||
required_reagents = list("coffeepowder" = 1, "water" = 5)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/tea
|
||||
name = "Tea"
|
||||
@@ -27,6 +30,7 @@
|
||||
result = "tea"
|
||||
required_reagents = list("teapowder" = 1, "water" = 5)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/goldschlager
|
||||
name = "Goldschlager"
|
||||
@@ -34,6 +38,7 @@
|
||||
result = "goldschlager"
|
||||
required_reagents = list("vodka" = 10, "gold" = 1)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/patron
|
||||
name = "Patron"
|
||||
@@ -41,6 +46,7 @@
|
||||
result = "patron"
|
||||
required_reagents = list("tequilla" = 10, "silver" = 1)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/bilk
|
||||
name = "Bilk"
|
||||
@@ -48,6 +54,7 @@
|
||||
result = "bilk"
|
||||
required_reagents = list("milk" = 1, "beer" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/icetea
|
||||
name = "Iced Tea"
|
||||
@@ -55,6 +62,7 @@
|
||||
result = "icetea"
|
||||
required_reagents = list("ice" = 1, "tea" = 3)
|
||||
result_amount = 4
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/icecoffee
|
||||
name = "Iced Coffee"
|
||||
@@ -62,6 +70,7 @@
|
||||
result = "icecoffee"
|
||||
required_reagents = list("ice" = 1, "coffee" = 3)
|
||||
result_amount = 4
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/nuka_cola
|
||||
name = "Nuka Cola"
|
||||
@@ -69,6 +78,7 @@
|
||||
result = "nuka_cola"
|
||||
required_reagents = list("uranium" = 1, "cola" = 6)
|
||||
result_amount = 6
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/moonshine
|
||||
name = "Moonshine"
|
||||
@@ -77,6 +87,7 @@
|
||||
required_reagents = list("nutriment" = 10)
|
||||
required_catalysts = list("enzyme" = 5)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/wine
|
||||
name = "Wine"
|
||||
@@ -85,6 +96,7 @@
|
||||
required_reagents = list("berryjuice" = 10)
|
||||
required_catalysts = list("enzyme" = 5)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/spacebeer
|
||||
name = "Space Beer"
|
||||
@@ -93,6 +105,7 @@
|
||||
required_reagents = list("cornoil" = 10)
|
||||
required_catalysts = list("enzyme" = 5)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/vodka
|
||||
name = "Vodka"
|
||||
@@ -101,6 +114,7 @@
|
||||
required_reagents = list("potato" = 10)
|
||||
required_catalysts = list("enzyme" = 5)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/sake
|
||||
name = "Sake"
|
||||
@@ -109,6 +123,7 @@
|
||||
required_reagents = list("rice" = 10,"water" = 5)
|
||||
required_catalysts = list("enzyme" = 5)
|
||||
result_amount = 15
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/kahlua
|
||||
name = "Kahlua"
|
||||
@@ -117,6 +132,7 @@
|
||||
required_reagents = list("coffee" = 5, "sugar" = 5, "rum" = 5)
|
||||
required_catalysts = list("enzyme" = 5)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/kahluaVodka
|
||||
name = "KahluaVodka"
|
||||
@@ -125,6 +141,7 @@
|
||||
required_reagents = list("coffee" = 5, "sugar" = 5, "vodka" = 5)
|
||||
required_catalysts = list("enzyme" = 5)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/gin_tonic
|
||||
name = "Gin and Tonic"
|
||||
@@ -133,6 +150,7 @@
|
||||
required_reagents = list("gin" = 2, "tonic" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The tonic water and gin mix together perfectly."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/cuba_libre
|
||||
name = "Cuba Libre"
|
||||
@@ -140,6 +158,7 @@
|
||||
result = "cubalibre"
|
||||
required_reagents = list("rum" = 2, "cola" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/mojito
|
||||
name = "Mojito"
|
||||
@@ -147,6 +166,7 @@
|
||||
result = "mojito"
|
||||
required_reagents = list("rum" = 1, "sugar" = 1, "limejuice" = 1, "sodawater" = 1)
|
||||
result_amount = 4
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/martini
|
||||
name = "Classic Martini"
|
||||
@@ -154,6 +174,7 @@
|
||||
result = "martini"
|
||||
required_reagents = list("gin" = 2, "vermouth" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/vodkamartini
|
||||
name = "Vodka Martini"
|
||||
@@ -161,6 +182,7 @@
|
||||
result = "vodkamartini"
|
||||
required_reagents = list("vodka" = 2, "vermouth" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/white_russian
|
||||
name = "White Russian"
|
||||
@@ -168,6 +190,7 @@
|
||||
result = "whiterussian"
|
||||
required_reagents = list("blackrussian" = 3, "cream" = 2)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/whiskey_cola
|
||||
name = "Whiskey Cola"
|
||||
@@ -175,6 +198,7 @@
|
||||
result = "whiskeycola"
|
||||
required_reagents = list("whiskey" = 2, "cola" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/screwdriver
|
||||
name = "Screwdriver"
|
||||
@@ -182,6 +206,7 @@
|
||||
result = "screwdrivercocktail"
|
||||
required_reagents = list("vodka" = 2, "orangejuice" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/bloody_mary
|
||||
name = "Bloody Mary"
|
||||
@@ -189,6 +214,7 @@
|
||||
result = "bloodymary"
|
||||
required_reagents = list("vodka" = 1, "tomatojuice" = 2, "limejuice" = 1)
|
||||
result_amount = 4
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/gargle_blaster
|
||||
name = "Pan-Galactic Gargle Blaster"
|
||||
@@ -196,6 +222,7 @@
|
||||
result = "gargleblaster"
|
||||
required_reagents = list("vodka" = 1, "gin" = 1, "whiskey" = 1, "cognac" = 1, "limejuice" = 1)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/brave_bull
|
||||
name = "Brave Bull"
|
||||
@@ -203,6 +230,7 @@
|
||||
result = "bravebull"
|
||||
required_reagents = list("tequilla" = 2, "kahlua" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/tequilla_sunrise
|
||||
name = "Tequilla Sunrise"
|
||||
@@ -210,6 +238,7 @@
|
||||
result = "tequillasunrise"
|
||||
required_reagents = list("tequilla" = 2, "orangejuice" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/toxins_special
|
||||
name = "Toxins Special"
|
||||
@@ -217,6 +246,7 @@
|
||||
result = "toxinsspecial"
|
||||
required_reagents = list("rum" = 2, "vermouth" = 1, "plasma" = 2)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/beepsky_smash
|
||||
name = "Beepksy Smash"
|
||||
@@ -224,6 +254,7 @@
|
||||
result = "beepskysmash"
|
||||
required_reagents = list("limejuice" = 2, "whiskey" = 2, "iron" = 1)
|
||||
result_amount = 4
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/doctor_delight
|
||||
name = "The Doctor's Delight"
|
||||
@@ -231,6 +262,7 @@
|
||||
result = "doctorsdelight"
|
||||
required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/irish_cream
|
||||
name = "Irish Cream"
|
||||
@@ -238,6 +270,7 @@
|
||||
result = "irishcream"
|
||||
required_reagents = list("whiskey" = 2, "cream" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/manly_dorf
|
||||
name = "The Manly Dorf"
|
||||
@@ -245,6 +278,7 @@
|
||||
result = "manlydorf"
|
||||
required_reagents = list ("beer" = 1, "ale" = 2)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/suicider
|
||||
name = "Suicider"
|
||||
@@ -253,6 +287,7 @@
|
||||
required_reagents = list ("vodka" = 1, "cider" = 1, "fuel" = 1, "epinephrine" = 1)
|
||||
result_amount = 4
|
||||
mix_message = "The drinks and chemicals mix together, emitting a potent smell."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/irish_coffee
|
||||
name = "Irish Coffee"
|
||||
@@ -260,6 +295,7 @@
|
||||
result = "irishcoffee"
|
||||
required_reagents = list("irishcream" = 1, "coffee" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/b52
|
||||
name = "B-52"
|
||||
@@ -267,6 +303,7 @@
|
||||
result = "b52"
|
||||
required_reagents = list("irishcream" = 1, "kahlua" = 1, "cognac" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/atomicbomb
|
||||
name = "Atomic Bomb"
|
||||
@@ -274,6 +311,7 @@
|
||||
result = "atomicbomb"
|
||||
required_reagents = list("b52" = 10, "uranium" = 1)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/margarita
|
||||
name = "Margarita"
|
||||
@@ -281,6 +319,7 @@
|
||||
result = "margarita"
|
||||
required_reagents = list("tequilla" = 2, "limejuice" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/longislandicedtea
|
||||
name = "Long Island Iced Tea"
|
||||
@@ -288,6 +327,7 @@
|
||||
result = "longislandicedtea"
|
||||
required_reagents = list("vodka" = 1, "gin" = 1, "tequilla" = 1, "cubalibre" = 1)
|
||||
result_amount = 4
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/threemileisland
|
||||
name = "Three Mile Island Iced Tea"
|
||||
@@ -295,6 +335,7 @@
|
||||
result = "threemileisland"
|
||||
required_reagents = list("longislandicedtea" = 10, "uranium" = 1)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/whiskeysoda
|
||||
name = "Whiskey Soda"
|
||||
@@ -302,6 +343,7 @@
|
||||
result = "whiskeysoda"
|
||||
required_reagents = list("whiskey" = 2, "sodawater" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/black_russian
|
||||
name = "Black Russian"
|
||||
@@ -309,6 +351,7 @@
|
||||
result = "blackrussian"
|
||||
required_reagents = list("vodka" = 3, "kahlua" = 2)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/manhattan
|
||||
name = "Manhattan"
|
||||
@@ -316,6 +359,7 @@
|
||||
result = "manhattan"
|
||||
required_reagents = list("whiskey" = 2, "vermouth" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/manhattan_proj
|
||||
name = "Manhattan Project"
|
||||
@@ -323,6 +367,7 @@
|
||||
result = "manhattan_proj"
|
||||
required_reagents = list("manhattan" = 10, "uranium" = 1)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/vodka_tonic
|
||||
name = "Vodka and Tonic"
|
||||
@@ -330,6 +375,7 @@
|
||||
result = "vodkatonic"
|
||||
required_reagents = list("vodka" = 2, "tonic" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/gin_fizz
|
||||
name = "Gin Fizz"
|
||||
@@ -337,6 +383,7 @@
|
||||
result = "ginfizz"
|
||||
required_reagents = list("gin" = 2, "sodawater" = 1, "limejuice" = 1)
|
||||
result_amount = 4
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/bahama_mama
|
||||
name = "Bahama mama"
|
||||
@@ -344,6 +391,7 @@
|
||||
result = "bahama_mama"
|
||||
required_reagents = list("rum" = 2, "orangejuice" = 2, "limejuice" = 1, "ice" = 1)
|
||||
result_amount = 6
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/singulo
|
||||
name = "Singulo"
|
||||
@@ -351,6 +399,7 @@
|
||||
result = "singulo"
|
||||
required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/alliescocktail
|
||||
name = "Allies Cocktail"
|
||||
@@ -358,6 +407,7 @@
|
||||
result = "alliescocktail"
|
||||
required_reagents = list("martini" = 1, "vodka" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/demonsblood
|
||||
name = "Demons Blood"
|
||||
@@ -365,6 +415,7 @@
|
||||
result = "demonsblood"
|
||||
required_reagents = list("rum" = 1, "spacemountainwind" = 1, "blood" = 1, "dr_gibb" = 1)
|
||||
result_amount = 4
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/booger
|
||||
name = "Booger"
|
||||
@@ -372,6 +423,7 @@
|
||||
result = "booger"
|
||||
required_reagents = list("cream" = 1, "banana" = 1, "rum" = 1, "watermelonjuice" = 1)
|
||||
result_amount = 4
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/antifreeze
|
||||
name = "Anti-freeze"
|
||||
@@ -379,6 +431,7 @@
|
||||
result = "antifreeze"
|
||||
required_reagents = list("vodka" = 2, "cream" = 1, "ice" = 1)
|
||||
result_amount = 4
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/barefoot
|
||||
name = "Barefoot"
|
||||
@@ -386,6 +439,7 @@
|
||||
result = "barefoot"
|
||||
required_reagents = list("berryjuice" = 1, "cream" = 1, "vermouth" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
|
||||
////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri/////
|
||||
@@ -396,6 +450,7 @@
|
||||
result = "sbiten"
|
||||
required_reagents = list("vodka" = 10, "capsaicin" = 1)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/red_mead
|
||||
name = "Red Mead"
|
||||
@@ -403,6 +458,7 @@
|
||||
result = "red_mead"
|
||||
required_reagents = list("blood" = 1, "mead" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/mead
|
||||
name = "Mead"
|
||||
@@ -411,6 +467,7 @@
|
||||
required_reagents = list("sugar" = 1, "water" = 1)
|
||||
required_catalysts = list("enzyme" = 5)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/iced_beer
|
||||
name = "Iced Beer"
|
||||
@@ -418,6 +475,7 @@
|
||||
result = "iced_beer"
|
||||
required_reagents = list("beer" = 10, "frostoil" = 1)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/iced_beer2
|
||||
name = "Iced Beer"
|
||||
@@ -425,6 +483,7 @@
|
||||
result = "iced_beer"
|
||||
required_reagents = list("beer" = 5, "ice" = 1)
|
||||
result_amount = 6
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/grog
|
||||
name = "Grog"
|
||||
@@ -432,6 +491,7 @@
|
||||
result = "grog"
|
||||
required_reagents = list("rum" = 1, "water" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/soy_latte
|
||||
name = "Soy Latte"
|
||||
@@ -439,6 +499,7 @@
|
||||
result = "soy_latte"
|
||||
required_reagents = list("coffee" = 1, "soymilk" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/cafe_latte
|
||||
name = "Cafe Latte"
|
||||
@@ -446,6 +507,7 @@
|
||||
result = "cafe_latte"
|
||||
required_reagents = list("coffee" = 1, "milk" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/acidspit
|
||||
name = "Acid Spit"
|
||||
@@ -453,6 +515,7 @@
|
||||
result = "acidspit"
|
||||
required_reagents = list("sacid" = 1, "wine" = 5)
|
||||
result_amount = 6
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/amasec
|
||||
name = "Amasec"
|
||||
@@ -460,6 +523,7 @@
|
||||
result = "amasec"
|
||||
required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5)
|
||||
result_amount = 10
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/changelingsting
|
||||
name = "Changeling Sting"
|
||||
@@ -467,6 +531,7 @@
|
||||
result = "changelingsting"
|
||||
required_reagents = list("screwdrivercocktail" = 1, "limejuice" = 1, "lemonjuice" = 1)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/aloe
|
||||
name = "Aloe"
|
||||
@@ -474,6 +539,7 @@
|
||||
result = "aloe"
|
||||
required_reagents = list("cream" = 1, "whiskey" = 1, "watermelonjuice" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/andalusia
|
||||
name = "Andalusia"
|
||||
@@ -481,6 +547,7 @@
|
||||
result = "andalusia"
|
||||
required_reagents = list("rum" = 1, "whiskey" = 1, "lemonjuice" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/neurotoxin
|
||||
name = "Neurotoxin"
|
||||
@@ -488,6 +555,7 @@
|
||||
result = "neurotoxin"
|
||||
required_reagents = list("gargleblaster" = 1, "ether" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/snowwhite
|
||||
name = "Snow White"
|
||||
@@ -495,6 +563,7 @@
|
||||
result = "snowwhite"
|
||||
required_reagents = list("beer" = 1, "lemon_lime" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/irishcarbomb
|
||||
name = "Irish Car Bomb"
|
||||
@@ -502,6 +571,7 @@
|
||||
result = "irishcarbomb"
|
||||
required_reagents = list("ale" = 1, "irishcream" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/syndicatebomb
|
||||
name = "Syndicate Bomb"
|
||||
@@ -509,6 +579,7 @@
|
||||
result = "syndicatebomb"
|
||||
required_reagents = list("beer" = 1, "whiskeycola" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/erikasurprise
|
||||
name = "Erika Surprise"
|
||||
@@ -516,6 +587,7 @@
|
||||
result = "erikasurprise"
|
||||
required_reagents = list("ale" = 1, "limejuice" = 1, "whiskey" = 1, "banana" = 1, "ice" = 1)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/devilskiss
|
||||
name = "Devils Kiss"
|
||||
@@ -523,6 +595,7 @@
|
||||
result = "devilskiss"
|
||||
required_reagents = list("blood" = 1, "kahlua" = 1, "rum" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/hippiesdelight
|
||||
name = "Hippies Delight"
|
||||
@@ -530,6 +603,7 @@
|
||||
result = "hippiesdelight"
|
||||
required_reagents = list("psilocybin" = 1, "gargleblaster" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/bananahonk
|
||||
name = "Banana Honk"
|
||||
@@ -537,6 +611,7 @@
|
||||
result = "bananahonk"
|
||||
required_reagents = list("banana" = 1, "cream" = 1, "sugar" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/silencer
|
||||
name = "Silencer"
|
||||
@@ -544,6 +619,7 @@
|
||||
result = "silencer"
|
||||
required_reagents = list("nothing" = 1, "cream" = 1, "sugar" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/driestmartini
|
||||
name = "Driest Martini"
|
||||
@@ -551,6 +627,7 @@
|
||||
result = "driestmartini"
|
||||
required_reagents = list("nothing" = 1, "gin" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/lemonade
|
||||
name = "Lemonade"
|
||||
@@ -558,6 +635,7 @@
|
||||
result = "lemonade"
|
||||
required_reagents = list("lemonjuice" = 1, "sugar" = 1, "water" = 1)
|
||||
result_amount = 3
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/kiraspecial
|
||||
name = "Kira Special"
|
||||
@@ -565,6 +643,7 @@
|
||||
result = "kiraspecial"
|
||||
required_reagents = list("orangejuice" = 1, "limejuice" = 1, "sodawater" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/brownstar
|
||||
name = "Brown Star"
|
||||
@@ -572,6 +651,7 @@
|
||||
result = "brownstar"
|
||||
required_reagents = list("orangejuice" = 2, "cola" = 1)
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/milkshake
|
||||
name = "Milkshake"
|
||||
@@ -579,10 +659,12 @@
|
||||
result = "milkshake"
|
||||
required_reagents = list("cream" = 1, "ice" = 2, "milk" = 2)
|
||||
result_amount = 5
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
/datum/chemical_reaction/rewriter
|
||||
name = "Rewriter"
|
||||
id = "rewriter"
|
||||
result = "rewriter"
|
||||
required_reagents = list("spacemountainwind" = 1, "coffee" = 1)
|
||||
result_amount = 2
|
||||
result_amount = 2
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
@@ -21,6 +21,7 @@
|
||||
required_reagents = list("cryostylane" = 1, "plasma" = 1, "acetone" = 1, "mutagen" = 1)
|
||||
result_amount = 4
|
||||
mix_message = "The solution bubbles softly."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
spaceacillin
|
||||
name = "Spaceacillin"
|
||||
|
||||
@@ -172,6 +172,7 @@
|
||||
required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "Slightly dizzying fumes drift from the solution."
|
||||
mix_sound = 'sound/goonstation/misc/drinkfizz.ogg'
|
||||
|
||||
lube
|
||||
name = "Space Lube"
|
||||
|
||||
@@ -34,9 +34,10 @@
|
||||
|
||||
d/=sober_str
|
||||
|
||||
var/obj/item/organ/internal/liver/L
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/internal/liver/L = H.get_int_organ(/obj/item/organ/internal/liver)
|
||||
L = H.get_int_organ(/obj/item/organ/internal/liver)
|
||||
if(!L || (istype(L) && L.dna.species in list("Skrell", "Neara")))
|
||||
d*=5
|
||||
|
||||
@@ -64,8 +65,7 @@
|
||||
M.drowsyness = max(M.drowsyness, 30/sober_str)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if (H.get_int_organ(/obj/item/organ/internal/liver))
|
||||
var/obj/item/organ/internal/liver/L = /obj/item/organ/internal/liver
|
||||
if (L)
|
||||
L.take_damage(0.1, 1)
|
||||
H.adjustToxLoss(0.1)
|
||||
..()
|
||||
|
||||
@@ -52,6 +52,9 @@
|
||||
M.adjustToxLoss(1*REM)
|
||||
if(holder.has_reagent("epinephrine"))
|
||||
holder.remove_reagent("epinephrine", 2)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.adjustPlasma(20)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
possible_transfer_amounts = null
|
||||
volume = 50 //Sets the default container amount for all food items.
|
||||
var/filling_color = "#FFFFFF" //Used by sandwiches.
|
||||
var/bitesize = 1
|
||||
var/consume_sound = 'sound/items/eatfood.ogg'
|
||||
var/apply_type = INGEST
|
||||
var/apply_method = "swallow"
|
||||
var/transfer_efficiency = 1.0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/New()
|
||||
..()
|
||||
|
||||
@@ -7,164 +7,116 @@
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
icon_state = null
|
||||
flags = OPENCONTAINER
|
||||
var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it.
|
||||
consume_sound = 'sound/items/drink.ogg'
|
||||
possible_transfer_amounts = list(5,10,25)
|
||||
volume = 50
|
||||
|
||||
on_reagent_change()
|
||||
if (gulp_size < 5) gulp_size = 5
|
||||
else gulp_size = max(round(reagents.total_volume / 5), 5)
|
||||
/obj/item/weapon/reagent_containers/food/drinks/New()
|
||||
..()
|
||||
bitesize = amount_per_transfer_from_this
|
||||
if(bitesize < 5)
|
||||
bitesize = 5
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
return
|
||||
/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
|
||||
return
|
||||
|
||||
attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
var/datum/reagents/R = src.reagents
|
||||
var/fillevel = gulp_size
|
||||
|
||||
if(!R.total_volume || !R)
|
||||
user << "<span class='warning'> None of [src] left, oh no!</span>"
|
||||
return 0
|
||||
|
||||
if(M == user)
|
||||
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
if(!H.get_species() == "Machine")
|
||||
user << "Where do you intend to put \the [src]? You don't have a mouth!"
|
||||
return
|
||||
else
|
||||
M << "<span class='notice'> You pour a bit of liquid from [src] into your connection port.</span>"
|
||||
else
|
||||
M << "<span class='notice'> You swallow a gulp of [src].</span>"
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, INGEST)
|
||||
spawn(0)
|
||||
reagents.trans_to(M, gulp_size)
|
||||
|
||||
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
|
||||
return 1
|
||||
else if( istype(M, /mob/living/carbon/human) )
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth() && !H.get_species() == "Machine")
|
||||
user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
|
||||
return
|
||||
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message("<span class='warning'> [user] attempts to feed [M] [src].</span>", 1)
|
||||
if(!do_mob(user, M)) return
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message("<span class='warning'> [user] feeds [M] [src].</span>", 1)
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [key_name(user)] Reagents: [reagentlist(src)]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [M.name] by [key_name(M)] Reagents: [reagentlist(src)]</font>")
|
||||
log_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [src.name] Reagents: [reagentlist(src)] (INTENT: [uppertext(user.a_intent)])")
|
||||
if(!iscarbon(user))
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, INGEST)
|
||||
spawn(0)
|
||||
reagents.trans_to(M, gulp_size)
|
||||
/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
if(!reagents || !reagents.total_volume)
|
||||
user << "<span class='warning'> None of [src] left, oh no!</span>"
|
||||
return 0
|
||||
|
||||
if(istype(M, /mob/living/carbon))
|
||||
var/mob/living/carbon/C = M
|
||||
if(C.eat(src, user))
|
||||
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
|
||||
var/mob/living/silicon/robot/borg = user
|
||||
borg.cell.use(30)
|
||||
var/refill = R.get_master_reagent_id()
|
||||
var/refill = reagents.get_master_reagent_id()
|
||||
if(refill in drinks) // Only synthesize drinks
|
||||
spawn(600)
|
||||
R.add_reagent(refill, fillevel)
|
||||
|
||||
playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
|
||||
reagents.add_reagent(refill, bitesize)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
return 0
|
||||
/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
|
||||
// Moved from the can code; not necessary since closed cans aren't open containers now, but, eh.
|
||||
if (istype(target, /obj/item/weapon/reagent_containers/food/drinks/cans))
|
||||
var/obj/item/weapon/reagent_containers/food/drinks/cans/cantarget = target
|
||||
if(cantarget.canopened == 0)
|
||||
user << "<span class='notice'>You need to open the drink you want to pour into!</span>"
|
||||
return
|
||||
|
||||
afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
|
||||
|
||||
// Moved from the can code; not necessary since closed cans aren't open containers now, but, eh.
|
||||
if (istype(target, /obj/item/weapon/reagent_containers/food/drinks/cans))
|
||||
var/obj/item/weapon/reagent_containers/food/drinks/cans/cantarget = target
|
||||
if(cantarget.canopened == 0)
|
||||
user << "<span class='notice'>You need to open the drink you want to pour into!</span>"
|
||||
return
|
||||
if(!target.reagents.total_volume)
|
||||
user << "<span class='warning'> [target] is empty.</span>"
|
||||
return
|
||||
|
||||
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
|
||||
if(reagents.total_volume >= reagents.maximum_volume)
|
||||
user << "<span class='warning'> [src] is full.</span>"
|
||||
return
|
||||
|
||||
if(!target.reagents.total_volume)
|
||||
user << "<span class='warning'> [target] is empty.</span>"
|
||||
return
|
||||
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
|
||||
user << "<span class='notice'> You fill [src] with [trans] units of the contents of [target].</span>"
|
||||
|
||||
if(reagents.total_volume >= reagents.maximum_volume)
|
||||
user << "<span class='warning'> [src] is full.</span>"
|
||||
return
|
||||
else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it.
|
||||
if(!reagents.total_volume)
|
||||
user << "<span class='warning'> [src] is empty.</span>"
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
|
||||
user << "<span class='notice'> You fill [src] with [trans] units of the contents of [target].</span>"
|
||||
|
||||
else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it.
|
||||
if(!reagents.total_volume)
|
||||
user << "<span class='warning'> [src] is empty.</span>"
|
||||
return
|
||||
|
||||
if(target.reagents.total_volume >= target.reagents.maximum_volume)
|
||||
user << "<span class='warning'> [target] is full.</span>"
|
||||
return
|
||||
if(target.reagents.total_volume >= target.reagents.maximum_volume)
|
||||
user << "<span class='warning'> [target] is full.</span>"
|
||||
return
|
||||
|
||||
|
||||
|
||||
var/datum/reagent/refill
|
||||
var/datum/reagent/refillName
|
||||
if(isrobot(user))
|
||||
refill = reagents.get_master_reagent_id()
|
||||
refillName = reagents.get_master_reagent_name()
|
||||
var/datum/reagent/refill
|
||||
var/datum/reagent/refillName
|
||||
if(isrobot(user))
|
||||
refill = reagents.get_master_reagent_id()
|
||||
refillName = reagents.get_master_reagent_name()
|
||||
|
||||
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
user << "<span class='notice'> You transfer [trans] units of the solution to [target].</span>"
|
||||
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
|
||||
user << "<span class='notice'> You transfer [trans] units of the solution to [target].</span>"
|
||||
|
||||
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
|
||||
if(refill in drinks) // Only synthesize drinks
|
||||
var/mob/living/silicon/robot/bro = user
|
||||
var/chargeAmount = max(30,4*trans)
|
||||
bro.cell.use(chargeAmount)
|
||||
user << "Now synthesizing [trans] units of [refillName]..."
|
||||
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
|
||||
if(refill in drinks) // Only synthesize drinks
|
||||
var/mob/living/silicon/robot/bro = user
|
||||
var/chargeAmount = max(30,4*trans)
|
||||
bro.cell.use(chargeAmount)
|
||||
user << "Now synthesizing [trans] units of [refillName]..."
|
||||
|
||||
|
||||
spawn(300)
|
||||
reagents.add_reagent(refill, trans)
|
||||
user << "Cyborg [src] refilled."
|
||||
spawn(300)
|
||||
reagents.add_reagent(refill, trans)
|
||||
user << "Cyborg [src] refilled."
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/attackby(var/obj/item/I, mob/user as mob, params)
|
||||
if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird
|
||||
return
|
||||
if(is_hot(I))
|
||||
if(src.reagents)
|
||||
src.reagents.chem_temp += 15
|
||||
user << "<span class='notice'>You heat [src] with [I].</span>"
|
||||
src.reagents.handle_reactions()
|
||||
|
||||
attackby(var/obj/item/I, mob/user as mob, params)
|
||||
if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird
|
||||
return
|
||||
if(is_hot(I))
|
||||
if(src.reagents)
|
||||
src.reagents.chem_temp += 15
|
||||
user << "<span class='notice'>You heat [src] with [I].</span>"
|
||||
src.reagents.handle_reactions()
|
||||
|
||||
examine(mob/user)
|
||||
if(!..(user, 1))
|
||||
return
|
||||
if(!reagents || reagents.total_volume==0)
|
||||
user << "<span class='notice'> \The [src] is empty!</span>"
|
||||
else if (reagents.total_volume<=src.volume/4)
|
||||
user << "<span class='notice'> \The [src] is almost empty!</span>"
|
||||
else if (reagents.total_volume<=src.volume*0.66)
|
||||
user << "<span class='notice'> \The [src] is half full!</span>" // We're all optimistic, right?!
|
||||
else if (reagents.total_volume<=src.volume*0.90)
|
||||
user << "<span class='notice'> \The [src] is almost full!</span>"
|
||||
else
|
||||
user << "<span class='notice'> \The [src] is full!</span>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
|
||||
if(!..(user, 1))
|
||||
return
|
||||
if(!reagents || reagents.total_volume==0)
|
||||
user << "<span class='notice'> \The [src] is empty!</span>"
|
||||
else if (reagents.total_volume<=src.volume/4)
|
||||
user << "<span class='notice'> \The [src] is almost empty!</span>"
|
||||
else if (reagents.total_volume<=src.volume*0.66)
|
||||
user << "<span class='notice'> \The [src] is half full!</span>" // We're all optimistic, right?!
|
||||
else if (reagents.total_volume<=src.volume*0.90)
|
||||
user << "<span class='notice'> \The [src] is almost full!</span>"
|
||||
else
|
||||
user << "<span class='notice'> \The [src] is full!</span>"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Drinks. END
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "yummy"
|
||||
icon = 'icons/obj/food/food.dmi'
|
||||
icon_state = null
|
||||
var/bitesize = 1
|
||||
bitesize = 1
|
||||
var/bitecount = 0
|
||||
var/trash = null
|
||||
var/slice_path
|
||||
@@ -18,19 +18,20 @@
|
||||
//Placeholder for effect that trigger on eating that aren't tied to reagents.
|
||||
/obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M)
|
||||
if(!usr) return
|
||||
if(!reagents.total_volume)
|
||||
if(M == usr)
|
||||
usr << "<span class='notice'>You finish eating \the [src].</span>"
|
||||
usr.visible_message("<span class='notice'>[usr] finishes eating \the [src].</span>")
|
||||
usr.unEquip(src) //so icons update :[
|
||||
spawn(0)
|
||||
if(!reagents.total_volume)
|
||||
if(M == usr)
|
||||
usr << "<span class='notice'>You finish eating \the [src].</span>"
|
||||
usr.visible_message("<span class='notice'>[usr] finishes eating \the [src].</span>")
|
||||
usr.unEquip(src) //so icons update :[
|
||||
|
||||
if(trash)
|
||||
if(ispath(trash,/obj/item))
|
||||
var/obj/item/TrashItem = new trash(usr)
|
||||
usr.put_in_hands(TrashItem)
|
||||
else if(istype(trash,/obj/item))
|
||||
usr.put_in_hands(trash)
|
||||
qdel(src)
|
||||
if(trash)
|
||||
if(ispath(trash,/obj/item))
|
||||
var/obj/item/TrashItem = new trash(usr)
|
||||
usr.put_in_hands(TrashItem)
|
||||
else if(istype(trash,/obj/item))
|
||||
usr.put_in_hands(trash)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/attack_self(mob/user as mob)
|
||||
@@ -38,83 +39,17 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
if(reagents && !reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it.
|
||||
user << "\red None of [src] left, oh no!"
|
||||
user << "<span class='warning'>None of [src] left, oh no!</span>"
|
||||
M.unEquip(src) //so icons update :[
|
||||
qdel(src)
|
||||
return 0
|
||||
|
||||
if(istype(M, /mob/living/carbon))
|
||||
var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 20) + (M.reagents.get_reagent_amount("protein") * 25) + (M.reagents.get_reagent_amount("plantmatter") * 25)
|
||||
if(M == user) //If you're eating it yourself
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
user << "Where do you intend to put \the [src]? You don't have a mouth!"
|
||||
return
|
||||
if (fullness <= 50)
|
||||
M << "\red You hungrily chew out a piece of [src] and gobble it!"
|
||||
if (fullness > 50 && fullness <= 150)
|
||||
M << "\blue You hungrily begin to eat [src]."
|
||||
if (fullness > 150 && fullness <= 350)
|
||||
M << "\blue You take a bite of [src]."
|
||||
if (fullness > 350 && fullness <= 550)
|
||||
M << "\blue You unwillingly chew a bit of [src]."
|
||||
if (fullness > (550 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
|
||||
M << "\red You cannot force any more of [src] to go down your throat."
|
||||
return 0
|
||||
else
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
|
||||
return
|
||||
|
||||
if(!istype(M, /mob/living/carbon/slime)) //If you're feeding it to someone else.
|
||||
|
||||
if (fullness <= (550 * (1 + M.overeatduration / 1000)))
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message("\red [user] attempts to feed [M] [src].", 1)
|
||||
else
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message("\red [user] cannot force anymore of [src] down [M]'s throat.", 1)
|
||||
return 0
|
||||
|
||||
if(!do_mob(user, M)) return
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]</font>")
|
||||
log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] Reagents: [reagentlist(src)] (INTENT: [uppertext(user.a_intent)])")
|
||||
if(!iscarbon(user))
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message("\red [user] feeds [M] [src].", 1)
|
||||
|
||||
else
|
||||
user << "This creature does not seem to have a mouth!"
|
||||
return
|
||||
|
||||
if(reagents) //Handle ingestion of the reagent.
|
||||
playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, INGEST)
|
||||
spawn(0)
|
||||
if(reagents.total_volume > bitesize)
|
||||
/*
|
||||
* I totally cannot understand what this code supposed to do.
|
||||
* Right now every snack consumes in 2 bites, my popcorn does not work right, so I simplify it. -- rastaf0
|
||||
var/temp_bitesize = max(reagents.total_volume /2, bitesize)
|
||||
reagents.trans_to(M, temp_bitesize)
|
||||
*/
|
||||
reagents.trans_to(M, bitesize)
|
||||
else
|
||||
reagents.trans_to(M, reagents.total_volume)
|
||||
bitecount++
|
||||
On_Consume(M)
|
||||
var/mob/living/carbon/C = M
|
||||
if(C.eat(src, user))
|
||||
bitecount++
|
||||
On_Consume(C)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/afterattack(obj/target, mob/user, proximity)
|
||||
@@ -145,30 +80,30 @@
|
||||
|
||||
var/obj/item/weapon/kitchen/utensil/U = W
|
||||
|
||||
if(!U.reagents)
|
||||
U.create_reagents(5)
|
||||
|
||||
if (U.reagents.total_volume > 0)
|
||||
user << "\red You already have something on your [U]."
|
||||
if(U.contents.len >= U.max_contents)
|
||||
user << "<span class='warning'>You cannot fit anything else on your [U]."
|
||||
return
|
||||
|
||||
user.visible_message( \
|
||||
"[user] scoops up some [src] with \the [U]!", \
|
||||
"\blue You scoop up some [src] with \the [U]!" \
|
||||
"<span class='notice'>You scoop up some [src] with \the [U]!" \
|
||||
)
|
||||
|
||||
src.bitecount++
|
||||
U.overlays.Cut()
|
||||
U.loaded = "[src]"
|
||||
var/image/I = new(U.icon, "loadedfood")
|
||||
I.color = src.filling_color
|
||||
U.overlays += I
|
||||
|
||||
reagents.trans_to(U,min(reagents.total_volume,5))
|
||||
|
||||
if (reagents.total_volume <= 0)
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/collected = new type
|
||||
collected.loc = U
|
||||
collected.reagents.remove_any(collected.reagents.total_volume)
|
||||
if(reagents.total_volume > bitesize)
|
||||
reagents.trans_to(collected, bitesize)
|
||||
else
|
||||
reagents.trans_to(collected, reagents.total_volume)
|
||||
qdel(src)
|
||||
return
|
||||
return 1
|
||||
|
||||
if((slices_num <= 0 || !slices_num) || !slice_path)
|
||||
return 0
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Pills.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/obj/item/weapon/reagent_containers/pill
|
||||
/obj/item/weapon/reagent_containers/food/pill
|
||||
name = "pill"
|
||||
desc = "a pill."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
@@ -9,107 +9,59 @@
|
||||
item_state = "pill"
|
||||
possible_transfer_amounts = null
|
||||
volume = 50
|
||||
var/apply_type = INGEST
|
||||
var/apply_method = "swallow"
|
||||
var/transfer_efficiency = 1.0
|
||||
consume_sound = null
|
||||
|
||||
New()
|
||||
..()
|
||||
if(!icon_state)
|
||||
icon_state = "pill[rand(1,20)]"
|
||||
|
||||
attack_self(mob/user as mob)
|
||||
/obj/item/weapon/reagent_containers/food/pill/attack_self(mob/user as mob)
|
||||
return
|
||||
attack(mob/M as mob, mob/user as mob, def_zone)
|
||||
if(M == user)
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
user << "Where do you intend to put \the [src]? You don't have a mouth!"
|
||||
return
|
||||
|
||||
M << "<span class='notify'>You [apply_method] [src].</span>"
|
||||
M.unEquip(src) //icon update
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, apply_type)
|
||||
spawn(0)
|
||||
reagents.trans_to(M, reagents.total_volume*transfer_efficiency)
|
||||
qdel(src)
|
||||
else
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
else if(istype(M, /mob/living/carbon/human) )
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
|
||||
return
|
||||
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message("<span class='warning'>[user] attempts to force [M] to [apply_method] [src].</span>", 1)
|
||||
|
||||
if(!do_mob(user, M)) return
|
||||
|
||||
user.unEquip(src) //icon update
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message("<span class='warning'>[user] forces [M] to [apply_method] [src].</span>", 1)
|
||||
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been fed [src.name] by [key_name(user)] Reagents: [reagentlist(src)]</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [src.name] to [key_name(M)]) Reagents: [reagentlist(src)]</font>")
|
||||
if(M.ckey)
|
||||
msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [src.name] Reagents: [reagentlist(src)] (INTENT: [uppertext(user.a_intent)])")
|
||||
if(!iscarbon(user))
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, apply_type)
|
||||
spawn(0)
|
||||
reagents.trans_to(M, reagents.total_volume*transfer_efficiency)
|
||||
qdel(src)
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/pill/attack(var/mob/living/carbon/M, mob/user as mob, def_zone)
|
||||
if(!istype(M))
|
||||
return 0
|
||||
bitesize = reagents.total_volume
|
||||
if(M.eat(src, user))
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
/obj/item/weapon/reagent_containers/food/pill/afterattack(obj/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
|
||||
if(target.is_open_container() != 0 && target.reagents)
|
||||
if(!target.reagents.total_volume)
|
||||
user << "<span class='warning'>[target] is empty. Cant dissolve [src].</span>"
|
||||
return
|
||||
if(target.is_open_container() != 0 && target.reagents)
|
||||
if(!target.reagents.total_volume)
|
||||
user << "<span class='warning'>[target] is empty. Cant dissolve [src].</span>"
|
||||
return
|
||||
|
||||
// /vg/: Logging transfers of bad things
|
||||
if(target.reagents_to_log.len)
|
||||
var/list/badshit=list()
|
||||
for(var/bad_reagent in target.reagents_to_log)
|
||||
if(reagents.has_reagent(bad_reagent))
|
||||
badshit += reagents_to_log[bad_reagent]
|
||||
if(badshit.len)
|
||||
var/hl="\red <b>([english_list(badshit)])</b> \black"
|
||||
message_admins("[user.name] ([user.ckey]) added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
log_game("[user.name] ([user.ckey]) added [reagents.get_reagent_ids(1)] to \a [target] with [src].")
|
||||
// /vg/: Logging transfers of bad things
|
||||
if(target.reagents_to_log.len)
|
||||
var/list/badshit=list()
|
||||
for(var/bad_reagent in target.reagents_to_log)
|
||||
if(reagents.has_reagent(bad_reagent))
|
||||
badshit += reagents_to_log[bad_reagent]
|
||||
if(badshit.len)
|
||||
var/hl="\red <b>([english_list(badshit)])</b> \black"
|
||||
message_admins("[user.name] ([user.ckey]) added [reagents.get_reagent_ids(1)] to \a [target] with [src].[hl] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
log_game("[user.name] ([user.ckey]) added [reagents.get_reagent_ids(1)] to \a [target] with [src].")
|
||||
|
||||
user << "<span class='notify'>You dissolve [src] in [target].</span>"
|
||||
reagents.trans_to(target, reagents.total_volume)
|
||||
for(var/mob/O in viewers(2, user))
|
||||
O.show_message("<span class='warning'>[user] puts something in [target].</span>", 1)
|
||||
spawn(5)
|
||||
qdel(src)
|
||||
user << "<span class='notify'>You dissolve [src] in [target].</span>"
|
||||
reagents.trans_to(target, reagents.total_volume)
|
||||
for(var/mob/O in viewers(2, user))
|
||||
O.show_message("<span class='warning'>[user] puts something in [target].</span>", 1)
|
||||
spawn(5)
|
||||
qdel(src)
|
||||
|
||||
return
|
||||
return
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// Pills. END
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Pills
|
||||
/obj/item/weapon/reagent_containers/pill/tox
|
||||
/obj/item/weapon/reagent_containers/food/pill/tox
|
||||
name = "Toxins pill"
|
||||
desc = "Highly toxic."
|
||||
icon_state = "pill5"
|
||||
@@ -117,7 +69,7 @@
|
||||
..()
|
||||
reagents.add_reagent("toxin", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/initropidril
|
||||
/obj/item/weapon/reagent_containers/food/pill/initropidril
|
||||
name = "initropidril pill"
|
||||
desc = "Don't swallow this."
|
||||
icon_state = "pill5"
|
||||
@@ -125,7 +77,7 @@
|
||||
..()
|
||||
reagents.add_reagent("initropidril", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/adminordrazine
|
||||
/obj/item/weapon/reagent_containers/food/pill/adminordrazine
|
||||
name = "Adminordrazine pill"
|
||||
desc = "It's magic. We don't have to explain it."
|
||||
icon_state = "pill16"
|
||||
@@ -133,7 +85,7 @@
|
||||
..()
|
||||
reagents.add_reagent("adminordrazine", 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/methamphetamine
|
||||
/obj/item/weapon/reagent_containers/food/pill/methamphetamine
|
||||
name = "Methamphetamine pill"
|
||||
desc = "Helps improve the ability to concentrate."
|
||||
icon_state = "pill8"
|
||||
@@ -141,7 +93,7 @@
|
||||
..()
|
||||
reagents.add_reagent("methamphetamine", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/haloperidol
|
||||
/obj/item/weapon/reagent_containers/food/pill/haloperidol
|
||||
name = "Haloperidol pill"
|
||||
desc = "Haloperidol is an anti-psychotic use to treat psychiatric problems."
|
||||
icon_state = "pill8"
|
||||
@@ -149,7 +101,7 @@
|
||||
..()
|
||||
reagents.add_reagent("haloperidol", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/paroxetine
|
||||
/obj/item/weapon/reagent_containers/food/pill/paroxetine
|
||||
name = "Paroxetine pill"
|
||||
desc = "Heavy anti-depressant."
|
||||
icon_state = "pill8"
|
||||
@@ -158,7 +110,7 @@
|
||||
reagents.add_reagent("paroxetine", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/happy
|
||||
/obj/item/weapon/reagent_containers/food/pill/happy
|
||||
name = "Happy pill"
|
||||
desc = "Happy happy joy joy!"
|
||||
icon_state = "pill18"
|
||||
@@ -167,7 +119,7 @@
|
||||
reagents.add_reagent("space_drugs", 15)
|
||||
reagents.add_reagent("sugar", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/zoom
|
||||
/obj/item/weapon/reagent_containers/food/pill/zoom
|
||||
name = "Zoom pill"
|
||||
desc = "Zoooom!"
|
||||
icon_state = "pill18"
|
||||
@@ -176,7 +128,7 @@
|
||||
reagents.add_reagent("synaptizine", 5)
|
||||
reagents.add_reagent("methamphetamine", 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/charcoal
|
||||
/obj/item/weapon/reagent_containers/food/pill/charcoal
|
||||
name = "Charcoal pill"
|
||||
desc = "Neutralizes many common toxins."
|
||||
icon_state = "pill17"
|
||||
@@ -184,7 +136,7 @@
|
||||
..()
|
||||
reagents.add_reagent("charcoal", 25)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/salicylic
|
||||
/obj/item/weapon/reagent_containers/food/pill/salicylic
|
||||
name = "Salicylic Acid pill"
|
||||
desc = "Commonly used to treat moderate pain and fevers."
|
||||
icon_state = "pill4"
|
||||
@@ -192,7 +144,7 @@
|
||||
..()
|
||||
reagents.add_reagent("sal_acid", 20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/salbutamol
|
||||
/obj/item/weapon/reagent_containers/food/pill/salbutamol
|
||||
name = "Salbutamol pill"
|
||||
desc = "Used to treat respiratory distress."
|
||||
icon_state = "pill8"
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
possible_transfer_amounts = null //list(5,10,15)
|
||||
volume = 15
|
||||
w_class = 1
|
||||
sharp = 1
|
||||
var/mode = SYRINGE_DRAW
|
||||
|
||||
on_reagent_change()
|
||||
|
||||
@@ -17,6 +17,7 @@ The currently supporting non-reagent materials:
|
||||
- MAT_URANIUM (/obj/item/stack/uranium).
|
||||
- MAT_DIAMOND (/obj/item/stack/diamond).
|
||||
- MAT_BANANIUM (/obj/item/stack/bananium).
|
||||
- MAT_TRANQUILLITE (/obj/item/stack/tranquillite).
|
||||
(Insert new ones here)
|
||||
|
||||
Don't add new keyword/IDs if they are made from an existing one (such as rods which are made from metal). Only add raw materials.
|
||||
|
||||
@@ -166,3 +166,33 @@
|
||||
materials = list(MAT_GLASS = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting
|
||||
category = list("Exosuit Modules")
|
||||
|
||||
/datum/design/recitence_main
|
||||
name = "Exosuit Module (\"Recitence\" Central Control module)"
|
||||
desc = "Allows for the construction of a \"Recitence\" Central Control module."
|
||||
id = "recitence_main"
|
||||
req_tech = list("programming" = 3)
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/recitence/main
|
||||
category = list("Exosuit Modules")
|
||||
|
||||
/datum/design/recitence_peri
|
||||
name = "Exosuit Module (\"Recitence\" Peripherals Control module)"
|
||||
desc = "Allows for the construction of a \"Recitence\" Peripheral Control module."
|
||||
id = "recitence_peri"
|
||||
req_tech = list("programming" = 3)
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/recitence/peripherals
|
||||
category = list("Exosuit Modules")
|
||||
|
||||
/datum/design/recitence_targ
|
||||
name = "Exosuit Module (\"Recitence\" Weapons & Targeting Control module)"
|
||||
desc = "Allows for the construction of a \"Recitence\" Weapons & Targeting Control module."
|
||||
id = "recitence_targ"
|
||||
req_tech = list("programming" = 3)
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/recitence/targeting
|
||||
category = list("Exosuit Modules")
|
||||
@@ -459,6 +459,70 @@
|
||||
construction_time = 200
|
||||
category = list("H.O.N.K")
|
||||
|
||||
//Recitence
|
||||
/datum/design/recitence_chassis
|
||||
name = "Exosuit Chassis (\"Recitence\")"
|
||||
id = "recitence_chassis"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/chassis/recitence
|
||||
materials = list(MAT_METAL=20000)
|
||||
construction_time = 100
|
||||
category = list("Recitence")
|
||||
|
||||
/datum/design/recitence_torso
|
||||
name = "Exosuit Torso (\"Recitence\")"
|
||||
id = "recitence_torso"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/part/recitence_torso
|
||||
materials = list(MAT_METAL=20000,MAT_GLASS=10000,MAT_TRANQUILLITE=10000)
|
||||
construction_time = 300
|
||||
category = list("Recitence")
|
||||
|
||||
/datum/design/recitence_head
|
||||
name = "Exosuit Head (\"Recitence\")"
|
||||
id = "recitence_head"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/part/recitence_head
|
||||
materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_TRANQUILLITE=5000)
|
||||
construction_time = 200
|
||||
category = list("Recitence")
|
||||
|
||||
/datum/design/recitence_left_arm
|
||||
name = "Exosuit Left Arm (\"Recitence\")"
|
||||
id = "recitence_left_arm"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/part/recitence_left_arm
|
||||
materials = list(MAT_METAL=15000,MAT_TRANQUILLITE=5000)
|
||||
construction_time = 200
|
||||
category = list("Recitence")
|
||||
|
||||
/datum/design/recitence_right_arm
|
||||
name = "Exosuit Right Arm (\"Recitence\")"
|
||||
id = "recitence_right_arm"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/part/recitence_right_arm
|
||||
materials = list(MAT_METAL=15000,MAT_TRANQUILLITE=5000)
|
||||
construction_time = 200
|
||||
category = list("Recitence")
|
||||
|
||||
/datum/design/recitence_left_leg
|
||||
name = "Exosuit Left Leg (\"Recitence\")"
|
||||
id = "recitence_left_leg"
|
||||
build_type = MECHFAB
|
||||
build_path =/obj/item/mecha_parts/part/recitence_left_leg
|
||||
materials = list(MAT_METAL=20000,MAT_TRANQUILLITE=5000)
|
||||
construction_time = 200
|
||||
category = list("Recitence")
|
||||
|
||||
/datum/design/recitence_right_leg
|
||||
name = "Exosuit Right Leg (\"Recitence\")"
|
||||
id = "recitence_right_leg"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/part/recitence_right_leg
|
||||
materials = list(MAT_METAL=20000,MAT_TRANQUILLITE=5000)
|
||||
construction_time = 200
|
||||
category = list("Recitence")
|
||||
|
||||
//Phazon
|
||||
/datum/design/phazon_chassis
|
||||
name = "Exosuit Chassis (\"Phazon\")"
|
||||
@@ -573,6 +637,7 @@
|
||||
name = "Exosuit Medical Equipment (Mounted Sleeper)"
|
||||
id = "mech_sleeper"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("biotech" = 2)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tool/sleeper
|
||||
materials = list(MAT_METAL=5000,MAT_GLASS=10000)
|
||||
construction_time = 100
|
||||
@@ -582,6 +647,7 @@
|
||||
name = "Exosuit Medical Equipment (Syringe Gun)"
|
||||
id = "mech_syringe_gun"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("magnets" = 3,"biotech" = 3)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
|
||||
materials = list(MAT_METAL=3000,MAT_GLASS=2000)
|
||||
construction_time = 200
|
||||
@@ -600,6 +666,7 @@
|
||||
name = "Exosuit Weapon (PBT \"Pacifier\" Mounted Taser)"
|
||||
id = "mech_taser"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("combat" = 2)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser
|
||||
materials = list(MAT_METAL=10000)
|
||||
construction_time = 100
|
||||
@@ -609,6 +676,7 @@
|
||||
name = "Exosuit Weapon (\"Ultra AC 2\" LMG)"
|
||||
id = "mech_lmg"
|
||||
build_type = MECHFAB
|
||||
req_tech = list("combat" = 2)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
|
||||
materials = list(MAT_METAL=10000)
|
||||
construction_time = 100
|
||||
@@ -641,6 +709,25 @@
|
||||
construction_time = 300
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
/datum/design/mech_silentgun
|
||||
name = "S.H.H. \"Quietus\" Carbine"
|
||||
id = "mech_silentgun"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine/silenced
|
||||
materials = list(MAT_METAL=20000,MAT_TRANQUILLITE=10000)
|
||||
construction_time = 500
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
/datum/design/mech_mimercd
|
||||
name = "Exosuit Module (Mime RCD Module)"
|
||||
desc = "An exosuit-mounted Mime Rapid Construction Device."
|
||||
id = "mech_mrcd"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tool/mimercd
|
||||
materials = list(MAT_METAL=30000,MAT_TRANQUILLITE=10000)
|
||||
construction_time = 700
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
// Exosuit Modules
|
||||
/datum/design/mech_diamond_drill
|
||||
name = "Exosuit Module (Diamond Mining Drill)"
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
name = "Nanopaste"
|
||||
desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
|
||||
id = "nanopaste"
|
||||
req_tech = list("materials" = 4, "engineering" = 3)
|
||||
req_tech = list("materials" = 3, "engineering" = 2)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 7000, MAT_GLASS = 7000)
|
||||
build_path = /obj/item/stack/nanopaste
|
||||
@@ -209,9 +209,10 @@
|
||||
id = "ci-welding"
|
||||
req_tech = list("materials" = 4, "biotech" = 2)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
construction_time = 40
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 400)
|
||||
build_path = /obj/item/organ/internal/cyberimp/eyes/shield
|
||||
category = list("Misc", "Medical Designs")
|
||||
category = list("Misc", "Medical")
|
||||
|
||||
/datum/design/cyberimp_medical_hud
|
||||
name = "Medical HUD implant"
|
||||
@@ -219,9 +220,10 @@
|
||||
id = "ci-medhud"
|
||||
req_tech = list("materials" = 6, "programming" = 4, "biotech" = 4)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
construction_time = 50
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 500, MAT_GOLD = 500)
|
||||
build_path = /obj/item/organ/internal/cyberimp/eyes/hud/medical
|
||||
category = list("Misc", "Medical Designs")
|
||||
category = list("Misc", "Medical")
|
||||
|
||||
/datum/design/cyberimp_security_hud
|
||||
name = "Security HUD implant"
|
||||
@@ -229,9 +231,10 @@
|
||||
id = "ci-sechud"
|
||||
req_tech = list("materials" = 6, "programming" = 5, "biotech" = 4, "combat" = 2)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
construction_time = 50
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 750, MAT_GOLD = 750)
|
||||
build_path = /obj/item/organ/internal/cyberimp/eyes/hud/security
|
||||
category = list("Misc", "Medical Designs")
|
||||
category = list("Misc", "Medical")
|
||||
|
||||
/datum/design/cyberimp_xray
|
||||
name = "X-Ray implant"
|
||||
@@ -239,9 +242,10 @@
|
||||
id = "ci-xray"
|
||||
req_tech = list("materials" = 7, "programming" = 5, "biotech" = 6, "magnets" = 5)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
construction_time = 60
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_URANIUM = 1000, MAT_DIAMOND = 2000)
|
||||
build_path = /obj/item/organ/internal/cyberimp/eyes/xray
|
||||
category = list("Misc", "Medical Designs")
|
||||
category = list("Misc", "Medical")
|
||||
|
||||
/datum/design/cyberimp_thermals
|
||||
name = "Thermals implant"
|
||||
@@ -249,9 +253,10 @@
|
||||
id = "ci-thermals"
|
||||
req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5, "magnets" = 5, "syndicate" = 5)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
construction_time = 60
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 600, MAT_GOLD = 600, MAT_PLASMA = 1000, MAT_DIAMOND = 2000)
|
||||
build_path = /obj/item/organ/internal/cyberimp/eyes/thermals
|
||||
category = list("Misc", "Medical Designs")
|
||||
category = list("Misc", "Medical")
|
||||
|
||||
/datum/design/cyberimp_antidrop
|
||||
name = "Anti-Drop implant"
|
||||
@@ -259,9 +264,10 @@
|
||||
id = "ci-antidrop"
|
||||
req_tech = list("materials" = 7, "programming" = 5, "biotech" = 5)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
construction_time = 60
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 400, MAT_GOLD = 400)
|
||||
build_path = /obj/item/organ/internal/cyberimp/brain/anti_drop
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc", "Medical")
|
||||
|
||||
/datum/design/cyberimp_antistun
|
||||
name = "CNS Rebooter implant"
|
||||
@@ -269,9 +275,10 @@
|
||||
id = "ci-antistun"
|
||||
req_tech = list("materials" = 7, "programming" = 5, "biotech" = 6)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
construction_time = 60
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_SILVER = 500, MAT_GOLD = 1000)
|
||||
build_path = /obj/item/organ/internal/cyberimp/brain/anti_stun
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc", "Medical")
|
||||
|
||||
/datum/design/cyberimp_nutriment
|
||||
name = "Nutriment pump implant"
|
||||
@@ -279,9 +286,10 @@
|
||||
id = "ci-nutriment"
|
||||
req_tech = list("materials" = 6, "programming" = 4, "biotech" = 5)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
construction_time = 40
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 500, MAT_URANIUM = 500)
|
||||
build_path = /obj/item/organ/internal/cyberimp/chest/nutriment
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc", "Medical")
|
||||
|
||||
/datum/design/cyberimp_nutriment_plus
|
||||
name = "Nutriment pump implant PLUS"
|
||||
@@ -289,9 +297,10 @@
|
||||
id = "ci-nutrimentplus"
|
||||
req_tech = list("materials" = 6, "programming" = 4, "biotech" = 6)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
construction_time = 50
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 500, MAT_URANIUM = 750)
|
||||
build_path = /obj/item/organ/internal/cyberimp/chest/nutriment/plus
|
||||
category = list("Medical Designs")
|
||||
category = list("Misc", "Medical")
|
||||
|
||||
/datum/design/cyberimp_reviver
|
||||
name = "Reviver implant"
|
||||
@@ -299,9 +308,10 @@
|
||||
id = "ci-reviver"
|
||||
req_tech = list("materials" = 6, "programming" = 4, "biotech" = 7, "syndicate" = 4)
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
construction_time = 60
|
||||
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 500, MAT_URANIUM = 1000, MAT_DIAMOND = 2000)
|
||||
build_path = /obj/item/organ/internal/cyberimp/chest/reviver
|
||||
category = list("Misc", "Medical Designs")
|
||||
category = list("Misc", "Medical")
|
||||
|
||||
/////////////////////////////////////////
|
||||
////////////Regular Implants/////////////
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
name = "Decloner"
|
||||
desc = "Your opponent will bubble into a messy pile of goop."
|
||||
id = "decloner"
|
||||
req_tech = list("combat" = 6, "materials" = 7, "biotech" = 5, "powerstorage" = 6)
|
||||
req_tech = list("combat" = 8, "materials" = 7, "biotech" = 5, "powerstorage" = 6)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GOLD = 5000,MAT_URANIUM = 10000)
|
||||
reagents = list("mutagen" = 40)
|
||||
@@ -118,7 +118,7 @@
|
||||
name = "Plasma Pistol"
|
||||
desc = "A specialized firearm designed to fire lethal bolts of toxins."
|
||||
id = "ppistol"
|
||||
req_tech = list("combat" = 5, "plasmatech" = 4)
|
||||
req_tech = list("combat" = 4, "plasmatech" = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 1000, MAT_PLASMA = 3000)
|
||||
build_path = /obj/item/weapon/gun/energy/toxgun
|
||||
|
||||
@@ -76,6 +76,8 @@ var/global/list/obj/machinery/message_server/message_servers = list()
|
||||
if(active && (stat & (BROKEN|NOPOWER)))
|
||||
active = 0
|
||||
return
|
||||
if(prob(3))
|
||||
playsound(loc, "computer_ambience", 50, 1)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
@@ -90,6 +90,8 @@ proc/CallMaterialName(ID)
|
||||
return_name = "Diamond"
|
||||
if("clown")
|
||||
return_name = "Bananium"
|
||||
if("mime")
|
||||
return_name = "Tranquillite"
|
||||
else
|
||||
for(var/R in subtypesof(/datum/reagent))
|
||||
temp_reagent = null
|
||||
@@ -535,6 +537,8 @@ proc/CallMaterialName(ID)
|
||||
MAT = MAT_DIAMOND
|
||||
if("clown")
|
||||
MAT = MAT_BANANIUM
|
||||
if("mime")
|
||||
MAT = "Tranquillite"
|
||||
linked_lathe.materials.retrieve_sheets(desired_num_sheets, MAT)
|
||||
|
||||
else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the protolathe to eject a sheet of material
|
||||
@@ -1011,6 +1015,15 @@ proc/CallMaterialName(ID)
|
||||
if(bananium_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];lathe_ejectsheet=clown;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(bananium_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=clown;lathe_ejectsheet_amt=50'>All</A>"
|
||||
dat += "</div>"
|
||||
//Tranquillite
|
||||
var/tranquillite_amount = linked_lathe.materials.amount(MAT_TRANQUILLITE)
|
||||
dat += "* [tranquillite_amount] of Tranquillite, [round(tranquillite_amount / MINERAL_MATERIAL_AMOUNT,0.1)] sheets: "
|
||||
if(tranquillite_amount >= MINERAL_MATERIAL_AMOUNT)
|
||||
dat += "<A href='?src=\ref[src];lathe_ejectsheet=mime;lathe_ejectsheet_amt=1'>Eject</A> "
|
||||
dat += "<A href='?src=\ref[src];lathe_ejectsheet=mime;lathe_ejectsheet_amt=custom'>C</A> "
|
||||
if(tranquillite_amount >= MINERAL_MATERIAL_AMOUNT*5) dat += "<A href='?src=\ref[src];lathe_ejectsheet=mime;lathe_ejectsheet_amt=5'>5x</A> "
|
||||
if(tranquillite_amount >= MINERAL_MATERIAL_AMOUNT) dat += "<A href='?src=\ref[src];lathe_ejectsheet=mime;lathe_ejectsheet_amt=50'>All</A>"
|
||||
dat += "</div>"
|
||||
|
||||
if(3.3)
|
||||
dat += "<A href='?src=\ref[src];menu=1.0'>Main Menu</A>"
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/heating_power = 40000
|
||||
var/delay = 10
|
||||
req_access = list(access_rd) //Only the R&D can change server settings.
|
||||
var/plays_sound = 0
|
||||
|
||||
/obj/machinery/r_n_d/server/New()
|
||||
..()
|
||||
@@ -58,6 +59,9 @@
|
||||
id_with_download += text2num(N)
|
||||
|
||||
/obj/machinery/r_n_d/server/process()
|
||||
if(prob(3) && plays_sound)
|
||||
playsound(loc, "computer_ambience", 50, 1)
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
switch(environment.temperature)
|
||||
if(0 to T0C)
|
||||
@@ -341,6 +345,7 @@
|
||||
id_with_upload_string = "1;3"
|
||||
id_with_download_string = "1;3"
|
||||
server_id = 1
|
||||
plays_sound = 1
|
||||
|
||||
/obj/machinery/r_n_d/server/robotics
|
||||
name = "Robotics and Mechanic R&D Server"
|
||||
|
||||
@@ -300,7 +300,7 @@ datum/genesequence
|
||||
/obj/item/weapon/circuitboard/reconstitutor
|
||||
name = "Circuit board (Flora Reconstitution Console)"
|
||||
build_path = "/obj/machinery/computer/reconstitutor"
|
||||
origin_tech = "programming=2;biotech=4;materials=6"
|
||||
origin_tech = "programming=2;biotech=3;materials=4"
|
||||
frame_desc = "Requires 2 Advanced Scanning Module, 1 Nano Manipulator, 1 Matter Bin and 1 Advanced Capacitor."
|
||||
req_components = list(
|
||||
"/obj/item/weapon/stock_parts/scanning_module/adv" = 2,
|
||||
|
||||
@@ -73,6 +73,7 @@
|
||||
results = get_scan_info(scanned_object)
|
||||
|
||||
src.visible_message("<b>[name]</b> states, \"Scanning complete.\"")
|
||||
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
|
||||
var/obj/item/weapon/paper/P = new(src.loc)
|
||||
P.name = "[src] report #[++report_num]"
|
||||
P.info = "<b>[src] analysis report #[report_num]</b><br>"
|
||||
|
||||
@@ -259,6 +259,7 @@
|
||||
|
||||
if(scanned_item)
|
||||
//create report
|
||||
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
|
||||
var/obj/item/weapon/paper/P = new(src)
|
||||
P.name = "[src] report #[++report_num]: [scanned_item.name]"
|
||||
P.stamped = list(/obj/item/weapon/stamp)
|
||||
|
||||
@@ -215,39 +215,13 @@
|
||||
user << "<span class='notice'>You offer the sentience potion to [M]...</span>"
|
||||
being_used = 1
|
||||
|
||||
var/list/candidates = get_candidates(ROLE_SENTIENT, ALIEN_AFK_BRACKET)
|
||||
|
||||
shuffle(candidates)
|
||||
|
||||
var/time_passed = world.time
|
||||
var/list/consenting_candidates = list()
|
||||
|
||||
for(var/candidate in candidates)
|
||||
|
||||
if(candidate in not_interested)
|
||||
continue
|
||||
|
||||
spawn(0)
|
||||
switch(alert(candidate, "Would you like to play as [M.name]? Please choose quickly!","Confirmation","Yes","No"))
|
||||
if("Yes")
|
||||
if((world.time-time_passed)>=50 || !src)
|
||||
return
|
||||
consenting_candidates += candidate
|
||||
if("No")
|
||||
if(!src)
|
||||
return
|
||||
not_interested += candidate
|
||||
|
||||
sleep(50)
|
||||
var/list/candidates = pollCandidates("Do you want to play as [M.name]?", ROLE_SENTIENT, 0, 100)
|
||||
|
||||
if(!src)
|
||||
return
|
||||
|
||||
listclearnulls(consenting_candidates) //some candidates might have left during sleep(50)
|
||||
|
||||
if(consenting_candidates.len)
|
||||
var/client/C = null
|
||||
C = pick(consenting_candidates)
|
||||
if(candidates.len)
|
||||
var/mob/C = pick(candidates)
|
||||
M.key = C.key
|
||||
M.universal_speak = 1
|
||||
M.faction |= "sentient"
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
/datum/surgery_step/glue_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && !(affected.status & ORGAN_ROBOT) && affected.open == 2 && affected.stage == 0
|
||||
return affected && !(affected.status & ORGAN_ROBOT) && !(affected.cannot_break) && affected.open == 2 && affected.stage == 0
|
||||
|
||||
/datum/surgery_step/glue_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
@@ -155,7 +155,9 @@
|
||||
if(!istype(I, /obj/item/organ))
|
||||
IC = I
|
||||
break
|
||||
if(tool)
|
||||
if(istype(tool,/obj/item/weapon/cautery))
|
||||
user << "you prepare to close the cavity wall."
|
||||
else if(tool)
|
||||
user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \
|
||||
"You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." )
|
||||
else if(IC)
|
||||
@@ -170,16 +172,22 @@
|
||||
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
|
||||
|
||||
if(istype(tool, /obj/item/weapon/disk/nuclear))
|
||||
user << "Central command would kill you if you implanted the disk into someone."
|
||||
user << "<span class='warning'>Central command would kill you if you implanted the disk into someone.</span>"
|
||||
return 0//fail
|
||||
|
||||
if(istype(tool,/obj/item/organ))
|
||||
user << "This isn't the type of surgery for that!"
|
||||
user << "<span class='warning'>This isn't the type of surgery for organ transplants!</span>"
|
||||
return 0//fail
|
||||
|
||||
if(tool)
|
||||
if(!user.canUnEquip(tool, 0))
|
||||
user << "<span class='warning'>[tool] is stuck to your hand, you can't put it in [target]!</span>"
|
||||
return 0
|
||||
|
||||
if(istype(tool,/obj/item/weapon/cautery))
|
||||
return 1//god this is ugly....
|
||||
else if(tool)
|
||||
if(IC)
|
||||
user << "There seems to be something in there already!"
|
||||
user << "<span class='notice'>There seems to be something in there already!</span>"
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'> [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.</span>", \
|
||||
|
||||
@@ -34,6 +34,10 @@
|
||||
var/list/wounds = list()
|
||||
var/number_wounds = 0 // cache the number of wounds, which is NOT wounds.len!
|
||||
var/perma_injury = 0
|
||||
// 0: Don't fail when at full damage
|
||||
// 1: Neatly pop off at full damage, stop damage propogation
|
||||
// 2: Disintegrate at full damage, continue damage propogation
|
||||
var/fail_at_full_damage = 0
|
||||
|
||||
|
||||
var/obj/item/organ/external/parent
|
||||
@@ -151,15 +155,6 @@
|
||||
break
|
||||
parent.update_damages()
|
||||
|
||||
/obj/item/organ/external/robotize()
|
||||
..()
|
||||
//robot limbs take reduced damage
|
||||
brute_mod = 0.66
|
||||
burn_mod = 0.66
|
||||
// Robot parts also lack bones
|
||||
// This is so surgery isn't kaput, let's see how this does
|
||||
encased = null
|
||||
|
||||
/****************************************************
|
||||
DAMAGE PROCS
|
||||
****************************************************/
|
||||
@@ -174,8 +169,14 @@
|
||||
brute *= brute_mod
|
||||
burn *= burn_mod
|
||||
|
||||
// Threshold needed to have a chance of hurting internal bits with something sharp
|
||||
#define LIMB_SHARP_THRESH_INT_DMG 5
|
||||
// Threshold needed to have a chance of hurting internal bits
|
||||
#define LIMB_THRESH_INT_DMG 10
|
||||
// Probability of taking internal damage from sufficient force, while otherwise healthy
|
||||
#define LIMB_DMG_PROB 5
|
||||
// High brute damage or sharp objects may damage internal organs
|
||||
if(internal_organs && (brute_dam >= max_damage || (((sharp && brute >= 5) || brute >= 10) && prob(5))))
|
||||
if(internal_organs && (brute_dam >= max_damage || (((sharp && brute >= LIMB_SHARP_THRESH_INT_DMG) || brute >= LIMB_THRESH_INT_DMG) && prob(LIMB_DMG_PROB))))
|
||||
// Damage an internal organ
|
||||
if(internal_organs && internal_organs.len)
|
||||
var/obj/item/organ/internal/I = pick(internal_organs)
|
||||
@@ -222,8 +223,8 @@
|
||||
burn = max(0, burn - can_inflict)
|
||||
//If there are still hurties to dispense
|
||||
if (burn || brute)
|
||||
if (status & ORGAN_ROBOT && body_part != UPPER_TORSO && body_part != LOWER_TORSO)
|
||||
droplimb(1) //Robot limbs just kinda fail at full damage.
|
||||
if (fail_at_full_damage == 1 && body_part != UPPER_TORSO && body_part != LOWER_TORSO)
|
||||
droplimb(1) //Clean loss, just drop the limb and be done
|
||||
else
|
||||
//List organs we can pass it to
|
||||
var/list/obj/item/organ/external/possible_points = list()
|
||||
@@ -237,6 +238,13 @@
|
||||
//And pass the pain around
|
||||
var/obj/item/organ/external/target = pick(possible_points)
|
||||
target.take_damage(brute, burn, sharp, edge, used_weapon, forbidden_limbs + src)
|
||||
if(fail_at_full_damage == 2 && body_part != UPPER_TORSO && body_part != LOWER_TORSO)
|
||||
var/losstype
|
||||
if(burn > brute)
|
||||
losstype = DROPLIMB_BURN
|
||||
else
|
||||
losstype = DROPLIMB_BLUNT
|
||||
droplimb(0, losstype) // less clean than a robot arm, doesn't buffer damage either
|
||||
|
||||
// sync the organ's damage with its wounds
|
||||
src.update_damages()
|
||||
@@ -251,6 +259,11 @@
|
||||
if(owner_old) owner_old.updatehealth()
|
||||
return update_icon()
|
||||
|
||||
#undef LIMB_SHARP_THRESH_INT_DMG
|
||||
#undef LIMB_THRESH_INT_DMG
|
||||
#undef LIMB_DMG_PROB
|
||||
#undef LIMB_NO_BONE_DMG_PROB
|
||||
|
||||
/obj/item/organ/external/proc/heal_damage(brute, burn, internal = 0, robo_repair = 0)
|
||||
if(status & ORGAN_ROBOT && !robo_repair)
|
||||
return
|
||||
@@ -699,6 +712,9 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30)
|
||||
dir = 2
|
||||
return
|
||||
else
|
||||
qdel(src) // If you flashed away to ashes, YOU FLASHED AWAY TO ASHES
|
||||
return
|
||||
|
||||
/****************************************************
|
||||
HELPERS
|
||||
@@ -788,6 +804,17 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
status &= ~ORGAN_BROKEN
|
||||
return 1
|
||||
|
||||
// I put these two next to each other to highlight that both exist. This should likely be resolved.
|
||||
/obj/item/organ/external/robotize()
|
||||
..()
|
||||
//robot limbs take reduced damage
|
||||
brute_mod = 0.66
|
||||
burn_mod = 0.66
|
||||
// Robot parts also lack bones
|
||||
// This is so surgery isn't kaput, let's see how this does
|
||||
encased = null
|
||||
fail_at_full_damage = 1
|
||||
|
||||
/obj/item/organ/external/robotize(var/company)
|
||||
..()
|
||||
|
||||
@@ -870,7 +897,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
O.forceMove(src)
|
||||
|
||||
// Grab all the internal giblets too.
|
||||
for(var/obj/item/organ/organ in internal_organs)
|
||||
for(var/obj/item/organ/internal/organ in internal_organs)
|
||||
organ.remove()
|
||||
organ.forceMove(src)
|
||||
|
||||
|
||||
@@ -76,6 +76,8 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/internal/proc/prepare_eat()
|
||||
if(robotic)
|
||||
return //no eating cybernetic implants!
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/organ/S = new
|
||||
S.name = name
|
||||
S.desc = desc
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/organ/external/stump
|
||||
name = "limb stump"
|
||||
icon_name = ""
|
||||
var/can_intake_reagents = 0
|
||||
|
||||
/obj/item/organ/external/stump/New(var/mob/living/carbon/holder, var/internal, var/obj/item/organ/external/limb)
|
||||
if(istype(limb))
|
||||
@@ -23,4 +24,5 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/item/organ/external/stump/is_usable()
|
||||
return 0
|
||||
return 0
|
||||
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
parent_organ = "groin"
|
||||
slot = "appendix"
|
||||
|
||||
/obj/item/organ/internal/eyes/diona
|
||||
/obj/item/organ/internal/diona_receptor
|
||||
name = "receptor node"
|
||||
organ_tag = "eyes"
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
|
||||
@@ -111,6 +111,11 @@
|
||||
/obj/item/organ/external/hand/remove()
|
||||
if(owner.gloves)
|
||||
owner.unEquip(owner.gloves)
|
||||
if(owner.l_hand)
|
||||
owner.unEquip(owner.l_hand,1)
|
||||
if(owner.r_hand)
|
||||
owner.unEquip(owner.r_hand,1)
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/hand/right
|
||||
|
||||
@@ -114,6 +114,7 @@
|
||||
|
||||
/obj/item/organ/internal/xenos/acidgland
|
||||
name = "xeno acid gland"
|
||||
icon_state = "acid"
|
||||
parent_organ = "head"
|
||||
slot = "acid"
|
||||
origin_tech = "biotech=5;materials=2;combat=2"
|
||||
@@ -122,6 +123,7 @@
|
||||
|
||||
/obj/item/organ/internal/xenos/hivenode
|
||||
name = "xeno hive node"
|
||||
icon_state = "hivenode"
|
||||
parent_organ = "head"
|
||||
slot = "hivenode"
|
||||
origin_tech = "biotech=5;magnets=4;bluespace=3"
|
||||
@@ -148,7 +150,7 @@
|
||||
name = "xeno resin organ"//...there tiger....
|
||||
parent_organ = "mouth"
|
||||
icon_state = "liver-x"
|
||||
slot = "hivenode"
|
||||
slot = "spinner"
|
||||
origin_tech = "biotech=5;materials=4"
|
||||
alien_powers = list(/mob/living/carbon/alien/humanoid/proc/resin)
|
||||
|
||||
|
||||
@@ -143,7 +143,6 @@
|
||||
return -1
|
||||
|
||||
else if(implement_type in implements_mend)
|
||||
//todo Change message, make it heal the organs...
|
||||
current_type = "mend"
|
||||
var/tool_name = "\the [tool]"
|
||||
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
|
||||
@@ -163,11 +162,11 @@
|
||||
spread_germs_to_organ(I, user)
|
||||
user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \
|
||||
"You start treating damage to [target]'s [I.name] with [tool_name]." )
|
||||
else if(I.robotic > 2 && istype(tool, /obj/item/stack/nanopaste))
|
||||
else if(I.robotic >= 2 && istype(tool, /obj/item/stack/nanopaste))
|
||||
user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \
|
||||
"You start treating damage to [target]'s [I.name] with [tool_name]." )
|
||||
|
||||
user << "No organs appear to be damaged."
|
||||
user << "[I] does not appear to be damaged."
|
||||
H.custom_pain("The pain in your [affected.name] is living hell!",1)
|
||||
|
||||
else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ))
|
||||
@@ -195,7 +194,7 @@
|
||||
user.visible_message("<span class='notice'> [user] treats damage to [target]'s [I.name] with [tool_name].</span>", \
|
||||
"<span class='notice'> You treat damage to [target]'s [I.name] with [tool_name].</span>" )
|
||||
I.damage = 0
|
||||
else if(I.robotic > 2 && istype (tool, /obj/item/stack/nanopaste))
|
||||
else if(I.robotic >= 2 && istype (tool, /obj/item/stack/nanopaste))
|
||||
user.visible_message("<span class='notice'> [user] treats damage to [target]'s [I.name] with [tool_name].</span>", \
|
||||
"<span class='notice'> You treat damage to [target]'s [I.name] with [tool_name].</span>" )
|
||||
I.damage = 0
|
||||
@@ -205,6 +204,10 @@
|
||||
user.drop_item()
|
||||
I.insert(target)
|
||||
spread_germs_to_organ(I, user)
|
||||
if(!user.canUnEquip(I, 0))
|
||||
user << "<span class='warning'>[I] is stuck to your hand, you can't put it in [target]!</span>"
|
||||
return 0
|
||||
|
||||
if(affected)
|
||||
user.visible_message("<span class='notice'> [user] has transplanted \the [tool] into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'> You have transplanted \the [tool] into [target]'s [affected.name].</span>")
|
||||
|
||||
@@ -199,12 +199,12 @@
|
||||
// Dethrall Shadowling //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
/datum/surgery/remove_thrall
|
||||
name = "clense contaminations"//RENAME MEH
|
||||
steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall,/datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize)
|
||||
name = "cleanse contaminations"//RENAME MEH
|
||||
steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/dethrall,/datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize)
|
||||
possible_locs = list("head")
|
||||
|
||||
/datum/surgery/remove_thrall/synth
|
||||
name = "clense contaminations"//RENAME MEH
|
||||
name = "cleanse contaminations"//RENAME MEH
|
||||
steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/internal/dethrall,/datum/surgery_step/robotics/external/close_hatch)
|
||||
possible_locs = list("chest")
|
||||
|
||||
|
||||
@@ -265,7 +265,7 @@
|
||||
allowed_tools = list(/obj/item/device/mmi = 100)
|
||||
var/implements_extract = list(/obj/item/device/multitool = 100)
|
||||
var/implements_mend = list( /obj/item/stack/nanopaste = 100,/obj/item/weapon/bonegel = 30, /obj/item/weapon/screwdriver = 70)
|
||||
var/implements_insert = list(/obj/item/weapon/screwdriver = 100)
|
||||
var/implements_insert = list(/obj/item/organ/internal = 100)
|
||||
var/implements_finish =list(/obj/item/weapon/retractor = 100,/obj/item/weapon/crowbar = 100,/obj/item/weapon/kitchen/utensil = 50)
|
||||
var/current_type
|
||||
var/obj/item/organ/internal/I = null
|
||||
@@ -285,13 +285,11 @@
|
||||
affected = target.get_organ(target_zone)
|
||||
if(implement_type in implements_insert)
|
||||
current_type = "insert"
|
||||
//I = tool
|
||||
var/off_tool = user.get_inactive_hand()
|
||||
var/obj/item/organ/internal/I = tool
|
||||
|
||||
if(I.status != ORGAN_ROBOT || I.robotic != 2)
|
||||
user << "<span class='notice'>You can only implant cybernetic organs.</span>"
|
||||
|
||||
if(!off_tool || !istype(off_tool,/obj/item/organ/internal))
|
||||
user << "<span class='notice'>You need a replacement internal part in your off hand.</span>"
|
||||
return -1
|
||||
I = off_tool //and please god let it be an organ...
|
||||
if(target_zone != I.parent_organ || target.get_organ_slot(I.slot))
|
||||
user << "<span class='notice'>There is no room for [I] in [target]'s [parse_zone(target_zone)]!</span>"
|
||||
return -1
|
||||
@@ -304,8 +302,8 @@
|
||||
user << "<span class='warning'> \The [target] already has [I].</span>"
|
||||
return -1
|
||||
|
||||
user.visible_message("[user] begins reattaching [target]'s [off_tool] with \the [tool].", \
|
||||
"You start reattaching [target]'s [off_tool] with \the [tool].")
|
||||
user.visible_message("[user] begins reattaching [target]'s [tool].", \
|
||||
"You start reattaching [target]'s [tool].")
|
||||
target.custom_pain("Someone's rooting around in your [affected.name]!",1)
|
||||
else if(istype(tool,/obj/item/device/mmi))
|
||||
current_type = "install"
|
||||
@@ -407,18 +405,19 @@
|
||||
"<span class='notice'> You repair [target]'s [I.name] with [tool].</span>" )
|
||||
I.damage = 0
|
||||
else if(current_type == "insert")
|
||||
var/obj/item/organ/internal/I = target.get_int_organ(surgery.current_organ)
|
||||
var/obj/item/organ/internal/I = tool
|
||||
|
||||
var/off_tool = user.get_inactive_hand()
|
||||
I = off_tool
|
||||
//user.drop_item()
|
||||
if(!user.canUnEquip(I, 0))
|
||||
user << "<span class='warning'>[I] is stuck to your hand, you can't put it in [target]!</span>"
|
||||
return 0
|
||||
|
||||
user.drop_item()
|
||||
I.insert(target)
|
||||
user.visible_message("<span class='notice'> [user] has reattached [target]'s [I] with \the [tool].</span>" , \
|
||||
"<span class='notice'> You have reattached [target]'s [I] with \the [tool].</span>")
|
||||
user.visible_message("<span class='notice'> [user] has reattached [target]'s [I].</span>" , \
|
||||
"<span class='notice'> You have reattached [target]'s [I].</span>")
|
||||
|
||||
if(I && istype(I))
|
||||
I.status &= ~ORGAN_CUT_AWAY
|
||||
qdel(off_tool)
|
||||
else if (current_type == "install")
|
||||
user.visible_message("<span class='notice'> [user] has installed \the [tool] into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'> You have installed \the [tool] into [target]'s [affected.name].</span>")
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
if (dish.virus2.addToDB())
|
||||
ping("\The [src] pings, \"New pathogen added to data bank.\"")
|
||||
|
||||
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc)
|
||||
P.name = "paper - [dish.virus2.name()]"
|
||||
|
||||
|
||||
@@ -174,6 +174,7 @@
|
||||
ping("\The [src] pings, \"Pathogen isolated.\"")
|
||||
|
||||
/obj/machinery/computer/centrifuge/proc/print(var/mob/user)
|
||||
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc)
|
||||
P.name = "paper - Pathology Report"
|
||||
P.info = {"
|
||||
|
||||
@@ -168,6 +168,7 @@
|
||||
return 1
|
||||
|
||||
/obj/machinery/disease2/isolator/proc/print(var/mob/user)
|
||||
playsound(loc, "sound/goonstation/machines/printer_dotmatrix.ogg", 50, 1)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc)
|
||||
|
||||
switch (state)
|
||||
|
||||
Reference in New Issue
Block a user