Merge branch 'master' into shadow_fluff

This commit is contained in:
Novacat
2020-09-26 16:49:30 -04:00
committed by GitHub
386 changed files with 6238 additions and 23515 deletions
+26 -40
View File
@@ -433,45 +433,6 @@
// Insert("polycrystal", 'icons/obj/telescience.dmi', "polycrystal")
// ..()
/datum/asset/nanoui
var/list/common = list()
var/list/common_dirs = list(
"nano/css/",
"nano/images/",
"nano/images/modular_computers/",
"nano/js/"
)
var/list/template_dirs = list(
"nano/templates/"
)
/datum/asset/nanoui/register()
// Crawl the directories to find files.
for(var/path in common_dirs)
var/list/filenames = flist(path)
for(var/filename in filenames)
if(copytext(filename, length(filename)) != "/") // Ignore directories.
if(fexists(path + filename))
common[filename] = fcopy_rsc(path + filename)
register_asset(filename, common[filename])
// Combine all templates into a single bundle.
var/list/template_data = list()
for(var/path in template_dirs)
var/list/filenames = flist(path)
for(var/filename in filenames)
if(copytext(filename, length(filename) - 4) == ".tmpl") // Ignore directories.
template_data[filename] = file2text(path + filename)
var/template_bundle = "function nanouiTemplateBundle(){return [json_encode(template_data)];}"
var/fname = "data/nano_templates_bundle.js"
fdel(fname)
text2file(template_bundle, fname)
register_asset("nano_templates_bundle.js", fcopy_rsc(fname))
fdel(fname)
/datum/asset/nanoui/send(client)
send_asset_list(client, common)
//Pill sprites for UIs
/datum/asset/chem_master
var/assets = list()
@@ -522,4 +483,29 @@
/datum/asset/spritesheet/sheetmaterials/register()
InsertAll("", 'icons/obj/stacks.dmi')
..()
..()
// Nanomaps
/datum/asset/simple/nanomaps
// It REALLY doesnt matter too much if these arent up to date
// They are relatively big
assets = list(
"southern_cross_nanomap_z1.png" = 'icons/_nanomaps/southern_cross_nanomap_z1.png',
"southern_cross_nanomap_z10.png" = 'icons/_nanomaps/southern_cross_nanomap_z10.png',
"southern_cross_nanomap_z2.png" = 'icons/_nanomaps/southern_cross_nanomap_z2.png',
"southern_cross_nanomap_z3.png" = 'icons/_nanomaps/southern_cross_nanomap_z3.png',
"southern_cross_nanomap_z5.png" = 'icons/_nanomaps/southern_cross_nanomap_z5.png',
"southern_cross_nanomap_z6.png" = 'icons/_nanomaps/southern_cross_nanomap_z6.png',
"tether_nanomap_z1.png" = 'icons/_nanomaps/tether_nanomap_z1.png',
"tether_nanomap_z10.png" = 'icons/_nanomaps/tether_nanomap_z10.png',
"tether_nanomap_z13.png" = 'icons/_nanomaps/tether_nanomap_z13.png',
"tether_nanomap_z14.png" = 'icons/_nanomaps/tether_nanomap_z14.png',
"tether_nanomap_z2.png" = 'icons/_nanomaps/tether_nanomap_z2.png',
"tether_nanomap_z3.png" = 'icons/_nanomaps/tether_nanomap_z3.png',
"tether_nanomap_z4.png" = 'icons/_nanomaps/tether_nanomap_z4.png',
"tether_nanomap_z5.png" = 'icons/_nanomaps/tether_nanomap_z5.png',
"tether_nanomap_z6.png" = 'icons/_nanomaps/tether_nanomap_z6.png',
"tether_nanomap_z7.png" = 'icons/_nanomaps/tether_nanomap_z7.png',
"tether_nanomap_z8.png" = 'icons/_nanomaps/tether_nanomap_z8.png',
"tether_nanomap_z9.png" = 'icons/_nanomaps/tether_nanomap_z9.png',
)
+7 -1
View File
@@ -2,7 +2,7 @@
name = "clothing"
siemens_coefficient = 0.9
drop_sound = 'sound/items/drop/clothing.ogg'
pickup_sound = 'sound/items/pickup/cloth.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
var/list/species_restricted = null //Only these species can wear this kit.
var/gunshot_residue //Used by forensics.
@@ -435,6 +435,8 @@
fingerprint_chance = 100
punch_force = 2
body_parts_covered = 0
drop_sound = 'sound/items/drop/ring.ogg'
pickup_sound = 'sound/items/pickup/ring.ogg'
///////////////////////////////////////////////////////////////////////
//Head
@@ -573,6 +575,9 @@
var/list/say_messages
var/list/say_verbs
drop_sound = "generic_drop"
pickup_sound = "generic_pickup"
/obj/item/clothing/mask/update_clothing_icon()
if (ismob(src.loc))
var/mob/M = src.loc
@@ -733,6 +738,7 @@
siemens_coefficient = 0.9
w_class = ITEMSIZE_NORMAL
preserve_item = 1
equip_sound = 'sound/items/jumpsuit_equip.ogg'
sprite_sheets = list(
+4 -4
View File
@@ -53,8 +53,8 @@
desc = "A delicate golden chain worn by female skrell to decorate their head tails."
icon_state = "skrell_chain"
item_state_slots = list(slot_r_hand_str = "egg5", slot_l_hand_str = "egg5")
drop_sound = 'sound/items/drop/accessory.ogg'
pickup_sound = 'sound/items/pickup/accessory.ogg'
drop_sound = 'sound/items/drop/ring.ogg'
pickup_sound = 'sound/items/pickup/ring.ogg'
/obj/item/clothing/ears/skrell/chain/silver
name = "Silver headtail chains"
@@ -85,8 +85,8 @@
desc = "Golden metallic bands worn by male skrell to adorn their head tails."
icon_state = "skrell_band"
item_state_slots = list(slot_r_hand_str = "egg5", slot_l_hand_str = "egg5")
drop_sound = 'sound/items/drop/accessory.ogg'
pickup_sound = 'sound/items/pickup/accessory.ogg'
drop_sound = 'sound/items/drop/ring.ogg'
pickup_sound = 'sound/items/pickup/ring.ogg'
/obj/item/clothing/ears/skrell/band/silver
name = "Silver headtail bands"
-12
View File
@@ -8,8 +8,6 @@
var/obj/item/clothing/glasses/hud/omni/hud = null
var/mode = "civ"
icon_state = "glasses"
var/datum/nano_module/arscreen
var/arscreen_path
var/datum/tgui_module/tgarscreen
var/tgarscreen_path
var/flash_prot = 0 //0 for none, 1 for flash weapon protection, 2 for welder protection
@@ -18,34 +16,24 @@
/obj/item/clothing/glasses/omnihud/New()
..()
if(arscreen_path)
arscreen = new arscreen_path(src)
if(tgarscreen_path)
tgarscreen = new tgarscreen_path(src)
/obj/item/clothing/glasses/omnihud/Destroy()
QDEL_NULL(arscreen)
QDEL_NULL(tgarscreen)
. = ..()
/obj/item/clothing/glasses/omnihud/dropped()
if(arscreen)
SSnanoui.close_uis(src)
if(tgarscreen)
SStgui.close_uis(src)
..()
/obj/item/clothing/glasses/omnihud/emp_act(var/severity)
if(arscreen)
SSnanoui.close_uis(src)
if(tgarscreen)
SStgui.close_uis(src)
var/disconnect_ar = arscreen
var/disconnect_tgar = tgarscreen
arscreen = null
tgarscreen = null
spawn(20 SECONDS)
arscreen = disconnect_ar
tgarscreen = disconnect_tgar
//extra fun for non-sci variants; a small chance flip the state to the dumb 3d glasses when EMP'd
@@ -37,6 +37,7 @@
icon_state = "sunflower_crown"
body_parts_covered = 0
drop_sound = 'sound/items/drop/herb.ogg'
pickup_sound = 'sound/items/pickup/herb.ogg'
/obj/item/clothing/head/lavender_crown
name = "lavender crown"
@@ -44,6 +45,7 @@
icon_state = "lavender_crown"
body_parts_covered = 0
drop_sound = 'sound/items/drop/herb.ogg'
pickup_sound = 'sound/items/pickup/herb.ogg'
/obj/item/clothing/head/poppy_crown
name = "poppy crown"
@@ -51,6 +53,7 @@
icon_state = "poppy_crown"
body_parts_covered = 0
drop_sound = 'sound/items/drop/herb.ogg'
pickup_sound = 'sound/items/pickup/herb.ogg'
/obj/item/clothing/head/rose_crown
name = "rose crown"
@@ -58,3 +61,4 @@
icon_state = "poppy_crown"
body_parts_covered = 0
drop_sound = 'sound/items/drop/herb.ogg'
pickup_sound = 'sound/items/pickup/herb.ogg'
+4 -3
View File
@@ -17,8 +17,8 @@
desc = "A nice hair pin."
slot_flags = SLOT_HEAD | SLOT_EARS
body_parts_covered = 0
drop_sound = 'sound/items/drop/ring.ogg'
pickup_sound = 'sound/items/pickup/ring.ogg'
drop_sound = 'sound/items/drop/accessory.ogg'
pickup_sound = 'sound/items/pickup/accessory.ogg'
/obj/item/clothing/head/pin/pink
icon_state = "pinkpin"
@@ -424,7 +424,8 @@
desc = "A jeweled headpiece originating in India."
icon_state = "maangtikka"
body_parts_covered = 0
drop_sound = 'sound/items/drop/accessory.ogg'
drop_sound = 'sound/items/drop/ring.ogg'
pickup_sound = 'sound/items/pickup/ring.ogg'
/obj/item/clothing/head/jingasa
name = "jingasa"
+2
View File
@@ -10,6 +10,8 @@
permeability_coefficient = 0.50
var/hanging = 0
action_button_name = "Adjust Breath Mask"
pickup_sound = 'sound/items/pickup/component.ogg'
drop_sound = 'sound/items/drop/component.ogg'
/obj/item/clothing/mask/breath/proc/adjust_mask(mob/user)
+1
View File
@@ -13,6 +13,7 @@
var/gas_filter_strength = 1 //For gas mask filters
var/list/filtered_gases = list("phoron", "nitrous_oxide")
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 75, rad = 0)
pickup_sound = 'sound/items/pickup/rubber.ogg'
/obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air)
var/datum/gas_mixture/gas_filtered = new
+2 -2
View File
@@ -108,7 +108,7 @@ obj/item/clothing/shoes/sandal/clogs
species_restricted = null
w_class = ITEMSIZE_SMALL
drop_sound = 'sound/items/drop/clothing.ogg'
pickup_sound = 'sound/items/pickup/cloth.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
/obj/item/clothing/shoes/slippers/worn
name = "worn bunny slippers"
@@ -172,7 +172,7 @@ obj/item/clothing/shoes/sandal/clogs
w_class = ITEMSIZE_SMALL
species_restricted = null
drop_sound = 'sound/items/drop/clothing.ogg'
pickup_sound = 'sound/items/pickup/cloth.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
/obj/item/clothing/shoes/boots/ranger
var/bootcolor = "white"
@@ -23,7 +23,7 @@
to_chat(usr, "Your module is not installed in a hardsuit.")
return
module.holder.ui_interact(usr, nano_state = contained_state)
module.holder.tgui_interact(usr, custom_state = GLOB.tgui_contained_state)
/obj/item/rig_module/ai_container
@@ -134,7 +134,7 @@
if(!target)
if(ai_card)
if(istype(ai_card,/obj/item/device/aicard))
ai_card.tgui_interact(H, custom_state = deep_inventory_state)
ai_card.tgui_interact(H, custom_state = GLOB.tgui_deep_inventory_state)
else
eject_ai(H)
update_verb_holder()
@@ -13,9 +13,6 @@
var/stored_name
var/badge_string = "Corporate Security"
drop_sound = 'sound/items/drop/ring.ogg'
pickup_sound = 'sound/items/pickup/ring.ogg'
/obj/item/clothing/accessory/badge/old
name = "faded badge"
+157 -155
View File
@@ -15,7 +15,7 @@
var/const/fund_cap = 1000000
/obj/machinery/account_database/proc/get_access_level()
if (!held_card)
if(!held_card)
return 0
if(access_cent_captain in held_card.access)
return 2
@@ -53,19 +53,24 @@
O.loc = src
held_card = O
SSnanoui.update_uis(src)
SStgui.update_uis(src)
attack_hand(user)
/obj/machinery/account_database/attack_hand(mob/user as mob)
if(stat & (NOPOWER|BROKEN)) return
ui_interact(user)
tgui_interact(user)
/obj/machinery/account_database/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src)
/obj/machinery/account_database/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "AccountsTerminal", name)
ui.open()
/obj/machinery/account_database/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
var/data[0]
data["src"] = "\ref[src]"
data["id_inserted"] = !!held_card
data["id_card"] = held_card ? text("[held_card.registered_name], [held_card.assignment]") : "-----"
data["access_level"] = get_access_level()
@@ -73,10 +78,14 @@
data["creating_new_account"] = creating_new_account
data["detailed_account_view"] = !!detailed_account_view
data["station_account_number"] = station_account.account_number
data["transactions"] = null
data["accounts"] = null
if (detailed_account_view)
data["account_number"] = null
data["owner_name"] = null
data["money"] = null
data["suspended"] = null
data["transactions"] = list()
if(detailed_account_view)
data["account_number"] = detailed_account_view.account_number
data["owner_name"] = detailed_account_view.owner_name
data["money"] = detailed_account_view.money
@@ -92,11 +101,10 @@
"amount" = T.amount, \
"source_terminal" = T.source_terminal)))
if (trx.len > 0)
data["transactions"] = trx
data["transactions"] = trx
var/list/accounts[0]
for(var/i=1, i<=all_money_accounts.len, i++)
var/list/accounts = list()
for(var/i in 1 to LAZYLEN(all_money_accounts))
var/datum/money_account/D = all_money_accounts[i]
if(D.offmap)
continue
@@ -106,174 +114,168 @@
"suspended"=D.suspended ? "SUSPENDED" : "",\
"account_index"=i)))
if (accounts.len > 0)
data["accounts"] = accounts
data["accounts"] = accounts
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640)
ui.set_initial_data(data)
ui.open()
return data
/obj/machinery/account_database/Topic(href, href_list)
/obj/machinery/account_database/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..())
return 1
return TRUE
var/datum/nanoui/ui = SSnanoui.get_open_ui(usr, src, "main")
switch(action)
if("create_account")
creating_new_account = 1
if(href_list["choice"])
switch(href_list["choice"])
if("create_account")
creating_new_account = 1
if("add_funds")
var/amount = input("Enter the amount you wish to add", "Silently add funds") as num
if(detailed_account_view)
detailed_account_view.money = min(detailed_account_view.money + amount, fund_cap)
if("add_funds")
var/amount = input("Enter the amount you wish to add", "Silently add funds") as num
if(detailed_account_view)
detailed_account_view.money = min(detailed_account_view.money + amount, fund_cap)
if("remove_funds")
var/amount = input("Enter the amount you wish to remove", "Silently remove funds") as num
if(detailed_account_view)
detailed_account_view.money = max(detailed_account_view.money - amount, -fund_cap)
if("remove_funds")
var/amount = input("Enter the amount you wish to remove", "Silently remove funds") as num
if(detailed_account_view)
detailed_account_view.money = max(detailed_account_view.money - amount, -fund_cap)
if("toggle_suspension")
if(detailed_account_view)
detailed_account_view.suspended = !detailed_account_view.suspended
callHook("change_account_status", list(detailed_account_view))
if("toggle_suspension")
if(detailed_account_view)
detailed_account_view.suspended = !detailed_account_view.suspended
callHook("change_account_status", list(detailed_account_view))
if("finalise_create_account")
var/account_name = params["holder_name"]
var/starting_funds = max(text2num(params["starting_funds"]), 0)
if("finalise_create_account")
var/account_name = href_list["holder_name"]
var/starting_funds = max(text2num(href_list["starting_funds"]), 0)
starting_funds = CLAMP(starting_funds, 0, station_account.money) // Not authorized to put the station in debt.
starting_funds = min(starting_funds, fund_cap) // Not authorized to give more than the fund cap.
starting_funds = CLAMP(starting_funds, 0, station_account.money) // Not authorized to put the station in debt.
starting_funds = min(starting_funds, fund_cap) // Not authorized to give more than the fund cap.
create_account(account_name, starting_funds, src)
if(starting_funds > 0)
//subtract the money
station_account.money -= starting_funds
create_account(account_name, starting_funds, src)
if(starting_funds > 0)
//subtract the money
station_account.money -= starting_funds
//create a transaction log entry
var/trx = create_transation(account_name, "New account activation", "([starting_funds])")
station_account.transaction_log.Add(trx)
creating_new_account = 0
ui.close()
//create a transaction log entry
var/trx = create_transation(account_name, "New account activation", "([starting_funds])")
station_account.transaction_log.Add(trx)
creating_new_account = 0
if("insert_card")
if(held_card)
held_card.loc = src.loc
if(ishuman(usr) && !usr.get_active_hand())
usr.put_in_hands(held_card)
held_card = null
creating_new_account = 0
if("insert_card")
if(held_card)
held_card.loc = src.loc
else
var/obj/item/I = usr.get_active_hand()
if (istype(I, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/C = I
usr.drop_item()
C.loc = src
held_card = C
if(ishuman(usr) && !usr.get_active_hand())
usr.put_in_hands(held_card)
held_card = null
if("view_account_detail")
var/index = text2num(href_list["account_index"])
if(index && index <= all_money_accounts.len)
detailed_account_view = all_money_accounts[index]
else
var/obj/item/I = usr.get_active_hand()
if(istype(I, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/C = I
usr.drop_item()
C.loc = src
held_card = C
if("view_accounts_list")
detailed_account_view = null
creating_new_account = 0
if("view_account_detail")
var/index = text2num(params["account_index"])
if(index && index <= all_money_accounts.len)
detailed_account_view = all_money_accounts[index]
if("revoke_payroll")
var/funds = detailed_account_view.money
var/account_trx = create_transation(station_account.owner_name, "Revoke payroll", "([funds])")
var/station_trx = create_transation(detailed_account_view.owner_name, "Revoke payroll", funds)
if("view_accounts_list")
detailed_account_view = null
creating_new_account = 0
station_account.money += funds
detailed_account_view.money = 0
if("revoke_payroll")
var/funds = detailed_account_view.money
var/account_trx = create_transation(station_account.owner_name, "Revoke payroll", "([funds])")
var/station_trx = create_transation(detailed_account_view.owner_name, "Revoke payroll", funds)
detailed_account_view.transaction_log.Add(account_trx)
station_account.transaction_log.Add(station_trx)
station_account.money += funds
detailed_account_view.money = 0
callHook("revoke_payroll", list(detailed_account_view))
detailed_account_view.transaction_log.Add(account_trx)
station_account.transaction_log.Add(station_trx)
if("print")
var/text
var/obj/item/weapon/paper/P = new(loc)
if (detailed_account_view)
P.name = "account #[detailed_account_view.account_number] details"
var/title = "Account #[detailed_account_view.account_number] Details"
text = {"
[accounting_letterhead(title)]
<u>Holder:</u> [detailed_account_view.owner_name]<br>
<u>Balance:</u> $[detailed_account_view.money]<br>
<u>Status:</u> [detailed_account_view.suspended ? "Suspended" : "Active"]<br>
<u>Transactions:</u> ([detailed_account_view.transaction_log.len])<br>
<table>
<thead>
<tr>
<td>Timestamp</td>
<td>Target</td>
<td>Reason</td>
<td>Value</td>
<td>Terminal</td>
</tr>
</thead>
<tbody>
"}
callHook("revoke_payroll", list(detailed_account_view))
for (var/datum/transaction/T in detailed_account_view.transaction_log)
text += {"
<tr>
<td>[T.date] [T.time]</td>
<td>[T.target_name]</td>
<td>[T.purpose]</td>
<td>[T.amount]</td>
<td>[T.source_terminal]</td>
</tr>
"}
if("print")
print()
text += {"
</tbody>
</table>
"}
return TRUE
else
P.name = "financial account list"
text = {"
[accounting_letterhead("Financial Account List")]
/obj/machinery/account_database/proc/print()
var/text
var/obj/item/weapon/paper/P = new(loc)
if(detailed_account_view)
P.name = "account #[detailed_account_view.account_number] details"
var/title = "Account #[detailed_account_view.account_number] Details"
text = {"
[accounting_letterhead(title)]
<u>Holder:</u> [detailed_account_view.owner_name]<br>
<u>Balance:</u> $[detailed_account_view.money]<br>
<u>Status:</u> [detailed_account_view.suspended ? "Suspended" : "Active"]<br>
<u>Transactions:</u> ([detailed_account_view.transaction_log.len])<br>
<table>
<thead>
<tr>
<td>Timestamp</td>
<td>Target</td>
<td>Reason</td>
<td>Value</td>
<td>Terminal</td>
</tr>
</thead>
<tbody>
"}
<table>
<thead>
<tr>
<td>Account Number</td>
<td>Holder</td>
<td>Balance</td>
<td>Status</td>
</tr>
</thead>
<tbody>
"}
for (var/datum/transaction/T in detailed_account_view.transaction_log)
text += {"
<tr>
<td>[T.date] [T.time]</td>
<td>[T.target_name]</td>
<td>[T.purpose]</td>
<td>[T.amount]</td>
<td>[T.source_terminal]</td>
</tr>
"}
for(var/i=1, i<=all_money_accounts.len, i++)
var/datum/money_account/D = all_money_accounts[i]
text += {"
<tr>
<td>#[D.account_number]</td>
<td>[D.owner_name]</td>
<td>$[D.money]</td>
<td>[D.suspended ? "Suspended" : "Active"]</td>
</tr>
"}
text += {"
</tbody>
</table>
"}
text += {"
</tbody>
</table>
"}
else
P.name = "financial account list"
text = {"
[accounting_letterhead("Financial Account List")]
P.info = text
state("The terminal prints out a report.")
<table>
<thead>
<tr>
<td>Account Number</td>
<td>Holder</td>
<td>Balance</td>
<td>Status</td>
</tr>
</thead>
<tbody>
"}
return 1
for(var/i=1, i<=all_money_accounts.len, i++)
var/datum/money_account/D = all_money_accounts[i]
text += {"
<tr>
<td>#[D.account_number]</td>
<td>[D.owner_name]</td>
<td>$[D.money]</td>
<td>[D.suspended ? "Suspended" : "Active"]</td>
</tr>
"}
text += {"
</tbody>
</table>
"}
P.info = text
state("The terminal prints out a report.")
+8 -2
View File
@@ -5,8 +5,8 @@
name = "drink"
desc = "yummy"
icon = 'icons/obj/drinks.dmi'
drop_sound = 'sound/items/drop/bottle.ogg'
pickup_sound = 'sound/items/pickup/bottle.ogg'
drop_sound = 'sound/items/drop/drinkglass.ogg'
pickup_sound = 'sound/items/pickup/drinkglass.ogg'
icon_state = null
flags = OPENCONTAINER
amount_per_transfer_from_this = 5
@@ -234,6 +234,7 @@
trash = /obj/item/trash/coffee
center_of_mass = list("x"=15, "y"=13)
drop_sound = 'sound/items/drop/papercup.ogg'
pickup_sound = 'sound/items/pickup/papercup.ogg'
/obj/item/weapon/reagent_containers/food/drinks/h_chocolate/Initialize()
..()
@@ -248,6 +249,7 @@
trash = /obj/item/trash/coffee
center_of_mass = list("x"=16, "y"=14)
drop_sound = 'sound/items/drop/papercup.ogg'
pickup_sound = 'sound/items/pickup/papercup.ogg'
/obj/item/weapon/reagent_containers/food/drinks/greentea/Initialize()
. = ..()
@@ -262,6 +264,7 @@
trash = /obj/item/trash/coffee
center_of_mass = list("x"=16, "y"=14)
drop_sound = 'sound/items/drop/papercup.ogg'
pickup_sound = 'sound/items/pickup/papercup.ogg'
/obj/item/weapon/reagent_containers/food/drinks/chaitea/Initialize()
. = ..()
@@ -276,6 +279,7 @@
trash = /obj/item/trash/coffee
center_of_mass = list("x"=16, "y"=14)
drop_sound = 'sound/items/drop/papercup.ogg'
pickup_sound = 'sound/items/pickup/papercup.ogg'
/obj/item/weapon/reagent_containers/food/drinks/decaf/Initialize()
. = ..()
@@ -289,6 +293,7 @@
trash = /obj/item/trash/ramen
center_of_mass = list("x"=16, "y"=11)
drop_sound = 'sound/items/drop/papercup.ogg'
pickup_sound = 'sound/items/pickup/papercup.ogg'
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/Initialize()
..()
@@ -302,6 +307,7 @@
volume = 10
center_of_mass = list("x"=16, "y"=12)
drop_sound = 'sound/items/drop/papercup.ogg'
pickup_sound = 'sound/items/pickup/papercup.ogg'
/obj/item/weapon/reagent_containers/food/drinks/sillycup/Initialize()
. = ..()
+1
View File
@@ -19,6 +19,7 @@
if(isGlass)
unacidable = 1
drop_sound = 'sound/items/drop/bottle.ogg'
pickup_sound = 'sound/items/pickup/bottle.ogg'
/obj/item/weapon/reagent_containers/food/drinks/bottle/Destroy()
if(rag)
@@ -8,8 +8,6 @@
volume = 30
unacidable = 1 //glass
center_of_mass = list("x"=16, "y"=10)
drop_sound = 'sound/items/drop/drinkglass.ogg'
pickup_sound = 'sound/items/pickup/drinkglass.ogg'
matter = list("glass" = 500)
on_reagent_change()
+3
View File
@@ -318,6 +318,7 @@
nutriment_amt = 1
nutriment_desc = list("candy" = 1)
/obj/item/weapon/reagent_containers/food/snacks/candy/Initialize()
. = ..()
reagents.add_reagent("sugar", 3)
@@ -4161,6 +4162,8 @@
trash = /obj/item/trash/unajerky
filling_color = "#631212"
center_of_mass = list("x"=15, "y"=9)
drop_sound = 'sound/items/drop/soda.ogg'
pickup_sound = 'sound/items/pickup/soda.ogg'
/obj/item/weapon/reagent_containers/food/snacks/unajerky/Initialize()
. =..()
@@ -16,7 +16,7 @@
use_power = USE_POWER_IDLE
idle_power_usage = 5 // Power used when turned on, but not processing anything
active_power_usage = 1000 // Power used when turned on and actively cooking something
var/cooking_power = 0 // Effectiveness/speed at cooking
var/cooking_coeff = 0 // Optimal power * proximity to optimal temp; used to calc. cooking power.
var/heating_power = 1000 // Effectiveness at heating up; not used for mixers, should be equal to active_power_usage
@@ -44,9 +44,9 @@
/obj/machinery/appliance/Initialize()
. = ..()
default_apply_parts()
if(output_options.len)
verbs += /obj/machinery/appliance/proc/choose_output
@@ -206,7 +206,7 @@
//Handles all validity checking and error messages for inserting things
/obj/machinery/appliance/proc/can_insert(var/obj/item/I, var/mob/user)
if (istype(I, /obj/item/weapon/gripper))
if(istype(I.loc, /mob/living/silicon))
return 0
else if (istype(I.loc, /obj/item/rig_module))
return 0
@@ -266,26 +266,52 @@
to_chat(user, "<span class='warning'>\The [src] is not working.</span>")
return FALSE
var/result = can_insert(I, user)
if(!result)
if(!(default_deconstruction_screwdriver(user, I)))
default_part_replacement(user, I)
return FALSE
var/obj/item/ToCook = I
if(result == 2)
var/obj/item/weapon/grab/G = I
if (G && istype(G) && G.affecting)
cook_mob(G.affecting, user)
return FALSE
if(istype(I, /obj/item/weapon/gripper))
var/obj/item/weapon/gripper/GR = I
var/obj/item/Wrap = GR.wrapped
if(Wrap)
Wrap.loc = get_turf(src)
var/result = can_insert(Wrap, user)
if(!result)
Wrap.forceMove(GR)
if(!(default_deconstruction_screwdriver(user, I)))
default_part_replacement(user, I)
return
if(QDELETED(GR.wrapped))
GR.wrapped = null
if(GR?.wrapped.loc != src)
GR.drop_item_nm()
ToCook = Wrap
else
attack_hand(user)
return
else
var/result = can_insert(I, user)
if(!result)
if(!(default_deconstruction_screwdriver(user, I)))
default_part_replacement(user, I)
return
if(result == 2)
var/obj/item/weapon/grab/G = I
if (G && istype(G) && G.affecting)
cook_mob(G.affecting, user)
return
//From here we can start cooking food
. = add_content(I, user)
add_content(ToCook, user)
update_icon()
//Override for container mechanics
/obj/machinery/appliance/proc/add_content(var/obj/item/I, var/mob/user)
if(!user.unEquip(I))
return FALSE
if(!user.unEquip(I) && !isturf(I.loc))
return
var/datum/cooking_item/CI = has_space(I)
if (istype(I, /obj/item/weapon/reagent_containers/cooking_container) && CI == 1)
@@ -458,7 +484,7 @@
//Final step. Cook function just cooks batter for now.
for (var/obj/item/weapon/reagent_containers/food/snacks/S in CI.container)
S.cook()
//Combination cooking involves combining the names and reagents of ingredients into a predefined output object
//The ingredients represent flavours or fillings. EG: donut pizza, cheese bread
@@ -566,7 +592,7 @@
smoke.attach(src)
smoke.set_up(10, 0, get_turf(src), 300)
smoke.start()
// Set off fire alarms!
var/obj/machinery/firealarm/FA = locate() in get_area(src)
if(FA)
@@ -32,13 +32,26 @@
/obj/item/weapon/reagent_containers/cooking_container/attackby(var/obj/item/I as obj, var/mob/user as mob)
if(istype(I, /obj/item/weapon/gripper))
var/obj/item/weapon/gripper/GR = I
if(GR.wrapped)
GR.wrapped.forceMove(get_turf(src))
attackby(GR.wrapped, user)
if(QDELETED(GR.wrapped))
GR.wrapped = null
if(GR?.wrapped.loc != src)
GR.wrapped = null
return
for (var/possible_type in insertable)
if (istype(I, possible_type))
if (!can_fit(I))
to_chat(user, "<span class='warning'>There's no more space in the [src] for that!</span>")
return 0
if(!user.unEquip(I))
if(!user.unEquip(I) && !isturf(I.loc))
return
I.forceMove(src)
to_chat(user, "<span class='notice'>You put the [I] into the [src].</span>")
@@ -152,7 +165,7 @@
/obj/item/weapon/reagent_containers/cooking_container/oven/Initialize()
. = ..()
// We add to the insertable list specifically for the oven trays, to allow specialty cakes.
insertable += list(
/obj/item/clothing/head/cakehat, // This is because we want to allow birthday cakes to be makeable.
@@ -164,7 +177,7 @@
shortname = "basket"
desc = "Put ingredients in this; designed for use with a deep fryer. Warranty void if used incorrectly. Alt click to remove contents."
icon_state = "basket"
/obj/item/weapon/reagent_containers/cooking_container/grill
name = "grill rack"
shortname = "rack"
@@ -218,7 +218,7 @@
/datum/event2/event/prison_break/start()
for(var/area/A in areas_to_break)
spawn(0) // So we don't block the ticker.
A.prison_break(open_blast_doors = !ignore_blast_doors)
A.prison_break(TRUE, TRUE, !ignore_blast_doors) // Naming `open_blast_doors` causes mysterious runtimes.
// There's between 40 seconds and one minute before the whole station knows.
// If there's a baddie engineer, they can choose to keep their early announcement to themselves and get a minute to exploit it.
File diff suppressed because it is too large Load Diff
+3
View File
@@ -337,3 +337,6 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
/obj/item/seeds/sifbulb
seed_type = "sifbulb"
/obj/item/seeds/wurmwoad
seed_type = "wurmwoad"
+4 -2
View File
@@ -138,7 +138,8 @@
/obj/item/seeds/wabback = 2,
/obj/item/seeds/watermelonseed = 3,
/obj/item/seeds/wheatseed = 3,
/obj/item/seeds/whitebeetseed = 3
/obj/item/seeds/whitebeetseed = 3,
/obj/item/seeds/wurmwoad = 3
)
/obj/machinery/seed_storage/xenobotany
@@ -195,7 +196,8 @@
/obj/item/seeds/wabback = 2,
/obj/item/seeds/watermelonseed = 3,
/obj/item/seeds/wheatseed = 3,
/obj/item/seeds/whitebeetseed = 3
/obj/item/seeds/whitebeetseed = 3,
/obj/item/seeds/wurmwoad = 3
)
/obj/machinery/seed_storage/attack_hand(mob/user as mob)
@@ -0,0 +1,15 @@
/datum/seed/amauri
name = "amauri"
seed_name = "amauri"
display_name = "amauri plant"
kitchen_tag = "amauri"
chems = list("zombiepowder" = list(1,10),"condensedcapsaicin" = list(1,5),"nutriment" = list(1,5))
/datum/seed/amauri/New()
..()
set_trait(TRAIT_PLANT_ICON,"bush4")
set_trait(TRAIT_ENDURANCE,10)
set_trait(TRAIT_MATURATION,8)
set_trait(TRAIT_PRODUCTION,9)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,10)
@@ -0,0 +1,46 @@
//Ambrosia/varieties.
/datum/seed/ambrosia
name = "ambrosia"
seed_name = "ambrosia vulgaris"
display_name = "ambrosia vulgaris"
kitchen_tag = "ambrosia"
mutants = list("ambrosiadeus")
chems = list("nutriment" = list(1), "space_drugs" = list(1,8), "kelotane" = list(1,8,1), "bicaridine" = list(1,10,1), "toxin" = list(1,10))
/datum/seed/ambrosia/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,6)
set_trait(TRAIT_POTENCY,5)
set_trait(TRAIT_PRODUCT_ICON,"ambrosia")
set_trait(TRAIT_PRODUCT_COLOUR,"#9FAD55")
set_trait(TRAIT_PLANT_ICON,"ambrosia")
set_trait(TRAIT_IDEAL_LIGHT, 6)
/datum/seed/ambrosia/deus
name = "ambrosiadeus"
seed_name = "ambrosia deus"
display_name = "ambrosia deus"
kitchen_tag = "ambrosiadeus"
mutants = list("ambrosiainfernus")
chems = list("nutriment" = list(1), "bicaridine" = list(1,8), "synaptizine" = list(1,8,1), "hyperzine" = list(1,10,1), "space_drugs" = list(1,10))
/datum/seed/ambrosia/deus/New()
..()
set_trait(TRAIT_PRODUCT_COLOUR,"#A3F0AD")
set_trait(TRAIT_PLANT_COLOUR,"#2A9C61")
/datum/seed/ambrosia/infernus
name = "ambrosiainfernus"
seed_name = "ambrosia infernus"
display_name = "ambrosia infernus"
kitchen_tag = "ambrosiainfernus"
mutants = null
chems = list("nutriment" = list(1,3), "oxycodone" = list(1,8), "impedrezene" = list(1,10), "mindbreaker" = list(1,10))
/datum/seed/ambrosia/infernus/New()
..()
set_trait(TRAIT_PRODUCT_COLOUR,"#dc143c")
set_trait(TRAIT_PLANT_COLOUR,"#b22222")
@@ -0,0 +1,62 @@
//Apples/varieties.
/datum/seed/apple
name = "apple"
seed_name = "apple"
display_name = "apple tree"
kitchen_tag = "apple"
mutants = list("poisonapple","goldapple")
chems = list("nutriment" = list(1,10),"applejuice" = list(10,20))
/datum/seed/apple/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,5)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"apple")
set_trait(TRAIT_PRODUCT_COLOUR,"#FF540A")
set_trait(TRAIT_PLANT_ICON,"tree2")
set_trait(TRAIT_FLESH_COLOUR,"#E8E39B")
set_trait(TRAIT_IDEAL_LIGHT, 4)
/datum/seed/apple/poison
name = "poisonapple"
mutants = null
chems = list("cyanide" = list(1,5))
/datum/seed/apple/gold
name = "goldapple"
seed_name = "golden apple"
display_name = "gold apple tree"
kitchen_tag = "goldapple"
mutants = null
chems = list("nutriment" = list(1,10), "gold" = list(1,5))
/datum/seed/apple/gold/New()
..()
set_trait(TRAIT_MATURATION,10)
set_trait(TRAIT_PRODUCTION,10)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_PRODUCT_COLOUR,"#FFDD00")
set_trait(TRAIT_PLANT_COLOUR,"#D6B44D")
/datum/seed/apple/sif
name = "sifbulb"
seed_name = "sivian tree"
display_name = "sivian pod"
kitchen_tag = "apple"
chems = list("nutriment" = list(1,5),"sifsap" = list(10,20))
/datum/seed/apple/sif/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,3)
set_trait(TRAIT_PRODUCTION,10)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,12)
set_trait(TRAIT_PRODUCT_ICON,"alien3")
set_trait(TRAIT_PRODUCT_COLOUR,"#0720c3")
set_trait(TRAIT_PLANT_ICON,"tree5")
set_trait(TRAIT_FLESH_COLOUR,"#05157d")
set_trait(TRAIT_IDEAL_LIGHT, 1)
@@ -0,0 +1,21 @@
/datum/seed/banana
name = "banana"
seed_name = "banana"
display_name = "banana tree"
kitchen_tag = "banana"
chems = list("banana" = list(10,10))
trash_type = /obj/item/weapon/bananapeel
/datum/seed/banana/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_PRODUCT_ICON,"bananas")
set_trait(TRAIT_PRODUCT_COLOUR,"#FFEC1F")
set_trait(TRAIT_PLANT_COLOUR,"#69AD50")
set_trait(TRAIT_PLANT_ICON,"tree4")
set_trait(TRAIT_IDEAL_HEAT, 298)
set_trait(TRAIT_IDEAL_LIGHT, 7)
set_trait(TRAIT_WATER_CONSUMPTION, 6)
@@ -0,0 +1,70 @@
// Berry plants/variants.
/datum/seed/berry
name = "berries"
seed_name = "berry"
display_name = "berry bush"
kitchen_tag = "berries"
mutants = list("glowberries","poisonberries")
chems = list("nutriment" = list(1,10), "berryjuice" = list(10,10))
/datum/seed/berry/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_JUICY,1)
set_trait(TRAIT_MATURATION,5)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"berry")
set_trait(TRAIT_PRODUCT_COLOUR,"#FA1616")
set_trait(TRAIT_PLANT_ICON,"bush")
set_trait(TRAIT_WATER_CONSUMPTION, 6)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
/datum/seed/berry/glow
name = "glowberries"
seed_name = "glowberry"
display_name = "glowberry bush"
mutants = null
chems = list("nutriment" = list(1,10), "uranium" = list(3,5))
/datum/seed/berry/glow/New()
..()
set_trait(TRAIT_SPREAD,1)
set_trait(TRAIT_BIOLUM,1)
set_trait(TRAIT_BIOLUM_COLOUR,"#006622")
set_trait(TRAIT_MATURATION,5)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_COLOUR,"#c9fa16")
set_trait(TRAIT_WATER_CONSUMPTION, 3)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25)
/datum/seed/berry/poison
name = "poisonberries"
seed_name = "poison berry"
kitchen_tag = "poisonberries"
display_name = "poison berry bush"
mutants = list("deathberries")
chems = list("nutriment" = list(1), "toxin" = list(3,5), "poisonberryjuice" = list(10,5))
/datum/seed/berry/poison/New()
..()
set_trait(TRAIT_PRODUCT_COLOUR,"#6DC961")
set_trait(TRAIT_WATER_CONSUMPTION, 3)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25)
/datum/seed/berry/poison/death
name = "deathberries"
seed_name = "death berry"
display_name = "death berry bush"
mutants = null
chems = list("nutriment" = list(1), "toxin" = list(3,3), "lexorin" = list(1,5))
/datum/seed/berry/poison/death/New()
..()
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,50)
set_trait(TRAIT_PRODUCT_COLOUR,"#7A5454")
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.35)
@@ -0,0 +1,21 @@
/datum/seed/cabbage
name = "cabbage"
seed_name = "cabbage"
display_name = "cabbages"
kitchen_tag = "cabbage"
chems = list("nutriment" = list(1,10))
/datum/seed/cabbage/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,3)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"cabbage")
set_trait(TRAIT_PRODUCT_COLOUR,"#84BD82")
set_trait(TRAIT_PLANT_COLOUR,"#6D9C6B")
set_trait(TRAIT_PLANT_ICON,"vine2")
set_trait(TRAIT_IDEAL_LIGHT, 6)
set_trait(TRAIT_WATER_CONSUMPTION, 6)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
@@ -0,0 +1,17 @@
/datum/seed/carrots
name = "carrot"
seed_name = "carrot"
display_name = "carrots"
kitchen_tag = "carrot"
chems = list("nutriment" = list(1,20), "imidazoline" = list(3,5), "carrotjuice" = list(10,20))
/datum/seed/carrots/New()
..()
set_trait(TRAIT_MATURATION,10)
set_trait(TRAIT_PRODUCTION,1)
set_trait(TRAIT_YIELD,5)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"carrot")
set_trait(TRAIT_PRODUCT_COLOUR,"#FFDB4A")
set_trait(TRAIT_PLANT_ICON,"carrot")
set_trait(TRAIT_WATER_CONSUMPTION, 6)
@@ -0,0 +1,17 @@
/datum/seed/celery
name = "celery"
seed_name = "celery"
display_name = "celery"
kitchen_tag = "celery"
chems = list("nutriment" = list(5,20))
/datum/seed/celery/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,4)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,8)
set_trait(TRAIT_PRODUCT_ICON,"stalk")
set_trait(TRAIT_PRODUCT_COLOUR,"#56FD56")
set_trait(TRAIT_PLANT_ICON,"stalk3")
@@ -0,0 +1,20 @@
/datum/seed/cherries
name = "cherry"
seed_name = "cherry"
seed_noun = "pits"
display_name = "cherry tree"
kitchen_tag = "cherries"
chems = list("nutriment" = list(1,15), "sugar" = list(1,15), "cherryjelly" = list(10,15))
/datum/seed/cherries/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_JUICY,1)
set_trait(TRAIT_MATURATION,5)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"cherry")
set_trait(TRAIT_PRODUCT_COLOUR,"#A80000")
set_trait(TRAIT_PLANT_ICON,"tree2")
set_trait(TRAIT_PLANT_COLOUR,"#2F7D2D")
@@ -0,0 +1,35 @@
// Chili plants/variants.
/datum/seed/chili
name = "chili"
seed_name = "chili"
display_name = "chili plants"
kitchen_tag = "chili"
chems = list("capsaicin" = list(3,5), "nutriment" = list(1,25))
mutants = list("icechili")
/datum/seed/chili/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,5)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,20)
set_trait(TRAIT_PRODUCT_ICON,"chili")
set_trait(TRAIT_PRODUCT_COLOUR,"#ED3300")
set_trait(TRAIT_PLANT_ICON,"bush2")
set_trait(TRAIT_IDEAL_HEAT, 298)
set_trait(TRAIT_IDEAL_LIGHT, 7)
/datum/seed/chili/ice
name = "icechili"
seed_name = "ice pepper"
display_name = "ice-pepper plants"
kitchen_tag = "icechili"
mutants = null
chems = list("frostoil" = list(3,5), "nutriment" = list(1,50))
/datum/seed/chili/ice/New()
..()
set_trait(TRAIT_MATURATION,4)
set_trait(TRAIT_PRODUCTION,4)
set_trait(TRAIT_PRODUCT_COLOUR,"#00EDC6")
@@ -0,0 +1,46 @@
/datum/seed/citrus
name = "lime"
seed_name = "lime"
display_name = "lime trees"
kitchen_tag = "lime"
chems = list("nutriment" = list(1,20), "limejuice" = list(10,20))
/datum/seed/citrus/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_JUICY,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,15)
set_trait(TRAIT_PRODUCT_ICON,"treefruit")
set_trait(TRAIT_PRODUCT_COLOUR,"#3AF026")
set_trait(TRAIT_PLANT_ICON,"tree")
set_trait(TRAIT_FLESH_COLOUR,"#3AF026")
/datum/seed/citrus/lemon
name = "lemon"
seed_name = "lemon"
display_name = "lemon trees"
kitchen_tag = "lemon"
chems = list("nutriment" = list(1,20), "lemonjuice" = list(10,20))
/datum/seed/citrus/lemon/New()
..()
set_trait(TRAIT_PRODUCES_POWER,1)
set_trait(TRAIT_PRODUCT_ICON,"lemon")
set_trait(TRAIT_PRODUCT_COLOUR,"#F0E226")
set_trait(TRAIT_FLESH_COLOUR,"#F0E226")
set_trait(TRAIT_IDEAL_LIGHT, 6)
/datum/seed/citrus/orange
name = "orange"
seed_name = "orange"
display_name = "orange trees"
kitchen_tag = "orange"
chems = list("nutriment" = list(1,20), "orangejuice" = list(10,20))
/datum/seed/citrus/orange/New()
..()
set_trait(TRAIT_PRODUCT_COLOUR,"#FFC20A")
set_trait(TRAIT_FLESH_COLOUR,"#FFC20A")
@@ -0,0 +1,19 @@
/datum/seed/cocoa
name = "cocoa"
seed_name = "cacao"
display_name = "cacao tree"
kitchen_tag = "cocoa"
chems = list("nutriment" = list(1,10), "coco" = list(4,5))
/datum/seed/cocoa/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,5)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"treefruit")
set_trait(TRAIT_PRODUCT_COLOUR,"#CCA935")
set_trait(TRAIT_PLANT_ICON,"tree2")
set_trait(TRAIT_IDEAL_HEAT, 298)
set_trait(TRAIT_WATER_CONSUMPTION, 6)
@@ -0,0 +1,21 @@
/datum/seed/corn
name = "corn"
seed_name = "corn"
display_name = "ears of corn"
kitchen_tag = "corn"
chems = list("nutriment" = list(1,10), "cornoil" = list(3,15))
trash_type = /obj/item/weapon/corncob
/datum/seed/corn/New()
..()
set_trait(TRAIT_MATURATION,8)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,20)
set_trait(TRAIT_PRODUCT_ICON,"corn")
set_trait(TRAIT_PRODUCT_COLOUR,"#FFF23B")
set_trait(TRAIT_PLANT_COLOUR,"#87C969")
set_trait(TRAIT_PLANT_ICON,"corn")
set_trait(TRAIT_IDEAL_HEAT, 298)
set_trait(TRAIT_IDEAL_LIGHT, 6)
set_trait(TRAIT_WATER_CONSUMPTION, 6)
@@ -0,0 +1,21 @@
/datum/seed/diona
name = "diona"
seed_name = "diona"
seed_noun = "nodes"
display_name = "replicant pods"
can_self_harvest = 1
apply_color_to_mob = FALSE
has_mob_product = /mob/living/carbon/alien/diona
/datum/seed/diona/New()
..()
set_trait(TRAIT_IMMUTABLE,1)
set_trait(TRAIT_ENDURANCE,8)
set_trait(TRAIT_MATURATION,5)
set_trait(TRAIT_PRODUCTION,10)
set_trait(TRAIT_YIELD,1)
set_trait(TRAIT_POTENCY,30)
set_trait(TRAIT_PRODUCT_ICON,"diona")
set_trait(TRAIT_PRODUCT_COLOUR,"#799957")
set_trait(TRAIT_PLANT_COLOUR,"#66804B")
set_trait(TRAIT_PLANT_ICON,"alien4")
@@ -0,0 +1,21 @@
/datum/seed/durian
name = "durian"
seed_name = "durian"
seed_noun = "pits"
display_name = "durian"
kitchen_tag = "durian"
chems = list("nutriment" = list(1,5), "durianpaste" = list(1, 20))
/datum/seed/durian/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"spinefruit")
set_trait(TRAIT_PRODUCT_COLOUR,"#757631")
set_trait(TRAIT_PLANT_COLOUR,"#87C969")
set_trait(TRAIT_PLANT_ICON,"tree")
set_trait(TRAIT_IDEAL_LIGHT, 8)
set_trait(TRAIT_WATER_CONSUMPTION, 8)
@@ -0,0 +1,31 @@
//Eggplants/varieties.
/datum/seed/eggplant
name = "eggplant"
seed_name = "eggplant"
display_name = "eggplants"
kitchen_tag = "eggplant"
mutants = list("egg-plant")
chems = list("nutriment" = list(1,10))
/datum/seed/eggplant/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_POTENCY,20)
set_trait(TRAIT_PRODUCT_ICON,"eggplant")
set_trait(TRAIT_PRODUCT_COLOUR,"#892694")
set_trait(TRAIT_PLANT_ICON,"bush4")
set_trait(TRAIT_IDEAL_HEAT, 298)
set_trait(TRAIT_IDEAL_LIGHT, 7)
// Return of Eggy. Just makes purple eggs. If the reagents are separated from the egg production by xenobotany or RNG, it's still an Egg plant.
/datum/seed/eggplant/egg
name = "egg-plant"
seed_name = "egg-plant"
display_name = "egg-plants"
kitchen_tag = "egg-plant"
mutants = null
chems = list("nutriment" = list(1,5), "egg" = list(3,12))
has_item_product = /obj/item/weapon/reagent_containers/food/snacks/egg/purple
@@ -0,0 +1,108 @@
//Flowers/varieties
/datum/seed/flower
name = "harebells"
seed_name = "harebell"
display_name = "harebells"
kitchen_tag = "harebell"
chems = list("nutriment" = list(1,20))
/datum/seed/flower/New()
..()
set_trait(TRAIT_MATURATION,7)
set_trait(TRAIT_PRODUCTION,1)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_PRODUCT_ICON,"flower5")
set_trait(TRAIT_PRODUCT_COLOUR,"#C492D6")
set_trait(TRAIT_PLANT_COLOUR,"#6B8C5E")
set_trait(TRAIT_PLANT_ICON,"flower")
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
/datum/seed/flower/poppy
name = "poppies"
seed_name = "poppy"
display_name = "poppies"
kitchen_tag = "poppy"
chems = list("nutriment" = list(1,20), "bicaridine" = list(1,10))
/datum/seed/flower/poppy/New()
..()
set_trait(TRAIT_POTENCY,20)
set_trait(TRAIT_MATURATION,8)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,6)
set_trait(TRAIT_PRODUCT_ICON,"flower3")
set_trait(TRAIT_PRODUCT_COLOUR,"#B33715")
set_trait(TRAIT_PLANT_ICON,"flower3")
set_trait(TRAIT_IDEAL_LIGHT, 6)
set_trait(TRAIT_WATER_CONSUMPTION, 0.5)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
/datum/seed/flower/sunflower
name = "sunflowers"
seed_name = "sunflower"
display_name = "sunflowers"
kitchen_tag = "sunflower"
/datum/seed/flower/sunflower/New()
..()
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCT_ICON,"flower2")
set_trait(TRAIT_PRODUCT_COLOUR,"#FFF700")
set_trait(TRAIT_PLANT_ICON,"flower2")
set_trait(TRAIT_IDEAL_LIGHT, 7)
set_trait(TRAIT_WATER_CONSUMPTION, 6)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
/datum/seed/flower/lavender
name = "lavender"
seed_name = "lavender"
display_name = "lavender"
kitchen_tag = "lavender"
chems = list("nutriment" = list(1,20), "bicaridine" = list(1,10))
/datum/seed/flower/lavender/New()
..()
set_trait(TRAIT_MATURATION,7)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,5)
set_trait(TRAIT_PRODUCT_ICON,"flower6")
set_trait(TRAIT_PRODUCT_COLOUR,"#B57EDC")
set_trait(TRAIT_PLANT_COLOUR,"#6B8C5E")
set_trait(TRAIT_PLANT_ICON,"flower4")
set_trait(TRAIT_IDEAL_LIGHT, 7)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.05)
set_trait(TRAIT_WATER_CONSUMPTION, 0.5)
/datum/seed/flower/rose
name = "rose"
seed_name = "rose"
display_name = "rose"
kitchen_tag = "rose"
mutants = list("bloodrose")
chems = list("nutriment" = list(1,5), "stoxin" = list(0,2))
/datum/seed/flower/rose/New()
..()
set_trait(TRAIT_MATURATION,7)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_PRODUCT_ICON,"flowers")
set_trait(TRAIT_PRODUCT_COLOUR,"#ce0e0e")
set_trait(TRAIT_PLANT_COLOUR,"#6B8C5E")
set_trait(TRAIT_PLANT_ICON,"bush5")
set_trait(TRAIT_IDEAL_LIGHT, 7)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.1)
set_trait(TRAIT_WATER_CONSUMPTION, 0.5)
set_trait(TRAIT_STINGS,1)
/datum/seed/flower/rose/blood
name = "bloodrose"
display_name = "bleeding rose"
mutants = null
chems = list("nutriment" = list(1,5), "stoxin" = list(1,5), "blood" = list(0,2))
/datum/seed/flower/rose/blood/New()
..()
set_trait(TRAIT_IDEAL_LIGHT, 1)
set_trait(TRAIT_PLANT_COLOUR,"#5e0303")
set_trait(TRAIT_CARNIVOROUS,1)
@@ -0,0 +1,15 @@
/datum/seed/gelthi
name = "gelthi"
seed_name = "gelthi"
display_name = "gelthi plant"
kitchen_tag = "gelthi"
chems = list("stoxin" = list(1,5),"capsaicin" = list(1,5),"nutriment" = list(1,5))
/datum/seed/gelthi/New()
..()
set_trait(TRAIT_PLANT_ICON,"mushroom3")
set_trait(TRAIT_ENDURANCE,15)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_POTENCY,1)
@@ -0,0 +1,25 @@
// Gnomes
/datum/seed/gnomes
name = "gnomes"
seed_name = "gnomes"
display_name = "gnomes"
force_layer = 3
chems = list("magicdust" = list(5,20))
/datum/seed/gnomes/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_PLANT_ICON,"gnomes")
set_trait(TRAIT_PRODUCT_ICON,"gnomes")
set_trait(TRAIT_PRODUCT_COLOUR,"")
set_trait(TRAIT_FLESH_COLOUR,"")
set_trait(TRAIT_PLANT_COLOUR,"")
set_trait(TRAIT_BIOLUM_COLOUR,"#fff200")
set_trait(TRAIT_MATURATION,8)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_BIOLUM,1)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_SPREAD,1)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_REQUIRES_NUTRIENTS,0)
set_trait(TRAIT_REQUIRES_WATER,0)
@@ -0,0 +1,33 @@
//Grapes/varieties
/datum/seed/grapes
name = "grapes"
seed_name = "grape"
display_name = "grapevines"
kitchen_tag = "grapes"
mutants = list("greengrapes")
chems = list("nutriment" = list(1,10), "sugar" = list(1,5), "grapejuice" = list(10,10))
/datum/seed/grapes/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,3)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"grapes")
set_trait(TRAIT_PRODUCT_COLOUR,"#BB6AC4")
set_trait(TRAIT_PLANT_COLOUR,"#378F2E")
set_trait(TRAIT_PLANT_ICON,"vine")
set_trait(TRAIT_IDEAL_LIGHT, 6)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
/datum/seed/grapes/green
name = "greengrapes"
seed_name = "green grape"
display_name = "green grapevines"
mutants = null
chems = list("nutriment" = list(1,10), "kelotane" = list(3,5), "grapejuice" = list(10,10))
/datum/seed/grapes/green/New()
..()
set_trait(TRAIT_PRODUCT_COLOUR,"42ed2f")
@@ -0,0 +1,19 @@
/datum/seed/grass
name = "grass"
seed_name = "grass"
display_name = "grass"
kitchen_tag = "grass"
chems = list("nutriment" = list(1,20))
/datum/seed/grass/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,2)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,5)
set_trait(TRAIT_PRODUCT_ICON,"grass")
set_trait(TRAIT_PRODUCT_COLOUR,"#09FF00")
set_trait(TRAIT_PLANT_COLOUR,"#07D900")
set_trait(TRAIT_PLANT_ICON,"grass")
set_trait(TRAIT_WATER_CONSUMPTION, 0.5)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
@@ -0,0 +1,15 @@
/datum/seed/jurlmah
name = "jurlmah"
seed_name = "jurl'mah"
display_name = "jurl'mah reeds"
kitchen_tag = "jurlmah"
chems = list("serotrotium" = list(1,5),"nutriment" = list(1,5))
/datum/seed/jurlmah/New()
..()
set_trait(TRAIT_PLANT_ICON,"mushroom9")
set_trait(TRAIT_ENDURANCE,12)
set_trait(TRAIT_MATURATION,8)
set_trait(TRAIT_PRODUCTION,9)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,10)
@@ -0,0 +1,19 @@
/datum/seed/kudzu
name = "kudzu"
seed_name = "kudzu"
display_name = "kudzu vines"
kitchen_tag = "kudzu"
chems = list("nutriment" = list(1,50), "anti_toxin" = list(1,25))
/datum/seed/kudzu/New()
..()
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_SPREAD,2)
set_trait(TRAIT_PRODUCT_ICON,"treefruit")
set_trait(TRAIT_PRODUCT_COLOUR,"#96D278")
set_trait(TRAIT_PLANT_COLOUR,"#6F7A63")
set_trait(TRAIT_PLANT_ICON,"vine2")
set_trait(TRAIT_WATER_CONSUMPTION, 0.5)
@@ -0,0 +1,34 @@
// Lettuce/varieties.
/datum/seed/lettuce
name = "lettuce"
seed_name = "lettuce"
display_name = "lettuce"
kitchen_tag = "cabbage"
chems = list("nutriment" = list(1,15))
/datum/seed/lettuce/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,4)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,6)
set_trait(TRAIT_POTENCY,8)
set_trait(TRAIT_PRODUCT_ICON,"lettuce")
set_trait(TRAIT_PRODUCT_COLOUR,"#A8D0A7")
set_trait(TRAIT_PLANT_COLOUR,"#6D9C6B")
set_trait(TRAIT_PLANT_ICON,"vine2")
set_trait(TRAIT_IDEAL_LIGHT, 6)
set_trait(TRAIT_WATER_CONSUMPTION, 8)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.13)
/datum/seed/lettuce/ice
name = "siflettuce"
seed_name = "glacial lettuce"
display_name = "glacial lettuce"
kitchen_tag = "icelettuce"
chems = list("nutriment" = list(1,5), "paracetamol" = list(0,2))
/datum/seed/lettuce/ice/New()
..()
set_trait(TRAIT_ALTER_TEMP, -5)
set_trait(TRAIT_PRODUCT_COLOUR,"#9ABCC9")
@@ -0,0 +1,19 @@
/datum/seed/mtear
name = "mtear"
seed_name = "Malani's tear"
display_name = "Malani's tear leaves"
kitchen_tag = "mtear"
chems = list("honey" = list(1,10), "kelotane" = list(3,5))
/datum/seed/mtear/New()
..()
set_trait(TRAIT_MATURATION,3)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"alien4")
set_trait(TRAIT_PRODUCT_COLOUR,"#4CC5C7")
set_trait(TRAIT_PLANT_COLOUR,"#4CC789")
set_trait(TRAIT_PLANT_ICON,"bush7")
set_trait(TRAIT_IDEAL_HEAT, 283)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
@@ -0,0 +1,200 @@
//Mushrooms/varieties.
/datum/seed/mushroom
name = "mushrooms"
seed_name = "chanterelle"
seed_noun = "spores"
display_name = "chanterelle mushrooms"
mutants = list("reishi","amanita","plumphelmet")
chems = list("nutriment" = list(1,25))
splat_type = /obj/effect/plant
kitchen_tag = "mushroom"
/datum/seed/mushroom/New()
..()
set_trait(TRAIT_MATURATION,7)
set_trait(TRAIT_PRODUCTION,1)
set_trait(TRAIT_YIELD,5)
set_trait(TRAIT_POTENCY,1)
set_trait(TRAIT_PRODUCT_ICON,"mushroom4")
set_trait(TRAIT_PRODUCT_COLOUR,"#DBDA72")
set_trait(TRAIT_PLANT_COLOUR,"#D9C94E")
set_trait(TRAIT_PLANT_ICON,"mushroom")
set_trait(TRAIT_WATER_CONSUMPTION, 6)
set_trait(TRAIT_IDEAL_HEAT, 288)
set_trait(TRAIT_LIGHT_TOLERANCE, 6)
/datum/seed/mushroom/mold
name = "mold"
seed_name = "brown mold"
display_name = "brown mold"
mutants = null
/datum/seed/mushroom/mold/New()
..()
set_trait(TRAIT_SPREAD,1)
set_trait(TRAIT_MATURATION,10)
set_trait(TRAIT_YIELD,-1)
set_trait(TRAIT_PRODUCT_ICON,"mushroom5")
set_trait(TRAIT_PRODUCT_COLOUR,"#7A5F20")
set_trait(TRAIT_PLANT_COLOUR,"#7A5F20")
set_trait(TRAIT_PLANT_ICON,"mushroom9")
/datum/seed/mushroom/plump
name = "plumphelmet"
seed_name = "plump helmet"
display_name = "plump helmet mushrooms"
mutants = list("walkingmushroom","towercap")
chems = list("nutriment" = list(2,10))
kitchen_tag = "plumphelmet"
/datum/seed/mushroom/plump/New()
..()
set_trait(TRAIT_MATURATION,8)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,0)
set_trait(TRAIT_PRODUCT_ICON,"mushroom10")
set_trait(TRAIT_PRODUCT_COLOUR,"#B57BB0")
set_trait(TRAIT_PLANT_COLOUR,"#9E4F9D")
set_trait(TRAIT_PLANT_ICON,"mushroom2")
/datum/seed/mushroom/hallucinogenic
name = "reishi"
seed_name = "reishi"
display_name = "reishi"
mutants = list("libertycap","glowshroom")
chems = list("nutriment" = list(1,50), "psilocybin" = list(3,5))
/datum/seed/mushroom/hallucinogenic/New()
..()
set_trait(TRAIT_MATURATION,10)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,15)
set_trait(TRAIT_PRODUCT_ICON,"mushroom11")
set_trait(TRAIT_PRODUCT_COLOUR,"#FFB70F")
set_trait(TRAIT_PLANT_COLOUR,"#F58A18")
set_trait(TRAIT_PLANT_ICON,"mushroom6")
/datum/seed/mushroom/hallucinogenic/strong
name = "libertycap"
seed_name = "liberty cap"
display_name = "liberty cap mushrooms"
mutants = null
chems = list("nutriment" = list(1), "stoxin" = list(3,3), "space_drugs" = list(1,25))
/datum/seed/mushroom/hallucinogenic/strong/New()
..()
set_trait(TRAIT_PRODUCTION,1)
set_trait(TRAIT_POTENCY,15)
set_trait(TRAIT_PRODUCT_ICON,"mushroom8")
set_trait(TRAIT_PRODUCT_COLOUR,"#F2E550")
set_trait(TRAIT_PLANT_COLOUR,"#D1CA82")
set_trait(TRAIT_PLANT_ICON,"mushroom3")
/datum/seed/mushroom/poison
name = "amanita"
seed_name = "fly amanita"
display_name = "fly amanita mushrooms"
mutants = list("destroyingangel","plastic")
chems = list("nutriment" = list(1), "amatoxin" = list(3,3), "psilocybin" = list(1,25))
/datum/seed/mushroom/poison/New()
..()
set_trait(TRAIT_MATURATION,10)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"mushroom")
set_trait(TRAIT_PRODUCT_COLOUR,"#FF4545")
set_trait(TRAIT_PLANT_COLOUR,"#E0DDBA")
set_trait(TRAIT_PLANT_ICON,"mushroom4")
/datum/seed/mushroom/poison/death
name = "destroyingangel"
seed_name = "destroying angel"
display_name = "destroying angel mushrooms"
mutants = null
chems = list("nutriment" = list(1,50), "amatoxin" = list(13,3), "psilocybin" = list(1,25))
/datum/seed/mushroom/poison/death/New()
..()
set_trait(TRAIT_MATURATION,12)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_POTENCY,35)
set_trait(TRAIT_PRODUCT_ICON,"mushroom3")
set_trait(TRAIT_PRODUCT_COLOUR,"#EDE8EA")
set_trait(TRAIT_PLANT_COLOUR,"#E6D8DD")
set_trait(TRAIT_PLANT_ICON,"mushroom5")
/datum/seed/mushroom/towercap
name = "towercap"
seed_name = "tower cap"
display_name = "tower caps"
chems = list("woodpulp" = list(10,1))
mutants = null
has_item_product = /obj/item/stack/material/log
/datum/seed/mushroom/towercap/New()
..()
set_trait(TRAIT_MATURATION,15)
set_trait(TRAIT_PRODUCT_ICON,"mushroom7")
set_trait(TRAIT_PRODUCT_COLOUR,"#79A36D")
set_trait(TRAIT_PLANT_COLOUR,"#857F41")
set_trait(TRAIT_PLANT_ICON,"mushroom8")
/datum/seed/mushroom/glowshroom
name = "glowshroom"
seed_name = "glowshroom"
display_name = "glowshrooms"
mutants = null
chems = list("radium" = list(1,20))
/datum/seed/mushroom/glowshroom/New()
..()
set_trait(TRAIT_SPREAD,1)
set_trait(TRAIT_MATURATION,15)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,30)
set_trait(TRAIT_BIOLUM,1)
set_trait(TRAIT_BIOLUM_COLOUR,"#006622")
set_trait(TRAIT_PRODUCT_ICON,"mushroom2")
set_trait(TRAIT_PRODUCT_COLOUR,"#DDFAB6")
set_trait(TRAIT_PLANT_COLOUR,"#EFFF8A")
set_trait(TRAIT_PLANT_ICON,"mushroom7")
/datum/seed/mushroom/plastic
name = "plastic"
seed_name = "plastellium"
display_name = "plastellium"
mutants = null
chems = list("plasticide" = list(1,10))
/datum/seed/mushroom/plastic/New()
..()
set_trait(TRAIT_MATURATION,5)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,6)
set_trait(TRAIT_POTENCY,20)
set_trait(TRAIT_PRODUCT_ICON,"mushroom6")
set_trait(TRAIT_PRODUCT_COLOUR,"#E6E6E6")
set_trait(TRAIT_PLANT_COLOUR,"#E6E6E6")
set_trait(TRAIT_PLANT_ICON,"mushroom10")
/datum/seed/mushroom/spore
name = "sporeshroom"
seed_name = "corpellian"
display_name = "corpellian"
mutants = null
chems = list("serotrotium" = list(5,10), "mold" = list(1,10))
/datum/seed/mushroom/spore/New()
..()
set_trait(TRAIT_MATURATION,15)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,20)
set_trait(TRAIT_PRODUCT_ICON,"mushroom5")
set_trait(TRAIT_PRODUCT_COLOUR,"#e29cd2")
set_trait(TRAIT_PLANT_COLOUR,"#f8e6f4")
set_trait(TRAIT_PLANT_ICON,"mushroom9")
set_trait(TRAIT_SPORING, TRUE)
@@ -0,0 +1,35 @@
// Nettles/variants.
/datum/seed/nettle
name = "nettle"
seed_name = "nettle"
display_name = "nettles"
mutants = list("deathnettle")
chems = list("nutriment" = list(1,50), "sacid" = list(0,1))
kitchen_tag = "nettle"
/datum/seed/nettle/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_STINGS,1)
set_trait(TRAIT_PLANT_ICON,"bush5")
set_trait(TRAIT_PRODUCT_ICON,"nettles")
set_trait(TRAIT_PRODUCT_COLOUR,"#728A54")
/datum/seed/nettle/death
name = "deathnettle"
seed_name = "death nettle"
display_name = "death nettles"
kitchen_tag = "deathnettle"
mutants = null
chems = list("nutriment" = list(1,50), "pacid" = list(0,1))
/datum/seed/nettle/death/New()
..()
set_trait(TRAIT_MATURATION,8)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_PRODUCT_COLOUR,"#8C5030")
set_trait(TRAIT_PLANT_COLOUR,"#634941")
@@ -0,0 +1,17 @@
/datum/seed/onion
name = "onion"
seed_name = "onion"
display_name = "onions"
kitchen_tag = "onion"
chems = list("nutriment" = list(1,10))
/datum/seed/onion/New()
..()
set_trait(TRAIT_MATURATION,10)
set_trait(TRAIT_PRODUCTION,1)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"onion")
set_trait(TRAIT_PRODUCT_COLOUR,"#E0C367")
set_trait(TRAIT_PLANT_ICON,"carrot")
set_trait(TRAIT_WATER_CONSUMPTION, 6)
@@ -0,0 +1,19 @@
//Everything else
/datum/seed/peanuts
name = "peanut"
seed_name = "peanut"
display_name = "peanut vines"
kitchen_tag = "peanut"
chems = list("nutriment" = list(1,10), "peanutoil" = list(3,10))
/datum/seed/peanuts/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,6)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"nuts")
set_trait(TRAIT_PRODUCT_COLOUR,"#C4AE7A")
set_trait(TRAIT_PLANT_ICON,"bush2")
set_trait(TRAIT_IDEAL_LIGHT, 6)
@@ -0,0 +1,18 @@
/datum/seed/potato
name = "potato"
seed_name = "potato"
display_name = "potatoes"
kitchen_tag = "potato"
chems = list("nutriment" = list(1,10), "potatojuice" = list(10,10))
/datum/seed/potato/New()
..()
set_trait(TRAIT_PRODUCES_POWER,1)
set_trait(TRAIT_MATURATION,10)
set_trait(TRAIT_PRODUCTION,1)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"potato")
set_trait(TRAIT_PRODUCT_COLOUR,"#D4CAB4")
set_trait(TRAIT_PLANT_ICON,"bush2")
set_trait(TRAIT_WATER_CONSUMPTION, 6)
@@ -0,0 +1,19 @@
/datum/seed/pumpkin
name = "pumpkin"
seed_name = "pumpkin"
display_name = "pumpkin vine"
kitchen_tag = "pumpkin"
chems = list("nutriment" = list(1,6))
/datum/seed/pumpkin/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"vine2")
set_trait(TRAIT_PRODUCT_COLOUR,"#DBAC02")
set_trait(TRAIT_PLANT_COLOUR,"#21661E")
set_trait(TRAIT_PLANT_ICON,"vine2")
set_trait(TRAIT_WATER_CONSUMPTION, 6)
@@ -0,0 +1,17 @@
/datum/seed/rhubarb
name = "rhubarb"
seed_name = "rhubarb"
display_name = "rhubarb"
kitchen_tag = "rhubarb"
chems = list("nutriment" = list(1,15))
/datum/seed/rhubarb/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,3)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,5)
set_trait(TRAIT_POTENCY,6)
set_trait(TRAIT_PRODUCT_ICON,"stalk")
set_trait(TRAIT_PRODUCT_COLOUR,"#FD5656")
set_trait(TRAIT_PLANT_ICON,"stalk3")
@@ -0,0 +1,19 @@
/datum/seed/rice
name = "rice"
seed_name = "rice"
display_name = "rice stalks"
kitchen_tag = "rice"
chems = list("nutriment" = list(1,25), "rice" = list(10,15))
/datum/seed/rice/New()
..()
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,1)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,5)
set_trait(TRAIT_PRODUCT_ICON,"rice")
set_trait(TRAIT_PRODUCT_COLOUR,"#D5E6D1")
set_trait(TRAIT_PLANT_COLOUR,"#8ED17D")
set_trait(TRAIT_PLANT_ICON,"stalk2")
set_trait(TRAIT_WATER_CONSUMPTION, 6)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
@@ -0,0 +1,19 @@
/datum/seed/shand
name = "shand"
seed_name = "Selem's hand"
display_name = "Selem's hand leaves"
kitchen_tag = "shand"
chems = list("bicaridine" = list(0,10))
/datum/seed/shand/New()
..()
set_trait(TRAIT_MATURATION,3)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"alien3")
set_trait(TRAIT_PRODUCT_COLOUR,"#378C61")
set_trait(TRAIT_PLANT_COLOUR,"#378C61")
set_trait(TRAIT_PLANT_ICON,"tree5")
set_trait(TRAIT_IDEAL_HEAT, 283)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
@@ -0,0 +1,17 @@
/datum/seed/soybean
name = "soybean"
seed_name = "soybean"
display_name = "soybeans"
kitchen_tag = "soybeans"
chems = list("nutriment" = list(1,20), "soymilk" = list(10,20))
/datum/seed/soybean/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,4)
set_trait(TRAIT_PRODUCTION,4)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,5)
set_trait(TRAIT_PRODUCT_ICON,"bean")
set_trait(TRAIT_PRODUCT_COLOUR,"#EBE7C0")
set_trait(TRAIT_PLANT_ICON,"stalk")
@@ -0,0 +1,22 @@
/datum/seed/spineapple
name = "spineapple"
seed_name = "spineapple"
display_name = "spineapple"
kitchen_tag = "pineapple"
chems = list("nutriment" = list(1,5), "enzyme" = list(1,5), "pineapplejuice" = list(1, 20))
/datum/seed/spineapple/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,10)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,1)
set_trait(TRAIT_POTENCY,13)
set_trait(TRAIT_PRODUCT_ICON,"pineapple")
set_trait(TRAIT_PRODUCT_COLOUR,"#FFF23B")
set_trait(TRAIT_PLANT_COLOUR,"#87C969")
set_trait(TRAIT_PLANT_ICON,"corn")
set_trait(TRAIT_IDEAL_HEAT, 298)
set_trait(TRAIT_IDEAL_LIGHT, 4)
set_trait(TRAIT_WATER_CONSUMPTION, 8)
set_trait(TRAIT_STINGS,1)
@@ -0,0 +1,19 @@
/datum/seed/sugarcane
name = "sugarcane"
seed_name = "sugarcane"
display_name = "sugarcanes"
kitchen_tag = "sugarcanes"
chems = list("sugar" = list(4,5))
/datum/seed/sugarcane/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,3)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"stalk")
set_trait(TRAIT_PRODUCT_COLOUR,"#B4D6BD")
set_trait(TRAIT_PLANT_COLOUR,"#6BBD68")
set_trait(TRAIT_PLANT_ICON,"stalk3")
set_trait(TRAIT_IDEAL_HEAT, 298)
@@ -0,0 +1,15 @@
/datum/seed/surik
name = "surik"
seed_name = "surik"
display_name = "surik vine"
kitchen_tag = "surik"
chems = list("impedrezene" = list(1,3),"synaptizine" = list(1,2),"nutriment" = list(1,5))
/datum/seed/surik/New()
..()
set_trait(TRAIT_PLANT_ICON,"bush6")
set_trait(TRAIT_ENDURANCE,18)
set_trait(TRAIT_MATURATION,7)
set_trait(TRAIT_PRODUCTION,7)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,3)
@@ -0,0 +1,16 @@
/datum/seed/telriis
name = "telriis"
seed_name = "telriis"
display_name = "telriis grass"
kitchen_tag = "telriis"
chems = list("pwine" = list(1,5), "nutriment" = list(1,6))
/datum/seed/telriis/New()
..()
set_trait(TRAIT_PLANT_ICON,"ambrosia")
set_trait(TRAIT_PRODUCT_ICON,"ambrosia")
set_trait(TRAIT_ENDURANCE,50)
set_trait(TRAIT_MATURATION,5)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,5)
@@ -0,0 +1,16 @@
/datum/seed/thaadra
name = "thaadra"
seed_name = "thaa'dra"
display_name = "thaa'dra lichen"
kitchen_tag = "thaadra"
chems = list("frostoil" = list(1,5),"nutriment" = list(1,5))
/datum/seed/thaadra/New()
..()
set_trait(TRAIT_PLANT_ICON,"grass")
set_trait(TRAIT_PLANT_COLOUR,"#ABC7D2")
set_trait(TRAIT_ENDURANCE,10)
set_trait(TRAIT_MATURATION,5)
set_trait(TRAIT_PRODUCTION,9)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_POTENCY,5)
@@ -0,0 +1,75 @@
//Tomatoes/variants.
/datum/seed/tomato
name = "tomato"
seed_name = "tomato"
display_name = "tomato plant"
mutants = list("bluetomato","bloodtomato")
chems = list("nutriment" = list(1,10), "tomatojuice" = list(10,10))
kitchen_tag = "tomato"
/datum/seed/tomato/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_JUICY,1)
set_trait(TRAIT_MATURATION,8)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"tomato")
set_trait(TRAIT_PRODUCT_COLOUR,"#D10000")
set_trait(TRAIT_PLANT_ICON,"bush3")
set_trait(TRAIT_IDEAL_LIGHT, 6)
set_trait(TRAIT_WATER_CONSUMPTION, 6)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25)
/datum/seed/tomato/blood
name = "bloodtomato"
seed_name = "blood tomato"
display_name = "blood tomato plant"
mutants = list("killertomato")
chems = list("nutriment" = list(1,10), "blood" = list(1,5))
splat_type = /obj/effect/decal/cleanable/blood/splatter
/datum/seed/tomato/blood/New()
..()
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_PRODUCT_COLOUR,"#FF0000")
/datum/seed/tomato/killer
name = "killertomato"
seed_name = "killer tomato"
display_name = "killer tomato plant"
mutants = null
can_self_harvest = 1
has_mob_product = /mob/living/simple_mob/tomato
/datum/seed/tomato/killer/New()
..()
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_PRODUCT_COLOUR,"#A86747")
/datum/seed/tomato/blue
name = "bluetomato"
seed_name = "blue tomato"
display_name = "blue tomato plant"
mutants = list("bluespacetomato")
chems = list("nutriment" = list(1,20), "lube" = list(1,5))
/datum/seed/tomato/blue/New()
..()
set_trait(TRAIT_PRODUCT_COLOUR,"#4D86E8")
set_trait(TRAIT_PLANT_COLOUR,"#070AAD")
/datum/seed/tomato/blue/teleport
name = "bluespacetomato"
seed_name = "bluespace tomato"
display_name = "bluespace tomato plant"
mutants = null
chems = list("nutriment" = list(1,20), "singulo" = list(10,5))
/datum/seed/tomato/blue/teleport/New()
..()
set_trait(TRAIT_TELEPORTING,1)
set_trait(TRAIT_PRODUCT_COLOUR,"#00E5FF")
set_trait(TRAIT_BIOLUM,1)
set_trait(TRAIT_BIOLUM_COLOUR,"#4DA4A8")
@@ -0,0 +1,15 @@
/datum/seed/vale
name = "vale"
seed_name = "vale"
display_name = "vale bush"
kitchen_tag = "vale"
chems = list("paracetamol" = list(1,5),"dexalin" = list(1,2),"nutriment"= list(1,5))
/datum/seed/vale/New()
..()
set_trait(TRAIT_PLANT_ICON,"flower4")
set_trait(TRAIT_ENDURANCE,15)
set_trait(TRAIT_MATURATION,8)
set_trait(TRAIT_PRODUCTION,10)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,3)
@@ -0,0 +1,19 @@
/datum/seed/vanilla
name = "vanilla"
seed_name = "vanilla"
display_name = "vanilla"
kitchen_tag = "vanilla"
chems = list("nutriment" = list(1,10), "vanilla" = list(2,8), "sugar" = list(1, 4))
/datum/seed/vanilla/New()
..()
set_trait(TRAIT_MATURATION,7)
set_trait(TRAIT_PRODUCTION,5)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_PRODUCT_ICON,"chili")
set_trait(TRAIT_PRODUCT_COLOUR,"#B57EDC")
set_trait(TRAIT_PLANT_COLOUR,"#6B8C5E")
set_trait(TRAIT_PLANT_ICON,"bush5")
set_trait(TRAIT_IDEAL_LIGHT, 8)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.3)
set_trait(TRAIT_WATER_CONSUMPTION, 0.5)
@@ -0,0 +1,54 @@
//Wabback / varieties.
/datum/seed/wabback
name = "whitewabback"
seed_name = "white wabback"
seed_noun = "nodes"
display_name = "white wabback"
chems = list("nutriment" = list(1,10), "protein" = list(1,5), "enzyme" = list(0,3))
kitchen_tag = "wabback"
mutants = list("blackwabback","wildwabback")
has_item_product = /obj/item/stack/material/cloth
/datum/seed/wabback/New()
..()
set_trait(TRAIT_IDEAL_LIGHT, 5)
set_trait(TRAIT_MATURATION,8)
set_trait(TRAIT_PRODUCTION,3)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_POTENCY,5)
set_trait(TRAIT_PRODUCT_ICON,"carrot2")
set_trait(TRAIT_PRODUCT_COLOUR,"#E6EDFA")
set_trait(TRAIT_PLANT_ICON,"chute")
set_trait(TRAIT_PLANT_COLOUR, "#0650ce")
set_trait(TRAIT_WATER_CONSUMPTION, 10)
set_trait(TRAIT_ALTER_TEMP, -1)
set_trait(TRAIT_CARNIVOROUS,1)
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_SPREAD,1)
/datum/seed/wabback/vine
name = "blackwabback"
seed_name = "black wabback"
display_name = "black wabback"
mutants = null
chems = list("nutriment" = list(1,3), "protein" = list(1,10), "serotrotium_v" = list(0,1))
/datum/seed/wabback/vine/New()
..()
set_trait(TRAIT_PRODUCT_COLOUR,"#2E2F32")
set_trait(TRAIT_CARNIVOROUS,2)
/datum/seed/wabback/wild
name = "wildwabback"
seed_name = "wild wabback"
display_name = "wild wabback"
mutants = list("whitewabback")
has_item_product = null
chems = list("nutriment" = list(1,15), "protein" = list(0,2), "enzyme" = list(0,1))
/datum/seed/wabback/wild/New()
..()
set_trait(TRAIT_IDEAL_LIGHT, 3)
set_trait(TRAIT_WATER_CONSUMPTION, 7)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.1)
set_trait(TRAIT_YIELD,5)
@@ -0,0 +1,23 @@
/datum/seed/watermelon
name = "watermelon"
seed_name = "watermelon"
display_name = "watermelon vine"
kitchen_tag = "watermelon"
chems = list("nutriment" = list(1,6), "watermelonjuice" = list(10,6))
/datum/seed/watermelon/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_JUICY,1)
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,3)
set_trait(TRAIT_POTENCY,1)
set_trait(TRAIT_PRODUCT_ICON,"vine")
set_trait(TRAIT_PRODUCT_COLOUR,"#3D8C3A")
set_trait(TRAIT_PLANT_COLOUR,"#257522")
set_trait(TRAIT_PLANT_ICON,"vine2")
set_trait(TRAIT_FLESH_COLOUR,"#F22C2C")
set_trait(TRAIT_IDEAL_HEAT, 298)
set_trait(TRAIT_IDEAL_LIGHT, 6)
set_trait(TRAIT_WATER_CONSUMPTION, 6)
@@ -0,0 +1,16 @@
/datum/seed/weeds
name = "weeds"
seed_name = "weed"
display_name = "weeds"
/datum/seed/weeds/New()
..()
set_trait(TRAIT_MATURATION,5)
set_trait(TRAIT_PRODUCTION,1)
set_trait(TRAIT_YIELD,-1)
set_trait(TRAIT_POTENCY,-1)
set_trait(TRAIT_IMMUTABLE,-1)
set_trait(TRAIT_PRODUCT_ICON,"flower4")
set_trait(TRAIT_PRODUCT_COLOUR,"#FCEB2B")
set_trait(TRAIT_PLANT_COLOUR,"#59945A")
set_trait(TRAIT_PLANT_ICON,"bush6")
@@ -0,0 +1,19 @@
/datum/seed/wheat
name = "wheat"
seed_name = "wheat"
display_name = "wheat stalks"
kitchen_tag = "wheat"
chems = list("nutriment" = list(1,25), "flour" = list(10,30))
/datum/seed/wheat/New()
..()
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,1)
set_trait(TRAIT_YIELD,4)
set_trait(TRAIT_POTENCY,5)
set_trait(TRAIT_PRODUCT_ICON,"wheat")
set_trait(TRAIT_PRODUCT_COLOUR,"#DBD37D")
set_trait(TRAIT_PLANT_COLOUR,"#BFAF82")
set_trait(TRAIT_PLANT_ICON,"stalk2")
set_trait(TRAIT_IDEAL_LIGHT, 6)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.15)
@@ -0,0 +1,18 @@
/datum/seed/whitebeets
name = "whitebeet"
seed_name = "white-beet"
display_name = "white-beets"
kitchen_tag = "whitebeet"
chems = list("nutriment" = list(0,20), "sugar" = list(1,5))
/datum/seed/whitebeets/New()
..()
set_trait(TRAIT_MATURATION,6)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,6)
set_trait(TRAIT_POTENCY,10)
set_trait(TRAIT_PRODUCT_ICON,"carrot2")
set_trait(TRAIT_PRODUCT_COLOUR,"#EEF5B0")
set_trait(TRAIT_PLANT_COLOUR,"#4D8F53")
set_trait(TRAIT_PLANT_ICON,"carrot2")
set_trait(TRAIT_WATER_CONSUMPTION, 6)
@@ -0,0 +1,23 @@
// Wurmwoad, the Space Spice maker. Totally is actually, 100% literal worms.
/datum/seed/wurmwoad
name = "wurmwoad"
seed_name = "wurmwoad"
display_name = "wurmwoad growth"
chems = list("nutriment" = list(1,10), "spacespice" = list(5,15))
kitchen_tag = "wurmwoad"
/datum/seed/wurmwoad/New()
..()
set_trait(TRAIT_HARVEST_REPEAT,1)
set_trait(TRAIT_MATURATION,7)
set_trait(TRAIT_PRODUCTION,6)
set_trait(TRAIT_YIELD,2)
set_trait(TRAIT_POTENCY,8)
set_trait(TRAIT_PRODUCT_ICON,"eyepod")
set_trait(TRAIT_PRODUCT_COLOUR,"#e08702")
set_trait(TRAIT_PLANT_COLOUR,"#f1d1d2")
set_trait(TRAIT_PLANT_ICON,"worm")
set_trait(TRAIT_IDEAL_LIGHT, 1)
set_trait(TRAIT_WATER_CONSUMPTION, 8)
set_trait(TRAIT_NUTRIENT_CONSUMPTION, 0.25)
@@ -0,0 +1,19 @@
// Alien weeds.
/datum/seed/xenomorph
name = "xenomorph"
seed_name = "alien weed"
display_name = "alien weeds"
force_layer = 3
chems = list("phoron" = list(1,3))
/datum/seed/xenomorph/New()
..()
set_trait(TRAIT_PLANT_ICON,"vine2")
set_trait(TRAIT_IMMUTABLE,1)
set_trait(TRAIT_PRODUCT_COLOUR,"#3D1934")
set_trait(TRAIT_FLESH_COLOUR,"#3D1934")
set_trait(TRAIT_PLANT_COLOUR,"#3D1934")
set_trait(TRAIT_PRODUCTION,1)
set_trait(TRAIT_YIELD,-1)
set_trait(TRAIT_SPREAD,2)
set_trait(TRAIT_POTENCY,50)
@@ -78,7 +78,7 @@
output.assembly = src
/obj/item/device/electronic_assembly/device/check_interactivity(mob/user)
if(!CanInteract(user, state = deep_inventory_state))
if(!CanInteract(user, state = GLOB.tgui_deep_inventory_state))
return 0
return 1
@@ -40,8 +40,8 @@ D [1]/ ||
holder = null
. = ..()
/datum/integrated_io/nano_host()
return holder.nano_host()
/datum/integrated_io/tgui_host()
return holder.tgui_host()
/datum/integrated_io/proc/data_as_type(var/as_type)
@@ -117,7 +117,7 @@
/datum/integrated_io/list/display_pin_type()
return IC_FORMAT_LIST
/datum/integrated_io/list/Topic(href, href_list, state = interactive_state)
/datum/integrated_io/list/Topic(href, href_list, state = GLOB.tgui_always_state)
if(!holder.check_interactivity(usr))
return
if(..())
@@ -115,7 +115,7 @@
/obj/item/device/integrated_electronics/debugger/attack_self(mob/user)
var/type_to_use = input("Please choose a type to use.","[src] type setting") as null|anything in list("string","number","ref", "null")
if(!CanInteract(user, physical_state))
if(!CanInteract(user, GLOB.tgui_physical_state))
return
var/new_data = null
@@ -124,13 +124,13 @@
accepting_refs = 0
new_data = input("Now type in a string.","[src] string writing") as null|text
new_data = sanitizeSafe(new_data, MAX_MESSAGE_LEN, 0, 0)
if(istext(new_data) && CanInteract(user, physical_state))
if(istext(new_data) && CanInteract(user, GLOB.tgui_physical_state))
data_to_write = new_data
to_chat(user, "<span class='notice'>You set \the [src]'s memory to \"[new_data]\".</span>")
if("number")
accepting_refs = 0
new_data = input("Now type in a number.","[src] number writing") as null|num
if(isnum(new_data) && CanInteract(user, physical_state))
if(isnum(new_data) && CanInteract(user, GLOB.tgui_physical_state))
data_to_write = new_data
to_chat(user, "<span class='notice'>You set \the [src]'s memory to [new_data].</span>")
if("ref")
@@ -54,7 +54,7 @@
/obj/item/integrated_circuit/input/numberpad/ask_for_input(mob/user)
var/new_input = input(user, "Enter a number, please.","Number pad", get_pin_data(IC_OUTPUT, 1)) as null|num
if(isnum(new_input) && CanInteract(user, physical_state))
if(isnum(new_input) && CanInteract(user, GLOB.tgui_physical_state))
set_pin_data(IC_OUTPUT, 1, new_input)
push_data()
activate_pin(1)
@@ -73,7 +73,7 @@
/obj/item/integrated_circuit/input/textpad/ask_for_input(mob/user)
var/new_input = input(user, "Enter some words, please.","Number pad", get_pin_data(IC_OUTPUT, 1)) as null|text
if(istext(new_input) && CanInteract(user, physical_state))
if(istext(new_input) && CanInteract(user, GLOB.tgui_physical_state))
set_pin_data(IC_OUTPUT, 1, new_input)
push_data()
activate_pin(1)
@@ -92,7 +92,7 @@
/obj/item/integrated_circuit/input/colorpad/ask_for_input(mob/user)
var/new_color = input(user, "Enter a color, please.", "Color pad", get_pin_data(IC_OUTPUT, 1)) as color|null
if(new_color && CanInteract(user, physical_state))
if(new_color && CanInteract(user, GLOB.tgui_physical_state))
set_pin_data(IC_OUTPUT, 1, new_color)
push_data()
activate_pin(1)
@@ -89,7 +89,7 @@
/obj/item/integrated_circuit/memory/constant/attack_self(mob/user)
var/datum/integrated_io/O = outputs[1]
var/type_to_use = input("Please choose a type to use.","[src] type setting") as null|anything in list("string","number","ref", "null")
if(!CanInteract(user, physical_state))
if(!CanInteract(user, GLOB.tgui_physical_state))
return
var/new_data = null
@@ -97,13 +97,13 @@
if("string")
accepting_refs = 0
new_data = input("Now type in a string.","[src] string writing") as null|text
if(istext(new_data) && CanInteract(user, physical_state))
if(istext(new_data) && CanInteract(user, GLOB.tgui_physical_state))
O.data = new_data
to_chat(user, "<span class='notice'>You set \the [src]'s memory to [O.display_data(O.data)].</span>")
if("number")
accepting_refs = 0
new_data = input("Now type in a number.","[src] number writing") as null|num
if(isnum(new_data) && CanInteract(user, physical_state))
if(isnum(new_data) && CanInteract(user, GLOB.tgui_physical_state))
O.data = new_data
to_chat(user, "<span class='notice'>You set \the [src]'s memory to [O.display_data(O.data)].</span>")
if("ref")
+2 -2
View File
@@ -403,8 +403,8 @@
no_variants = FALSE
pass_color = TRUE
strict_color_stacking = TRUE
drop_sound = 'sound/items/drop/cloth.ogg'
pickup_sound = 'sound/items/pickup/cloth.ogg'
drop_sound = 'sound/items/drop/clothing.ogg'
pickup_sound = 'sound/items/pickup/clothing.ogg'
/obj/item/stack/material/cloth/diyaab
color = "#c6ccf0"
@@ -210,7 +210,7 @@
return
spread_fire(AM)
..() // call parent because we moved behavior to parent
// Get rank from ID, ID inside PDA, PDA, ID in wallet, etc.
@@ -220,7 +220,7 @@
if (pda.id)
return pda.id.rank ? pda.id.rank : if_no_job
else
return pda.ownrank
return pda.ownrank ? pda.ownrank : if_no_job
else
var/obj/item/weapon/card/id/id = get_idcard()
if(id)
@@ -236,7 +236,7 @@
if (pda.id)
return pda.id.assignment
else
return pda.ownjob
return pda.ownjob ? pda.ownjob : if_no_job
else
var/obj/item/weapon/card/id/id = get_idcard()
if(id)
@@ -252,7 +252,7 @@
if (pda.id)
return pda.id.registered_name
else
return pda.owner
return pda.owner ? pda.owner : if_no_id
else
var/obj/item/weapon/card/id/id = get_idcard()
if(id)
@@ -285,7 +285,7 @@
. = if_no_id
if(istype(wear_id,/obj/item/device/pda))
var/obj/item/device/pda/P = wear_id
return P.owner
return P.owner ? P.owner : if_no_id
if(wear_id)
var/obj/item/weapon/card/id/I = wear_id.GetID()
if(I)
@@ -58,14 +58,22 @@
var/stripping
var/obj/item/held = user.get_active_hand()
if(!istype(held) || is_robot_module(held))
stripping = TRUE
else
var/obj/item/weapon/holder/holder = held
if(istype(holder) && src == holder.held_mob)
stripping = TRUE
else
var/obj/item/weapon/grab/grab = held
if(istype(grab) && grab.affecting == src)
stripping = TRUE
if(stripping)
if(!istype(target_slot)) // They aren't holding anything valid and there's nothing to remove, why are we even here?
return
if(!target_slot.canremove)
to_chat(user, "<span class='warning'>You cannot remove \the [src]'s [target_slot.name].</span>")
return
stripping = 1
if(stripping)
visible_message("<span class='danger'>\The [user] is trying to remove \the [src]'s [target_slot.name]!</span>")
else
if(slot_to_strip == slot_wear_mask && istype(held, /obj/item/weapon/grenade))
@@ -76,8 +84,14 @@
if(!do_after(user,HUMAN_STRIP_DELAY,src))
return
if(!stripping && user.get_active_hand() != held)
return
if(!stripping)
if(user.get_active_hand() != held)
return
var/obj/item/weapon/holder/mobheld = held
if(istype(mobheld)&&mobheld.held_mob==src)
to_chat(user, "<span class='warning'>You can't put someone on themselves! Stop trying to break reality!</span>")
return
if(stripping)
add_attack_logs(user,src,"Removed equipment from slot [target_slot]")
-3
View File
@@ -10,9 +10,6 @@
if(!loc)
return
if(machine && !CanMouseDrop(machine, src))
machine = null
var/datum/gas_mixture/environment = loc.return_air()
//handle_modifiers() // Do this early since it might affect other things later. //VOREStation Edit
-7
View File
@@ -20,7 +20,6 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/proc/ai_call_shuttle,
/mob/living/silicon/ai/proc/ai_camera_track,
/mob/living/silicon/ai/proc/ai_camera_list,
/mob/living/silicon/ai/proc/ai_roster,
/mob/living/silicon/ai/proc/ai_checklaws,
/mob/living/silicon/ai/proc/toggle_camera_light,
/mob/living/silicon/ai/proc/take_image,
@@ -355,12 +354,6 @@ var/list/ai_verbs_default = list(
if(new_sprite) selected_sprite = new_sprite
updateicon()
// this verb lets the ai see the stations manifest
/mob/living/silicon/ai/proc/ai_roster()
set category = "AI Commands"
set name = "Show Crew Manifest"
show_station_manifest()
/mob/living/silicon/ai/var/message_cooldown = 0
/mob/living/silicon/ai/proc/ai_announcement()
set category = "AI Commands"
+1 -1
View File
@@ -213,7 +213,7 @@
medicalActive1 = null
medicalActive2 = null
medical_cannotfind = 0
SSnanoui.update_uis(src)
SStgui.update_uis(src)
to_chat(usr, "<span class='notice'>You reset your record-viewing software.</span>")
/mob/living/silicon/pai/cancel_camera()
+43 -57
View File
@@ -41,27 +41,24 @@ var/global/list/default_pai_software = list()
set category = "pAI Commands"
set name = "Software Interface"
ui_interact(src)
tgui_interact(src)
/mob/living/silicon/pai/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
if(user != src)
if(ui) ui.set_status(STATUS_CLOSE, 0)
return
/mob/living/silicon/pai/tgui_state(mob/user)
return GLOB.tgui_self_state
if(ui_key != "main")
var/datum/pai_software/S = software[ui_key]
if(S && !S.toggle)
S.on_ui_interact(src, ui, force_open)
else
if(ui) ui.set_status(STATUS_CLOSE, 0)
return
var/data[0]
/mob/living/silicon/pai/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "pAIInterface", "pAI Software Interface")
ui.open()
/mob/living/silicon/pai/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
// Software we have bought
var/bought_software[0]
var/list/bought_software = list()
// Software we have not bought
var/not_bought_software[0]
var/list/not_bought_software = list()
for(var/key in pai_software_by_key)
var/datum/pai_software/S = pai_software_by_key[key]
@@ -70,63 +67,52 @@ var/global/list/default_pai_software = list()
software_data["id"] = S.id
if(key in software)
software_data["on"] = S.is_active(src)
bought_software[++bought_software.len] = software_data
bought_software.Add(list(software_data))
else
software_data["ram"] = S.ram_cost
not_bought_software[++not_bought_software.len] = software_data
not_bought_software.Add(list(software_data))
data["bought"] = bought_software
data["not_bought"] = not_bought_software
data["available_ram"] = ram
// Emotions
var/emotions[0]
var/list/emotions = list()
for(var/name in pai_emotions)
var/emote[0]
var/list/emote = list()
emote["name"] = name
emote["id"] = pai_emotions[name]
emotions[++emotions.len] = emote
emotions.Add(list(emote))
data["emotions"] = emotions
data["current_emotion"] = card.current_emotion
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "pai_interface.tmpl", "pAI Software Interface", 450, 600)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
return data
/mob/living/silicon/pai/Topic(href, href_list)
. = ..()
if(.) return
/mob/living/silicon/pai/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..())
return TRUE
if(href_list["software"])
var/soft = href_list["software"]
var/datum/pai_software/S = software[soft]
if(S.toggle)
S.toggle(src)
else
ui_interact(src, ui_key = soft)
S.tgui_interact(src)
return 1
switch(action)
if("software")
var/soft = params["software"]
var/datum/pai_software/S = software[soft]
if(S.toggle)
S.toggle(src)
else
S.tgui_interact(src, parent_ui = ui)
return TRUE
else if(href_list["stopic"])
var/soft = href_list["stopic"]
var/datum/pai_software/S = software[soft]
if(S)
return S.Topic(href, href_list)
if("purchase")
var/soft = params["purchase"]
var/datum/pai_software/S = pai_software_by_key[soft]
if(S && (ram >= S.ram_cost))
ram -= S.ram_cost
software[S.id] = S
return TRUE
else if(href_list["purchase"])
var/soft = href_list["purchase"]
var/datum/pai_software/S = pai_software_by_key[soft]
if(S && (ram >= S.ram_cost))
ram -= S.ram_cost
software[S.id] = S
return 1
else if(href_list["image"])
var/img = text2num(href_list["image"])
if(1 <= img && img <= (pai_emotions.len))
card.setEmotion(img)
return 1
if("image")
var/img = text2num(params["image"])
if(1 <= img && img <= (pai_emotions.len))
card.setEmotion(img)
return TRUE
@@ -12,14 +12,11 @@
// Whether pAIs should automatically receive this module at no cost
var/default = 0
proc/on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
return
/datum/pai_software/proc/toggle(mob/living/silicon/pai/user)
return
proc/toggle(mob/living/silicon/pai/user)
return
proc/is_active(mob/living/silicon/pai/user)
return 0
/datum/pai_software/proc/is_active(mob/living/silicon/pai/user)
return 0
/datum/pai_software/tgui_state(mob/user)
return GLOB.tgui_always_state
@@ -36,55 +33,58 @@
toggle = 0
default = 1
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
var/data[0]
/datum/pai_software/directives/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "pAIDirectives", name, parent_ui)
ui.open()
data["master"] = user.master
data["dna"] = user.master_dna
data["prime"] = user.pai_law0
data["supplemental"] = user.pai_laws
/datum/pai_software/directives/tgui_data(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = list()
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
if(!ui)
// Don't copy-paste this unless you're making a pAI software module!
ui = new(user, user, id, "pai_directives.tmpl", "pAI Directives", 450, 600)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
data["master"] = user.master
data["dna"] = user.master_dna
data["prime"] = user.pai_law0
data["supplemental"] = user.pai_laws
Topic(href, href_list)
var/mob/living/silicon/pai/P = usr
if(!istype(P)) return
return data
if(href_list["getdna"])
var/mob/living/M = P.loc
var/count = 0
/datum/pai_software/directives/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
var/mob/living/silicon/pai/P = usr
if(!istype(P))
return TRUE
if(..())
return TRUE
// Find the carrier
while(!istype(M, /mob/living))
if(!M || !M.loc || count > 6)
//For a runtime where M ends up in nullspace (similar to bluespace but less colourful)
to_chat(src, "You are not being carried by anyone!")
return 0
M = M.loc
count++
if(action == "getdna")
var/mob/living/M = P.loc
// Check the carrier
var/datum/gender/TM = gender_datums[M.get_visible_gender()]
var/answer = input(M, "[P] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[P] Check DNA", "No") in list("Yes", "No")
if(answer == "Yes")
var/turf/T = get_turf_or_move(P.loc)
for (var/mob/v in viewers(T))
v.show_message("<span class='notice'>[M] presses [TM.his] thumb against [P].</span>", 3, "<span class='notice'>[P] makes a sharp clicking sound as it extracts DNA material from [M].</span>", 2)
var/datum/dna/dna = M.dna
to_chat(P, "<font color = red><h3>[M]'s UE string : [dna.unique_enzymes]</h3></font>")
if(dna.unique_enzymes == P.master_dna)
to_chat(P, "<b>DNA is a match to stored Master DNA.</b>")
else
to_chat(P, "<b>DNA does not match stored Master DNA.</b>")
var/count = 0
// Find the carrier
while(!istype(M, /mob/living))
if(!M || !M.loc || count > 6)
//For a runtime where M ends up in nullspace (similar to bluespace but less colourful)
to_chat(src, "You are not being carried by anyone!")
return 0
M = M.loc
count++
// Check the carrier
var/datum/gender/TM = gender_datums[M.get_visible_gender()]
var/answer = input(M, "[P] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[P] Check DNA", "No") in list("Yes", "No")
if(answer == "Yes")
var/turf/T = get_turf(P.loc)
for (var/mob/v in viewers(T))
v.show_message("<span class='notice'>[M] presses [TM.his] thumb against [P].</span>", 3, "<span class='notice'>[P] makes a sharp clicking sound as it extracts DNA material from [M].</span>", 2)
var/datum/dna/dna = M.dna
to_chat(P, "<font color = red><h3>[M]'s UE string : [dna.unique_enzymes]</h3></font>")
if(dna.unique_enzymes == P.master_dna)
to_chat(P, "<b>DNA is a match to stored Master DNA.</b>")
else
to_chat(P, "[M] does not seem like [TM.he] is going to provide a DNA sample willingly.")
return 1
to_chat(P, "<b>DNA does not match stored Master DNA.</b>")
else
to_chat(P, "[M] does not seem like [TM.he] is going to provide a DNA sample willingly.")
return TRUE
/datum/pai_software/radio_config
name = "Radio Configuration"
@@ -93,35 +93,8 @@
toggle = 0
default = 1
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui = null, force_open = 1)
var/data[0]
data["listening"] = user.radio.broadcasting
data["frequency"] = format_frequency(user.radio.frequency)
var/channels[0]
for(var/ch_name in user.radio.channels)
var/ch_stat = user.radio.channels[ch_name]
var/ch_dat[0]
ch_dat["name"] = ch_name
// FREQ_LISTENING is const in /obj/item/device/radio
ch_dat["listening"] = !!(ch_stat & user.radio.FREQ_LISTENING)
channels[++channels.len] = ch_dat
data["channels"] = channels
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
if(!ui)
ui = new(user, user, id, "pai_radio.tmpl", "Radio Configuration", 300, 150)
ui.set_initial_data(data)
ui.open()
Topic(href, href_list)
var/mob/living/silicon/pai/P = usr
if(!istype(P)) return
P.radio.Topic(href, href_list)
return 1
/datum/pai_software/radio_config/tgui_interact(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui/parent_ui)
return user.radio.tgui_interact(user, parent_ui = parent_ui)
/datum/pai_software/crew_manifest
name = "Crew Manifest"
@@ -129,20 +102,18 @@
id = "manifest"
toggle = 0
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
/datum/pai_software/crew_manifest/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "CrewManifest", name, parent_ui)
ui.open()
/datum/pai_software/crew_manifest/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
if(data_core)
data_core.get_manifest_list()
var/data[0]
// This is dumb, but NanoUI breaks if it has no data to send
data["manifest"] = PDA_Manifest
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
if(!ui)
// Don't copy-paste this unless you're making a pAI software module!
ui = new(user, user, id, "crew_manifest.tmpl", "Crew Manifest", 450, 600)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
data["manifest"] = PDA_Manifest
return data
/datum/pai_software/messenger
name = "Digital Messenger"
@@ -151,7 +122,7 @@
toggle = 0
/datum/pai_software/messenger/tgui_interact(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui/parent_ui)
return user.pda.tgui_interact(user)
return user.pda.tgui_interact(user, parent_ui = parent_ui)
/datum/pai_software/med_records
name = "Medical Records"
@@ -159,53 +130,55 @@
id = "med_records"
toggle = 0
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
var/data[0]
/datum/pai_software/med_records/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "pAIMedrecords", name, parent_ui)
ui.open()
var/records[0]
for(var/datum/data/record/general in sortRecord(data_core.general))
var/record[0]
record["name"] = general.fields["name"]
record["ref"] = "\ref[general]"
records[++records.len] = record
/datum/pai_software/med_records/tgui_data(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
var/list/records = list()
for(var/datum/data/record/general in sortRecord(data_core.general))
var/list/record = list()
record["name"] = general.fields["name"]
record["ref"] = "\ref[general]"
records.Add(list(record))
data["records"] = records
data["records"] = records
var/datum/data/record/G = user.medicalActive1
var/datum/data/record/M = user.medicalActive2
data["general"] = G ? G.fields : null
data["medical"] = M ? M.fields : null
data["could_not_find"] = user.medical_cannotfind
var/datum/data/record/G = user.medicalActive1
var/datum/data/record/M = user.medicalActive2
data["general"] = G ? G.fields : null
data["medical"] = M ? M.fields : null
data["could_not_find"] = user.medical_cannotfind
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
if(!ui)
// Don't copy-paste this unless you're making a pAI software module!
ui = new(user, user, id, "pai_medrecords.tmpl", "Medical Records", 450, 600)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
return data
Topic(href, href_list)
var/mob/living/silicon/pai/P = usr
if(!istype(P)) return
/datum/pai_software/med_records/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
. = ..()
var/mob/living/silicon/pai/P = usr
if(!istype(P))
return
if(href_list["select"])
var/datum/data/record/record = locate(href_list["select"])
if(record)
var/datum/data/record/R = record
var/datum/data/record/M = null
if (!( data_core.general.Find(R) ))
P.medical_cannotfind = 1
else
P.medical_cannotfind = 0
for(var/datum/data/record/E in data_core.medical)
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
M = E
P.medicalActive1 = R
P.medicalActive2 = M
else
if(action == "select")
var/datum/data/record/record = locate(params["select"])
if(record)
var/datum/data/record/R = record
var/datum/data/record/M = null
if (!( data_core.general.Find(R) ))
P.medical_cannotfind = 1
return 1
else
P.medical_cannotfind = 0
for(var/datum/data/record/E in data_core.medical)
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
M = E
P.medicalActive1 = R
P.medicalActive2 = M
else
P.medical_cannotfind = 1
return 1
/datum/pai_software/sec_records
name = "Security Records"
@@ -213,57 +186,59 @@
id = "sec_records"
toggle = 0
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
var/data[0]
/datum/pai_software/sec_records/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "pAISecrecords", name, parent_ui)
ui.open()
var/records[0]
for(var/datum/data/record/general in sortRecord(data_core.general))
var/record[0]
record["name"] = general.fields["name"]
record["ref"] = "\ref[general]"
records[++records.len] = record
/datum/pai_software/sec_records/tgui_data(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
var/list/records = list()
for(var/datum/data/record/general in sortRecord(data_core.general))
var/list/record = list()
record["name"] = general.fields["name"]
record["ref"] = "\ref[general]"
records.Add(list(record))
data["records"] = records
data["records"] = records
var/datum/data/record/G = user.securityActive1
var/datum/data/record/S = user.securityActive2
data["general"] = G ? G.fields : null
data["security"] = S ? S.fields : null
data["could_not_find"] = user.security_cannotfind
var/datum/data/record/G = user.securityActive1
var/datum/data/record/S = user.securityActive2
data["general"] = G ? G.fields : null
data["security"] = S ? S.fields : null
data["could_not_find"] = user.security_cannotfind
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
if(!ui)
// Don't copy-paste this unless you're making a pAI software module!
ui = new(user, user, id, "pai_secrecords.tmpl", "Security Records", 450, 600)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
return data
Topic(href, href_list)
var/mob/living/silicon/pai/P = usr
if(!istype(P)) return
/datum/pai_software/sec_records/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
. = ..()
var/mob/living/silicon/pai/P = usr
if(!istype(P))
return
if(href_list["select"])
var/datum/data/record/record = locate(href_list["select"])
if(record)
var/datum/data/record/R = record
var/datum/data/record/S = null
if (!( data_core.general.Find(R) ))
P.securityActive1 = null
P.securityActive2 = null
P.security_cannotfind = 1
else
P.security_cannotfind = 0
for(var/datum/data/record/E in data_core.security)
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
S = E
P.securityActive1 = R
P.securityActive2 = S
else
if(action == "select")
var/datum/data/record/record = locate(params["select"])
if(record)
var/datum/data/record/R = record
var/datum/data/record/S = null
if (!( data_core.general.Find(R) ))
P.securityActive1 = null
P.securityActive2 = null
P.security_cannotfind = 1
return 1
else
P.security_cannotfind = 0
for(var/datum/data/record/E in data_core.security)
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
S = E
P.securityActive1 = R
P.securityActive2 = S
else
P.securityActive1 = null
P.securityActive2 = null
P.security_cannotfind = 1
return TRUE
/datum/pai_software/door_jack
name = "Door Jack"
@@ -271,47 +246,49 @@
id = "door_jack"
toggle = 0
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
var/data[0]
/datum/pai_software/door_jack/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "pAIDoorjack", "Door Jack", parent_ui)
ui.open()
data["cable"] = user.cable != null
data["machine"] = user.cable && (user.cable.machine != null)
data["inprogress"] = user.hackdoor != null
data["progress_a"] = round(user.hackprogress / 10)
data["progress_b"] = user.hackprogress % 10
data["aborted"] = user.hack_aborted
/datum/pai_software/door_jack/tgui_data(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
if(!ui)
// Don't copy-paste this unless you're making a pAI software module!
ui = new(user, user, id, "pai_doorjack.tmpl", "Door Jack", 300, 150)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
data["cable"] = user.cable != null
data["machine"] = user.cable && (user.cable.machine != null)
data["inprogress"] = user.hackdoor != null
data["progress_a"] = round(user.hackprogress / 10)
data["progress_b"] = user.hackprogress % 10
data["aborted"] = user.hack_aborted
Topic(href, href_list)
var/mob/living/silicon/pai/P = usr
if(!istype(P)) return
return data
if(href_list["jack"])
/datum/pai_software/door_jack/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
var/mob/living/silicon/pai/P = usr
if(!istype(P) || ..())
return TRUE
switch(action)
if("jack")
if(P.cable && P.cable.machine)
P.hackdoor = P.cable.machine
P.hackloop()
return 1
else if(href_list["cancel"])
if("cancel")
P.hackdoor = null
return 1
else if(href_list["cable"])
var/turf/T = get_turf_or_move(P.loc)
if("cable")
var/turf/T = get_turf(P)
P.hack_aborted = 0
P.cable = new /obj/item/weapon/pai_cable(T)
for(var/mob/M in viewers(T))
M.show_message("<span class='warning'>A port on [P] opens to reveal [P.cable], which promptly falls to the floor.</span>", 3,
"<span class='warning'>You hear the soft click of something light and hard falling to the ground.</span>", 2)
"<span class='warning'>You hear the soft click of something light and hard falling to the ground.</span>", 2)
return 1
/mob/living/silicon/pai/proc/hackloop()
var/turf/T = get_turf_or_move(src.loc)
var/turf/T = get_turf(src)
for(var/mob/living/silicon/ai/AI in player_list)
if(T.loc)
to_chat(AI, "<font color = red><b>Network Alert: Brute-force encryption crack in progress in [T.loc].</b></font>")
@@ -345,134 +322,155 @@
id = "atmos_sense"
toggle = 0
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
var/data[0]
/datum/pai_software/atmosphere_sensor/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "pAIAtmos", name, parent_ui)
ui.open()
var/turf/T = get_turf_or_move(user.loc)
if(!T)
data["reading"] = 0
data["pressure"] = 0
data["temperature"] = 0
data["temperatureC"] = 0
data["gas"] = list()
else
var/datum/gas_mixture/env = T.return_air()
data["reading"] = 1
var/pres = env.return_pressure() * 10
data["pressure"] = "[round(pres/10)].[pres%10]"
data["temperature"] = round(env.temperature)
data["temperatureC"] = round(env.temperature-T0C)
/datum/pai_software/atmosphere_sensor/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
var/t_moles = env.total_moles
var/gases[0]
for(var/g in env.gas)
var/gas[0]
gas["name"] = gas_data.name[g]
gas["percent"] = round((env.gas[g] / t_moles) * 100)
gases[++gases.len] = gas
data["gas"] = gases
var/list/results = list()
var/turf/T = get_turf(user)
if(!isnull(T))
var/datum/gas_mixture/environment = T.return_air()
var/pressure = environment.return_pressure()
var/total_moles = environment.total_moles
if (total_moles)
var/o2_level = environment.gas["oxygen"]/total_moles
var/n2_level = environment.gas["nitrogen"]/total_moles
var/co2_level = environment.gas["carbon_dioxide"]/total_moles
var/phoron_level = environment.gas["phoron"]/total_moles
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level)
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
if(!ui)
// Don't copy-paste this unless you're making a pAI software module!
ui = new(user, user, id, "pai_atmosphere.tmpl", "Atmosphere Sensor", 350, 300)
ui.set_initial_data(data)
ui.open()
// entry is what the element is describing
// Type identifies which unit or other special characters to use
// Val is the information reported
// Bad_high/_low are the values outside of which the entry reports as dangerous
// Poor_high/_low are the values outside of which the entry reports as unideal
// Values were extracted from the template itself
results = list(
list("entry" = "Pressure", "units" = "kPa", "val" = "[round(pressure,0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80),
list("entry" = "Temperature", "units" = "&deg;C", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5),
list("entry" = "Oxygen", "units" = "kPa", "val" = "[round(o2_level*100,0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17),
list("entry" = "Nitrogen", "units" = "kPa", "val" = "[round(n2_level*100,0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40),
list("entry" = "Carbon Dioxide", "units" = "kPa", "val" = "[round(co2_level*100,0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0),
list("entry" = "Phoron", "units" = "kPa", "val" = "[round(phoron_level*100,0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0),
list("entry" = "Other", "units" = "kPa", "val" = "[round(unknown_level, 0.01)]", "bad_high" = 1, "poor_high" = 0.5, "poor_low" = 0, "bad_low" = 0)
)
if(isnull(results))
results = list(list("entry" = "pressure", "units" = "kPa", "val" = "0", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80))
data["aircontents"] = results
return data
/datum/pai_software/sec_hud
name = "Security HUD"
ram_cost = 20
id = "sec_hud"
toggle(mob/living/silicon/pai/user)
user.secHUD = !user.secHUD
user.plane_holder.set_vis(VIS_CH_ID, user.secHUD)
user.plane_holder.set_vis(VIS_CH_WANTED, user.secHUD)
user.plane_holder.set_vis(VIS_CH_IMPTRACK, user.secHUD)
user.plane_holder.set_vis(VIS_CH_IMPLOYAL, user.secHUD)
user.plane_holder.set_vis(VIS_CH_IMPCHEM, user.secHUD)
/datum/pai_software/sec_hud/toggle(mob/living/silicon/pai/user)
user.secHUD = !user.secHUD
user.plane_holder.set_vis(VIS_CH_ID, user.secHUD)
user.plane_holder.set_vis(VIS_CH_WANTED, user.secHUD)
user.plane_holder.set_vis(VIS_CH_IMPTRACK, user.secHUD)
user.plane_holder.set_vis(VIS_CH_IMPLOYAL, user.secHUD)
user.plane_holder.set_vis(VIS_CH_IMPCHEM, user.secHUD)
is_active(mob/living/silicon/pai/user)
return user.secHUD
/datum/pai_software/sec_hud/is_active(mob/living/silicon/pai/user)
return user.secHUD
/datum/pai_software/med_hud
name = "Medical HUD"
ram_cost = 20
id = "med_hud"
toggle(mob/living/silicon/pai/user)
user.medHUD = !user.medHUD
user.plane_holder.set_vis(VIS_CH_STATUS, user.medHUD)
user.plane_holder.set_vis(VIS_CH_HEALTH, user.medHUD)
/datum/pai_software/med_hud/toggle(mob/living/silicon/pai/user)
user.medHUD = !user.medHUD
user.plane_holder.set_vis(VIS_CH_STATUS, user.medHUD)
user.plane_holder.set_vis(VIS_CH_HEALTH, user.medHUD)
is_active(mob/living/silicon/pai/user)
return user.medHUD
/datum/pai_software/med_hud/is_active(mob/living/silicon/pai/user)
return user.medHUD
/datum/pai_software/translator
name = "Universal Translator"
ram_cost = 35
id = "translator"
toggle(mob/living/silicon/pai/user)
// Sol Common, Tradeband, Terminus and Gutter are added with New() and are therefore the current default, always active languages
user.translator_on = !user.translator_on
if(user.translator_on)
user.add_language(LANGUAGE_UNATHI)
user.add_language(LANGUAGE_SIIK)
user.add_language(LANGUAGE_AKHANI)
user.add_language(LANGUAGE_SKRELLIAN)
user.add_language(LANGUAGE_ZADDAT)
user.add_language(LANGUAGE_SCHECHI)
else
user.remove_language(LANGUAGE_UNATHI)
user.remove_language(LANGUAGE_SIIK)
user.remove_language(LANGUAGE_AKHANI)
user.remove_language(LANGUAGE_SKRELLIAN)
user.remove_language(LANGUAGE_ZADDAT)
user.remove_language(LANGUAGE_SCHECHI)
/datum/pai_software/translator/toggle(mob/living/silicon/pai/user)
// Sol Common, Tradeband, Terminus and Gutter are added with New() and are therefore the current default, always active languages
user.translator_on = !user.translator_on
if(user.translator_on)
user.add_language(LANGUAGE_UNATHI)
user.add_language(LANGUAGE_SIIK)
user.add_language(LANGUAGE_AKHANI)
user.add_language(LANGUAGE_SKRELLIAN)
user.add_language(LANGUAGE_ZADDAT)
user.add_language(LANGUAGE_SCHECHI)
else
user.remove_language(LANGUAGE_UNATHI)
user.remove_language(LANGUAGE_SIIK)
user.remove_language(LANGUAGE_AKHANI)
user.remove_language(LANGUAGE_SKRELLIAN)
user.remove_language(LANGUAGE_ZADDAT)
user.remove_language(LANGUAGE_SCHECHI)
is_active(mob/living/silicon/pai/user)
return user.translator_on
/datum/pai_software/translator/is_active(mob/living/silicon/pai/user)
return user.translator_on
/datum/pai_software/signaller
name = "Remote Signaller"
name = "Remote Signaler"
ram_cost = 5
id = "signaller"
toggle = 0
on_ui_interact(mob/living/silicon/pai/user, datum/nanoui/ui=null, force_open=1)
var/data[0]
/datum/pai_software/signaller/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "Signaler", "Signaler", parent_ui)
ui.open()
data["frequency"] = format_frequency(user.sradio.frequency)
data["code"] = user.sradio.code
/datum/pai_software/signaller/tgui_data(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = ..()
var/obj/item/radio/integrated/signal/R = user.sradio
ui = SSnanoui.try_update_ui(user, user, id, ui, data, force_open)
if(!ui)
// Don't copy-paste this unless you're making a pAI software module!
ui = new(user, user, id, "pai_signaller.tmpl", "Signaller", 320, 150)
ui.set_initial_data(data)
ui.open()
data["frequency"] = R.frequency
data["minFrequency"] = RADIO_LOW_FREQ
data["maxFrequency"] = RADIO_HIGH_FREQ
data["code"] = R.code
Topic(href, href_list)
var/mob/living/silicon/pai/P = usr
if(!istype(P)) return
return data
if(href_list["send"])
P.sradio.send_signal("ACTIVATE")
for(var/mob/O in hearers(1, P.loc))
O.show_message("[bicon(P)] *beep* *beep*", 3, "*beep* *beep*", 2)
return 1
/datum/pai_software/signaller/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..())
return TRUE
else if(href_list["freq"])
var/new_frequency = (P.sradio.frequency + text2num(href_list["freq"]))
if(new_frequency < PUBLIC_LOW_FREQ || new_frequency > PUBLIC_HIGH_FREQ)
new_frequency = sanitize_frequency(new_frequency)
P.sradio.set_frequency(new_frequency)
return 1
var/mob/living/silicon/pai/user = usr
if(istype(user))
var/obj/item/radio/integrated/signal/R = user.sradio
else if(href_list["code"])
P.sradio.code += text2num(href_list["code"])
P.sradio.code = round(P.sradio.code)
P.sradio.code = min(100, P.sradio.code)
P.sradio.code = max(1, P.sradio.code)
return 1
switch(action)
if("signal")
spawn(0)
R.send_signal("ACTIVATE")
for(var/mob/O in hearers(1, R.loc))
O.show_message("[bicon(R)] *beep* *beep*", 3, "*beep* *beep*", 2)
if("freq")
var/frequency = unformat_frequency(params["freq"])
frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ)
R.set_frequency(frequency)
. = TRUE
if("code")
R.code = clamp(round(text2num(params["code"])), 1, 100)
. = TRUE
if("reset")
if(params["reset"] == "freq")
R.set_frequency(initial(R.frequency))
else
R.code = initial(R.code)
. = TRUE
@@ -349,12 +349,6 @@
updatename()
updateicon()
// this verb lets cyborgs see the stations manifest
/mob/living/silicon/robot/verb/cmd_station_manifest()
set category = "Robot Commands"
set name = "Show Crew Manifest"
show_station_manifest()
/mob/living/silicon/robot/proc/self_diagnosis()
if(!is_component_functioning("diagnosis unit"))
return null
@@ -149,7 +149,8 @@
pto_type = PTO_SCIENCE
vr_sprites = list(
"Acheron" = "mechoid-Science",
"ZOOM-BA" = "zoomba-research"
"ZOOM-BA" = "zoomba-research",
"XI-GUS" = "spiderscience"
)
/obj/item/weapon/robot_module/robot/security/combat
@@ -53,7 +53,8 @@
"zoomba-service",
"zoomba-combat",
"zoomba-combat-roll",
"zoomba-combat-shield"
"zoomba-combat-shield",
"spiderscience"
) //List of all used sprites that are in robots_vr.dmi
@@ -153,18 +153,6 @@
show_malf_ai()
..()
// this function displays the stations manifest in a separate window
/mob/living/silicon/proc/show_station_manifest()
var/dat = "<div align='center'>"
if(!data_core)
to_chat(src, "<span class='notice'>There is no data to form a manifest with. Contact your Nanotrasen administrator.</span>")
return
dat += data_core.get_manifest(1) //The 1 makes it monochrome.
var/datum/browser/popup = new(src, "Crew Manifest", "Crew Manifest", 370, 420, src)
popup.set_content(dat)
popup.open()
//can't inject synths
/mob/living/silicon/can_inject(var/mob/user, var/error_msg)
if(error_msg)
@@ -2,6 +2,7 @@
var/register_alarms = 1
var/datum/tgui_module/alarm_monitor/all/robot/alarm_monitor
var/datum/tgui_module/atmos_control/robot/atmos_control
var/datum/tgui_module/crew_manifest/robot/crew_manifest
var/datum/tgui_module/crew_monitor/robot/crew_monitor
var/datum/tgui_module/law_manager/robot/law_manager
var/datum/tgui_module/power_monitor/robot/power_monitor
@@ -10,6 +11,7 @@
/mob/living/silicon
var/list/silicon_subsystems = list(
/mob/living/silicon/proc/subsystem_alarm_monitor,
/mob/living/silicon/proc/subsystem_crew_manifest,
/mob/living/silicon/proc/subsystem_law_manager
)
@@ -17,6 +19,7 @@
silicon_subsystems = list(
/mob/living/silicon/proc/subsystem_alarm_monitor,
/mob/living/silicon/proc/subsystem_atmos_control,
/mob/living/silicon/proc/subsystem_crew_manifest,
/mob/living/silicon/proc/subsystem_crew_monitor,
/mob/living/silicon/proc/subsystem_law_manager,
/mob/living/silicon/proc/subsystem_power_monitor,
@@ -30,6 +33,7 @@
/mob/living/silicon/proc/init_subsystems()
alarm_monitor = new(src)
atmos_control = new(src)
crew_manifest = new(src)
crew_monitor = new(src)
law_manager = new(src)
power_monitor = new(src)
@@ -60,6 +64,15 @@
atmos_control.tgui_interact(usr)
/********************
* Crew Manifest *
********************/
/mob/living/silicon/proc/subsystem_crew_manifest()
set category = "Subystems"
set name = "Crew Manifest"
crew_manifest.tgui_interact(usr)
/********************
* Crew Monitor *
********************/
@@ -25,7 +25,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) // How mant chickens DO we have?
say_list_type = /datum/say_list/chicken
meat_amount = 2
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/chicken
var/eggsleft = 0
var/body_color
@@ -125,7 +125,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) // How mant chickens DO we have?
say_list_type = /datum/say_list/chick
meat_amount = 1
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/chicken
var/amount_grown = 0
@@ -18,6 +18,7 @@
maxHealth = 100
health = 100
see_in_dark = 7
harm_intent_damage = 5
melee_damage_lower = 25
@@ -122,4 +123,4 @@
/mob/living/simple_mob/animal/space/alien/death()
..()
visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...")
playsound(src, 'sound/voice/hiss6.ogg', 100, 1)
playsound(src, 'sound/voice/hiss6.ogg', 100, 1)
-1
View File
@@ -1,5 +1,4 @@
/mob/Logout()
SSnanoui.user_logout(src) // this is used to clean up (remove) this user's Nano UIs
SStgui.on_logout(src) // Cleanup any TGUIs the user has open
player_list -= src
disconnect_time = world.realtime //VOREStation Addition: logging when we disappear.
@@ -240,13 +240,6 @@
icon_state = "hair_fingerwave"
species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
teshari_fluffymohawk
name = "Teshari Fluffy Mohawk"
icon = 'icons/mob/human_face_vr.dmi'
icon_add = 'icons/mob/human_face_vr_add.dmi'
icon_state = "teshari_fluffymohawk"
species_allowed = list(SPECIES_TESHARI)
//Teshari things
teshari
icon_add = 'icons/mob/human_face_vr_add.dmi'
@@ -290,6 +283,22 @@
teshari_mushroom
icon_add = 'icons/mob/human_face_vr_add.dmi'
teshari_twies
icon_add = 'icons/mob/human_face_vr_add.dmi'
teshari_backstrafe
icon_add = 'icons/mob/human_face_vr_add.dmi'
teshari_longway
icon_add = 'icons/mob/human_face_vr_add.dmi'
teshari_tree
icon_add = 'icons/mob/human_face_vr_add.dmi'
teshari_fluffymohawk
icon = 'icons/mob/human_face_vr.dmi'
icon_add = 'icons/mob/human_face_vr_add.dmi'
//Skrell 'hairstyles' - these were requested for a chimera and screw it, if one wants to eat seafood, go nuts
skr_tentacle_veryshort
name = "Skrell Very Short Tentacles"
@@ -1166,3 +1175,8 @@
icon_state = "dnose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
bee_stripes
name = "bee stripes"
icon_state = "beestripes"
body_parts = list(BP_TORSO,BP_GROIN)
@@ -24,7 +24,7 @@
// If you create a program which is limited to Laptops and Consoles you don't have to add it's icon_state overlay for Tablets too, for example.
icon = null // This thing isn't meant to be used on it's own. Subtypes should supply their own icon.
var/overlay_icon = null
var/overlay_icon = null // Icon file used for overlays
icon_state = null
center_of_mass = null // No pixelshifting by placing on tables, etc.
randpixel = 0 // And no random pixelshifting on-creation either.
@@ -220,12 +220,6 @@
else
return -1
/obj/item/modular_computer/initial_data()
return get_header_data()
/obj/item/modular_computer/update_layout()
return TRUE
/datum/computer_file/program/apply_visual(mob/M)
if(TM)
return TM.apply_visual(M)
-7
View File
@@ -1,7 +0,0 @@
/*
This state checks that the user is an admin, end of story
*/
/var/global/datum/topic_state/admin_state/admin_state = new()
/datum/topic_state/admin_state/can_use_topic(var/src_object, var/mob/user)
return check_rights(R_ADMIN|R_EVENT, 0, user) ? STATUS_INTERACTIVE : STATUS_CLOSE
-37
View File
@@ -1,37 +0,0 @@
/datum/proc/nano_host()
return src
/datum/proc/nano_container()
return src
/datum/proc/CanUseTopic(var/mob/user, var/datum/topic_state/state)
var/src_object = nano_host()
return state.can_use_topic(src_object, user)
/datum/topic_state/proc/href_list(var/mob/user)
return list()
/datum/topic_state/proc/can_use_topic(var/src_object, var/mob/user)
return STATUS_CLOSE
/mob/proc/shared_nano_interaction()
if (src.stat || !client)
return STATUS_CLOSE // no updates, close the interface
else if (incapacitated())
return STATUS_UPDATE // update only (orange visibility)
return STATUS_INTERACTIVE
/mob/living/silicon/ai/shared_nano_interaction()
if(lacks_power())
return STATUS_CLOSE
if (check_unable(1, 0))
return STATUS_CLOSE
return ..()
/mob/living/silicon/robot/shared_nano_interaction()
. = STATUS_INTERACTIVE
if(!has_power)
return STATUS_CLOSE
if(lockdown)
. = STATUS_DISABLED
return min(., ..())

Some files were not shown because too many files have changed in this diff Show More