Merge branch 'master' of https://github.com/tgstation/-tg-station into AttackbyParams

Conflicts:
	code/game/turfs/simulated/floor/light_floor.dm
This commit is contained in:
Remie Richards
2015-02-24 22:16:53 +00:00
170 changed files with 3320 additions and 1413 deletions
+5
View File
@@ -47,6 +47,11 @@ world/IsBanned(key,address,computer_id)
message_admins("<span class='adminnotice'>Failed Login: [key] - Guests not allowed</span>")
return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.")
//Population Cap Checking
if(config.extreme_popcap && living_player_count() >= config.extreme_popcap && !(ckey(key) in admin_datums))
log_access("Failed Login: [key] - Population cap reached")
return list("reason"="popcap", "desc"= "\nReason: [config.extreme_popcap_message]")
if(config.ban_legacy_system)
//Ban Checking
+1 -1
View File
@@ -22,7 +22,7 @@
F << "<small>[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z])</small> || [src] [message]<br>"
//ADMINVERBS
/client/proc/investigate_show( subject in list("hrefs","notes","ntsl","singulo","wires","telesci", "gravity", "records", "cargo", "supermatter", "atmos") )
/client/proc/investigate_show( subject in list("hrefs","notes","ntsl","singulo","wires","telesci", "gravity", "records", "cargo", "supermatter", "atmos", "experimentor") )
set name = "Investigate"
set category = "Admin"
if(!holder) return
+1 -1
View File
@@ -510,7 +510,7 @@
//Supply (Brown)
counter = 0
jobs += "<table cellpadding='1' cellspacing='0' width='100%'>"
jobs += "<tr bgcolor='663300'><th colspan='[length(supply_positions)]'><a href='?src=\ref[src];jobban3=supplydept;jobban4=\ref[M]'>Supply Positions</a></th></tr><tr align='center'>"
jobs += "<tr bgcolor='DDAA55'><th colspan='[length(supply_positions)]'><a href='?src=\ref[src];jobban3=supplydept;jobban4=\ref[M]'>Supply Positions</a></th></tr><tr align='center'>"
for(var/jobPos in supply_positions)
if(!jobPos) continue
var/datum/job/job = SSjob.GetJob(jobPos)
+2 -2
View File
@@ -95,8 +95,8 @@
usr << "\blue ***********************************************************"
if(4)
usr << "\blue ***********************************************************"
usr << "\blue Left Mouse Button on turf/obj/mob = Throw"
usr << "\blue Right Mouse Button on turf/obj/mob = Select"
usr << "\blue Left Mouse Button on turf/obj/mob = Select"
usr << "\blue Right Mouse Button on turf/obj/mob = Throw"
usr << "\blue ***********************************************************"
return 1
@@ -136,6 +136,12 @@ var/list/VVckey_edit = list("key", "ckey")
/client/proc/mod_list(var/list/L, atom/O, original_name, objectvar)
if(!check_rights(R_VAREDIT)) return
if(!istype(L,/list)) src << "Not a List."
if(L.len > 1000)
var/confirm = alert(src, "The list you're trying to edit is very long, continuing may crash the server.", "Warning", "Continue", "Abort")
if(confirm != "Continue")
return
var/list/names = sortList(L)
var/variable = input("Which var?","Var") as null|anything in names + "(ADD VAR)"
+8 -1
View File
@@ -2,12 +2,19 @@
name = "Optical Meson Scanner"
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
icon_state = "meson"
item_state = "glasses"
item_state = "meson"
origin_tech = "magnets=2;engineering=2"
darkness_view = 1
vision_flags = SEE_TURFS
invis_view = SEE_INVISIBLE_MINIMUM
/obj/item/clothing/glasses/meson/night
name = "Night Vision Optical Meson Scanner"
desc = "An Optical Meson Scanner fitted with an amplified visible light spectrum overlay, providing greater visual clarity in darkness."
icon_state = "nvgmeson"
item_state = "nvgmeson"
darkness_view = 8
/obj/item/clothing/glasses/science
name = "Science Goggles"
desc = "A pair of snazzy goggles used to protect against chemical spills."
+4
View File
@@ -7,6 +7,10 @@
permeability_coefficient = 0.05
item_color="yellow"
/obj/item/clothing/gloves/color/yellow/fake
desc = "These gloves will protect the wearer from electric shock. They don't feel like rubber..."
siemens_coefficient = 1
/obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap
desc = "These gloves are cheap knockoffs of the coveted ones - no way this can end badly."
name = "budget insulated gloves"
+16 -1
View File
@@ -94,11 +94,12 @@
//Mining hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/mining
name = "mining hardsuit helmet"
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating for wildlife encounters."
desc = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating for wildlife encounters and dual floodlights."
icon_state = "hardsuit0-mining"
item_state = "mining_helm"
item_color = "mining"
armor = list(melee = 40, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
brightness_on = 7
/obj/item/clothing/suit/space/hardsuit/mining
icon_state = "hardsuit-mining"
@@ -262,3 +263,17 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals, /obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security
/obj/item/clothing/head/helmet/space/hardsuit/security/hos
name = "head of security's hardsuit helmet"
desc = "a special bulky helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor."
icon_state = "hardsuit0-hos"
item_color = "hos"
armor = list(melee = 45, bullet = 25, laser = 30,energy = 10, bomb = 25, bio = 100, rad = 50)
/obj/item/clothing/suit/space/hardsuit/security/hos
icon_state = "hardsuit-hos"
name = "head of security's hardsuit"
desc = "A special bulky suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos
@@ -126,6 +126,7 @@
armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100)
strip_delay = 130
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
brightness_on = 7
/obj/item/clothing/head/helmet/space/hardsuit/ert/sec
desc = "Standard issue security helmet for the ERT."
+27
View File
@@ -0,0 +1,27 @@
/datum/round_event_control/wizard/rpgloot //its time to minmax your shit
name = "RPG Loot"
weight = 3
typepath = /datum/round_event/wizard/rpgloot/
max_occurrences = 1
earliest_start = 0
/datum/round_event/wizard/rpgloot/start()
var/list/prefixespositive = list("greater", "major", "blessed", "superior", "enpowered", "honed", "true", "glorious", "robust")
var/list/prefixesnegative = list("lesser", "minor", "blighted", "inferior", "enfeebled", "rusted", "unsteady", "tragic", "gimped")
var/list/suffixes = list("orc-slaying", "elf-slaying", "corgi-slaying", "strength", "dexterity", "constitution", "intelligence", "wisdom", "charisma", "the forest", "the hills", "the plains", "the sea", "the sun", "the moon", "the void", "the world", "the fool", "many secrets", "many tales", "many colors", "rending", "sundering", "the night", "the day")
for(var/obj/item/I in world)
if(istype(I,/obj/item/organ/))
continue
var/quality = rand(-5,5)
if(quality > 0)
I.name = "[pick(prefixespositive)] [I.name] of [pick(suffixes)] +[quality]"
else if(quality < 0)
I.name = "[pick(prefixesnegative)] [I.name] of [pick(suffixes)] [quality]"
else
I.name = "[I.name] of [pick(suffixes)]"
I.force += quality
I.force = max(0,I.force)
I.throwforce += quality
I.throwforce = max(0,I.throwforce)
@@ -54,6 +54,19 @@
update_overlays(S)
user << "<span class='notice'>You add the [I.name] to the [name].</span>"
update_name(S)
else if(istype(I, /obj/item/weapon/pen))
var/txt = stripped_input(user, "What would you like the food to be called?", "Food Naming", "", 30)
if(txt)
ingMax = ingredients.len
user << "<span class='notice'>You add a last touch to the dish by renaming it.</span>"
customname = txt
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich/S = I
if(S.finished)
name = "[customname] sandwich"
return
name = "[customname] [initial(name)]"
else . = ..()
return
+6 -6
View File
@@ -139,13 +139,13 @@
return 0
if(istype(W,/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/S = W
if(S.w_class > 2)
user << "<span class='warning'>The ingredient is too big for [src].</span>"
return 0
if(contents.len >= 20)
user << "<span class='warning'>You can't add more ingredients to [src].</span>"
return 0
if(custom_food_type && ispath(custom_food_type))
if(S.w_class > 2)
user << "<span class='warning'>The ingredient is too big for [src].</span>"
return 0
if(contents.len >= 20)
user << "<span class='warning'>You can't add more ingredients to [src].</span>"
return 0
var/obj/item/weapon/reagent_containers/food/snacks/customizable/C = new custom_food_type(get_turf(src))
C.initialize_custom_food(src, S, user)
return 0
@@ -64,7 +64,7 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "pizzabread"
custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/pizza
list_reagents = list("nutriment" = 1)
list_reagents = list("nutriment" = 7)
w_class = 3
@@ -93,7 +93,7 @@
icon = 'icons/obj/food_ingredients.dmi'
icon_state = "cakebatter"
cooked_type = /obj/item/weapon/reagent_containers/food/snacks/store/cake/plain
list_reagents = list("nutriment" = 1)
list_reagents = list("nutriment" = 3)
w_class = 3
// Cake batter + rolling pin = pie dough
@@ -116,7 +116,7 @@
slice_path = /obj/item/weapon/reagent_containers/food/snacks/rawpastrybase
slices_num = 3
cooked_type = /obj/item/weapon/reagent_containers/food/snacks/pie/plain
list_reagents = list("nutriment" = 1)
list_reagents = list("nutriment" = 3)
w_class = 3
/obj/item/weapon/reagent_containers/food/snacks/rawpastrybase
@@ -126,6 +126,7 @@
icon_state = "rawpastrybase"
cooked_type = /obj/item/weapon/reagent_containers/food/snacks/pastrybase
filling_color = "#CD853F"
list_reagents = list("nutriment" = 1)
/obj/item/weapon/reagent_containers/food/snacks/pastrybase
name = "pastry base"
+1 -1
View File
@@ -164,7 +164,7 @@
name = "meat steak"
desc = "A piece of hot spicy meat."
icon_state = "meatsteak"
list_reagents = list("nutriment" = 1, "vitamin" = 1)
list_reagents = list("nutriment" = 2, "vitamin" = 1)
trash = /obj/item/trash/plate
filling_color = "#B22222"
@@ -13,7 +13,7 @@
name = "bread"
desc = "Some plain old Earthen bread."
icon_state = "bread"
list_reagents = list("nutriment" = 10)
list_reagents = list("nutriment" = 7)
custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/bread
slice_path = /obj/item/weapon/reagent_containers/food/snacks/breadslice/plain
@@ -6,7 +6,7 @@
name = "burger"
desc = "The cornerstone of every nutritious breakfast."
icon_state = "hburger"
list_reagents = list("nutriment" = 2, "vitamin" = 2)
list_reagents = list("vitamin" = 1)
bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/burger/human
@@ -15,10 +15,12 @@
name = "-burger"
desc = "A bloody burger."
icon_state = "hburger"
list_reagents = list("vitamin" = 4)
/obj/item/weapon/reagent_containers/food/snacks/burger/appendix
name = "appendix burger"
desc = "Tastes like appendicitis."
list_reagents = list("nutriment" = 6, "vitamin" = 6)
/obj/item/weapon/reagent_containers/food/snacks/burger/fish
name = "fillet -o- carp sandwich"
@@ -30,6 +32,7 @@
name = "tofu burger"
desc = "What.. is that meat?"
icon_state = "tofuburger"
list_reagents = list("nutriment" = 2, "vitamin" = 2)
/obj/item/weapon/reagent_containers/food/snacks/burger/roburger
name = "roburger"
@@ -48,27 +51,31 @@
name = "xenoburger"
desc = "Smells caustic. Tastes like heresy."
icon_state = "xburger"
list_reagents = list("nutriment" = 2, "vitamin" = 6)
/obj/item/weapon/reagent_containers/food/snacks/burger/clown
name = "clown burger"
desc = "This tastes funny..."
icon_state = "clownburger"
list_reagents = list("nutriment" = 4, "vitamin" = 6, "banana" = 6)
/obj/item/weapon/reagent_containers/food/snacks/burger/mime
name = "mime burger"
desc = "Its taste defies language."
icon_state = "mimeburger"
list_reagents = list("nutriment" = 4, "vitamin" = 6, "nothing" = 6)
/obj/item/weapon/reagent_containers/food/snacks/burger/brain
name = "brainburger"
desc = "A strange looking burger. It looks almost sentient."
icon_state = "brainburger"
list_reagents = list("nutriment" = 1, "mannitol" = 6, "vitamin" = 5)
list_reagents = list("nutriment" = 6, "mannitol" = 6, "vitamin" = 5)
/obj/item/weapon/reagent_containers/food/snacks/burger/ghost
name = "ghost burger"
desc = "Too Spooky!"
alpha = 125
list_reagents = list("nutriment" = 5, "vitamin" = 12)
/obj/item/weapon/reagent_containers/food/snacks/burger/red
name = "red burger"
@@ -116,6 +123,7 @@
name = "spell burger"
desc = "This is absolutely Ei Nath."
icon_state = "spellburger"
list_reagents = list("nutriment" = 6, "vitamin" = 10)
/obj/item/weapon/reagent_containers/food/snacks/burger/bigbite
name = "big bite burger"
@@ -141,3 +149,4 @@
icon_state = "superbiteburger"
list_reagents = list("vitamin" = 10)
w_class = 3
volume = 80
+9 -9
View File
@@ -13,7 +13,7 @@
desc = "A plain cake, not a lie."
icon_state = "plaincake"
custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/cake
list_reagents = list("nutriment" = 5, "vitamin" = 5)
list_reagents = list("nutriment" = 10, "vitamin" = 2)
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/plain
name = "vanilla cake slice"
@@ -27,7 +27,7 @@
icon_state = "carrotcake"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/carrot
slices_num = 5
list_reagents = list("oculine" = 10, "vitamin" = 10)
list_reagents = list("nutriment" = 3, "oculine" = 5, "vitamin" = 10)
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/carrot
name = "carrot cake slice"
@@ -42,7 +42,7 @@
icon_state = "braincake"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/brain
slices_num = 5
list_reagents = list("mannitol" = 10, "vitamin" = 10)
list_reagents = list("nutriment" = 5, "mannitol" = 10, "vitamin" = 10)
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/brain
@@ -73,7 +73,7 @@
icon_state = "orangecake"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/orange
slices_num = 5
list_reagents = list("vitamin" = 10)
list_reagents = list("nutriment" = 3, "vitamin" = 10)
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/orange
name = "orange cake slice"
@@ -87,7 +87,7 @@
icon_state = "limecake"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/lime
slices_num = 5
list_reagents = list("vitamin" = 10)
list_reagents = list("nutriment" = 3, "vitamin" = 10)
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/lime
name = "lime cake slice"
@@ -102,7 +102,7 @@
icon_state = "lemoncake"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/lemon
slices_num = 5
list_reagents = list("vitamin" = 10)
list_reagents = list("nutriment" = 3, "vitamin" = 10)
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/lemon
@@ -118,7 +118,7 @@
icon_state = "chocolatecake"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/chocolate
slices_num = 5
list_reagents = list("vitamin" = 10)
list_reagents = list("nutriment" = 3, "vitamin" = 10)
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/chocolate
@@ -134,7 +134,7 @@
icon_state = "birthdaycake"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday
slices_num = 5
list_reagents = list("sprinkles" = 10, "vitamin" = 5)
list_reagents = list("nutriment" = 7, "sprinkles" = 10, "vitamin" = 5)
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday
name = "birthday cake slice"
@@ -149,7 +149,7 @@
icon_state = "applecake"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/apple
slices_num = 5
list_reagents = list("vitamin" = 10)
list_reagents = list("nutriment" = 3, "vitamin" = 10)
/obj/item/weapon/reagent_containers/food/snacks/cakeslice/apple
name = "apple cake slice"
+1 -1
View File
@@ -71,7 +71,7 @@
name = "faggot"
desc = "A great meal all round. Not a cord of wood."
icon_state = "faggot"
list_reagents = list("nutriment" = 3, "vitamin" = 1)
list_reagents = list("nutriment" = 4, "vitamin" = 1)
filling_color = "#800000"
/obj/item/weapon/reagent_containers/food/snacks/sausage
+1 -1
View File
@@ -9,7 +9,7 @@
desc = "A simple pie, still delicious."
icon_state = "pie"
custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/pie
list_reagents = list("nutriment" = 1, "vitamin" = 1)
list_reagents = list("nutriment" = 8, "vitamin" = 1)
/obj/item/weapon/reagent_containers/food/snacks/pie/cream
name = "banana cream pie"
@@ -11,7 +11,7 @@
icon_state = "pizzamargherita"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/margherita
slices_num = 6
list_reagents = list("vitamin" = 5)
list_reagents = list("nutriment" = 5, "vitamin" = 5)
@@ -27,7 +27,7 @@
icon_state = "meatpizza"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/meatpizza
slices_num = 6
list_reagents = list("vitamin" = 8)
list_reagents = list("nutriment" = 5, "vitamin" = 8)
/obj/item/weapon/reagent_containers/food/snacks/pizzaslice/meatpizza
name = "meatpizza slice"
@@ -41,7 +41,7 @@
icon_state = "mushroompizza"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/mushroompizza
slices_num = 6
list_reagents = list("vitamin" = 5)
list_reagents = list("nutriment" = 5, "vitamin" = 5)
/obj/item/weapon/reagent_containers/food/snacks/pizzaslice/mushroompizza
name = "mushroom pizza slice"
@@ -55,7 +55,7 @@
icon_state = "vegetablepizza"
slice_path = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/vegetablepizza
slices_num = 6
list_reagents = list("vitamin" = 5)
list_reagents = list("nutriment" = 5, "vitamin" = 5)
/obj/item/weapon/reagent_containers/food/snacks/pizzaslice/vegetablepizza
name = "vegetable pizza slice"
@@ -226,14 +226,14 @@
/obj/item/pizzabox/margherita/New()
pizza = new /obj/item/weapon/reagent_containers/food/snacks/pizza/margherita(src)
pizza.reagents.add_reagent("nutrient", 30)
pizza.reagents.add_reagent("nutriment", 25)
pizza.reagents.add_reagent("tomatojuice", 6)
boxtag = "Margherita Deluxe"
update_icon()
/obj/item/pizzabox/vegetable/New()
pizza = new /obj/item/weapon/reagent_containers/food/snacks/pizza/vegetablepizza(src)
pizza.reagents.add_reagent("nutrient", 25)
pizza.reagents.add_reagent("nutriment", 20)
pizza.reagents.add_reagent("tomatojuice", 6)
pizza.reagents.add_reagent("oculine", 12)
boxtag = "Gourmet Vegatable"
@@ -241,13 +241,13 @@
/obj/item/pizzabox/mushroom/New()
pizza = new /obj/item/weapon/reagent_containers/food/snacks/pizza/mushroompizza(src)
pizza.reagents.add_reagent("nutrient", 30)
pizza.reagents.add_reagent("nutriment", 25)
boxtag = "Mushroom Special"
update_icon()
/obj/item/pizzabox/meat/New()
pizza = new /obj/item/weapon/reagent_containers/food/snacks/pizza/meatpizza(src)
pizza.reagents.add_reagent("nutrient", 30)
pizza.reagents.add_reagent("nutriment", 25)
pizza.reagents.add_reagent("tomatojuice", 6)
boxtag = "Meatlover's Supreme"
update_icon()
+5 -5
View File
@@ -44,7 +44,7 @@
name = "clown's tears"
desc = "Not very funny."
icon_state = "clownstears"
list_reagents = list("nutriment" = 1, "vitamin" = 8)
list_reagents = list("nutriment" = 1, "banana" = 5, "vitamin" = 8)
/obj/item/weapon/reagent_containers/food/snacks/soup/vegetable
name = "vegetable soup"
@@ -74,13 +74,13 @@
name = "hot chili"
desc = "A five alarm Texan Chili!"
icon_state = "hotchili"
list_reagents = list("nutriment" = 1, "vitamin" = 2)
list_reagents = list("nutriment" = 1, "tomatojuice" = 2, "vitamin" = 2)
/obj/item/weapon/reagent_containers/food/snacks/soup/coldchili
name = "cold chili"
desc = "This slush is barely a liquid!"
icon_state = "coldchili"
list_reagents = list("nutriment" = 1, "vitamin" = 2)
list_reagents = list("nutriment" = 1, "tomatojuice" = 2, "vitamin" = 2)
/obj/item/weapon/reagent_containers/food/snacks/soup/monkeysdelight
name = "monkey's delight"
@@ -92,7 +92,7 @@
name = "tomato soup"
desc = "Drinking this feels like being a vampire! A tomato vampire..."
icon_state = "tomatosoup"
list_reagents = list("nutriment" = 1, "vitamin" = 3)
list_reagents = list("nutriment" = 1, "tomatojuice" = 10, "vitamin" = 3)
/obj/item/weapon/reagent_containers/food/snacks/soup/milo
name = "milosoup"
@@ -135,5 +135,5 @@
name = "stew"
desc = "A nice and warm stew. Healthy and strong."
icon_state = "stew"
list_reagents = list("nutriment" = 1, "vitamin" = 5)
list_reagents = list("nutriment" = 1, "tomatojuice" = 5, "vitamin" = 5)
bitesize = 7
@@ -148,7 +148,7 @@
name = "Meat bun"
reqs = list(
/datum/reagent/consumable/soysauce = 5,
/datum/reagent/consumable/flour = 5,
/obj/item/weapon/reagent_containers/food/snacks/bun = 1,
/obj/item/weapon/reagent_containers/food/snacks/faggot = 1,
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage = 1
)
+55 -28
View File
@@ -229,24 +229,23 @@
anchored = 1.0
var/obj/item/weapon/card/id/inserted_id
var/list/prize_list = list(
new /datum/data/mining_equipment("Stimpack MediPen", /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack, 50),
new /datum/data/mining_equipment("Leporazine MediPen", /obj/item/weapon/reagent_containers/hypospray/medipen/leporazine, 50),
new /datum/data/mining_equipment("MediPen Bundle", /obj/item/weapon/storage/box/medipens/utility, 200),
new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack, 50),
new /datum/data/mining_equipment("Stimpack Bundle", /obj/item/weapon/storage/box/medipens/utility, 200),
new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 100),
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150),
new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 200),
new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 250),
new /datum/data/mining_equipment("Advanced Scanner", /obj/item/device/t_scanner/adv_mining_scanner, 300),
new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 400),
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 450),
new /datum/data/mining_equipment("Mining Drone", /mob/living/simple_animal/hostile/mining_drone/, 500),
new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 650),
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 650),
new /datum/data/mining_equipment("Sonic Jackhammer", /obj/item/weapon/pickaxe/jackhammer, 800),
new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 300),
new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
new /datum/data/mining_equipment("Advanced Scanner", /obj/item/device/t_scanner/adv_mining_scanner, 400),
new /datum/data/mining_equipment("Mining Drone", /mob/living/simple_animal/hostile/mining_drone, 500),
new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 750),
new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 800),
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 1000),
new /datum/data/mining_equipment("Jetpack", /obj/item/weapon/tank/jetpack/carbondioxide/mining, 2000),
new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 5000),
new /datum/data/mining_equipment("Point Card", /obj/item/weapon/card/mining_point_card, 500),
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 1200),
new /datum/data/mining_equipment("Jetpack", /obj/item/weapon/tank/jetpack/carbondioxide/mining, 1500),
new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000),
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500),
)
/datum/data/mining_equipment/
@@ -342,14 +341,19 @@
..()
/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/weapon/mining_voucher/voucher, mob/redeemer)
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Mining Drill", "Kinetic Accelerator", "Mining Drone", "Advanced Scanner")
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Mining Drill", "Kinetic Accelerator", "Resonator", "Mining Drone", "Advanced Scanner")
if(!selection || !Adjacent(redeemer) || voucher.gc_destroyed || voucher.loc != redeemer)
return
switch(selection)
if("Mining Drill")
new /obj/item/weapon/pickaxe/drill(src.loc)
new /obj/item/weapon/stock_parts/cell/high(src.loc)
if("Kinetic Accelerator")
new /obj/item/weapon/gun/energy/kinetic_accelerator(src.loc)
new /obj/item/weapon/screwdriver(src.loc)
if("Resonator")
new /obj/item/weapon/resonator(src.loc)
new /obj/item/weapon/screwdriver(src.loc)
if("Mining Drone")
new /mob/living/simple_animal/hostile/mining_drone(src.loc)
new /obj/item/weapon/weldingtool/hugetank(src.loc)
@@ -378,7 +382,7 @@
/**********************Mining Point Card**********************/
/obj/item/weapon/card/mining_point_card
name = "mining point card"
name = "mining points card"
desc = "A small card preloaded with mining points. Swipe your ID card over it to transfer the points, then discard."
icon_state = "data"
var/points = 500
@@ -468,22 +472,45 @@
item_state = "resonator"
desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It can also be activated without a target to create a field at the user's location, to act as a delayed time trap. It's more effective in a vacuum."
w_class = 3
force = 10
force = 8
throwforce = 10
var/cooldown = 0
var/fieldsactive = 0
var/burst_time = 50
var/fieldlimit = 3
/obj/item/weapon/resonator/proc/CreateResonance(var/target, var/creator)
if(cooldown <= 0)
if(fieldsactive < fieldlimit)
playsound(src,'sound/weapons/resonator_fire.ogg',50,1)
new /obj/effect/resonance(get_turf(target), creator)
cooldown = 1
spawn(20)
cooldown = 0
new /obj/effect/resonance(get_turf(target), creator, burst_time)
fieldsactive++
spawn(50)
fieldsactive--
/obj/item/weapon/resonator/attack_self(mob/user as mob)
CreateResonance(src, user)
..()
/obj/item/weapon/resonator/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/screwdriver))
if(burst_time == 50)
burst_time = 30
user << "<span class='info'>You set the resonator's fields to detonate after 3 seconds.</span>"
else
burst_time = 50
user << "<span class='info'>You set the resonator's fields to detonate after 5 seconds.</span>"
else if(istype(W, /obj/item/stack))
var/obj/item/stack/S = W
if(istype(S, /obj/item/stack/sheet/mineral/diamond))
if(fieldlimit < 8)
fieldlimit++
user << "<span class='info'>You upgrade [src]'s field generator with diamonds.</span>"
S.use(1)
else
user << "<span class='info'>The [src.name]'s field generator is at the limit.</span>"
/obj/item/weapon/resonator/afterattack(atom/target, mob/user, proximity_flag)
if(proximity_flag)
if(!check_allowed_items(target, 1)) return
@@ -498,23 +525,23 @@
mouse_opacity = 0
var/resonance_damage = 20
/obj/effect/resonance/New(loc, var/creator = null)
/obj/effect/resonance/New(loc, var/creator = null, var/timetoburst)
var/turf/proj_turf = get_turf(src)
if(!istype(proj_turf))
return
if(istype(proj_turf, /turf/simulated/mineral))
var/turf/simulated/mineral/M = proj_turf
playsound(src,'sound/weapons/resonator_blast.ogg',50,1)
M.gets_drilled(creator)
spawn(5)
spawn(timetoburst)
playsound(src,'sound/weapons/resonator_blast.ogg',50,1)
M.gets_drilled(creator)
qdel(src)
else
var/datum/gas_mixture/environment = proj_turf.return_air()
var/pressure = environment.return_pressure()
if(pressure < 50)
name = "strong resonance field"
resonance_damage = 45
spawn(50)
resonance_damage = 50
spawn(timetoburst)
playsound(src,'sound/weapons/resonator_blast.ogg',50,1)
if(creator)
for(var/mob/living/L in src.loc)
@@ -788,7 +815,7 @@
/obj/item/device/t_scanner/adv_mining_scanner/scan()
if(!cooldown)
cooldown = 1
spawn(80)
spawn(60)
cooldown = 0
var/turf/t = get_turf(src)
var/list/mobs = recursive_mob_check(t, 1,0,0)
+81 -59
View File
@@ -31,7 +31,6 @@
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/device/mining_scanner(src)
new /obj/item/weapon/storage/bag/ore(src)
new /obj/item/device/flashlight/lantern(src)
new /obj/item/weapon/shovel(src)
new /obj/item/weapon/pickaxe(src)
new /obj/item/clothing/glasses/meson(src)
@@ -39,7 +38,6 @@
/**********************Shuttle Computer**************************/
/obj/machinery/computer/shuttle/mining
name = "Mining Shuttle Console"
desc = "Used to call and send the mining shuttle."
@@ -48,15 +46,7 @@
shuttleId = "mining"
possible_destinations = "mining_home;mining_away"
/******************************Lantern*******************************/
/obj/item/device/flashlight/lantern
name = "lantern"
icon_state = "lantern"
desc = "A mining lantern."
brightness_on = 6 // luminosity when on
/*****************************Pickaxe********************************/
/*********************Pickaxe & Drills**************************/
/obj/item/weapon/pickaxe
name = "pickaxe"
@@ -64,89 +54,125 @@
icon_state = "pickaxe"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 15.0
force = 15
throwforce = 10.0
item_state = "pickaxe"
w_class = 4.0
m_amt = 3750 //one sheet, but where can you make them?
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
var/digspeed = 40
var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg')
origin_tech = "materials=1;engineering=1"
attack_verb = list("hit", "pierced", "sliced", "attacked")
var/powered = 1 //used to check for drill charge when mining
/obj/item/weapon/pickaxe/proc/playDigSound()
playsound(src, pick(digsound),20,1)
playsound(src, pick(digsound),50,1)
/obj/item/weapon/pickaxe/silver
name = "silver pickaxe"
icon_state = "spickaxe"
item_state = "spickaxe"
digspeed = 30
origin_tech = "materials=3"
desc = "This makes no metallurgic sense."
/obj/item/weapon/pickaxe/diamond
name = "diamond-tipped pickaxe"
icon_state = "dpickaxe"
item_state = "dpickaxe"
digspeed = 20 //mines twice as fast as a normal pickaxe, bought from mining vendor
origin_tech = "materials=4;engineering=3"
desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt."
/obj/item/weapon/pickaxe/drill
name = "mining drill" // Can dig sand as well!
name = "mining drill"
icon_state = "handdrill"
item_state = "jackhammer"
digspeed = 30
digspeed = 30 //available from roundstart, faster than a pickaxe but needs recharging or cell replacements
digsound = list('sound/weapons/drill.ogg')
hitsound = 'sound/weapons/drill.ogg'
origin_tech = "materials=2;powerstorage=3;engineering=2"
desc = "Yours is the drill that will pierce through the rock walls."
desc = "An electric mining drill for the especially scrawny."
var/drillcost = 125 //80 mineral walls by default
var/obj/item/weapon/stock_parts/cell/high/bcell = null
powered = 0
/obj/item/weapon/pickaxe/drill/diamonddrill //When people ask about the badass leader of the mining tools, they are talking about ME! making it a child of drill to stop copypasta
name = "diamond mining drill"
/obj/item/weapon/pickaxe/drill/New() //this one starts with a cell pre-installed.
..()
bcell = new(src)
update_charge()
return
/obj/item/weapon/pickaxe/drill/proc/update_charge()
if(bcell && bcell.charge >= drillcost)
powered = 1
else
powered = 0
update_icon()
/obj/item/weapon/pickaxe/drill/update_icon()
if(!bcell)
icon_state = "[initial(icon_state)]-nocell"
else if(bcell.charge < drillcost)
icon_state = "[initial(icon_state)]-empty"
else
icon_state = "[initial(icon_state)]"
/obj/item/weapon/pickaxe/drill/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/weapon/stock_parts/cell))
if(bcell)
user << "<span class='notice'>[src] already has a cell.</span>"
else
user.drop_item()
W.loc = src
bcell = W
user << "<span class='notice'>You install a cell in [src].</span>"
update_charge()
else if(istype(W, /obj/item/weapon/screwdriver))
if(bcell)
bcell.updateicon()
bcell.loc = get_turf(src.loc)
bcell = null
user << "<span class='notice'>You remove the cell from [src].</span>"
update_charge()
return
..()
return
/obj/item/weapon/pickaxe/drill/examine(mob/user)
..()
if(bcell)
user <<"<span class='notice'>The [src.name] is [round(bcell.percent())]% charged.</span>"
if(!bcell)
user <<"<span class='warning'>The [src.name] does not have a power source installed.</span>"
/obj/item/weapon/pickaxe/drill/cyborg
name = "cyborg mining drill"
/obj/item/weapon/pickaxe/drill/diamonddrill
name = "diamond-tipped mining drill"
icon_state = "diamonddrill"
digspeed = 5 //Digs through walls, girders, and can dig up sand
digspeed = 10 //it's a fast drill with a relatively low power cost. what more could you ask for?
origin_tech = "materials=6;powerstorage=4;engineering=5"
desc = "Yours is the drill that will pierce the heavens!"
drillcost = 150 //66 mineral walls by default, but very quickly
/obj/item/weapon/pickaxe/jackhammer
/obj/item/weapon/pickaxe/drill/jackhammer
name = "sonic jackhammer"
icon_state = "jackhammer"
item_state = "jackhammer"
digspeed = 15 //faster than drill, but cannot dig
digspeed = 5 //the epitome of powertools. high power consumption, extremely fast mining, laughs at puny walls
origin_tech = "materials=3;powerstorage=2;engineering=2"
digsound = list('sound/weapons/sonic_jackhammer.ogg')
hitsound = 'sound/weapons/sonic_jackhammer.ogg'
desc = "Cracks rocks with sonic blasts, perfect for clearing large areas of rock."
/obj/item/weapon/pickaxe/jackhammer/borgdrill // making it a parrent of jackhammer to prevent copypasta
name = "cyborg mining drill"
desc = ""
/obj/item/weapon/pickaxe/gold
name = "golden pickaxe"
icon_state = "gpickaxe"
item_state = "gpickaxe"
digspeed = 20
origin_tech = "materials=4"
desc = "This makes no metallurgic sense."
desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls.."
drillcost = 200
/obj/item/weapon/pickaxe/plasmacutter
name = "plasma cutter"
icon_state = "plasmacutter"
item_state = "gun"
w_class = 3.0 //it is smaller than the pickaxe
w_class = 3 //it is smaller than the pickaxe
damtype = "fire"
digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire
throwforce = 8
digspeed = 30 //Mines slightly faster than a normal pickaxe, but doubles as an unlimited-ammo welding tool in some cases such as wall deconstruction
digsound = list('sound/weapons/plasma_cutter.ogg')
hitsound = 'sound/weapons/plasma_cutter.ogg'
origin_tech = "materials=4;plasmatech=3;engineering=3"
desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
/obj/item/weapon/pickaxe/diamond
name = "diamond pickaxe"
icon_state = "dpickaxe"
item_state = "dpickaxe"
digspeed = 10
origin_tech = "materials=6;engineering=4"
desc = "A pickaxe with a diamond pick head, this is just like minecraft."
/*****************************Shovel********************************/
@@ -185,7 +211,3 @@
density = 1
icon_opened = "miningcaropen"
icon_closed = "miningcar"
+22 -20
View File
@@ -391,6 +391,9 @@
var/turf/T = user.loc
if (!( istype(T, /turf) ))
return
if(!P.powered)
return
/*
if (istype(W, /obj/item/weapon/pickaxe/radius))
var/turf/T = user.loc
@@ -406,6 +409,20 @@
P.playDigSound()
if(do_after(user,P.digspeed))
if(istype(P, /obj/item/weapon/pickaxe/drill))
var/obj/item/weapon/pickaxe/drill/D = P
if(isrobot(user))
var/mob/living/silicon/robot/R = user
if(R && R.cell)
if(!R.cell.use(D.drillcost))
D.update_charge()
return
else
if(!D.bcell.use(D.drillcost))
user << "<span class='warning'>Your drill ran out of power.</span>"
D.update_charge()
return
D.update_charge()
user << "<span class='notice'>You finish cutting into the rock.</span>"
gets_drilled(user)
else
@@ -536,46 +553,31 @@
user << "<span class='danger'>You start digging.</span>"
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) //FUCK YO RUSTLE I GOT'S THE DIGS SOUND HERE
sleep(40)
sleep(20)
if ((user.loc == T && user.get_active_hand() == W))
user << "<span class='notice'>You dug a hole.</span>"
gets_dug()
return
if ((istype(W,/obj/item/weapon/pickaxe/drill)))
if ((istype(W, /obj/item/weapon/pickaxe)))
var/obj/item/weapon/pickaxe/P = W
var/turf/T = user.loc
if (!( istype(T, /turf) ))
return
if (dug)
user << "<span class='warning'>This area has already been dug.</span>"
user << "<span class='danger'>This area has already been dug.</span>"
return
user << "<span class='danger'>You start digging.</span>"
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) //FUCK YO RUSTLE I GOT'S THE DIGS SOUND HERE
sleep(30)
sleep(P.digspeed)
if ((user.loc == T && user.get_active_hand() == W))
user << "<span class='notice'>You dug a hole.</span>"
gets_dug()
if ((istype(W,/obj/item/weapon/pickaxe/drill/diamonddrill)) || (istype(W,/obj/item/weapon/pickaxe/jackhammer/borgdrill)))
var/turf/T = user.loc
if (!( istype(T, /turf) ))
return
if (dug)
user << "<span class='warning'>This area has already been dug.</span>"
return
user << "<span class='danger'>You start digging.</span>"
playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) //FUCK YO RUSTLE I GOT'S THE DIGS SOUND HERE
sleep(0)
if ((user.loc == T && user.get_active_hand() == W))
user << "<span class='notice'>You dug a hole.</span>"
gets_dug()
if(istype(W,/obj/item/weapon/storage/bag/ore))
var/obj/item/weapon/storage/bag/ore/S = W
if(S.collection_mode == 1)
@@ -93,7 +93,6 @@
update_icons()
/mob/living/carbon/alien/humanoid/hunter/throw_impact(A)
var/msg = ""
if(!leaping)
return ..()
@@ -101,7 +100,7 @@
if(A)
if(istype(A, /mob/living))
var/mob/living/L = A
msg = "<span class ='alertalien'>[src] pounces on [A]!</span>"
L.visible_message("<span class ='danger'>[src] pounces on [L]!</span>", "<span class ='userdanger'>[src] pounces on you!</span>")
L.Weaken(5)
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
step_towards(src,L)
@@ -111,13 +110,13 @@
spawn(pounce_cooldown_time) //3s by default
pounce_cooldown = !pounce_cooldown
else
msg = "<span class ='alertalien'>[src] smashes into [A]!</span>"
visible_message("<span class ='danger'>[src] smashes into [A]!</span>", "<span class ='alertalien'>[src] smashes into [A]!</span>")
weakened = 2
if(leaping)
leaping = 0
update_canmove()
visible_message(msg)
/mob/living/carbon/alien/humanoid/float(on)
+17 -65
View File
@@ -133,74 +133,26 @@
else
mode() // Activate held item
/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)
if(health >= 0)
if(src == M && istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src
visible_message( \
"<span class='notice'>[src] examines \himself.", \
"<span class='notice'>You check yourself for injuries.</span>")
for(var/obj/item/organ/limb/org in H.organs)
var/status = ""
var/brutedamage = org.brute_dam
var/burndamage = org.burn_dam
if(hallucination)
if(prob(30))
brutedamage += rand(30,40)
if(prob(30))
burndamage += rand(30,40)
if(brutedamage > 0)
status = "bruised"
if(brutedamage > 20)
status = "bleeding"
if(brutedamage > 40)
status = "mangled"
if(brutedamage > 0 && burndamage > 0)
status += " and "
if(burndamage > 40)
status += "peeling away"
else if(burndamage > 10)
status += "blistered"
else if(burndamage > 0)
status += "numb"
if(status == "")
status = "OK"
src << "\t [status == "OK" ? "\blue" : "\red"] My [org.getDisplayName()] is [status]."
if(H.blood_max)
src << "<span class='danger'>You are bleeding!</span>"
if(staminaloss)
if(staminaloss > 30)
src << "<span class='info'>You're completely exhausted.</span>"
else
src << "<span class='info'>You feel fatigued.</span>"
if(dna && dna.species.id && dna.species.id == "skeleton" && !H.w_uniform && !H.wear_suit)
H.play_xylophone()
if(lying)
sleeping = max(0, sleeping - 5)
if(sleeping == 0)
resting = 0
M.visible_message("<span class='notice'>[M] shakes [src] trying to get \him up!</span>", \
"<span class='notice'>You shake [src] trying to get \him up!</span>")
else
if(ishuman(src))
var/mob/living/carbon/human/H = src
if(H.wear_suit)
H.wear_suit.add_fingerprint(M)
else if(H.w_uniform)
H.w_uniform.add_fingerprint(M)
M.visible_message("<span class='notice'>[M] hugs [src] to make \him feel better!</span>", \
"<span class='notice'>You hug [src] to make \him feel better!</span>")
if(lying)
sleeping = max(0, sleeping - 5)
if(sleeping == 0)
resting = 0
M.visible_message("<span class='notice'>[M] shakes [src] trying to get \him up!</span>", \
"<span class='notice'>You shake [src] trying to get \him up!</span>")
else
M.visible_message("<span class='notice'>[M] hugs [src] to make \him feel better!</span>", \
"<span class='notice'>You hug [src] to make \him feel better!</span>")
AdjustParalysis(-3)
AdjustStunned(-3)
AdjustWeakened(-3)
AdjustParalysis(-3)
AdjustStunned(-3)
AdjustWeakened(-3)
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
/mob/living/carbon/proc/eyecheck()
@@ -364,7 +316,7 @@
dat += "<BR><B>Back:</B> <A href='?src=\ref[src];item=[slot_back]'> [back ? back : "Nothing"]</A>"
if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank/internals))
if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank))
dat += "<BR><A href='?src=\ref[src];internal=1'>[internal ? "Disable Internals" : "Set Internals"]</A>"
if(handcuffed)
@@ -386,7 +338,7 @@
if(href_list["internal"])
var/slot = text2num(href_list["internal"])
var/obj/item/ITEM = get_item_by_slot(slot)
if(ITEM && istype(ITEM, /obj/item/weapon/tank/internals) && wear_mask && (wear_mask.flags & MASKINTERNALS))
if(ITEM && istype(ITEM, /obj/item/weapon/tank) && wear_mask && (wear_mask.flags & MASKINTERNALS))
visible_message("<span class='danger'>[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM].</span>", \
"<span class='userdanger'>[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM].</span>")
if(do_mob(usr, src, POCKET_STRIP_DELAY))
@@ -394,7 +346,7 @@
internal = null
if(internals)
internals.icon_state = "internal0"
else if(ITEM && istype(ITEM, /obj/item/weapon/tank/internals) && wear_mask && (wear_mask.flags & MASKINTERNALS))
else if(ITEM && istype(ITEM, /obj/item/weapon/tank) && wear_mask && (wear_mask.flags & MASKINTERNALS))
internal = ITEM
if(internals)
internals.icon_state = "internal1"
@@ -12,6 +12,6 @@
//inventory slots
var/obj/item/back = null
var/obj/item/clothing/mask/wear_mask = null
var/obj/item/weapon/tank/internals/internal = null
var/obj/item/weapon/tank/internal = null
var/datum/dna/dna = null//Carbon
@@ -109,6 +109,10 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
for(var/obj/item/organ/limb/org in organs)
var/brutedamage = org.brute_dam
//We want an accurate reading of .len
listclearnulls(org.embedded_objects)
blood_max += 0.5*org.embedded_objects.len
if(brutedamage > 30)
blood_max += 0.5
if(brutedamage > 50)
@@ -216,6 +216,12 @@
else
msg += "<B>[t_He] [t_has] severe cellular damage.</B>\n"
for(var/obj/item/organ/limb/L in organs)
for(var/obj/item/I in L.embedded_objects)
msg += "<B>[t_He] [t_has] \a \icon[I] [I] embedded in [t_his] [L.getDisplayName()]!</B>\n"
if(fire_stacks > 0)
msg += "[t_He] [t_is] covered in something flammable.\n"
if(fire_stacks < 0)
+83 -3
View File
@@ -160,7 +160,7 @@
<tr><td>&nbsp;</td></tr>"}
dat += "<tr><td><B>Back:</B></td><td><A href='?src=\ref[src];item=[slot_back]'>[(back && !(back.flags&ABSTRACT)) ? back : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(back, /obj/item/weapon/tank/internals))
if(has_breathable_mask && istype(back, /obj/item/weapon/tank))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_back]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr><tr><td>&nbsp;</td></tr>"
@@ -187,7 +187,7 @@
dat += "<tr><td><B>Exosuit:</B></td><td><A href='?src=\ref[src];item=[slot_wear_suit]'>[(wear_suit && !(wear_suit.flags&ABSTRACT)) ? wear_suit : "<font color=grey>Empty</font>"]</A></td></tr>"
if(wear_suit)
dat += "<tr><td>&nbsp;&#8627;<B>Suit Storage:</B></td><td><A href='?src=\ref[src];item=[slot_s_store]'>[(s_store && !(s_store.flags&ABSTRACT)) ? s_store : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(s_store, /obj/item/weapon/tank/internals))
if(has_breathable_mask && istype(s_store, /obj/item/weapon/tank))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_s_store]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr>"
else
@@ -214,7 +214,7 @@
dat += "<tr><td><font color=grey>&nbsp;&#8627;<B>Belt:</B></font></td></tr>"
else
dat += "<tr><td>&nbsp;&#8627;<B>Belt:</B></td><td><A href='?src=\ref[src];item=[slot_belt]'>[(belt && !(belt.flags&ABSTRACT)) ? belt : "<font color=grey>Empty</font>"]</A>"
if(has_breathable_mask && istype(belt, /obj/item/weapon/tank/internals))
if(has_breathable_mask && istype(belt, /obj/item/weapon/tank))
dat += "&nbsp;<A href='?src=\ref[src];internal=[slot_belt]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
dat += "</td></tr>"
dat += "<tr><td>&nbsp;&#8627;<B>Pockets:</B></td><td><A href='?src=\ref[src];pockets=left'>[(l_store && !(l_store.flags&ABSTRACT)) ? "Left (Full)" : "<font color=grey>Left (Empty)</font>"]</A>"
@@ -251,6 +251,23 @@
/mob/living/carbon/human/Topic(href, href_list)
if(usr.canUseTopic(src, BE_CLOSE, NO_DEXTERY))
if(href_list["embedded_object"])
var/obj/item/I = locate(href_list["embedded_object"])
var/obj/item/organ/limb/L = locate(href_list["embedded_limb"])
if(!I || !L || I.loc != src) //no item, no limb, or item is not in limb (the person atleast) anymore
return
var/time_taken = 30*I.w_class
usr.visible_message("<span class='notice'>[usr] attempts to remove [I] from their [L.getDisplayName()]!</span>","<span class='notice'>You attempt to remove [I] from your [L.getDisplayName()], it will take [time_taken/10] seconds.</span>")
if(do_after(usr, time_taken, needhand = 1))
L.embedded_objects -= I
L.take_damage(8*I.w_class)//It hurts to rip it out, get surgery you dingus.
I.loc = get_turf(src)
usr.put_in_hands(I)
usr.emote("scream")
usr.visible_message("<span class='danger'>[usr] successfully rips [I] out of their [L.getDisplayName()]!</span>","<span class='userdanger'>You successfully remove [I] from your [L.getDisplayName()]!</span>")
return
if(href_list["item"])
var/slot = text2num(href_list["item"])
if(slot in check_obscured_slots())
@@ -637,3 +654,66 @@
if(mob_negates_gravity())
return
..()
/mob/living/carbon/human/help_shake_act(mob/living/carbon/human/M)
if(!istype(M))
return
var/mob/living/carbon/human/H = src
if(health >= 0)
if(src == M)
visible_message( \
"<span class='notice'>[src] examines \himself.", \
"<span class='notice'>You check yourself for injuries.</span>")
for(var/obj/item/organ/limb/org in H.organs)
var/status = ""
var/brutedamage = org.brute_dam
var/burndamage = org.burn_dam
if(hallucination)
if(prob(30))
brutedamage += rand(30,40)
if(prob(30))
burndamage += rand(30,40)
if(brutedamage > 0)
status = "bruised"
if(brutedamage > 20)
status = "bleeding"
if(brutedamage > 40)
status = "mangled"
if(brutedamage > 0 && burndamage > 0)
status += " and "
if(burndamage > 40)
status += "peeling away"
else if(burndamage > 10)
status += "blistered"
else if(burndamage > 0)
status += "numb"
if(status == "")
status = "OK"
src << "\t [status == "OK" ? "\blue" : "\red"] My [org.getDisplayName()] is [status]."
for(var/obj/item/I in org.embedded_objects)
src << "\t <a href='byond://?src=\ref[H];embedded_object=\ref[I];embedded_limb=\ref[org]'>\red There is \a [I] embedded in your [org.getDisplayName()]!</a>"
if(H.blood_max)
src << "<span class='danger'>You are bleeding!</span>"
if(staminaloss)
if(staminaloss > 30)
src << "<span class='info'>You're completely exhausted.</span>"
else
src << "<span class='info'>You feel fatigued.</span>"
if(dna && dna.species.id && dna.species.id == "skeleton" && !H.w_uniform && !H.wear_suit)
H.play_xylophone()
else
if(H.wear_suit)
H.wear_suit.add_fingerprint(M)
else if(H.w_uniform)
H.w_uniform.add_fingerprint(M)
..()
@@ -51,6 +51,9 @@
var/obj/location_as_object = loc
location_as_object.handle_internal_lifeform(src, 0)
//Stuff jammed in your limbs hurts
handle_embedded_objects()
//Update our name based on whether our face is obscured/disfigured
name = get_visible_name()
@@ -396,6 +399,8 @@
if( prob(10) && health && !hal_crit )
spawn(0)
emote("snore")
else if (status_flags & FAKEDEATH)
stat = UNCONSCIOUS
//CONSCIOUS
else
stat = CONSCIOUS
@@ -603,4 +608,18 @@
if(mind && mind.changeling)
mind.changeling.regenerate()
/mob/living/carbon/human/proc/handle_embedded_objects()
for(var/obj/item/organ/limb/L in organs)
for(var/obj/item/I in L.embedded_objects)
if(prob(I.embedded_pain_chance))
L.take_damage(I.w_class*2)
src << "<span class='userdanger'>\the [I] embedded in your [L.getDisplayName()] hurts!</span>"
if(prob(I.embedded_fall_chance))
L.take_damage(I.w_class*5)
L.embedded_objects -= I
I.loc = get_turf(src)
visible_message("<span class='danger'>\the [I] falls out of [name]'s [L.getDisplayName()]!</span>","<span class='userdanger'>\the [I] falls out of your [L.getDisplayName()]!</span>")
#undef HUMAN_MAX_OXYLOSS
@@ -668,8 +668,6 @@
/datum/species/proc/movement_delay(var/mob/living/carbon/human/H)
var/mspeed = 0
if(H.status_flags & GOTTAGOFAST)
mspeed -= 1
var/hasjetpack = 0
if(istype(H.back, /obj/item/weapon/tank/jetpack))
@@ -703,6 +701,9 @@
mspeed += speedmod
if(H.status_flags & GOTTAGOFAST)
mspeed = 0
return mspeed
//////////////////
@@ -271,3 +271,7 @@ proc/vol_by_throwforce_and_or_w_class(var/obj/item/I)
else
M.do_attack_animation(src)
return 1
/mob/living/incapacitated()
if(stat || paralysis || stunned || weakened || restrained())
return 1
@@ -95,6 +95,7 @@
modules += new /obj/item/weapon/scalpel(src)
modules += new /obj/item/weapon/circular_saw(src)
modules += new /obj/item/weapon/extinguisher/mini(src)
modules += new /obj/item/roller/robo(src)
emag = new /obj/item/weapon/reagent_containers/spray(src)
emag.reagents.add_reagent("facid", 250)
@@ -234,27 +235,17 @@
/obj/item/weapon/robot_module/miner/New()
..()
var/mob/living/silicon/robot/R = loc
modules += new /obj/item/borg/sight/meson(src)
emag = new /obj/item/borg/stun(src)
modules += new /obj/item/weapon/storage/bag/ore(src)
if(R.emagged)
modules += new /obj/item/weapon/pickaxe/drill/diamonddrill(src)
else
modules += new /obj/item/weapon/pickaxe/jackhammer/borgdrill(src)
modules += new /obj/item/weapon/pickaxe/drill/cyborg(src)
modules += new /obj/item/weapon/shovel(src)
modules += new /obj/item/device/flashlight/lantern(src)
modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
modules += new /obj/item/device/t_scanner/adv_mining_scanner(src)
modules += new /obj/item/weapon/gun/energy/kinetic_accelerator(src)
fix_modules()
/obj/item/weapon/robot_module/miner/on_emag()
..()
for(var/obj/item/weapon/pickaxe/jackhammer/borgdrill/D in modules)
qdel(D)
modules += new /obj/item/weapon/pickaxe/drill/diamonddrill(src)
rebuild()
/obj/item/weapon/robot_module/syndicate
name = "syndicate robot module"
@@ -8,7 +8,7 @@
emote_see = list("flutters")
response_help = "shoos"
response_disarm = "brushes aside"
response_harm = "aquashes"
response_harm = "squashes"
speak_chance = 0
maxHealth = 2
health = 2
@@ -397,6 +397,7 @@
name = "Goliath tentacle"
icon = 'icons/mob/animal.dmi'
icon_state = "Goliath_tentacle"
var/latched = 0
/obj/effect/goliath_tentacle/New()
var/turftype = get_turf(src)
@@ -423,15 +424,15 @@
/obj/effect/goliath_tentacle/proc/Trip()
for(var/mob/living/M in src.loc)
M.Weaken(5)
visible_message("<span class='warning'>The [src.name] knocks [M.name] down!</span>")
qdel(src)
/obj/effect/goliath_tentacle/Crossed(AM as mob|obj)
if(isliving(AM))
Trip()
return
..()
M.Stun(5)
M.adjustBruteLoss(rand(10,15))
latched = 1
visible_message("<span class='danger'>The [src.name] grabs hold of [M.name]!</span>")
if(!latched)
qdel(src)
else
spawn(50)
qdel(src)
/mob/living/simple_animal/hostile/asteroid/goliath/Die()
var/obj/item/asteroid/goliath_hide/G = new /obj/item/asteroid/goliath_hide(src.loc)
@@ -464,7 +464,7 @@
else if(istype(M, childtype)) //Check for children FIRST.
children++
else if(istype(M, species))
if(M.client)
if(M.ckey)
continue
else if(!istype(M, childtype) && M.gender == MALE) //Better safe than sorry ;_;
partner = M
+3
View File
@@ -229,6 +229,9 @@ var/next_mob_id = 0
/mob/proc/restrained()
return
/mob/proc/incapacitated()
return
//This proc is called whenever someone clicks an inventory ui slot.
/mob/proc/attack_ui(slot)
var/obj/item/W = get_active_hand()
+4 -4
View File
@@ -69,10 +69,10 @@
/client/Center()
if (isobj(mob.loc))
if(isobj(mob.loc))
var/obj/O = mob.loc
if (mob.canmove)
return O.relaymove(mob, 16)
if(mob.canmove)
return O.relaymove(mob, 0)
return
@@ -138,7 +138,7 @@
if(mob.restrained()) //Why being pulled while cuffed prevents you from moving
for(var/mob/M in range(mob, 1))
if(M.pulling == mob)
if(!M.restrained() && M.stat == 0 && M.canmove && mob.Adjacent(M))
if(!M.incapacitated() && mob.Adjacent(M))
src << "<span class='notice'>You're restrained! You can't move!</span>"
return 0
else
+3
View File
@@ -6,6 +6,9 @@
if(admin_notice)
src << "<span class='notice'><b>Admin Notice:</b>\n \t [admin_notice]</span>"
if(config.soft_popcap && living_player_count() >= config.soft_popcap)
src << "<span class='notice'><b>Server Notice:</b>\n \t [config.soft_popcap_message]</span>"
if(!mind)
mind = new /datum/mind(key)
mind.active = 1
@@ -126,6 +126,10 @@
if(!ticker || ticker.current_state != GAME_STATE_PLAYING)
usr << "<span class='danger'>The round is either not ready, or has already finished...</span>"
return
var/relevent_cap = max(config.hard_popcap, config.extreme_popcap)
if(relevent_cap && living_player_count() >= relevent_cap && !(ckey(key) in admin_datums))
usr << "<span class='danger'>[config.hard_popcap_message]</span>"
return
LateChoices()
if(href_list["manifest"])
-5
View File
@@ -287,11 +287,6 @@
if(!in_range(src, usr) && loc != user && !istype(loc, /obj/item/weapon/clipboard) && loc.loc != user && user.get_active_hand() != P)
return
if(istype(P, /obj/item/weapon/stamp/clown))
if(!clown)
user << "<span class='notice'>You are totally unable to use the stamp. HONK!</span>"
return
stamps += "<img src=large_[P.icon_state].png>"
var/image/stampoverlay = image('icons/obj/bureaucracy.dmi')
+1 -1
View File
@@ -65,7 +65,7 @@
if(..())
if(reagents.total_volume)
if(M.reagents)
reagents.trans_to(M, 50)
reagents.trans_to(M, 55)
/obj/item/weapon/pen/sleepy/New()
@@ -117,29 +117,29 @@
/obj/item/ammo_box/magazine/m45
name = "handgun magazine (.45)"
icon_state = "45"
icon_state = "45-8"
ammo_type = /obj/item/ammo_casing/c45
caliber = ".45"
max_ammo = 8
/obj/item/ammo_box/magazine/m45/update_icon()
..()
icon_state = "[initial(icon_state)]-[ammo_count() ? "8" : "0"]"
icon_state = "45-[ammo_count() ? "8" : "0"]"
/obj/item/ammo_box/magazine/smgm9mm
name = "SMG magazine (9mm)"
icon_state = "smg9mm"
icon_state = "smg9mm-20"
ammo_type = /obj/item/ammo_casing/c9mm
caliber = "9mm"
max_ammo = 20
/obj/item/ammo_box/magazine/smgm9mm/update_icon()
..()
icon_state = "[initial(icon_state)]-[round(ammo_count(),5)]"
icon_state = "smg9mm-[round(ammo_count(),5)]"
/obj/item/ammo_box/magazine/smgm45
name = "SMG magazine (.45)"
icon_state = "c20r45"
icon_state = "c20r45-20"
origin_tech = "combat=2"
ammo_type = /obj/item/ammo_casing/c45
caliber = ".45"
@@ -147,7 +147,7 @@
/obj/item/ammo_box/magazine/smgm45/update_icon()
..()
icon_state = "[initial(icon_state)]-[round(ammo_count(),2)]"
icon_state = "c20r45-[round(ammo_count(),2)]"
obj/item/ammo_box/magazine/tommygunm45
name = "drum magazine (.45)"
@@ -184,7 +184,7 @@ obj/item/ammo_box/magazine/tommygunm45
/obj/item/ammo_box/magazine/m762
name = "box magazine (7.62mm)"
icon_state = "a762"
icon_state = "a762-50"
origin_tech = "combat=2"
ammo_type = /obj/item/ammo_casing/a762
caliber = "a762"
@@ -192,13 +192,14 @@ obj/item/ammo_box/magazine/tommygunm45
/obj/item/ammo_box/magazine/m762/update_icon()
..()
icon_state = "[initial(icon_state)]-[round(ammo_count(),10)]"
icon_state = "a762-[round(ammo_count(),10)]"
/obj/item/ammo_box/magazine/m12g
name = "shotgun magazine (12g taser slugs)"
icon_state = "m12gs"
name = "shotgun magazine (12g buckshot)"
icon_state = "m12gb"
ammo_type = /obj/item/ammo_casing/shotgun/buckshot
origin_tech = "combat=3;syndicate=1"
ammo_type = /obj/item/ammo_casing/shotgun/stunslug
caliber = "shotgun"
max_ammo = 8
@@ -206,14 +207,12 @@ obj/item/ammo_box/magazine/tommygunm45
..()
icon_state = "[initial(icon_state)]-[Ceiling(ammo_count(0)/8)*8]"
/obj/item/ammo_box/magazine/m12g/buckshot
name = "shotgun magazine (12g buckshot)"
icon_state = "m12gb"
ammo_type = /obj/item/ammo_casing/shotgun/buckshot
/obj/item/ammo_box/magazine/m12g/stun
name = "shotgun magazine (12g taser slugs)"
icon_state = "m12gs"
ammo_type = /obj/item/ammo_casing/shotgun/stunslug
/obj/item/ammo_box/magazine/m12g/dragon
name = "shotgun magazine (12g dragon's breath)"
icon_state = "m12gf"
ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath
ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath
+12
View File
@@ -30,6 +30,7 @@
var/sawn_state = SAWN_INTACT
var/burst_size = 1
var/fire_delay = 0
var/heavy_weapon = 0
lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/guns_righthand.dmi'
@@ -87,6 +88,11 @@
else
user.visible_message("<span class='danger'>[user] fires [src]!</span>", "<span class='danger'>You fire [src]!</span>", "You hear a [istype(src, /obj/item/weapon/gun/energy) ? "laser blast" : "gunshot"]!")
if(heavy_weapon)
if(user.get_inactive_hand())
if(prob(15))
user.visible_message("<span class='danger'>[src] flies out of [user]'s hands!</span>", "<span class='userdanger'>[src] kicks out of your grip!</span>")
user.drop_item()
/obj/item/weapon/gun/emp_act(severity)
for(var/obj/O in contents)
@@ -153,6 +159,12 @@
/obj/item/weapon/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, var/message = 1, params)
add_fingerprint(user)
if(heavy_weapon)
if(user.get_inactive_hand())
recoil = 4 //one-handed kick
else
recoil = initial(recoil)
for(var/i = 1 to burst_size)
if(!issilicon(user))
if( i>1 && !(src in get_both_hands(user))) //for burst firing
@@ -110,5 +110,14 @@
/obj/item/weapon/gun/energy/gun/turret
name = "hybrid turret gun"
desc = "A basic hybrid energy gun with two settings: Stun and kill."
desc = "A heavy hybrid energy cannon with two settings: Stun and kill."
icon_state = "turretlaser"
slot_flags = null
w_class = 5
ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser)
heavy_weapon = 1
can_flashlight = 0
trigger_guard = 0
obj/item/weapon/gun/energy/gun/turret/update_icon()
icon_state = initial(icon_state)
@@ -664,7 +664,7 @@ datum/reagent/life
/datum/chemical_reaction/life/on_reaction(var/datum/reagents/holder, var/created_volume)
chemical_mob_spawn(holder, 1, "Life")
proc/chemical_mob_spawn(var/datum/reagents/holder, var/amount_to_spawn, var/reaction_name)
proc/chemical_mob_spawn(var/datum/reagents/holder, var/amount_to_spawn, var/reaction_name, var/mob_faction = "chemicalsummon")
if(holder && holder.my_atom)
var/blocked = list(/mob/living/simple_animal/hostile,
/mob/living/simple_animal/hostile/pirate,
@@ -713,7 +713,7 @@ proc/chemical_mob_spawn(var/datum/reagents/holder, var/amount_to_spawn, var/reac
for(var/i = 1, i <= amount_to_spawn, i++)
var/chosen = pick(critters)
var/mob/living/simple_animal/hostile/C = new chosen
C.faction |= "chemicalsummon"
C.faction |= mob_faction
C.loc = get_turf(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
+55 -10
View File
@@ -18,6 +18,7 @@
var/recharged = 0
var/recharge_delay = 5 //Time it game ticks between recharges
var/image/icon_beaker = null //cached overlay
var/uiname = "Chem Dispenser 5000"
var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine",
"sodium","aluminium","silicon","phosphorus","sulfur","chlorine","potassium","iron",
"copper","mercury","radium","water","ethanol","sugar","sacid","fuel","silver","iodine","bromine","stable_plasma")
@@ -108,7 +109,7 @@
if (!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
ui = new(user, src, ui_key, "chem_dispenser.tmpl", "Chem Dispenser 5000", 490, 710)
ui = new(user, src, ui_key, "chem_dispenser.tmpl", "[uiname]", 490, 710)
// when the ui is first opened this is the data it will use
ui.set_initial_data(data)
// open the new ui window
@@ -1316,7 +1317,7 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime)
idle_power_usage = 40
var/obj/item/weapon/reagent_containers/beaker = null
var/desired_temp = 300
var/heater_coefficient = 0.15
var/heater_coefficient = 0.10
var/on = FALSE
/obj/machinery/chem_heater/New()
@@ -1328,7 +1329,7 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime)
RefreshParts()
/obj/machinery/chem_heater/RefreshParts()
heater_coefficient = 0.15
heater_coefficient = 0.10
for(var/obj/item/weapon/stock_parts/micro_laser/M in component_parts)
heater_coefficient *= M.rating
@@ -1339,14 +1340,14 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime)
var/state_change = 0
if(on)
if(beaker)
if(beaker.reagents.chem_temp != desired_temp)
beaker.reagents.chem_temp += ((desired_temp - beaker.reagents.chem_temp) * heater_coefficient)
if(beaker.reagents.chem_temp > desired_temp)
beaker.reagents.chem_temp += min(-1, (desired_temp - beaker.reagents.chem_temp) * heater_coefficient)
if(beaker.reagents.chem_temp < desired_temp)
beaker.reagents.chem_temp += max(1, (desired_temp - beaker.reagents.chem_temp) * heater_coefficient)
beaker.reagents.chem_temp = round(beaker.reagents.chem_temp) //stops stuff like 456.12312312302
beaker.reagents.chem_temp = round(beaker.reagents.chem_temp) //stops stuff like 456.12312312302
if(beaker.reagents.chem_temp == ((desired_temp-3) || (desired_temp+3)))//need better way to stop superdecimals and rounding drops
beaker.reagents.chem_temp = desired_temp
beaker.reagents.handle_reactions()
state_change = 1
beaker.reagents.handle_reactions()
state_change = 1
if(state_change)
SSnano.update_uis(src)
@@ -1445,3 +1446,47 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime)
ui = new(user, src, ui_key, "chem_heater.tmpl", "ChemHeater", 350, 270)
ui.set_initial_data(data)
ui.open()
///////////////////////////////////////////////////////////////////////////
/obj/machinery/chem_dispenser/drinks
name = "soda dispenser"
anchored = 1
icon = 'icons/obj/chemical.dmi'
icon_state = "soda_dispenser"
energy = 100
max_energy = 100
amount = 30
recharge_delay = 5
uiname = "Soda Dispenser"
dispensable_reagents = list("water","ice","coffee","cream","tea","icetea","cola","spacemountainwind","dr_gibb","space_up","tonic","sodawater","lemon_lime","sugar","orangejuice","limejuice","tomatojuice")
/obj/machinery/chem_dispenser/drinks/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(default_unfasten_wrench(user, O))
return
if (istype(O,/obj/item/weapon/reagent_containers/glass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker))
if (beaker)
return 1
else
src.beaker = O
user.drop_item()
O.loc = src
update_icon()
src.updateUsrDialog()
return 0
/obj/machinery/chem_dispenser/drinks/beer
name = "booze dispenser"
anchored = 1
icon = 'icons/obj/chemical.dmi'
icon_state = "booze_dispenser"
uiname = "Booze Dispenser"
dispensable_reagents = list("lemon_lime","sugar","orangejuice","limejuice","sodawater","tonic","beer","kahlua","whiskey","wine","vodka","gin","rum","tequila","vermouth","cognac","ale")
+2 -2
View File
@@ -603,7 +603,7 @@ datum/chemical_reaction/pestkiller
O.show_message(text("<span class='danger'>The slime extract begins to vibrate violently !</span>"), 1)
spawn(50)
chemical_mob_spawn(holder, 1, "Gold Slime")
chemical_mob_spawn(holder, 5, "Gold Slime")
/datum/chemical_reaction/slimecritlesser
name = "Slime Crit Lesser"
@@ -619,7 +619,7 @@ datum/chemical_reaction/pestkiller
O.show_message(text("<span class='danger'>The slime extract begins to vibrate violently !</span>"), 1)
spawn(50)
chemical_mob_spawn(holder, 1, "Lesser Gold Slime")
chemical_mob_spawn(holder, 1, "Lesser Gold Slime", "neutral")
//Silver
/datum/chemical_reaction/slimebork
@@ -91,17 +91,13 @@
else
usr << "<span class='notice'>It is spent.</span>"
/obj/item/weapon/reagent_containers/hypospray/medipen/leporazine //basilisks
name = "leporazine medipen"
desc = "A rapid way to regulate your body's temperature in the event of a hardsuit malfunction at the cost of some shortness of breath."
icon_state = "lepopen"
list_reagents = list("leporazine" = 9, "lexorin" = 1)
/obj/item/weapon/reagent_containers/hypospray/medipen/stimpack //goliath kiting
name = "ephedrine medipen"
desc = "A rapid way to stimulate your body's adrenaline, allowing for freer movement in restrictive armor at the cost of some shortness of breath."
name = "stimpack medipen"
desc = "A rapid way to stimulate your body's adrenaline, allowing for freer movement in restrictive armor as well as a ."
icon_state = "stimpen"
list_reagents = list("ephedrine" = 9, "lexorin" = 1)
volume = 20
amount_per_transfer_from_this = 20
list_reagents = list("ephedrine" = 10, "coffee" = 10)
/obj/item/weapon/reagent_containers/hypospray/medipen/morphine
name = "morphine medipen"
+33 -23
View File
@@ -126,16 +126,6 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
/////////////////Mining//////////////////
/////////////////////////////////////////
/datum/design/jackhammer
name = "Sonic Jackhammer"
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
id = "jackhammer"
req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 2000, "$glass" = 500, "$silver" = 500)
build_path = /obj/item/weapon/pickaxe/jackhammer
category = list("Mining Designs")
/datum/design/drill
name = "Mining Drill"
desc = "Yours is the drill that will pierce through the rock walls."
@@ -152,32 +142,32 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
id = "plasmacutter"
req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$plasma" = 500)
materials = list("$metal" = 5000, "$glass" = 1000, "$gold" = 500, "$plasma" = 500)
reliability = 79
build_path = /obj/item/weapon/pickaxe/plasmacutter
category = list("Mining Designs")
/datum/design/pick_diamond
name = "Diamond Pickaxe"
desc = "A pickaxe with a diamond pick head, this is just like minesim 2554!."
id = "pick_diamond"
req_tech = list("materials" = 6)
build_type = PROTOLATHE
materials = list("$diamond" = 3000)
build_path = /obj/item/weapon/pickaxe/diamond
category = list("Mining Designs")
/datum/design/drill_diamond
name = "Diamond Mining Drill"
name = "Diamond-Tipped Mining Drill"
desc = "Yours is the drill that will pierce the heavens!"
id = "drill_diamond"
req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4)
build_type = PROTOLATHE
materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
materials = list("$metal" = 6000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
reliability = 79
build_path = /obj/item/weapon/pickaxe/drill/diamonddrill
category = list("Mining Designs")
/datum/design/jackhammer
name = "Sonic Jackhammer"
desc = "Essentially a handheld planet-cracker. Can drill through walls with ease as well, but has high power cost for doing so."
id = "jackhammer"
req_tech = list("materials" = 6, "powerstorage" = 6, "engineering" = 5, "magnets" = 6)
build_type = PROTOLATHE
materials = list("$metal" = 8000, "$glass" = 1500, "$silver" = 2000, "$diamond" = 6000)
build_path = /obj/item/weapon/pickaxe/drill/jackhammer
category = list("Mining Designs")
/////////////////////////////////////////
//////////////Blue Space/////////////////
/////////////////////////////////////////
@@ -297,6 +287,16 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
build_path = /obj/item/clothing/mask/gas/welding
category = list("Equipement")
/datum/design/air_horn
name = "Air Horn"
desc = "Damn son, where'd you find this?"
id = "air_horn"
req_tech = list("materials" = 2, "engineering" = 2)
build_type = PROTOLATHE
materials = list("$metal" = 4000, "$bananium" = 1000)
build_path = /obj/item/weapon/bikehorn/airhorn
category = list("Equipement")
/datum/design/mesons
name = "Optical Meson Scanners"
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
@@ -307,6 +307,16 @@ datum/design/proc/CalcReliability(var/list/temp_techs)
build_path = /obj/item/clothing/glasses/meson
category = list("Equipement")
/datum/design/nvgmesons
name = "Night Vision Optical Meson Scanners"
desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display."
id = "nvgmesons"
req_tech = list("materials" = 5, "magnets" = 5, "engineering" = 4)
build_type = PROTOLATHE
materials = list("$metal" = 300, "$glass" = 400, "$plasma" = 250, "$uranium" = 1000)
build_path = /obj/item/clothing/glasses/meson/night
category = list("Equipement")
/datum/design/night_vision_goggles
name = "Night Vision Goggles"
desc = "Goggles that let you see through darkness unhindered."
@@ -599,7 +599,7 @@
/////////////////////////////////////////
/datum/design/borg_upgrade_reset
name = "Cyborg Upgrade Module (Reset Module)"
name = "Cyborg Upgrade (Reset Module)"
id = "borg_upgrade_reset"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/reset
@@ -608,7 +608,7 @@
category = list("Cyborg Upgrade Modules")
/datum/design/borg_upgrade_rename
name = "Cyborg Upgrade Module (Rename Module)"
name = "Cyborg Upgrade (Rename Module)"
id = "borg_upgrade_rename"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/rename
@@ -617,7 +617,7 @@
category = list("Cyborg Upgrade Modules")
/datum/design/borg_upgrade_restart
name = "Cyborg Upgrade Module (Restart Module)"
name = "Cyborg Upgrade (Restart Module)"
id = "borg_upgrade_restart"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/restart
@@ -626,7 +626,7 @@
category = list("Cyborg Upgrade Modules")
/datum/design/borg_upgrade_vtec
name = "Cyborg Upgrade Module (VTEC Module)"
name = "Cyborg Upgrade (VTEC Module)"
id = "borg_upgrade_vtec"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/vtec
@@ -636,7 +636,7 @@
category = list("Cyborg Upgrade Modules")
/datum/design/borg_upgrade_disablercooler
name = "Cyborg Upgrade Module (Rapid Disabler Cooling Module)"
name = "Cyborg Upgrade (Rapid Disabler Cooling Module)"
id = "borg_upgrade_disablercooler"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/disablercooler
@@ -646,18 +646,28 @@
category = list("Cyborg Upgrade Modules")
/datum/design/borg_upgrade_jetpack
name = "Cyborg Upgrade Module (Mining Jetpack)"
name = "Cyborg Upgrade (Mining Jetpack)"
id = "borg_upgrade_jetpack"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/jetpack
req_tech = list("engineering" = 4, "power" = 4)
materials = list("$metal"=10000,"$plasma"=12000,"$uranium" = 10000)
materials = list("$metal"=10000, "$plasma"=5000, "$uranium" = 6000)
construction_time = 120
category = list("Cyborg Upgrade Modules")
/datum/design/borg_upgrade_diamonddrill
name = "Cyborg Upgrade (Diamond Drill)"
id = "borg_upgrade_diamonddrill"
build_type = MECHFAB
build_path = /obj/item/borg/upgrade/ddrill
req_tech = list("engineering" = 5, "materials" = 5)
materials = list("$metal"=10000, "$diamond"=3750)
construction_time = 120
category = list("Cyborg Upgrade Modules")
/datum/design/borg_syndicate_module
name = "Borg Illegal Weapons Upgrade"
desc = "Allows for the construction of illegal upgrades for cyborgs"
name = "Cyborg Illegal Upgrades Module"
desc = "Allows for the construction of restricted upgrades for cyborgs"
id = "borg_syndicate_module"
build_type = MECHFAB
req_tech = list("combat" = 4, "syndicate" = 3)
+60 -22
View File
@@ -40,12 +40,6 @@
temp_list[O] = text2num(temp_list[O])
return temp_list
/obj/machinery/r_n_d/experimentor/proc/ConvertReqList2String(var/list/source_list)
var/returnString = ""
for(var/O in source_list)
returnString += "[O];"
return returnString
/* //uncomment to enable forced reactions.
/obj/machinery/r_n_d/experimentor/verb/forceReaction()
set name = "Force Experimentor Reaction"
@@ -227,7 +221,7 @@
--cloneCount
if(cloneCount == 0)
cloneMode = FALSE
var/turf/dropturf = get_turf(pick(oview(1,src)))
var/turf/dropturf = get_turf(pick(view(1,src)))
if(!dropturf) //Failsafe to prevent the object being lost in the void forever.
dropturf = get_turf(src)
loaded_item.loc = dropturf
@@ -256,6 +250,7 @@
/obj/machinery/r_n_d/experimentor/proc/experiment(var/exp,var/obj/item/exp_on)
recentlyExperimented = 1
icon_state = "h_lathe_wloop"
var/chosenchem
var/criticalReaction = locate(exp_on) in critical_items ? TRUE : FALSE
////////////////////////////////////////////////////////////////////////////////////////////////
if(exp == SCANTYPE_POKE)
@@ -265,8 +260,9 @@
badThingCoeff++
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
visible_message("<span class='notice'>[src] malfunctions and destroys [exp_on], lashing it's arms out at nearby people!.</span>")
for(var/mob/living/m in oview(1))
for(var/mob/living/m in oview(1, src))
m.apply_damage(15,"brute",pick("head","chest","groin"))
investigate_log("Experimentor dealt minor brute to [m].", "experimentor")
ejectItem(TRUE)
if(prob(EFFECT_PROB_LOW-badThingCoeff))
visible_message("<span class='notice'>[src] malfunctions!.</span>")
@@ -276,6 +272,7 @@
var/mob/living/target = locate(/mob/living) in oview(7,src)
if(target)
var/obj/item/throwing = loaded_item
investigate_log("Experimentor has thrown [loaded_item] at [target]", "experimentor")
ejectItem()
if(throwing)
throwing.throw_at(target, 10, 1)
@@ -286,15 +283,17 @@
visible_message("<span class='notice'>[exp_on] has activated an unknown subroutine!</span>")
cloneMode = TRUE
cloneCount = badThingCoeff
investigate_log("Experimentor has made a clone of [exp_on]", "experimentor")
ejectItem()
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
visible_message("<span class='notice'>[src] malfunctions, melting [exp_on] and leaking radiation!.</span>")
for(var/mob/living/m in oview(1))
for(var/mob/living/m in oview(1, src))
m.apply_effect(25,IRRADIATE)
investigate_log("Experimentor has irradiated [m]", "experimentor") //One entry per person so we know what was irradiated.
ejectItem(TRUE)
if(prob(EFFECT_PROB_LOW-badThingCoeff))
visible_message("<span class='notice'>[src] malfunctions, spewing toxic waste!.</span>")
for(var/turf/T in oview(1))
for(var/turf/T in oview(1, src))
if(!T.density)
if(prob(EFFECT_PROB_VERYHIGH))
new /obj/effect/decal/cleanable/greenglow(T)
@@ -304,6 +303,7 @@
var/newPath = pickWeighted(valid_items)
loaded_item = new newPath(src)
visible_message("<span class='notice'>[src] malfunctions, transforming [savedName] into [loaded_item]!.</span>")
investigate_log("Experimentor has transformed [savedName] into [loaded_item]", "experimentor")
if(istype(loaded_item,/obj/item/weapon/grenade/chem_grenade))
var/obj/item/weapon/grenade/chem_grenade/CG = loaded_item
CG.prime()
@@ -316,10 +316,11 @@
new /obj/item/stack/sheet/mineral/plasma(get_turf(pick(oview(1,src))))
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
visible_message("<span class='notice'>[src] destroys [exp_on], leaking dangerous gas!.</span>")
var/list/chems = list("carbon","radium","toxin","condensedcapsaicin","mushroomhallucinogen","space_drugs","ethanol","beepskysmash")
chosenchem = pick("carbon","radium","toxin","condensedcapsaicin","mushroomhallucinogen","space_drugs","ethanol","beepskysmash")
var/datum/reagents/R = new/datum/reagents(50)
R.my_atom = src
R.add_reagent(pick(chems) , 50)
R.add_reagent(chosenchem , 50)
investigate_log("Experimentor has released [chosenchem] smoke.", "experimentor")
var/datum/effect/effect/system/chem_smoke_spread/smoke = new
smoke.set_up(R, 1, 0, src, 0, silent = 1)
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
@@ -327,23 +328,26 @@
R.delete()
ejectItem(TRUE)
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
visible_message("<span class='notice'>[src]'s chemical chamber has sprung a leak!.</span>")
var/list/chems = list("mutationtoxin","nanomachines","xenomicrobes")
visible_message("<span class='danger'>[src]'s chemical chamber has sprung a leak!</span>")
chosenchem = pick("mutationtoxin","nanomachines","sacid")
var/datum/reagents/R = new/datum/reagents(50)
R.my_atom = src
R.add_reagent(pick(chems) , 50)
R.add_reagent(chosenchem , 50)
var/datum/effect/effect/system/chem_smoke_spread/smoke = new
smoke.set_up(R, 1, 0, src, 0, silent = 1)
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
smoke.start()
R.delete()
ejectItem(TRUE)
warn_admins(usr, "[chosenchem] smoke")
investigate_log("Experimentor has released <font color='red'>[chosenchem]</font> smoke!", "experimentor")
if(prob(EFFECT_PROB_LOW-badThingCoeff))
visible_message("<span class='notice'>[src] malfunctions, spewing harmless gas!.</span>")
throwSmoke(src.loc)
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
visible_message("<span class='notice'>[src] melts [exp_on], ionizing the air around it!.</span>")
empulse(src.loc, 4, 6)
investigate_log("Experimentor has generated an Electromagnetic Pulse.", "experimentor")
ejectItem(TRUE)
////////////////////////////////////////////////////////////////////////////////////////////////
if(exp == SCANTYPE_HEAT)
@@ -352,16 +356,19 @@
visible_message("<span class='danger'>[src]'s emergency coolant system gives off a small ding!</span>")
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
var/obj/item/weapon/reagent_containers/food/drinks/coffee/C = new /obj/item/weapon/reagent_containers/food/drinks/coffee(get_turf(pick(oview(1,src))))
var/list/chems = list("plasma","capsaicin","ethanol")
chosenchem = pick("plasma","capsaicin","ethanol")
C.reagents.remove_any(25)
C.reagents.add_reagent(pick(chems) , 50)
C.reagents.add_reagent(chosenchem , 50)
C.name = "Cup of Suspicious Liquid"
C.desc = "It has a large hazard symbol printed on the side in fading ink."
investigate_log("Experimentor has made a cup of [chosenchem] coffee.", "experimentor")
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
var/turf/start = get_turf(src)
var/turf/MT = get_turf(locate(/mob/living) in oview(src, 3))
var/mob/M = locate(/mob/living) in view(src, 3)
var/turf/MT = get_turf(M)
if(MT)
visible_message("<span class='danger'>[src] dangerously overheats, launching a flaming fuel orb!</span>")
investigate_log("Experimentor has launched a <font color='red'>fireball</font> at [M]!", "experimentor")
var/obj/item/projectile/magic/fireball/FB = new /obj/item/projectile/magic/fireball(start)
FB.original = MT
FB.current = start
@@ -371,6 +378,7 @@
if(prob(EFFECT_PROB_LOW-badThingCoeff))
visible_message("<span class='notice'>[src] malfunctions, melting [exp_on] and releasing a burst of flame!.</span>")
explosion(src.loc, -1, 0, 0, 0, 0, flame_range = 2)
investigate_log("Experimentor started a fire.", "experimentor")
ejectItem(TRUE)
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
visible_message("<span class='notice'>[src] malfunctions, melting [exp_on] and leaking hot air!.</span>")
@@ -384,12 +392,14 @@
removed.temperature = min((removed.temperature*heat_capacity + 100000)/heat_capacity, 1000)
env.merge(removed)
air_update_turf()
investigate_log("Experimentor has released hot air.", "experimentor")
ejectItem(TRUE)
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
visible_message("<span class='notice'>[src] malfunctions, activating it's emergency coolant systems!.</span>")
throwSmoke(src.loc)
for(var/mob/living/m in oview(1))
for(var/mob/living/m in oview(1, src))
m.apply_damage(5,"burn",pick("head","chest","groin"))
investigate_log("Experimentor has dealt minor burn damage to [m]", "experimentor")
ejectItem()
////////////////////////////////////////////////////////////////////////////////////////////////
if(exp == SCANTYPE_COLD)
@@ -398,16 +408,18 @@
visible_message("<span class='notice'>[src]'s emergency coolant system gives off a small ding!</span>")
var/obj/machinery/vending/coffee/C = new /obj/machinery/vending/coffee(get_turf(pick(oview(1,src))))
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) //Ding! Your death coffee is ready!
var/list/chems = list("uranium","frostoil","ephedrine")
chosenchem = pick("uranium","frostoil","ephedrine")
C.reagents.remove_any(25)
C.reagents.add_reagent(pick(chems) , 50)
C.reagents.add_reagent(chosenchem , 50)
C.name = "Cup of Suspicious Liquid"
C.desc = "It has a large hazard symbol printed on the side in fading ink."
investigate_log("Experimentor has made a cup of [chosenchem] coffee.", "experimentor")
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
visible_message("<span class='notice'>[src] malfunctions, shattering [exp_on] and releasing a dangerous cloud of coolant!</span>")
var/datum/reagents/R = new/datum/reagents(50)
R.my_atom = src
R.add_reagent("frostoil" , 50)
investigate_log("Experimentor has released frostoil gas.", "experimentor")
var/datum/effect/effect/system/chem_smoke_spread/smoke = new
smoke.set_up(R, 1, 0, src, 0, silent = 1)
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
@@ -426,6 +438,7 @@
removed.temperature = (removed.temperature*heat_capacity - 75000)/heat_capacity
env.merge(removed)
air_update_turf()
investigate_log("Experimentor has released cold air.", "experimentor")
ejectItem(TRUE)
if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
visible_message("<span class='notice'>[src] malfunctions, releasing a flurry of chilly air as [exp_on] pops out!.</span>")
@@ -445,6 +458,7 @@
if(prob(EFFECT_PROB_VERYLOW-badThingCoeff))
visible_message("<span class='notice'>[src]'s crusher goes way too many levels too high, crushing right through space-time!</span>")
playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
investigate_log("Experimentor has triggered the 'throw things' reaction.", "experimentor")
var/list/throwAt = list()
for(var/i in oview(7,src))
if(istype(i,/obj/item) || istype(i,/mob/living))
@@ -456,6 +470,7 @@
if(prob(EFFECT_PROB_LOW-badThingCoeff))
visible_message("<span class='notice'>[src]'s crusher goes one level too high, crushing right into space-time!.</span>")
playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 1, -3)
investigate_log("Experimentor has triggered the 'minor throw things' reaction.", "experimentor")
var/list/oViewStuff = oview(7,src)
var/list/throwAt = list()
for(var/i in oViewStuff)
@@ -477,6 +492,7 @@
playsound(src.loc, 'sound/effects/supermatter.ogg', 50, 3, -1)
var/obj/item/weapon/relic/R = loaded_item
R.reveal()
investigate_log("Experimentor has revealed a relic with <span class='danger'>[R.realProc]</span> effect.", "experimentor")
ejectItem()
//Global reactions
@@ -492,30 +508,37 @@
if(trackedIan)
throwSmoke(trackedIan.loc)
trackedIan.loc = src.loc
investigate_log("Experimentor has stolen Ian!", "experimentor") //...if anyone ever fixes it...
else
new /mob/living/simple_animal/corgi(src.loc)
investigate_log("Experimentor has spawned a new corgi.", "experimentor")
ejectItem(TRUE)
if(globalMalf > 36 && globalMalf < 50)
visible_message("<span class='notice'>[src] improves [exp_on], drawing the life essence of those nearby!</span>")
for(var/mob/living/m in view(4,src))
m << "<span class='danger'>You feel your flesh being torn from you, mists of blood drifting to [src]!</span>"
m.apply_damage(50,"brute","chest")
investigate_log("Experimentor has taken 50 brute a blood sacrifice from [m]", "experimentor")
var/list/reqs = ConvertReqString2List(exp_on.origin_tech)
for(var/T in reqs)
reqs[T] = reqs[T] + 1
exp_on.origin_tech = ConvertReqList2String(reqs)
exp_on.origin_tech = list2params(reqs)
investigate_log("Experimentor has set the origin tech of [exp_on] to [exp_on.origin_tech]", "experimentor")
if(globalMalf > 51 && globalMalf < 75)
visible_message("<span class='notice'>[src] encounters a run-time error!</span>")
throwSmoke(src.loc)
if(trackedRuntime)
throwSmoke(trackedRuntime.loc)
trackedRuntime.loc = src.loc
investigate_log("Experimentor has stolen Runtime!", "experimentor")
else
new /mob/living/simple_animal/cat(src.loc)
investigate_log("Experimentor failed to steal runtime, and instead spawned a new cat.", "experimentor")
ejectItem(TRUE)
if(globalMalf > 76)
visible_message("<span class='notice'>[src] begins to smoke and hiss, shaking violently!</span>")
use_power(500000)
investigate_log("Experimentor has drained power from its APC", "experimentor")
spawn(resetTime)
icon_state = "h_lathe"
@@ -562,6 +585,12 @@
src.updateUsrDialog()
return
//~~~~~~~~Admin logging proc, aka the Powergamer Alarm~~~~~~~~
/obj/machinery/r_n_d/experimentor/proc/warn_admins(var/mob/user, var/ReactionName)
var/turf/T = get_turf(src)
message_admins("Experimentor reaction: [ReactionName] generated by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) at ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)",0,1)
log_game("Experimentor reaction: [ReactionName] generated by [user.ckey]([user]) in ([T.x],[T.y],[T.z])")
#undef SCANTYPE_POKE
#undef SCANTYPE_IRRADIATE
#undef SCANTYPE_GAS
@@ -638,6 +667,7 @@
playsound(src.loc, "sparks", rand(25,50), 1)
var/obj/item/weapon/grenade/flashbang/CB = new/obj/item/weapon/grenade/flashbang(get_turf(user))
CB.prime()
warn_admins(user, "Flash")
/obj/item/weapon/relic/proc/petSpray(var/mob/user)
visible_message("<span class='notice'>[src] begans to shake, and in the distance the sound of rampaging animals arises!</span>")
@@ -647,6 +677,7 @@
for(counter = 1; counter < animals; counter++)
var/mobType = pick(valid_animals)
new mobType(get_turf(src))
warn_admins(user, "Mass Mob Spawn")
/obj/item/weapon/relic/proc/rapidDupe(var/mob/user)
visible_message("<span class='notice'>[src] emits a loud pop!</span>")
@@ -674,6 +705,7 @@
if(src.loc == user)
visible_message("<span class='notice'>The [src]'s top opens, releasing a powerful blast!</span>")
explosion(user.loc, -1, rand(1,5), rand(1,5), rand(1,5), rand(1,5), flame_range = 2)
warn_admins(user, "Explosion")
/obj/item/weapon/relic/proc/teleport(var/mob/user)
visible_message("<span class='notice'>The [src] begins to vibrate!</span>")
@@ -683,3 +715,9 @@
throwSmoke(get_turf(user))
do_teleport(user, get_turf(user), 8, asoundin = 'sound/effects/phasein.ogg')
throwSmoke(get_turf(user))
//Admin Warning proc for relics
/obj/item/weapon/relic/proc/warn_admins(var/mob/user, var/RelicType)
var/turf/T = get_turf(src)
message_admins("[RelicType] relic activated by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) in ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>)",0,1)
log_game("[RelicType] relic used by [user.ckey]([user]) in ([T.x],[T.y],[T.z])")
+1
View File
@@ -45,6 +45,7 @@
var/burn_dam = 0
var/max_damage = 0
var/status = ORGAN_ORGANIC
var/list/embedded_objects = list()
@@ -0,0 +1,44 @@
/datum/surgery/embedded_removal
name = "removal of embedded objects"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/remove_object)
species = list(/mob/living/carbon/human)
location = "anywhere"
has_multi_loc = 1
/datum/surgery_step/remove_object
time = 32
allowed_organs = list("r_arm","l_arm","r_leg","l_leg","chest","head")
accept_hand = 1
var/obj/item/organ/limb/L = null
/datum/surgery_step/remove_object/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
L = new_organ
if(L)
user.visible_message("<span class='notice'>[user] looks for objects embedded in [target]'s [parse_zone(user.zone_sel.selecting)].</span>")
else
user.visible_message("<span class='notice'>[user] looks for [target]'s [parse_zone(user.zone_sel.selecting)].</span>")
/datum/surgery_step/remove_object/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
if(L)
if(ishuman(target))
var/mob/living/carbon/human/H = target
var/objects = 0
for(var/obj/item/I in L.embedded_objects)
objects++
I.loc = get_turf(H)
L.embedded_objects -= I
if(objects > 0)
user.visible_message("<span class='notice'>[user] sucessfully removes [objects] objects from [H]'s [L.getDisplayName()]!</span>")
else
user.visible_message("<span class='notice'>[user] finds no objects embedded in [H]'s [L.getDisplayName()].</span>")
else
user.visible_message("<span class='notice'>[user] can't find [target]'s [parse_zone(user.zone_sel.selecting)], let alone any objects embedded in it!</span>")
return 1