Merge branch 'master' into fuckyougit

This commit is contained in:
monster860
2016-03-11 06:17:16 -05:00
232 changed files with 2926 additions and 1769 deletions
+39 -8
View File
@@ -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.
-1
View File
@@ -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")
+37
View File
@@ -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."
-1
View File
@@ -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)
-3
View File
@@ -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
+3 -26
View File
@@ -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
+1 -1
View File
@@ -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(
+70 -14
View File
@@ -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"
+1 -1
View File
@@ -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
+1
View File
@@ -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>
+1
View File
@@ -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]"
+9 -8
View File
@@ -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"
+1
View File
@@ -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]"
+1
View File
@@ -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
+11 -10
View File
@@ -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
+33 -45
View File
@@ -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]"
+2
View File
@@ -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
+6
View File
@@ -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"
+6 -2
View File
@@ -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'>"
+55 -22
View File
@@ -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)
+1 -1
View File
@@ -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()
+12 -1
View File
@@ -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
View File
@@ -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
+15 -8
View File
@@ -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)
+8
View File
@@ -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"
+13 -8
View File
@@ -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>")
+1 -1
View File
@@ -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"
-2
View File
@@ -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"
+1 -1
View File
@@ -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
+77 -1
View File
@@ -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
+10 -7
View File
@@ -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
+2
View File
@@ -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)
+2 -1
View File
@@ -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)
+2
View File
@@ -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 == "")
+5 -4
View File
@@ -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
+15 -7
View File
@@ -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"
+5 -3
View File
@@ -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()
)
+6 -1
View File
@@ -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
+3
View File
@@ -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
+2
View File
@@ -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"
+1
View File
@@ -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"
+7 -7
View File
@@ -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()
+3
View File
@@ -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))
+3
View File
@@ -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()
+1
View File
@@ -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
+2
View File
@@ -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
+13
View File
@@ -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>"
+5
View File
@@ -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"
+1 -1
View File
@@ -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)
+13 -5
View File
@@ -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>", \
+40 -13
View File
@@ -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
+3 -1
View File
@@ -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)
+7 -4
View File
@@ -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>")
+3 -3
View File
@@ -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")
+15 -16
View File
@@ -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>")
+1
View File
@@ -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()]"
+1
View File
@@ -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 = {"
+1
View File
@@ -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)