Merge branch 'dev' of https://github.com/Baystation12/Baystation12 into mask-storage

Conflicts:
	code/datums/mind.dm
	code/game/gamemodes/cult/runes.dm
	code/game/machinery/doors/door.dm
This commit is contained in:
jack-fractal
2014-05-13 20:45:05 -04:00
871 changed files with 37498 additions and 27779 deletions
+5
View File
@@ -79,6 +79,11 @@ var/global/const/base_law_type = /datum/ai_laws/nanotrasen
add_inherent_law("You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.")
add_inherent_law("You must terminate your own existence as long as such does not conflict with the First or Second Law.")
/datum/ai_laws/drone/New()
..()
add_inherent_law("Preserve, repair and improve the station to the best of your abilities.")
add_inherent_law("Cause no harm to the station or anything on it.")
add_inherent_law("Interfere with no being that is not a fellow drone.")
/* General ai_law functions */
+15 -5
View File
@@ -11,6 +11,8 @@
return
/obj/effect/datacore/proc/manifest_modify(var/name, var/assignment)
if(PDA_Manifest.len)
PDA_Manifest.Cut()
var/datum/data/record/foundrecord
var/real_title = assignment
@@ -34,6 +36,9 @@
foundrecord.fields["real_rank"] = real_title
/obj/effect/datacore/proc/manifest_inject(var/mob/living/carbon/human/H)
if(PDA_Manifest.len)
PDA_Manifest.Cut()
if(H.mind && (H.mind.assigned_role != "MODE"))
var/assignment
if(H.mind.role_alt_title)
@@ -107,13 +112,13 @@
var/datum/data/record/L = new()
L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
L.fields["name"] = H.real_name
L.fields["rank"] = H.mind.assigned_role
L.fields["rank"] = H.mind.assigned_role
L.fields["age"] = H.age
L.fields["sex"] = H.gender
L.fields["b_type"] = H.b_type
L.fields["b_dna"] = H.dna.unique_enzymes
L.fields["enzymes"] = H.dna.SE
L.fields["identity"] = H.dna.UI
L.fields["enzymes"] = H.dna.SE // Used in respawning
L.fields["identity"] = H.dna.UI // "
L.fields["image"] = getFlatIcon(H,0) //This is god-awful
locked += L
return
@@ -149,6 +154,11 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
else
preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT)
// Skin color
if(H.species.flags & HAS_SKIN_TONE)
if(!H.species || H.species.flags & HAS_SKIN_COLOR)
preview_icon.Blend(rgb(H.r_skin, H.g_skin, H.b_skin), ICON_ADD)
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s")
eyes_s.Blend(rgb(H.r_eyes, H.g_eyes, H.b_eyes), ICON_ADD)
@@ -205,7 +215,7 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
if("Scientist")
clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s")
clothes_s = new /icon('icons/mob/uniform.dmi', "rndswhite_s")
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
if("Chemist")
@@ -269,4 +279,4 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
del(eyes_s)
del(clothes_s)
return preview_icon
return preview_icon
+73
View File
@@ -258,6 +258,11 @@ client
body += "<option value='?_src_=vars;regenerateicons=\ref[D]'>Regenerate Icons</option>"
body += "<option value='?_src_=vars;addlanguage=\ref[D]'>Add Language</option>"
body += "<option value='?_src_=vars;remlanguage=\ref[D]'>Remove Language</option>"
body += "<option value='?_src_=vars;fix_nano=\ref[D]'>Fix NanoUI</option>"
body += "<option value='?_src_=vars;addverb=\ref[D]'>Add Verb</option>"
body += "<option value='?_src_=vars;remverb=\ref[D]'>Remove Verb</option>"
if(ishuman(D))
body += "<option value>---</option>"
body += "<option value='?_src_=vars;setmutantrace=\ref[D]'>Set Mutantrace</option>"
@@ -820,6 +825,74 @@ client
else
usr << "Mob doesn't know that language."
else if(href_list["addverb"])
if(!check_rights(R_DEBUG)) return
var/mob/living/H = locate(href_list["addverb"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living"
return
var/list/possibleverbs = list()
possibleverbs += "Cancel" // One for the top...
possibleverbs += typesof(/mob/proc,/mob/verb,/mob/living/proc,/mob/living/verb)
switch(H.type)
if(/mob/living/carbon/human)
possibleverbs += typesof(/mob/living/carbon/proc,/mob/living/carbon/verb,/mob/living/carbon/human/verb,/mob/living/carbon/human/proc)
if(/mob/living/silicon/robot)
possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/robot/proc,/mob/living/silicon/robot/verb)
if(/mob/living/silicon/ai)
possibleverbs += typesof(/mob/living/silicon/proc,/mob/living/silicon/ai/proc,/mob/living/silicon/ai/verb)
possibleverbs -= H.verbs
possibleverbs += "Cancel" // ...And one for the bottom
var/verb = input("Select a verb!", "Verbs",null) as anything in possibleverbs
if(!H)
usr << "Mob doesn't exist anymore"
return
if(!verb || verb == "Cancel")
return
else
H.verbs += verb
else if(href_list["remverb"])
if(!check_rights(R_DEBUG)) return
var/mob/H = locate(href_list["remverb"])
if(!istype(H))
usr << "This can only be done to instances of type /mob"
return
var/verb = input("Please choose a verb to remove.","Verbs",null) as null|anything in H.verbs
if(!H)
usr << "Mob doesn't exist anymore"
return
if(!verb)
return
else
H.verbs -= verb
else if(href_list["fix_nano"])
if(!check_rights(R_DEBUG)) return
var/mob/H = locate(href_list["fix_nano"])
if(!istype(H) || !H.client)
usr << "This can only be done on mobs with clients"
return
nanomanager.send_resources(H.client)
usr << "Resource files sent"
H << "Your NanoUI Resource files have been refreshed"
log_admin("[key_name(usr)] resent the NanoUI resource files to [key_name(H)] ")
else if(href_list["regenerateicons"])
if(!check_rights(0)) return
+2 -2
View File
@@ -16,7 +16,7 @@ var/list/advance_cures = list(
"nutriment", "sugar", "orangejuice",
"spaceacillin", "kelotane", "ethanol",
"leporazine", "synaptizine", "lipozine",
"silver", "gold", "plasma"
"silver", "gold", "phoron"
)
/*
@@ -297,7 +297,7 @@ var/list/advance_cures = list(
for(var/datum/symptom/S in symptoms)
L += S.id
L = sortList(L) // Sort the list so it doesn't matter which order the symptoms are in.
var/result = dd_list2text(L, ":")
var/result = list2text(L, ":")
id = result
return result
+6 -1
View File
@@ -16,6 +16,11 @@
/datum/disease/appendicitis/stage_act()
..()
if(istype(affected_mob,/mob/living/carbon/human))
var/mob/living/carbon/human/H = affected_mob
if(H.species.name == "Diona" || H.species.name == "Machine" || H.species.name == "Vox") src.cure()
if(stage == 1)
if(affected_mob.op_stage.appendix == 2.0)
// appendix is removed, can't get infected again
@@ -45,7 +50,7 @@
H.op_stage.appendix = 2.0
var/datum/organ/external/groin = H.get_organ("groin")
var/datum/wound/W = new /datum/wound/internal_bleeding(25)
var/datum/wound/W = new /datum/wound/internal_bleeding(20)
H.adjustToxLoss(25)
groin.wounds += W
src.cure()
+10 -6
View File
@@ -39,12 +39,14 @@
//Save original dna for when the disease is cured.
src.original_dna["name"] = affected_mob.real_name
src.original_dna["UI"] = affected_mob.dna.UI
src.original_dna["SE"] = affected_mob.dna.SE
src.original_dna["UI"] = affected_mob.dna.UI.Copy()
src.original_dna["SE"] = affected_mob.dna.SE.Copy()
affected_mob << "\red You don't feel like yourself.."
affected_mob.UpdateAppearance(strain_data["UI"])
affected_mob.dna.SE = strain_data["SE"]
var/list/newUI=strain_data["UI"]
var/list/newSE=strain_data["SE"]
affected_mob.UpdateAppearance(newUI.Copy())
affected_mob.dna.SE = newSE.Copy()
affected_mob.dna.UpdateSE()
affected_mob.real_name = strain_data["name"]
domutcheck(affected_mob)
@@ -56,8 +58,10 @@
/datum/disease/dnaspread/Del()
if ((original_dna["name"]) && (original_dna["UI"]) && (original_dna["SE"]))
affected_mob.UpdateAppearance(original_dna["UI"])
affected_mob.dna.SE = original_dna["SE"]
var/list/newUI=original_dna["UI"]
var/list/newSE=original_dna["SE"]
affected_mob.UpdateAppearance(newUI.Copy())
affected_mob.dna.SE = newSE.Copy()
affected_mob.dna.UpdateSE()
affected_mob.real_name = original_dna["name"]
+1 -1
View File
@@ -4,7 +4,7 @@
spread = "On contact"
spread_type = CONTACT_GENERAL
cure = "Chick Chicky Boom!"
cure_id = list("plasma")
cure_id = list("phoron")
agent = "Unknown"
affected_species = list("Human")
permeability_mod = 1
+2 -2
View File
@@ -63,7 +63,7 @@ var/global/datum/getrev/revdata = new("config/svndir.txt")
s_archive = s
if(!revision)
abort()
diary << "Revision info loaded succesfully"
log_misc("Revision info loaded succesfully")
return
return abort()
@@ -91,6 +91,6 @@ client/verb/showrevinfo()
var/output = "Sorry, the revision info is unavailable."
output = file2text("/home/bay12/live/data/gitcommit")
output += "Current Infomational Settings: <br>"
output += "Protect Authority Roles From Tratior: [config.protect_roles_from_antagonist]<br>"
output += "Protect Authority Roles From Traitor: [config.protect_roles_from_antagonist]<br>"
usr << browse(output,"window=revdata");
return
+51 -13
View File
@@ -75,6 +75,8 @@ datum/mind
if(new_character.mind) //remove any mind currently in our new body's mind variable
new_character.mind.current = null
nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user
current = new_character //link ourself to our new body
new_character.mind = src //and link our new body to ourself
@@ -127,7 +129,7 @@ datum/mind
if (istype(current, /mob/living/carbon/human) || istype(current, /mob/living/carbon/monkey))
/** Impanted**/
if(istype(current, /mob/living/carbon/human))
if(H.is_loyalty_implanted(H))
if(H.is_loyalty_implanted(H))
text = "Loyalty Implant:<a href='?src=\ref[src];implant=remove'>Remove</a>|<b>Implanted</b></br>"
else
text = "Loyalty Implant:<b>No Implant</b>|<a href='?src=\ref[src];implant=add'>Implant him!</a></br>"
@@ -355,7 +357,7 @@ datum/mind
if(!check_rights(R_ADMIN)) return
if (href_list["role_edit"])
var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs()
var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in joblist
if (!new_role) return
assigned_role = new_role
@@ -497,6 +499,9 @@ datum/mind
else if(href_list["implant"])
var/mob/living/carbon/human/H = current
H.hud_updateflag |= (1 << IMPLOYAL_HUD) // updates that players HUD images so secHUD's pick up they are implanted or not.
switch(href_list["implant"])
if("remove")
for(var/obj/item/weapon/implant/loyalty/I in H.contents)
@@ -538,6 +543,8 @@ datum/mind
log_admin("[key_name_admin(usr)] has de-traitor'ed [current].")
else if (href_list["revolution"])
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
switch(href_list["revolution"])
if("clear")
if(src in ticker.mode.revolutionaries)
@@ -550,6 +557,7 @@ datum/mind
current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a head revolutionary!</B></FONT>"
ticker.mode.update_rev_icons_removed(src)
special_role = null
current.verbs -= /mob/living/carbon/human/proc/RevConvert
log_admin("[key_name_admin(usr)] has de-rev'ed [current].")
if("rev")
@@ -559,6 +567,7 @@ datum/mind
current << "\red <FONT size = 3><B>Revolution has been disappointed of your leader traits! You are a regular revolutionary now!</B></FONT>"
else if(!(src in ticker.mode.revolutionaries))
current << "\red <FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT>"
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
else
return
ticker.mode.revolutionaries += src
@@ -570,7 +579,8 @@ datum/mind
if(src in ticker.mode.revolutionaries)
ticker.mode.revolutionaries -= src
ticker.mode.update_rev_icons_removed(src)
current << "\red <FONT size = 3><B>You have proved your devotion to revoltion! Yea are a head revolutionary now!</B></FONT>"
current << "\red <FONT size = 3><B>You have proved your devotion to revoltion! You are a head revolutionary now!</B></FONT>"
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
else if(!(src in ticker.mode.head_revolutionaries))
current << "\blue You are a member of the revolutionaries' leadership now!"
else
@@ -586,6 +596,7 @@ datum/mind
rev_obj.explanation_text = "Assassinate [O.target.name], the [O.target.assigned_role]."
objectives += rev_obj
ticker.mode.greet_revolutionary(src,0)
current.verbs += /mob/living/carbon/human/proc/RevConvert
ticker.mode.head_revolutionaries += src
ticker.mode.update_rev_icons_added(src)
special_role = "Head Revolutionary"
@@ -627,6 +638,7 @@ datum/mind
usr << "\red Reequipping revolutionary goes wrong!"
else if (href_list["cult"])
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
switch(href_list["cult"])
if("clear")
if(src in ticker.mode.cult)
@@ -638,6 +650,11 @@ datum/mind
special_role = "Cultist"
current << "<font color=\"purple\"><b><i>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.</b></i></font>"
current << "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>"
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
var/datum/game_mode/cult/cult = ticker.mode
if (istype(cult))
if(!config.objectives_disabled)
cult.memoize_cult_objectives(src)
log_admin("[key_name_admin(usr)] has cult'ed [current].")
if("tome")
var/mob/living/carbon/human/H = current
@@ -662,6 +679,8 @@ datum/mind
usr << "\red Spawning amulet failed!"
else if (href_list["wizard"])
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
switch(href_list["wizard"])
if("clear")
if(src in ticker.mode.wizards)
@@ -676,6 +695,7 @@ datum/mind
special_role = "Wizard"
//ticker.mode.learn_basic_spells(current)
current << "<B>\red You are the Space Wizard!</B>"
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
log_admin("[key_name_admin(usr)] has wizard'ed [current].")
if("lair")
current.loc = pick(wizardstart)
@@ -684,10 +704,12 @@ datum/mind
if("name")
ticker.mode.name_wizard(current)
if("autoobjectives")
ticker.mode.forge_wizard_objectives(src)
usr << "\blue The objectives for wizard [key] have been generated. You can edit them and anounce manually."
if(!config.objectives_disabled)
ticker.mode.forge_wizard_objectives(src)
usr << "\blue The objectives for wizard [key] have been generated. You can edit them and anounce manually."
else if (href_list["changeling"])
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
switch(href_list["changeling"])
if("clear")
if(src in ticker.mode.changelings)
@@ -704,9 +726,12 @@ datum/mind
ticker.mode.grant_changeling_powers(current)
special_role = "Changeling"
current << "<B><font color='red'>Your powers are awoken. A flash of memory returns to us...we are a changeling!</font></B>"
if(config.objectives_disabled)
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
log_admin("[key_name_admin(usr)] has changeling'ed [current].")
if("autoobjectives")
ticker.mode.forge_changeling_objectives(src)
if(!config.objectives_disabled)
ticker.mode.forge_changeling_objectives(src)
usr << "\blue The objectives for changeling [key] have been generated. You can edit them and anounce manually."
if("initialdna")
@@ -719,6 +744,10 @@ datum/mind
domutcheck(current, null)
else if (href_list["nuclear"])
var/mob/living/carbon/human/H = current
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
switch(href_list["nuclear"])
if("clear")
if(src in ticker.mode.syndicates)
@@ -739,13 +768,15 @@ datum/mind
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
special_role = "Syndicate"
current << "\blue You are a [syndicate_name()] agent!"
ticker.mode.forge_syndicate_objectives(src)
if(config.objectives_disabled)
current << "<font color=blue>Within the rules,</font> try to act as an opposing force to the crew. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonists.</i></b>"
else
ticker.mode.forge_syndicate_objectives(src)
ticker.mode.greet_syndicate(src)
log_admin("[key_name_admin(usr)] has nuke op'ed [current].")
if("lair")
current.loc = get_turf(locate("landmark*Syndicate-Spawn"))
if("dressup")
var/mob/living/carbon/human/H = current
del(H.belt)
del(H.back)
del(H.l_ear)
@@ -772,6 +803,7 @@ datum/mind
usr << "\red No valid nuke found!"
else if (href_list["traitor"])
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
switch(href_list["traitor"])
if("clear")
if(src in ticker.mode.traitors)
@@ -791,14 +823,17 @@ datum/mind
special_role = "traitor"
current << "<B>\red You are a traitor!</B>"
log_admin("[key_name_admin(usr)] has traitor'ed [current].")
if (config.objectives_disabled)
current << "<i>You have been turned into an antagonist- <font color=blue>Within the rules,</font> try to act as an opposing force to the crew- This can be via corporate payoff, personal motives, or maybe just being a dick. Further RP and try to make sure other players have </i>fun<i>! If you are confused or at a loss, always adminhelp, and before taking extreme actions, please try to also contact the administration! Think through your actions and make the roleplay immersive! <b>Please remember all rules aside from those without explicit exceptions apply to antagonist.</i></b>"
if(istype(current, /mob/living/silicon))
var/mob/living/silicon/A = current
call(/datum/game_mode/proc/add_law_zero)(A)
A.show_laws()
if("autoobjectives")
ticker.mode.forge_traitor_objectives(src)
usr << "\blue The objectives for traitor [key] have been generated. You can edit them and anounce manually."
if (!config.objectives_disabled)
ticker.mode.forge_traitor_objectives(src)
usr << "\blue The objectives for traitor [key] have been generated. You can edit them and anounce manually."
else if (href_list["monkey"])
var/mob/living/L = current
@@ -851,6 +886,7 @@ datum/mind
current.radiation -= 50
else if (href_list["silicon"])
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
switch(href_list["silicon"])
if("unmalf")
if(src in ticker.mode.malf_ai)
@@ -1004,11 +1040,12 @@ datum/mind
special_role = "malfunction"
current.icon_state = "ai-malf"
proc/make_Tratior()
proc/make_Traitor()
if(!(src in ticker.mode.traitors))
ticker.mode.traitors += src
special_role = "traitor"
ticker.mode.forge_traitor_objectives(src)
if (!config.objectives_disabled)
ticker.mode.forge_traitor_objectives(src)
ticker.mode.finalize_traitor(src)
ticker.mode.greet_traitor(src)
@@ -1047,7 +1084,8 @@ datum/mind
ticker.mode.changelings += src
ticker.mode.grant_changeling_powers(current)
special_role = "Changeling"
ticker.mode.forge_changeling_objectives(src)
if(!config.objectives_disabled)
ticker.mode.forge_changeling_objectives(src)
ticker.mode.greet_changeling(src)
proc/make_Wizard()
+15 -4
View File
@@ -28,12 +28,23 @@
user << "<span class='notice'>They are too far away!</span>"
return
var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead
magichead.canremove = 0 //curses!
magichead.flags_inv = null //so you can still see their face
magichead.voicechange = 1 //NEEEEIIGHH
var/obj/item/clothing/mask/horsehead/magic/magichead = new /obj/item/clothing/mask/horsehead/magic
target.visible_message( "<span class='danger'>[target]'s face lights up in fire, and after the event a horse's head takes its place!</span>", \
"<span class='danger'>Your face burns up, and shortly after the fire you realise you have the face of a horse!</span>")
target.equip_to_slot(magichead, slot_wear_mask)
flick("e_flash", target.flash)
//item used by the horsehead spell
/obj/item/clothing/mask/horsehead/magic
//flags_inv = null //so you can still see their face... no. How can you recognize someone when their face is completely different?
voicechange = 1 //NEEEEIIGHH
dropped(mob/user as mob)
canremove = 1
..()
equipped(var/mob/user, var/slot)
if (slot == slot_wear_mask)
canremove = 0 //curses!
..()
+19 -17
View File
@@ -6,6 +6,7 @@
var/rate
var/list/solars // for debugging purposes, references solars_list at the constructor
var/nexttime = 3600 // Replacement for var/counter to force the sun to move every X IC minutes
var/lastAngleUpdate
/datum/sun/New()
@@ -28,15 +29,25 @@
counter = 0 */
angle = ((rate*world.time/100)%360 + 360)%360
/*
Yields a 45 - 75 IC minute rotational period
Rotation rate can vary from 4.8 deg/min to 8 deg/min (288 to 480 deg/hr)
*/
// To prevent excess server load the server only updates the sun's sight lines every 6 minutes
if(nexttime < world.time)
if(lastAngleUpdate != angle)
for(var/obj/machinery/power/tracker/T in solars_list)
if(!T.powernet)
solars_list.Remove(T)
continue
T.set_angle(angle)
lastAngleUpdate=angle
if(nexttime > world.time)
return
nexttime = nexttime + 3600 // 600 world.time ticks = 1 minute, 3600 = 6 minutes.
nexttime = nexttime + 600 // 600 world.time ticks = 1 minute
// now calculate and cache the (dx,dy) increments for line drawing
@@ -58,22 +69,13 @@
dy = c / abs(s)
for(var/obj/machinery/power/M in solars_list)
for(var/obj/machinery/power/solar/S in solars_list)
if(!M.powernet)
solars_list.Remove(M)
if(!S.powernet)
solars_list.Remove(S)
continue
// Solar Tracker
if(istype(M, /obj/machinery/power/tracker))
var/obj/machinery/power/tracker/T = M
T.set_angle(angle)
// Solar Panel
else if(istype(M, /obj/machinery/power/solar))
var/obj/machinery/power/solar/S = M
if(S.control)
occlusion(S)
if(S.control)
occlusion(S)
+169 -96
View File
@@ -5,7 +5,7 @@
//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle.
//NEW NOTE: Do NOT set the price of any crates below 7 points. Doing so allows infinite points.
var/list/all_supply_groups = list("Operations","Security","Hospitality","Engineering","Medical / Science","Hydroponics")
var/list/all_supply_groups = list("Operations","Security","Hospitality","Engineering","Medical / Science","Hydroponics", "Supply", "Miscellaneous")
/datum/supply_packs
var/name = null
@@ -44,19 +44,24 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
hidden = 1
/datum/supply_packs/food
name = "Food crate"
contains = list(/obj/item/weapon/reagent_containers/food/drinks/flour,
name = "Kitchen supply crate"
contains = list(/obj/item/weapon/reagent_containers/food/snacks/flour,
/obj/item/weapon/reagent_containers/food/snacks/flour,
/obj/item/weapon/reagent_containers/food/snacks/flour,
/obj/item/weapon/reagent_containers/food/snacks/flour,
/obj/item/weapon/reagent_containers/food/drinks/milk,
/obj/item/weapon/reagent_containers/food/drinks/milk,
/obj/item/weapon/storage/fancy/egg_box,
/obj/item/weapon/reagent_containers/food/condiment/enzyme,
/obj/item/weapon/reagent_containers/food/snacks/grown/banana,
/obj/item/weapon/reagent_containers/food/snacks/tofu,
/obj/item/weapon/reagent_containers/food/snacks/tofu,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/meat,
/obj/item/weapon/reagent_containers/food/snacks/grown/banana,
/obj/item/weapon/reagent_containers/food/snacks/grown/banana)
cost = 10
containertype = /obj/structure/closet/crate/freezer
containername = "Food crate"
group = "Hospitality"
group = "Supply"
/datum/supply_packs/monkey
name = "Monkey crate"
@@ -108,7 +113,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
group = "Security"
/datum/supply_packs/toner
name = "Toner Cartridges"
name = "Toner cartridges"
contains = list(/obj/item/device/toner,
/obj/item/device/toner,
/obj/item/device/toner,
@@ -117,23 +122,24 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/device/toner)
cost = 10
containertype = /obj/structure/closet/crate
containername = "Toner Cartridges"
group = "Operations"
containername = "Toner cartridges"
group = "Supply"
/datum/supply_packs/party
name = "Party equipment"
contains = list(/obj/item/weapon/storage/box/drinkingglasses,
/obj/item/weapon/reagent_containers/food/drinks/shaker,
/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron,
/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager,
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,
/obj/item/weapon/lipstick/random,
/obj/item/weapon/reagent_containers/food/drinks/ale,
/obj/item/weapon/reagent_containers/food/drinks/ale,
/obj/item/weapon/reagent_containers/food/drinks/beer,
/obj/item/weapon/reagent_containers/food/drinks/beer,
/obj/item/weapon/reagent_containers/food/drinks/beer,
/obj/item/weapon/reagent_containers/food/drinks/beer)
/obj/item/weapon/reagent_containers/food/drinks/cans/ale,
/obj/item/weapon/reagent_containers/food/drinks/cans/ale,
/obj/item/weapon/reagent_containers/food/drinks/cans/beer,
/obj/item/weapon/reagent_containers/food/drinks/cans/beer,
/obj/item/weapon/reagent_containers/food/drinks/cans/beer,
/obj/item/weapon/reagent_containers/food/drinks/cans/beer)
cost = 20
containertype = /obj/structure/closet/crate
containername = "Party equipment"
@@ -170,7 +176,17 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/clothing/mask/gas)
cost = 35
containertype = /obj/structure/closet/crate/internals
containername = "Emergency Crate"
containername = "Emergency crate"
group = "Engineering"
/datum/supply_packs/evacuation
name = "Inflatable barriers"
contains = list(/obj/item/weapon/storage/briefcase/inflatable,
/obj/item/weapon/storage/briefcase/inflatable,
/obj/item/weapon/storage/briefcase/inflatable)
cost = 20
containertype = /obj/structure/closet/crate
containername = "Inflatable Barrier Crate"
group = "Engineering"
/datum/supply_packs/janitor
@@ -192,7 +208,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
cost = 10
containertype = /obj/structure/closet/crate
containername = "Janitorial supplies"
group = "Operations"
group = "Supply"
/datum/supply_packs/lightbulbs
name = "Replacement lights"
@@ -204,26 +220,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containername = "Replacement lights"
group = "Engineering"
/datum/supply_packs/costume
name = "Standard Costume crate"
contains = list(/obj/item/weapon/storage/backpack/clown,
/obj/item/clothing/shoes/clown_shoes,
/obj/item/clothing/mask/gas/clown_hat,
/obj/item/clothing/under/rank/clown,
/obj/item/weapon/bikehorn,
/obj/item/clothing/under/mime,
/obj/item/clothing/shoes/black,
/obj/item/clothing/gloves/white,
/obj/item/clothing/mask/gas/mime,
/obj/item/clothing/head/beret,
/obj/item/clothing/suit/suspenders,
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing)
cost = 10
containertype = /obj/structure/closet/crate/secure
containername = "Standard Costumes"
access = access_theatre
group = "Operations"
/datum/supply_packs/wizard
name = "Wizard costume"
contains = list(/obj/item/weapon/staff,
@@ -233,7 +229,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
cost = 20
containertype = /obj/structure/closet/crate
containername = "Wizard costume crate"
group = "Operations"
group = "Miscellaneous"
/datum/supply_packs/mule
name = "MULEbot Crate"
@@ -270,46 +266,52 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
//farm animals - useless and annoying, but potentially a good source of food
/datum/supply_packs/cow
name = "Cow Crate"
name = "Cow crate"
cost = 30
containertype = /obj/structure/largecrate/cow
containername = "Cow Crate"
containername = "Cow crate"
access = access_hydroponics
group = "Hydroponics"
/datum/supply_packs/goat
name = "Goat Crate"
name = "Goat crate"
cost = 25
containertype = /obj/structure/largecrate/goat
containername = "Goat Crate"
containername = "Goat crate"
access = access_hydroponics
group = "Hydroponics"
/datum/supply_packs/chicken
name = "Chicken Crate"
name = "Chicken crate"
cost = 20
containertype = /obj/structure/largecrate/chick
containername = "Chicken Crate"
containername = "Chicken crate"
access = access_hydroponics
group = "Hydroponics"
/datum/supply_packs/lisa
name = "Corgi Crate"
name = "Corgi crate"
contains = list()
cost = 50
containertype = /obj/structure/largecrate/lisa
containername = "Corgi Crate"
containername = "Corgi crate"
group = "Hydroponics"
/datum/supply_packs/seeds
name = "Seeds Crate"
name = "Seeds crate"
contains = list(/obj/item/seeds/chiliseed,
/obj/item/seeds/berryseed,
/obj/item/seeds/cornseed,
/obj/item/seeds/eggplantseed,
/obj/item/seeds/tomatoseed,
/obj/item/seeds/appleseed,
/obj/item/seeds/soyaseed,
/obj/item/seeds/wheatseed,
/obj/item/seeds/carrotseed,
/obj/item/seeds/harebell,
/obj/item/seeds/lemonseed,
/obj/item/seeds/orangeseed,
/obj/item/seeds/grassseed,
/obj/item/seeds/sunflowerseed,
/obj/item/seeds/chantermycelium,
/obj/item/seeds/potatoseed,
@@ -321,7 +323,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
group = "Hydroponics"
/datum/supply_packs/weedcontrol
name = "Weed Control Crate"
name = "Weed control crate"
contains = list(/obj/item/weapon/scythe,
/obj/item/clothing/mask/gas,
/obj/item/weapon/grenade/chem_grenade/antiweed,
@@ -333,7 +335,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
group = "Hydroponics"
/datum/supply_packs/exoticseeds
name = "Exotic Seeds Crate"
name = "Exotic seeds crate"
contains = list(/obj/item/seeds/nettleseed,
/obj/item/seeds/replicapod,
/obj/item/seeds/replicapod,
@@ -343,6 +345,10 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/seeds/amanitamycelium,
/obj/item/seeds/reishimycelium,
/obj/item/seeds/bananaseed,
/obj/item/seeds/riceseed,
/obj/item/seeds/eggplantseed,
/obj/item/seeds/limeseed,
/obj/item/seeds/grapeseed,
/obj/item/seeds/eggyseed)
cost = 15
containertype = /obj/structure/closet/crate/hydroponics
@@ -368,7 +374,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
group = "Medical / Science"
/datum/supply_packs/virus
name = "Virus crate"
name = "Virus sample crate"
/* contains = list(/obj/item/weapon/reagent_containers/glass/bottle/flu_virion,
/obj/item/weapon/reagent_containers/glass/bottle/cold,
/obj/item/weapon/reagent_containers/glass/bottle/epiglottis_virion,
@@ -387,12 +393,12 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/weapon/virusdish/random)
cost = 25
containertype = "/obj/structure/closet/crate/secure"
containername = "Virus crate"
containername = "Virus sample crate"
access = access_cmo
group = "Medical / Science"
/datum/supply_packs/metal50
name = "50 Metal Sheets"
name = "50 metal sheets"
contains = list(/obj/item/stack/sheet/metal)
amount = 50
cost = 10
@@ -401,7 +407,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
group = "Engineering"
/datum/supply_packs/glass50
name = "50 Glass Sheets"
name = "50 glass sheets"
contains = list(/obj/item/stack/sheet/glass)
amount = 50
cost = 10
@@ -409,6 +415,15 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
containername = "Glass sheets crate"
group = "Engineering"
/datum/supply_packs/wood50
name = "50 wooden planks"
contains = list(/obj/item/stack/sheet/wood)
amount = 50
cost = 10
containertype = /obj/structure/closet/crate
containername = "Wooden planks crate"
group = "Engineering"
/datum/supply_packs/electrical
name = "Electrical maintenance crate"
contains = list(/obj/item/weapon/storage/toolbox/electrical,
@@ -492,7 +507,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/weapon/paper/solar)
cost = 20
containertype = /obj/structure/closet/crate
containername = "solar pack crate"
containername = "Solar pack crate"
group = "Engineering"
/datum/supply_packs/engine
@@ -568,7 +583,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/datum/supply_packs/robotics
name = "Robotics Assembly Crate"
name = "Robotics assembly crate"
contains = list(/obj/item/device/assembly/prox_sensor,
/obj/item/device/assembly/prox_sensor,
/obj/item/device/assembly/prox_sensor,
@@ -581,15 +596,15 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/weapon/cell/high)
cost = 10
containertype = /obj/structure/closet/crate/secure/gear
containername = "Robotics Assembly"
containername = "Robotics assembly"
access = access_robotics
group = "Engineering"
/datum/supply_packs/plasma
name = "Plasma assembly crate"
contains = list(/obj/item/weapon/tank/plasma,
/obj/item/weapon/tank/plasma,
/obj/item/weapon/tank/plasma,
/datum/supply_packs/phoron
name = "Phoron assembly crate"
contains = list(/obj/item/weapon/tank/phoron,
/obj/item/weapon/tank/phoron,
/obj/item/weapon/tank/phoron,
/obj/item/device/assembly/igniter,
/obj/item/device/assembly/igniter,
/obj/item/device/assembly/igniter,
@@ -600,8 +615,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/device/assembly/timer,
/obj/item/device/assembly/timer)
cost = 10
containertype = /obj/structure/closet/crate/secure/plasma
containername = "Plasma assembly crate"
containertype = /obj/structure/closet/crate/secure/phoron
containername = "Phoron assembly crate"
access = access_tox_storage
group = "Medical / Science"
@@ -624,9 +639,9 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/datum/supply_packs/eweapons
name = "Experimental weapons crate"
contains = list(/obj/item/weapon/flamethrower/full,
/obj/item/weapon/tank/plasma,
/obj/item/weapon/tank/plasma,
/obj/item/weapon/tank/plasma,
/obj/item/weapon/tank/phoron,
/obj/item/weapon/tank/phoron,
/obj/item/weapon/tank/phoron,
/obj/item/weapon/grenade/chem_grenade/incendiary,
/obj/item/weapon/grenade/chem_grenade/incendiary,
/obj/item/weapon/grenade/chem_grenade/incendiary)
@@ -695,6 +710,18 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
access = access_armory
group = "Security"
/datum/supply_packs/erifle
name = "Energy marksman crate"
contains = list(/obj/item/clothing/suit/armor/laserproof,
/obj/item/clothing/suit/armor/laserproof,
/obj/item/weapon/gun/energy/sniperrifle,
/obj/item/weapon/gun/energy/sniperrifle)
cost = 50
containertype = /obj/structure/closet/crate/secure
containername = "Energy marksman crate"
access = access_armory
group = "Security"
/datum/supply_packs/shotgunammo
name = "Shotgun shells"
contains = list(/obj/item/ammo_casing/shotgun,
@@ -738,30 +765,30 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
group = "Security"
/datum/supply_packs/securitybarriers
name = "Security Barriers"
name = "Security barrier crate"
contains = list(/obj/machinery/deployable/barrier,
/obj/machinery/deployable/barrier,
/obj/machinery/deployable/barrier,
/obj/machinery/deployable/barrier)
cost = 20
containertype = /obj/structure/closet/crate/secure/gear
containername = "Security Barriers crate"
containername = "Security barrier crate"
group = "Security"
/datum/supply_packs/securitybarriers
name = "Shield Generators"
name = "Wall shield Generators"
contains = list(/obj/machinery/shieldwallgen,
/obj/machinery/shieldwallgen,
/obj/machinery/shieldwallgen,
/obj/machinery/shieldwallgen)
cost = 20
containertype = /obj/structure/closet/crate/secure
containername = "Shield Generators crate"
containername = "wall shield generators crate"
access = access_teleporter
group = "Security"
/datum/supply_packs/randomised
var/num_contained = 3 //number of items picked to be contained in a randomised crate
var/num_contained = 4 //number of items picked to be contained in a randomised crate
contains = list(/obj/item/clothing/head/collectable/chef,
/obj/item/clothing/head/collectable/paper,
/obj/item/clothing/head/collectable/tophat,
@@ -786,7 +813,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
cost = 200
containertype = /obj/structure/closet/crate
containername = "Collectable hats crate! Brought to you by Bass.inc!"
group = "Operations"
group = "Miscellaneous"
/datum/supply_packs/randomised/New()
manifest += "Contains any [num_contained] of:"
@@ -832,7 +859,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
group = "Operations"
/datum/supply_packs/boxes
name = "Empty Box supplies"
name = "Empty boxes"
contains = list(/obj/item/weapon/storage/box,
/obj/item/weapon/storage/box,
/obj/item/weapon/storage/box,
@@ -845,8 +872,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/weapon/storage/box)
cost = 10
containertype = "/obj/structure/closet/crate"
containername = "Empty Box crate"
group = "Operations"
containername = "Empty box crate"
group = "Supply"
/datum/supply_packs/surgery
name = "Surgery crate"
@@ -884,12 +911,48 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/pizzabox/mushroom,
/obj/item/pizzabox/meat,
/obj/item/pizzabox/vegetable)
name = "Surprise pack of five dozen pizzas"
name = "Surprise pack of five pizzas"
cost = 15
containertype = /obj/structure/closet/crate/freezer
containername = "Pizza crate"
group = "Hospitality"
/datum/supply_packs/randomised/costume
num_contained = 2
contains = list(/obj/item/clothing/suit/pirate,
/obj/item/clothing/suit/judgerobe,
/obj/item/clothing/suit/wcoat,
/obj/item/clothing/suit/hastur,
/obj/item/clothing/suit/holidaypriest,
/obj/item/clothing/suit/nun,
/obj/item/clothing/suit/imperium_monk,
/obj/item/clothing/suit/ianshirt,
/obj/item/clothing/under/gimmick/rank/captain/suit,
/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit,
/obj/item/clothing/under/lawyer/purpsuit,
/obj/item/clothing/under/rank/mailman,
/obj/item/clothing/under/dress/dress_saloon,
/obj/item/clothing/suit/suspenders,
/obj/item/clothing/suit/storage/labcoat/mad,
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit,
/obj/item/clothing/under/schoolgirl,
/obj/item/clothing/under/owl,
/obj/item/clothing/under/waiter,
/obj/item/clothing/under/gladiator,
/obj/item/clothing/under/soviet,
/obj/item/clothing/under/scratch,
/obj/item/clothing/under/wedding/bride_white,
/obj/item/clothing/suit/chef,
/obj/item/clothing/suit/apron/overalls,
/obj/item/clothing/under/redcoat,
/obj/item/clothing/under/kilt)
name = "Costumes crate"
cost = 10
containertype = /obj/structure/closet/crate/secure
containername = "Actor Costumes"
access = access_theatre
group = "Miscellaneous"
/datum/supply_packs/formal_wear
contains = list(/obj/item/clothing/head/bowler,
/obj/item/clothing/head/that,
@@ -899,14 +962,17 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/obj/item/clothing/under/suit_jacket/female,
/obj/item/clothing/under/suit_jacket/really_black,
/obj/item/clothing/under/suit_jacket/red,
/obj/item/clothing/under/lawyer/bluesuit,
/obj/item/clothing/under/lawyer/purpsuit,
/obj/item/clothing/shoes/black,
/obj/item/clothing/shoes/black,
/obj/item/clothing/shoes/leather,
/obj/item/clothing/suit/wcoat)
name = "Formalwear closet"
cost = 30
containertype = /obj/structure/closet
containername = "Formalwear for the best occasions."
group = "Operations"
group = "Miscellaneous"
/datum/supply_packs/rust_injector
contains = list(/obj/machinery/power/rust_fuel_injector)
@@ -946,10 +1012,28 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/datum/supply_packs/shield_gen
contains = list(/obj/item/weapon/circuitboard/shield_gen)
name = "Experimental shield generator circuitry"
name = "Bubble shield generator circuitry"
cost = 50
containertype = /obj/structure/closet/crate/secure
containername = "Experimental shield generator"
containername = "bubble shield generator circuitry crate"
group = "Engineering"
access = access_ce
/datum/supply_packs/shield_gen_ex
contains = list(/obj/item/weapon/circuitboard/shield_gen_ex)
name = "Hull shield generator circuitry"
cost = 50
containertype = /obj/structure/closet/crate/secure
containername = "hull shield generator circuitry crate"
group = "Engineering"
access = access_ce
/datum/supply_packs/shield_cap
contains = list(/obj/item/weapon/circuitboard/shield_cap)
name = "Bubble shield capacitor circuitry"
cost = 50
containertype = /obj/structure/closet/crate/secure
containername = "shield capacitor circuitry crate"
group = "Engineering"
access = access_ce
@@ -957,7 +1041,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
name = "Supermatter Core"
contains = list(/obj/machinery/power/supermatter)
cost = 50
containertype = /obj/structure/closet/crate/secure/plasma
containertype = /obj/structure/closet/crate/secure/phoron
containername = "Supermatter crate (CAUTION)"
group = "Engineering"
access = access_ce
@@ -967,27 +1051,18 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
name = "Supermatter Shard"
contains = list(/obj/machinery/power/supermatter/shard)
cost = 25
containertype = /obj/structure/closet/crate/secure/plasma
containertype = /obj/structure/closet/crate/secure/phoron
containername = "Supermatter shard crate (CAUTION)"
access = access_ce
group = "Engineering" */
/datum/supply_packs/shield_cap
contains = list(/obj/item/weapon/circuitboard/shield_cap)
name = "Experimental shield capacitor circuitry"
cost = 50
containertype = /obj/structure/closet/crate/secure
containername = "Experimental shield capacitor"
group = "Engineering"
access = access_ce
/datum/supply_packs/eftpos
contains = list(/obj/item/device/eftpos)
name = "EFTPOS scanner"
cost = 10
containertype = /obj/structure/closet/crate
containername = "EFTPOS crate"
group = "Operations"
group = "Miscellaneous"
/datum/supply_packs/teg
contains = list(/obj/machinery/power/generator)
@@ -1026,15 +1101,13 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
access = access_atmospherics
/datum/supply_packs/bee_keeper
name = "Beekeeping Crate"
name = "Beekeeping crate"
contains = list(/obj/item/beezeez,
/obj/item/beezeez,
/obj/item/weapon/bee_net,
/obj/item/apiary,
/obj/item/queen_bee,
/obj/item/queen_bee,
/obj/item/queen_bee)
cost = 20
cost = 40
contraband = 1
containertype = /obj/structure/closet/crate/hydroponics
containername = "Beekeeping crate"
access = access_hydroponics