mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-24 13:30:42 +01:00
Merge branch 'master' into development
This commit is contained in:
@@ -51,7 +51,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
/obj/item/weapon/storage/box/swabs,
|
||||
/obj/item/weapon/storage/box/swabs,
|
||||
/obj/item/weapon/storage/box/slides,
|
||||
/obj/item/weapon/reagent_containers/spray/luminol)
|
||||
/obj/item/weapon/reagent_containers/spray/luminol,
|
||||
/obj/item/device/uv_light)
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Auxiliary forensic tools"
|
||||
@@ -138,6 +139,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
/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/reagent_containers/food/drinks/bottle/sarezhiwine,
|
||||
/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,
|
||||
/obj/item/weapon/lipstick/random,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale,
|
||||
@@ -206,6 +208,8 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
group = "Atmospherics"
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/supply_packs/inflatable
|
||||
name = "Inflatable barriers"
|
||||
contains = list(/obj/item/weapon/storage/briefcase/inflatable,
|
||||
@@ -1092,6 +1096,22 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
containername = "Sterile equipment crate"
|
||||
group = "Medical"
|
||||
|
||||
/datum/supply_packs/beer
|
||||
contains = list(/obj/structure/reagent_dispensers/beerkeg)
|
||||
name = "Beer Keg"
|
||||
cost = 10
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "Beer Crate"
|
||||
group = "Hospitality"
|
||||
|
||||
/datum/supply_packs/xuizi
|
||||
contains = list(/obj/structure/reagent_dispensers/xuizikeg)
|
||||
name = "Xuizi Juice Keg"
|
||||
cost = 20
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "Xuizi Juice Crate"
|
||||
group = "Hospitality"
|
||||
|
||||
/datum/supply_packs/randomised/pizza
|
||||
num_contained = 5
|
||||
contains = list(/obj/item/pizzabox/margherita,
|
||||
|
||||
+23
-165
@@ -1,175 +1,33 @@
|
||||
/datum/dna/gene/monkey
|
||||
name="Monkey"
|
||||
name = "Monkey"
|
||||
|
||||
/datum/dna/gene/monkey/New()
|
||||
block=MONKEYBLOCK
|
||||
block = MONKEYBLOCK
|
||||
|
||||
/datum/dna/gene/monkey/can_activate(var/mob/M,var/flags)
|
||||
return istype(M, /mob/living/carbon/human) || istype(M,/mob/living/carbon/monkey)
|
||||
return ishuman(M)
|
||||
|
||||
/datum/dna/gene/monkey/activate(var/mob/living/M, var/connected, var/flags)
|
||||
if(!istype(M,/mob/living/carbon/human))
|
||||
//testing("Cannot monkey-ify [M], type is [M.type].")
|
||||
return
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.transforming = 1
|
||||
var/list/implants = list() //Try to preserve implants.
|
||||
for(var/obj/item/weapon/implant/W in H)
|
||||
implants += W
|
||||
W.loc = null
|
||||
|
||||
if(!connected)
|
||||
for(var/obj/item/W in (H.contents-implants))
|
||||
if (W==H.w_uniform) // will be teared
|
||||
continue
|
||||
H.drop_from_inventory(W)
|
||||
M.transforming = 1
|
||||
M.canmove = 0
|
||||
M.icon = null
|
||||
M.invisibility = 101
|
||||
var/atom/movable/overlay/animation = new( M.loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = src
|
||||
flick("h2monkey", animation)
|
||||
sleep(48)
|
||||
qdel(animation)
|
||||
|
||||
|
||||
var/mob/living/carbon/monkey/O = null
|
||||
if(H.species.primitive)
|
||||
O = new H.species.primitive(src)
|
||||
/datum/dna/gene/monkey/activate(var/mob/living/carbon/C)
|
||||
var/mob/living/carbon/human/H
|
||||
if(ishuman(C))
|
||||
H = C
|
||||
else
|
||||
return
|
||||
if(!islesserform(H))
|
||||
H = H.monkeyize(1)
|
||||
H.name = H.species.get_random_name() // keep the realname
|
||||
|
||||
/datum/dna/gene/monkey/deactivate(var/mob/living/carbon/C)
|
||||
var/mob/living/carbon/human/H
|
||||
if(ishuman(C))
|
||||
H = C
|
||||
else
|
||||
H.gib() //Trying to change the species of a creature with no primitive var set is messy.
|
||||
return
|
||||
|
||||
if(M)
|
||||
if (M.dna)
|
||||
O.dna = M.dna.Clone()
|
||||
M.dna = null
|
||||
if(islesserform(H))
|
||||
H = H.humanize(1) // woo transform procs!
|
||||
|
||||
if (M.suiciding)
|
||||
O.suiciding = M.suiciding
|
||||
M.suiciding = null
|
||||
|
||||
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
O.viruses += D
|
||||
D.affected_mob = O
|
||||
M.viruses -= D
|
||||
|
||||
|
||||
for(var/obj/T in (M.contents-implants))
|
||||
qdel(T)
|
||||
|
||||
O.loc = M.loc
|
||||
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(O) //transfer our mind to the cute little monkey
|
||||
|
||||
if (connected) //inside dna thing
|
||||
var/obj/machinery/dna_scannernew/C = connected
|
||||
O.loc = C
|
||||
C.occupant = O
|
||||
connected = null
|
||||
O.real_name = text("monkey ([])",copytext(md5(M.real_name), 2, 6))
|
||||
O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss())
|
||||
O.adjustToxLoss(M.getToxLoss() + 20)
|
||||
O.adjustOxyLoss(M.getOxyLoss())
|
||||
O.stat = M.stat
|
||||
O.a_intent = I_HURT
|
||||
for (var/obj/item/weapon/implant/I in implants)
|
||||
I.loc = O
|
||||
I.implanted = O
|
||||
// O.update_icon = 1 //queue a full icon update at next life() call
|
||||
qdel(M)
|
||||
return
|
||||
|
||||
/datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags)
|
||||
if(!istype(M,/mob/living/carbon/monkey))
|
||||
//testing("Cannot humanize [M], type is [M.type].")
|
||||
return
|
||||
var/mob/living/carbon/monkey/Mo = M
|
||||
Mo.transforming = 1
|
||||
var/list/implants = list() //Still preserving implants
|
||||
for(var/obj/item/weapon/implant/W in Mo)
|
||||
implants += W
|
||||
W.loc = null
|
||||
if(!connected)
|
||||
for(var/obj/item/W in (Mo.contents-implants))
|
||||
Mo.drop_from_inventory(W)
|
||||
M.transforming = 1
|
||||
M.canmove = 0
|
||||
M.icon = null
|
||||
M.invisibility = 101
|
||||
var/atom/movable/overlay/animation = new( M.loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = src
|
||||
flick("monkey2h", animation)
|
||||
sleep(48)
|
||||
qdel(animation)
|
||||
|
||||
var/mob/living/carbon/human/O
|
||||
if(Mo.greaterform)
|
||||
O = new(src, Mo.greaterform)
|
||||
else
|
||||
O = new(src)
|
||||
|
||||
if (M.dna.GetUIState(DNA_UI_GENDER))
|
||||
O.gender = FEMALE
|
||||
else
|
||||
O.gender = MALE
|
||||
|
||||
if (M)
|
||||
if (M.dna)
|
||||
O.dna = M.dna.Clone()
|
||||
M.dna = null
|
||||
|
||||
if (M.suiciding)
|
||||
O.suiciding = M.suiciding
|
||||
M.suiciding = null
|
||||
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
O.viruses += D
|
||||
D.affected_mob = O
|
||||
M.viruses -= D
|
||||
|
||||
//for(var/obj/T in M)
|
||||
// qdel(T)
|
||||
|
||||
O.loc = M.loc
|
||||
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(O) //transfer our mind to the human
|
||||
|
||||
if (connected) //inside dna thing
|
||||
var/obj/machinery/dna_scannernew/C = connected
|
||||
O.loc = C
|
||||
C.occupant = O
|
||||
connected = null
|
||||
|
||||
var/i
|
||||
while (!i)
|
||||
var/randomname
|
||||
if (O.gender == MALE)
|
||||
randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names)))
|
||||
else
|
||||
randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names)))
|
||||
if (findname(randomname))
|
||||
continue
|
||||
else
|
||||
O.real_name = randomname
|
||||
O.dna.real_name = randomname
|
||||
i++
|
||||
O.UpdateAppearance()
|
||||
O.take_overall_damage(M.getBruteLoss(), M.getFireLoss())
|
||||
O.adjustToxLoss(M.getToxLoss())
|
||||
O.adjustOxyLoss(M.getOxyLoss())
|
||||
O.stat = M.stat
|
||||
for (var/obj/item/weapon/implant/I in implants)
|
||||
I.loc = O
|
||||
I.implanted = O
|
||||
// O.update_icon = 1 //queue a full icon update at next life() call
|
||||
qdel(M)
|
||||
return
|
||||
if(!H.dna.real_name)
|
||||
var/randomname = H.species.get_random_name()
|
||||
H.real_name = randomname
|
||||
H.dna.real_name = randomname
|
||||
@@ -92,32 +92,89 @@
|
||||
if(!ability_prechecks(user, price))
|
||||
return
|
||||
|
||||
var/title = input("Select message title: ")
|
||||
var/text = input("Select message text: ")
|
||||
if(!title || !text || !ability_pay(user, price))
|
||||
user << "Hack Aborted"
|
||||
return
|
||||
var/reporttitle
|
||||
var/reportbody
|
||||
var/reporttype = input(usr, "Choose whether to use a template or custom report.", "Create Command Report") in list("Template", "Custom", "Cancel")
|
||||
switch(reporttype)
|
||||
if("Template")
|
||||
establish_db_connection(dbcon)
|
||||
if (!dbcon.IsConnected())
|
||||
src << "<span class='notice'>Unable to connect to the database.</span>"
|
||||
return
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT title, message FROM ss13_ccia_general_notice_list WHERE deleted_at IS NULL")
|
||||
query.Execute()
|
||||
|
||||
log_ability_use(user, "advanced encryption hack")
|
||||
var/list/template_names = list()
|
||||
var/list/templates = list()
|
||||
|
||||
if(prob(50) && user.hack_can_fail)
|
||||
user << "Hack Failed."
|
||||
if(prob(5))
|
||||
user.hack_fails ++
|
||||
announce_hack_failure(user, "quantum message relay")
|
||||
log_ability_use(user, "elite encryption hack (CRITFAIL - title: [title])")
|
||||
while (query.NextRow())
|
||||
template_names += query.item[1]
|
||||
templates[query.item[1]] = query.item[2]
|
||||
|
||||
// Catch empty list
|
||||
if (!templates.len)
|
||||
src << "<span class='notice'>There are no templates in the database.</span>"
|
||||
return
|
||||
|
||||
reporttitle = input(usr, "Please select a command report template.", "Create Command Report") in template_names
|
||||
reportbody = templates[reporttitle]
|
||||
|
||||
if("Custom")
|
||||
reporttitle = sanitizeSafe(input(usr, "Pick a title for the report.", "Title") as text|null)
|
||||
if(!reporttitle)
|
||||
reporttitle = "NanoTrasen Update"
|
||||
reportbody = sanitize(input(usr, "Please enter anything you want. Anything. Serious.", "Body", "") as message|null, extra = 0)
|
||||
if(!reportbody)
|
||||
return
|
||||
else
|
||||
return
|
||||
log_ability_use(user, "elite encryption hack (FAIL - title: [title])")
|
||||
return
|
||||
log_ability_use(user, "elite encryption hack (SUCCESS - title: [title])")
|
||||
command_announcement.Announce(text, title)
|
||||
for (var/obj/machinery/computer/communications/C in machines)
|
||||
if(! (C.stat & (BROKEN|NOPOWER) ) )
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
|
||||
P.name = "[command_name()] Update"
|
||||
P.info = replacetext(text, "\n", "<br/>")
|
||||
P.update_space(P.info)
|
||||
P.update_icon()
|
||||
|
||||
if (reporttype == "Template")
|
||||
sanitizeSafe(alert(usr, "Would you like it to appear as if CCIAMS made the report?",,"Yes","No"))
|
||||
if ("Yes")
|
||||
reportbody += "\n\n- CCIAMS, [commstation_name()]"
|
||||
else
|
||||
|
||||
switch(alert("Should this be announced to the general population?",,"Yes","No"))
|
||||
if("Yes")
|
||||
if(!reporttitle || !reportbody || !ability_pay(user, price))
|
||||
user << "Hack Aborted due to no title, no body message, or you do not have enough CPU for this action."
|
||||
return
|
||||
|
||||
log_ability_use(user, "advanced encryption hack")
|
||||
|
||||
if(prob(50) && user.hack_can_fail)
|
||||
user << "Hack Failed."
|
||||
if(prob(5))
|
||||
user.hack_fails ++
|
||||
announce_hack_failure(user, "quantum message relay")
|
||||
log_ability_use(user, "advanced encryption hack (CRITFAIL - title: [reporttitle])")
|
||||
return
|
||||
log_ability_use(user, "advanced encryption hack (FAIL - title: [reporttitle])")
|
||||
return
|
||||
log_ability_use(user, "advanced encryption hack (SUCCESS - title: [reporttitle])")
|
||||
command_announcement.Announce("[reportbody]", reporttitle, new_sound = 'sound/AI/commandreport.ogg', msg_sanitized = 1);
|
||||
|
||||
if("No")
|
||||
if(!reporttitle || !reportbody || !ability_pay(user, price))
|
||||
user << "Hack Aborted due to no title, no body message, or you do not have enough CPU for this action."
|
||||
return
|
||||
|
||||
log_ability_use(user, "advanced encryption hack")
|
||||
|
||||
if(prob(50) && user.hack_can_fail)
|
||||
user << "Hack Failed."
|
||||
if(prob(5))
|
||||
user.hack_fails ++
|
||||
announce_hack_failure(user, "quantum message relay")
|
||||
log_ability_use(user, "advanced encryption hack (CRITFAIL - title: [reporttitle])")
|
||||
return
|
||||
log_ability_use(user, "advanced encryption hack (FAIL - title: [reporttitle])")
|
||||
return
|
||||
log_ability_use(user, "advanced encryption hack (SUCCESS - title: [reporttitle])")
|
||||
world << "\red New [company_name] Update available at all communication consoles."
|
||||
world << sound('sound/AI/commandreport.ogg')
|
||||
post_comm_message(reporttitle, reportbody)
|
||||
|
||||
/datum/game_mode/malfunction/verb/elite_encryption_hack()
|
||||
set category = "Software"
|
||||
@@ -219,4 +276,4 @@
|
||||
user.verbs += new/datum/game_mode/malfunction/verb/ai_destroy_station()
|
||||
|
||||
|
||||
// END ABILITY VERBS
|
||||
// END ABILITY VERBS
|
||||
|
||||
@@ -680,7 +680,7 @@
|
||||
T.mind.vampire.master = src
|
||||
vampire.thralls += T
|
||||
T << "<span class='notice'>You have been forced into a blood bond by [T.mind.vampire.master], and are thus their thrall. While a thrall may feel a myriad of emotions towards their master, ranging from fear, to hate, to love; the supernatural bond between them still forces the thrall to obey their master, and to listen to the master's commands.<br><br>You must obey your master's orders, you must protect them, you cannot harm them.</span>"
|
||||
|
||||
src << "<span class='notice'>You have completed the thralling process. They are now your slave and will obey your commands.</span>"
|
||||
admin_attack_log(src, T, "enthralled [key_name(T)]", "was enthralled by [key_name(src)]", "successfully enthralled")
|
||||
|
||||
vampire.use_blood(150)
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
economic_modifier = 5
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks)
|
||||
minimal_player_age = 5
|
||||
minimal_player_age = 7
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
@@ -106,7 +106,7 @@
|
||||
economic_modifier = 5
|
||||
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
|
||||
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
|
||||
minimal_player_age = 3
|
||||
minimal_player_age = 7
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
|
||||
@@ -153,7 +153,7 @@
|
||||
economic_modifier = 4
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks)
|
||||
minimal_player_age = 3
|
||||
minimal_player_age = 7
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H) return 0
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
target << "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered."
|
||||
target.ResetSecurityCodes()
|
||||
else
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] detonated [target.name]!</span>")
|
||||
message_admins("[key_name_admin(usr)] detonated [target.name]!")
|
||||
log_game("[key_name(usr)] detonated [target.name]!",ckey=key_name(usr))
|
||||
target << "<span class='danger'>Self-destruct command received.</span>"
|
||||
spawn(10)
|
||||
@@ -92,15 +92,10 @@
|
||||
if(!target || !istype(target))
|
||||
return
|
||||
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] [target.canmove ? "locked down" : "released"] [target.name]!</span>")
|
||||
log_game("[key_name(usr)] [target.canmove ? "locked down" : "released"] [target.name]!",ckey=key_name(usr))
|
||||
target.canmove = !target.canmove
|
||||
if (target.lockcharge)
|
||||
target.lockcharge = !target.lockcharge
|
||||
target << "Your lockdown has been lifted!"
|
||||
else
|
||||
target.lockcharge = !target.lockcharge
|
||||
target << "You have been locked down!"
|
||||
target.SetLockdown(!target.lockcharge) // Toggle.
|
||||
message_admins("[key_name_admin(usr)] [target.lockcharge ? "locked down" : "released"] [target.name]!")
|
||||
log_game("[key_name(usr)] [target.lockcharge ? "locked down" : "released"] [target.name]!",ckey=key_name(usr))
|
||||
target << (target.lockcharge ? "You have been locked down!" : "Your lockdown has been lifted!")
|
||||
|
||||
// Remotely hacks the cyborg. Only antag AIs can do this and only to linked cyborgs.
|
||||
else if (href_list["hack"])
|
||||
@@ -124,7 +119,7 @@
|
||||
if(!target || !istype(target))
|
||||
return
|
||||
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] emagged [target.name] using robotic console!</span>")
|
||||
message_admins("[key_name_admin(usr)] emagged [target.name] using robotic console!")
|
||||
log_game("[key_name(usr)] emagged [target.name] using robotic console!",ckey=key_name(usr))
|
||||
target.emagged = 1
|
||||
target << "<span class='notice'>Failsafe protocols overriden. New tools available.</span>"
|
||||
@@ -147,7 +142,7 @@
|
||||
user << "Self-destruct aborted - safety active"
|
||||
return
|
||||
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] detonated all cyborgs!</span>")
|
||||
message_admins("[key_name_admin(usr)] detonated all cyborgs!")
|
||||
log_game("[key_name(usr)] detonated all cyborgs!",ckey=key_name(usr))
|
||||
|
||||
for(var/mob/living/silicon/robot/R in mob_list)
|
||||
@@ -179,7 +174,7 @@
|
||||
robot["name"] = R.name
|
||||
if(R.stat)
|
||||
robot["status"] = "Not Responding"
|
||||
else if (!R.canmove)
|
||||
else if (R.lockcharge) // changed this from !R.canmove to R.lockcharge because of issues with lockdown and chairs
|
||||
robot["status"] = "Lockdown"
|
||||
else
|
||||
robot["status"] = "Operational"
|
||||
|
||||
@@ -715,7 +715,8 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/chartreusegreen = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/chartreuseyellow =5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cremewhite = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/brandy = 4,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/guinnes = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/drambuie = 4,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cremeyvette = 4)
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/cremeyvette = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/small/xuizijuice = 8,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/sarezhiwine = 2, /obj/item/weapon/reagent_containers/food/drinks/bottle/victorygin = 2)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/tea = 10)
|
||||
vend_delay = 15
|
||||
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
|
||||
|
||||
@@ -329,6 +329,14 @@
|
||||
C.holder.original_mob = null
|
||||
suicide()
|
||||
|
||||
/mob/living/carbon/human/bst/verb/tgm()
|
||||
set name = "Toggle Godmode"
|
||||
set desc = "Enable or disable god mode. For testing things that require you to be vulnerable."
|
||||
set category = "BST"
|
||||
|
||||
status_flags ^= GODMODE
|
||||
src << span("notice", "God mode is now [status_flags & GODMODE ? "enabled" : "disabled"]")
|
||||
|
||||
//Equipment. All should have canremove set to 0
|
||||
//All items with a /bst need the attack_hand() proc overrided to stop people getting overpowered items.
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@ var/list/global/random_stock_common = list(
|
||||
"cosmetic" = 2.2,
|
||||
"suitcooler" = 1.2,
|
||||
"officechair" = 1.2,
|
||||
"booze" = 3.5,
|
||||
"booze" = 3.7,
|
||||
"plant" = 3.5,
|
||||
"bag" = 2,
|
||||
"extinguish" = 2.2,
|
||||
@@ -795,7 +795,7 @@ var/list/global/random_stock_large = list(
|
||||
break
|
||||
new /obj/structure/bed/chair/office/dark(T)
|
||||
if ("booze")
|
||||
if (prob(8))//Spare keg of beer
|
||||
if (prob(8))//Spare keg of beer or xuizi juice
|
||||
var/turf/T = get_turf(L)
|
||||
if (!turf_clear(T))
|
||||
for (var/turf/U in range(T,1))
|
||||
@@ -803,7 +803,10 @@ var/list/global/random_stock_large = list(
|
||||
T = U
|
||||
break
|
||||
|
||||
new /obj/structure/reagent_dispensers/beerkeg(T)
|
||||
if (prob(80))
|
||||
new /obj/structure/reagent_dispensers/beerkeg(T)
|
||||
else
|
||||
new /obj/structure/reagent_dispensers/xuizikeg(T)
|
||||
else
|
||||
var/list/drinks = typesof(/obj/item/weapon/reagent_containers/food/drinks/bottle)
|
||||
drinks -= /obj/item/weapon/reagent_containers/food/drinks/bottle
|
||||
@@ -1657,7 +1660,7 @@ var/list/global/random_stock_large = list(
|
||||
|
||||
if ("bike")
|
||||
new /obj/vehicle/bike(L)
|
||||
|
||||
|
||||
if ("sol")
|
||||
if (prob(50))
|
||||
new /obj/structure/closet/sol/navy(L)
|
||||
|
||||
@@ -241,8 +241,12 @@
|
||||
|
||||
if(target_mob != H)
|
||||
H << "<span class='danger'>You inject [target_mob] with [chems_to_use] unit\s of [charge.display_name].</span>"
|
||||
target_mob << "<span class='danger'>You feel a rushing in your veins as [chems_to_use] unit\s of [charge.display_name] [chems_to_use == 1 ? "is" : "are"] injected.</span>"
|
||||
target_mob.reagents.add_reagent(charge.display_name, chems_to_use)
|
||||
|
||||
if(target_mob.is_physically_disabled())
|
||||
target_mob.reagents.add_reagent(charge.display_name, chems_to_use)
|
||||
else
|
||||
target_mob << "<span class='danger'>You feel a rushing in your veins as [chems_to_use] unit\s of [charge.display_name] [chems_to_use == 1 ? "is" : "are"] injected.</span>"
|
||||
target_mob.reagents.add_reagent(charge.display_name, chems_to_use)
|
||||
|
||||
charge.charges -= chems_to_use
|
||||
if(charge.charges < 0) charge.charges = 0
|
||||
|
||||
@@ -21,16 +21,9 @@ datum/event/viral_infection/setup()
|
||||
viruses += D
|
||||
|
||||
datum/event/viral_infection/announce()
|
||||
var/level
|
||||
if (severity == EVENT_LEVEL_MUNDANE)
|
||||
return
|
||||
else if (severity == EVENT_LEVEL_MODERATE)
|
||||
level = pick("one", "two", "three", "four")
|
||||
else
|
||||
level = "five"
|
||||
|
||||
if (severity == EVENT_LEVEL_MAJOR || prob(60))
|
||||
command_announcement.Announce("Confirmed outbreak of level [level] biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
|
||||
command_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
|
||||
|
||||
datum/event/viral_infection/start()
|
||||
if(!viruses.len) return
|
||||
|
||||
@@ -569,6 +569,7 @@ I said no!
|
||||
items = list()
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/slimesoup
|
||||
|
||||
|
||||
/datum/recipe/boiledslimeextract
|
||||
reagents = list("water" = 5)
|
||||
items = list(
|
||||
|
||||
@@ -1128,7 +1128,7 @@
|
||||
else
|
||||
usr << "<span class='warning'>You failed to check the pulse. Try again.</span>"
|
||||
|
||||
/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour)
|
||||
/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour, var/kpg=0)
|
||||
|
||||
if(!dna)
|
||||
if(!new_species)
|
||||
@@ -1180,7 +1180,7 @@
|
||||
|
||||
species.create_organs(src)
|
||||
|
||||
species.handle_post_spawn(src)
|
||||
species.handle_post_spawn(src,kpg) // should be zero by default
|
||||
|
||||
maxHealth = species.total_health
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
#define BASE_DIZZY 100
|
||||
|
||||
#define ALCOHOL_FILTRATION_RATE 0.02//The base rate at which intoxication decreases per proc. this is actually multiplied by 3 most of the time if the liver is healthy
|
||||
#define ALCOHOL_FILTRATION_RATE 0.015//The base rate at which intoxication decreases per proc. this is actually multiplied by 3 most of the time if the liver is healthy
|
||||
#define BASE_VOMIT_CHANCE 2
|
||||
#define VOMIT_CHANCE_SCALE 0.2//An extra 1% for every 5 units over the vomiting threshold
|
||||
|
||||
@@ -26,6 +26,17 @@ var/mob/living/carbon/human/alcohol_clumsy = 0
|
||||
intoxication = 0
|
||||
return
|
||||
|
||||
//Godmode messes some things up, so no more BSTs getting drunk unless they toggle it off
|
||||
if (status_flags & GODMODE)
|
||||
intoxication = 0 //Zero out intoxication but don't return, let the rest of this function run to remove any residual effects
|
||||
slurring = 0
|
||||
confused = 0
|
||||
eye_blurry = 0
|
||||
drowsyness = 0
|
||||
paralysis = 0
|
||||
sleeping = 0
|
||||
//Many of these parameters normally tick down in life code, but some parts of that code don't run in godmode, so this prevents a BST being stuck with blurred vision
|
||||
|
||||
if(intoxication > AE_DIZZY*SR) // Early warning
|
||||
if (dizziness == 0)
|
||||
src << "<span class='notice'>The room starts spinning!</span>"
|
||||
|
||||
@@ -182,6 +182,8 @@
|
||||
if(!(sdisabilities & BLIND))
|
||||
if(equipment_tint_total >= TINT_BLIND) // Covered eyes, heal faster
|
||||
eye_blurry = max(eye_blurry-2, 0)
|
||||
else
|
||||
eye_blurry = max(eye_blurry-1, 0)
|
||||
|
||||
if (disabilities & EPILEPSY)
|
||||
if ((prob(1) && paralysis < 1))
|
||||
@@ -916,9 +918,6 @@
|
||||
|
||||
if (intoxication)
|
||||
handle_intoxication()
|
||||
else if (alcohol_clumsy)//This var is defined in intoxication.dm, its set true when alcohol has caused clumsiness
|
||||
mutations.Remove(CLUMSY)
|
||||
alcohol_clumsy = 0
|
||||
|
||||
if(status_flags & GODMODE) return 0 //godmode
|
||||
|
||||
|
||||
@@ -317,13 +317,18 @@
|
||||
H.verbs |= verb_path
|
||||
return
|
||||
|
||||
/datum/species/proc/handle_post_spawn(var/mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment.
|
||||
/datum/species/proc/handle_post_spawn(var/mob/living/carbon/human/H,var/kpg = 0) //Handles anything not already covered by basic species assignment. Keepgene value should only be used by genetics.
|
||||
add_inherent_verbs(H)
|
||||
H.mob_bump_flag = bump_flag
|
||||
H.mob_swap_flags = swap_flags
|
||||
H.mob_push_flags = push_flags
|
||||
H.pass_flags = pass_flags
|
||||
H.mob_size = mob_size
|
||||
if(!kpg)
|
||||
if(islesserform(H))
|
||||
H.dna.SetSEState(MONKEYBLOCK,1)
|
||||
else
|
||||
H.dna.SetSEState(MONKEYBLOCK,0)
|
||||
|
||||
/datum/species/proc/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0) //Handles any species-specific death events (such as dionaea nymph spawns).
|
||||
return
|
||||
|
||||
@@ -60,13 +60,24 @@
|
||||
icobase = 'icons/mob/human_races/monkeys/r_farwa.dmi'
|
||||
deform = 'icons/mob/human_races/monkeys/r_farwa.dmi'
|
||||
|
||||
greater_form = "Tajaran"
|
||||
greater_form = "Tajara"
|
||||
default_language = "Farwa"
|
||||
flesh_color = "#AFA59E"
|
||||
base_color = "#333333"
|
||||
tail = "farwatail"
|
||||
holder_type = /obj/item/weapon/holder/monkey/farwa
|
||||
|
||||
/datum/species/monkey/tajaran/get_random_name()
|
||||
return "farwa ([rand(100,999)])" // HACK HACK HACK, oh lords of coding please forgive me!
|
||||
|
||||
/datum/species/monkey/tajaran/m_sai
|
||||
name = "M'sai Farwa"
|
||||
greater_form = "M'sai Tajara"
|
||||
|
||||
/datum/species/monkey/tajaran/zhan_khazan
|
||||
name = "Zhan-Khazan Farwa"
|
||||
greater_form = "Zhan-Khazan Tajara"
|
||||
|
||||
/datum/species/monkey/skrell
|
||||
name = "Neaera"
|
||||
short_name = "nea"
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
heat_level_2 = 360 //RaceDefault 380 Default 400
|
||||
heat_level_3 = 700 //RaceDefault 800 Default 1000
|
||||
|
||||
primitive_form = "Zhan-Khazan Farwa"
|
||||
|
||||
num_alternate_languages = 1 // Only one Extra Language
|
||||
|
||||
/datum/species/tajaran/m_sai
|
||||
@@ -48,4 +50,6 @@
|
||||
heat_level_2 = 390 //RaceDefault 380 Default 400
|
||||
heat_level_3 = 900 //RaceDefault 800 Default 1000
|
||||
|
||||
primitive_form = "M'sai Farwa"
|
||||
|
||||
secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_SIGN_TAJARA)
|
||||
|
||||
@@ -954,6 +954,12 @@
|
||||
gib()
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/update_canmove() // to fix lockdown issues w/ chairs
|
||||
. = ..()
|
||||
if (lockcharge)
|
||||
canmove = 0
|
||||
. = 0
|
||||
|
||||
/mob/living/silicon/robot/proc/UnlinkSelf()
|
||||
disconnect_from_ai()
|
||||
lawupdate = 0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/mob/living/carbon/human/proc/monkeyize()
|
||||
/mob/living/carbon/human/proc/monkeyize(var/kpg=0)
|
||||
if (transforming)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
@@ -11,8 +11,6 @@
|
||||
stunned = 1
|
||||
icon = null
|
||||
invisibility = 101
|
||||
for(var/t in organs)
|
||||
qdel(t)
|
||||
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
@@ -33,14 +31,55 @@
|
||||
for(var/obj/item/W in src)
|
||||
drop_from_inventory(W)
|
||||
set_species(species.primitive_form)
|
||||
dna.SetSEState(MONKEYBLOCK,1)
|
||||
dna.SetSEValueRange(MONKEYBLOCK,0xDAC, 0xFFF)
|
||||
if(!kpg)
|
||||
dna.SetSEState(MONKEYBLOCK,1)
|
||||
|
||||
src << "<B>You are now [species.name]. </B>"
|
||||
qdel(animation)
|
||||
|
||||
return src
|
||||
|
||||
/mob/living/carbon/human/proc/humanize(var/kpg=0) // we needed this a lot to be honest, why wasn't it made before?
|
||||
if (transforming)
|
||||
return
|
||||
for(var/obj/item/W in src)
|
||||
drop_from_inventory(W)
|
||||
regenerate_icons()
|
||||
transforming = 1
|
||||
canmove = 0
|
||||
stunned = 1
|
||||
icon = null
|
||||
invisibility = 101
|
||||
var/atom/movable/overlay/animation = new /atom/movable/overlay( loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = src
|
||||
flick("monkey2h", animation)
|
||||
sleep(48)
|
||||
|
||||
transforming = 0
|
||||
stunned = 0
|
||||
update_canmove()
|
||||
invisibility = initial(invisibility)
|
||||
|
||||
if(!species.greater_form) //If the creature in question has no greater form set, this is going to be messy.
|
||||
gib()
|
||||
return
|
||||
|
||||
for(var/obj/item/W in src)
|
||||
drop_from_inventory(W)
|
||||
set_species(species.greater_form)
|
||||
if(!kpg)
|
||||
dna.SetSEState(MONKEYBLOCK,0)
|
||||
|
||||
src << "<B>You are now [species.name]. </B>"
|
||||
qdel(animation)
|
||||
|
||||
return src
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/new_player/AIize()
|
||||
spawning = 1
|
||||
return ..()
|
||||
|
||||
@@ -141,10 +141,13 @@
|
||||
if(is_broken())
|
||||
filter_effect -= 2
|
||||
|
||||
if (owner.intoxication)
|
||||
if (owner.intoxication > 0)
|
||||
//ALCOHOL_FILTRATION_RATE is defined in intoxication.dm
|
||||
owner.intoxication -= ALCOHOL_FILTRATION_RATE*filter_effect*PROCESS_ACCURACY//A weakened liver filters out alcohol more slowly
|
||||
owner.intoxication = max(owner.intoxication, 0)
|
||||
if (!owner.intoxication)
|
||||
//If intoxication has just been reduced to zero, this will handle removing any effects
|
||||
owner.handle_intoxication()
|
||||
|
||||
// Do some reagent processing.
|
||||
if(owner.chem_effects[CE_ALCOHOL_TOXIC])
|
||||
|
||||
@@ -117,9 +117,9 @@
|
||||
|
||||
if(alien == IS_DIONA)
|
||||
return //Diona can gain nutrients, but don't get drunk or suffer other effects
|
||||
|
||||
|
||||
if(isunathi(M))//unathi are poisoned by alcohol as well
|
||||
M.adjustToxLoss(2.5 * removed * (strength / 100))
|
||||
M.adjustToxLoss(1.5 * removed * (strength / 100))
|
||||
|
||||
var/quantity = (strength / 100) * removed
|
||||
M.intoxication += quantity
|
||||
@@ -158,6 +158,50 @@
|
||||
usr << "<span class='notice'>The solution dissolves the ink on the book.</span>"
|
||||
return
|
||||
|
||||
|
||||
//Butanol is a common alcohol that is fairly ineffective for humans and most other species, but highly intoxicating to unathi
|
||||
//Butanol duplicates a lot of code from ethanol. This is by design, it does not inherit.
|
||||
//Possible future todo: Add "alcohol" as a parent class to both ethanol and butanol
|
||||
/datum/reagent/butanol
|
||||
name = "Butanol" //Parent class for all alcoholic reagents.
|
||||
id = "butanol"
|
||||
description = "A fairly harmless alcohol that has intoxicating effects on certain species."
|
||||
reagent_state = LIQUID
|
||||
color = "#404030"
|
||||
ingest_met = 0.17 //Extremely slow metabolic rate means the liver will generally purge it faster than it can intoxicate you
|
||||
var/nutriment_factor = 0.5
|
||||
var/strength = 100 // This is the ABV of the drink
|
||||
|
||||
glass_icon_state = "glass_clear"
|
||||
glass_name = "glass of butanol"
|
||||
glass_desc = "A fairly harmless alcohol that has intoxicating effects on certain species."
|
||||
|
||||
/datum/reagent/butanol/touch_mob(var/mob/living/L, var/amount)
|
||||
if(istype(L) && strength > 40)
|
||||
L.adjust_fire_stacks((amount / 7) * (strength / 100)) //Butanol is a bit less flammable than ethanol
|
||||
|
||||
/datum/reagent/butanol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
M.adjustToxLoss(removed)
|
||||
return
|
||||
|
||||
/datum/reagent/butanol/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(isvaurca(M))//Vaurca are damaged instead of getting nutrients, but they can still get drunk
|
||||
M.adjustToxLoss(removed * (strength / 100))
|
||||
else
|
||||
M.nutrition += nutriment_factor * removed
|
||||
|
||||
if(alien == IS_DIONA)
|
||||
return //Diona can gain nutrients, but don't get drunk or suffer other effects
|
||||
|
||||
if(isunathi(M))
|
||||
ingest_met = initial(ingest_met)*3 //Unathi digest butanol much faster
|
||||
|
||||
var/quantity = (strength / 100) * removed
|
||||
M.intoxication += quantity
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/reagent/hydrazine
|
||||
name = "Hydrazine"
|
||||
id = "hydrazine"
|
||||
|
||||
@@ -787,6 +787,7 @@
|
||||
glass_desc = "No relation to a certain rap artist/ actor."
|
||||
glass_center_of_mass = list("x"=15, "y"=10)
|
||||
|
||||
|
||||
/datum/reagent/drink/coffee
|
||||
name = "Coffee"
|
||||
id = "coffee"
|
||||
@@ -1262,6 +1263,18 @@
|
||||
glass_desc = "A crystal clear glass of Griffeater gin."
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
/datum/reagent/ethanol/victorygin
|
||||
name = "Victory Gin"
|
||||
id = "victorygin"
|
||||
description = "An oily Adhomai-based gin."
|
||||
color = "#664300"
|
||||
strength = 32
|
||||
|
||||
glass_icon_state = "ginvodkaglass"
|
||||
glass_name = "glass of gin"
|
||||
glass_desc = "It has an oily smell and doesn't taste like typical gin."
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
//Base type for alchoholic drinks containing coffee
|
||||
/datum/reagent/ethanol/coffee
|
||||
overdose = 45
|
||||
@@ -2529,3 +2542,31 @@
|
||||
glass_icon_state = "tallblackrussian"
|
||||
glass_name = "glass of Tall Black Russian"
|
||||
glass_desc = "Just like black russian but taller."
|
||||
|
||||
|
||||
// Butanol-based alcoholic drinks
|
||||
//=====================================
|
||||
//These are mainly for unathi, and have very little (but still some) effect on other species
|
||||
|
||||
/datum/reagent/butanol/xuizijuice
|
||||
name = "Xuizi Juice"
|
||||
id = "xuizijuice"
|
||||
description = "Blended flower buds from a Moghean Xuizi cactus. Has a mild butanol content and is a staple recreational beverage in Unathi culture."
|
||||
color = "#91de47"
|
||||
strength = 5
|
||||
|
||||
glass_icon_state = "xuiziglass"
|
||||
glass_name = "glass of Xuizi Juice"
|
||||
glass_desc = "The clear green liquid smells like vanilla, tastes like water. Unathi swear it has a rich taste and texture."
|
||||
|
||||
/datum/reagent/butanol/sarezhiwine
|
||||
name = "Sarezhi Wine"
|
||||
id = "sarezhiwine"
|
||||
description = "An alcoholic beverage made from lightly fermented Sareszhi berries, considered an upper class delicacy on Moghes. Significant butanol content indicates intoxicating effects on Unathi."
|
||||
color = "#bf8fbc"
|
||||
strength = 20
|
||||
|
||||
glass_icon_state = "sarezhiglass"
|
||||
glass_name = "glass of Sarezhi Wine"
|
||||
glass_desc = "It tastes like flat grape soda. Is this supposed to be alcoholic?"
|
||||
|
||||
|
||||
@@ -1560,6 +1560,8 @@
|
||||
required_reagents = list("ice" = 1, "tea" = 2)
|
||||
result_amount = 3
|
||||
|
||||
|
||||
|
||||
/datum/chemical_reaction/icecoffee
|
||||
name = "Iced Coffee"
|
||||
id = "icecoffee"
|
||||
@@ -1582,6 +1584,14 @@
|
||||
catalysts = list("enzyme" = 5)
|
||||
result_amount = 10
|
||||
|
||||
/datum/chemical_reaction/butanol
|
||||
name = "Butanol"
|
||||
id = "butanol"
|
||||
result = "butanol"
|
||||
required_reagents = list("cornoil" = 10, "sugar" = 10)
|
||||
catalysts = list("enzyme" = 5)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/grenadine
|
||||
name = "Grenadine Syrup"
|
||||
id = "grenadine"
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
mercury spawn_reagent = "mercury"
|
||||
radium spawn_reagent = "radium"
|
||||
ethanol spawn_reagent = "ethanol"
|
||||
butanol spawn_reagent = "butanol"
|
||||
sacid spawn_reagent = "sacid"
|
||||
tungsten spawn_reagent = "tungsten"
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
/obj/item/weapon/reagent_containers/chem_disp_cartridge/radium,
|
||||
/obj/item/weapon/reagent_containers/chem_disp_cartridge/water,
|
||||
/obj/item/weapon/reagent_containers/chem_disp_cartridge/ethanol,
|
||||
/obj/item/weapon/reagent_containers/chem_disp_cartridge/butanol,
|
||||
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sugar,
|
||||
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sacid,
|
||||
/obj/item/weapon/reagent_containers/chem_disp_cartridge/tungsten
|
||||
|
||||
@@ -179,6 +179,15 @@
|
||||
..()
|
||||
reagents.add_reagent("gin", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/victorygin
|
||||
name = "Victory gin"
|
||||
desc = "Pour one out for Al'mari. His gun was on stun, bless his heart."
|
||||
icon_state = "victorygin"
|
||||
center_of_mass = list("x"=16, "y"=4)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("victorygin", 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
|
||||
name = "Uncle Git's Special Reserve"
|
||||
desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter. TUNNEL WHISKEY RULES."
|
||||
@@ -499,3 +508,25 @@
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("sbiten", 100)
|
||||
|
||||
|
||||
// Butanol-based alcoholic drinks
|
||||
//=====================================
|
||||
//These are mainly for unathi, and have very little (but still some) effect on other species
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/xuizijuice
|
||||
name = "Xuizi Juice"
|
||||
desc = "Blended flower buds from the Xuizi cactus. It smells faintly of vanilla. Bottled by the Arizi Guild for over 200 years."
|
||||
icon_state = "xuizibottle"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("xuizijuice", 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/sarezhiwine
|
||||
name = "Sarezhi Wine"
|
||||
desc = "A premium Moghean wine made from Sareszhi berries. Bottled by the Arizi Guild for over 200 years."
|
||||
icon_state = "sarezhibottle"
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("sarezhiwine", 100)
|
||||
@@ -245,6 +245,16 @@
|
||||
..()
|
||||
reagents.add_reagent("beer",capacity)
|
||||
|
||||
/obj/structure/reagent_dispensers/xuizikeg
|
||||
name = "xuizi juice keg"
|
||||
desc = "A keg full of Xuizi juice, blended flower buds from the Moghean Xuizi cactus. The export stamp of the Arizi Guild is imprinted on the side."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "keg_xuizi"
|
||||
amount_per_transfer_from_this = 10
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("xuizijuice",capacity)
|
||||
|
||||
/obj/structure/reagent_dispensers/virusfood
|
||||
name = "Virus Food Dispenser"
|
||||
desc = "A dispenser of virus food."
|
||||
|
||||
Reference in New Issue
Block a user