This commit is contained in:
Aurorablade
2016-12-01 22:38:35 -05:00
417 changed files with 15619 additions and 14822 deletions
-1
View File
@@ -1,6 +1,5 @@
var/global/BSACooldown = 0
var/global/floorIsLava = 0
var/global/nologevent = 0
////////////////////////////////
+17 -20
View File
@@ -1597,11 +1597,11 @@
to_chat(usr, "This can only be used on instances of type /mob/living")
return
if(alert(src.owner, "Are you sure you wish to hit [key_name(M)] with Bluespace Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes")
if(alert(owner, "Are you sure you wish to hit [key_name(M)] with Bluespace Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes")
return
if(BSACooldown)
to_chat(src.owner, "Standby. Reload cycle in progress. Gunnery crews ready in five seconds!")
to_chat(owner, "Standby. Reload cycle in progress. Gunnery crews ready in five seconds!")
return
BSACooldown = 1
@@ -1609,28 +1609,23 @@
BSACooldown = 0
to_chat(M, "You've been hit by bluespace artillery!")
log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [key_name(src.owner)]")
message_admins("[key_name_admin(M)] has been hit by Bluespace Artillery fired by [key_name_admin(src.owner)]")
var/obj/effect/stop/S
S = new /obj/effect/stop
S.victim = M
S.loc = M.loc
spawn(20)
qdel(S)
log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [key_name(owner)]")
message_admins("[key_name_admin(M)] has been hit by Bluespace Artillery fired by [key_name_admin(owner)]")
var/turf/simulated/floor/T = get_turf(M)
if(istype(T))
if(prob(80)) T.break_tile_to_plating()
else T.break_tile()
if(prob(80))
T.break_tile_to_plating()
else
T.break_tile()
if(M.health == 1)
if(M.health <= 1)
M.gib()
else
M.adjustBruteLoss( min( 99 , (M.health - 1) ) )
M.adjustBruteLoss(min(99,(M.health - 1)))
M.Stun(20)
M.Weaken(20)
M.stuttering = 20
M.Stuttering(20)
else if(href_list["CentcommReply"])
if(!check_rights(R_ADMIN))
@@ -2491,18 +2486,20 @@
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","LO")
message_admins("[key_name_admin(usr)] has broke a lot of lights", 1)
lightsout(1,2)
var/datum/event/electrical_storm/E = new /datum/event/electrical_storm
E.lightsoutAmount = 2
if("blackout")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","BO")
message_admins("[key_name_admin(usr)] broke all lights", 1)
lightsout(0,0)
for(var/obj/machinery/light/L in machines)
L.broken()
if("whiteout")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","WO")
for(var/obj/machinery/light/L in world)
L.fix()
message_admins("[key_name_admin(usr)] fixed all lights", 1)
for(var/obj/machinery/light/L in machines)
L.fix()
if("floorlava")
feedback_inc("admin_secrets_fun_used", 1)
feedback_add_details("admin_secrets_fun_used", "LF")
+1 -1
View File
@@ -24,7 +24,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(!msg)
return
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
if(handle_spam_prevention(msg, MUTE_ADMINHELP, OOC_COOLDOWN))
return
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
+1 -1
View File
@@ -99,7 +99,7 @@
adminhelp(msg) //admin we are replying to has vanished, adminhelp instead
return
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
if(handle_spam_prevention(msg, MUTE_ADMINHELP, OOC_COOLDOWN))
return
//clean the message if it's not sent by a high-rank admin
+7 -7
View File
@@ -92,7 +92,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]")
returnval = call(procname)(arglist(lst)) // Pass the lst as an argument list to the proc
to_chat(usr, "<font color='blue'>[procname] returned: [returnval ? returnval : "null"]</font>")
to_chat(usr, "<font color='blue'>[procname] returned: [!isnull(returnval) ? returnval : "null"]</font>")
feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/callproc_datum(var/A as null|area|mob|obj|turf)
@@ -122,7 +122,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
spawn()
var/returnval = call(A,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
to_chat(usr, "<span class='notice'>[procname] returned: [returnval ? returnval : "null"]</span>")
to_chat(usr, "<span class='notice'>[procname] returned: [!isnull(returnval) ? returnval : "null"]</span>")
feedback_add_details("admin_verb","DPC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -934,11 +934,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
for(var/obj/item/briefcase_item in sec_briefcase)
qdel(briefcase_item)
for(var/i=3, i>0, i--)
sec_briefcase.contents += new /obj/item/weapon/spacecash/c1000
sec_briefcase.contents += new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow
sec_briefcase.contents += new /obj/item/weapon/gun/projectile/revolver/mateba
sec_briefcase.contents += new /obj/item/ammo_box/a357
sec_briefcase.contents += new /obj/item/weapon/grenade/plastic/c4
sec_briefcase.handle_item_insertion(new /obj/item/weapon/spacecash/c1000, 1)
sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow, 1)
sec_briefcase.handle_item_insertion(new /obj/item/weapon/gun/projectile/revolver/mateba, 1)
sec_briefcase.handle_item_insertion(new /obj/item/ammo_box/a357, 1)
sec_briefcase.handle_item_insertion(new /obj/item/weapon/grenade/plastic/c4, 1)
// briefcase must be unlocked by setting the code.
M.equip_to_slot_or_del(sec_briefcase, slot_l_hand)
var/obj/item/weapon/implant/dust/DUST = new /obj/item/weapon/implant/dust(M)
+2 -2
View File
@@ -36,7 +36,7 @@ var/global/list/frozen_mob_list = list()
anchored = 1
frozen = AO
admin_prev_sleeping = sleeping
sleeping += 20000
AdjustSleeping(20000)
if(!(src in frozen_mob_list))
frozen_mob_list += src
@@ -49,7 +49,7 @@ var/global/list/frozen_mob_list = list()
anchored = 0
overlays -= frozen
frozen = null
sleeping = admin_prev_sleeping
SetSleeping(admin_prev_sleeping)
admin_prev_sleeping = null
if(src in frozen_mob_list)
frozen_mob_list -= src
+6 -2
View File
@@ -269,8 +269,12 @@ client/proc/one_click_antag()
return 1
/datum/admins/proc/makeAliens()
alien_infestation(3)
return 1
var/datum/event/alien_infestation/E = new /datum/event/alien_infestation
E.spawncount = 3
// TODO The fact we have to do this rather than just have events start
// when we ask them to, is bad.
E.processing = TRUE
return TRUE
/*
/datum/admins/proc/makeSpaceNinja()
+1 -1
View File
@@ -9,7 +9,7 @@
if(usr.client.prefs.muted & MUTE_PRAY)
to_chat(usr, "\red You cannot pray (muted).")
return
if(src.client.handle_spam_prevention(msg,MUTE_PRAY))
if(client.handle_spam_prevention(msg, MUTE_PRAY, OOC_COOLDOWN))
return
var/image/cross = image('icons/obj/storage.dmi',"bible")
+7 -3
View File
@@ -4,8 +4,9 @@
////////////////
var/datum/admins/holder = null
var/last_message = "" //Contains the last message sent by this client - used to protect against copy-paste spamming.
var/last_message_count = 0 //contins a number of how many times a message identical to last_message was sent.
var/last_message = "" //contains the last message sent by this client - used to protect against copy-paste spamming.
var/last_message_count = 0 //contains a number of how many times a message identical to last_message was sent.
var/last_message_time = 0 //holds the last time (based on world.time) a message was sent
/////////
//OTHER//
@@ -88,4 +89,7 @@
// Their chat window, sort of important.
// See /goon/code/datums/browserOutput.dm
var/datum/chatOutput/chatOutput
var/datum/chatOutput/chatOutput
// Donator stuff.
var/donator_level = DONATOR_LEVEL_NONE
+36 -11
View File
@@ -233,19 +233,25 @@
return 0
return 1
/client/proc/handle_spam_prevention(var/message, var/mute_type)
if(config.automute_on && !holder && src.last_message == message)
src.last_message_count++
if(src.last_message_count >= SPAM_TRIGGER_AUTOMUTE)
to_chat(src, "\red You have exceeded the spam filter limit for identical messages. An auto-mute was applied.")
cmd_admin_mute(src.mob, mute_type, 1)
/client/proc/handle_spam_prevention(var/message, var/mute_type, var/throttle = 0)
if(throttle)
if((last_message_time + throttle > world.time) && !check_rights(R_ADMIN, 0))
var/wait_time = round(((last_message_time + throttle) - world.time) / 10, 1)
to_chat(src, "<span class='danger'>You are sending messages to quickly. Please wait [wait_time] [wait_time == 1 ? "second" : "seconds"] before sending another message.</span>")
return 1
last_message_time = world.time
if(config.automute_on && !check_rights(R_ADMIN, 0) && last_message == message)
last_message_count++
if(last_message_count >= SPAM_TRIGGER_AUTOMUTE)
to_chat(src, "<span class='danger'>You have exceeded the spam filter limit for identical messages. An auto-mute was applied.</span>")
cmd_admin_mute(mob, mute_type, 1)
return 1
if(src.last_message_count >= SPAM_TRIGGER_WARNING)
to_chat(src, "\red You are nearing the spam filter limit for identical messages.")
if(last_message_count >= SPAM_TRIGGER_WARNING)
to_chat(src, "<span class='danger'>You are nearing the spam filter limit for identical messages.</span>")
return 0
else
last_message = message
src.last_message_count = 0
last_message_count = 0
return 0
//This stops files larger than UPLOAD_LIMIT being sent from client to server via input(), client.Import() etc.
@@ -299,6 +305,8 @@
admins += src
holder.owner = src
donator_check()
//preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum)
prefs = preferences_datums[ckey]
if(!prefs)
@@ -372,10 +380,27 @@
return ..()
/client/proc/donator_check()
if(IsGuestKey(key))
return
establish_db_connection()
if(!dbcon.IsConnected())
return
//Donator stuff.
var/DBQuery/query_donor_select = dbcon.NewQuery("SELECT ckey, tier, active FROM `[format_table_name("donators")]` WHERE ckey = '[ckey]'")
query_donor_select.Execute()
while(query_donor_select.NextRow())
if(!text2num(query_donor_select.item[3]))
// Inactive donator.
donator_level = DONATOR_LEVEL_NONE
return
donator_level = text2num(query_donor_select.item[2])
break
/client/proc/log_client_to_db()
if( IsGuestKey(src.key) )
if(IsGuestKey(key))
return
establish_db_connection()
@@ -4,6 +4,7 @@ var/list/gear_datums = list()
/datum/loadout_category
var/category = ""
var/list/gear = list()
var/donor_only = FALSE
/datum/loadout_category/New(cat)
category = cat
@@ -33,6 +34,8 @@ var/list/gear_datums = list()
if(!loadout_categories[use_category])
loadout_categories[use_category] = new /datum/loadout_category(use_category)
var/datum/loadout_category/LC = loadout_categories[use_category]
if(initial(G.donor_only))
LC.donor_only = TRUE
gear_datums[use_name] = new geartype
LC.gear[use_name] = gear_datums[use_name]
@@ -54,6 +57,7 @@ var/list/gear_datums = list()
var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned.
var/subtype_path = /datum/gear //for skipping organizational subtypes (optional)
var/subtype_cost_overlap = TRUE //if subtypes can take points at the same time
var/donor_only = FALSE // if it's only available to donors
/datum/gear/New()
..()
@@ -76,4 +80,4 @@ var/list/gear_datums = list()
var/item = new gd.path(gd.location)
for(var/datum/gear_tweak/gt in gear_tweaks)
gt.tweak_item(item, metadata["[gt]"])
return item
return item
@@ -0,0 +1,90 @@
/datum/gear/donor
donor_only = TRUE
sort_category = "Donor"
subtype_path = /datum/gear/donor
/datum/gear/donor/furgloves
display_name = "Fur Gloves"
path = /obj/item/clothing/gloves/furgloves
/datum/gear/donor/furboots
display_name = "Fur Boots"
path = /obj/item/clothing/shoes/furboots
/datum/gear/donor/noble_boot
display_name = "Noble Boots"
path = /obj/item/clothing/shoes/fluff/noble_boot
/datum/gear/donor/furcape
display_name = "Fur Cape"
path = /obj/item/clothing/suit/furcape
cost = 2
/datum/gear/donor/furcoat
display_name = "Fur Coat"
path = /obj/item/clothing/suit/furcoat
cost = 2
/datum/gear/donor/lord_admiral
display_name = "Lord Admiral Coat"
path = /obj/item/clothing/suit/lordadmiral
/datum/gear/donor/lord_admiral_hat
display_name = "Lord Admiral Hat"
path = /obj/item/clothing/head/lordadmiralhat
/datum/gear/donor/kamina
display_name = "Spiky Orange-tinted Shades"
path = /obj/item/clothing/glasses/fluff/kamina
/datum/gear/donor/green
display_name = "Spiky Green-tinted Shades"
path = /obj/item/clothing/glasses/fluff/kamina/green
/datum/gear/donor/hipster
display_name = "Hipster Glasses"
path = /obj/item/clothing/glasses/regular/hipster
/datum/gear/donor/threedglasses
display_name = "Threed Glasses"
path = /obj/item/clothing/glasses/threedglasses
/datum/gear/donor/blacksombrero
display_name = "Black Sombrero"
path = /obj/item/clothing/head/fluff/blacksombrero
/datum/gear/donor/guardhelm
display_name = "Plastic Guard helm"
path = /obj/item/clothing/head/fluff/guardhelm
/datum/gear/donor/goldtophat
display_name = "Gold-trimmed Top Hat"
path = /obj/item/clothing/head/fluff/goldtophat
/datum/gear/donor/goldtophat/red
display_name = "Red Gold-trimmed Top Hat"
path = /obj/item/clothing/head/fluff/goldtophat/red
/datum/gear/donor/goldtophat/blue
display_name = "Blue Gold-trimmed Top Hat"
path = /obj/item/clothing/head/fluff/goldtophat/blue
/datum/gear/donor/mushhat
display_name = "Mushroom Hat"
path = /obj/item/clothing/head/fluff/mushhat
/datum/gear/donor/furcap
display_name = "Fur Cap"
path = /obj/item/clothing/head/furcap
/datum/gear/donor/mouse
display_name = "Mouse Headband"
path = /obj/item/clothing/head/kitty/mouse
/datum/gear/donor/fawkes
display_name = "Guy Fawkes mask"
path = /obj/item/clothing/mask/fawkes
/datum/gear/donor/noble_clothes
display_name = "Noble Clothes"
path = /obj/item/clothing/under/noble_clothes
+379 -175
View File
@@ -61,7 +61,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
#define MAX_SAVE_SLOTS 20 // Save slots for regular players
#define MAX_SAVE_SLOTS_MEMBER 20 // Save slots for BYOND members
#define MAX_GEAR_COST config.max_loadout_points
#define TAB_CHAR 0
#define TAB_GAME 1
@@ -73,6 +72,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used
// var/savefile_version = 0
var/max_save_slots = MAX_SAVE_SLOTS
var/max_gear_slots = 0
//non-preference stuff
var/warns = 0
@@ -108,18 +108,30 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/r_headacc = 0 //Head accessory colour
var/g_headacc = 0 //Head accessory colour
var/b_headacc = 0 //Head accessory colour
var/m_style = "None" //Marking style
var/r_markings = 0 //Marking colour
var/g_markings = 0 //Marking colour
var/b_markings = 0 //Marking colour
var/list/m_styles = list(
"head" = "None",
"body" = "None",
"tail" = "None"
) //Marking styles.
var/list/m_colours = list(
"head" = "#000000",
"body" = "#000000",
"tail" = "#000000"
) //Marking colours.
var/h_style = "Bald" //Hair type
var/r_hair = 0 //Hair color
var/g_hair = 0 //Hair color
var/b_hair = 0 //Hair color
var/f_style = "Shaved" //Face hair type
var/r_facial = 0 //Face hair color
var/g_facial = 0 //Face hair color
var/b_facial = 0 //Face hair color
var/r_hair_sec = 0 //Secondary hair color
var/g_hair_sec = 0 //Secondary hair color
var/b_hair_sec = 0 //Secondary hair color
var/f_style = "Shaved" //Facial hair type
var/r_facial = 0 //Facial hair color
var/g_facial = 0 //Facial hair color
var/b_facial = 0 //Facial hair color
var/r_facial_sec = 0 //Secondary facial hair color
var/g_facial_sec = 0 //Secondary facial hair color
var/b_facial_sec = 0 //Secondary facial hair color
var/s_tone = 0 //Skin tone
var/r_skin = 0 //Skin color
var/g_skin = 0 //Skin color
@@ -127,6 +139,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/r_eyes = 0 //Eye color
var/g_eyes = 0 //Eye color
var/b_eyes = 0 //Eye color
var/alt_head = "None" //Alt head style.
var/species = "Human"
var/language = "None" //Secondary language
@@ -199,11 +212,17 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
/datum/preferences/New(client/C)
b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
if(istype(C))
if(!IsGuestKey(C.key))
unlock_content = C.IsByondMember()
if(unlock_content)
max_save_slots = MAX_SAVE_SLOTS_MEMBER
max_gear_slots = config.max_loadout_points
if(C.donator_level >= DONATOR_LEVEL_ONE)
max_gear_slots += 5
var/loaded_preferences_successfully = load_preferences(C)
if(loaded_preferences_successfully)
if(load_character(C))
@@ -236,7 +255,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
switch(current_tab)
if(TAB_CHAR) // Character Settings
dat += "<div class='statusDisplay' style='max-width: 128px; position: absolute; left: 150px; top: 150px'><img src=previewicon.png height=64 width=64><img src=previewicon2.png height=64 width=64></div>"
dat += "<div class='statusDisplay' style='max-width: 128px; position: absolute; left: 150px; top: 150px'><img src=previewicon.png class='charPreview'><img src=previewicon2.png class='charPreview'></div>"
dat += "<table width='100%'><tr><td width='405px' height='25px' valign='top'>"
dat += "<b>Name: </b>"
dat += "<a href='?_src_=prefs;preference=name;task=input'><b>[real_name]</b></a>"
@@ -284,18 +303,35 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<a href='?_src_=prefs;preference=ha_style;task=input'>[ha_style]</a> "
dat += "<a href='?_src_=prefs;preference=headaccessory;task=input'>Color</a> [color_square(r_headacc, g_headacc, b_headacc)]<br>"
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have body markings.
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
dat += "<b>Head Markings:</b> "
dat += "<a href='?_src_=prefs;preference=m_style_head;task=input'>[m_styles["head"]]</a>"
dat += "<a href='?_src_=prefs;preference=m_head_colour;task=input'>Color</a> [color_square(color2R(m_colours["head"]), color2G(m_colours["head"]), color2B(m_colours["head"]))]<br>"
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings/tattoos.
dat += "<b>Body Markings:</b> "
dat += "<a href='?_src_=prefs;preference=m_style;task=input'>[m_style]</a>"
dat += "<a href='?_src_=prefs;preference=markings;task=input'>Color</a> [color_square(r_markings, g_markings, b_markings)]<br>"
dat += "<a href='?_src_=prefs;preference=m_style_body;task=input'>[m_styles["body"]]</a>"
dat += "<a href='?_src_=prefs;preference=m_body_colour;task=input'>Color</a> [color_square(color2R(m_colours["body"]), color2G(m_colours["body"]), color2B(m_colours["body"]))]<br>"
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
dat += "<b>Tail Markings:</b> "
dat += "<a href='?_src_=prefs;preference=m_style_tail;task=input'>[m_styles["tail"]]</a>"
dat += "<a href='?_src_=prefs;preference=m_tail_colour;task=input'>Color</a> [color_square(color2R(m_colours["tail"]), color2G(m_colours["tail"]), color2B(m_colours["tail"]))]<br>"
dat += "<b>Hair:</b> "
dat += "<a href='?_src_=prefs;preference=h_style;task=input'>[h_style]</a>"
dat += "<a href='?_src_=prefs;preference=hair;task=input'>Color</a> [color_square(r_hair, g_hair, b_hair)]<br>"
dat += "<a href='?_src_=prefs;preference=hair;task=input'>Color</a> [color_square(r_hair, g_hair, b_hair)]"
var/datum/sprite_accessory/temp_hair_style = hair_styles_list[h_style]
if(temp_hair_style && temp_hair_style.secondary_theme && !temp_hair_style.no_sec_colour)
dat += " <a href='?_src_=prefs;preference=secondary_hair;task=input'>Color #2</a> [color_square(r_hair_sec, g_hair_sec, b_hair_sec)]"
dat += "<br>"
dat += "<b>Facial Hair:</b> "
dat += "<a href='?_src_=prefs;preference=f_style;task=input'>[f_style ? "[f_style]" : "Shaved"]</a>"
dat += "<a href='?_src_=prefs;preference=facial;task=input'>Color</a> [color_square(r_facial, g_facial, b_facial)]<br>"
dat += "<a href='?_src_=prefs;preference=facial;task=input'>Color</a> [color_square(r_facial, g_facial, b_facial)]"
var/datum/sprite_accessory/temp_facial_hair_style = facial_hair_styles_list[f_style]
if(temp_facial_hair_style && temp_facial_hair_style.secondary_theme && !temp_facial_hair_style.no_sec_colour)
dat += " <a href='?_src_=prefs;preference=secondary_facial;task=input'>Color #2</a> [color_square(r_facial_sec, g_facial_sec, b_facial_sec)]"
dat += "<br>"
if(species != "Machine")
dat += "<b>Eyes:</b> "
@@ -318,6 +354,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<a href=\"byond://?src=[user.UID()];preference=records;record=1\">Character Records</a><br>"
dat += "<h2>Limbs</h2>"
if(species in list("Unathi")) //Species with alt heads.
dat += "<b>Alternate Head:</b> "
dat += "<a href='?_src_=prefs;preference=alt_head;task=input'>[alt_head]</a><br>"
dat += "<b>Limbs and Parts:</b> <a href='?_src_=prefs;preference=limbs;task=input'>Adjust</a><br>"
if(species != "Slime People" && species != "Machine")
dat += "<b>Internal Organs:</b> <a href='?_src_=prefs;preference=organs;task=input'>Adjust</a><br>"
@@ -395,6 +434,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "<b>OOC notes:</b> <a href='?_src_=prefs;preference=metadata;task=input'><b>Edit</b></a><br>"
if(unlock_content)
dat += "<b>BYOND Membership Publicity:</b> <a href='?_src_=prefs;preference=publicity'><b>[(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]</b></a><br>"
if(user.client.donator_level >= DONATOR_LEVEL_ONE)
dat += "<b>Donator Publicity:</b> <a href='?_src_=prefs;preference=donor_public'><b>[(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]</b></a><br>"
dat += "<b>Randomized character slot:</b> <a href='?_src_=prefs;preference=randomslot'><b>[randomslot ? "Yes" : "No"]</b></a><br>"
dat += "<b>Ghost ears:</b> <a href='?_src_=prefs;preference=ghost_ears'><b>[(toggles & CHAT_GHOSTEARS) ? "Nearest Creatures" : "All Speech"]</b></a><br>"
@@ -431,14 +472,18 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
total_cost += G.cost
var/fcolor = "#3366CC"
if(total_cost < MAX_GEAR_COST)
if(total_cost < max_gear_slots)
fcolor = "#E67300"
dat += "<table align='center' width='100%'>"
dat += "<tr><td colspan=4><center><b><font color='[fcolor]'>[total_cost]/[MAX_GEAR_COST]</font> loadout points spent.</b> \[<a href='?_src_=prefs;preference=gear;clear_loadout=1'>Clear Loadout</a>\]</center></td></tr>"
dat += "<tr><td colspan=4><center><b><font color='[fcolor]'>[total_cost]/[max_gear_slots]</font> loadout points spent.</b> \[<a href='?_src_=prefs;preference=gear;clear_loadout=1'>Clear Loadout</a>\]</center></td></tr>"
dat += "<tr><td colspan=4><center><b>"
var/firstcat = 1
for(var/category in loadout_categories)
var/datum/loadout_category/LC = loadout_categories[category]
if(LC.donor_only)
if(user.client.donator_level < DONATOR_LEVEL_TWO) // level two donators get the donator loadout, so don't show it to anyone with less than that
continue
if(firstcat)
firstcat = 0
else
@@ -1064,6 +1109,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(TG.display_name in gear)
gear -= TG.display_name
else
if(TG.donor_only)
if(user.client.donator_level < DONATOR_LEVEL_TWO) // donator items are locked to > tier 2
//they normally can't even get this far- but just in case of href exploits, we check them here
return
var/total_cost = 0
var/list/type_blacklist = list()
for(var/gear_name in gear)
@@ -1075,7 +1124,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
type_blacklist += G.subtype_path
total_cost += G.cost
if((total_cost + TG.cost) <= MAX_GEAR_COST)
if((total_cost + TG.cost) <= max_gear_slots)
gear += TG.display_name
else if(href_list["gear"] && href_list["tweak"])
@@ -1097,6 +1146,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
switch(href_list["task"])
if("random")
var/datum/robolimb/robohead
if(species == "Machine")
var/head_model = "[!rlimb_data["head"] ? "Morpheus Cyberkinetics" : rlimb_data["head"]]"
robohead = all_robolimbs[head_model]
switch(href_list["preference"])
if("name")
real_name = random_name(gender,species)
@@ -1107,23 +1160,59 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
r_hair = rand(0,255)
g_hair = rand(0,255)
b_hair = rand(0,255)
if("secondary_hair")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
r_hair_sec = rand(0,255)
g_hair_sec = rand(0,255)
b_hair_sec = rand(0,255)
if("h_style")
h_style = random_hair_style(gender, species)
h_style = random_hair_style(gender, species, robohead)
if("facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
r_facial = rand(0,255)
g_facial = rand(0,255)
b_facial = rand(0,255)
if("secondary_facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox"))
r_facial_sec = rand(0,255)
g_facial_sec = rand(0,255)
b_facial_sec = rand(0,255)
if("f_style")
f_style = random_facial_hair_style(gender, species)
f_style = random_facial_hair_style(gender, species, robohead)
if("headaccessory")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories.
r_headacc = rand(0,255)
g_headacc = rand(0,255)
b_headacc = rand(0,255)
if("ha_style")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories.
ha_style = random_head_accessory(species)
if("m_style_head")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
m_styles["head"] = random_marking_style("head", species, robohead, null, alt_head)
if("m_head_colour")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
m_colours["head"] = rgb(rand(0,255), rand(0,255), rand(0,255))
if("m_style_body")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings.
m_styles["body"] = random_marking_style("body", species)
if("m_body_colour")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings.
m_colours["body"] = rgb(rand(0,255), rand(0,255), rand(0,255))
if("m_style_tail")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
m_styles["tail"] = random_marking_style("tail", species, null, body_accessory)
if("m_tail_colour")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
m_colours["tail"] = rgb(rand(0,255), rand(0,255), rand(0,255))
if("underwear")
underwear = random_underwear(gender)
underwear = random_underwear(gender, species)
ShowChoices(user)
if("undershirt")
undershirt = random_undershirt(gender)
undershirt = random_undershirt(gender, species)
ShowChoices(user)
if("socks")
socks = random_socks(gender)
socks = random_socks(gender, species)
ShowChoices(user)
if("eyes")
r_eyes = rand(0,255)
@@ -1159,7 +1248,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(new_age)
age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN)
if("species")
var/list/new_species = list("Human", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin")
var/prev_species = species
// var/whitelisted = 0
@@ -1177,43 +1265,41 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
species = input("Please select a species", "Character Generation", null) in new_species
if(prev_species != species)
var/datum/robolimb/robohead
if(species == "Machine")
var/head_model = "[!rlimb_data["head"] ? "Morpheus Cyberkinetics" : rlimb_data["head"]]"
robohead = all_robolimbs[head_model]
//grab one of the valid hair styles for the newly chosen species
var/list/valid_hairstyles = list()
for(var/hairstyle in hair_styles_list)
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(!(species in S.species_allowed))
continue
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
if(valid_hairstyles.len)
h_style = pick(valid_hairstyles)
else
//this shouldn't happen
h_style = hair_styles_list["Bald"]
h_style = random_hair_style(gender, species, robohead)
//grab one of the valid facial hair styles for the newly chosen species
var/list/valid_facialhairstyles = list()
for(var/facialhairstyle in facial_hair_styles_list)
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(!(species in S.species_allowed))
continue
f_style = random_facial_hair_style(gender, species, robohead)
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
if(valid_facialhairstyles.len)
f_style = pick(valid_facialhairstyles)
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species that have head accessories.
ha_style = random_head_accessory(species)
else
//this shouldn't happen
f_style = facial_hair_styles_list["Shaved"]
ha_style = "None" // No Vulp ears on Unathi
r_headacc = 0
g_headacc = 0
b_headacc = 0
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
m_styles["head"] = random_marking_style("head", species, robohead, null, alt_head)
else
m_styles["head"] = "None"
m_colours["head"] = "#000000"
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings/tattoos.
m_styles["body"] = random_marking_style("body", species)
else
m_styles["body"] = "None"
m_colours["body"] = "#000000"
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
m_styles["tail"] = random_marking_style("tail", species, null, body_accessory)
else
m_styles["tail"] = "None"
m_colours["tail"] = "#000000"
// Don't wear another species' underwear!
var/datum/sprite_accessory/S = underwear_list[underwear]
@@ -1228,20 +1314,18 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(!S || !(species in S.species_allowed))
socks = random_socks(gender, species)
//reset hair colour and skin colour
r_hair = 0//hex2num(copytext(new_hair, 2, 4))
g_hair = 0//hex2num(copytext(new_hair, 4, 6))
b_hair = 0//hex2num(copytext(new_hair, 6, 8))
s_tone = 0
//reset skin tone and colour
if(species in list("Human", "Drask", "Vox"))
random_skin_tone(species)
else
s_tone = 0
if(!(species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")))
r_skin = 0
g_skin = 0
b_skin = 0
ha_style = "None" // No Vulp ears on Unathi
m_style = "None" // No Unathi markings on Tajara
alt_head = "None" //No alt heads on species that don't have them.
body_accessory = null //no vulptail on humans damnit
@@ -1288,39 +1372,44 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/input = "Choose your character's hair colour:"
var/new_hair = input(user, input, "Character Preference", rgb(r_hair, g_hair, b_hair)) as color|null
if(new_hair)
r_hair = hex2num(copytext(new_hair, 2, 4))
g_hair = hex2num(copytext(new_hair, 4, 6))
b_hair = hex2num(copytext(new_hair, 6, 8))
r_hair = color2R(new_hair)
g_hair = color2G(new_hair)
b_hair = color2B(new_hair)
if("secondary_hair")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
if(hair_style.secondary_theme && !hair_style.no_sec_colour)
var/new_hair = input(user, "Choose your character's secondary hair colour:", "Character Preference", rgb(r_hair_sec, g_hair_sec, b_hair_sec)) as color|null
if(new_hair)
r_hair_sec = color2R(new_hair)
g_hair_sec = color2G(new_hair)
b_hair_sec = color2B(new_hair)
if("h_style")
var/list/valid_hairstyles = list()
for(var/hairstyle in hair_styles_list)
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
if(species == "Machine") //Species that can use prosthetic heads.
var/obj/item/organ/external/head/H = new()
if(S.name == "Bald")
valid_hairstyles[hairstyle] = S
if(!rlimb_data["head"]) //Handle situations where the head is default.
H.model = "Morpheus Cyberkinetics"
else
H.model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[H.model]
if(species in S.species_allowed)
if(robohead.is_monitor && (robohead.company in S.models_allowed)) //If the Machine character has the default Morpheus screen head or another screen head
//and said head is in the hair style's allowed models list...
valid_hairstyles[hairstyle] = S //Allow them to select the hairstyle.
continue
else
if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human hairstyles).
continue
else if(!robohead.is_monitor && ("Human" in S.species_allowed))
valid_hairstyles[hairstyle] = S
continue
else
if(!(species in S.species_allowed))
continue
valid_hairstyles[hairstyle] = S
if(hairstyle == "Bald") //Just in case.
valid_hairstyles += hairstyle
continue
if(species == "Machine") //Species that can use prosthetic heads.
var/head_model
if(!rlimb_data["head"]) //Handle situations where the head is default.
head_model = "Morpheus Cyberkinetics"
else
head_model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[head_model]
if((species in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
valid_hairstyles += hairstyle //Give them their hairstyles if they do.
else
if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
But if the user has a robotic humanoid head and the hairstyle can fit humans, let them use it as a wig. */
valid_hairstyles += hairstyle
else //If the user is not a species who can have robotic heads, use the default handling.
if(species in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list.
valid_hairstyles += hairstyle
var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles
if(new_h_style)
@@ -1331,9 +1420,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/input = "Choose the colour of your your character's head accessory:"
var/new_head_accessory = input(user, input, "Character Preference", rgb(r_headacc, g_headacc, b_headacc)) as color|null
if(new_head_accessory)
r_headacc = hex2num(copytext(new_head_accessory, 2, 4))
g_headacc = hex2num(copytext(new_head_accessory, 4, 6))
b_headacc = hex2num(copytext(new_head_accessory, 6, 8))
r_headacc = color2R(new_head_accessory)
g_headacc = color2G(new_head_accessory)
b_headacc = color2B(new_head_accessory)
if("ha_style")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with head accessories.
@@ -1343,47 +1432,130 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(!(species in H.species_allowed))
continue
valid_head_accessory_styles[head_accessory_style] = head_accessory_styles_list[head_accessory_style]
valid_head_accessory_styles += head_accessory_style
var/new_head_accessory_style = input(user, "Choose the style of your character's head accessory:", "Character Preference") as null|anything in valid_head_accessory_styles
if(new_head_accessory_style)
ha_style = new_head_accessory_style
if("markings")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with markings.
var/input = "Choose the colour of your your character's markings:"
var/new_markings = input(user, input, "Character Preference", rgb(r_markings, g_markings, b_markings)) as color|null
if(new_markings)
r_markings = hex2num(copytext(new_markings, 2, 4))
g_markings = hex2num(copytext(new_markings, 4, 6))
b_markings = hex2num(copytext(new_markings, 6, 8))
if("m_style")
if(species in list("Unathi", "Vulpkanin", "Tajaran", "Machine")) //Species with markings.
var/list/valid_markings = list()
for(var/markingstyle in marking_styles_list)
var/datum/sprite_accessory/M = marking_styles_list[markingstyle]
if(!(species in M.species_allowed))
if("alt_head")
if(organ_data["head"] == "cyborg")
return
if(species in list("Unathi")) //Species with alt heads.
var/list/valid_alt_heads = list()
valid_alt_heads["None"] = alt_heads_list["None"] //The only null entry should be the "None" option
for(var/alternate_head in alt_heads_list)
var/datum/sprite_accessory/alt_heads/head = alt_heads_list[alternate_head]
if(!(species in head.species_allowed))
continue
valid_alt_heads += alternate_head
var/new_alt_head = input(user, "Choose your character's alternate head style:", "Character Preference") as null|anything in valid_alt_heads
if(new_alt_head)
alt_head = new_alt_head
if(m_styles["head"])
var/head_marking = m_styles["head"]
var/datum/sprite_accessory/body_markings/head/head_marking_style = marking_styles_list[head_marking]
if(!head_marking_style.heads_allowed || (!("All" in head_marking_style.heads_allowed) && !(alt_head in head_marking_style.heads_allowed)))
m_styles["head"] = "None"
if("m_style_head")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
var/list/valid_markings = list()
valid_markings["None"] = marking_styles_list["None"]
for(var/markingstyle in marking_styles_list)
var/datum/sprite_accessory/body_markings/head/M = marking_styles_list[markingstyle]
if(!(species in M.species_allowed))
continue
if(M.marking_location != "head")
continue
if(alt_head && alt_head != "None")
if(!("All" in M.heads_allowed) && !(alt_head in M.heads_allowed))
continue
else
if(M.heads_allowed && !("All" in M.heads_allowed))
continue
if(species == "Machine") //Species that can use prosthetic heads.
var/obj/item/organ/external/head/H = new()
var/head_model
if(!rlimb_data["head"]) //Handle situations where the head is default.
H.model = "Morpheus Cyberkinetics"
head_model = "Morpheus Cyberkinetics"
else
H.model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[H.model]
head_model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[head_model]
if(robohead.is_monitor && M.name != "None") //If the character can have prosthetic heads and they have the default Morpheus head (or another monitor-head), no optic markings.
continue
else if(!robohead.is_monitor && M.name != "None") //Otherwise, if they DON'T have the default head and the head's not a monitor but the head's not in the style's list of allowed models, skip.
if(!(robohead.company in M.models_allowed))
continue
valid_markings[markingstyle] = marking_styles_list[markingstyle]
valid_markings += markingstyle
var/new_marking_style = input(user, "Choose the style of your character's markings:", "Character Preference", m_style) as null|anything in valid_markings
var/new_marking_style = input(user, "Choose the style of your character's head markings:", "Character Preference", m_styles["head"]) as null|anything in valid_markings
if(new_marking_style)
m_style = new_marking_style
m_styles["head"] = new_marking_style
if("m_head_colour")
if(species in list("Machine", "Tajaran", "Unathi", "Vulpkanin")) //Species with head markings.
var/input = "Choose the colour of your your character's head markings:"
var/new_markings = input(user, input, "Character Preference", m_colours["head"]) as color|null
if(new_markings)
m_colours["head"] = new_markings
if("m_style_body")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings/tattoos.
var/list/valid_markings = list()
valid_markings["None"] = marking_styles_list["None"]
for(var/markingstyle in marking_styles_list)
var/datum/sprite_accessory/M = marking_styles_list[markingstyle]
if(!(species in M.species_allowed))
continue
if(M.marking_location != "body")
continue
valid_markings += markingstyle
var/new_marking_style = input(user, "Choose the style of your character's body markings:", "Character Preference", m_styles["body"]) as null|anything in valid_markings
if(new_marking_style)
m_styles["body"] = new_marking_style
if("m_body_colour")
if(species in list("Human", "Unathi", "Grey", "Vulpkanin", "Tajaran", "Skrell", "Vox", "Drask")) //Species with body markings/tattoos.
var/input = "Choose the colour of your your character's body markings:"
var/new_markings = input(user, input, "Character Preference", m_colours["body"]) as color|null
if(new_markings)
m_colours["body"] = new_markings
if("m_style_tail")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
var/list/valid_markings = list()
valid_markings["None"] = marking_styles_list["None"]
for(var/markingstyle in marking_styles_list)
var/datum/sprite_accessory/body_markings/tail/M = marking_styles_list[markingstyle]
if(M.marking_location != "tail")
continue
if(!(species in M.species_allowed))
continue
if(!body_accessory)
if(M.tails_allowed)
continue
else
if(!M.tails_allowed || !(body_accessory in M.tails_allowed))
continue
valid_markings += markingstyle
var/new_marking_style = input(user, "Choose the style of your character's tail markings:", "Character Preference", m_styles["tail"]) as null|anything in valid_markings
if(new_marking_style)
m_styles["tail"] = new_marking_style
if("m_tail_colour")
if(species in list("Vox", "Vulpkanin")) //Species with tail markings.
var/input = "Choose the colour of your your character's tail markings:"
var/new_markings = input(user, input, "Character Preference", m_colours["tail"]) as color|null
if(new_markings)
m_colours["tail"] = new_markings
if("body_accessory")
var/list/possible_body_accessories = list()
@@ -1400,74 +1572,90 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
var/new_body_accessory = input(user, "Choose your body accessory:", "Character Preference") as null|anything in possible_body_accessories
if(new_body_accessory)
m_styles["tail"] = "None"
body_accessory = (new_body_accessory == "None") ? null : new_body_accessory
if("facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(r_facial, g_facial, b_facial)) as color|null
if(new_facial)
r_facial = hex2num(copytext(new_facial, 2, 4))
g_facial = hex2num(copytext(new_facial, 4, 6))
b_facial = hex2num(copytext(new_facial, 6, 8))
r_facial = color2R(new_facial)
g_facial = color2G(new_facial)
b_facial = color2B(new_facial)
if("secondary_facial")
if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox"))
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
if(facial_hair_style.secondary_theme && !facial_hair_style.no_sec_colour)
var/new_facial = input(user, "Choose your character's secondary facial-hair colour:", "Character Preference", rgb(r_facial_sec, g_facial_sec, b_facial_sec)) as color|null
if(new_facial)
r_facial_sec = color2R(new_facial)
g_facial_sec = color2G(new_facial)
b_facial_sec = color2B(new_facial)
if("f_style")
var/list/valid_facialhairstyles = list()
var/list/valid_facial_hairstyles = list()
for(var/facialhairstyle in facial_hair_styles_list)
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
if(S.name == "Shaved")
valid_facialhairstyles[facialhairstyle] = S
if(facialhairstyle == "Shaved") //Just in case.
valid_facial_hairstyles += facialhairstyle
continue
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(species == "Machine") //Species that can use prosthetic heads.
var/obj/item/organ/external/head/H = new()
var/head_model
if(!rlimb_data["head"]) //Handle situations where the head is default.
H.model = "Morpheus Cyberkinetics"
head_model = "Morpheus Cyberkinetics"
else
H.model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[H.model]
if(species in S.species_allowed)
if(robohead.is_monitor) //If the Machine character has the default Morpheus screen head or another screen head and they're allowed to have the style, let them have it.
valid_facialhairstyles[facialhairstyle] = S
continue
head_model = rlimb_data["head"]
var/datum/robolimb/robohead = all_robolimbs[head_model]
if((species in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
valid_facial_hairstyles += facialhairstyle //Give them their facial hairstyles if they do.
else
if(robohead.is_monitor) //Monitors (incl. the default morpheus head) cannot have wigs (human facial hairstyles).
continue
else if(!robohead.is_monitor && ("Human" in S.species_allowed))
valid_facialhairstyles[facialhairstyle] = S
continue
else
if(!(species in S.species_allowed))
continue
if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the facial hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
But if the user has a robotic humanoid head and the facial hairstyle can fit humans, let them use it as a wig. */
valid_facial_hairstyles += facialhairstyle
else //If the user is not a species who can have robotic heads, use the default handling.
if(species in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list.
valid_facial_hairstyles += facialhairstyle
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facialhairstyles
var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facial_hairstyles
if(new_f_style)
f_style = new_f_style
if("underwear")
var/list/underwear_options
if(gender == MALE)
underwear_options = underwear_m
else
underwear_options = underwear_f
var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in underwear_options
var/list/valid_underwear = list()
for(var/underwear in underwear_list)
var/datum/sprite_accessory/S = underwear_list[underwear]
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(!(species in S.species_allowed))
continue
valid_underwear[underwear] = underwear_list[underwear]
var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in valid_underwear
ShowChoices(user)
if(new_underwear)
underwear = new_underwear
ShowChoices(user)
if("undershirt")
var/new_undershirt
if(gender == MALE)
new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_m
else
new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in undershirt_f
var/list/valid_undershirts = list()
for(var/undershirt in undershirt_list)
var/datum/sprite_accessory/S = undershirt_list[undershirt]
if(gender == MALE && S.gender == FEMALE)
continue
if(gender == FEMALE && S.gender == MALE)
continue
if(!(species in S.species_allowed))
continue
valid_undershirts[undershirt] = undershirt_list[undershirt]
var/new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in valid_undershirts
ShowChoices(user)
if(new_undershirt)
undershirt = new_undershirt
ShowChoices(user)
if("socks")
var/list/valid_sockstyles = list()
@@ -1488,9 +1676,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if("eyes")
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(r_eyes, g_eyes, b_eyes)) as color|null
if(new_eyes)
r_eyes = hex2num(copytext(new_eyes, 2, 4))
g_eyes = hex2num(copytext(new_eyes, 4, 6))
b_eyes = hex2num(copytext(new_eyes, 6, 8))
r_eyes = color2R(new_eyes)
g_eyes = color2G(new_eyes)
b_eyes = color2B(new_eyes)
if("s_tone")
if(species == "Human" || species == "Drask")
@@ -1506,9 +1694,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if((species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Vulpkanin", "Machine")) || body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user))
var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(r_skin, g_skin, b_skin)) as color|null
if(new_skin)
r_skin = hex2num(copytext(new_skin, 2, 4))
g_skin = hex2num(copytext(new_skin, 4, 6))
b_skin = hex2num(copytext(new_skin, 6, 8))
r_skin = color2R(new_skin)
g_skin = color2G(new_skin)
b_skin = color2B(new_skin)
if("ooccolor")
@@ -1594,8 +1782,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
switch(new_state)
if("Normal")
if(limb == "head")
m_style = "None"
h_style = random_hair_style(gender, species)
m_styles["head"] = "None"
h_style = hair_styles_list["Bald"]
f_style = facial_hair_styles_list["Shaved"]
organ_data[limb] = null
rlimb_data[limb] = null
@@ -1640,11 +1828,15 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models
if(subchoice)
choice = subchoice
if(limb == "head")
ha_style = "None"
h_style = hair_styles_list["Bald"]
f_style = facial_hair_styles_list["Shaved"]
m_style = "None"
if(limb in list("head", "chest", "groin"))
if(species != "Machine")
return
if(limb == "head")
ha_style = "None"
alt_head = null
h_style = hair_styles_list["Bald"]
f_style = facial_hair_styles_list["Shaved"]
m_styles["head"] = "None"
rlimb_data[limb] = choice
organ_data[limb] = "cyborg"
if(second_limb)
@@ -1655,7 +1847,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
else
rlimb_data[second_limb] = choice
organ_data[second_limb] = "cyborg"
if("organs")
var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes")
if(!organ_name) return
@@ -1700,6 +1891,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(unlock_content)
toggles ^= MEMBER_PUBLIC
if("donor_public")
if(user.client.donator_level >= DONATOR_LEVEL_ONE)
toggles ^= DONATOR_PUBLIC
if("gender")
if(gender == MALE)
gender = FEMALE
@@ -1847,16 +2042,27 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
//Head-specific
var/obj/item/organ/external/head/H = character.get_organ("head")
H.r_hair = r_hair
H.g_hair = g_hair
H.b_hair = b_hair
H.r_hair_sec = r_hair_sec
H.g_hair_sec = g_hair_sec
H.b_hair_sec = b_hair_sec
H.r_facial = r_facial
H.g_facial = g_facial
H.b_facial = b_facial
H.r_facial_sec = r_facial_sec
H.g_facial_sec = g_facial_sec
H.b_facial_sec = b_facial_sec
H.h_style = h_style
H.f_style = f_style
H.alt_head = alt_head
//End of head-specific.
character.r_skin = r_skin
@@ -1946,10 +2152,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
H.b_headacc = b_headacc
H.ha_style = ha_style
if(character.species.bodyflags & HAS_MARKINGS)
character.r_markings = r_markings
character.g_markings = g_markings
character.b_markings = b_markings
character.m_style = m_style
character.m_colours = m_colours
character.m_styles = m_styles
if(body_accessory)
character.body_accessory = body_accessory_by_name["[body_accessory]"]
@@ -110,23 +110,28 @@
hair_red,
hair_green,
hair_blue,
secondary_hair_red,
secondary_hair_green,
secondary_hair_blue,
facial_red,
facial_green,
facial_blue,
secondary_facial_red,
secondary_facial_green,
secondary_facial_blue,
skin_tone,
skin_red,
skin_green,
skin_blue,
markings_red,
markings_green,
markings_blue,
marking_colours,
head_accessory_red,
head_accessory_green,
head_accessory_blue,
hair_style_name,
facial_style_name,
marking_style_name,
marking_styles,
head_accessory_style_name,
alt_head_name,
eyes_red,
eyes_green,
eyes_blue,
@@ -181,52 +186,57 @@
r_hair = text2num(query.item[8])
g_hair = text2num(query.item[9])
b_hair = text2num(query.item[10])
r_facial = text2num(query.item[11])
g_facial = text2num(query.item[12])
b_facial = text2num(query.item[13])
s_tone = text2num(query.item[14])
r_skin = text2num(query.item[15])
g_skin = text2num(query.item[16])
b_skin = text2num(query.item[17])
r_markings = text2num(query.item[18])
g_markings = text2num(query.item[19])
b_markings = text2num(query.item[20])
r_headacc = text2num(query.item[21])
g_headacc = text2num(query.item[22])
b_headacc = text2num(query.item[23])
h_style = query.item[24]
f_style = query.item[25]
m_style = query.item[26]
ha_style = query.item[27]
r_eyes = text2num(query.item[28])
g_eyes = text2num(query.item[29])
b_eyes = text2num(query.item[30])
underwear = query.item[31]
undershirt = query.item[32]
backbag = text2num(query.item[33])
b_type = query.item[34]
r_hair_sec = text2num(query.item[11])
g_hair_sec = text2num(query.item[12])
b_hair_sec = text2num(query.item[13])
r_facial = text2num(query.item[14])
g_facial = text2num(query.item[15])
b_facial = text2num(query.item[16])
r_facial_sec = text2num(query.item[17])
g_facial_sec = text2num(query.item[18])
b_facial_sec = text2num(query.item[19])
s_tone = text2num(query.item[20])
r_skin = text2num(query.item[21])
g_skin = text2num(query.item[22])
b_skin = text2num(query.item[23])
m_colours = params2list(query.item[24])
r_headacc = text2num(query.item[25])
g_headacc = text2num(query.item[26])
b_headacc = text2num(query.item[27])
h_style = query.item[28]
f_style = query.item[29]
m_styles = params2list(query.item[30])
ha_style = query.item[31]
alt_head = query.item[32]
r_eyes = text2num(query.item[33])
g_eyes = text2num(query.item[34])
b_eyes = text2num(query.item[35])
underwear = query.item[36]
undershirt = query.item[37]
backbag = text2num(query.item[38])
b_type = query.item[39]
//Jobs
alternate_option = text2num(query.item[35])
job_support_high = text2num(query.item[36])
job_support_med = text2num(query.item[37])
job_support_low = text2num(query.item[38])
job_medsci_high = text2num(query.item[39])
job_medsci_med = text2num(query.item[40])
job_medsci_low = text2num(query.item[41])
job_engsec_high = text2num(query.item[42])
job_engsec_med = text2num(query.item[43])
job_engsec_low = text2num(query.item[44])
job_karma_high = text2num(query.item[45])
job_karma_med = text2num(query.item[46])
job_karma_low = text2num(query.item[47])
alternate_option = text2num(query.item[40])
job_support_high = text2num(query.item[41])
job_support_med = text2num(query.item[42])
job_support_low = text2num(query.item[43])
job_medsci_high = text2num(query.item[44])
job_medsci_med = text2num(query.item[45])
job_medsci_low = text2num(query.item[46])
job_engsec_high = text2num(query.item[47])
job_engsec_med = text2num(query.item[48])
job_engsec_low = text2num(query.item[49])
job_karma_high = text2num(query.item[50])
job_karma_med = text2num(query.item[51])
job_karma_low = text2num(query.item[52])
//Miscellaneous
flavor_text = query.item[48]
med_record = query.item[49]
sec_record = query.item[50]
gen_record = query.item[51]
flavor_text = query.item[53]
med_record = query.item[54]
sec_record = query.item[55]
gen_record = query.item[56]
// Apparently, the preceding vars weren't always encoded properly...
if(findtext(flavor_text, "<")) // ... so let's clumsily check for tags!
flavor_text = html_encode(flavor_text)
@@ -236,17 +246,17 @@
sec_record = html_encode(sec_record)
if(findtext(gen_record, "<"))
gen_record = html_encode(gen_record)
disabilities = text2num(query.item[52])
player_alt_titles = params2list(query.item[53])
organ_data = params2list(query.item[54])
rlimb_data = params2list(query.item[55])
nanotrasen_relation = query.item[56]
speciesprefs = text2num(query.item[57])
disabilities = text2num(query.item[57])
player_alt_titles = params2list(query.item[58])
organ_data = params2list(query.item[59])
rlimb_data = params2list(query.item[60])
nanotrasen_relation = query.item[61]
speciesprefs = text2num(query.item[62])
//socks
socks = query.item[58]
body_accessory = query.item[59]
gear = params2list(query.item[60])
socks = query.item[63]
body_accessory = query.item[64]
gear = params2list(query.item[65])
//Sanitize
metadata = sanitize_text(metadata, initial(metadata))
@@ -262,23 +272,30 @@
r_hair = sanitize_integer(r_hair, 0, 255, initial(r_hair))
g_hair = sanitize_integer(g_hair, 0, 255, initial(g_hair))
b_hair = sanitize_integer(b_hair, 0, 255, initial(b_hair))
r_hair_sec = sanitize_integer(r_hair_sec, 0, 255, initial(r_hair_sec))
g_hair_sec = sanitize_integer(g_hair_sec, 0, 255, initial(g_hair_sec))
b_hair_sec = sanitize_integer(b_hair_sec, 0, 255, initial(b_hair_sec))
r_facial = sanitize_integer(r_facial, 0, 255, initial(r_facial))
g_facial = sanitize_integer(g_facial, 0, 255, initial(g_facial))
b_facial = sanitize_integer(b_facial, 0, 255, initial(b_facial))
r_facial_sec = sanitize_integer(r_facial_sec, 0, 255, initial(r_facial_sec))
g_facial_sec = sanitize_integer(g_facial_sec, 0, 255, initial(g_facial_sec))
b_facial_sec = sanitize_integer(b_facial_sec, 0, 255, initial(b_facial_sec))
s_tone = sanitize_integer(s_tone, -185, 34, initial(s_tone))
r_skin = sanitize_integer(r_skin, 0, 255, initial(r_skin))
g_skin = sanitize_integer(g_skin, 0, 255, initial(g_skin))
b_skin = sanitize_integer(b_skin, 0, 255, initial(b_skin))
r_markings = sanitize_integer(r_markings, 0, 255, initial(r_markings))
g_markings = sanitize_integer(g_markings, 0, 255, initial(g_markings))
b_markings = sanitize_integer(b_markings, 0, 255, initial(b_markings))
for(var/marking_location in m_colours)
m_colours[marking_location] = sanitize_hexcolor(m_colours[marking_location], DEFAULT_MARKING_COLOURS[marking_location])
r_headacc = sanitize_integer(r_headacc, 0, 255, initial(r_headacc))
g_headacc = sanitize_integer(g_headacc, 0, 255, initial(g_headacc))
b_headacc = sanitize_integer(b_headacc, 0, 255, initial(b_headacc))
h_style = sanitize_inlist(h_style, hair_styles_list, initial(h_style))
f_style = sanitize_inlist(f_style, facial_hair_styles_list, initial(f_style))
m_style = sanitize_inlist(m_style, marking_styles_list, initial(m_style))
for(var/marking_location in m_styles)
m_styles[marking_location] = sanitize_inlist(m_styles[marking_location], marking_styles_list, DEFAULT_MARKING_STYLES[marking_location])
ha_style = sanitize_inlist(ha_style, head_accessory_styles_list, initial(ha_style))
alt_head = sanitize_inlist(alt_head, alt_heads_list, initial(alt_head))
r_eyes = sanitize_integer(r_eyes, 0, 255, initial(r_eyes))
g_eyes = sanitize_integer(g_eyes, 0, 255, initial(g_eyes))
b_eyes = sanitize_integer(b_eyes, 0, 255, initial(b_eyes))
@@ -318,6 +335,9 @@
var/rlimblist
var/playertitlelist
var/gearlist
var/markingcolourslist = list2params(m_colours)
var/markingstyleslist = list2params(m_styles)
if(!isemptylist(organ_data))
organlist = list2params(organ_data)
if(!isemptylist(rlimb_data))
@@ -341,23 +361,28 @@
hair_red='[r_hair]',
hair_green='[g_hair]',
hair_blue='[b_hair]',
secondary_hair_red='[r_hair_sec]',
secondary_hair_green='[g_hair_sec]',
secondary_hair_blue='[b_hair_sec]',
facial_red='[r_facial]',
facial_green='[g_facial]',
facial_blue='[b_facial]',
secondary_facial_red='[r_facial_sec]',
secondary_facial_green='[g_facial_sec]',
secondary_facial_blue='[b_facial_sec]',
skin_tone='[s_tone]',
skin_red='[r_skin]',
skin_green='[g_skin]',
skin_blue='[b_skin]',
markings_red='[r_markings]',
markings_green='[g_markings]',
markings_blue='[b_markings]',
marking_colours='[sanitizeSQL(markingcolourslist)]',
head_accessory_red='[r_headacc]',
head_accessory_green='[g_headacc]',
head_accessory_blue='[b_headacc]',
hair_style_name='[sanitizeSQL(h_style)]',
facial_style_name='[sanitizeSQL(f_style)]',
marking_style_name='[sanitizeSQL(m_style)]',
marking_styles='[sanitizeSQL(markingstyleslist)]',
head_accessory_style_name='[sanitizeSQL(ha_style)]',
alt_head_name='[sanitizeSQL(alt_head)]',
eyes_red='[r_eyes]',
eyes_green='[g_eyes]',
eyes_blue='[b_eyes]',
@@ -406,14 +431,17 @@
INSERT INTO [format_table_name("characters")] (ckey, slot, OOC_Notes, real_name, name_is_always_random, gender,
age, species, language,
hair_red, hair_green, hair_blue,
secondary_hair_red, secondary_hair_green, secondary_hair_blue,
facial_red, facial_green, facial_blue,
secondary_facial_red, secondary_facial_green, secondary_facial_blue,
skin_tone, skin_red, skin_green, skin_blue,
markings_red, markings_green, markings_blue,
marking_colours,
head_accessory_red, head_accessory_green, head_accessory_blue,
hair_style_name,
facial_style_name,
marking_style_name,
marking_styles,
head_accessory_style_name,
alt_head_name,
eyes_red, eyes_green, eyes_blue,
underwear, undershirt,
backbag, b_type, alternate_option,
@@ -433,14 +461,17 @@
('[C.ckey]', '[default_slot]', '[sanitizeSQL(metadata)]', '[sanitizeSQL(real_name)]', '[be_random_name]','[gender]',
'[age]', '[sanitizeSQL(species)]', '[sanitizeSQL(language)]',
'[r_hair]', '[g_hair]', '[b_hair]',
'[r_hair_sec]', '[g_hair_sec]', '[b_hair_sec]',
'[r_facial]', '[g_facial]', '[b_facial]',
'[r_facial_sec]', '[g_facial_sec]', '[b_facial_sec]',
'[s_tone]', '[r_skin]', '[g_skin]', '[b_skin]',
'[r_markings]', '[g_markings]', '[b_markings]',
'[sanitizeSQL(markingcolourslist)]',
'[r_headacc]', '[g_headacc]', '[b_headacc]',
'[sanitizeSQL(h_style)]',
'[sanitizeSQL(f_style)]',
'[sanitizeSQL(m_style)]',
'[sanitizeSQL(markingstyleslist)]',
'[sanitizeSQL(ha_style)]',
'[sanitizeSQL(alt_head)]',
'[r_eyes]', '[g_eyes]', '[b_eyes]',
'[underwear]', '[undershirt]',
'[backbag]', '[b_type]', '[alternate_option]',
+6 -5
View File
@@ -411,11 +411,12 @@
var/mob/living/carbon/human/M = src.loc
to_chat(M, "\red The Optical Thermal Scanner overloads and blinds you!")
if(M.glasses == src)
M.eye_blind = 3
M.eye_blurry = 5
M.disabilities |= NEARSIGHTED
spawn(100)
M.disabilities &= ~NEARSIGHTED
M.EyeBlind(3)
M.EyeBlurry(5)
if(!(M.disabilities & NEARSIGHTED))
M.BecomeNearsighted()
spawn(100)
M.CureNearsighted()
..()
/obj/item/clothing/glasses/thermal/syndi //These are now a traitor item, concealed as mesons. -Pete
+21
View File
@@ -0,0 +1,21 @@
/*
Donator Glasses Loadout for Patreon
*/
//Kamina shades
/obj/item/clothing/glasses/fluff/kamina
name = "Spiky Orange-tinted Shades"
desc = "Row row!"
icon_state = "gar"
item_state = "gar"
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi'
)
//Green Kamina shades
/obj/item/clothing/glasses/fluff/kamina/green
name = "Spiky Green-tinted Shades"
desc = "Fight the power!"
icon_state = "garm"
item_state = "garm"
+63
View File
@@ -0,0 +1,63 @@
/*
Donator Loadout for Patreon
*/
//mushroom hat
/obj/item/clothing/head/fluff/mushhat
name = "Mushroom Hat"
desc = "A horrifying display of Nanotrasen's ruthless pursuit in being the forefront of fashion. Or genocide."
icon_state = "mushhat"
item_state = "mushhat"
flags = BLOCKHAIR
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi'
)
//gold top hat and recolours
/obj/item/clothing/head/fluff/goldtophat
name = "Gold-trimmed Top Hat"
desc = "Poshness incarnate."
icon_state = "goldtophat"
item_state = "goldtophat"
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi'
)
/obj/item/clothing/head/fluff/goldtophat/blue
name = "Gold-trimmed Blue Top Hat"
desc = "Poshness incarnate. With blue."
icon_state = "goldtophatblue"
item_state = "goldtophatblue"
/obj/item/clothing/head/fluff/goldtophat/red
name = "Gold-trimmed Red Top Hat"
desc = "Poshness incarnate. With red."
icon_state = "goldtophatred"
item_state = "goldtophatred"
//medieval guard helm
/obj/item/clothing/head/fluff/guardhelm
name = "Plastic Guard helm"
desc = "A plastic re-creation of a medieval-era headwear worn by extremely bored recruits of the local army. Kintergarden only."
icon_state = "guardhelm"
item_state = "guardhelm"
flags = BLOCKHAIR
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi'
)
//black sombrero
/obj/item/clothing/head/fluff/blacksombrero
name = "Black sombrero"
desc = "A rare identifying hat of the infamous ancient renegade gang known as 'El Loco Pocos'"
icon_state = "blacksombrero"
item_state = "blacksombrero"
flags = BLOCKHAIR
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/head.dmi'
)
+11 -8
View File
@@ -189,15 +189,11 @@
to_chat(H, "<span class='notice'>You deploy your hardsuit helmet, sealing you off from the world.</span>")
H.update_inv_head()
/obj/item/clothing/suit/space/rig/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/clothing/suit/space/rig/attackby(obj/item/W, mob/user, params)
if(!isliving(user))
return
if(istype(src.loc,/mob/living))
to_chat(user, "How do you propose to modify a hardsuit while it is being worn?")
return
if(istype(W,/obj/item/weapon/screwdriver))
if(istype(W,/obj/item/weapon/screwdriver) && can_modify(user))
if(!helmet)
to_chat(user, "\The [src] does not have a helmet installed.")
else
@@ -213,7 +209,7 @@
boots = null
return
else if(istype(W,/obj/item/clothing/head/helmet/space))
else if(istype(W,/obj/item/clothing/head/helmet/space) && can_modify(user))
if(!attached_helmet)
to_chat(user, "\The [src] does not have a helmet mount.")
return
@@ -226,7 +222,7 @@
src.helmet = W
return
else if(istype(W,/obj/item/clothing/shoes/magboots))
else if(istype(W,/obj/item/clothing/shoes/magboots) && can_modify(user))
if(!attached_boots)
to_chat(user, "\The [src] does not have boot mounts.")
return
@@ -242,6 +238,13 @@
return ..()
..()
/obj/item/clothing/suit/space/rig/proc/can_modify(mob/living/user)
if(isliving(loc))
to_chat(user, "<span class='info'>You can not modify the hardsuit while it is being worn.</span>")
return 0
return 1
//Engineering rig
/obj/item/clothing/head/helmet/space/rig/engineering
@@ -936,11 +936,6 @@
if(wearer.notransform || !wearer.canmove)
return
if(locate(/obj/effect/stop/, wearer.loc))
for(var/obj/effect/stop/S in wearer.loc)
if(S.victim == wearer)
return
if(!wearer.lastarea)
wearer.lastarea = get_area(wearer.loc)
@@ -66,16 +66,21 @@
if("main" in href_list)
state = STATE_DEFAULT
if("login" in href_list)
var/mob/M = usr
var/obj/item/I = M.get_active_hand()
if(!ishuman(usr))
to_chat(usr, "<span class='warning'>Access denied.</span>")
return
var/mob/living/carbon/human/H = usr
var/obj/item/I = H.get_active_hand()
if(I)
I = I.GetID()
if(istype(I,/obj/item/weapon/card/id) && check_access(I))
authenticated = 1
if(access_captain in I.GetAccess())
authenticated = 2
crew_announcement.announcer = GetNameAndAssignmentFromId(I)
var/obj/item/weapon/card/id = H.get_idcard(TRUE)
if(istype(id))
crew_announcement.announcer = GetNameAndAssignmentFromId(id)
if("logout" in href_list)
authenticated = 0
crew_announcement.announcer = ""
+50 -13
View File
@@ -14,7 +14,7 @@
var/used = 0
/obj/item/device/fluff/tattoo_gun // Generic tattoo gun, make subtypes for different folks
name = "dispoable tattoo pen"
name = "disposable tattoo pen"
desc = "A cheap plastic tattoo application pen."
icon = 'icons/obj/custom_items.dmi'
icon_state = "tatgun"
@@ -22,7 +22,7 @@
throwforce = 0
w_class = 1
var/tattoo_name = "tiger stripe tattoo" // Tat name for visible messages
var/tattoo_icon = "Tiger Body" // body_accessory.dmi, new icons defined in sprite_accessories.dm
var/tattoo_icon = "Tiger-stripe Tattoo" // body_accessory.dmi, new icons defined in sprite_accessories.dm
var/tattoo_r = 1 // RGB values for the body markings
var/tattoo_g = 1
var/tattoo_b = 1
@@ -47,10 +47,15 @@
to_chat(user, "<span class= 'notice'>[target] has no skin, how do you expect to tattoo them?</span>")
return
if(target.m_style != "None")
if(target.m_styles["body"] != "None")
to_chat(user, "<span class= 'notice'>[target] already has body markings, any more would look silly!</span>")
return
var/datum/sprite_accessory/body_markings/tattoo/temp_tatt = marking_styles_list[tattoo_icon]
if(!(target.species.name in temp_tatt.species_allowed))
to_chat(user, "<span class= 'notice'>You can't think of a way to make the [tattoo_name] design work on [target == user ? "your" : "[target]'s"] body type.</span>")
return
if(target == user)
to_chat(user, "<span class= 'notice'>You use the [src] to apply a [tattoo_name] to yourself!</span>")
@@ -61,12 +66,8 @@
user.visible_message("<span class='notice'>[user] finishes the [tattoo_name] on [target].</span>", "<span class='notice'>You finish the [tattoo_name].</span>")
if(!used) // No exploiting do_after to tattoo multiple folks.
target.m_style = tattoo_icon
target.r_markings = tattoo_r
target.g_markings = tattoo_g
target.b_markings = tattoo_b
target.update_markings()
target.change_markings(tattoo_icon, "body")
target.change_marking_color(rgb(tattoo_r, tattoo_g, tattoo_b), "body")
playsound(src.loc, 'sound/items/Welder2.ogg', 20, 1)
used = 1
@@ -98,9 +99,9 @@
if(!used)
var/ink_color = input("Please select an ink color.", "Tattoo Ink Color", rgb(tattoo_r, tattoo_g, tattoo_b)) as color|null
if(ink_color && !(user.incapacitated() || used) )
tattoo_r = hex2num(copytext(ink_color, 2, 4))
tattoo_g = hex2num(copytext(ink_color, 4, 6))
tattoo_b = hex2num(copytext(ink_color, 6, 8))
tattoo_r = color2R(ink_color)
tattoo_g = color2G(ink_color)
tattoo_b = color2B(ink_color)
to_chat(user, "<span class='notice'>You change the color setting on the [src].</span>")
@@ -224,6 +225,28 @@
to_chat(target, "<span class='notice'>You comb your tail with the [src].</span>")
used = 1
/obj/item/device/fluff/cardgage_helmet_kit //captain cardgage: Richard Ulery
name = "welding helmet modkit"
desc = "Some spraypaint and a stencil, perfect for painting flames onto a welding helmet!"
icon_state = "modkit"
w_class = 2
force = 0
throwforce = 0
/obj/item/device/fluff/cardgage_helmet_kit/afterattack(atom/target, mob/user, proximity)
if(!proximity || !ishuman(user) || user.lying)
return
if(istype(target, /obj/item/clothing/head/welding))
to_chat(user, "<span class='notice'>You modify the appearance of [target].</span>")
var/obj/item/clothing/head/welding/flamedecal/P = new(get_turf(target))
transfer_fingerprints_to(P)
qdel(target)
qdel(src)
return
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
#define USED_MOD_HELM 1
#define USED_MOD_SUIT 2
@@ -335,7 +358,7 @@
if(ishuman(loc))
var/mob/living/carbon/human/H = loc
if(H.head == src)
H.slurring = max(3, H.slurring) //always slur
H.Slur(3) //always slur
/obj/item/clothing/head/beret/fluff/linda //Epic_Charger: Linda Clark
name = "Green beret"
@@ -423,6 +446,11 @@
/obj/item/clothing/head/hood/fluff/linda //Epic_Charger: Linda Clark
icon_state = "greenhood"
/obj/item/clothing/suit/armor/shodanscoat // RazekPraxis: SHODAN
name = "SHODAN's Captain's Coat"
desc = "A black coat with gold trim and an old US Chevron printed on the back. Edgy."
icon_state = "shodancoat"
//////////// Uniforms ////////////
/obj/item/clothing/under/fluff/kharshai // Kharshai: Athena Castile
name = "Castile formal outfit"
@@ -432,6 +460,15 @@
item_state = "castile_dress"
item_color = "castile_dress"
/obj/item/clothing/under/fluff/elishirt // FlattestGuitar9: Eli Randolph
name = "casual dress shirt"
desc = "A soft, white dress shirt paired up with black suit pants. The set looks comfortable."
icon = 'icons/obj/custom_items.dmi'
icon_state = "elishirt"
item_state = "elishirt"
item_color = "elishirt"
displays_id = 0
/obj/item/clothing/under/psysuit/fluff/isaca_sirius_1 // Xilia: Isaca Sirius
name = "Isaca's suit"
desc = "Black, comfortable and nicely fitting suit. Made not to hinder the wearer in any way. Made of some exotic fabric. And some strange glowing jewel at the waist. Name labels says; Property of Isaca Sirius; The Seeder."
+48 -44
View File
@@ -123,8 +123,6 @@ log transactions
to_chat(user, "\red Artificial unit recognized. Artificial units do not currently receive monetary compensation, as per Nanotrasen regulation #1005.")
return
if(get_dist(src,user) <= 1)
//check to see if the user has low security enabled
scan_user(user)
add_fingerprint(user)
//js replicated from obj/machinery/computer/card
@@ -252,55 +250,59 @@ log transactions
var/new_sec_level = max( min(text2num(href_list["new_security_level"]), 2), 0)
authenticated_account.security_level = new_sec_level
if("attempt_auth")
if(linked_db && !ticks_left_locked_down)
var/tried_account_num = text2num(href_list["account_num"])
if(!tried_account_num)
tried_account_num = held_card.associated_account_number
var/tried_pin = text2num(href_list["account_pin"])
if(linked_db)
// check if they have low security enabled
scan_user(usr)
if(!ticks_left_locked_down && held_card)
var/tried_account_num = text2num(href_list["account_num"])
if(!tried_account_num)
tried_account_num = held_card.associated_account_number
var/tried_pin = text2num(href_list["account_pin"])
authenticated_account = attempt_account_access(tried_account_num, tried_pin, held_card && held_card.associated_account_number == tried_account_num ? 2 : 1)
if(!authenticated_account)
number_incorrect_tries++
if(previous_account_number == tried_account_num)
if(number_incorrect_tries > max_pin_attempts)
//lock down the atm
ticks_left_locked_down = 30
playsound(src, 'sound/machines/buzz-two.ogg', 50, 1)
authenticated_account = attempt_account_access(tried_account_num, tried_pin, held_card && held_card.associated_account_number == tried_account_num ? 2 : 1)
if(!authenticated_account)
number_incorrect_tries++
if(previous_account_number == tried_account_num)
if(number_incorrect_tries > max_pin_attempts)
//lock down the atm
ticks_left_locked_down = 30
playsound(src, 'sound/machines/buzz-two.ogg', 50, 1)
//create an entry in the account transaction log
var/datum/money_account/failed_account = linked_db.get_account(tried_account_num)
if(failed_account)
var/datum/transaction/T = new()
T.target_name = failed_account.owner_name
T.purpose = "Unauthorised login attempt"
T.source_terminal = machine_id
T.date = current_date_string
T.time = worldtime2text()
failed_account.transaction_log.Add(T)
//create an entry in the account transaction log
var/datum/money_account/failed_account = linked_db.get_account(tried_account_num)
if(failed_account)
var/datum/transaction/T = new()
T.target_name = failed_account.owner_name
T.purpose = "Unauthorised login attempt"
T.source_terminal = machine_id
T.date = current_date_string
T.time = worldtime2text()
failed_account.transaction_log.Add(T)
else
to_chat(usr, "\red [bicon(src)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.")
previous_account_number = tried_account_num
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1)
else
to_chat(usr, "\red [bicon(src)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.")
previous_account_number = tried_account_num
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1)
to_chat(usr, "\red [bicon(src)] incorrect pin/account combination entered.")
number_incorrect_tries = 0
else
to_chat(usr, "\red [bicon(src)] incorrect pin/account combination entered.")
number_incorrect_tries = 0
else
playsound(src, 'sound/machines/twobeep.ogg', 50, 1)
ticks_left_timeout = 120
view_screen = NO_SCREEN
playsound(src, 'sound/machines/twobeep.ogg', 50, 1)
ticks_left_timeout = 120
view_screen = NO_SCREEN
//create a transaction log entry
var/datum/transaction/T = new()
T.target_name = authenticated_account.owner_name
T.purpose = "Remote terminal access"
T.source_terminal = machine_id
T.date = current_date_string
T.time = worldtime2text()
authenticated_account.transaction_log.Add(T)
//create a transaction log entry
var/datum/transaction/T = new()
T.target_name = authenticated_account.owner_name
T.purpose = "Remote terminal access"
T.source_terminal = machine_id
T.date = current_date_string
T.time = worldtime2text()
authenticated_account.transaction_log.Add(T)
to_chat(usr, "\blue [bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'")
to_chat(usr, "\blue [bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'")
previous_account_number = tried_account_num
previous_account_number = tried_account_num
if("withdrawal")
var/amount = max(text2num(href_list["funds_amount"]),0)
if(amount <= 0)
@@ -404,3 +406,5 @@ log transactions
T.date = current_date_string
T.time = worldtime2text()
authenticated_account.transaction_log.Add(T)
view_screen = NO_SCREEN
+2 -4
View File
@@ -1,5 +1,3 @@
/var/global/sent_aliens_to_station = 0
/datum/event/alien_infestation
announceWhen = 400
var/spawncount = 1
@@ -7,8 +5,8 @@
/datum/event/alien_infestation/setup()
announceWhen = rand(announceWhen, announceWhen + 50)
spawncount = rand(1, 2)
sent_aliens_to_station = 1
if(prob(50))
spawncount++
/datum/event/alien_infestation/announce()
if(successSpawn)
+2 -2
View File
@@ -6,7 +6,7 @@
var/armor = H.getarmor(type = "rad")
if((H.species.flags & RADIMMUNE) || armor >= 75) // Leave radiation-immune species/rad armored players completely unaffected
continue
H.hallucination += rand(50, 100)
H.AdjustHallucinate(rand(50, 100))
/datum/event/mass_hallucination/announce()
command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
+5 -5
View File
@@ -279,11 +279,11 @@ Gunshots/explosions/opening doors/less rare audio (done)
/obj/effect/hallucination/simple/singularity/proc/Eat(atom/OldLoc, Dir)
var/target_dist = get_dist(src,target)
if(target_dist<=3) //"Eaten"
target.sleeping = 20
target.Sleeping(20)
target.hal_crit = 1
target.hal_screwyhud = 1
spawn(rand(50,100))
target.sleeping = 0
target.SetSleeping(0)
target.hal_crit = 0
target.hal_screwyhud = 0
@@ -480,7 +480,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
my_target.show_message("<span class='danger'>[src.name] has attacked [my_target] with [weapon_name]!</span>", 1)
my_target.staminaloss += 30
if(prob(20))
my_target.eye_blurry += 3
my_target.AdjustEyeBlurry(3)
if(prob(33))
if(!locate(/obj/effect/overlay) in my_target.loc)
fake_blood(my_target)
@@ -752,11 +752,11 @@ var/list/non_fakeattack_weapons = list(/obj/item/weapon/gun/projectile, /obj/ite
halimage = null
if("death")
//Fake death
src.sleeping = 20
Sleeping(20)
hal_crit = 1
hal_screwyhud = 1
spawn(rand(50,100))
src.sleeping = 0
SetSleeping(0)
hal_crit = 0
hal_screwyhud = 0
if("husks")
@@ -81,7 +81,7 @@
refill = reagents.get_master_reagent_id()
refillName = reagents.get_master_reagent_name()
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, "<span class='notice'> You transfer [trans] units of the solution to [target].</span>")
if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
@@ -102,22 +102,22 @@
if(istype(I, /obj/item/clothing/mask/cigarette)) //ciggies are weird
return
if(is_hot(I))
if(src.reagents)
src.reagents.chem_temp += 15
if(reagents)
reagents.chem_temp += 15
to_chat(user, "<span class='notice'>You heat [src] with [I].</span>")
src.reagents.handle_reactions()
reagents.handle_reactions()
/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
if(!..(user, 1))
return
if(!reagents || reagents.total_volume==0)
if(!reagents || reagents.total_volume == 0)
to_chat(user, "<span class='notice'> \The [src] is empty!</span>")
else if(reagents.total_volume<=src.volume/4)
else if(reagents.total_volume <= volume/4)
to_chat(user, "<span class='notice'> \The [src] is almost empty!</span>")
else if(reagents.total_volume<=src.volume*0.66)
else if(reagents.total_volume <= volume*0.66)
to_chat(user, "<span class='notice'> \The [src] is half full!</span>")// We're all optimistic, right?!
else if(reagents.total_volume<=src.volume*0.90)
else if(reagents.total_volume <= volume*0.90)
to_chat(user, "<span class='notice'> \The [src] is almost full!</span>")
else
to_chat(user, "<span class='notice'> \The [src] is full!</span>")
@@ -22,9 +22,9 @@
else
user.drop_item()
user.put_in_active_hand(B)
B.icon_state = src.icon_state
B.icon_state = icon_state
var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
var/icon/I = new('icons/obj/drinks.dmi', icon_state)
I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
B.icon = I
@@ -99,11 +99,11 @@
//Display an attack message.
if(target != user)
target.visible_message("<span class='danger'>[user] has hit [target][head_attack_message] with a bottle of [src.name]!</span>", \
"<span class='userdanger'>[user] has hit [target][head_attack_message] with a bottle of [src.name]!</span>")
target.visible_message("<span class='danger'>[user] has hit [target][head_attack_message] with a bottle of [name]!</span>", \
"<span class='userdanger'>[user] has hit [target][head_attack_message] with a bottle of [name]!</span>")
else
user.visible_message("<span class='danger'>[target] hits \himself with a bottle of [src.name][head_attack_message]!</span>", \
"<span class='userdanger'>[target] hits \himself with a bottle of [src.name][head_attack_message]!</span>")
user.visible_message("<span class='danger'>[target] hits \himself with a bottle of [name][head_attack_message]!</span>", \
"<span class='userdanger'>[target] hits \himself with a bottle of [name][head_attack_message]!</span>")
//Attack logs
add_logs(user, target, "attacked", src)
@@ -284,7 +284,7 @@
desc = "A throwing weapon used to ignite things, typically filled with an accelerant. Recommended highly by rioters and revolutionaries. Light and toss."
icon_state = "vodkabottle"
list_reagents = list()
var/list/accelerants = list(/datum/reagent/ethanol,/datum/reagent/fuel,/datum/reagent/clf3,/datum/reagent/phlogiston,
var/list/accelerants = list(/datum/reagent/consumable/ethanol,/datum/reagent/fuel,/datum/reagent/clf3,/datum/reagent/phlogiston,
/datum/reagent/napalm,/datum/reagent/hellwater,/datum/reagent/plasma,/datum/reagent/plasma_dust)
var/active = 0
@@ -9,7 +9,7 @@
/obj/item/weapon/reagent_containers/food/drinks/cans/attack_self(mob/user)
if(canopened == 0)
playsound(src.loc,'sound/effects/canopen.ogg', rand(10,50), 1)
playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
to_chat(user, "<span class='notice'>You open the drink with an audible pop!</span>")
canopened = 1
flags |= OPENCONTAINER
@@ -32,7 +32,7 @@
if(canopened == 0)
to_chat(user, "<span class='notice'>You need to open the drink!</span>")
return
else if(M == user && !src.reagents.total_volume && user.a_intent == "harm" && user.zone_sel.selecting == "head")
else if(M == user && !reagents.total_volume && user.a_intent == "harm" && user.zone_sel.selecting == "head")
user.visible_message("<span class='warning'>[user] crushes ["\the [src]"] on \his forehead!</span>", "<span class='notice'>You crush \the [src] on your forehead.</span>")
crush(user)
return
@@ -36,523 +36,12 @@
reagents.clear_reagents()
extinguish()
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change() // *scream
if(reagents.reagent_list.len > 0)
switch(reagents.get_master_reagent_id())
if("beer")
icon_state = "beerglass"
name = "Beer glass"
desc = "A freezing pint of beer"
if("cider")
icon_state = "rewriter"
name = "Cider"
desc = "a refreshing glass of traditional cider"
if("beer2")
icon_state = "beerglass"
name = "Beer glass"
desc = "A freezing pint of beer"
if("ale")
icon_state = "aleglass"
name = "Ale glass"
desc = "A freezing pint of delicious Ale"
if("milk")
icon_state = "glass_white"
name = "Glass of milk"
desc = "White and nutritious goodness!"
if("cream")
icon_state = "glass_white"
name = "Glass of cream"
desc = "Ewwww..."
if("chocolate")
icon_state = "chocolateglass"
name = "Glass of chocolate"
desc = "Tasty"
if("hot_coco")
icon_state = "hot_coco"
name = "Glass of hot coco"
desc = "Delicious and cozy"
if("lemonjuice")
icon_state = "lemonglass"
name = "Glass of lemonjuice"
desc = "Sour..."
if("cola")
icon_state = "glass_brown"
name = "Glass of Space Cola"
desc = "A glass of refreshing Space Cola"
if("nuka_cola")
icon_state = "nuka_colaglass"
name = "Nuka Cola"
desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland"
if("orangejuice")
icon_state = "glass_orange"
name = "Glass of Orange juice"
desc = "Vitamins! Yay!"
if("tomatojuice")
icon_state = "glass_red"
name = "Glass of Tomato juice"
desc = "Are you sure this is tomato juice?"
if("blood")
icon_state = "glass_red"
name = "Glass of Tomato juice"
desc = "Are you sure this is tomato juice?"
if("limejuice")
icon_state = "glass_green"
name = "Glass of Lime juice"
desc = "A glass of sweet-sour lime juice."
if("whiskey")
icon_state = "whiskeyglass"
name = "Glass of whiskey"
desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
if("gin")
icon_state = "ginvodkaglass"
name = "Glass of gin"
desc = "A crystal clear glass of Griffeater gin."
if("vodka")
icon_state = "ginvodkaglass"
name = "Glass of vodka"
desc = "The glass contain wodka. Xynta."
if("sake")
icon_state = "ginvodkaglass"
name = "Glass of Sake"
desc = "A glass of Sake."
if("goldschlager")
icon_state = "ginvodkaglass"
name = "Glass of goldschlager"
desc = "100 proof that teen girls will drink anything with gold in it."
if("wine")
icon_state = "wineglass"
name = "Glass of wine"
desc = "A very classy looking drink."
if("cognac")
icon_state = "cognacglass"
name = "Glass of cognac"
desc = "Damn, you feel like some kind of French aristocrat just by holding this."
if("kahlua")
icon_state = "kahluaglass"
name = "Glass of RR coffee Liquor"
desc = "DAMN, THIS THING LOOKS ROBUST"
if("vermouth")
icon_state = "vermouthglass"
name = "Glass of Vermouth"
desc = "You wonder why you're even drinking this straight."
if("triple_citrus")
icon_state = "triplecitrus"
name = "Glass of Triplecitrus Juice"
desc = "As colorful and healthy as it is delicious."
if("mojito")
icon_state = "mojito"
name = "Glass of Mojito"
desc = "Fresh from Spesscuba."
if("tequila")
icon_state = "tequilaglass"
name = "Glass of Tequila"
desc = "Now all that's missing is the weird colored shades!"
if("patron")
icon_state = "patronglass"
name = "Glass of Patron"
desc = "Drinking patron in the bar, with all the subpar ladies."
if("rum")
icon_state = "rumglass"
name = "Glass of Rum"
desc = "Now you want to Pray for a pirate suit, don't you?"
if("absinthe")
icon_state = "absinthebottle"
name = "Glass of Absinthe"
desc = "The green fairy is going to get you now!"
if("gintonic")
icon_state = "gintonicglass"
name = "Gin and Tonic"
desc = "A mild but still great cocktail. Drink up, like a true Englishman."
if("ginsonic")
icon_state = "ginsonic"
name = "Gin and Sonic"
desc = "An extremely high amperage drink. Absolutely not for the true Englishman."
if("whiskeycola")
icon_state = "whiskeycolaglass"
name = "Whiskey Cola"
desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
if("whiterussian")
icon_state = "whiterussianglass"
name = "White Russian"
desc = "A very nice looking drink. But that's just, like, your opinion, man."
if("screwdrivercocktail")
icon_state = "screwdriverglass"
name = "Screwdriver"
desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
if("bloodymary")
icon_state = "bloodymaryglass"
name = "Bloody Mary"
desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
if("martini")
icon_state = "martiniglass"
name = "Classic Martini"
desc = "Damn, the bartender even stirred it, not shook it."
if("vodkamartini")
icon_state = "martiniglass"
name = "Vodka martini"
desc ="A bastardisation of the classic martini. Still great."
if("gargleblaster")
icon_state = "gargleblasterglass"
name = "Pan-Galactic Gargle Blaster"
desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy."
if("bravebull")
icon_state = "bravebullglass"
name = "Brave Bull"
desc = "Tequila and Coffee liquor, brought together in a mouthwatering mixture. Drink up."
if("tequilasunrise")
icon_state = "tequilasunriseglass"
name = "Tequila Sunrise"
desc = "Oh great, now you feel nostalgic about sunrises back on Terra..."
if("toxinsspecial")
icon_state = "toxinsspecialglass"
name = "Toxins Special"
desc = "Whoah, this thing is on FIRE"
if("beepskysmash")
icon_state = "beepskysmashglass"
name = "Beepsky Smash"
desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
if("doctorsdelight")
icon_state = "doctorsdelightglass"
name = "Doctor's Delight"
desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place."
if("manlydorf")
icon_state = "manlydorfglass"
name = "The Manly Dorf"
desc = "A manly concotion made from Ale and Beer. Intended for true men only."
if("irishcream")
icon_state = "irishcreamglass"
name = "Irish Cream"
desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
if("cubalibre")
icon_state = "cubalibreglass"
name = "Cuba Libre"
desc = "A classic mix of rum and cola."
if("b52")
icon_state = "b52glass"
name = "B-52"
desc = "Kahlua, Irish Cream, and congac. You will get bombed."
if("atomicbomb")
icon_state = "atomicbombglass"
name = "Atomic Bomb"
desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
if("longislandicedtea")
icon_state = "longislandicedteaglass"
name = "Long Island Iced Tea"
desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
if("threemileisland")
icon_state = "threemileislandglass"
name = "Three Mile Island Ice Tea"
desc = "A glass of this is sure to prevent a meltdown."
if("margarita")
icon_state = "margaritaglass"
name = "Margarita"
desc = "On the rocks with salt on the rim. Arriba~!"
if("blackrussian")
icon_state = "blackrussianglass"
name = "Black Russian"
desc = "For the lactose-intolerant. Still as classy as a White Russian."
if("vodkatonic")
icon_state = "vodkatonicglass"
name = "Vodka and Tonic"
desc = "For when a gin and tonic isn't russian enough."
if("manhattan")
icon_state = "manhattanglass"
name = "Manhattan"
desc = "The Detective's undercover drink of choice. He never could stomach gin..."
if("manhattan_proj")
icon_state = "proj_manhattanglass"
name = "Manhattan Project"
desc = "A scienitst drink of choice, for thinking how to blow up the station."
if("ginfizz")
icon_state = "ginfizzglass"
name = "Gin Fizz"
desc = "Refreshingly lemony, deliciously dry."
if("irishcoffee")
icon_state = "irishcoffeeglass"
name = "Irish Coffee"
desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
if("suicider")
icon_state = "suicider"
name = "Suicider"
desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
if("whiskeysoda")
icon_state = "whiskeysodaglass2"
name = "Whiskey Soda"
desc = "Ultimate refreshment."
if("tonic")
icon_state = "glass_clear"
name = "Glass of Tonic Water"
desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
if("sodawater")
icon_state = "glass_clear"
name = "Glass of Soda Water"
desc = "Soda water. Why not make a scotch and soda?"
if("water")
icon_state = "glass_clear"
name = "Glass of Water"
desc = "The father of all refreshments."
if("spacemountainwind")
icon_state = "Space_mountain_wind_glass"
name = "Glass of Space Mountain Wind"
desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind."
if("thirteenloko")
icon_state = "thirteen_loko_glass"
name = "Glass of Thirteen Loko"
desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass"
if("dr_gibb")
icon_state = "dr_gibb_glass"
name = "Glass of Dr. Gibb"
desc = "Dr. Gibb. Not as dangerous as the name might imply."
if("space_up")
icon_state = "space-up_glass"
name = "Glass of Space-up"
desc = "Space-up. It helps keep your cool."
if("moonshine")
icon_state = "glass_clear"
name = "Moonshine"
desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
if("soymilk")
icon_state = "glass_white"
name = "Glass of soy milk"
desc = "White and nutritious soy goodness!"
if("berryjuice")
icon_state = "berryjuice"
name = "Glass of berry juice"
desc = "Berry juice. Or maybe its jam. Who cares?"
if("poisonberryjuice")
icon_state = "poisonberryjuice"
name = "Glass of poison berry juice"
desc = "A glass of deadly juice."
if("carrotjuice")
icon_state = "carrotjuice"
name = "Glass of carrot juice"
desc = "It is just like a carrot but without crunching."
if("potato")
icon_state = "glass_brown"
name = "Glass of potato juice"
desc = "Who in the hell requests this? Gross!"
if("banana")
icon_state = "banana"
name = "Glass of banana juice"
desc = "The raw essence of a banana. HONK"
if("bahama_mama")
icon_state = "bahama_mama"
name = "Bahama Mama"
desc = "Tropic cocktail"
if("singulo")
icon_state = "singulo"
name = "Singulo"
desc = "A blue-space beverage."
if("alliescocktail")
icon_state = "alliescocktail"
name = "Allies cocktail"
desc = "A drink made from your allies."
if("antifreeze")
icon_state = "antifreeze"
name = "Anti-freeze"
desc = "The ultimate refreshment."
if("barefoot")
icon_state = "b&p"
name = "Barefoot"
desc = "Barefoot and pregnant"
if("demonsblood")
icon_state = "demonsblood"
name = "Demons Blood"
desc = "Just looking at this thing makes the hair at the back of your neck stand up."
if("booger")
icon_state = "booger"
name = "Booger"
desc = "Ewww..."
if("snowwhite")
icon_state = "snowwhite"
name = "Snow White"
desc = "A cold refreshment."
if("aloe")
icon_state = "aloe"
name = "Aloe"
desc = "Very, very, very good."
if("andalusia")
icon_state = "andalusia"
name = "Andalusia"
desc = "A nice, strange named drink."
if("sbiten")
icon_state = "sbitenglass"
name = "Sbiten"
desc = "A spicy mix of Vodka and Spice. Very hot."
if("red_mead")
icon_state = "red_meadglass"
name = "Red Mead"
desc = "A True Vikings Beverage, though its color is strange."
if("mead")
icon_state = "meadglass"
name = "Mead"
desc = "A Vikings Beverage, though a cheap one."
if("iced_beer")
icon_state = "iced_beerglass"
name = "Iced Beer"
desc = "A beer so frosty, the air around it freezes."
if("grog")
icon_state = "grogglass"
name = "Grog"
desc = "A fine and cepa drink for Space."
if("soy_latte")
icon_state = "soy_latte"
name = "Soy Latte"
desc = "A nice and refrshing beverage while you are reading."
if("cafe_latte")
icon_state = "cafe_latte"
name = "Cafe Latte"
desc = "A nice, strong and refreshing beverage while you are reading."
if("cafe_mocha")
icon_state = "cafe_latte"
name = "Cafe Mocha"
desc = "The perfect blend of coffe, milk, and chocolate."
if("acidspit")
icon_state = "acidspitglass"
name = "Acid Spit"
desc = "A drink from Nanotrasen. Made from live aliens."
if("amasec")
icon_state = "amasecglass"
name = "Amasec"
desc = "Always handy before COMBAT!!!"
if("neurotoxin")
icon_state = "neurotoxinglass"
name = "Neurotoxin"
desc = "A drink that is guaranteed to knock you silly."
if("hippiesdelight")
icon_state = "hippiesdelightglass"
name = "Hippie's Delight"
desc = "A drink enjoyed by people during the 1960's."
if("bananahonk")
icon_state = "bananahonkglass"
name = "Banana Honk"
desc = "A drink from Banana Heaven."
if("silencer")
icon_state = "silencerglass"
name = "Silencer"
desc = "A drink from mime Heaven."
if("nothing")
icon_state = "nothing"
name = "Nothing"
desc = "Absolutely nothing."
if("devilskiss")
icon_state = "devilskiss"
name = "Devils Kiss"
desc = "Creepy time!"
if("changelingsting")
icon_state = "changelingsting"
name = "Changeling Sting"
desc = "A stingy drink."
if("irishcarbomb")
icon_state = "irishcarbomb"
name = "Irish Car Bomb"
desc = "An irish car bomb."
if("syndicatebomb")
icon_state = "syndicatebomb"
name = "Syndicate Bomb"
desc = "A syndicate bomb."
if("erikasurprise")
icon_state = "erikasurprise"
name = "Erika Surprise"
desc = "The surprise is, it's green!"
if("driestmartini")
icon_state = "driestmartiniglass"
name = "Driest Martini"
desc = "Only for the experienced. You think you see sand floating in the glass."
if("ice")
icon_state = "iceglass"
name = "Glass of ice"
desc = "Generally, you're supposed to put something else in there too..."
if("icecoffee")
icon_state = "icedcoffeeglass"
name = "Iced Coffee"
desc = "A drink to perk you up and refresh you!"
if("coffee")
icon_state = "glass_brown"
name = "Glass of coffee"
desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere."
if("bilk")
icon_state = "glass_brown"
name = "Glass of bilk"
desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
if("fuel")
icon_state = "dr_gibb_glass"
name = "Glass of welder fuel"
desc = "Unless you are an industrial tool, this is probably not safe for consumption."
if("brownstar")
icon_state = "brownstar"
name = "Brown Star"
desc = "Its not what it sounds like..."
if("tea")
icon_state = "glass_brown"
name = "Glass of Tea"
desc = "A glass of hot tea. Perhaps a cup with a handle would have been smarter?"
if("icetea")
icon_state = "icetea"
name = "Iced Tea"
desc = "No relation to a certain rap artist/ actor."
if("milkshake")
icon_state = "milkshake"
name = "Milkshake"
desc = "Glorious brainfreezing mixture."
if("lemonade")
icon_state = "lemonade"
name = "Lemonade"
desc = "Oh the nostalgia..."
if("kiraspecial")
icon_state = "kiraspecial"
name = "Kira Special"
desc = "Long live the guy who everyone had mistaken for a girl. Baka!"
if("rewriter")
icon_state = "rewriter"
name = "Rewriter"
desc = "The secert of the sanctuary of the Libarian..."
if("applejack")
icon_state = "cognacglass"
name = "Glass of applejack"
desc = "When cider isn't strong enough, you gotta jack it."
if("jackrose")
icon_state = "patronglass"
name = "Jack Rose"
desc = "Drinking this makes you feel like you belong in a luxury hotel bar during the 1920s."
if("synthanol")
icon_state = "synthanolglass"
name = "Glass of Synthanol"
desc = "The equivalent of alcohol for synthetic crewmembers. They'd find it awful if they had tastebuds too."
if("robottears")
icon_state = "robottearsglass"
name = "Glass of Robot Tears"
desc = "No robots were hurt in the making of this drink."
if("trinary")
icon_state = "trinaryglass"
name = "Glass of Trinary"
desc = "Colorful drink made for synthetic crewmembers. It doesn't seem like it would taste well."
if("servo")
icon_state = "servoglass"
name = "Glass of Servo"
desc = "Chocolate - based drink made for IPCs. Not sure if anyone's actually tried out the recipe."
if("synthnsoda")
icon_state = "synthnsodaglass"
name = "Glass of Synth 'n Soda"
desc = "Classic drink altered to fit the tastes of a robot. Bad idea to drink if you're made of carbon."
if("synthignon")
icon_state = "synthignonglass"
name = "Glass of Synthignon"
desc = "Someone mixed good wine and robot booze. Romantic, but atrocious."
if("uplink")
icon_state = "uplinkglass"
name = "Glass of Uplink"
desc = "An exquisite mix of the finest liquoirs and synthanol. Meant only for synthetics."
if("holywater")
icon_state = "glass_clear"
name = "Glass of Water"
desc = "The father of all refreshments."
else
icon_state ="glass_brown"
name = "Glass of ..what?"
desc = "You can't really tell what this is."
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change()
if(reagents.reagent_list.len)
var/datum/reagent/R = reagents.get_master_reagent()
icon_state = R.drink_icon
name = R.drink_name
desc = R.drink_desc
else
icon_state = "glass_empty"
name = "glass"
+62 -311
View File
@@ -13,9 +13,6 @@
icon = 'icons/obj/food/candy.dmi'
icon_state = "candy"
/obj/item/weapon/reagent_containers/food/snacks/candy/New()
..()
// ***********************************************************
// Candy Ingredients / Flavorings / Byproduct
// ***********************************************************
@@ -25,76 +22,53 @@
desc = "Such sweet, fattening food."
icon_state = "chocolatebar"
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("chocolate",4)
bitesize = 2
list_reagents = list("nutriment" = 2, "chocolate" = 4)
/obj/item/weapon/reagent_containers/food/snacks/candy/caramel
name = "Caramel"
desc = "Chewy and dense, yet it practically melts in your mouth!"
icon_state = "caramel"
filling_color = "#DB944D"
/obj/item/weapon/reagent_containers/food/snacks/candy/caramel/New()
..()
reagents.add_reagent("cream", 2)
reagents.add_reagent("sugar", 2)
bitesize = 2
list_reagents = list("cream" = 2, "sugar" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/toffee
name = "Toffee"
desc = "A hard, brittle candy with a distinctive taste."
icon_state = "toffee"
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/candy/toffee/New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("sugar", 3)
bitesize = 2
list_reagents = list("nutriment" = 3, "sugar" = 3)
/obj/item/weapon/reagent_containers/food/snacks/candy/nougat
name = "Nougat"
desc = "A soft, chewy candy commonly found in candybars."
icon_state = "nougat"
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/candy/nougat/New()
..()
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("sugar", 3)
spawn(1)
reagents.del_reagent("egg")
reagents.update_total()
bitesize = 2
list_reagents = list("nutriment" = 3, "sugar" = 3)
/obj/item/weapon/reagent_containers/food/snacks/candy/taffy
name = "Saltwater Taffy"
desc = "Old fashioned saltwater taffy. Chewy!"
icon_state = "candy1"
filling_color = "#7D5F46"
bitesize = 2
list_reagents = list("nutriment" = 3, "sugar" = 3)
/obj/item/weapon/reagent_containers/food/snacks/candy/taffy/New()
..()
icon_state = pick("candy1", "candy2", "candy3", "candy4", "candy5")
reagents.add_reagent("nutriment", 3)
reagents.add_reagent("sugar", 3)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/candy/fudge
name = "Fudge"
desc = "Chocolate fudge, a timeless classic treat."
icon_state = "fudge"
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/candy/fudge/New()
..()
reagents.add_reagent("cream", 3)
reagents.add_reagent("chocolate",6)
bitesize = 3
list_reagents = list("cream" = 3, "chocolate" = 6)
/obj/item/weapon/reagent_containers/food/snacks/candy/fudge/peanut
name = "Peanut Fudge"
@@ -113,10 +87,7 @@
desc = "An extra creamy fudge with bits of real chocolate cookie mixed in. Crunchy!"
icon_state = "fudge_cookies_n_cream"
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/candy/fudge/cookies_n_cream/New()
..()
reagents.add_reagent("cream", 3)
list_reagents = list("cream" = 6, "chocolate" = 6)
/obj/item/weapon/reagent_containers/food/snacks/candy/fudge/turtle
name = "Turtle Fudge"
@@ -132,24 +103,16 @@
name = "Donor Candy"
desc = "A little treat for blood donors."
trash = /obj/item/trash/candy
/obj/item/weapon/reagent_containers/food/snacks/candy/donor/New()
..()
reagents.add_reagent("nutriment", 10)
reagents.add_reagent("sugar", 3)
bitesize = 5
list_reagents = list("nutriment" = 10, "sugar" = 3)
/obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn
name = "candy corn"
desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas."
icon_state = "candycorn"
filling_color = "#FFFCB0"
/obj/item/weapon/reagent_containers/food/snacks/candy/candy_corn/New()
..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("sugar", 2)
bitesize = 2
list_reagents = list("nutriment" = 4, "sugar" = 2)
// ***********************************************************
// Candy Products (plain / unflavored)
@@ -161,11 +124,8 @@
icon_state = "cottoncandy_plain"
trash = /obj/item/weapon/c_tube
filling_color = "#FFFFFF"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/New()
..()
reagents.add_reagent("sugar", 15)
bitesize = 3
bitesize = 4
list_reagents = list("sugar" = 15)
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar
name = "candy"
@@ -173,92 +133,64 @@
icon_state = "candy"
trash = /obj/item/trash/candy
filling_color = "#7D5F46"
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar/New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("chocolate",5)
bitesize = 3
list_reagents = list("nutriment" = 2, "chocolate" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/candycane
name = "candy cane"
desc = "A festive mint candy cane."
icon_state = "candycane"
filling_color = "#F2F2F2"
/obj/item/weapon/reagent_containers/food/snacks/candy/candycane/New()
..()
reagents.add_reagent("minttoxin", 1)
reagents.add_reagent("sugar", 5)
bitesize = 2
list_reagents = list("minttoxin" = 1, "sugar" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear
name = "gummy bear"
desc = "A small edible bear. It's squishy and chewy!"
icon_state = "gbear"
filling_color = "#FFFFFF"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/New()
..()
reagents.add_reagent("sugar", 10)
bitesize = 3
list_reagents = list("sugar" = 10)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm
name = "gummy worm"
desc = "An edible worm, made from gelatin."
icon_state = "gworm"
filling_color = "#FFFFFF"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/New()
..()
reagents.add_reagent("sugar", 10)
bitesize = 3
list_reagents = list("sugar" = 10)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas."
icon_state = "jbean"
filling_color = "#FFFFFF"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/New()
..()
reagents.add_reagent("sugar", 10)
bitesize = 3
list_reagents = list("sugar" = 10)
/obj/item/weapon/reagent_containers/food/snacks/candy/jawbreaker
name = "jawbreaker"
desc = "An unbelievably hard candy. The name is fitting."
icon_state = "jawbreaker"
filling_color = "#ED0758"
/obj/item/weapon/reagent_containers/food/snacks/candy/jawbreaker/New()
..()
reagents.add_reagent("sugar", 10)
bitesize = 0.1 //this is gonna take a while, you'll be working at this all shift.
list_reagents = list("sugar" = 10)
/obj/item/weapon/reagent_containers/food/snacks/candy/cash
name = "candy cash"
desc = "Not legal tender. Tasty though."
icon_state = "candy_cash"
filling_color = "#302000"
/obj/item/weapon/reagent_containers/food/snacks/candy/cash/New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("chocolate", 4)
bitesize = 2
list_reagents = list("nutriment" = 2, "chocolate" = 4)
/obj/item/weapon/reagent_containers/food/snacks/candy/coin
name = "chocolate coin"
desc = "Probably won't work in the vending machines."
icon_state = "choc_coin"
filling_color = "#302000"
/obj/item/weapon/reagent_containers/food/snacks/candy/coin/New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("chocolate",4)
bitesize = 3
list_reagents = list("nutriment" = 2, "chocolate" = 4)
/obj/item/weapon/reagent_containers/food/snacks/candy/gum
name = "bubblegum"
@@ -266,22 +198,15 @@
icon_state = "bubblegum"
trash = /obj/item/trash/gum
filling_color = "#FF7495"
/obj/item/weapon/reagent_containers/food/snacks/candy/gum/New()
..()
reagents.add_reagent("sugar", 5)
bitesize = 0.2
list_reagents = list("sugar" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/sucker
name = "sucker"
desc = "For being such a good sport!"
icon_state = "sucker"
filling_color = "#FFFFFF"
/obj/item/weapon/reagent_containers/food/snacks/candy/sucker/New()
..()
reagents.add_reagent("sugar", 10)
bitesize = 1
list_reagents = list("sugar" = 10)
// ***********************************************************
// Gummy Bear Flavors
@@ -292,91 +217,56 @@
desc = "A small edible bear. It's red!"
icon_state = "gbear_red"
filling_color = "#801E28"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/red/New()
..()
reagents.add_reagent("cherryjelly", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "cherryjelly" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/blue
name = "gummy bear"
desc = "A small edible bear. It's blue!"
icon_state = "gbear_blue"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/blue/New()
..()
reagents.add_reagent("berryjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "berryjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/poison
name = "gummy bear"
desc = "A small edible bear. It's blue!"
icon_state = "gbear_blue"
filling_color = "#863353"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/poison/New()
..()
reagents.add_reagent("poisonberryjuice", 12)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 3
list_reagents = list("poisonberryjuice" = 12)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/green
name = "gummy bear"
desc = "A small edible bear. It's green!"
icon_state = "gbear_green"
filling_color = "#365E30"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/green/New()
..()
reagents.add_reagent("limejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "limejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/yellow
name = "gummy bear"
desc = "A small edible bear. It's yellow!"
icon_state = "gbear_yellow"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/yellow/New()
..()
reagents.add_reagent("lemonjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "lemonjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/orange
name = "gummy bear"
desc = "A small edible bear. It's orange!"
icon_state = "gbear_orange"
filling_color = "#E78108"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/orange/New()
..()
reagents.add_reagent("orangejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "orangejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/purple
name = "gummy bear"
desc = "A small edible bear. It's purple!"
icon_state = "gbear_purple"
filling_color = "#993399"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/purple/New()
..()
reagents.add_reagent("grapejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "grapejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/wtf
name = "gummy bear"
desc = "A small bear. Wait... what?"
icon_state = "gbear_wtf"
filling_color = "#60A584"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/wtf/New()
..()
reagents.add_reagent("space_drugs", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "space_drugs" = 2)
// ***********************************************************
// Gummy Worm Flavors
@@ -387,91 +277,56 @@
desc = "An edible worm, made from gelatin. It's red!"
icon_state = "gworm_red"
filling_color = "#801E28"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/red/New()
..()
reagents.add_reagent("cherryjelly", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "cherryjelly" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/blue
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's blue!"
icon_state = "gworm_blue"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/blue/New()
..()
reagents.add_reagent("berryjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "berryjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/poison
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's blue!"
icon_state = "gworm_blue"
filling_color = "#863353"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/poison/New()
..()
reagents.add_reagent("poisonberryjuice", 12)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 3
list_reagents = list("poisonberryjuice" = 12)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/green
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's green!"
icon_state = "gworm_green"
filling_color = "#365E30"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/green/New()
..()
reagents.add_reagent("limejuice", 10)
bitesize = 3
list_reagents = list("sugar" = 10, "limejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/yellow
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's yellow!"
icon_state = "gworm_yellow"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/yellow/New()
..()
reagents.add_reagent("lemonjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "lemonjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/orange
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's orange!"
icon_state = "gworm_orange"
filling_color = "#E78108"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/orange/New()
..()
reagents.add_reagent("orangejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "orangejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/purple
name = "gummy worm"
desc = "An edible worm, made from gelatin. It's purple!"
icon_state = "gworm_purple"
filling_color = "#993399"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/purple/New()
..()
reagents.add_reagent("grapejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "grapejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/wtf
name = "gummy worm"
desc = "An edible worm. Did it just move?"
icon_state = "gworm_wtf"
filling_color = "#60A584"
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/wtf/New()
..()
reagents.add_reagent("space_drugs", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "space_drugs" = 2)
// ***********************************************************
// Jelly Bean Flavors
@@ -482,146 +337,91 @@
desc = "A candy bean, guarenteed to not give you gas. It's red!"
icon_state = "jbean_red"
filling_color = "#801E28"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/red/New()
..()
reagents.add_reagent("cherryjelly", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "cherryjelly" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/blue
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's blue!"
icon_state = "jbean_blue"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/blue/New()
..()
reagents.add_reagent("berryjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "berryjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/poison
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's blue!"
icon_state = "jbean_blue"
filling_color = "#863353"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/poison/New()
..()
reagents.add_reagent("poisonberryjuice", 12)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 3
list_reagents = list("poisonberryjuice" = 12)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/green
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's green!"
icon_state = "jbean_green"
filling_color = "#365E30"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/green/New()
..()
reagents.add_reagent("limejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "limejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/yellow
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's yellow!"
icon_state = "jbean_yellow"
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/yellow/New()
..()
reagents.add_reagent("lemonjuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "lemonjuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/orange
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's orange!"
icon_state = "jbean_orange"
filling_color = "#E78108"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/orange/New()
..()
reagents.add_reagent("orangejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "orangejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/purple
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's purple!"
icon_state = "jbean_purple"
filling_color = "#993399"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/purple/New()
..()
reagents.add_reagent("grapejuice", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "grapejuice" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/chocolate
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's chocolate!"
icon_state = "jbean_choc"
filling_color = "#302000"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/chocolate/New()
..()
reagents.add_reagent("chocolate",2)
bitesize = 3
list_reagents = list("sugar" = 10, "chocolate" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/popcorn
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's popcorn flavored!"
icon_state = "jbean_popcorn"
filling_color = "#664330"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/popcorn/New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/cola
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's Cola flavored!"
icon_state = "jbean_cola"
filling_color = "#102000"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/cola/New()
..()
reagents.add_reagent("cola", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "cola" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/drgibb
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's Dr. Gibb flavored!"
icon_state = "jbean_cola"
filling_color = "#102000"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/drgibb/New()
..()
reagents.add_reagent("dr_gibb", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "dr_gibb" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/coffee
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. It's Coffee flavored!"
icon_state = "jbean_choc"
filling_color = "#482000"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/coffee/New()
..()
reagents.add_reagent("coffee", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "coffee" = 2)
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/wtf
name = "jelly bean"
desc = "A candy bean, guarenteed to not give you gas. You aren't sure what color it is."
icon_state = "jbean_wtf"
filling_color = "#60A584"
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/wtf/New()
..()
reagents.add_reagent("space_drugs", 2)
bitesize = 3
list_reagents = list("sugar" = 10, "space_drugs" = 2)
// ***********************************************************
// Cotton Candy Flavors
@@ -633,11 +433,7 @@
icon_state = "cottoncandy_red"
trash = /obj/item/weapon/c_tube
filling_color = "#801E28"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/red/New()
..()
reagents.add_reagent("cherryjelly", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "cherryjelly" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/blue
name = "cotton candy"
@@ -645,11 +441,7 @@
icon_state = "cottoncandy_blue"
trash = /obj/item/weapon/c_tube
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/blue/New()
..()
reagents.add_reagent("berryjuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "berryjuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/poison
name = "cotton candy"
@@ -657,14 +449,7 @@
icon_state = "cottoncandy_blue"
trash = /obj/item/weapon/c_tube
filling_color = "#863353"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/poison/New()
..()
reagents.add_reagent("poisonberryjuice", 20)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 4
list_reagents = list("poisonberryjuice" = 20)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/green
name = "cotton candy"
@@ -672,11 +457,7 @@
icon_state = "cottoncandy_green"
trash = /obj/item/weapon/c_tube
filling_color = "#365E30"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/green/New()
..()
reagents.add_reagent("limejuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "limejuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/yellow
name = "cotton candy"
@@ -684,11 +465,7 @@
icon_state = "cottoncandy_yellow"
trash = /obj/item/weapon/c_tube
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/yellow/New()
..()
reagents.add_reagent("lemonjuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "lemonjuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/orange
name = "cotton candy"
@@ -696,11 +473,7 @@
icon_state = "cottoncandy_orange"
trash = /obj/item/weapon/c_tube
filling_color = "#E78108"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/orange/New()
..()
reagents.add_reagent("orangejuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "orangejuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/purple
name = "cotton candy"
@@ -708,11 +481,7 @@
icon_state = "cottoncandy_purple"
trash = /obj/item/weapon/c_tube
filling_color = "#993399"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/purple/New()
..()
reagents.add_reagent("grapejuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "grapejuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/pink
name = "cotton candy"
@@ -720,11 +489,7 @@
icon_state = "cottoncandy_pink"
trash = /obj/item/weapon/c_tube
filling_color = "#863333"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/pink/New()
..()
reagents.add_reagent("watermelonjuice", 5)
bitesize = 4
list_reagents = list("sugar" = 15, "watermelonjuice" = 5)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/rainbow
name = "cotton candy"
@@ -732,14 +497,7 @@
icon_state = "cottoncandy_rainbow"
trash = /obj/item/weapon/c_tube
filling_color = "#C8A5DC"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/rainbow/New()
..()
reagents.add_reagent("omnizine", 20)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 4
list_reagents = list("omnizine" = 20)
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/bad_rainbow
name = "cotton candy"
@@ -747,14 +505,7 @@
icon_state = "cottoncandy_rainbow"
trash = /obj/item/weapon/c_tube
filling_color = "#32127A"
/obj/item/weapon/reagent_containers/food/snacks/candy/cotton/bad_rainbow/New()
..()
reagents.add_reagent("sulfonal", 20)
spawn(1)
reagents.del_reagent("sugar")
reagents.update_total()
bitesize = 4
list_reagents = list("sulfonal" = 20)
// ***********************************************************
// Candybar Flavors
@@ -82,7 +82,7 @@
if(target.reagents.total_volume >= target.reagents.maximum_volume)
to_chat(user, "<span class='warning'>you can't add anymore to [target]!</span>")
return
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, "<span class='notice'>You transfer [trans] units of the condiment to [target].</span>")
/obj/item/weapon/reagent_containers/food/condiment/on_reagent_change()
@@ -223,7 +223,7 @@
return
else
to_chat(user, "<span class='notice'>You tear open [src] above [target] and the condiments drip onto it.</span>")
src.reagents.trans_to(target, amount_per_transfer_from_this)
reagents.trans_to(target, amount_per_transfer_from_this)
qdel(src)
/obj/item/weapon/reagent_containers/food/condiment/pack/on_reagent_change()
@@ -1,4 +1,4 @@
/obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich/S = new(get_turf(user))
S.attackby(W,user, params)
@@ -6,13 +6,13 @@
else
..()
/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/burger/S = new(get_turf(user))
S.attackby(W,user, params)
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza/S = new(get_turf(user))
S.attackby(W,user, params)
@@ -21,7 +21,7 @@
..()
/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta/S = new(get_turf(user))
S.attackby(W,user, params)
@@ -30,7 +30,7 @@
..()
/obj/item/trash/plate/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/trash/plate/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom/S = new(get_turf(user))
S.attackby(W,user, params)
@@ -44,7 +44,7 @@
icon = 'icons/obj/food/food.dmi'
icon_state = "soup"
/obj/item/trash/bowl/attackby(obj/item/W as obj, mob/user as mob, params)
/obj/item/trash/bowl/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/reagent_containers/food/snacks) && !(W.flags & NODROP))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/soup/S = new(get_turf(user))
@@ -54,7 +54,6 @@
..()
/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich
/obj/item/weapon/reagent_containers/food/snacks/customizable
name = "sandwich"
desc = "A sandwich! A timeless classic."
icon_state = "breadslice"
@@ -79,12 +78,7 @@
trash = /obj/item/trash/plate
bitesize = 2
var/list/ingredients = list()
New()
..()
reagents.add_reagent("nutriment", 8)
list_reagents = list("nutriment" = 8)
/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza
name = "personal pizza"
@@ -323,7 +317,7 @@
toptype = new /obj/item/weapon/reagent_containers/food/snacks/bun()
/obj/item/weapon/reagent_containers/food/snacks/customizable/attackby(obj/item/I, mob/user, params)
if(src.contents.len > sandwich_limit)
if(contents.len > sandwich_limit)
to_chat(user, "<span class='warning'>If you put anything else in or on [src] it's going to make a mess.</span>")
return
if(!istype(I, /obj/item/weapon/reagent_containers/food/snacks))
@@ -351,7 +345,7 @@
for(var/obj/item/O in ingredients)
i++
if(!fullycustom)
var/image/I = new(src.icon, "[baseicon]_filling")
var/image/I = new(icon, "[baseicon]_filling")
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/food = O
if(!food.filling_color == "#FFFFFF")
@@ -372,7 +366,7 @@
overlays += O.overlays
if(top)
var/image/T = new(src.icon, "[baseicon]_top")
var/image/T = new(icon, "[baseicon]_top")
T.pixel_x = pick(list(-1,0,1))
T.pixel_y = (ingredients.len * 2)+1
overlays += T
@@ -388,24 +382,6 @@
to_chat(user, "<span class='notice'> You think you can see [whatsinside] in there.</span>")
/*
/obj/item/weapon/reagent_containers/food/snacks/customizable/attack(mob/M as mob, mob/user as mob, def_zone) //SNOOOOOOOWFLAAAAAAAAAAAAAAAAAKES
var/obj/item/shard
for(var/obj/item/O in contents)
if(istype(O,/obj/item/weapon/shard))
shard = O
break
var/mob/living/H
if(istype(M,/mob/living))
H = M
if(H && shard && M == user) //This needs a check for feeding the food to other people, but that could be abusable.
to_chat(H, "\red You lacerate your mouth on a [shard.name] in the sandwich!")
H.adjustBruteLoss(5) //TODO: Target head if human.
..()
*/
/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/newname()
var/unsorteditems[0]
@@ -487,7 +463,7 @@
sendback = "[pick(list("absurd","colossal","enormous","ridiculous","massive","oversized","cardiac-arresting","pipe-clogging","edible but sickening","sickening","gargantuan","mega","belly-burster","chest-burster"))] [basename]"
return sendback
/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/sortlist(var/list/unsorted, var/highest)
/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/sortlist(list/unsorted, highest)
var/sorted[0]
for(var/i = 1, i<= highest, i++)
for(var/it in unsorted)
+5 -12
View File
@@ -4,16 +4,11 @@
icon_state = "meat"
health = 180
filling_color = "#FF1C1C"
New()
..()
reagents.add_reagent("protein", 3)
src.bitesize = 3
bitesize = 3
list_reagents = list("protein" = 3)
/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if( \
istype(W, /obj/item/weapon/kitchen/knife) || \
istype(W, /obj/item/weapon/scalpel) \
)
/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/kitchen/knife) || istype(W, /obj/item/weapon/scalpel))
new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
@@ -49,6 +44,4 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/ham
name = "Ham"
desc = "Taste like bacon."
New()
..()
reagents.add_reagent("porktonium", 10)
list_reagents = list("protein" = 3, "porktonium" = 10)
+44 -127
View File
@@ -5,12 +5,8 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishfillet"
filling_color = "#FFDEFE"
New()
..()
reagents.add_reagent("protein", 3)
reagents.add_reagent("carpotoxin", 3)
src.bitesize = 6
bitesize = 6
list_reagents = list("protein" = 3, "carpotoxin" = 3)
/obj/item/weapon/reagent_containers/food/snacks/salmonmeat
name = "raw salmon"
@@ -18,11 +14,8 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishfillet"
filling_color = "#FFDEFE"
New()
..()
reagents.add_reagent("protein", 3)
src.bitesize = 3
bitesize = 3
list_reagents = list("protein" = 3)
/obj/item/weapon/reagent_containers/food/snacks/salmonsteak
name = "Salmon steak"
@@ -31,14 +24,8 @@
icon_state = "salmonsteak"
trash = /obj/item/trash/plate
filling_color = "#7A3D11"
New()
..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("sodiumchloride", 1)
reagents.add_reagent("blackpepper", 1)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 4, "sodiumchloride" = 1, "blackpepper" = 1)
/obj/item/weapon/reagent_containers/food/snacks/catfishmeat
name = "raw catfish"
@@ -46,11 +33,8 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishfillet"
filling_color = "#FFDEFE"
New()
..()
reagents.add_reagent("protein", 3)
src.bitesize = 3
bitesize = 3
list_reagents = list("protein" = 3)
/obj/item/weapon/reagent_containers/food/snacks/fishfingers
name = "Fish Fingers"
@@ -58,15 +42,8 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishfingers"
filling_color = "#FFDEFE"
New()
..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("carpotoxin", 3)
spawn(1)
reagents.del_reagent("egg")
reagents.update_total()
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 4, "carpotoxin" = 3)
/obj/item/weapon/reagent_containers/food/snacks/fishburger
name = "Fillet -o- Carp Sandwich"
@@ -74,12 +51,8 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishburger"
filling_color = "#FFDEFE"
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("carpotoxin", 3)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 6, "carpotoxin" = 3)
/obj/item/weapon/reagent_containers/food/snacks/cubancarp
name = "Cuban Carp"
@@ -88,13 +61,8 @@
icon_state = "cubancarp"
trash = /obj/item/trash/plate
filling_color = "#E9ADFF"
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("carpotoxin", 3)
reagents.add_reagent("capsaicin", 3)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 6, "carpotoxin" = 3, "capsaicin" = 3)
/obj/item/weapon/reagent_containers/food/snacks/fishandchips
name = "Fish and Chips"
@@ -102,168 +70,117 @@
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishandchips"
filling_color = "#E3D796"
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("carpotoxin", 3)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 6, "carpotoxin" = 3)
/obj/item/weapon/reagent_containers/food/snacks/sashimi
name = "carp sashimi"
desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sashimi"
New()
..()
reagents.add_reagent("nutriment", 6)
reagents.add_reagent("toxin", 5)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 6, "toxin" = 5)
/obj/item/weapon/reagent_containers/food/snacks/fried_shrimp
name = "fried shrimp"
desc = "Just one of the many things you can do with shrimp!"
icon = 'icons/obj/food/seafood.dmi'
icon_state = "shrimp_fried"
New()
..()
reagents.add_reagent("nutriment", 2)
src.bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/boiled_shrimp
name = "boiled shrimp"
desc = "Just one of the many things you can do with shrimp!"
icon = 'icons/obj/food/seafood.dmi'
icon_state = "shrimp_cooked"
New()
..()
reagents.add_reagent("nutriment", 2)
src.bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Ebi
name = "Ebi Sushi"
desc = "A simple sushi consisting of cooked shrimp and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Ebi"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Ikura
name = "Ikura Sushi"
desc = "A simple sushi consisting of salmon roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Ikura"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 1)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Sake
name = "Sake Sushi"
desc = "A simple sushi consisting of raw salmon and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Sake"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_SmokedSalmon
name = "Smoked Salmon Sushi"
desc = "A simple sushi consisting of cooked salmon and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_SmokedSalmon"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Tamago
name = "Tamago Sushi"
desc = "A simple sushi consisting of egg and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Tamago"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Inari
name = "Inari Sushi"
desc = "A piece of fried tofu stuffed with rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Inari"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Masago
name = "Masago Sushi"
desc = "A simple sushi consisting of goldfish roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Masago"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 1)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Tobiko
name = "Tobiko Sushi"
desc = "A simple sushi consisting of shark roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Masago"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 1)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/weapon/reagent_containers/food/snacks/sushi_TobikoEgg
name = "Tobiko and Egg Sushi"
desc = "A sushi consisting of shark roe and an egg."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_TobikoEgg"
New()
..()
reagents.add_reagent("nutriment", 2)
reagents.add_reagent("protein", 1)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Tai
name = "Tai Sushi"
desc = "A simple sushi consisting of catfish and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Tai"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
/obj/item/weapon/reagent_containers/food/snacks/sushi_Unagi
name = "Unagi Sushi"
desc = "A simple sushi consisting of eel and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Hokki"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 3
bitesize = 3
list_reagents = list("nutriment" = 2)
File diff suppressed because it is too large Load Diff
@@ -52,13 +52,13 @@
else
overlays += image('icons/obj/kitchen.dmi', "gridle")
/obj/machinery/gibber/relaymove(mob/user as mob)
/obj/machinery/gibber/relaymove(mob/user)
if(locked)
return
go_out()
/obj/machinery/gibber/attack_hand(mob/user as mob)
/obj/machinery/gibber/attack_hand(mob/user)
if(stat & (NOPOWER|BROKEN))
return
@@ -73,7 +73,7 @@
else
startgibbing(user)
/obj/machinery/gibber/attackby(obj/item/P as obj, mob/user as mob, params)
/obj/machinery/gibber/attackby(obj/item/P, mob/user, params)
if(istype(P, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = P
if(G.state < 2)
@@ -126,7 +126,7 @@
return
user.visible_message("<span class='danger'>[user] starts to put [victim] into the gibber!</span>")
src.add_fingerprint(user)
add_fingerprint(user)
if(do_after(user, 30, target = victim) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
user.visible_message("<span class='danger'>[user] stuffs [victim] into the gibber!</span>")
@@ -155,7 +155,7 @@
return
for(var/obj/O in src)
O.loc = src.loc
O.loc = loc
occupant.forceMove(get_turf(src))
occupant = null
@@ -212,11 +212,11 @@
/obj/machinery/gibber/proc/startgibbing(var/mob/user, var/UserOverride=0)
if(!istype(user) && !UserOverride)
log_debug("Some shit just went down with the gibber at X[x], Y[y], Z[z] with an invalid user. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
log_debug("Some shit just went down with the gibber at X[x], Y[y], Z[z] with an invalid user. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
return
if(UserOverride)
msg_admin_attack("[key_name_admin(occupant)] was gibbed by an autogibber (\the [src]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)")
msg_admin_attack("[key_name_admin(occupant)] was gibbed by an autogibber (\the [src]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)")
if(operating)
return
@@ -236,7 +236,7 @@
var/slab_name = occupant.name
var/slab_count = 3
var/slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human //gibber can only gib humans on paracode, no need to check meat type
var/slab_nutrition = src.occupant.nutrition / 15
var/slab_nutrition = occupant.nutrition / 15
slab_nutrition /= slab_count
@@ -352,7 +352,7 @@
feedinTopanim()
return 1
/obj/machinery/gibber/autogibber/proc/ejectclothes(var/mob/living/carbon/human/H)
/obj/machinery/gibber/autogibber/proc/ejectclothes(mob/living/carbon/human/H)
if(!istype(H)) return 0
if(H != occupant) return 0 //only using H as a shortcut to typecast
for(var/obj/O in H)
@@ -367,7 +367,7 @@
if(O.flags & NODROP)
qdel(O) //they are already dead by now
H.unEquip(O)
O.loc = src.loc
O.loc = loc
O.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15)
sleep(1)
@@ -375,7 +375,7 @@
if(C.flags & NODROP)
qdel(C)
H.unEquip(C)
C.loc = src.loc
C.loc = loc
C.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15)
sleep(1)
@@ -385,7 +385,7 @@
var/spats = 0 //keeps track of how many items get spit out. Don't show a message if none are found.
for(var/obj/O in src)
if(istype(O))
O.loc = src.loc
O.loc = loc
O.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15)
spats++
sleep(1)
@@ -24,10 +24,7 @@
/obj/machinery/icemachine/New()
var/datum/reagents/R = new/datum/reagents(500)
reagents = R
R.my_atom = src
create_reagents(500)
/obj/machinery/icemachine/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/reagent_containers/glass))
@@ -63,11 +63,11 @@ var/list/ingredients_source = list(
while(ingredients.len < 11)
ingredients.Add(5)
/obj/machinery/icecream_vat/attack_hand(mob/user as mob)
/obj/machinery/icecream_vat/attack_hand(mob/user)
user.set_machine(src)
interact(user)
/obj/machinery/icecream_vat/interact(mob/user as mob)
/obj/machinery/icecream_vat/interact(mob/user)
var/dat
dat += "<a href='?src=[UID()];dispense=[ICECREAM_VANILLA]'><b>Dispense vanilla icecream</b></a> There is [ingredients[ICECREAM_VANILLA]] scoops of vanilla icecream left (made from milk and ice).<br>"
dat += "<a href='?src=[UID()];dispense=[FLAVOUR_STRAWBERRY]'><b>Dispense strawberry icecream</b></a> There is [ingredients[FLAVOUR_STRAWBERRY]] dollops of strawberry flavouring left (obtained from berry juice.<br>"
@@ -91,7 +91,7 @@ var/list/ingredients_source = list(
popup.set_content(dat)
popup.open(0)
/obj/machinery/icecream_vat/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
/obj/machinery/icecream_vat/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/reagent_containers))
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/icecream))
var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = O
@@ -99,7 +99,7 @@ var/list/ingredients_source = list(
if(ingredients[ICECREAM_VANILLA] > 0)
var/flavour_name = get_icecream_flavour_string(dispense_flavour)
if(dispense_flavour < 11 && ingredients[dispense_flavour] > 0)
src.visible_message("[bicon(src)] <span class='info'>[user] scoops delicious [flavour_name] flavoured icecream into [I].</span>")
visible_message("[bicon(src)] <span class='info'>[user] scoops delicious [flavour_name] flavoured icecream into [I].</span>")
ingredients[dispense_flavour] -= 1
ingredients[ICECREAM_VANILLA] -= 1
@@ -127,7 +127,7 @@ var/list/ingredients_source = list(
else
var/obj/item/weapon/reagent_containers/R = O
if(R.reagents)
src.visible_message("<span class='info'>[user] has emptied all of [R] into [src].</span>")
visible_message("<span class='info'>[user] has emptied all of [R] into [src].</span>")
for(var/datum/reagent/current_reagent in R.reagents.reagent_list)
if(ingredients_source[current_reagent.id])
add(ingredients_source[current_reagent.id], current_reagent.volume / 2)
@@ -151,7 +151,7 @@ var/list/ingredients_source = list(
ingredients[INGR_FLOUR] -= amount
ingredients[INGR_SUGAR] -= amount
ingredients[CONE_WAFFLE] += amount
src.visible_message("<span class='info'>[user] cooks up some waffle cones.</span>")
visible_message("<span class='info'>[user] cooks up some waffle cones.</span>")
else
to_chat(user, "<span class='notice'>You require sugar and flour to make waffle cones.</span>")
if(CONE_CHOC)
@@ -160,7 +160,7 @@ var/list/ingredients_source = list(
ingredients[CONE_WAFFLE] -= amount
ingredients[FLAVOUR_CHOCOLATE] -= amount
ingredients[CONE_CHOC] += amount
src.visible_message("<span class='info'>[user] cooks up some chocolate cones.</span>")
visible_message("<span class='info'>[user] cooks up some chocolate cones.</span>")
else
to_chat(user, "<span class='notice'>You require waffle cones and chocolate flavouring to make chocolate cones.</span>")
if(ICECREAM_VANILLA)
@@ -169,7 +169,7 @@ var/list/ingredients_source = list(
ingredients[INGR_ICE] -= amount
ingredients[INGR_MILK] -= amount
ingredients[ICECREAM_VANILLA] += amount
src.visible_message("<span class='info'>[user] whips up some vanilla icecream.</span>")
visible_message("<span class='info'>[user] whips up some vanilla icecream.</span>")
else
to_chat(user, "<span class='notice'>You require milk and ice to make vanilla icecream.</span>")
updateDialog()
@@ -179,7 +179,7 @@ var/list/ingredients_source = list(
return
if(href_list["dispense"])
dispense_flavour = text2num(href_list["dispense"])
src.visible_message("\blue[usr] sets [src] to dispense [get_icecream_flavour_string(dispense_flavour)] flavoured icecream.")
visible_message("\blue[usr] sets [src] to dispense [get_icecream_flavour_string(dispense_flavour)] flavoured icecream.")
if(href_list["cone"])
var/dispense_cone = text2num(href_list["cone"])
@@ -187,11 +187,11 @@ var/list/ingredients_source = list(
var/cone_name = get_icecream_flavour_string(dispense_cone)
if(ingredients[dispense_cone] >= 1)
ingredients[dispense_cone] -= 1
var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = new(src.loc)
var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = new(loc)
I.cone_type = cone_name
I.icon_state = "icecream_cone_[cone_name]"
I.desc = "Delicious [cone_name] cone, but no ice cream."
src.visible_message("<span class='info'>[usr] dispenses a crunchy [cone_name] cone from [src].</span>")
visible_message("<span class='info'>[usr] dispenses a crunchy [cone_name] cone from [src].</span>")
else
to_chat(usr, "<span class='warning'>There are no [cone_name] cones left!</span>")
updateDialog()
@@ -202,7 +202,7 @@ var/list/ingredients_source = list(
if(href_list["eject"])
if(held_container)
held_container.forceMove(src.loc)
held_container.forceMove(loc)
held_container = null
updateDialog()
@@ -231,7 +231,7 @@ var/list/ingredients_source = list(
/obj/item/weapon/reagent_containers/food/snacks/icecream/proc/add_ice_cream(var/flavour)
var/flavour_name = get_icecream_flavour_string(flavour)
name = "[flavour_name] icecream"
src.overlays += "icecream_[flavour_name]"
overlays += "icecream_[flavour_name]"
desc = "Delicious [cone_type] cone with a dollop of [flavour_name] ice cream."
ice_creamed = 1
@@ -35,7 +35,7 @@
return
/obj/machinery/juicer/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
/obj/machinery/juicer/attackby(obj/item/O, mob/user, params)
if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass))
if(beaker)
@@ -46,9 +46,9 @@
return 0
O.forceMove(src)
beaker = O
src.verbs += /obj/machinery/juicer/verb/detach
verbs += /obj/machinery/juicer/verb/detach
update_icon()
src.updateUsrDialog()
updateUsrDialog()
return 0
if(!is_type_in_list(O, allowed_items))
to_chat(user, "It doesn't look like that contains any juice.")
@@ -57,24 +57,24 @@
to_chat(user, "<span class='notice'>\the [O] is stuck to your hand, you cannot put it in \the [src]</span>")
return 0
O.forceMove(src)
src.updateUsrDialog()
updateUsrDialog()
return 0
/obj/machinery/juicer/attack_ai(mob/user as mob)
/obj/machinery/juicer/attack_ai(mob/user)
return 0
/obj/machinery/juicer/attack_hand(mob/user as mob)
/obj/machinery/juicer/attack_hand(mob/user)
user.set_machine(src)
interact(user)
/obj/machinery/juicer/interact(mob/user as mob) // The microwave Menu
/obj/machinery/juicer/interact(mob/user) // The microwave Menu
var/is_chamber_empty = 0
var/is_beaker_ready = 0
var/processing_chamber = ""
var/beaker_contents = ""
for(var/i in allowed_items)
for(var/obj/item/O in src.contents)
for(var/obj/item/O in contents)
if(!istype(O,i))
continue
processing_chamber+= "some <B>[O]</B><BR>"
@@ -119,7 +119,7 @@
if("detach")
detach()
src.updateUsrDialog()
updateUsrDialog()
return
/obj/machinery/juicer/verb/detach()
@@ -130,8 +130,8 @@
return
if(!beaker)
return
src.verbs -= /obj/machinery/juicer/verb/detach
beaker.forceMove(src.loc)
verbs -= /obj/machinery/juicer/verb/detach
beaker.forceMove(loc)
beaker = null
update_icon()
@@ -159,8 +159,8 @@
return
if(!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
return
playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1)
for(var/obj/item/weapon/reagent_containers/food/snacks/O in src.contents)
playsound(loc, 'sound/machines/juicer.ogg', 50, 1)
for(var/obj/item/weapon/reagent_containers/food/snacks/O in contents)
var/r_id = get_juice_id(O)
beaker.reagents.add_reagent(r_id,get_juice_amount(O))
qdel(O)
@@ -32,8 +32,7 @@
********************/
/obj/machinery/kitchen_machine/New()
reagents = new/datum/reagents(100)
reagents.my_atom = src
create_reagents(100)
if(!available_recipes)
available_recipes = new
acceptable_items = new
@@ -56,7 +55,7 @@
* Item Adding
********************/
/obj/machinery/kitchen_machine/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
/obj/machinery/kitchen_machine/attackby(obj/item/O, mob/user, params)
if(operating)
return
if(!broken && dirty < 100)
@@ -77,8 +76,8 @@
default_deconstruction_crowbar(O)
if(src.broken > 0)
if(src.broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver
if(broken > 0)
if(broken == 2 && istype(O, /obj/item/weapon/screwdriver)) // If it's broken and they're using a screwdriver
user.visible_message( \
"<span class='notice'>[user] starts to fix part of \the [src].</span>", \
"<span class='notice'>You start to fix part of \the [src].</span>" \
@@ -88,8 +87,8 @@
"<span class='notice'>[user] fixes part of \the [src].</span>", \
"<span class='notice'>You have fixed part of \the [src].</span>" \
)
src.broken = 1 // Fix it a bit
else if(src.broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench
broken = 1 // Fix it a bit
else if(broken == 1 && istype(O, /obj/item/weapon/wrench)) // If it's broken and they're doing the wrench
user.visible_message( \
"<span class='notice'>[user] starts to fix part of \the [src].</span>", \
"<span class='notice'>You start to fix part of \the [src].</span>" \
@@ -99,14 +98,14 @@
"<span class='notice'>[user] fixes \the [src].</span>", \
"<span class='notice'>You have fixed \the [src].</span>" \
)
src.icon_state = off_icon
src.broken = 0 // Fix it!
src.dirty = 0 // just to be sure
src.flags = OPENCONTAINER
icon_state = off_icon
broken = 0 // Fix it!
dirty = 0 // just to be sure
flags = OPENCONTAINER
else
to_chat(user, "<span class='alert'>It's broken!</span>")
return 1
else if(src.dirty==100) // The machine is all dirty so can't be used!
else if(dirty==100) // The machine is all dirty so can't be used!
if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them
user.visible_message( \
"<span class='notice'>[user] starts to clean \the [src].</span>", \
@@ -117,10 +116,10 @@
"<span class='notice'>[user] has cleaned \the [src].</span>", \
"<span class='notice'>You have cleaned \the [src].</span>" \
)
src.dirty = 0 // It's clean!
src.broken = 0 // just to be sure
src.icon_state = off_icon
src.flags = OPENCONTAINER
dirty = 0 // It's clean!
broken = 0 // just to be sure
icon_state = off_icon
flags = OPENCONTAINER
else //Otherwise bad luck!!
to_chat(user, "<span class='alert'>It's dirty!</span>")
return 1
@@ -161,12 +160,12 @@
else
to_chat(user, "<span class='alert'>You have no idea what you can cook with this [O].</span>")
return 1
src.updateUsrDialog()
updateUsrDialog()
/obj/machinery/kitchen_machine/attack_ai(mob/user as mob)
/obj/machinery/kitchen_machine/attack_ai(mob/user)
return 0
/obj/machinery/kitchen_machine/attack_hand(mob/user as mob)
/obj/machinery/kitchen_machine/attack_hand(mob/user)
user.set_machine(src)
interact(user)
@@ -174,15 +173,15 @@
* Machine Menu *
********************/
/obj/machinery/kitchen_machine/interact(mob/user as mob) // The microwave Menu
/obj/machinery/kitchen_machine/interact(mob/user) // The microwave Menu
if(panel_open || !anchored)
return
var/dat = ""
if(src.broken > 0)
if(broken > 0)
dat = {"<TT>Bzzzzttttt</TT>"}
else if(src.operating)
dat = {"<TT>[pick(src.cook_verbs)] in progress!<BR>Please wait...!</TT>"}
else if(src.dirty==100)
else if(operating)
dat = {"<TT>[pick(cook_verbs)] in progress!<BR>Please wait...!</TT>"}
else if(dirty==100)
dat = {"<TT>This [src] is dirty!<BR>Please clean it before use!</TT>"}
else
var/list/items_counts = new
@@ -237,7 +236,7 @@
var/datum/browser/popup = new(user, name, name, 400, 400)
popup.set_content(dat)
popup.open(0)
onclose(user, "[src.name]")
onclose(user, "[name]")
return
@@ -298,14 +297,14 @@
byproduct = recipe.get_byproduct()
stop()
if(cooked)
cooked.forceMove(src.loc)
cooked.forceMove(loc)
for(var/i=1,i<efficiency,i++)
cooked = new cooked.type(loc)
if(byproduct)
new byproduct(loc)
return
/obj/machinery/kitchen_machine/proc/wzhzhzh(var/seconds as num)
/obj/machinery/kitchen_machine/proc/wzhzhzh(seconds)
for(var/i=1 to seconds)
if(stat & (NOPOWER|BROKEN))
return 0
@@ -323,54 +322,54 @@
return 0
/obj/machinery/kitchen_machine/proc/start()
src.visible_message("<span class='notice'>\The [src] turns on.</span>", "<span class='notice'>You hear \a [src].</span>")
src.operating = 1
src.icon_state = on_icon
src.updateUsrDialog()
visible_message("<span class='notice'>\The [src] turns on.</span>", "<span class='notice'>You hear \a [src].</span>")
operating = 1
icon_state = on_icon
updateUsrDialog()
/obj/machinery/kitchen_machine/proc/abort()
src.operating = 0 // Turn it off again aferwards
src.icon_state = off_icon
src.updateUsrDialog()
operating = 0 // Turn it off again aferwards
icon_state = off_icon
updateUsrDialog()
/obj/machinery/kitchen_machine/proc/stop()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
src.operating = 0 // Turn it off again aferwards
src.icon_state = off_icon
src.updateUsrDialog()
playsound(loc, 'sound/machines/ding.ogg', 50, 1)
operating = 0 // Turn it off again aferwards
icon_state = off_icon
updateUsrDialog()
/obj/machinery/kitchen_machine/proc/dispose()
for(var/obj/O in contents)
O.forceMove(src.loc)
if(src.reagents.total_volume)
src.dirty++
src.reagents.clear_reagents()
O.forceMove(loc)
if(reagents.total_volume)
dirty++
reagents.clear_reagents()
to_chat(usr, "<span class='notice'>You dispose of \the [src]'s contents.</span>")
src.updateUsrDialog()
updateUsrDialog()
/obj/machinery/kitchen_machine/proc/muck_start()
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound
src.icon_state = dirty_icon // Make it look dirty!!
playsound(loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound
icon_state = dirty_icon // Make it look dirty!!
/obj/machinery/kitchen_machine/proc/muck_finish()
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
src.visible_message("<span class='alert'>\The [src] gets covered in muck!</span>")
src.dirty = 100 // Make it dirty so it can't be used util cleaned
src.flags = null //So you can't add condiments
src.icon_state = dirty_icon // Make it look dirty too
src.operating = 0 // Turn it off again aferwards
src.updateUsrDialog()
playsound(loc, 'sound/machines/ding.ogg', 50, 1)
visible_message("<span class='alert'>\The [src] gets covered in muck!</span>")
dirty = 100 // Make it dirty so it can't be used util cleaned
flags = null //So you can't add condiments
icon_state = dirty_icon // Make it look dirty too
operating = 0 // Turn it off again aferwards
updateUsrDialog()
/obj/machinery/kitchen_machine/proc/broke()
var/datum/effect/system/spark_spread/s = new
s.set_up(2, 1, src)
s.start()
src.icon_state = broken_icon // Make it look all busted up and shit
src.visible_message("<span class='alert'>The [src] breaks!</span>") //Let them know they're stupid
src.broken = 2 // Make it broken so it can't be used util fixed
src.flags = null //So you can't add condiments
src.operating = 0 // Turn it off again aferwards
src.updateUsrDialog()
icon_state = broken_icon // Make it look all busted up and shit
visible_message("<span class='alert'>The [src] breaks!</span>") //Let them know they're stupid
broken = 2 // Make it broken so it can't be used util fixed
flags = null //So you can't add condiments
operating = 0 // Turn it off again aferwards
updateUsrDialog()
/obj/machinery/kitchen_machine/proc/fail()
var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src)
@@ -382,7 +381,7 @@
if(id)
amount+=O.reagents.get_reagent_amount(id)
qdel(O)
src.reagents.clear_reagents()
reagents.clear_reagents()
ffuu.reagents.add_reagent("carbon", amount)
ffuu.reagents.add_reagent("????", amount/10)
ffuu.forceMove(get_turf(src))
@@ -392,8 +391,8 @@
return
usr.set_machine(src)
if(src.operating)
src.updateUsrDialog()
if(operating)
updateUsrDialog()
return
switch(href_list["action"])
@@ -33,7 +33,7 @@
cube_production = cubes_made
required_grind = req_grind
/obj/machinery/monkey_recycler/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
/obj/machinery/monkey_recycler/attackby(obj/item/O, mob/user, params)
if(default_deconstruction_screwdriver(user, "grinder_open", "grinder", O))
return
@@ -62,7 +62,7 @@
cycle_through = 0
to_chat(user, "<span class='notice'>You change the monkeycube type to [initial(cube_type.name)].</span>")
if(src.stat != 0) //NOPOWER etc
if(stat != 0) //NOPOWER etc
return
if(istype(O, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = O
@@ -76,11 +76,11 @@
user.drop_item()
qdel(target)
to_chat(user, "<span class='notice'>You stuff the monkey in the machine.</span>")
playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1)
playsound(loc, 'sound/machines/juicer.ogg', 50, 1)
var/offset = prob(50) ? -2 : 2
animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking
use_power(500)
src.grinded++
grinded++
sleep(50)
pixel_x = initial(pixel_x)
to_chat(user, "<span class='notice'>The machine now has [grinded] monkey\s worth of material stored.</span>")
@@ -90,15 +90,15 @@
to_chat(user, "<span class='warning'>The machine only accepts monkeys!</span>")
return
/obj/machinery/monkey_recycler/attack_hand(var/mob/user as mob)
if(src.stat != 0) //NOPOWER etc
/obj/machinery/monkey_recycler/attack_hand(mob/user)
if(stat != 0) //NOPOWER etc
return
if(grinded >= required_grind)
to_chat(user, "<span class='notice'>The machine hisses loudly as it condenses the grinded monkey meat. After a moment, it dispenses a brand new monkey cube.</span>")
playsound(src.loc, 'sound/machines/hiss.ogg', 50, 1)
playsound(loc, 'sound/machines/hiss.ogg', 50, 1)
grinded -= required_grind
for(var/i = 0, i < cube_production, i++) // Forgot to fix this bit the first time through
new cube_type(src.loc)
new cube_type(loc)
to_chat(user, "<span class='notice'>The machine's display flashes that it has [grinded] monkey\s worth of material left.</span>")
else // I'm not sure if the \s macro works with a word in between; I'll play it safe
to_chat(user, "<span class='warning'>The machine needs at least [required_grind] monkey\s worth of material to compress [cube_production] monkey\s. It only has [grinded].</span>")
@@ -60,7 +60,7 @@
food_choices.Remove(U)
for(var/U in subtypesof(/obj/item/weapon/reagent_containers/food/snacks/customizable/cook))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/cook/V = new U
src.food_choices += V
food_choices += V
return
/obj/machinery/cooking/candy
@@ -75,5 +75,5 @@
food_choices.Remove(U)
for(var/U in subtypesof(/obj/item/weapon/reagent_containers/food/snacks/customizable/candy))
var/obj/item/weapon/reagent_containers/food/snacks/customizable/candy/V = new U
src.food_choices += V
food_choices += V
return
@@ -58,9 +58,9 @@
var/time = 40
/datum/food_processor_process/proc/process_food(loc, what, obj/machinery/processor/processor)
if(src.output && loc && processor)
if(output && loc && processor)
for(var/i = 0, i < processor.rating_amount, i++)
new src.output(loc)
new output(loc)
if(what)
qdel(what)
@@ -154,9 +154,9 @@
return P
return 0
/obj/machinery/processor/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
/obj/machinery/processor/attackby(obj/item/O, mob/user, params)
if(src.processing)
if(processing)
to_chat(user, "<span class='warning'>\the [src] is already processing something!</span>")
return 1
@@ -191,25 +191,25 @@
what.loc = src
return
/obj/machinery/processor/attack_hand(var/mob/user as mob)
/obj/machinery/processor/attack_hand(mob/user)
if(stat & (NOPOWER|BROKEN)) //no power or broken
return
if(src.processing)
if(processing)
to_chat(user, "<span class='warning'>\the [src] is already processing something!</span>")
return 1
if(src.contents.len == 0)
if(contents.len == 0)
to_chat(user, "<span class='warning'>\the [src] is empty.</span>")
return 1
src.processing = 1
processing = 1
user.visible_message("[user] turns on [src].", \
"<span class='notice'>You turn on [src].</span>", \
"<span class='italics'>You hear a food processor.</span>")
playsound(src.loc, 'sound/machines/blender.ogg', 50, 1)
playsound(loc, 'sound/machines/blender.ogg', 50, 1)
use_power(500)
var/total_time = 0
for(var/O in src.contents)
for(var/O in contents)
var/datum/food_processor_process/P = select_recipe(O)
if(!P)
log_debug("The [O] in processor([src]) does not have a suitable recipe, but it was somehow put inside of the processor anyways.")
@@ -217,14 +217,14 @@
total_time += P.time
sleep(total_time / rating_speed)
for(var/O in src.contents)
for(var/O in contents)
var/datum/food_processor_process/P = select_recipe(O)
if(!P)
log_debug("The [O] in processor([src]) does not have a suitable recipe, but it was somehow put inside of the processor anyways.")
continue
P.process_food(src.loc, O, src)
src.processing = 0
P.process_food(loc, O, src)
processing = 0
src.visible_message("<span class='notice'>\the [src] has finished processing.</span>", \
visible_message("<span class='notice'>\the [src] has finished processing.</span>", \
"<span class='notice'>\the [src] has finished processing.</span>", \
"<span class='notice'>You hear a food processor stopping.</span>")
@@ -53,7 +53,7 @@
A.forceMove(loc)
return ..()
/obj/machinery/smartfridge/proc/accept_check(var/obj/item/O as obj)
/obj/machinery/smartfridge/proc/accept_check(obj/item/O)
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown/) || istype(O,/obj/item/seeds/))
return 1
return 0
@@ -66,7 +66,7 @@
icon_on = "seeds"
icon_off = "seeds-off"
/obj/machinery/smartfridge/seeds/accept_check(var/obj/item/O as obj)
/obj/machinery/smartfridge/seeds/accept_check(obj/item/O)
if(istype(O,/obj/item/seeds/))
return 1
return 0
@@ -77,7 +77,7 @@
icon_state = "smartfridge" //To fix the icon in the map editor.
icon_on = "smartfridge_chem"
/obj/machinery/smartfridge/medbay/accept_check(var/obj/item/O as obj)
/obj/machinery/smartfridge/medbay/accept_check(obj/item/O)
if(istype(O,/obj/item/weapon/reagent_containers/glass/))
return 1
if(istype(O,/obj/item/weapon/storage/pill_bottle/))
@@ -91,7 +91,7 @@
desc = "A refrigerated storage unit for slime extracts"
req_access_txt = "47"
/obj/machinery/smartfridge/secure/extract/accept_check(var/obj/item/O as obj)
/obj/machinery/smartfridge/secure/extract/accept_check(obj/item/O)
if(istype(O,/obj/item/slime_extract))
return 1
return 0
@@ -103,7 +103,7 @@
icon_on = "smartfridge_chem"
req_one_access_txt = "5;33"
/obj/machinery/smartfridge/secure/medbay/accept_check(var/obj/item/O as obj)
/obj/machinery/smartfridge/secure/medbay/accept_check(obj/item/O)
if(istype(O,/obj/item/weapon/reagent_containers/glass/))
return 1
if(istype(O,/obj/item/weapon/storage/pill_bottle/))
@@ -134,7 +134,7 @@
nanomanager.update_uis(src)
amount--
/obj/machinery/smartfridge/chemistry/accept_check(var/obj/item/O as obj)
/obj/machinery/smartfridge/chemistry/accept_check(obj/item/O)
if(istype(O,/obj/item/weapon/storage/pill_bottle) || istype(O,/obj/item/weapon/reagent_containers))
return 1
return 0
@@ -154,7 +154,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/plasma = 1,
/obj/item/weapon/reagent_containers/glass/bottle/diphenhydramine = 1)
/obj/machinery/smartfridge/secure/chemistry/virology/accept_check(var/obj/item/O as obj)
/obj/machinery/smartfridge/secure/chemistry/virology/accept_check(obj/item/O)
if(istype(O, /obj/item/weapon/reagent_containers/syringe) || istype(O, /obj/item/weapon/reagent_containers/glass/bottle) || istype(O, /obj/item/weapon/reagent_containers/glass/beaker))
return 1
return 0
@@ -163,17 +163,17 @@
name = "\improper Drink Showcase"
desc = "A refrigerated storage unit for tasty tasty alcohol."
/obj/machinery/smartfridge/drinks/accept_check(var/obj/item/O as obj)
/obj/machinery/smartfridge/drinks/accept_check(obj/item/O)
if(istype(O,/obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks) || istype(O,/obj/item/weapon/reagent_containers/food/condiment))
return 1
/obj/machinery/smartfridge/process()
if(stat & (BROKEN|NOPOWER))
return
if(src.seconds_electrified > 0)
src.seconds_electrified--
if(src.shoot_inventory && prob(2))
src.throw_item()
if(seconds_electrified > 0)
seconds_electrified--
if(shoot_inventory && prob(2))
throw_item()
/obj/machinery/smartfridge/power_change()
var/old_stat = stat
@@ -192,9 +192,9 @@
* Item Adding
********************/
/obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob)
/obj/machinery/smartfridge/attackby(obj/item/O, mob/user)
if(istype(O, /obj/item/weapon/screwdriver) && anchored)
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
panel_open = !panel_open
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
overlays.Cut()
@@ -271,20 +271,20 @@
return 1
return 0
/obj/machinery/smartfridge/attack_ai(mob/user as mob)
/obj/machinery/smartfridge/attack_ai(mob/user)
return 0
/obj/machinery/smartfridge/attack_ghost(mob/user as mob)
return src.attack_hand(user)
/obj/machinery/smartfridge/attack_ghost(mob/user)
return attack_hand(user)
/obj/machinery/smartfridge/attack_hand(mob/user as mob)
/obj/machinery/smartfridge/attack_hand(mob/user)
if(stat & (NOPOWER|BROKEN))
return
wires.Interact(user)
ui_interact(user)
//Drag pill bottle to fridge to empty it into the fridge
/obj/machinery/smartfridge/MouseDrop_T(obj/over_object as obj, mob/user as mob)
/obj/machinery/smartfridge/MouseDrop_T(obj/over_object, mob/user)
if(!istype(over_object, /obj/item/weapon/storage/pill_bottle)) //Only pill bottles, please
return
@@ -305,7 +305,7 @@
to_chat(user, "<span class='notice'>Some items are refused.</span>")
nanomanager.update_uis(src)
/obj/machinery/smartfridge/secure/emag_act(user as mob)
/obj/machinery/smartfridge/secure/emag_act(user)
emagged = 1
locked = -1
to_chat(user, "You short out the product lock on [src].")
@@ -314,7 +314,7 @@
* SmartFridge Menu
********************/
/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
user.set_machine(src)
var/data[0]
@@ -336,7 +336,7 @@
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "smartfridge.tmpl", src.name, 400, 500)
ui = new(user, src, ui_key, "smartfridge.tmpl", name, 400, 500)
ui.set_initial_data(data)
ui.open()
@@ -346,7 +346,7 @@
var/mob/user = usr
var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main")
src.add_fingerprint(user)
add_fingerprint(user)
if(href_list["close"])
user.unset_machine()
@@ -387,7 +387,7 @@
item_quants[O]--
for(var/obj/T in contents)
if(T.name == O)
T.forceMove(src.loc)
T.forceMove(loc)
throw_item = T
break
break
@@ -395,7 +395,7 @@
return 0
spawn(0)
throw_item.throw_at(target,16,3,src)
src.visible_message("<span class='warning'>[src] launches [throw_item.name] at [target.name]!</span>")
visible_message("<span class='warning'>[src] launches [throw_item.name] at [target.name]!</span>")
return 1
/************************
@@ -78,6 +78,11 @@
items = list(/obj/item/weapon/reagent_containers/food/snacks/egg)
result = /obj/item/weapon/reagent_containers/food/snacks/candy/nougat
/datum/recipe/candy/nougat/make_food(obj/container)
var/obj/item/weapon/reagent_containers/food/snacks/candy/nougat/being_cooked = ..()
being_cooked.reagents.del_reagent("egg")
return being_cooked
// ***********************************************************
// Base Candy Recipes (unflavored / plain)
// ***********************************************************
@@ -89,6 +89,11 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers
/datum/recipe/grill/fishfingers/make_food(obj/container)
var/obj/item/weapon/reagent_containers/food/snacks/fishfingers/being_cooked = ..()
being_cooked.reagents.del_reagent("egg")
return being_cooked
/datum/recipe/grill/cutlet
items = list(
/obj/item/weapon/reagent_containers/food/snacks/rawcutlet
@@ -205,10 +205,11 @@
reagents = list("water" = 5, "vodka" = 5)
fruit = list("amanita" = 3)
result = /obj/item/weapon/reagent_containers/food/snacks/amanitajelly
make_food(var/obj/container as obj)
var/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/being_cooked = ..(container)
being_cooked.reagents.del_reagent("amanitin")
return being_cooked
/datum/recipe/microwave/amanitajelly/make_food(obj/container)
var/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/being_cooked = ..()
being_cooked.reagents.del_reagent("amanitin")
return being_cooked
/datum/recipe/microwave/meatballsoup
reagents = list("water" = 10)
@@ -538,10 +539,11 @@ datum/recipe/microwave/slimesandwich
/datum/recipe/microwave/herbsalad
fruit = list("ambrosia" = 3, "apple" = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/herbsalad
make_food(var/obj/container as obj)
var/obj/item/weapon/reagent_containers/food/snacks/herbsalad/being_cooked = ..(container)
being_cooked.reagents.del_reagent("toxin")
return being_cooked
/datum/recipe/microwave/herbsalad/make_food(obj/container)
var/obj/item/weapon/reagent_containers/food/snacks/herbsalad/being_cooked = ..()
being_cooked.reagents.del_reagent("toxin")
return being_cooked
/datum/recipe/microwave/aesirsalad
fruit = list("ambrosiadeus" = 3, "goldapple" = 1)
@@ -553,10 +555,11 @@ datum/recipe/microwave/slimesandwich
/obj/item/weapon/reagent_containers/food/snacks/meatball,
)
result = /obj/item/weapon/reagent_containers/food/snacks/validsalad
make_food(var/obj/container as obj)
var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked = ..(container)
being_cooked.reagents.del_reagent("toxin")
return being_cooked
/datum/recipe/microwave/validsalad/make_food(obj/container)
var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked = ..()
being_cooked.reagents.del_reagent("toxin")
return being_cooked
////////////////////////////FOOD ADDITTIONS///////////////////////////////
@@ -176,20 +176,22 @@
/obj/item/weapon/paper,
)
result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie
make_food(var/obj/container as obj)
/datum/recipe/oven/fortunecookie/make_food(obj/container)
var/obj/item/weapon/paper/paper = locate() in container
paper.loc = null //prevent deletion
var/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/being_cooked = ..()
paper.loc = being_cooked
being_cooked.trash = paper //so the paper is left behind as trash without special-snowflake(TM Nodrak) code ~carn
return being_cooked
/datum/recipe/oven/fortunecookie/check_items(obj/container)
. = ..()
if(.)
var/obj/item/weapon/paper/paper = locate() in container
paper.loc = null //prevent deletion
var/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/being_cooked = ..(container)
paper.loc = being_cooked
being_cooked.trash = paper //so the paper is left behind as trash without special-snowflake(TM Nodrak) code ~carn
return being_cooked
check_items(var/obj/container as obj)
. = ..()
if(.)
var/obj/item/weapon/paper/paper = locate() in container
if(!paper || !paper.info)
return -1
return .
if(!paper || !paper.info)
return -1
return .
/datum/recipe/oven/pizzamargherita
fruit = list("tomato" = 1)
@@ -293,6 +295,11 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread
/datum/recipe/oven/bread/make_food(obj/container)
var/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread/being_cooked = ..()
being_cooked.reagents.del_reagent("egg")
return being_cooked
/datum/recipe/oven/applepie
fruit = list("apple" = 1)
items = list(
@@ -377,6 +384,11 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/appletart
/datum/recipe/oven/appletart/make_food(obj/container)
var/obj/item/weapon/reagent_containers/food/snacks/appletart/being_cooked = ..()
being_cooked.reagents.del_reagent("egg")
return being_cooked
/datum/recipe/oven/cracker
reagents = list("sodiumchloride" = 1)
items = list(
@@ -392,6 +404,11 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie
/datum/recipe/oven/sugarcookie/make_food(obj/container)
var/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/being_cooked = ..()
being_cooked.reagents.del_reagent("egg")
return being_cooked
/datum/recipe/oven/flatbread
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough
@@ -31,7 +31,7 @@
/datum/crafting_recipe/cherrysandwich
name = "Cherry Jelly Sandwich"
reqs = list(
/datum/reagent/cherryjelly = 5,
/datum/reagent/consumable/cherryjelly = 5,
/obj/item/weapon/reagent_containers/food/snacks/breadslice = 2,
)
result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry
@@ -49,7 +49,7 @@
/datum/crafting_recipe/jellyburger
name = "Cherry Jelly Burger"
reqs = list(
/datum/reagent/cherryjelly = 5,
/datum/reagent/consumable/cherryjelly = 5,
/obj/item/weapon/reagent_containers/food/snacks/bun = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry
+2 -4
View File
@@ -13,9 +13,7 @@
..()
var/datum/reagents/R = new/datum/reagents(50)
reagents = R
R.my_atom = src
create_reagents(50)
//Handle some post-spawn var stuff.
if(planttype)
@@ -98,7 +96,7 @@
to_chat(M, "<span class='danger'>You are stunned by the powerful acid of the Deathnettle!</span>")
add_logs(user, M, "attacked", src)
M.eye_blurry += force/7
M.AdjustEyeBlurry(force/7)
if(prob(20))
M.Paralyse(force / 6)
M.Weaken(force / 15)
+6 -1
View File
@@ -380,10 +380,12 @@
//--FalseIncarnate
/obj/machinery/portable_atmospherics/hydroponics/verb/remove_label()
set name = "Remove Label"
set category = "Object"
set src in view(1)
if(usr.incapacitated())
return
if(labelled)
to_chat(usr, "You remove the label.")
@@ -397,6 +399,9 @@
set name = "Set Light"
set category = "Object"
set src in view(1)
if(usr.incapacitated())
return
var/new_light = input("Specify a light level.") as null|anything in list(0,1,2,3,4,5,6,7,8,9,10)
if(new_light)
+11 -2
View File
@@ -13,19 +13,23 @@
origin_tech = "magnets=1;biotech=1"
var/form_title
var/last_data
var/print_cooldown = 0
var/cooldown_length = 50 // Five seconds
/obj/item/device/analyzer/plant_analyzer/proc/print_report_verb()
set name = "Print Plant Report"
set category = "Object"
set src = usr
if(usr.stat || usr.restrained() || usr.lying)
if(usr.incapacitated())
return
print_report(usr)
/obj/item/device/analyzer/plant_analyzer/Topic(href, href_list)
if(..())
return
return 1
if(href_list["print"])
print_report(usr)
@@ -33,6 +37,11 @@
if(!last_data)
to_chat(user, "There is no scan data to print.")
return
if(print_cooldown > world.time)
to_chat(user, "<span class='warning'>The printer is still cooling down.</span>")
return
print_cooldown = world.time + cooldown_length
playsound(loc, "sound/goonstation/machines/printer_thermal.ogg", 50, 1)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src))
P.name = "paper - [form_title]"
+4 -4
View File
@@ -114,9 +114,9 @@
/datum/light_source/proc/parse_light_color()
if(light_color)
lum_r = GetRedPart(light_color) / 255
lum_g = GetGreenPart(light_color) / 255
lum_b = GetBluePart(light_color) / 255
lum_r = color2R(light_color) / 255
lum_g = color2G(light_color) / 255
lum_b = color2B(light_color) / 255
else
lum_r = 1
lum_g = 1
@@ -195,7 +195,7 @@
effect_str.Cut()
effect_turf.Cut()
/datum/light_source/proc/forget_turf(turf/T)
var/idx = effect_turf.Find(T)
effect_turf.Cut(idx, idx + 1)
+3 -3
View File
@@ -88,7 +88,7 @@
D.visible_message("<span class='warning'>[A] pounds [D] on the chest!</span>", \
"<span class='userdanger'>[A] slams your chest! You can't breathe!</span>")
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
D.losebreath += 5
D.AdjustLoseBreath(5)
D.adjustOxyLoss(10)
return 1
@@ -97,7 +97,7 @@
"<span class='userdanger'>[A] karate chops your neck, rendering you unable to speak for a short time!</span>")
playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1)
D.apply_damage(5, BRUTE)
D.silent += 10
D.AdjustSilence(10)
return 1
datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
@@ -170,4 +170,4 @@ datum/martial_art/krav_maga/grab_act(var/mob/living/carbon/human/A, var/mob/livi
name = "krav maga gloves"
desc = "These gloves can teach you to perform Krav Maga using nanochips."
icon_state = "fightgloves"
item_state = "fightgloves"
item_state = "fightgloves"
+1 -1
View File
@@ -66,7 +66,7 @@
D.visible_message("<span class='warning'>[A] knees [D] in the stomach!</span>", \
"<span class='userdanger'>[A] winds you with a knee in the stomach!</span>")
D.audible_message("<b>[D]</b> gags!")
D.losebreath += 3
D.AdjustLoseBreath(3)
D.Stun(2)
playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1)
if(prob(80))
-1
View File
@@ -344,7 +344,6 @@
desc = "An easily-compressable wall used for temporary shelter."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "smooth"
walltype = "shuttle"
smooth = SMOOTH_MORE // To Do: Add in Diagnaol Smooth Support
canSmoothWith = list(/turf/simulated/wall/survival, /obj/machinery/door/airlock/survival_pod)
+4 -4
View File
@@ -28,7 +28,7 @@
//non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet.
if(language && (language.flags & NONVERBAL))
if(disabilities & BLIND || blinded) //blind people can't see dumbass
if(!has_vision()) //blind people can't see dumbass
message = stars(message)
if(!speaker || !(speaker in view(src)))
@@ -65,7 +65,7 @@
if(client.prefs.toggles & CHAT_GHOSTEARS && speaker in view(src))
message = "<b>[message]</b>"
if(disabilities & DEAF || ear_deaf)
if(!can_hear())
if(!language || !(language.flags & INNATE)) // INNATE is the flag for audible-emote-language, so we don't want to show an "x talks but you cannot hear them" message if it's set
if(speaker == src)
to_chat(src, "<span class='warning'>You cannot hear yourself speak!</span>")
@@ -95,7 +95,7 @@
//non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet.
if(language && (language.flags & NONVERBAL))
if(disabilities & BLIND || blinded) //blind people can't see dumbass
if(!has_vision()) //blind people can't see dumbass
message = stars(message)
if(!speaker || !(speaker in view(src)))
@@ -182,7 +182,7 @@
formatted = language.format_message_radio(message, verb)
else
formatted = "[verb], <span class=\"body\">\"[message]\"</span>"
if(disabilities & DEAF || ear_deaf)
if(!can_hear())
if(prob(20))
to_chat(src, "<span class='warning'>You feel your headset vibrate but can hear nothing from it!</span>")
else if(track)
+1 -1
View File
@@ -605,7 +605,7 @@
return ..()
// Can we speak this language, as opposed to just understanding it?
/mob/proc/can_speak(datum/language/speaking)
/mob/proc/can_speak_language(datum/language/speaking)
return (universal_speak || (speaking && speaking.flags & INNATE) || speaking in src.languages)
@@ -28,12 +28,14 @@
var/leaping = 0
ventcrawler = 2
var/list/alien_organs = list()
/mob/living/carbon/alien/New()
verbs += /mob/living/verb/mob_sleep
verbs += /mob/living/verb/lay_down
internal_organs += new /obj/item/organ/internal/brain/xeno
internal_organs += new /obj/item/organ/internal/xenos/hivenode
for(var/obj/item/organ/internal/I in internal_organs)
alien_organs += new /obj/item/organ/internal/brain/xeno
alien_organs += new /obj/item/organ/internal/xenos/hivenode
for(var/obj/item/organ/internal/I in alien_organs)
I.insert(src)
..()
@@ -161,8 +163,8 @@
show_stat_emergency_shuttle_eta()
/mob/living/carbon/alien/SetStunned(amount)
..(amount)
/mob/living/carbon/alien/SetStunned(amount, updating = 1, force = 0)
..()
if(!(status_flags & CANSTUN) && amount)
// add some movement delay
move_delay_add = min(move_delay_add + round(amount / 2), 10) // a maximum delay of 10
@@ -15,9 +15,8 @@ In all, this is a lot like the monkey code. /N
return
switch(M.a_intent)
if(I_HELP)
sleeping = max(0,sleeping-5)
AdjustSleeping(-5)
resting = 0
AdjustParalysis(-3)
AdjustStunned(-3)
@@ -25,11 +24,12 @@ In all, this is a lot like the monkey code. /N
visible_message("<span class='notice'>[M.name] nuzzles [src] trying to wake it up!</span>")
if(I_GRAB)
src.grabbedby(M)
grabbedby(M)
return 1
else
if(health > 0)
M.do_attack_animation(src)
playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
var/damage = 1
visible_message("<span class='danger'>[M.name] bites [src]!</span>", \
@@ -39,13 +39,10 @@ In all, this is a lot like the monkey code. /N
updatehealth()
else
to_chat(M, "<span class='warning'>[name] is too injured for that.</span>")
return
/mob/living/carbon/alien/attack_larva(mob/living/carbon/alien/larva/L as mob)
return attack_alien(L)
/mob/living/carbon/alien/attack_hand(mob/living/carbon/human/M as mob)
if(..()) //to allow surgery to return properly.
return 0
@@ -56,7 +53,7 @@ In all, this is a lot like the monkey code. /N
if(I_HELP)
help_shake_act(M)
if(I_GRAB)
src.grabbedby(M)
grabbedby(M)
if(I_HARM, I_DISARM)
return 1
return 0
@@ -6,15 +6,13 @@
icon_state = "aliend_s"
/mob/living/carbon/alien/humanoid/drone/New()
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
create_reagents(100)
if(src.name == "alien drone")
src.name = text("alien drone ([rand(1, 1000)])")
src.real_name = src.name
internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/drone
internal_organs += new /obj/item/organ/internal/xenos/acidgland
internal_organs += new /obj/item/organ/internal/xenos/resinspinner
alien_organs += new /obj/item/organ/internal/xenos/plasmavessel/drone
alien_organs += new /obj/item/organ/internal/xenos/acidgland
alien_organs += new /obj/item/organ/internal/xenos/resinspinner
..()
//Drones use the same base as generic humanoids.
@@ -6,13 +6,11 @@
icon_state = "alienh_s"
/mob/living/carbon/alien/humanoid/hunter/New()
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
create_reagents(100)
if(name == "alien hunter")
name = text("alien hunter ([rand(1, 1000)])")
real_name = name
internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/hunter
alien_organs += new /obj/item/organ/internal/xenos/plasmavessel/hunter
..()
/mob/living/carbon/alien/humanoid/hunter/handle_regular_hud_updates()
@@ -108,7 +106,7 @@
sleep(2)//Runtime prevention (infinite bump() calls on hulks)
step_towards(src,L)
else
weakened = 2
Weaken(2, 1, 1)
toggle_leap(0)
pounce_cooldown = !pounce_cooldown
@@ -116,7 +114,7 @@
pounce_cooldown = !pounce_cooldown
else if(A.density && !A.CanPass(src))
visible_message("<span class ='danger'>[src] smashes into [A]!</span>", "<span class ='alertalien'>[src] smashes into [A]!</span>")
weakened = 2
Weaken(2, 1, 1)
if(leaping)
leaping = 0
@@ -35,15 +35,13 @@
overlays += I
/mob/living/carbon/alien/humanoid/sentinel/New()
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
create_reagents(100)
if(name == "alien sentinel")
name = text("alien sentinel ([rand(1, 1000)])")
real_name = name
internal_organs += new /obj/item/organ/internal/xenos/plasmavessel
internal_organs += new /obj/item/organ/internal/xenos/acidgland
internal_organs += new /obj/item/organ/internal/xenos/neurotoxin
alien_organs += new /obj/item/organ/internal/xenos/plasmavessel
alien_organs += new /obj/item/organ/internal/xenos/acidgland
alien_organs += new /obj/item/organ/internal/xenos/neurotoxin
..()
/mob/living/carbon/alien/humanoid/sentinel/handle_regular_hud_updates()
@@ -31,9 +31,7 @@
overlays += I
/mob/living/carbon/alien/humanoid/empress/New()
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
create_reagents(100)
//there should only be one queen
for(var/mob/living/carbon/alien/humanoid/empress/E in living_mob_list)
@@ -44,11 +42,11 @@
break
real_name = src.name
internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/queen
internal_organs += new /obj/item/organ/internal/xenos/acidgland
internal_organs += new /obj/item/organ/internal/xenos/eggsac
internal_organs += new /obj/item/organ/internal/xenos/resinspinner
internal_organs += new /obj/item/organ/internal/xenos/neurotoxin
alien_organs += new /obj/item/organ/internal/xenos/plasmavessel/queen
alien_organs += new /obj/item/organ/internal/xenos/acidgland
alien_organs += new /obj/item/organ/internal/xenos/eggsac
alien_organs += new /obj/item/organ/internal/xenos/resinspinner
alien_organs += new /obj/item/organ/internal/xenos/neurotoxin
..()
/mob/living/carbon/alien/humanoid/empress
@@ -16,9 +16,7 @@
//This is fine right now, if we're adding organ specific damage this needs to be updated
/mob/living/carbon/alien/humanoid/New()
var/datum/reagents/R = new/datum/reagents(1000)
reagents = R
R.my_atom = src
create_reagents(1000)
if(name == "alien")
name = text("alien ([rand(1, 1000)])")
real_name = name
@@ -96,13 +94,15 @@
f_loss += 60
adjustEarDamage(30, 120)
AdjustEarDamage(30)
AdjustEarDeaf(120)
if(3.0)
b_loss += 30
if(prob(50) && !shielded)
Paralyse(1)
adjustEarDamage(15,60)
AdjustEarDamage(15)
AdjustEarDeaf(60)
adjustBruteLoss(b_loss)
adjustFireLoss(f_loss)
@@ -243,70 +243,6 @@
visible_message("<span class='danger'>[M] has attempted to disarm [src]!</span>")
return
/*Code for aliens attacking aliens. Because aliens act on a hivemind, I don't see them as very aggressive with each other.
As such, they can either help or harm other aliens. Help works like the human help command while harm is a simple nibble.
In all, this is a lot like the monkey code. /N
*/
/mob/living/carbon/alien/humanoid/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
if(!ticker)
to_chat(M, "You cannot attack people before the game has started.")
return
if(istype(loc, /turf) && istype(loc.loc, /area/start))
to_chat(M, "No attacking people at spawn, you jackass.")
return
..()
switch(M.a_intent)
if(I_HELP)
sleeping = max(0,sleeping-5)
resting = 0
AdjustParalysis(-3)
AdjustStunned(-3)
AdjustWeakened(-3)
visible_message("<span class='notice'>[M.name] nuzzles [src] trying to wake it up!</span>")
else
if(health > 0)
M.do_attack_animation(src)
playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
var/damage = rand(1, 3)
visible_message("<span class='danger'>[M.name] bites [src]!!</span>", \
"<span class='userdanger'>[M.name] bites [src]!!</span>")
adjustBruteLoss(damage)
updatehealth()
else
to_chat(M, "<span class='warning'>[name] is too injured for that.</span>")
return
/mob/living/carbon/alien/humanoid/attack_larva(mob/living/carbon/alien/larva/L as mob)
switch(L.a_intent)
if(I_HELP)
visible_message("<span class='notice'>[L] rubs its head against [src].</span>")
else
if(health > 0)
L.do_attack_animation(src)
playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
var/damage = rand(1, 3)
visible_message("<span class='danger'>[L.name] bites [src]!!</span>", \
"<span class='userdanger'>[L.name] bites [src]!!</span>")
adjustBruteLoss(damage)
updatehealth()
else
to_chat(L, "<span class='warning'>[name] is too injured for that.</span>")
return
/mob/living/carbon/alien/humanoid/restrained()
if(handcuffed)
return 1
@@ -362,4 +298,4 @@ In all, this is a lot like the monkey code. /N
return initial(pixel_x)
/mob/living/carbon/alien/humanoid/get_permeability_protection()
return 0.8
return 0.8
@@ -57,18 +57,17 @@
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
silent = 0
SetSilence(0)
else //ALIVE. LIGHTS ARE ON
if(health < config.health_threshold_dead || !get_int_organ(/obj/item/organ/internal/brain))
death()
blinded = 1
stat = DEAD
silent = 0
SetSilence(0)
return 1
//UNCONSCIOUS. NO-ONE IS HOME
if( (getOxyLoss() > 50) || (config.health_threshold_crit >= health) )
if( health <= 20 && prob(1) )
if((getOxyLoss() > 50) || (config.health_threshold_crit >= health))
if(health <= 20 && prob(1))
spawn(0)
emote("gasp")
if(!reagents.has_reagent("epinephrine"))
@@ -76,14 +75,12 @@
Paralyse(3)
if(paralysis)
AdjustParalysis(-1)
blinded = 1
stat = UNCONSCIOUS
else if(sleeping)
sleeping = max(sleeping-1, 0)
blinded = 1
stat = UNCONSCIOUS
if( prob(10) && health )
if(prob(10) && health)
spawn(0)
emote("hiss")
//CONSCIOUS
@@ -98,36 +95,25 @@
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
blinded = 1
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
AdjustEyeBlind(-1)
blinded = 1
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
AdjustEyeBlurry(-1)
//Ears
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
setEarDamage(-1, max(ear_deaf, 1))
EarDeaf(1)
else if(ear_deaf) //deafness, heals slowly over time
adjustEarDamage(0,-1)
AdjustEarDeaf(-1)
else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
adjustEarDamage(-0.05, 0)
//Other
if(stunned)
AdjustStunned(-1)
if(!stunned)
update_icons()
if(weakened)
weakened = max(weakened-1,0)
if(!weakened)
update_icons()
AdjustEarDamage(-0.05)
if(stuttering)
stuttering = max(stuttering-1, 0)
AdjustStuttering(-1)
if(silent)
silent = max(silent-1, 0)
AdjustSilence(-1)
if(druggy)
druggy = max(druggy-1, 0)
return 1
AdjustDruggy(-1)
return 1
@@ -10,9 +10,7 @@
ventcrawler = 0
/mob/living/carbon/alien/humanoid/queen/New()
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
create_reagents(100)
//there should only be one queen
for(var/mob/living/carbon/alien/humanoid/queen/Q in living_mob_list)
@@ -23,11 +21,11 @@
break
real_name = src.name
internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/queen
internal_organs += new /obj/item/organ/internal/xenos/acidgland
internal_organs += new /obj/item/organ/internal/xenos/eggsac
internal_organs += new /obj/item/organ/internal/xenos/resinspinner
internal_organs += new /obj/item/organ/internal/xenos/neurotoxin
alien_organs += new /obj/item/organ/internal/xenos/plasmavessel/queen
alien_organs += new /obj/item/organ/internal/xenos/acidgland
alien_organs += new /obj/item/organ/internal/xenos/eggsac
alien_organs += new /obj/item/organ/internal/xenos/resinspinner
alien_organs += new /obj/item/organ/internal/xenos/neurotoxin
..()
@@ -15,16 +15,14 @@
//This is fine right now, if we're adding organ specific damage this needs to be updated
/mob/living/carbon/alien/larva/New()
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
create_reagents(100)
if(name == "alien larva")
name = "alien larva ([rand(1, 1000)])"
real_name = name
regenerate_icons()
add_language("Xenomorph")
add_language("Hivemind")
internal_organs += new /obj/item/organ/internal/xenos/plasmavessel/larva
alien_organs += new /obj/item/organ/internal/xenos/plasmavessel/larva
..()
@@ -88,13 +86,15 @@
f_loss += 60
adjustEarDamage(30,120)
AdjustEarDamage(30)
AdjustEarDeaf(120)
if(3.0)
b_loss += 30
if(prob(50))
Paralyse(1)
adjustEarDamage(15,60)
AdjustEarDamage(15)
AdjustEarDeaf(60)
adjustBruteLoss(b_loss)
adjustFireLoss(f_loss)
@@ -190,41 +190,6 @@
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message("<span class='danger'>[M] has attempted to kick [src]!</span>", \
"<span class='userdanger'>[M] has attempted to kick [src]!</span>")
return
/mob/living/carbon/alien/larva/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
if(!ticker)
to_chat(M, "You cannot attack people before the game has started.")
return
if(istype(loc, /turf) && istype(loc.loc, /area/start))
to_chat(M, "No attacking people at spawn, you jackass.")
return
..()
switch(M.a_intent)
if(I_HELP)
sleeping = max(0,sleeping-5)
resting = 0
AdjustParalysis(-3)
AdjustStunned(-3)
AdjustWeakened(-3)
visible_message("<span class='notice'>[M.name] nuzzles [src] trying to wake it up!</span>")
else
if(health > 0)
M.do_attack_animation(src)
playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
var/damage = 1
visible_message("<span class='danger'>[M.name] bites [src]!</span>", \
"<span class='userdanger'>[M.name] bites [src]!</span>")
adjustBruteLoss(damage)
updatehealth()
else
to_chat(M, "<span class='warning'>[name] is too injured for that.</span>")
return
/mob/living/carbon/alien/larva/restrained()
return 0
@@ -17,12 +17,12 @@
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
blinded = 1
silent = 0
SetSilence(0)
else //ALIVE. LIGHTS ARE ON
if(health < -25 || !get_int_organ(/obj/item/organ/internal/brain))
death()
blinded = 1
silent = 0
SetSilence(0)
return 1
//UNCONSCIOUS. NO-ONE IS HOME
@@ -35,11 +35,9 @@
Paralyse(3)
if(paralysis)
AdjustParalysis(-2)
blinded = 1
stat = UNCONSCIOUS
else if(sleeping)
sleeping = max(sleeping-1, 0)
blinded = 1
stat = UNCONSCIOUS
if( prob(10) && health )
@@ -57,32 +55,25 @@
if(disabilities & BLIND) //disabled-blind, doesn't get better on its own
blinded = 1
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
AdjustEyeBlind(-1)
blinded = 1
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
AdjustEyeBlurry(-1)
//Ears
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
setEarDamage(-1, max(ear_deaf, 1))
EarDeaf(1)
else if(ear_deaf) //deafness, heals slowly over time
adjustEarDamage(0,-1)
AdjustEarDeaf(-1)
else if(ear_damage < 25) //ear damage heals slowly under this threshold.
adjustEarDamage(-0.05,0)
//Other
if(stunned)
AdjustStunned(-1)
if(weakened)
weakened = max(weakened-1,0)
AdjustEarDamage(-0.05)
if(stuttering)
stuttering = max(stuttering-1, 0)
AdjustStuttering(-1)
if(silent)
silent = max(silent-1, 0)
AdjustSilence(-1)
if(druggy)
druggy = max(druggy-1, 0)
return 1
AdjustDruggy(-1)
return 1
+36 -38
View File
@@ -8,45 +8,43 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "brain1"
New()
var/datum/reagents/R = new/datum/reagents(330)
reagents = R
R.my_atom = src
..()
/mob/living/carbon/brain/New()
create_reagents(330)
..()
Destroy()
if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting.
if(stat!=DEAD) //If not dead.
death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA
ghostize() //Ghostize checks for key so nothing else is necessary.
return ..()
/mob/living/carbon/brain/Destroy()
if(key) //If there is a mob connected to this thing. Have to check key twice to avoid false death reporting.
if(stat!=DEAD) //If not dead.
death(1) //Brains can die again. AND THEY SHOULD AHA HA HA HA HA HA
ghostize() //Ghostize checks for key so nothing else is necessary.
return ..()
say_understands(var/other)//Goddamn is this hackish, but this say code is so odd
if(istype(other, /mob/living/silicon/ai))
if(!(container && istype(container, /obj/item/device/mmi)))
return 0
else
return 1
if(istype(other, /mob/living/silicon/decoy))
if(!(container && istype(container, /obj/item/device/mmi)))
return 0
else
return 1
if(istype(other, /mob/living/silicon/pai))
if(!(container && istype(container, /obj/item/device/mmi)))
return 0
else
return 1
if(istype(other, /mob/living/silicon/robot))
if(!(container && istype(container, /obj/item/device/mmi)))
return 0
else
return 1
if(istype(other, /mob/living/carbon/human))
/mob/living/carbon/brain/say_understands(other)//Goddamn is this hackish, but this say code is so odd
if(istype(other, /mob/living/silicon/ai))
if(!(container && istype(container, /obj/item/device/mmi)))
return 0
else
return 1
if(istype(other, /mob/living/carbon/slime))
if(istype(other, /mob/living/silicon/decoy))
if(!(container && istype(container, /obj/item/device/mmi)))
return 0
else
return 1
return ..()
if(istype(other, /mob/living/silicon/pai))
if(!(container && istype(container, /obj/item/device/mmi)))
return 0
else
return 1
if(istype(other, /mob/living/silicon/robot))
if(!(container && istype(container, /obj/item/device/mmi)))
return 0
else
return 1
if(istype(other, /mob/living/carbon/human))
return 1
if(istype(other, /mob/living/carbon/slime))
return 1
return ..()
/mob/living/carbon/brain/update_canmove(delay_action_updates = 0)
@@ -100,8 +98,8 @@ I'm using this for Stat to give it a more nifty interface to work with
/mob/living/carbon/brain/can_safely_leave_loc()
return 0 //You're not supposed to be ethereal jaunting, brains
/mob/living/carbon/brain/adjustEarDamage()
/mob/living/carbon/brain/SetEarDamage() // no ears to damage or heal
return
/mob/living/carbon/brain/setEarDamage() // no ears to damage or heal
return
/mob/living/carbon/brain/SetEarDeaf()
return
@@ -21,7 +21,8 @@
/obj/item/organ/internal/brain/surgeryize()
if(!owner)
return
owner.setEarDamage(0,0) //Yeah, didn't you...hear? The ears are totally inside the brain.
owner.SetEarDeaf(0)
owner.SetEarDamage(0) //Yeah, didn't you...hear? The ears are totally inside the brain.
/obj/item/organ/internal/brain/xeno
name = "xenomorph brain"
+3 -3
View File
@@ -52,12 +52,12 @@
if(stat == DEAD)
blinded = 1
silent = 0
SetSilence(0)
else
if(!container && (health < config.health_threshold_dead || ((world.time - timeofhostdeath) > config.revival_brain_life)))
death()
blinded =1
silent = 0
blinded = 1
SetSilence(0)
return 1
. = 1
@@ -1,3 +1,3 @@
/mob/living/carbon/brain/Login()
..()
sleeping = 0
SetSleeping(0)
@@ -185,7 +185,7 @@
src.brainmob.loc = src
src.brainmob.container = src
src.brainmob.stat = 0
src.brainmob.silent = 0
src.brainmob.SetSilence(0)
dead_mob_list -= src.brainmob
..()
@@ -0,0 +1,8 @@
/mob/living/carbon/brain/update_stat()
if(status_flags & GODMODE)
return
// if(health <= min_health)
if(health <= config.health_threshold_dead)
if(stat != DEAD)
death()
// Put brain(organ) damaging code here
+7 -7
View File
@@ -158,13 +158,13 @@
"<span class='userdanger'>You feel a powerful shock coursing through your body!</span>", \
"<span class='italics'>You hear a heavy electrical crack.</span>" \
)
jitteriness += 1000 //High numbers for violent convulsions
AdjustJitter(1000) //High numbers for violent convulsions
do_jitter_animation(jitteriness)
stuttering += 2
AdjustStuttering(2)
if(!tesla_shock || (tesla_shock && siemens_coeff > 0.5))
Stun(2)
spawn(20)
jitteriness = max(jitteriness - 990, 10) //Still jittery, but vastly less
AdjustJitter(-1000, bound_lower = 10) //Still jittery, but vastly less
if(!tesla_shock || (tesla_shock && siemens_coeff > 0.5))
Stun(3)
Weaken(3)
@@ -268,7 +268,7 @@
if(istype(src,/mob/living/carbon/human) && src:w_uniform)
var/mob/living/carbon/human/H = src
H.w_uniform.add_fingerprint(M)
src.sleeping = max(0,src.sleeping-5)
AdjustSleeping(-5)
if(src.sleeping == 0)
src.resting = 0
AdjustParalysis(-3)
@@ -327,8 +327,8 @@
E.damage += rand(12, 16)
if(E.damage > E.min_bruised_damage)
eye_blind += damage
eye_blurry += damage * rand(3, 6)
AdjustEyeBlind(damage)
AdjustEyeBlurry(damage * rand(3, 6))
if(E.damage > (E.min_bruised_damage + E.min_broken_damage) / 2)
if(!(E.status & ORGAN_ROBOT))
@@ -742,7 +742,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
/mob/living/carbon/resist_fire()
fire_stacks -= 5
weakened = max(weakened, 3)//We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy.
Weaken(3, 1, 1) //We dont check for CANWEAKEN, I don't care how immune to weakening you are, if you're rolling on the ground, you're busy.
update_canmove()
spin(32,2)
visible_message("<span class='danger'>[src] rolls on the floor, trying to put themselves out!</span>", \
+2 -2
View File
@@ -1,9 +1,9 @@
/mob/living/carbon/death(gibbed)
losebreath = 0
SetLoseBreath(0)
med_hud_set_health()
med_hud_set_status()
if(reagents)
reagents.death_metabolize(src)
..(gibbed)
..(gibbed)
+215 -123
View File
@@ -4,32 +4,29 @@
AC.ui_interact(user, state = state)
/mob/living/carbon/human/proc/change_species(var/new_species)
if(!new_species)
if(!new_species || species == new_species || !(new_species in all_species))
return
if(species == new_species)
return
if(!(new_species in all_species))
return
set_species(new_species)
set_species(new_species, null, 1)
reset_hair()
if(species.bodyflags & HAS_MARKINGS)
reset_markings()
return 1
/mob/living/carbon/human/proc/change_gender(var/gender, var/update_dna = 1)
/mob/living/carbon/human/proc/change_gender(var/new_gender, var/update_dna = 1)
var/obj/item/organ/external/head/H = organs_by_name["head"]
if(src.gender == gender)
if(gender == new_gender)
return
src.gender = gender
gender = new_gender
var/datum/sprite_accessory/hair/current_hair = hair_styles_list[H.h_style]
if(current_hair.gender != NEUTER && current_hair.gender != src.gender)
if(current_hair.gender != NEUTER && current_hair.gender != gender)
reset_head_hair()
var/datum/sprite_accessory/hair/current_fhair = facial_hair_styles_list[H.f_style]
if(current_fhair.gender != NEUTER && current_fhair.gender != src.gender)
if(current_fhair.gender != NEUTER && current_fhair.gender != gender)
reset_facial_hair()
if(update_dna)
@@ -40,13 +37,7 @@
/mob/living/carbon/human/proc/change_hair(var/hair_style)
var/obj/item/organ/external/head/H = get_organ("head")
if(!hair_style)
return
if(H.h_style == hair_style)
return
if(!(hair_style in hair_styles_list))
if(!hair_style || !H || H.h_style == hair_style || !(hair_style in hair_styles_list))
return
H.h_style = hair_style
@@ -56,13 +47,7 @@
/mob/living/carbon/human/proc/change_facial_hair(var/facial_hair_style)
var/obj/item/organ/external/head/H = get_organ("head")
if(!facial_hair_style)
return
if(H.f_style == facial_hair_style)
return
if(!(facial_hair_style in facial_hair_styles_list))
if(!facial_hair_style || !H || H.f_style == facial_hair_style || !(facial_hair_style in facial_hair_styles_list))
return
H.f_style = facial_hair_style
@@ -72,13 +57,7 @@
/mob/living/carbon/human/proc/change_head_accessory(var/head_accessory_style)
var/obj/item/organ/external/head/H = get_organ("head")
if(!head_accessory_style)
return
if(H.ha_style == head_accessory_style)
return
if(!(head_accessory_style in head_accessory_styles_list))
if(!head_accessory_style || !H || H.ha_style == head_accessory_style || !(head_accessory_style in head_accessory_styles_list))
return
H.ha_style = head_accessory_style
@@ -86,52 +65,95 @@
update_head_accessory()
return 1
/mob/living/carbon/human/proc/change_markings(var/marking_style)
if(!marking_style)
/mob/living/carbon/human/proc/change_markings(var/marking_style, var/location = "body")
if(!marking_style || m_styles[location] == marking_style || !(marking_style in marking_styles_list))
return
if(src.m_style == marking_style)
var/datum/sprite_accessory/body_markings/marking = marking_styles_list[marking_style]
if(marking.name != "None" && marking.marking_location != location)
return
if(!(marking_style in marking_styles_list))
return
var/obj/item/organ/external/head/head_organ = get_organ("head")
if(location == "head")
if(!head_organ)
return
src.m_style = marking_style
if(head_organ.alt_head && head_organ.alt_head != "None")
var/datum/sprite_accessory/body_markings/head/H = marking_styles_list[marking_style]
if(marking.name != "None" && (!H.heads_allowed || (!("All" in H.heads_allowed) && !(head_organ.alt_head in H.heads_allowed))))
return
else
if(!head_organ.alt_head || head_organ.alt_head == "None")
head_organ.alt_head = "None"
var/datum/sprite_accessory/body_markings/head/H = marking_styles_list[marking_style]
if(H.heads_allowed && !("All" in H.heads_allowed))
return
update_markings()
if(location == "tail" && marking.name != "None")
var/datum/sprite_accessory/body_markings/tail/tail_marking = marking_styles_list[marking_style]
if(!body_accessory)
if(tail_marking.tails_allowed)
return
else
if(!tail_marking.tails_allowed || !(body_accessory.name in tail_marking.tails_allowed))
return
m_styles[location] = marking_style
if(location == "tail")
stop_tail_wagging()
else
update_markings()
return 1
/mob/living/carbon/human/proc/change_body_accessory(var/body_accessory_style)
var/found
if(!body_accessory_style)
if(!body_accessory_style || (body_accessory && body_accessory.name == body_accessory_style))
return
if(src.body_accessory)
if(src.body_accessory.name == body_accessory_style)
return
for(var/B in body_accessory_by_name)
if(B == body_accessory_style)
src.body_accessory = body_accessory_by_name[body_accessory_style]
body_accessory = body_accessory_by_name[body_accessory_style]
found = 1
if(!found)
return
m_styles["tail"] = "None"
update_tail_layer()
return 1
/mob/living/carbon/human/proc/change_alt_head(var/alternate_head)
var/obj/item/organ/external/head/H = get_organ("head")
if(!H || H.alt_head == alternate_head || (H.status & ORGAN_ROBOT) || (!(species.bodyflags & HAS_ALT_HEADS) && alternate_head != "None") || !(alternate_head in alt_heads_list))
return
H.alt_head = alternate_head
//Handle head markings if they're incompatible with the new alt head.
if(m_styles["head"])
var/head_marking = m_styles["head"]
var/datum/sprite_accessory/body_markings/head/head_marking_style = marking_styles_list[head_marking]
if(!head_marking_style.heads_allowed || (!("All" in head_marking_style.heads_allowed) && !(H.alt_head in head_marking_style.heads_allowed)))
m_styles["head"] = "None"
update_markings()
update_body(1, 1) //Update the body and force limb icon regeneration to update the head with the new icon.
if(wear_mask)
update_inv_wear_mask()
return 1
/mob/living/carbon/human/proc/reset_hair()
reset_head_hair()
reset_facial_hair()
reset_head_accessory()
if(m_style && m_style != "None") //Resets the markings if they were head markings.
var/datum/sprite_accessory/marking_style = marking_styles_list[m_style]
if(marking_style && marking_style.marking_location == "head")
reset_markings()
if(m_styles["head"] && m_styles["head"] != "None") //Resets head markings.
reset_markings("head")
/mob/living/carbon/human/proc/reset_head_hair()
var/obj/item/organ/external/head/H = get_organ("head")
if(!H)
return
var/list/valid_hairstyles = generate_valid_hairstyles()
if(valid_hairstyles.len)
H.h_style = pick(valid_hairstyles)
@@ -143,6 +165,8 @@
/mob/living/carbon/human/proc/reset_facial_hair()
var/obj/item/organ/external/head/H = get_organ("head")
if(!H)
return
var/list/valid_facial_hairstyles = generate_valid_facial_hairstyles()
if(valid_facial_hairstyles.len)
H.f_style = pick(valid_facial_hairstyles)
@@ -151,17 +175,32 @@
H.f_style = "Shaved"
update_fhair()
/mob/living/carbon/human/proc/reset_markings()
var/list/valid_markings = generate_valid_markings()
if(valid_markings.len)
m_style = pick(valid_markings)
/mob/living/carbon/human/proc/reset_markings(var/location)
var/list/valid_markings
if(location)
valid_markings = generate_valid_markings(location)
if(valid_markings.len)
m_styles[location] = pick(valid_markings)
else
//this shouldn't happen
m_styles[location] = "None"
else
//this shouldn't happen
m_style = "None"
for(var/m_location in list("head", "body", "tail"))
valid_markings = generate_valid_markings(m_location)
if(valid_markings.len)
m_styles[m_location] = pick(valid_markings)
else
//this shouldn't happen
m_styles[m_location] = "None"
update_markings()
stop_tail_wagging()
/mob/living/carbon/human/proc/reset_head_accessory()
var/obj/item/organ/external/head/H = get_organ("head")
if(!H)
return
var/list/valid_head_accessories = generate_valid_head_accessories()
if(valid_head_accessories.len)
H.ha_style = pick(valid_head_accessories)
@@ -193,32 +232,57 @@
update_body()
return 1
/mob/living/carbon/human/proc/change_hair_color(var/red, var/green, var/blue)
/mob/living/carbon/human/proc/change_hair_color(var/red, var/green, var/blue, var/secondary)
var/obj/item/organ/external/head/H = get_organ("head")
if(red == H.r_hair && green == H.g_hair && blue == H.b_hair)
if(!H)
return
H.r_hair = red
H.g_hair = green
H.b_hair = blue
if(!secondary)
if(red == H.r_hair && green == H.g_hair && blue == H.b_hair)
return
H.r_hair = red
H.g_hair = green
H.b_hair = blue
else
if(red == H.r_hair_sec && green == H.g_hair_sec && blue == H.b_hair_sec)
return
H.r_hair_sec = red
H.g_hair_sec = green
H.b_hair_sec = blue
update_hair()
return 1
/mob/living/carbon/human/proc/change_facial_hair_color(var/red, var/green, var/blue)
/mob/living/carbon/human/proc/change_facial_hair_color(var/red, var/green, var/blue, var/secondary)
var/obj/item/organ/external/head/H = get_organ("head")
if(red == H.r_facial && green == H.g_facial && blue == H.b_facial)
if(!H)
return
H.r_facial = red
H.g_facial = green
H.b_facial = blue
if(!secondary)
if(red == H.r_facial && green == H.g_facial && blue == H.b_facial)
return
H.r_facial = red
H.g_facial = green
H.b_facial = blue
else
if(red == H.r_facial_sec && green == H.g_facial_sec && blue == H.b_facial_sec)
return
H.r_facial_sec = red
H.g_facial_sec = green
H.b_facial_sec = blue
update_fhair()
return 1
/mob/living/carbon/human/proc/change_head_accessory_color(var/red, var/green, var/blue)
var/obj/item/organ/external/head/H = get_organ("head")
if(!H)
return
if(red == H.r_headacc && green == H.g_headacc && blue == H.b_headacc)
return
@@ -229,15 +293,16 @@
update_head_accessory()
return 1
/mob/living/carbon/human/proc/change_marking_color(var/red, var/green, var/blue)
if(red == r_markings && green == g_markings && blue == b_markings)
/mob/living/carbon/human/proc/change_marking_color(var/colour, var/location = "body")
if(colour == m_colours[location])
return
r_markings = red
g_markings = green
b_markings = blue
m_colours[location] = colour
update_markings()
if(location == "tail")
update_tail_layer()
else
update_markings()
return 1
@@ -287,75 +352,66 @@
/mob/living/carbon/human/proc/generate_valid_hairstyles()
var/list/valid_hairstyles = new()
var/obj/item/organ/external/head/H = get_organ("head")
if(!H)
return //No head, no hair.
for(var/hairstyle in hair_styles_list)
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
if(gender == MALE && S.gender == FEMALE)
if(hairstyle == "Bald") //Just in case.
valid_hairstyles += hairstyle
continue
if(gender == FEMALE && S.gender == MALE)
if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE))
continue
if(H.species.flags & ALL_RPARTS) //If the user is a species who can have a robotic head...
var/datum/robolimb/robohead = all_robolimbs[H.model]
if(!H)
return
if(H.species.name in S.species_allowed) //If this is a hairstyle native to the user's species...
if(robohead.is_monitor && (robohead.company in S.models_allowed)) //Check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
valid_hairstyles += hairstyle //Give them their hairstyles if they do.
continue
else //If they don't have the default head, they shouldn't be getting any hairstyles they wouldn't normally.
continue
if((H.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
valid_hairstyles += hairstyle //Give them their hairstyles if they do.
else
if(robohead.is_monitor) //If the hair style is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
continue
else
if("Human" in S.species_allowed) //If the user has a robotic head and the hairstyle can fit humans, let them use it as a wig for their humanoid robot head.
valid_hairstyles += hairstyle
continue
if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
But if the user has a robotic humanoid head and the hairstyle can fit humans, let them use it as a wig. */
valid_hairstyles += hairstyle
else //If the user is not a species who can have robotic heads, use the default handling.
if(!(H.species.name in S.species_allowed)) //If the user's head is not of a species the hair style allows, skip it. Otherwise, add it to the list.
continue
valid_hairstyles += hairstyle
if(H.species.name in S.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list.
valid_hairstyles += hairstyle
return valid_hairstyles
/mob/living/carbon/human/proc/generate_valid_facial_hairstyles()
var/list/valid_facial_hairstyles = new()
var/obj/item/organ/external/head/H = get_organ("head")
if(!H)
return //No head, no hair.
for(var/facialhairstyle in facial_hair_styles_list)
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
if(gender == MALE && S.gender == FEMALE)
if(facialhairstyle == "Shaved") //Just in case.
valid_facial_hairstyles += facialhairstyle
continue
if(gender == FEMALE && S.gender == MALE)
if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE))
continue
if(H.species.flags & ALL_RPARTS) //If the user is a species who can have a robotic head...
var/datum/robolimb/robohead = all_robolimbs[H.model]
if(!H)
continue // No head, no hair
if(H.species.name in S.species_allowed) //If this is a facial hair style native to the user's species...
if(robohead.is_monitor && (robohead.company in S.models_allowed)) //Check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
valid_facial_hairstyles += facialhairstyle //Give them their facial hair styles if they do.
continue
else //If they don't have the default head, they shouldn't be getting any facial hair styles they wouldn't normally.
continue
if((H.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list.
valid_facial_hairstyles += facialhairstyle //Give them their facial hairstyles if they do.
else
if(robohead.is_monitor) //If the facial hair style is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
continue
else
if("Human" in S.species_allowed) //If the user has a robotic head and the facial hair style can fit humans, let them use it as a postiche for their humanoid robot head.
valid_facial_hairstyles += facialhairstyle
continue
if(!robohead.is_monitor && ("Human" in S.species_allowed)) /*If the facial hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it.
But if the user has a robotic humanoid head and the facial hairstyle can fit humans, let them use it as a wig. */
valid_facial_hairstyles += facialhairstyle
else //If the user is not a species who can have robotic heads, use the default handling.
if(!(H.species.name in S.species_allowed)) //If the user's head is not of a species the facial hair style allows, skip it. Otherwise, add it to the list.
continue
valid_facial_hairstyles += facialhairstyle
if(H.species.name in S.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list.
valid_facial_hairstyles += facialhairstyle
return valid_facial_hairstyles
/mob/living/carbon/human/proc/generate_valid_head_accessories()
var/list/valid_head_accessories = new()
var/obj/item/organ/external/head/H = get_organ("head")
if(!H)
return //No head, no head accessory.
for(var/head_accessory in head_accessory_styles_list)
var/datum/sprite_accessory/S = head_accessory_styles_list[head_accessory]
@@ -365,18 +421,40 @@
return valid_head_accessories
/mob/living/carbon/human/proc/generate_valid_markings()
/mob/living/carbon/human/proc/generate_valid_markings(var/location = "body")
var/list/valid_markings = new()
var/obj/item/organ/external/head/H = get_organ("head")
for(var/marking in marking_styles_list)
var/datum/sprite_accessory/S = marking_styles_list[marking]
if(!H && location == "head")
return //No head, no head markings.
if(!(species.name in S.species_allowed)) //If the user's head is not of a species the marking style allows, skip it. Otherwise, add it to the list.
for(var/marking in marking_styles_list)
var/datum/sprite_accessory/body_markings/S = marking_styles_list[marking]
if(S.name == "None")
valid_markings += marking
continue
if(H.species.flags & ALL_RPARTS) //If the user is a species that can have a robotic head...
var/datum/robolimb/robohead = all_robolimbs[H.model]
if(!(S.models_allowed && (robohead.company in S.models_allowed))) //Make sure they don't get markings incompatible with their head.
continue
if(S.marking_location != location) //If the marking isn't for the location we desire, skip.
continue
if(!(species.name in S.species_allowed)) //If the user is not of a species the marking style allows, skip it. Otherwise, add it to the list.
continue
if(location == "tail")
if(!body_accessory)
if(S.tails_allowed)
continue
else
if(!S.tails_allowed || !(body_accessory.name in S.tails_allowed))
continue
if(location == "head")
var/datum/sprite_accessory/body_markings/head/M = marking_styles_list[S.name]
if(H.species.flags & ALL_RPARTS)//If the user is a species that can have a robotic head...
var/datum/robolimb/robohead = all_robolimbs[H.model]
if(!(S.models_allowed && (robohead.company in S.models_allowed))) //Make sure they don't get markings incompatible with their head.
continue
else if(H.alt_head && H.alt_head != "None") //If the user's got an alt head, validate markings for that head.
if(!M.heads_allowed || (!("All" in M.heads_allowed) && !(H.alt_head in M.heads_allowed)))
continue
else
if(M.heads_allowed && !("All" in M.heads_allowed))
continue
valid_markings += marking
return valid_markings
@@ -389,10 +467,24 @@
valid_body_accessories = body_accessory_by_name.Copy()
else
if(!istype(A))
valid_body_accessories += "None" //The only null entry should be the "None" option.
valid_body_accessories["None"] = "None" //The only null entry should be the "None" option.
continue
if(!(species.name in A.allowed_species)) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list.
continue
valid_body_accessories += B
if(species.name in A.allowed_species) //If the user is not of a species the body accessory style allows, skip it. Otherwise, add it to the list.
valid_body_accessories += B
return valid_body_accessories
/mob/living/carbon/human/proc/generate_valid_alt_heads()
var/list/valid_alt_heads = list()
var/obj/item/organ/external/head/H = get_organ("head")
if(!H)
return //No head, no alt heads.
valid_alt_heads["None"] = alt_heads_list["None"] //The only null entry should be the "None" option, and there should always be a "None" option.
for(var/alternate_head in alt_heads_list)
var/datum/sprite_accessory/alt_heads/head = alt_heads_list[alternate_head]
if(!(H.species.name in head.species_allowed))
continue
valid_alt_heads += alternate_head
return valid_alt_heads
@@ -112,36 +112,30 @@ var/global/list/body_accessory_by_species = list("None" = null)
//Vulpkanin
/datum/body_accessory/tail/vulpkanin_2
name = "Vulpkanin Alt 1 (Bushy)"
icon_state = "vulptail2"
animated_icon_state = "vulptail2_a"
allowed_species = list("Vulpkanin")
/datum/body_accessory/tail/vulpkanin_3
name = "Vulpkanin Alt 2 (Straight)"
icon_state = "vulptail3"
animated_icon_state = "vulptail3_a"
allowed_species = list("Vulpkanin")
/datum/body_accessory/tail/vulpkanin_4
name = "Vulpkanin Alt 3 (Tiny)"
icon_state = "vulptail4"
animated_icon_state = "vulptail4_a"
allowed_species = list("Vulpkanin")
/datum/body_accessory/tail/vulpkanin_5
name = "Vulpkanin Alt 4 (Short)"
icon_state = "vulptail5"
animated_icon_state = "vulptail5_a"
allowed_species = list("Vulpkanin")
/datum/body_accessory/tail/vulpkanin_6
name = "Vulpkanin Alt 5 (Straight Bushy)"
icon_state = "vulptail6"
animated_icon_state = "vulptail6_a"
allowed_species = list("Vulpkanin")
+12 -4
View File
@@ -97,8 +97,8 @@
emote("deathgasp") //let the world KNOW WE ARE DEAD
stat = DEAD
dizziness = 0
jitteriness = 0
SetDizzy(0)
SetJitter(0)
heart_attack = 0
//Handle species-specific deaths.
@@ -155,11 +155,19 @@
if(istype(H))
if(H.f_style)
H.f_style = "Shaved"
H.f_style = initial(H.f_style)
if(H.h_style)
H.h_style = "Bald"
H.h_style = initial(H.h_style)
if(H.ha_style)
H.ha_style = initial(H.ha_style)
if(H.alt_head)
H.alt_head = initial(H.alt_head)
H.handle_alt_icon()
m_styles = DEFAULT_MARKING_STYLES
update_fhair(0)
update_hair(0)
update_head_accessory(0)
update_markings(0)
mutations.Add(SKELETON)
mutations.Add(NOCLONE)
@@ -10,7 +10,7 @@
act = copytext(act, 1, t1)
var/muzzled = is_muzzled()
if(disabilities & MUTE || silent)
if(!can_speak())
muzzled = 1
//var/m_type = 1
@@ -313,7 +313,7 @@
M = null
if(M)
if(lying || weakened)
if(lying)
message = "<B>[src]</B> flops and flails around on the floor."
else
message = "<B>[src]</B> flips in [M]'s general direction."
@@ -378,7 +378,7 @@
message = "<B>[src]</B> faints."
if(src.sleeping)
return //Can't faint while asleep
src.sleeping += 1
AdjustSleeping(2)
m_type = 1
if("cough", "coughs")
+51 -33
View File
@@ -31,9 +31,7 @@
if(mind)
mind.name = real_name
var/datum/reagents/R = new/datum/reagents(330)
reagents = R
R.my_atom = src
create_reagents(330)
prev_gender = gender // Debug for plural genders
make_blood()
@@ -352,7 +350,8 @@
else valid_limbs -= processing_dismember
if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
adjustEarDamage(30, 120)
AdjustEarDamage(30)
AdjustEarDeaf(120)
if(prob(70) && !shielded)
Paralyse(10)
@@ -376,7 +375,8 @@
else valid_limbs -= processing_dismember
if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
adjustEarDamage(15,60)
AdjustEarDamage(15)
AdjustEarDeaf(60)
if(prob(50) && !shielded)
Paralyse(10)
@@ -491,8 +491,7 @@
O.show_message(text("<span class='danger'>The [M.name] has shocked []!</span>", src), 1)
Weaken(power)
if(stuttering < power)
stuttering = power
Stuttering(power)
Stun(power)
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
@@ -709,12 +708,19 @@
if(!.) . = if_no_id //to prevent null-names making the mob unclickable
return
//gets ID card object from special clothes slot or null.
/mob/living/carbon/human/proc/get_idcard()
//gets ID card object from special clothes slot or, if applicable, hands as well
/mob/living/carbon/human/proc/get_idcard(var/check_hands = FALSE)
var/obj/item/weapon/card/id/id = wear_id
var/obj/item/device/pda/pda = wear_id
if(istype(pda) && pda.id)
id = pda.id
if(check_hands)
if(istype(get_active_hand(), /obj/item/weapon/card/id))
id = get_active_hand()
else if(istype(get_inactive_hand(), /obj/item/weapon/card/id))
id = get_inactive_hand()
if(istype(id))
return id
@@ -1472,7 +1478,6 @@
to_chat(usr, "\blue [self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)].")
/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour, var/delay_icon_update = 0)
var/datum/species/oldspecies = species
if(!dna)
if(!new_species)
@@ -1525,9 +1530,9 @@
if(species.base_color && default_colour)
//Apply colour.
r_skin = hex2num(copytext(species.base_color, 2, 4))
g_skin = hex2num(copytext(species.base_color, 4, 6))
b_skin = hex2num(copytext(species.base_color, 6, 8))
r_skin = color2R(species.base_color)
g_skin = color2G(species.base_color)
b_skin = color2B(species.base_color)
else
r_skin = 0
g_skin = 0
@@ -1542,37 +1547,47 @@
var/obj/item/organ/external/head/H = get_organ("head")
if(species.default_hair)
H.h_style = species.default_hair
else
H.h_style = "Bald"
if(species.default_fhair)
H.f_style = species.default_fhair
else
H.f_style = "Shaved"
if(species.default_headacc)
H.ha_style = species.default_headacc
else
H.ha_style = "None"
if(species.default_hair_colour)
//Apply colour.
H.r_hair = hex2num(copytext(species.default_hair_colour, 2, 4))
H.g_hair = hex2num(copytext(species.default_hair_colour, 4, 6))
H.b_hair = hex2num(copytext(species.default_hair_colour, 6, 8))
H.r_hair = color2R(species.default_hair_colour)
H.g_hair = color2G(species.default_hair_colour)
H.b_hair = color2B(species.default_hair_colour)
else
H.r_hair = 0
H.g_hair = 0
H.b_hair = 0
if(species.default_fhair_colour)
H.r_facial = hex2num(copytext(species.default_fhair_colour, 2, 4))
H.g_facial = hex2num(copytext(species.default_fhair_colour, 4, 6))
H.b_facial = hex2num(copytext(species.default_fhair_colour, 6, 8))
H.r_facial = color2R(species.default_fhair_colour)
H.g_facial = color2G(species.default_fhair_colour)
H.b_facial = color2B(species.default_fhair_colour)
else
H.r_facial = 0
H.g_facial = 0
H.b_facial = 0
if(species.default_headacc_colour)
H.r_headacc = hex2num(copytext(species.default_headacc_colour, 2, 4))
H.g_headacc = hex2num(copytext(species.default_headacc_colour, 4, 6))
H.b_headacc = hex2num(copytext(species.default_headacc_colour, 6, 8))
H.r_headacc = color2R(species.default_headacc_colour)
H.g_headacc = color2G(species.default_headacc_colour)
H.b_headacc = color2B(species.default_headacc_colour)
else
H.r_headacc = 0
H.g_headacc = 0
H.b_headacc = 0
m_styles = DEFAULT_MARKING_STYLES //Wipes out markings, setting them all to "None".
m_colours = DEFAULT_MARKING_COLOURS //Defaults colour to #00000 for all markings.
body_accessory = null
if(!dna)
dna = new /datum/dna(null)
dna.species = species.name
@@ -1673,16 +1688,13 @@
if(!head_organ)
return
if(!robohead.is_monitor) //If they've got a prosthetic head and it isn't a monitor, they've no screen to adjust. Instead, let them change the colour of their optics!
var/optic_colour = input(src, "Select optic colour", rgb(r_markings, g_markings, b_markings)) as color|null
var/optic_colour = input(src, "Select optic colour", m_colours["head"]) as color|null
if(incapacitated())
to_chat(src, "<span class='warning'>You were interrupted while changing the colour of your optics.</span>")
return
if(optic_colour)
r_markings = hex2num(copytext(optic_colour, 2, 4))
g_markings = hex2num(copytext(optic_colour, 4, 6))
b_markings = hex2num(copytext(optic_colour, 6, 8))
change_markings(optic_colour, "head")
update_markings()
else if(robohead.is_monitor) //Means that the character's head is a monitor (has a screen). Time to customize.
var/list/hair = list()
for(var/i in hair_styles_list)
@@ -1690,14 +1702,12 @@
if((head_organ.species.name in tmp_hair.species_allowed) && (robohead.company in tmp_hair.models_allowed)) //Populate the list of available monitor styles only with styles that the monitor-head is allowed to use.
hair += i
var/new_style = input(src, "Select a monitor display", "Monitor Display", head_organ.h_style) as null|anything in hair
var/new_style = input(src, "Select a monitor display", "Monitor Display", head_organ.h_style) as null|anything in hair
if(incapacitated())
to_chat(src, "<span class='warning'>You were interrupted while changing your monitor display.</span>")
return
if(new_style)
head_organ.h_style = new_style
update_hair()
change_hair(new_style)
//Putting a couple of procs here that I don't know where else to dump.
//Mostly going to be used for Vox and Vox Armalis, but other human mobs might like them (for adminbuse).
@@ -1728,7 +1738,7 @@
if(last_special > world.time)
return
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
if(!canmove)
to_chat(src, "You cannot leap in your current state.")
return
@@ -1782,7 +1792,7 @@
if(last_special > world.time)
return
if(stat || paralysis || stunned || weakened || lying)
if(!canmove)
to_chat(src, "\red You cannot do that in your current state.")
return
@@ -1977,6 +1987,12 @@
var/obj/item/weapon/card/id/id = wear_id
if(istype(id) && id.is_untrackable())
return 0
if(wear_pda)
var/obj/item/device/pda/pda = wear_pda
if(istype(pda))
var/obj/item/weapon/card/id/id = pda.id
if(istype(id) && id.is_untrackable())
return 0
if(istype(head, /obj/item/clothing/head))
var/obj/item/clothing/head/hat = head
if(hat.blockTracking)
@@ -1992,6 +2008,8 @@
if(wear_id)
. |= wear_id.GetAccess()
if(wear_pda)
. |= wear_pda.GetAccess()
if(istype(w_uniform, /obj/item/clothing/under))
var/obj/item/clothing/under/U = w_uniform
if(U.accessories)
@@ -254,7 +254,7 @@ emp_act
visible_message("<span class='danger'>[src] has been knocked down!</span>", \
"<span class='userdanger'>[src] has been knocked down!</span>")
apply_effect(5, WEAKEN, armor)
confused += 15
AdjustConfused(15)
if(prob(I.force + ((100 - health)/2)) && src != user && I.damtype == BRUTE)
ticker.mode.remove_revolutionary(mind)
@@ -4,10 +4,8 @@ var/global/default_martial_art = new/datum/martial_art
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,SPECIALROLE_HUD,NATIONS_HUD)
//Marking colour and style
var/r_markings = 0
var/g_markings = 0
var/b_markings = 0
var/m_style = "None"
var/list/m_colours = DEFAULT_MARKING_COLOURS //All colours set to #000000.
var/list/m_styles = DEFAULT_MARKING_STYLES //All markings set to None.
var/s_tone = 0 //Skin tone
@@ -152,7 +152,7 @@
mutations.Remove(FAT)
update_mutantrace(0)
update_mutations(0)
update_body(0)
update_body(0, 1)
update_inv_w_uniform(0)
update_inv_wear_suit()
@@ -167,7 +167,7 @@
mutations.Add(FAT)
update_mutantrace(0)
update_mutations(0)
update_body(0)
update_body(0, 1)
update_inv_w_uniform(0)
update_inv_wear_suit()
@@ -167,7 +167,7 @@
/client/proc/customiseSNPC(mob/living/carbon/human/interactive/T in npc_master.botPool_l)
set name = "Customize SNPC"
set desc = "Customise the SNPC"
set desc = "Customize the SNPC"
set category = "Debug"
if(!holder)
@@ -403,7 +403,7 @@
if(!hud_used)
hud_used = new /datum/hud/human(src)
/mob/living/carbon/human/interactive/New()
/mob/living/carbon/human/interactive/New(var/new_loc, var/new_species = null)
..()
snpc_list += src
@@ -916,7 +916,7 @@
TARGET = null
return 1
if(!(get_turf(src) in validHome))
if(!(get_turf(src) in validHome) && validHome.len)
tryWalk(pick(get_area_turfs(job2area(myjob))))
return 1
return 0
+40 -43
View File
@@ -86,8 +86,8 @@
// If we have the gene for being crazy, have random events.
if(dna.GetSEState(HALLUCINATIONBLOCK))
if(prob(1) && hallucination < 1)
hallucination += 20
if(prob(1))
Hallucinate(20)
if(disabilities & COUGHING)
if((prob(5) && paralysis <= 1))
@@ -111,9 +111,9 @@
if(disabilities & NERVOUS)
speech_problem_flag = 1
if(prob(10))
stuttering = max(10, stuttering)
Stuttering(10)
if(getBrainLoss() >= 60 && stat != 2)
if(getBrainLoss() >= 60 && stat != DEAD)
speech_problem_flag = 1
if(prob(3))
var/list/s1 = list("IM A PONY NEEEEEEIIIIIIIIIGH",
@@ -152,8 +152,8 @@
if(getBrainLoss() >= 100 && stat != 2) //you lapse into a coma and die without immediate aid; RIP. -Fox
Weaken(20)
losebreath += 10
silent += 2
AdjustLoseBreath(10)
AdjustSilence(2)
if(getBrainLoss() >= 120 && stat != 2) //they died from stupidity--literally. -Fox
visible_message("<span class='alert'><B>[src]</B> goes limp, their facial expression utterly blank.</span>")
@@ -281,10 +281,10 @@
var/datum/gas_mixture/breath
if(health <= config.health_threshold_crit)
losebreath++
AdjustLoseBreath(1)
if(losebreath > 0)
losebreath--
AdjustLoseBreath(-1)
if(prob(10))
spawn emote("gasp")
if(istype(loc, /obj/))
@@ -696,20 +696,20 @@
overeatduration -= 2
if(drowsyness)
drowsyness--
eye_blurry = max(2, eye_blurry)
AdjustDrowsy(-1)
EyeBlurry(2)
if(prob(5))
sleeping += 1
AdjustSleeping(1)
Paralyse(5)
confused = max(0, confused - 1)
AdjustConfused(-1)
// decrement dizziness counter, clamped to 0
if(resting)
dizziness = max(0, dizziness - 15)
jitteriness = max(0, jitteriness - 15)
AdjustDizzy(-15)
AdjustJitter(-15)
else
dizziness = max(0, dizziness - 3)
jitteriness = max(0, jitteriness - 3)
AdjustDizzy(-3)
AdjustJitter(-3)
if(species && species.flags & NO_INTORGANS) return
@@ -744,8 +744,7 @@
alcohol_strength *= 5
if(alcohol_strength >= slur_start) //slurring
if(!slurring) slurring = 1
slurring = drunk
Slur(drunk)
if(alcohol_strength >= brawl_start) //the drunken martial art
if(!istype(martial_art, /datum/martial_art/drunk_brawling))
var/datum/martial_art/drunk_brawling/F = new
@@ -754,18 +753,17 @@
if(istype(martial_art, /datum/martial_art/drunk_brawling))
martial_art.remove(src)
if(alcohol_strength >= confused_start && prob(33)) //confused walking
if(!confused) confused = 1
confused = max(confused+(3/sober_str),0)
if(!confused) Confused(1)
AdjustConfused(3/sober_str)
if(alcohol_strength >= blur_start) //blurry eyes
eye_blurry = max(eye_blurry, 10/sober_str)
drowsyness = max(drowsyness, 0)
EyeBlurry(10/sober_str)
if(!isSynthetic()) //stuff only for non-synthetics
if(alcohol_strength >= vomit_start) //vomiting
if(prob(8))
fakevomit()
if(alcohol_strength >= pass_out)
Paralyse(5 / sober_str)
drowsyness = max(drowsyness, 30/sober_str)
Paralyse(5/sober_str)
Drowsy(30/sober_str)
if(L)
L.take_damage(0.1, 1)
adjustToxLoss(0.1)
@@ -789,7 +787,7 @@
/mob/living/carbon/human/proc/has_booze() //checks if the human has ethanol or its subtypes inside
for(var/A in reagents.reagent_list)
var/datum/reagent/R = A
if(istype(R, /datum/reagent/ethanol))
if(istype(R, /datum/reagent/consumable/ethanol))
return 1
return 0
@@ -837,14 +835,14 @@
vision = get_int_organ(species.vision_organ)
if(!species.vision_organ) // Presumably if a species has no vision organs, they see via some other means.
eye_blind = 0
SetEyeBlind(0)
blinded = 0
eye_blurry = 0
SetEyeBlurry(0)
else if(!vision || vision.is_broken()) // Vision organs cut out or broken? Permablind.
eye_blind = 1
EyeBlind(2)
blinded = 1
eye_blurry = 1
EyeBlurry(2)
else
//blindness
@@ -852,34 +850,34 @@
blinded = 1
else if(eye_blind) // Blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
AdjustEyeBlind(-1)
blinded = 1
else if(istype(glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) //resting your eyes with a blindfold heals blurry eyes faster
eye_blurry = max(eye_blurry-3, 0)
AdjustEyeBlurry(-3)
blinded = 1
//blurry sight
if(vision.is_bruised()) // Vision organs impaired? Permablurry.
eye_blurry = 1
EyeBlurry(2)
if(eye_blurry) // Blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
AdjustEyeBlurry(-1)
//Ears
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
setEarDamage(-1, max(ear_deaf, 1))
EarDeaf(1)
else if(ear_deaf) //deafness, heals slowly over time
adjustEarDamage(0,-1)
AdjustEarDeaf(-1)
else if(istype(l_ear, /obj/item/clothing/ears/earmuffs) || istype(r_ear, /obj/item/clothing/ears/earmuffs)) //resting your ears with earmuffs heals ear damage faster
adjustEarDamage(-0.15,0)
setEarDamage(-1, max(ear_deaf, 1))
AdjustEarDamage(-0.15)
EarDeaf(1)
else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
adjustEarDamage(-0.05,0)
AdjustEarDamage(-0.05)
if(flying)
animate(src, pixel_y = pixel_y + 5 , time = 10, loop = 1, easing = SINE_EASING)
@@ -896,7 +894,7 @@
else //dead
blinded = 1
silent = 0
SetSilence(0)
/mob/living/carbon/human/handle_vision()
@@ -995,8 +993,8 @@
if(shock_stage >= 30)
if(shock_stage == 30) custom_emote(1,"is having trouble keeping their eyes open.")
eye_blurry = max(2, eye_blurry)
stuttering = max(stuttering, 5)
EyeBlurry(2)
Stuttering(5)
if(shock_stage == 40)
to_chat(src, "<font color='red'><b>"+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!"))
@@ -1183,8 +1181,7 @@
if(!heart_attack)
return
else
if(losebreath < 3)
losebreath += 2
AdjustLoseBreath(2, bound_lower = 0, bound_upper = 3)
adjustOxyLoss(5)
adjustBruteLoss(1)
+1 -1
View File
@@ -142,7 +142,7 @@
message = uppertext(message)
verb = "yells loudly"
if(locate(/obj/item/organ/internal/cyberimp/brain/clown_voice) in internal_organs)
if((COMIC in mutations) || (locate(/obj/item/organ/internal/cyberimp/brain/clown_voice) in internal_organs))
message = "<span class='sans'>[message]</span>"
returns[1] = message
@@ -189,7 +189,7 @@
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
H.Paralyse(3) // 3 gives them one second to wake up and run away a bit!
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
H.sleeping = min(H.sleeping+2, 10)
H.AdjustSleeping(8, bound_lower = 0, bound_upper = 10)
else if(SA_pp > 0.15) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
if(prob(20))
spawn(0)
@@ -120,11 +120,11 @@
var/female_scream_sound = 'sound/goonstation/voice/female_scream.ogg'
//Default hair/headacc style vars.
var/default_hair = "Bald" //Default hair style for newly created humans unless otherwise set.
var/default_hair //Default hair style for newly created humans unless otherwise set.
var/default_hair_colour
var/default_fhair = "Shaved" //Default facial hair style for newly created humans unless otherwise set.
var/default_fhair //Default facial hair style for newly created humans unless otherwise set.
var/default_fhair_colour
var/default_headacc = "None" //Default head accessory style for newly created humans unless otherwise set.
var/default_headacc //Default head accessory style for newly created humans unless otherwise set.
var/default_headacc_colour
//Defining lists of icon skin tones for species that have them.
@@ -305,7 +305,7 @@
if(!H.co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so.
H.co2overloadtime = world.time
else if(world.time - H.co2overloadtime > 120)
H.Paralyse(3)
H.Paralyse(5)
H.adjustOxyLoss(3) // Lets hurt em a little, let them know we mean business
if(world.time - H.co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good!
H.adjustOxyLoss(8)
@@ -314,6 +314,7 @@
H.emote("cough")
else
H.clear_alert("co2")
H.co2overloadtime = 0
if(atmos_requirements["min_co2"]) //species breathes this gas, so they got their air
H.failed_last_breath = 0
H.adjustOxyLoss(-5)
@@ -332,7 +333,8 @@
if(SA_pp > atmos_requirements["sa_para"]) // Enough to make us paralysed for a bit
H.Paralyse(3) // 3 gives them one second to wake up and run away a bit!
if(SA_pp > atmos_requirements["sa_sleep"]) // Enough to make us sleep as well
H.sleeping = max(H.sleeping + 2, 10)
// This value is large because breaths are taken only once every 4 life ticks.
H.AdjustSleeping(8, bound_lower = 0, bound_upper = 10)
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
if(prob(20))
spawn(0)
@@ -509,7 +511,7 @@
if(tinted_weldhelh)
H.overlay_fullscreen("tint", /obj/screen/fullscreen/impaired, 2)
if(H.tinttotal >= TINT_BLIND)
H.eye_blind = max(H.eye_blind, 1)
H.EyeBlind(1)
else
H.clear_fullscreen("tint")
@@ -8,7 +8,7 @@
language = "Sol Common"
flags = HAS_LIPS | CAN_BE_FAT
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_SKIN_TONE
bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS
dietflags = DIET_OMNI
unarmed_type = /datum/unarmed_attack/punch
blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \
@@ -40,7 +40,7 @@
flags = HAS_LIPS
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = FEET_CLAWS | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING
bodyflags = FEET_CLAWS | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_BODY_MARKINGS | HAS_HEAD_MARKINGS | HAS_SKIN_COLOR | HAS_ALT_HEADS | TAIL_WAGGING
dietflags = DIET_CARN
cold_level_1 = 280 //Default 260 - Lower is better
@@ -112,13 +112,11 @@
flags = HAS_LIPS | CAN_BE_FAT
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING | HAS_FUR
bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING | HAS_FUR
dietflags = DIET_OMNI
reagent_tag = PROCESS_ORG
flesh_color = "#AFA59E"
base_color = "#333333"
//Default styles for created mobs.
default_headacc = "Tajaran Ears"
base_color = "#424242"
butt_sprite = "tajaran"
has_organ = list(
@@ -164,11 +162,11 @@
flags = HAS_LIPS
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = FEET_PADDED | HAS_TAIL | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | TAIL_WAGGING | HAS_FUR
bodyflags = FEET_PADDED | HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED | HAS_HEAD_ACCESSORY | HAS_MARKINGS | HAS_SKIN_COLOR | HAS_FUR
dietflags = DIET_OMNI
reagent_tag = PROCESS_ORG
flesh_color = "#966464"
base_color = "#B43214"
base_color = "#CF4D2F"
butt_sprite = "vulp"
has_organ = list(
@@ -212,7 +210,7 @@
flags = HAS_LIPS
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_SKIN_COLOR
bodyflags = HAS_SKIN_COLOR | HAS_BODY_MARKINGS
dietflags = DIET_HERB
flesh_color = "#8CD7A3"
blood_color = "#1D2CBF"
@@ -287,7 +285,7 @@
flags = NO_SCAN | IS_WHITELISTED
clothing_flags = HAS_SOCKS
dietflags = DIET_OMNI
bodyflags = HAS_ICON_SKIN_TONE | HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED
bodyflags = HAS_ICON_SKIN_TONE | HAS_TAIL | TAIL_WAGGING | TAIL_OVERLAPPED | HAS_BODY_MARKINGS | HAS_TAIL_MARKINGS
blood_color = "#2299FC"
flesh_color = "#808D11"
@@ -705,6 +703,7 @@
flags = IS_WHITELISTED | HAS_LIPS | CAN_BE_FAT
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_BODY_MARKINGS
dietflags = DIET_HERB
reagent_tag = PROCESS_ORG
blood_color = "#A200FF"
@@ -855,7 +854,7 @@
flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_DNA | NO_POISON | RADIMMUNE | ALL_RPARTS
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS
bodyflags = HAS_SKIN_COLOR | HAS_MARKINGS | HAS_HEAD_ACCESSORY
bodyflags = HAS_SKIN_COLOR | HAS_HEAD_MARKINGS | HAS_HEAD_ACCESSORY
dietflags = 0 //IPCs can't eat, so no diet
blood_color = "#1F181F"
flesh_color = "#AAAAAA"
@@ -946,7 +945,7 @@
flags = IS_WHITELISTED | HAS_LIPS
clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT
bodyflags = FEET_CLAWS | HAS_SKIN_TONE
bodyflags = FEET_CLAWS | HAS_SKIN_TONE | HAS_BODY_MARKINGS
dietflags = DIET_OMNI
cold_level_1 = -1 //Default 260 - Lower is better
@@ -212,15 +212,15 @@ var/global/list/damage_icon_parts = list()
if(update_icons) update_icons()
//BASE MOB SPRITE
/mob/living/carbon/human/proc/update_body(var/update_icons=1)
/mob/living/carbon/human/proc/update_body(var/update_icons=1, var/rebuild_base=0)
var/husk_color_mod = rgb(96,88,80)
var/hulk_color_mod = rgb(48,224,40)
var/husk = (HUSK in src.mutations)
var/fat = (FAT in src.mutations)
var/hulk = (HULK in src.mutations)
var/skeleton = (SKELETON in src.mutations)
var/husk = (HUSK in mutations)
var/fat = (FAT in mutations)
var/hulk = (HULK in mutations)
var/skeleton = (SKELETON in mutations)
if(species && species.bodyflags & HAS_ICON_SKIN_TONE)
species.updatespeciescolor(src)
@@ -262,7 +262,7 @@ var/global/list/damage_icon_parts = list()
icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]"
var/icon/base_icon
if(human_icon_cache[icon_key])
if(human_icon_cache[icon_key] && !rebuild_base)
base_icon = human_icon_cache[icon_key]
else
//BEGIN CACHED ICON GENERATION.
@@ -309,7 +309,7 @@ var/global/list/damage_icon_parts = list()
//END CACHED ICON GENERATION.
stand_icon.Blend(base_icon,ICON_OVERLAY)
if(src.species.bodyflags & TAIL_OVERLAPPED) // If the user's species is flagged to have a tail that needs to be overlapped by limbs...
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the user's species is flagged to have a tail that needs to be overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
overlays_standing[LIMBS_LAYER] = image(stand_icon) // Diverts limbs to their own layer so they can overlay things (i.e. tails).
else
overlays_standing[LIMBS_LAYER] = null // So we don't get the old species' sprite splatted on top of the new one's
@@ -360,29 +360,32 @@ var/global/list/damage_icon_parts = list()
//MARKINGS OVERLAY
/mob/living/carbon/human/proc/update_markings(var/update_icons=1)
//Reset our markings
//Reset our markings.
overlays_standing[MARKINGS_LAYER] = null
//Base icon.
var/icon/markings_standing = new/icon('icons/mob/body_accessory.dmi',"accessory_none_s")
//Body markings.
var/obj/item/organ/external/chest/chest_organ = get_organ("chest")
if(!chest_organ || chest_organ.is_stump() || (chest_organ.status & ORGAN_DESTROYED) )
if(update_icons) update_icons()
return
//base icons
var/icon/markings_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
if(m_style && m_style != "None")
var/datum/sprite_accessory/marking_style = marking_styles_list[m_style]
if(marking_style)
var/obj/item/organ/external/head/head_organ = get_organ("head")
if((!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED)) && marking_style.marking_location == "head")
return //If the head is destroyed and it is the organ the marking is located on, get us out of here. This prevents floating optical markings on decapitated IPCs, for example.
var/icon/markings_s = new/icon("icon" = marking_style.icon, "icon_state" = "[marking_style.icon_state]_s")
if(marking_style.do_colouration)
markings_s.Blend(rgb(r_markings, g_markings, b_markings), ICON_ADD)
markings_standing.Blend(markings_s, ICON_OVERLAY)
else
//warning("Invalid m_style for [species.name]: [m_style]")
if(chest_organ && !chest_organ.is_stump() && !(chest_organ.status & ORGAN_DESTROYED) && m_styles["body"])
var/body_marking = m_styles["body"]
var/datum/sprite_accessory/body_marking_style = marking_styles_list[body_marking]
if(body_marking_style && body_marking_style.species_allowed && (species.name in body_marking_style.species_allowed))
var/icon/b_marking_s = new/icon("icon" = body_marking_style.icon, "icon_state" = "[body_marking_style.icon_state]_s")
if(body_marking_style.do_colouration)
b_marking_s.Blend(m_colours["body"], ICON_ADD)
markings_standing.Blend(b_marking_s, ICON_OVERLAY)
//Head markings.
var/obj/item/organ/external/head/head_organ = get_organ("head")
if(head_organ && !head_organ.is_stump() && !(head_organ.status & ORGAN_DESTROYED) && m_styles["head"]) //If the head is destroyed, forget the head markings. This prevents floating optical markings on decapitated IPCs, for example.
var/head_marking = m_styles["head"]
var/datum/sprite_accessory/head_marking_style = marking_styles_list[head_marking]
if(head_marking_style && head_marking_style.species_allowed && (head_organ.species.name in head_marking_style.species_allowed))
var/icon/h_marking_s = new/icon("icon" = head_marking_style.icon, "icon_state" = "[head_marking_style.icon_state]_s")
if(head_marking_style.do_colouration)
h_marking_s.Blend(m_colours["head"], ICON_ADD)
markings_standing.Blend(h_marking_s, ICON_OVERLAY)
overlays_standing[MARKINGS_LAYER] = image(markings_standing)
@@ -399,7 +402,7 @@ var/global/list/damage_icon_parts = list()
return
//masks and helmets can obscure our head accessory
if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
if((head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
if(update_icons) update_icons()
return
@@ -426,15 +429,15 @@ var/global/list/damage_icon_parts = list()
//HAIR OVERLAY
/mob/living/carbon/human/proc/update_hair(var/update_icons=1)
//Reset our hair
overlays_standing[HAIR_LAYER] = null
overlays_standing[HAIR_LAYER] = null
var/obj/item/organ/external/head/head_organ = get_organ("head")
if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) )
if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED))
if(update_icons) update_icons()
return
//masks and helmets can obscure our hair, unless we're a synthetic
if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
if((head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
if(update_icons) update_icons()
return
@@ -454,13 +457,19 @@ var/global/list/damage_icon_parts = list()
else if(hair_style.do_colouration)
hair_s.Blend(rgb(head_organ.r_hair, head_organ.g_hair, head_organ.b_hair), ICON_ADD)
if(hair_style.secondary_theme)
var/icon/hair_secondary_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_[hair_style.secondary_theme]_s")
if(!hair_style.no_sec_colour)
hair_secondary_s.Blend(rgb(head_organ.r_hair_sec, head_organ.g_hair_sec, head_organ.b_hair_sec), ICON_ADD)
hair_s.Blend(hair_secondary_s, ICON_OVERLAY)
hair_standing = hair_s //hair_standing.Blend(hair_s, ICON_OVERLAY)
//Having it this way preserves animations. Useful for IPC screens.
else
//warning("Invalid h_style for [species.name]: [h_style]")
//hair_standing.Blend(debrained_s, ICON_OVERLAY)//how does i overlay for fish?
overlays_standing[HAIR_LAYER] = image(hair_standing)
overlays_standing[HAIR_LAYER] = image(hair_standing)
if(update_icons) update_icons()
@@ -468,15 +477,15 @@ var/global/list/damage_icon_parts = list()
//FACIAL HAIR OVERLAY
/mob/living/carbon/human/proc/update_fhair(var/update_icons=1)
//Reset our facial hair
overlays_standing[FHAIR_LAYER] = null
overlays_standing[FHAIR_LAYER] = null
var/obj/item/organ/external/head/head_organ = get_organ("head")
if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) )
if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED))
if(update_icons) update_icons()
return
//masks and helmets can obscure our facial hair, unless we're a synthetic
if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
if((head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
if(update_icons) update_icons()
return
@@ -492,11 +501,18 @@ var/global/list/damage_icon_parts = list()
facial_s.Blend(rgb(r_skin, g_skin, b_skin, 160), ICON_AND)
else if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(head_organ.r_facial, head_organ.g_facial, head_organ.b_facial), ICON_ADD)
if(facial_hair_style.secondary_theme)
var/icon/facial_secondary_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_[facial_hair_style.secondary_theme]_s")
if(!facial_hair_style.no_sec_colour)
facial_secondary_s.Blend(rgb(head_organ.r_facial_sec, head_organ.g_facial_sec, head_organ.b_facial_sec), ICON_ADD)
facial_s.Blend(facial_secondary_s, ICON_OVERLAY)
face_standing.Blend(facial_s, ICON_OVERLAY)
else
//warning("Invalid f_style for [species.name]: [f_style]")
overlays_standing[FHAIR_LAYER] = image(face_standing)
overlays_standing[FHAIR_LAYER] = image(face_standing)
if(update_icons) update_icons()
@@ -536,7 +552,7 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/proc/update_mutantrace(var/update_icons=1)
//BS12 EDIT
var/skel = (SKELETON in src.mutations)
var/skel = (SKELETON in mutations)
if(skel)
skeleton = 'icons/mob/human_races/r_skeleton.dmi'
else
@@ -562,7 +578,7 @@ var/global/list/damage_icon_parts = list()
..()
if(notransform) return
update_mutations(0)
update_body(0)
update_body(0, 1) //Update the body and force limb icon regeneration.
update_hair(0)
update_head_accessory(0)
update_fhair(0)
@@ -997,13 +1013,21 @@ var/global/list/damage_icon_parts = list()
if(inv)
inv.update_icon()
if(wear_mask && (istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/accessory)))
var/obj/item/organ/external/head/head_organ = get_organ("head")
var/datum/sprite_accessory/alt_heads/alternate_head
if(head_organ.alt_head && head_organ.alt_head != "None")
alternate_head = alt_heads_list[head_organ.alt_head]
var/image/standing
var/icon/mask_icon = new(wear_mask.icon)
if(wear_mask.icon_override)
standing = image("icon" = wear_mask.icon_override, "icon_state" = "[wear_mask.icon_state]")
mask_icon = new(wear_mask.icon_override)
standing = image("icon" = wear_mask.icon_override, "icon_state" = "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]")
else if(wear_mask.sprite_sheets && wear_mask.sprite_sheets[species.name])
standing = image("icon" = wear_mask.sprite_sheets[species.name], "icon_state" = "[wear_mask.icon_state]")
mask_icon = new(wear_mask.sprite_sheets[species.name])
standing = image("icon" = wear_mask.sprite_sheets[species.name], "icon_state" = "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]")
else
standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]")
standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state][(alternate_head && ("[wear_mask.icon_state]_[alternate_head.suffix]" in mask_icon.IconStates())) ? "_[alternate_head.suffix]" : ""]")
if(!istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA)
var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "maskblood")
@@ -1053,7 +1077,7 @@ var/global/list/damage_icon_parts = list()
clear_alert("legcuffed")
if(legcuffed)
overlays_standing[LEGCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "legcuff1")
throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = src.legcuffed)
throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed)
if(m_intent != "walk")
m_intent = "walk"
if(hud_used && hud_used.move_intent)
@@ -1121,71 +1145,66 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/proc/update_tail_layer(var/update_icons=1)
overlays_standing[TAIL_UNDERLIMBS_LAYER] = null // SEW direction icons, overlayed by LIMBS_LAYER.
overlays_standing[TAIL_LAYER] = null // This will be one of two things:
// If the species' tail is overlapped by limbs, this will be only the N direction icon so tails can still appear on the outside of uniforms and such.
// Otherwise, since the user's tail isn't overlapped by limbs, it will be a full icon with all directions.
overlays_standing[TAIL_LAYER] = null /* This will be one of two things:
If the species' tail is overlapped by limbs, this will be only the N direction icon so tails can still appear on the outside of uniforms and such.
Otherwise, since the user's tail isn't overlapped by limbs, it will be a full icon with all directions. */
var/icon/tail_marking_icon
var/datum/sprite_accessory/body_markings/tail/tail_marking_style
if(m_styles["tail"] != "None" && (species.bodyflags & HAS_TAIL_MARKINGS))
var/tail_marking = m_styles["tail"]
tail_marking_style = marking_styles_list[tail_marking]
tail_marking_icon = new/icon("icon" = tail_marking_style.icon, "icon_state" = "[tail_marking_style.icon_state]_s")
tail_marking_icon.Blend(m_colours["tail"], ICON_ADD)
if(body_accessory)
if(body_accessory.try_restrictions(src))
var/icon/accessory_s = new/icon("icon" = body_accessory.icon, "icon_state" = body_accessory.icon_state)
if(species.bodyflags & HAS_SKIN_COLOR)
accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode)
if(species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
if(tail_marking_icon && (body_accessory.name in tail_marking_style.tails_allowed))
accessory_s.Blend(tail_marking_icon, ICON_OVERLAY)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/temp1 = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
if(species.name in body_accessory.allowed_species)
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "[species.tail]_delay")
temp1 = temp
else
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "vulptail_delay")
temp1 = temp
var/icon/under = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "accessory_none_s")
under.Insert(new/icon(accessory_s, dir=SOUTH), dir=SOUTH)
under.Insert(new/icon(accessory_s, dir=EAST), dir=EAST)
under.Insert(new/icon(accessory_s, dir=WEST), dir=WEST)
temp1.Insert(new/icon(accessory_s,dir=SOUTH),dir=SOUTH)
temp1.Insert(new/icon(accessory_s,dir=EAST),dir=EAST)
temp1.Insert(new/icon(accessory_s,dir=WEST),dir=WEST)
overlays_standing[TAIL_UNDERLIMBS_LAYER] = image(temp1, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
overlays_standing[TAIL_UNDERLIMBS_LAYER] = image(under, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
// Creates a blank icon, and copies accessory_s' north direction sprite into it
// before passing that to the tail layer that overlays uniforms and such.
var/icon/temp2 = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
if(species.name in body_accessory.allowed_species)
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "[species.tail]_delay")
temp2 = temp
else
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "vulptail_delay")
temp2 = temp
var/icon/over = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "accessory_none_s")
over.Insert(new/icon(accessory_s, dir=NORTH), dir=NORTH)
temp2.Insert(new/icon(accessory_s,dir=NORTH),dir=NORTH)
overlays_standing[TAIL_LAYER] = image(temp2, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
overlays_standing[TAIL_LAYER] = image(over, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
else // Otherwise, since the user's tail isn't overlapped by limbs, go ahead and use default icon generation.
overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
else if(species.tail && species.bodyflags & HAS_TAIL) //no tailless tajaran
if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space))
var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s")
if(species.bodyflags & HAS_SKIN_COLOR)
tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
if(species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
if(tail_marking_icon)
tail_s.Blend(tail_marking_icon, ICON_OVERLAY)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/temp1 = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_delay")
temp1.Insert(new/icon(tail_s,dir=SOUTH),dir=SOUTH)
temp1.Insert(new/icon(tail_s,dir=EAST),dir=EAST)
temp1.Insert(new/icon(tail_s,dir=WEST),dir=WEST)
var/icon/under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "blank")
under.Insert(new/icon(tail_s, dir=SOUTH), dir=SOUTH)
under.Insert(new/icon(tail_s, dir=EAST), dir=EAST)
under.Insert(new/icon(tail_s, dir=WEST), dir=WEST)
overlays_standing[TAIL_UNDERLIMBS_LAYER] = image(temp1)
overlays_standing[TAIL_UNDERLIMBS_LAYER] = image(under)
// Creates a blank icon, and copies accessory_s' north direction sprite into it
// before passing that to the tail layer that overlays uniforms and such.
var/icon/temp2 = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_delay")
temp2.Insert(new/icon(tail_s,dir=NORTH),dir=NORTH)
// Creates a blank icon, and copies accessory_s' north direction sprite into it before passing that to the tail layer that overlays uniforms and such.
var/icon/over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "blank")
over.Insert(new/icon(tail_s, dir=NORTH), dir=NORTH)
overlays_standing[TAIL_LAYER] = image(temp2)
overlays_standing[TAIL_LAYER] = image(over)
else // Otherwise, since the user's tail isn't overlapped by limbs, go ahead and use default icon generation.
overlays_standing[TAIL_LAYER] = image(tail_s)
overlays_standing[TAIL_LAYER] = image(tail_s)
if(update_icons)
update_icons()
@@ -1193,70 +1212,67 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/proc/start_tail_wagging(var/update_icons=1)
overlays_standing[TAIL_UNDERLIMBS_LAYER] = null // SEW direction icons, overlayed by LIMBS_LAYER.
overlays_standing[TAIL_LAYER] = null // This will be one of two things:
// If the species' tail is overlapped by limbs, this will be only the N direction icon so tails can still appear on the outside of uniforms and such.
// Otherwise, since the user's tail isn't overlapped by limbs, it will be a full icon with all directions.
overlays_standing[TAIL_LAYER] = null /* This will be one of two things:
If the species' tail is overlapped by limbs, this will be only the N direction icon so tails can still appear on the outside of uniforms and such.
Otherwise, since the user's tail isn't overlapped by limbs, it will be a full icon with all directions. */
var/icon/tail_marking_icon
var/datum/sprite_accessory/body_markings/tail/tail_marking_style
if(m_styles["tail"] != "None" && (species.bodyflags & HAS_TAIL_MARKINGS))
var/tail_marking = m_styles["tail"]
tail_marking_style = marking_styles_list[tail_marking]
tail_marking_icon = new/icon("icon" = tail_marking_style.icon, "icon_state" = "[tail_marking_style.icon_state]w_s")
tail_marking_icon.Blend(m_colours["tail"], ICON_ADD)
if(body_accessory)
var/icon/accessory_s = new/icon("icon" = body_accessory.get_animated_icon(), "icon_state" = body_accessory.get_animated_icon_state())
if(species.bodyflags & HAS_SKIN_COLOR)
accessory_s.Blend(rgb(r_skin, g_skin, b_skin), body_accessory.blend_mode)
if(species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
if(tail_marking_icon && (body_accessory.name in tail_marking_style.tails_allowed))
accessory_s.Blend(tail_marking_icon, ICON_OVERLAY)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/temp1 = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
if(body_accessory.allowed_species)
if(species.name in body_accessory.allowed_species)
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "[species.tail]_delay")
temp1 = temp
else
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "vulptail_delay")
temp1 = temp
var/icon/under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "Vulpkanin_tail_delay")
if(body_accessory.allowed_species && (species.name in body_accessory.allowed_species))
under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay")
under.Insert(new/icon(accessory_s, dir=SOUTH), dir=SOUTH)
under.Insert(new/icon(accessory_s, dir=EAST), dir=EAST)
under.Insert(new/icon(accessory_s, dir=WEST), dir=WEST)
temp1.Insert(accessory_s,dir=SOUTH)
temp1.Insert(accessory_s,dir=EAST)
temp1.Insert(accessory_s,dir=WEST)
overlays_standing[TAIL_UNDERLIMBS_LAYER] = image(under, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
overlays_standing[TAIL_UNDERLIMBS_LAYER] = image(temp1, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
// Creates a blank icon, and copies accessory_s' north direction sprite into it before passing that to the tail layer that overlays uniforms and such.
var/icon/over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "Vulpkanin_tail_delay")
if(body_accessory.allowed_species && (species.name in body_accessory.allowed_species)) // If the user's species is in the list of allowed species for the currently selected body accessory, use the appropriate animation timing blank
over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay")
over.Insert(new/icon(accessory_s, dir=NORTH), dir=NORTH)
// Creates a blank icon, and copies accessory_s' north direction sprite into it
// before passing that to the tail layer that overlays uniforms and such.
var/icon/temp2 = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
if(species.name in body_accessory.allowed_species) // If the user's species is in the list of allowed species for the currently selected body accessory, use the appropriate animation timing blank
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "[species.tail]_delay")
temp2 = temp
else // Else if the user's species is not in the list of allowed species for the currently selected body accessory, this point must have been reached by admin-override. Use vulpkanin timings as default.
var/icon/temp = new/icon("icon" = 'icons/mob/body_accessory.dmi', "icon_state" = "vulptail_delay")
temp2 = temp
temp2.Insert(accessory_s,dir=NORTH)
overlays_standing[TAIL_LAYER] = image(temp2, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
overlays_standing[TAIL_LAYER] = image(over, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
else // Otherwise, since the user's tail isn't overlapped by limbs, go ahead and use default icon generation.
overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
overlays_standing[TAIL_LAYER] = image(accessory_s, "pixel_x" = body_accessory.pixel_x_offset, "pixel_y" = body_accessory.pixel_y_offset)
else if(species.tail && species.bodyflags & HAS_TAIL)
var/icon/tailw_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]w_s")
if(species.bodyflags & HAS_SKIN_COLOR)
tailw_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
if(species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs...
if(tail_marking_icon)
tailw_s.Blend(tail_marking_icon, ICON_OVERLAY)
if((!body_accessory || istype(body_accessory, /datum/body_accessory/tail)) && species.bodyflags & TAIL_OVERLAPPED) // If the player has a species whose tail is overlapped by limbs... (having a non-tail body accessory like the snake body will override this)
// Gives the underlimbs layer SEW direction icons since it's overlayed by limbs and just about everything else anyway.
var/icon/temp1 = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_delay")
temp1.Insert(tailw_s,dir=SOUTH)
temp1.Insert(tailw_s,dir=EAST)
temp1.Insert(tailw_s,dir=WEST)
var/icon/under = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay")
under.Insert(new/icon(tailw_s, dir=SOUTH), dir=SOUTH)
under.Insert(new/icon(tailw_s, dir=EAST), dir=EAST)
under.Insert(new/icon(tailw_s, dir=WEST), dir=WEST)
overlays_standing[TAIL_UNDERLIMBS_LAYER] = image(temp1)
overlays_standing[TAIL_UNDERLIMBS_LAYER] = image(under)
// Creates a blank icon, and copies accessory_s' north direction sprite into it
// before passing that to the tail layer that overlays uniforms and such.
var/icon/temp2 = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_delay")
temp2.Insert(tailw_s,dir=NORTH)
// Creates a blank icon, and copies accessory_s' north direction sprite into it before passing that to the tail layer that overlays uniforms and such.
var/icon/over = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.name]_tail_delay")
over.Insert(new/icon(tailw_s, dir=NORTH), dir=NORTH)
overlays_standing[TAIL_LAYER] = image(temp2)
overlays_standing[TAIL_LAYER] = image(over)
else // Otherwise, since the user's tail isn't overlapped by limbs, go ahead and use default icon generation.
overlays_standing[TAIL_LAYER] = image(tailw_s)
overlays_standing[TAIL_LAYER] = image(tailw_s)
if(update_icons)
update_icons()
@@ -1282,17 +1298,17 @@ var/global/list/damage_icon_parts = list()
if(wear_suit.icon_override)
var/icon_path = "[wear_suit.icon_override]"
icon_path = "[copytext(icon_path, 1, findtext(icon_path, "/suit.dmi"))]/collar.dmi" //If this file doesn't exist, the end result is that COLLAR_LAYER will be unchanged (empty).
var/icon/icon_file
if(fexists(icon_path)) //Just ensuring the nonexistance of a file with the above path won't cause a runtime.
icon_file = new(icon_path)
standing = image("icon" = icon_file, "icon_state" = "[wear_suit.icon_state]")
var/icon/icon_file = new(icon_path)
if(wear_suit.icon_state in icon_file.IconStates())
standing = image("icon" = icon_file, "icon_state" = "[wear_suit.icon_state]")
else if(wear_suit.sprite_sheets && wear_suit.sprite_sheets[species.name])
var/icon_path = "[wear_suit.sprite_sheets[species.name]]"
icon_path = "[copytext(icon_path, 1, findtext(icon_path, "/suit.dmi"))]/collar.dmi" //If this file doesn't exist, the end result is that COLLAR_LAYER will be unchanged (empty).
var/icon/icon_file
if(fexists(icon_path)) //Just ensuring the nonexistance of a file with the above path won't cause a runtime.
icon_file = new(icon_path)
standing = image("icon" = icon_file, "icon_state" = "[wear_suit.icon_state]")
var/icon/icon_file = new(icon_path)
if(wear_suit.icon_state in icon_file.IconStates())
standing = image("icon" = icon_file, "icon_state" = "[wear_suit.icon_state]")
else
if(wear_suit.icon_state in C.IconStates())
standing = image("icon" = C, "icon_state" = "[wear_suit.icon_state]")
+12 -15
View File
@@ -49,10 +49,10 @@
var/datum/gas_mixture/breath
if(health <= config.health_threshold_crit)
losebreath++
AdjustLoseBreath(1)
if(losebreath > 0)
losebreath--
AdjustLoseBreath(-1)
if(prob(10))
spawn emote("gasp")
if(istype(loc, /obj/))
@@ -165,7 +165,7 @@
if(SA_partialpressure > SA_para_min)
Paralyse(3)
if(SA_partialpressure > SA_sleep_min)
sleeping = max(sleeping+2, 10)
AdjustSleeping(2, bound_lower = 0, bound_upper = 10)
else if(SA_partialpressure > 0.01)
if(prob(20))
spawn(0) emote(pick("giggle","laugh"))
@@ -319,30 +319,27 @@
C.pixel_x -= pixel_x_diff
C.pixel_y -= pixel_y_diff
src = oldsrc
dizziness = max(dizziness - restingpwr, 0)
AdjustDizzy(-restingpwr)
if(drowsyness)
drowsyness = max(drowsyness - restingpwr, 0)
eye_blurry = max(2, eye_blurry)
AdjustDrowsy(-restingpwr)
EyeBlurry(2)
if(prob(5))
sleeping += 1
AdjustSleeping(1)
Paralyse(5)
if(confused)
confused = max(0, confused - 1)
AdjustConfused(-1)
//Jitteryness
if(jitteriness)
do_jitter_animation(jitteriness)
jitteriness = max(jitteriness - restingpwr, 0)
AdjustJitter(-restingpwr)
if(hallucination)
spawn handle_hallucinations()
if(hallucination<=2)
hallucination = 0
else
hallucination -= 2
AdjustHallucinate(-2)
/mob/living/carbon/handle_sleeping()
if(..())
@@ -352,8 +349,8 @@
spawn(0)
emote("snore")
// Keep SSD people asleep
if(player_logged && sleeping < 2)
sleeping = 2
if(player_logged)
Sleeping(2)
return sleeping
+6 -6
View File
@@ -208,25 +208,25 @@
if(src.stuttering) src.stuttering = 0
if(src.eye_blind)
src.eye_blind = 0
src.SetEyeBlind(0)
src.blinded = 1
if(src.ear_deaf > 0) src.ear_deaf = 0
if(src.ear_deaf > 0) SetEarDeaf(0)
if(src.ear_damage < 25)
src.ear_damage = 0
SetEarDamage(0)
src.density = !( src.lying )
if(src.disabilities & BLIND)
src.blinded = 1
if(src.disabilities & DEAF)
src.ear_deaf = 1
EarDeaf(1)
if(src.eye_blurry > 0)
src.eye_blurry = 0
SetEyeBlurry(0)
if(src.druggy > 0)
src.druggy = 0
SetDruggy(0)
return 1
@@ -0,0 +1,17 @@
/mob/living/carbon/update_stat()
if(status_flags & GODMODE)
return
if(stat != DEAD)
// if(health <= min_health)
if(health <= config.health_threshold_dead)
death()
return
// if(paralysis || sleeping || getOxyLoss() > low_oxy_ko || (status_flags & FAKEDEATH) || health <= crit_health)
if(paralysis || sleeping || getOxyLoss() > 50 || (status_flags & FAKEDEATH) || health <= config.health_threshold_crit)
if(stat == CONSCIOUS)
KnockOut()
else
if(stat == UNCONSCIOUS)
// updating=FALSE because `WakeUp` will handle canmove up for us
StopResting(updating=FALSE)
WakeUp()
+5 -6
View File
@@ -57,17 +57,16 @@
rad_damage = max(effect * ((100-run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm."))/100),0)
radiation += rad_damage
if(SLUR)
slurring = max(slurring,(effect * blocked))
Slur(effect * blocked)
if(STUTTER)
if(status_flags & CANSTUN) // stun is usually associated with stutter
stuttering = max(stuttering,(effect * blocked))
Stuttering(effect * blocked)
if(EYE_BLUR)
eye_blurry = max(eye_blurry,(effect * blocked))
EyeBlurry(effect * blocked)
if(DROWSY)
drowsyness = max(drowsyness,(effect * blocked))
Drowsy(effect * blocked)
if(JITTER)
if(status_flags & CANSTUN)
jitteriness = max(jitteriness,(effect * blocked))
Jitter(effect * blocked)
updatehealth()
return 1
+1 -1
View File
@@ -3,4 +3,4 @@
clear_fullscreens()
update_action_buttons_icon()
..(gibbed)
..(gibbed)
+13 -12
View File
@@ -117,14 +117,14 @@
/mob/living/proc/handle_stunned()
if(stunned)
AdjustStunned(-1)
AdjustStunned(-1, updating = 1, force = 1)
if(!stunned)
update_icons()
return stunned
/mob/living/proc/handle_weakened()
if(weakened)
AdjustWeakened(-1)
AdjustWeakened(-1, updating = 1, force = 1)
if(!weakened)
update_icons()
return weakened
@@ -136,22 +136,22 @@
/mob/living/proc/handle_silent()
if(silent)
silent = max(silent-1, 0)
AdjustSilence(-1)
return silent
/mob/living/proc/handle_drugged()
if(druggy)
druggy = max(druggy-1, 0)
AdjustDruggy(-1)
return druggy
/mob/living/proc/handle_slurring()
if(slurring)
slurring = max(slurring-1, 0)
AdjustSlur(-1)
return slurring
/mob/living/proc/handle_paralysed()
if(paralysis)
AdjustParalysis(-1)
AdjustParalysis(-1, updating = 1, force = 1)
return paralysis
/mob/living/proc/handle_sleeping()
@@ -164,7 +164,7 @@
/mob/living/proc/handle_slowed()
if(slowed)
slowed = max(slowed-1, 0)
AdjustSlowed(-1)
return slowed
/mob/living/proc/handle_drunk()
@@ -175,19 +175,20 @@
/mob/living/proc/handle_disabilities()
//Eyes
if(disabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own
eye_blind = max(eye_blind, 1)
EyeBlind(1)
else if(eye_blind) //blindness, heals slowly over time
eye_blind = max(eye_blind-1,0)
AdjustEyeBlind(-1)
else if(eye_blurry) //blurry eyes heal slowly
eye_blurry = max(eye_blurry-1, 0)
AdjustEyeBlurry(-1)
//Ears
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
setEarDamage(-1, max(ear_deaf, 1))
EarDeaf(1)
else
// deafness heals slowly over time, unless ear_damage is over 100
if(ear_damage < 100)
adjustEarDamage(-0.05,-1)
AdjustEarDamage(-0.05)
AdjustEarDeaf(-1)
//this handles hud updates. Calls update_vision() and handle_hud_icons()
/mob/living/proc/handle_regular_hud_updates()
+24 -37
View File
@@ -261,19 +261,6 @@
var/obj/item/organ/external/def_zone = ran_zone(t)
return def_zone
//damage/heal the mob ears and adjust the deaf amount
/mob/living/adjustEarDamage(damage, deaf)
ear_damage = max(0, ear_damage + damage)
ear_deaf = max(0, ear_deaf + deaf)
//pass a negative argument to skip one of the variable
/mob/living/setEarDamage(damage, deaf)
if(damage >= 0)
ear_damage = damage
if(deaf >= 0)
ear_deaf = deaf
// heal ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/heal_organ_damage(var/brute, var/burn)
adjustBruteLoss(-brute)
@@ -323,14 +310,6 @@
C.reagents.clear_reagents()
C.reagents.addiction_list.Cut()
/mob/living/proc/update_revive() // handles revival through other means than cloning or adminbus (defib, IPC repair)
stat = CONSCIOUS
dead_mob_list -= src
living_mob_list |= src
mob_list |= src
setEarDamage(-1,0)
timeofdeath = 0
/mob/living/proc/rejuvenate()
var/mob/living/carbon/human/human_mob = null //Get this declared for use later.
@@ -341,25 +320,33 @@
setBrainLoss(0)
setStaminaLoss(0)
SetSleeping(0)
SetParalysis(0)
SetStunned(0)
SetWeakened(0)
slowed = 0
losebreath = 0
dizziness = 0
jitteriness = 0
confused = 0
drowsyness = 0
SetParalysis(0, 1, 1)
SetStunned(0, 1, 1)
SetWeakened(0, 1, 1)
SetSlowed(0)
SetLoseBreath(0)
SetDizzy(0)
SetJitter(0)
SetConfused(0)
SetDrowsy(0)
radiation = 0
druggy = 0
hallucination = 0
SetDruggy(0)
SetHallucinate(0)
blinded = 0
nutrition = 400
bodytemperature = 310
disabilities = 0
blinded = 0
eye_blind = 0
eye_blurry = 0
setEarDamage(0,0)
CureBlind()
CureNearsighted()
CureMute()
CureDeaf()
CureTourettes()
CureEpilepsy()
CureCoughing()
CureNervous()
SetEyeBlind(0)
SetEyeBlurry(0)
SetEarDamage(0)
SetEarDeaf(0)
heal_overall_damage(1000, 1000)
ExtinguishMob()
fire_stacks = 0
@@ -15,8 +15,6 @@
var/brainloss = 0 //'Retardation' damage caused by someone hitting you in the head with a bible or being infected with brainrot.
var/staminaloss = 0 //Stamina damage, or exhaustion. You recover it slowly naturally, and are stunned if it gets too high. Holodeck and hallucinations deal this.
var/hallucination = 0 //Directly affects how long a mob will hallucinate for
var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out.
@@ -32,7 +30,6 @@
var/update_slimes = 1
var/implanting = 0 //Used for the mind-slave implant
var/silent = 0 //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU.
var/floating = 0
var/mob_size = MOB_SIZE_HUMAN
var/nightvision = 0

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