mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-28 15:47:15 +01:00
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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)"
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
<tr><td> </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 += " <A href='?src=\ref[src];internal=[slot_back]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
|
||||
dat += "</td></tr><tr><td> </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> ↳<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 += " <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> ↳<B>Belt:</B></font></td></tr>"
|
||||
else
|
||||
dat += "<tr><td> ↳<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 += " <A href='?src=\ref[src];internal=[slot_belt]'>[internal ? "Disable Internals" : "Set Internals"]</A>"
|
||||
dat += "</td></tr>"
|
||||
dat += "<tr><td> ↳<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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"])
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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++)
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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])")
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user