mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 12:37:26 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into DWI
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
|
||||
var/global/BSACooldown = 0
|
||||
var/global/floorIsLava = 0
|
||||
var/global/nologevent = 0
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
+17
-20
@@ -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")
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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]',
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
@@ -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'
|
||||
)
|
||||
@@ -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 = ""
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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>", \
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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]")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -3,4 +3,4 @@
|
||||
|
||||
clear_fullscreens()
|
||||
update_action_buttons_icon()
|
||||
..(gibbed)
|
||||
..(gibbed)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user