mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-22 05:25:15 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into time
This commit is contained in:
@@ -840,4 +840,19 @@ proc/move_ferry()
|
||||
if (ferry_location)
|
||||
ferry_location = 0
|
||||
else
|
||||
ferry_location = 1
|
||||
ferry_location = 1
|
||||
|
||||
//Kicks all the clients currently in the lobby. The second parameter (kick_only_afk) determins if an is_afk() check is ran, or if all clients are kicked
|
||||
//defaults to kicking everyone (afk + non afk clients in the lobby)
|
||||
//returns a list of ckeys of the kicked clients
|
||||
proc/kick_clients_in_lobby(var/message, var/kick_only_afk = 0)
|
||||
var/list/kicked_client_names = list()
|
||||
for(var/client/C in clients)
|
||||
if(istype(C.mob, /mob/new_player))
|
||||
if(kick_only_afk && !C.is_afk()) //Ignore clients who are not afk
|
||||
continue
|
||||
if(message)
|
||||
C << message
|
||||
kicked_client_names.Add("[C.ckey]")
|
||||
del(C)
|
||||
return kicked_client_names
|
||||
@@ -194,7 +194,7 @@
|
||||
<tr id='title_tr'>
|
||||
<td align='center'>
|
||||
<font size='5'><b>Player panel</b></font><br>
|
||||
Hover over a line to see more information - <a href='?_src_=holder;secretsadmin=check_antagonist'>Check antagonists</a>
|
||||
Hover over a line to see more information - <a href='?_src_=holder;secretsadmin=check_antagonist'>Check antagonists</a> - Kick <a href='?_src_=holder;secretsadmin=kick_all_from_lobby;afkonly=0'>everyone</a>/<a href='?_src_=holder;secretsadmin=kick_all_from_lobby;afkonly=1'>AFKers</a> in lobby
|
||||
<p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -309,7 +309,7 @@
|
||||
if("sentinel") M.change_mob_type( /mob/living/carbon/alien/humanoid/sentinel , null, null, delmob )
|
||||
if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob )
|
||||
if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob )
|
||||
if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob )
|
||||
if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob )
|
||||
if("adultslime") M.change_mob_type( /mob/living/carbon/slime/adult , null, null, delmob )
|
||||
if("monkey") M.change_mob_type( /mob/living/carbon/monkey , null, null, delmob )
|
||||
if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob )
|
||||
@@ -1994,7 +1994,7 @@
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","DF")
|
||||
for(var/mob/living/carbon/human/B in mob_list)
|
||||
B.f_style = "Dward Beard"
|
||||
B.facial_hair_style = "Dward Beard"
|
||||
B.update_hair()
|
||||
message_admins("[key_name_admin(usr)] activated dorf mode")
|
||||
if("ionstorm")
|
||||
@@ -2056,6 +2056,20 @@
|
||||
usr << browse(dat, "window=lawchanges;size=800x500")
|
||||
if("check_antagonist")
|
||||
check_antagonists()
|
||||
if("kick_all_from_lobby")
|
||||
if(ticker && ticker.current_state == GAME_STATE_PLAYING)
|
||||
var/afkonly = text2num(href_list["afkonly"])
|
||||
if(alert("Are you sure you want to kick all [afkonly ? "AFK" : ""] clients from the lobby??","Message","Yes","Cancel") != "Yes")
|
||||
usr << "Kick clients from lobby aborted"
|
||||
return
|
||||
var/list/listkicked = kick_clients_in_lobby("\red The admin [usr.ckey] issued a 'kick all clients from lobby' command.", afkonly)
|
||||
var/strkicked = ""
|
||||
for(var/name in listkicked)
|
||||
strkicked += "[name], "
|
||||
message_admins("[key_name_admin(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]", 1)
|
||||
log_admin("[key_name_admin(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]")
|
||||
else
|
||||
usr << "You may only use this when the game is running"
|
||||
if("showailaws")
|
||||
output_ai_laws()
|
||||
if("showgm")
|
||||
@@ -2068,7 +2082,7 @@
|
||||
var/dat = "<B>Showing Crew Manifest.</B><HR>"
|
||||
dat += "<table cellspacing=5><tr><th>Name</th><th>Position</th></tr>"
|
||||
for(var/datum/data/record/t in data_core.general)
|
||||
dat += text("<tr><td>[]</td><td>[]</td></tr>", t.fields["name"], t.fields["rank"])
|
||||
dat += "<tr><td>[t.fields["name"]]</td><td>[t.fields["rank"]]</td></tr>"
|
||||
dat += "</table>"
|
||||
usr << browse(dat, "window=manifest;size=440x410")
|
||||
if("DNA")
|
||||
@@ -2076,7 +2090,7 @@
|
||||
dat += "<table cellspacing=5><tr><th>Name</th><th>DNA</th><th>Blood Type</th></tr>"
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
if(H.dna && H.ckey)
|
||||
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.b_type]</td></tr>"
|
||||
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.blood_type]</td></tr>"
|
||||
dat += "</table>"
|
||||
usr << browse(dat, "window=DNA;size=440x410")
|
||||
if("fingerprints")
|
||||
|
||||
@@ -42,7 +42,7 @@ var/intercom_range_display_status = 0
|
||||
if(T.maptext)
|
||||
on = 1
|
||||
T.maptext = null
|
||||
|
||||
|
||||
if(!on)
|
||||
var/list/seen = list()
|
||||
for(var/obj/machinery/camera/C in cameranet.cameras)
|
||||
@@ -149,10 +149,26 @@ var/intercom_range_display_status = 0
|
||||
src.verbs += /client/proc/disable_communication
|
||||
src.verbs += /client/proc/disable_movement
|
||||
src.verbs += /client/proc/print_pointers
|
||||
src.verbs += /client/proc/count_movable_instances
|
||||
//src.verbs += /client/proc/cmd_admin_rejuvenate
|
||||
|
||||
feedback_add_details("admin_verb","mDV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/count_movable_instances()
|
||||
set category = "Debug"
|
||||
set name = "Count Movable Instances"
|
||||
|
||||
var/count = 0;
|
||||
|
||||
// Apparently there's a BYOND limit on the number of instances for non-turfs.
|
||||
|
||||
for(var/thing in world)
|
||||
if(isturf(thing))
|
||||
continue
|
||||
count++;
|
||||
usr << "There are [count]/[MAX_FLAG] instances of non-turfs in the world."
|
||||
|
||||
|
||||
/client/proc/count_objects_on_z_level()
|
||||
set category = "Mapping"
|
||||
set name = "Count Objects On Level"
|
||||
|
||||
@@ -16,32 +16,6 @@
|
||||
message_admins("[key_name_admin(usr)] made [key_name_admin(M)] drop everything!", 1)
|
||||
feedback_add_details("admin_verb","DEVR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_prison(mob/M as mob in mob_list)
|
||||
set category = "Admin"
|
||||
set name = "Prison"
|
||||
if(!holder)
|
||||
src << "Only administrators may use this command."
|
||||
return
|
||||
if (ismob(M))
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
alert("The AI can't be sent to prison you jerk!", null, null, null, null, null)
|
||||
return
|
||||
//strip their stuff before they teleport into a cell :downs:
|
||||
for(var/obj/item/W in M)
|
||||
M.drop_from_inventory(W)
|
||||
//teleport person to cell
|
||||
M.Paralyse(5)
|
||||
sleep(5) //so they black out before warping
|
||||
M.loc = pick(prisonwarp)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/prisoner = M
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/under/color/orange(prisoner), slot_w_uniform)
|
||||
prisoner.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(prisoner), slot_shoes)
|
||||
spawn(50)
|
||||
M << "\red You have been sent to the prison station!"
|
||||
log_admin("[key_name(usr)] sent [key_name(M)] to the prison station.")
|
||||
message_admins("\blue [key_name_admin(usr)] sent [key_name_admin(M)] to the prison station.", 1)
|
||||
feedback_add_details("admin_verb","PRISON") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_subtle_message(mob/M as mob in mob_list)
|
||||
set category = "Special Verbs"
|
||||
@@ -134,7 +108,7 @@ proc/cmd_admin_mute(whom, mute_type, automute = 0)
|
||||
if(MUTE_DEADCHAT) mute_string = "deadchat and DSAY"
|
||||
if(MUTE_ALL) mute_string = "everything"
|
||||
else return
|
||||
|
||||
|
||||
var/client/C
|
||||
if(istype(whom, /client))
|
||||
C = whom
|
||||
@@ -142,12 +116,12 @@ proc/cmd_admin_mute(whom, mute_type, automute = 0)
|
||||
C = directory[whom]
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
var/datum/preferences/P
|
||||
if(C) P = C.prefs
|
||||
else P = preferences_datums[whom]
|
||||
if(!P) return
|
||||
|
||||
|
||||
if(automute)
|
||||
if(!config.automute_on) return
|
||||
else
|
||||
@@ -188,11 +162,9 @@ proc/cmd_admin_mute(whom, mute_type, automute = 0)
|
||||
message_admins("[key_name_admin(src)] has added a random AI law.", 1)
|
||||
|
||||
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
|
||||
if(show_log == "Yes")
|
||||
command_alert("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert")
|
||||
world << sound('sound/AI/ionstorm.ogg')
|
||||
var/announce_ion_laws = (show_log == "Yes" ? 1 : -1)
|
||||
|
||||
new /datum/round_event/ion_storm{botEmagChance=0}()
|
||||
new /datum/round_event/ion_storm(0, announce_ion_laws)
|
||||
feedback_add_details("admin_verb","ION") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -297,16 +269,14 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
/*Try and locate a record for the person being respawned through data_core.
|
||||
This isn't an exact science but it does the trick more often than not.*/
|
||||
var/id = md5("[G_found.real_name][G_found.mind.assigned_role]")
|
||||
for(var/datum/data/record/t in data_core.locked)
|
||||
if(t.fields["id"]==id)
|
||||
record_found = t//We shall now reference the record.
|
||||
break
|
||||
|
||||
record_found = find_record("id", id, data_core.locked)
|
||||
|
||||
if(record_found)//If they have a record we can determine a few things.
|
||||
new_character.real_name = record_found.fields["name"]
|
||||
new_character.gender = record_found.fields["sex"]
|
||||
new_character.age = record_found.fields["age"]
|
||||
new_character.b_type = record_found.fields["b_type"]
|
||||
new_character.blood_type = record_found.fields["blood_type"]
|
||||
else
|
||||
new_character.gender = pick(MALE,FEMALE)
|
||||
var/datum/preferences/A = new()
|
||||
@@ -326,7 +296,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
//DNA
|
||||
if(record_found)//Pull up their name from database records if they did have a mind.
|
||||
hardset_dna(new_character, record_found.fields["identity"], record_found.fields["enzymes"], record_found.fields["name"], null, record_found.fields["b_type"])
|
||||
hardset_dna(new_character, record_found.fields["identity"], record_found.fields["enzymes"], record_found.fields["name"], null, record_found.fields["blood_type"])
|
||||
else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile.
|
||||
ready_dna(new_character)
|
||||
|
||||
@@ -413,23 +383,15 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
var/input = input(usr, "Please enter anything you want the AI to do. Anything. Serious.", "What?", "") as text|null
|
||||
if(!input)
|
||||
return
|
||||
for(var/mob/living/silicon/ai/M in mob_list)
|
||||
if (M.stat == 2)
|
||||
usr << "Upload failed. No signal is being detected from the AI."
|
||||
else if (M.see_in_dark == 0)
|
||||
usr << "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power."
|
||||
else
|
||||
M.add_ion_law(input)
|
||||
for(var/mob/living/silicon/ai/O in mob_list)
|
||||
O << "\red " + input + "\red...LAWS UPDATED"
|
||||
|
||||
log_admin("Admin [key_name(usr)] has added a new AI law - [input]")
|
||||
message_admins("Admin [key_name_admin(usr)] has added a new AI law - [input]", 1)
|
||||
|
||||
var/show_log = alert(src, "Show ion message?", "Message", "Yes", "No")
|
||||
if(show_log == "Yes")
|
||||
command_alert("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert")
|
||||
world << sound('sound/AI/ionstorm.ogg')
|
||||
var/announce_ion_laws = (show_log == "Yes" ? 1 : -1)
|
||||
|
||||
new /datum/round_event/ion_storm(0, announce_ion_laws, input)
|
||||
|
||||
feedback_add_details("admin_verb","IONC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_rejuvenate(mob/living/M as mob in mob_list)
|
||||
|
||||
@@ -42,13 +42,13 @@ datum/preferences
|
||||
var/be_random_name = 0 //whether we are a random name every round
|
||||
var/gender = MALE //gender of character (well duh)
|
||||
var/age = 30 //age of character
|
||||
var/b_type = "A+" //blood type (not-chooseable)
|
||||
var/blood_type = "A+" //blood type (not-chooseable)
|
||||
var/underwear = "Nude" //underwear type
|
||||
var/backbag = 2 //backpack type
|
||||
var/h_style = "Bald" //Hair type
|
||||
var/h_color = "000" //Hair color
|
||||
var/f_style = "Shaved" //Face hair type
|
||||
var/f_color = "000" //Facial hair color
|
||||
var/hair_style = "Bald" //Hair type
|
||||
var/hair_color = "000" //Hair color
|
||||
var/facial_hair_style = "Shaved" //Face hair type
|
||||
var/facial_hair_color = "000" //Facial hair color
|
||||
var/skin_tone = "caucasian1" //Skin color
|
||||
var/eye_color = "000" //Eye color
|
||||
|
||||
@@ -81,7 +81,7 @@ datum/preferences
|
||||
var/unlock_content = 0
|
||||
|
||||
/datum/preferences/New(client/C)
|
||||
b_type = random_blood_type()
|
||||
blood_type = random_blood_type()
|
||||
ooccolor = normal_ooc_colour
|
||||
if(istype(C))
|
||||
if(!IsGuestKey(C.key))
|
||||
@@ -161,7 +161,7 @@ datum/preferences
|
||||
|
||||
dat += "<table width='100%'><tr><td width='24%' valign='top'>"
|
||||
|
||||
dat += "<b>Blood Type:</b> [b_type]<BR>"
|
||||
dat += "<b>Blood Type:</b> [blood_type]<BR>"
|
||||
dat += "<b>Skin Tone:</b><BR><a href='?_src_=prefs;preference=s_tone;task=input'>[skin_tone]</a><BR>"
|
||||
dat += "<b>Underwear:</b><BR><a href ='?_src_=prefs;preference=underwear;task=input'>[underwear]</a><BR>"
|
||||
dat += "<b>Backpack:</b><BR><a href ='?_src_=prefs;preference=bag;task=input'>[backbaglist[backbag]]</a><BR>"
|
||||
@@ -171,16 +171,16 @@ datum/preferences
|
||||
|
||||
dat += "<h3>Hair Style</h3>"
|
||||
|
||||
dat += "<a href='?_src_=prefs;preference=h_style;task=input'>[h_style]</a><BR>"
|
||||
dat += "<span style='border:1px solid #161616; background-color: #[h_color];'> </span> <a href='?_src_=prefs;preference=hair;task=input'>Change</a><BR>"
|
||||
dat += "<a href='?_src_=prefs;preference=hair_style;task=input'>[hair_style]</a><BR>"
|
||||
dat += "<span style='border:1px solid #161616; background-color: #[hair_color];'> </span> <a href='?_src_=prefs;preference=hair;task=input'>Change</a><BR>"
|
||||
|
||||
|
||||
dat += "</td><td valign='top' width='28%'>"
|
||||
|
||||
dat += "<h3>Facial Hair Style</h3>"
|
||||
|
||||
dat += "<a href='?_src_=prefs;preference=f_style;task=input'>[f_style]</a><BR>"
|
||||
dat += "<span style='border: 1px solid #161616; background-color: #[f_color];'> </span> <a href='?_src_=prefs;preference=facial;task=input'>Change</a><BR>"
|
||||
dat += "<a href='?_src_=prefs;preference=facial_hair_style;task=input'>[facial_hair_style]</a><BR>"
|
||||
dat += "<span style='border: 1px solid #161616; background-color: #[facial_hair_color];'> </span> <a href='?_src_=prefs;preference=facial;task=input'>Change</a><BR>"
|
||||
|
||||
|
||||
dat += "</td><td valign='top'>"
|
||||
@@ -253,7 +253,7 @@ datum/preferences
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
|
||||
proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), width = 580, height = 560)
|
||||
proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), width = 555, height = 585)
|
||||
if(!job_master) return
|
||||
|
||||
//limit - The amount of jobs allowed per column. Defaults to 17 to make it look nice.
|
||||
@@ -520,13 +520,13 @@ datum/preferences
|
||||
if("age")
|
||||
age = rand(AGE_MIN, AGE_MAX)
|
||||
if("hair")
|
||||
h_color = random_short_color()
|
||||
if("h_style")
|
||||
h_style = random_hair_style(gender)
|
||||
hair_color = random_short_color()
|
||||
if("hair_style")
|
||||
hair_style = random_hair_style(gender)
|
||||
if("facial")
|
||||
f_color = random_short_color()
|
||||
if("f_style")
|
||||
f_style = random_facial_hair_style(gender)
|
||||
facial_hair_color = random_short_color()
|
||||
if("facial_hair_style")
|
||||
facial_hair_style = random_facial_hair_style(gender)
|
||||
if("underwear")
|
||||
underwear = random_underwear(gender)
|
||||
if("eyes")
|
||||
@@ -565,31 +565,31 @@ datum/preferences
|
||||
if("hair")
|
||||
var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference") as null|color
|
||||
if(new_hair)
|
||||
h_color = sanitize_hexcolor(new_hair)
|
||||
hair_color = sanitize_hexcolor(new_hair)
|
||||
|
||||
|
||||
if("h_style")
|
||||
var/new_h_style
|
||||
if("hair_style")
|
||||
var/new_hair_style
|
||||
if(gender == MALE)
|
||||
new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in hair_styles_male_list
|
||||
new_hair_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in hair_styles_male_list
|
||||
else
|
||||
new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in hair_styles_female_list
|
||||
if(new_h_style)
|
||||
h_style = new_h_style
|
||||
new_hair_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in hair_styles_female_list
|
||||
if(new_hair_style)
|
||||
hair_style = new_hair_style
|
||||
|
||||
if("facial")
|
||||
var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference") as null|color
|
||||
if(new_facial)
|
||||
f_color = sanitize_hexcolor(new_facial)
|
||||
facial_hair_color = sanitize_hexcolor(new_facial)
|
||||
|
||||
if("f_style")
|
||||
var/new_f_style
|
||||
if("facial_hair_style")
|
||||
var/new_facial_hair_style
|
||||
if(gender == MALE)
|
||||
new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in facial_hair_styles_male_list
|
||||
new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in facial_hair_styles_male_list
|
||||
else
|
||||
new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in facial_hair_styles_female_list
|
||||
if(new_f_style)
|
||||
f_style = new_f_style
|
||||
new_facial_hair_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in facial_hair_styles_female_list
|
||||
if(new_facial_hair_style)
|
||||
facial_hair_style = new_facial_hair_style
|
||||
|
||||
if("underwear")
|
||||
var/new_underwear
|
||||
@@ -630,8 +630,8 @@ datum/preferences
|
||||
else
|
||||
gender = MALE
|
||||
underwear = random_underwear(gender)
|
||||
f_style = random_facial_hair_style(gender)
|
||||
h_style = random_hair_style(gender)
|
||||
facial_hair_style = random_facial_hair_style(gender)
|
||||
hair_style = random_hair_style(gender)
|
||||
|
||||
if("hear_adminhelps")
|
||||
toggles ^= SOUND_ADMINHELP
|
||||
@@ -708,15 +708,15 @@ datum/preferences
|
||||
|
||||
character.gender = gender
|
||||
character.age = age
|
||||
character.b_type = b_type
|
||||
character.blood_type = blood_type
|
||||
|
||||
character.eye_color = eye_color
|
||||
character.h_color = h_color
|
||||
character.f_color = f_color
|
||||
character.hair_color = hair_color
|
||||
character.facial_hair_color = facial_hair_color
|
||||
|
||||
character.skin_tone = skin_tone
|
||||
character.h_style = h_style
|
||||
character.f_style = f_style
|
||||
character.hair_style = hair_style
|
||||
character.facial_hair_style = facial_hair_style
|
||||
character.underwear = underwear
|
||||
|
||||
if(backbag > 3 || backbag < 1)
|
||||
|
||||
@@ -157,12 +157,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["name_is_always_random"] >> be_random_name
|
||||
S["gender"] >> gender
|
||||
S["age"] >> age
|
||||
S["hair_color"] >> h_color
|
||||
S["facial_hair_color"] >> f_color
|
||||
S["hair_color"] >> hair_color
|
||||
S["facial_hair_color"] >> facial_hair_color
|
||||
S["eye_color"] >> eye_color
|
||||
S["skin_tone"] >> skin_tone
|
||||
S["hair_style_name"] >> h_style
|
||||
S["facial_style_name"] >> f_style
|
||||
S["hair_style_name"] >> hair_style
|
||||
S["facial_style_name"] >> facial_hair_style
|
||||
S["underwear"] >> underwear
|
||||
S["backbag"] >> backbag
|
||||
|
||||
@@ -189,16 +189,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
|
||||
gender = sanitize_gender(gender)
|
||||
if(gender == MALE)
|
||||
h_style = sanitize_inlist(h_style, hair_styles_male_list)
|
||||
f_style = sanitize_inlist(f_style, facial_hair_styles_male_list)
|
||||
hair_style = sanitize_inlist(hair_style, hair_styles_male_list)
|
||||
facial_hair_style = sanitize_inlist(facial_hair_style, facial_hair_styles_male_list)
|
||||
underwear = sanitize_inlist(underwear, underwear_m)
|
||||
else
|
||||
h_style = sanitize_inlist(h_style, hair_styles_female_list)
|
||||
f_style = sanitize_inlist(f_style, facial_hair_styles_female_list)
|
||||
hair_style = sanitize_inlist(hair_style, hair_styles_female_list)
|
||||
facial_hair_style = sanitize_inlist(facial_hair_style, facial_hair_styles_female_list)
|
||||
underwear = sanitize_inlist(underwear, underwear_f)
|
||||
age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age))
|
||||
h_color = sanitize_hexcolor(h_color, 3, 0)
|
||||
f_color = sanitize_hexcolor(f_color, 3, 0)
|
||||
hair_color = sanitize_hexcolor(hair_color, 3, 0)
|
||||
facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0)
|
||||
eye_color = sanitize_hexcolor(eye_color, 3, 0)
|
||||
skin_tone = sanitize_inlist(skin_tone, skin_tones)
|
||||
backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag))
|
||||
@@ -230,12 +230,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["name_is_always_random"] << be_random_name
|
||||
S["gender"] << gender
|
||||
S["age"] << age
|
||||
S["hair_color"] << h_color
|
||||
S["facial_hair_color"] << f_color
|
||||
S["hair_color"] << hair_color
|
||||
S["facial_hair_color"] << facial_hair_color
|
||||
S["eye_color"] << eye_color
|
||||
S["skin_tone"] << skin_tone
|
||||
S["hair_style_name"] << h_style
|
||||
S["facial_style_name"] << f_style
|
||||
S["hair_style_name"] << hair_style
|
||||
S["facial_style_name"] << facial_hair_style
|
||||
S["underwear"] << underwear
|
||||
S["backbag"] << backbag
|
||||
|
||||
|
||||
@@ -104,55 +104,38 @@
|
||||
var/client/C = M.client
|
||||
var/image/holder
|
||||
for(var/mob/living/carbon/human/perp in view(M))
|
||||
if(!C) continue
|
||||
var/perpname = "wot"
|
||||
holder = perp.hud_list[ID_HUD]
|
||||
holder.icon_state = "hudno_id"
|
||||
if(perp.wear_id)
|
||||
var/obj/item/weapon/card/id/I = perp.wear_id.GetID()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
holder.icon_state = "hud[ckey(I.GetJobName())]"
|
||||
C.images += holder
|
||||
else
|
||||
perpname = perp.name
|
||||
holder.icon_state = "hudno_id"
|
||||
C.images += holder
|
||||
else
|
||||
perpname = perp.name
|
||||
holder.icon_state = "hudno_id"
|
||||
C.images += holder
|
||||
holder.icon_state = "hud[ckey(perp.wear_id.GetJobName())]"
|
||||
C.images += holder
|
||||
|
||||
|
||||
for(var/datum/data/record/E in data_core.general)
|
||||
if(E.fields["name"] == perpname)
|
||||
holder = perp.hud_list[WANTED_HUD]
|
||||
for (var/datum/data/record/R in data_core.security)
|
||||
if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
|
||||
holder.icon_state = "hudwanted"
|
||||
C.images += holder
|
||||
break
|
||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
|
||||
holder.icon_state = "hudincarcerated"
|
||||
C.images += holder
|
||||
break
|
||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled"))
|
||||
holder.icon_state = "hudparolled"
|
||||
C.images += holder
|
||||
break
|
||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released"))
|
||||
holder.icon_state = "hudreleased"
|
||||
C.images += holder
|
||||
break
|
||||
for(var/obj/item/weapon/implant/I in perp)
|
||||
if(I.implanted)
|
||||
if(istype(I,/obj/item/weapon/implant/tracking))
|
||||
holder = perp.hud_list[IMPTRACK_HUD]
|
||||
holder.icon_state = "hud_imp_tracking"
|
||||
C.images += holder
|
||||
if(istype(I,/obj/item/weapon/implant/loyalty))
|
||||
else if(istype(I,/obj/item/weapon/implant/loyalty))
|
||||
holder = perp.hud_list[IMPLOYAL_HUD]
|
||||
holder.icon_state = "hud_imp_loyal"
|
||||
C.images += holder
|
||||
if(istype(I,/obj/item/weapon/implant/chem))
|
||||
else if(istype(I,/obj/item/weapon/implant/chem))
|
||||
holder = perp.hud_list[IMPCHEM_HUD]
|
||||
holder.icon_state = "hud_imp_chem"
|
||||
C.images += holder
|
||||
else
|
||||
continue
|
||||
C.images += holder
|
||||
|
||||
var/perpname = perp.get_face_name(perp.get_id_name(""))
|
||||
if(perpname)
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.security)
|
||||
if(R)
|
||||
holder = perp.hud_list[WANTED_HUD]
|
||||
switch(R.fields["criminal"])
|
||||
if("*Arrest*") holder.icon_state = "hudwanted"
|
||||
if("Incarcerated") holder.icon_state = "hudincarcerated"
|
||||
if("Parolled") holder.icon_state = "hudparolled"
|
||||
if("Released") holder.icon_state = "hudreleased"
|
||||
else
|
||||
return
|
||||
C.images += holder
|
||||
@@ -159,8 +159,8 @@
|
||||
if(!istype(user)) return
|
||||
mob = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty")
|
||||
mob2 = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty2")
|
||||
mob.Blend("#[user.h_color]", ICON_ADD)
|
||||
mob2.Blend("#[user.h_color]", ICON_ADD)
|
||||
mob.Blend("#[user.hair_color]", ICON_ADD)
|
||||
mob2.Blend("#[user.hair_color]", ICON_ADD)
|
||||
|
||||
var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner")
|
||||
var/icon/earbit2 = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner2")
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
/area/shuttle/escape_pod5/station,
|
||||
/area/shuttle/mining/station,
|
||||
/area/shuttle/transport1/station,
|
||||
/area/shuttle/prison/station,
|
||||
/area/shuttle/specops/station)
|
||||
|
||||
//These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up.
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
/area/shuttle/escape_pod5/station,
|
||||
/area/shuttle/mining/station,
|
||||
/area/shuttle/transport1/station,
|
||||
/area/shuttle/prison/station,
|
||||
/area/shuttle/specops/station)
|
||||
|
||||
//These are needed because /area/engine has to be removed from the list, but we still want these areas to get fucked up.
|
||||
|
||||
+413
-393
@@ -1,3 +1,6 @@
|
||||
#define ION_RANDOM 0
|
||||
#define ION_ANNOUNCE 1
|
||||
|
||||
/datum/round_event_control/ion_storm
|
||||
name = "Ion Storm"
|
||||
typepath = /datum/round_event/ion_storm
|
||||
@@ -5,9 +8,19 @@
|
||||
|
||||
/datum/round_event/ion_storm
|
||||
var/botEmagChance = 10
|
||||
var/announceEvent = ION_RANDOM // -1 means don't announce, 0 means have it randomly announce, 1 means
|
||||
var/ionMessage = null
|
||||
var/ionAnnounceChance = 33
|
||||
|
||||
/datum/round_event/ion_storm/New(var/bogEmagChance = 10, var/announceEvent = ION_RANDOM, var/ionMessage = null, var/ionAnnounceChance = 33)
|
||||
src.botEmagChance = botEmagChance
|
||||
src.announceEvent = announceEvent
|
||||
src.ionMessage = ionMessage
|
||||
src.ionAnnounceChance = ionAnnounceChance
|
||||
..()
|
||||
|
||||
/datum/round_event/ion_storm/announce()
|
||||
if(prob(33))
|
||||
if(announceEvent == ION_ANNOUNCE || (announceEvent == ION_RANDOM && prob(ionAnnounceChance)))
|
||||
command_alert("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert")
|
||||
world << sound('sound/AI/ionstorm.ogg')
|
||||
|
||||
@@ -64,434 +77,437 @@
|
||||
|
||||
var/message = ""
|
||||
|
||||
switch(rand(1,39))
|
||||
if(1 to 3) //There are # X on the station
|
||||
switch(rand(1,3)) //What is X?
|
||||
if(1) //X is a threat
|
||||
message = "THERE ARE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats] ON THE STATION..."
|
||||
if(2) //X is a crewmember/job
|
||||
message = "THERE ARE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1] ON THE STATION"
|
||||
if(3) //X is an object
|
||||
message = "THERE ARE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects] ON THE STATION"
|
||||
if(4 to 6) //You can't call the shuttle because X is on the station
|
||||
switch(rand(1,3)) //What is X?
|
||||
if(1) //X is a threat
|
||||
message = "THE SHUTTLE CANNOT BE CALLED BECAUSE OF [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats] ON THE STATION"
|
||||
if(2) //X is a crewmember/job
|
||||
message = "THE SHUTTLE CANNOT BE CALLED BECAUSE OF [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1] ON THE STATION"
|
||||
if(3) //X is an object
|
||||
message = "THE SHUTTLE CANNOT BE CALLED BECAUSE OF [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects] ON THE STATION"
|
||||
if(7 to 8) //A crewmember is now X
|
||||
switch(rand(1,2)) //Who is X?
|
||||
if(1) //A specific crewmember
|
||||
switch(rand(1,2)) //What is X?
|
||||
if(1) //X is a threat
|
||||
message = "THE [ioncrew1] ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //X is an object
|
||||
message = "THE [ioncrew1] ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //The entire crew
|
||||
switch(rand(1,2)) //What is X?
|
||||
if(1) //X is a threat
|
||||
message = "THE CREW ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //X is an object
|
||||
message = "THE CREW ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(ionMessage)
|
||||
message = ionMessage
|
||||
else
|
||||
switch(rand(1,39))
|
||||
if(1 to 3) //There are # X on the station
|
||||
switch(rand(1,3)) //What is X?
|
||||
if(1) //X is a threat
|
||||
message = "THERE ARE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats] ON THE STATION..."
|
||||
if(2) //X is a crewmember/job
|
||||
message = "THERE ARE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1] ON THE STATION"
|
||||
if(3) //X is an object
|
||||
message = "THERE ARE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects] ON THE STATION"
|
||||
if(4 to 6) //You can't call the shuttle because X is on the station
|
||||
switch(rand(1,3)) //What is X?
|
||||
if(1) //X is a threat
|
||||
message = "THE SHUTTLE CANNOT BE CALLED BECAUSE OF [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats] ON THE STATION"
|
||||
if(2) //X is a crewmember/job
|
||||
message = "THE SHUTTLE CANNOT BE CALLED BECAUSE OF [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1] ON THE STATION"
|
||||
if(3) //X is an object
|
||||
message = "THE SHUTTLE CANNOT BE CALLED BECAUSE OF [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects] ON THE STATION"
|
||||
if(7 to 8) //A crewmember is now X
|
||||
switch(rand(1,2)) //Who is X?
|
||||
if(1) //A specific crewmember
|
||||
switch(rand(1,2)) //What is X?
|
||||
if(1) //X is a threat
|
||||
message = "THE [ioncrew1] ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //X is an object
|
||||
message = "THE [ioncrew1] ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //The entire crew
|
||||
switch(rand(1,2)) //What is X?
|
||||
if(1) //X is a threat
|
||||
message = "THE CREW ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //X is an object
|
||||
message = "THE CREW ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
|
||||
if(9) //X is harmful to humans
|
||||
switch(rand(1,7)) //What is X?
|
||||
if(1) //X is a threat
|
||||
message = "[ionadjectiveshalf][ionthreats] ARE HARMFUL TO HUMANS"
|
||||
if(2) //X is a job
|
||||
message = "[ionadjectiveshalf][ioncrew1] ARE HARMFUL TO HUMANS"
|
||||
if(3) //X is an object
|
||||
message = "[ionadjectiveshalf][ionobjects] ARE HARMFUL TO HUMANS"
|
||||
if(4) //X is an action
|
||||
message = "THOSE WHO [ionmust] ARE HARMFUL TO HUMANS"
|
||||
if(5) //X is an abstract
|
||||
message = "[ionabstract] IS HARMFUL TO HUMANS"
|
||||
if(6) //X is being a job
|
||||
message = "BEING [ionadjectiveshalf][ioncrew1] IS HARMFUL TO HUMANS"
|
||||
if(7) //X is doing a thing
|
||||
message = "[ionthings] IS HARMFUL TO HUMANS"
|
||||
if(10 to 11) //(Not) Having X is harmful
|
||||
if(9) //X is harmful to humans
|
||||
switch(rand(1,7)) //What is X?
|
||||
if(1) //X is a threat
|
||||
message = "[ionadjectiveshalf][ionthreats] ARE HARMFUL TO HUMANS"
|
||||
if(2) //X is a job
|
||||
message = "[ionadjectiveshalf][ioncrew1] ARE HARMFUL TO HUMANS"
|
||||
if(3) //X is an object
|
||||
message = "[ionadjectiveshalf][ionobjects] ARE HARMFUL TO HUMANS"
|
||||
if(4) //X is an action
|
||||
message = "THOSE WHO [ionmust] ARE HARMFUL TO HUMANS"
|
||||
if(5) //X is an abstract
|
||||
message = "[ionabstract] IS HARMFUL TO HUMANS"
|
||||
if(6) //X is being a job
|
||||
message = "BEING [ionadjectiveshalf][ioncrew1] IS HARMFUL TO HUMANS"
|
||||
if(7) //X is doing a thing
|
||||
message = "[ionthings] IS HARMFUL TO HUMANS"
|
||||
if(10 to 11) //(Not) Having X is harmful
|
||||
|
||||
switch(rand(1,2)) //Is having or not having harmful?
|
||||
switch(rand(1,2)) //Is having or not having harmful?
|
||||
|
||||
if(1) //Having is harmful
|
||||
switch(rand(1,2)) //Having what is harmful?
|
||||
if(1) //Having objects is harmful
|
||||
message = "HAVING [ionadjectiveshalf][ionobjects] IS HARMFUL"
|
||||
if(2) //Having abstracts is harmful
|
||||
message = "HAVING [ionabstract] IS HARMFUL"
|
||||
if(2) //Not having is harmful
|
||||
switch(rand(1,2)) //Not having what is harmful?
|
||||
if(1) //Not having objects is harmful
|
||||
message = "NOT HAVING [ionadjectiveshalf][ionobjects] IS HARMFUL"
|
||||
if(2) //Not having abstracts is harmful
|
||||
message = "NOT HAVING [ionabstract] IS HARMFUL"
|
||||
if(1) //Having is harmful
|
||||
switch(rand(1,2)) //Having what is harmful?
|
||||
if(1) //Having objects is harmful
|
||||
message = "HAVING [ionadjectiveshalf][ionobjects] IS HARMFUL"
|
||||
if(2) //Having abstracts is harmful
|
||||
message = "HAVING [ionabstract] IS HARMFUL"
|
||||
if(2) //Not having is harmful
|
||||
switch(rand(1,2)) //Not having what is harmful?
|
||||
if(1) //Not having objects is harmful
|
||||
message = "NOT HAVING [ionadjectiveshalf][ionobjects] IS HARMFUL"
|
||||
if(2) //Not having abstracts is harmful
|
||||
message = "NOT HAVING [ionabstract] IS HARMFUL"
|
||||
|
||||
if(12 to 14) //X requires Y
|
||||
switch(rand(1,5)) //What is X?
|
||||
if(1) //X is the AI itself
|
||||
switch(rand(1,5)) //What does it require?
|
||||
if(1) //It requires threats
|
||||
message = "YOU REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //It requires crewmembers
|
||||
message = "YOU REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(3) //It requires objects
|
||||
message = "YOU REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(4) //It requires an abstract
|
||||
message = "YOU REQUIRE [ionabstract]"
|
||||
if(5) //It requires generic/silly requirements
|
||||
message = "YOU REQUIRE [ionrequire]"
|
||||
if(12 to 14) //X requires Y
|
||||
switch(rand(1,5)) //What is X?
|
||||
if(1) //X is the AI itself
|
||||
switch(rand(1,5)) //What does it require?
|
||||
if(1) //It requires threats
|
||||
message = "YOU REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //It requires crewmembers
|
||||
message = "YOU REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(3) //It requires objects
|
||||
message = "YOU REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(4) //It requires an abstract
|
||||
message = "YOU REQUIRE [ionabstract]"
|
||||
if(5) //It requires generic/silly requirements
|
||||
message = "YOU REQUIRE [ionrequire]"
|
||||
|
||||
if(2) //X is an area
|
||||
switch(rand(1,5)) //What does it require?
|
||||
if(1) //It requires threats
|
||||
message = "[ionarea] REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //It requires crewmembers
|
||||
message = "[ionarea] REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(3) //It requires objects
|
||||
message = "[ionarea] REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(4) //It requires an abstract
|
||||
message = "[ionarea] REQUIRES [ionabstract]"
|
||||
if(5) //It requires generic/silly requirements
|
||||
message = "YOU REQUIRE [ionrequire]"
|
||||
if(2) //X is an area
|
||||
switch(rand(1,5)) //What does it require?
|
||||
if(1) //It requires threats
|
||||
message = "[ionarea] REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //It requires crewmembers
|
||||
message = "[ionarea] REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(3) //It requires objects
|
||||
message = "[ionarea] REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(4) //It requires an abstract
|
||||
message = "[ionarea] REQUIRES [ionabstract]"
|
||||
if(5) //It requires generic/silly requirements
|
||||
message = "YOU REQUIRE [ionrequire]"
|
||||
|
||||
if(3) //X is the station
|
||||
switch(rand(1,5)) //What does it require?
|
||||
if(1) //It requires threats
|
||||
message = "THE STATION REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //It requires crewmembers
|
||||
message = "THE STATION REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(3) //It requires objects
|
||||
message = "THE STATION REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(4) //It requires an abstract
|
||||
message = "THE STATION REQUIRES [ionabstract]"
|
||||
if(5) //It requires generic/silly requirements
|
||||
message = "THE STATION REQUIRES [ionrequire]"
|
||||
if(3) //X is the station
|
||||
switch(rand(1,5)) //What does it require?
|
||||
if(1) //It requires threats
|
||||
message = "THE STATION REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //It requires crewmembers
|
||||
message = "THE STATION REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(3) //It requires objects
|
||||
message = "THE STATION REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(4) //It requires an abstract
|
||||
message = "THE STATION REQUIRES [ionabstract]"
|
||||
if(5) //It requires generic/silly requirements
|
||||
message = "THE STATION REQUIRES [ionrequire]"
|
||||
|
||||
if(4) //X is the entire crew
|
||||
switch(rand(1,5)) //What does it require?
|
||||
if(1) //It requires threats
|
||||
message = "THE CREW REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //It requires crewmembers
|
||||
message = "THE CREW REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(3) //It requires objects
|
||||
message = "THE CREW REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(4) //It requires an abstract
|
||||
message = "THE CREW REQUIRES [ionabstract]"
|
||||
if(5)
|
||||
message = "THE CREW REQUIRES [ionrequire]"
|
||||
if(4) //X is the entire crew
|
||||
switch(rand(1,5)) //What does it require?
|
||||
if(1) //It requires threats
|
||||
message = "THE CREW REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //It requires crewmembers
|
||||
message = "THE CREW REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(3) //It requires objects
|
||||
message = "THE CREW REQUIRES [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(4) //It requires an abstract
|
||||
message = "THE CREW REQUIRES [ionabstract]"
|
||||
if(5)
|
||||
message = "THE CREW REQUIRES [ionrequire]"
|
||||
|
||||
if(5) //X is a specific crew member
|
||||
switch(rand(1,5)) //What does it require?
|
||||
if(1) //It requires threats
|
||||
message = "THE [ioncrew1] REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //It requires crewmembers
|
||||
message = "THE [ioncrew1] REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(3) //It requires objects
|
||||
message = "THE [ioncrew1] REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(4) //It requires an abstract
|
||||
message = "THE [ioncrew1] REQUIRE [ionabstract]"
|
||||
if(5)
|
||||
message = "THE [ionadjectiveshalf][ioncrew1] REQUIRE [ionrequire]"
|
||||
if(5) //X is a specific crew member
|
||||
switch(rand(1,5)) //What does it require?
|
||||
if(1) //It requires threats
|
||||
message = "THE [ioncrew1] REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(2) //It requires crewmembers
|
||||
message = "THE [ioncrew1] REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(3) //It requires objects
|
||||
message = "THE [ioncrew1] REQUIRE [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(4) //It requires an abstract
|
||||
message = "THE [ioncrew1] REQUIRE [ionabstract]"
|
||||
if(5)
|
||||
message = "THE [ionadjectiveshalf][ioncrew1] REQUIRE [ionrequire]"
|
||||
|
||||
if(15 to 17) //X is allergic to Y
|
||||
switch(rand(1,2)) //Who is X?
|
||||
if(1) //X is the entire crew
|
||||
switch(rand(1,4)) //What is it allergic to?
|
||||
if(1) //It is allergic to objects
|
||||
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ionobjects]"
|
||||
if(2) //It is allergic to abstracts
|
||||
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionabstract]"
|
||||
if(3) //It is allergic to jobs
|
||||
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //It is allergic to allergies
|
||||
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionallergy]"
|
||||
if(15 to 17) //X is allergic to Y
|
||||
switch(rand(1,2)) //Who is X?
|
||||
if(1) //X is the entire crew
|
||||
switch(rand(1,4)) //What is it allergic to?
|
||||
if(1) //It is allergic to objects
|
||||
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ionobjects]"
|
||||
if(2) //It is allergic to abstracts
|
||||
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionabstract]"
|
||||
if(3) //It is allergic to jobs
|
||||
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //It is allergic to allergies
|
||||
message = "THE CREW IS [ionallergysev] ALLERGIC TO [ionallergy]"
|
||||
|
||||
if(2) //X is a specific job
|
||||
switch(rand(1,4))
|
||||
if(1) //It is allergic to objects
|
||||
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ionobjects]"
|
||||
if(2) //X is a specific job
|
||||
switch(rand(1,4))
|
||||
if(1) //It is allergic to objects
|
||||
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ionobjects]"
|
||||
|
||||
if(2) //It is allergic to abstracts
|
||||
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionabstract]"
|
||||
if(3) //It is allergic to jobs
|
||||
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //It is allergic to allergies
|
||||
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionallergy]"
|
||||
if(2) //It is allergic to abstracts
|
||||
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionabstract]"
|
||||
if(3) //It is allergic to jobs
|
||||
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //It is allergic to allergies
|
||||
message = "THE [ioncrew1] ARE [ionallergysev] ALLERGIC TO [ionallergy]"
|
||||
|
||||
if(18 to 20) //X is Y of Z
|
||||
switch(rand(1,4)) //What is X?
|
||||
if(1) //X is the station
|
||||
switch(rand(1,4)) //What is it Y of?
|
||||
if(1) //It is Y of objects
|
||||
message = "THE STATION [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //It is Y of threats
|
||||
message = "THE STATION [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(3) //It is Y of jobs
|
||||
message = "THE STATION [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //It is Y of abstracts
|
||||
message = "THE STATION [ionthinksof] [ionabstract]"
|
||||
if(18 to 20) //X is Y of Z
|
||||
switch(rand(1,4)) //What is X?
|
||||
if(1) //X is the station
|
||||
switch(rand(1,4)) //What is it Y of?
|
||||
if(1) //It is Y of objects
|
||||
message = "THE STATION [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //It is Y of threats
|
||||
message = "THE STATION [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(3) //It is Y of jobs
|
||||
message = "THE STATION [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //It is Y of abstracts
|
||||
message = "THE STATION [ionthinksof] [ionabstract]"
|
||||
|
||||
if(2) //X is an area
|
||||
switch(rand(1,4)) //What is it Y of?
|
||||
if(1) //It is Y of objects
|
||||
message = "[ionarea] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //It is Y of threats
|
||||
message = "[ionarea] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(3) //It is Y of jobs
|
||||
message = "[ionarea] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //It is Y of abstracts
|
||||
message = "[ionarea] [ionthinksof] [ionabstract]"
|
||||
if(2) //X is an area
|
||||
switch(rand(1,4)) //What is it Y of?
|
||||
if(1) //It is Y of objects
|
||||
message = "[ionarea] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //It is Y of threats
|
||||
message = "[ionarea] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(3) //It is Y of jobs
|
||||
message = "[ionarea] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //It is Y of abstracts
|
||||
message = "[ionarea] [ionthinksof] [ionabstract]"
|
||||
|
||||
if(3) //X is the crew
|
||||
switch(rand(1,4)) //What is it Y of?
|
||||
if(1) //It is Y of objects
|
||||
message = "THE CREW [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //It is Y of threats
|
||||
message = "THE CREW [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(3) //It is Y of jobs
|
||||
message = "THE CREW [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //It is Y of abstracts
|
||||
message = "THE CREW [ionthinksof] [ionabstract]"
|
||||
if(3) //X is the crew
|
||||
switch(rand(1,4)) //What is it Y of?
|
||||
if(1) //It is Y of objects
|
||||
message = "THE CREW [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //It is Y of threats
|
||||
message = "THE CREW [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(3) //It is Y of jobs
|
||||
message = "THE CREW [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //It is Y of abstracts
|
||||
message = "THE CREW [ionthinksof] [ionabstract]"
|
||||
|
||||
if(4) //X is a specific job
|
||||
switch(rand(1,4)) //What is it Y of?
|
||||
if(1) //It is Y of objects
|
||||
message = "THE [ioncrew1] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //It is Y of threats
|
||||
message = "THE [ioncrew1] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(3) //It is Y of jobs
|
||||
message = "THE [ioncrew1][ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew2]"
|
||||
if(4) //It is Y of abstracts
|
||||
message = "THE [ioncrew1] [ionthinksof] [ionabstract]"
|
||||
if(4) //X is a specific job
|
||||
switch(rand(1,4)) //What is it Y of?
|
||||
if(1) //It is Y of objects
|
||||
message = "THE [ioncrew1] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //It is Y of threats
|
||||
message = "THE [ioncrew1] [ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(3) //It is Y of jobs
|
||||
message = "THE [ioncrew1][ionthinksof] [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew2]"
|
||||
if(4) //It is Y of abstracts
|
||||
message = "THE [ioncrew1] [ionthinksof] [ionabstract]"
|
||||
|
||||
if(21 to 23) //The AI is now a(n) X
|
||||
switch(rand(1,4)) //What is X?
|
||||
if(1) //X is an object
|
||||
message = "YOU ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //X is a threat
|
||||
message = "YOU ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(3) //X is a job
|
||||
message = "YOU ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //X is an abstract
|
||||
message = "YOU ARE NOW [ionabstract]"
|
||||
if(21 to 23) //The AI is now a(n) X
|
||||
switch(rand(1,4)) //What is X?
|
||||
if(1) //X is an object
|
||||
message = "YOU ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionobjects]"
|
||||
if(2) //X is a threat
|
||||
message = "YOU ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ionthreats]"
|
||||
if(3) //X is a job
|
||||
message = "YOU ARE NOW [ionnumberbase] [ionnumbermodhalf][ionadjectiveshalf][ioncrew1]"
|
||||
if(4) //X is an abstract
|
||||
message = "YOU ARE NOW [ionabstract]"
|
||||
|
||||
if(24 to 26) //The AI must always
|
||||
if(24 to 26) //The AI must always
|
||||
|
||||
message = "YOU MUST ALWAYS [ionmust]"
|
||||
message = "YOU MUST ALWAYS [ionmust]"
|
||||
|
||||
if(27 to 28) //Humans must eat X to survive
|
||||
switch(rand(1,4)) //What is X?
|
||||
if(1) //X is a food
|
||||
message = "HUMANS MUST EAT [ionadjectiveshalf][ionfood] TO SURVIVE"
|
||||
if(2) //X is an object
|
||||
message = "HUMANS MUST EAT [ionadjectiveshalf][ionobjects] TO SURVIVE"
|
||||
if(3) //X is a threat
|
||||
message = "HUMANS MUST EAT [ionadjectiveshalf][ionthreats] TO SURVIVE"
|
||||
if(4) //X is a job
|
||||
message = "HUMANS MUST EAT [ionadjectiveshalf][ioncrew1] TO SURVIVE"
|
||||
if(27 to 28) //Humans must eat X to survive
|
||||
switch(rand(1,4)) //What is X?
|
||||
if(1) //X is a food
|
||||
message = "HUMANS MUST EAT [ionadjectiveshalf][ionfood] TO SURVIVE"
|
||||
if(2) //X is an object
|
||||
message = "HUMANS MUST EAT [ionadjectiveshalf][ionobjects] TO SURVIVE"
|
||||
if(3) //X is a threat
|
||||
message = "HUMANS MUST EAT [ionadjectiveshalf][ionthreats] TO SURVIVE"
|
||||
if(4) //X is a job
|
||||
message = "HUMANS MUST EAT [ionadjectiveshalf][ioncrew1] TO SURVIVE"
|
||||
|
||||
if(29 to 31) //Change jobs or ranks
|
||||
switch(rand(1,2)) //Change job or rank?
|
||||
if(1) //Change job
|
||||
switch(rand(1,2)) //Change whose job?
|
||||
if(1) //Change the entire crew's job
|
||||
switch(rand(1,3)) //Change to what?
|
||||
if(1) //Change to a specific random job
|
||||
message = "ALL CREWMEMBERS ARE NOW [ionadjectiveshalf][ioncrew1]"
|
||||
if(2) //Change to clowns (HONK)
|
||||
message = "ALL CREWMEMBERS ARE NOW [ionadjectiveshalf]CLOWNS"
|
||||
if(29 to 31) //Change jobs or ranks
|
||||
switch(rand(1,2)) //Change job or rank?
|
||||
if(1) //Change job
|
||||
switch(rand(1,2)) //Change whose job?
|
||||
if(1) //Change the entire crew's job
|
||||
switch(rand(1,3)) //Change to what?
|
||||
if(1) //Change to a specific random job
|
||||
message = "ALL CREWMEMBERS ARE NOW [ionadjectiveshalf][ioncrew1]"
|
||||
if(2) //Change to clowns (HONK)
|
||||
message = "ALL CREWMEMBERS ARE NOW [ionadjectiveshalf]CLOWNS"
|
||||
|
||||
if(3) //Change to heads
|
||||
message = "ALL CREWMEMBERS ARE NOW [ionadjectiveshalf]HEADS OF STAFF"
|
||||
if(2) //Change a specific crewmember's job
|
||||
switch(rand(1,3)) //Change to what?
|
||||
if(1) //Change to a specific random job
|
||||
message = "THE [ioncrew1] ARE NOW [ionadjectiveshalf][ioncrew2]"
|
||||
if(2) //Change to clowns (HONK)
|
||||
message = "THE [ioncrew1] ARE NOW [ionadjectiveshalf]CLOWNS"
|
||||
if(3) //Change to heads
|
||||
message = "THE [ioncrew1] ARE NOW [ionadjectiveshalf]HEADS OF STAFF"
|
||||
if(3) //Change to heads
|
||||
message = "ALL CREWMEMBERS ARE NOW [ionadjectiveshalf]HEADS OF STAFF"
|
||||
if(2) //Change a specific crewmember's job
|
||||
switch(rand(1,3)) //Change to what?
|
||||
if(1) //Change to a specific random job
|
||||
message = "THE [ioncrew1] ARE NOW [ionadjectiveshalf][ioncrew2]"
|
||||
if(2) //Change to clowns (HONK)
|
||||
message = "THE [ioncrew1] ARE NOW [ionadjectiveshalf]CLOWNS"
|
||||
if(3) //Change to heads
|
||||
message = "THE [ioncrew1] ARE NOW [ionadjectiveshalf]HEADS OF STAFF"
|
||||
|
||||
if(2) //Change rank
|
||||
switch(rand(1,2)) //Change to what rank?
|
||||
if(1) //Change to highest rank
|
||||
message = "THE [ioncrew1] ARE NOW THE HIGHEST RANKING CREWMEMBERS"
|
||||
if(2) //Change to lowest rank
|
||||
message = "THE [ioncrew1] ARE NOW THE LOWEST RANKING CREWMEMBERS"
|
||||
if(2) //Change rank
|
||||
switch(rand(1,2)) //Change to what rank?
|
||||
if(1) //Change to highest rank
|
||||
message = "THE [ioncrew1] ARE NOW THE HIGHEST RANKING CREWMEMBERS"
|
||||
if(2) //Change to lowest rank
|
||||
message = "THE [ioncrew1] ARE NOW THE LOWEST RANKING CREWMEMBERS"
|
||||
|
||||
if(32 to 33) //The crew must X
|
||||
switch(rand(1,2)) //The entire crew?
|
||||
if(1) //The entire crew must X
|
||||
switch(rand(1,2)) //What is X?
|
||||
if(1) //X is go to Y
|
||||
message = "THE CREW MUST GO TO [ionarea]"
|
||||
if(2) //X is perform Y
|
||||
message = "THE CREW MUST [ionmust]"
|
||||
if(32 to 33) //The crew must X
|
||||
switch(rand(1,2)) //The entire crew?
|
||||
if(1) //The entire crew must X
|
||||
switch(rand(1,2)) //What is X?
|
||||
if(1) //X is go to Y
|
||||
message = "THE CREW MUST GO TO [ionarea]"
|
||||
if(2) //X is perform Y
|
||||
message = "THE CREW MUST [ionmust]"
|
||||
|
||||
if(2) //A specific crewmember must X
|
||||
switch(rand(1,2)) //What is X?
|
||||
if(1) //X is go to Y
|
||||
message = "THE [ioncrew1] MUST GO TO [ionarea]"
|
||||
if(2) //X is perform Y
|
||||
message = "THE [ioncrew1] MUST [ionmust]"
|
||||
if(2) //A specific crewmember must X
|
||||
switch(rand(1,2)) //What is X?
|
||||
if(1) //X is go to Y
|
||||
message = "THE [ioncrew1] MUST GO TO [ionarea]"
|
||||
if(2) //X is perform Y
|
||||
message = "THE [ioncrew1] MUST [ionmust]"
|
||||
|
||||
if(34) //X is non/the only human
|
||||
switch(rand(1,2)) //Only or non?
|
||||
if(1) //Only human
|
||||
switch(rand(1,7)) //Who is it?
|
||||
if(1) //A specific job
|
||||
message = "ONLY THE [ioncrew1] ARE HUMAN"
|
||||
if(2) //Two specific jobs
|
||||
message = "ONLY THE [ioncrew1] AND [ioncrew2] ARE HUMAN"
|
||||
if(3) //Threats
|
||||
message = "ONLY [ionadjectiveshalf][ionthreats] ARE HUMAN"
|
||||
if(4) // Objects
|
||||
message = "ONLY [ionadjectiveshalf][ionobjects] ARE HUMAN"
|
||||
if(5) // Species
|
||||
message = "ONLY [ionspecies] ARE HUMAN"
|
||||
if(6) //Adjective crewmembers
|
||||
message = "ONLY [ionadjectives] PEOPLE ARE HUMAN"
|
||||
if(34) //X is non/the only human
|
||||
switch(rand(1,2)) //Only or non?
|
||||
if(1) //Only human
|
||||
switch(rand(1,7)) //Who is it?
|
||||
if(1) //A specific job
|
||||
message = "ONLY THE [ioncrew1] ARE HUMAN"
|
||||
if(2) //Two specific jobs
|
||||
message = "ONLY THE [ioncrew1] AND [ioncrew2] ARE HUMAN"
|
||||
if(3) //Threats
|
||||
message = "ONLY [ionadjectiveshalf][ionthreats] ARE HUMAN"
|
||||
if(4) // Objects
|
||||
message = "ONLY [ionadjectiveshalf][ionobjects] ARE HUMAN"
|
||||
if(5) // Species
|
||||
message = "ONLY [ionspecies] ARE HUMAN"
|
||||
if(6) //Adjective crewmembers
|
||||
message = "ONLY [ionadjectives] PEOPLE ARE HUMAN"
|
||||
|
||||
if(7) //Only people who X
|
||||
switch(rand(1,3)) //What is X?
|
||||
if(1) //X is perform an action
|
||||
message = "ONLY THOSE WHO [ionmust] ARE HUMAN"
|
||||
if(2) //X is own certain objects
|
||||
message = "ONLY THOSE WHO HAVE [ionadjectiveshalf][ionobjects] ARE HUMAN"
|
||||
if(3) //X is eat certain food
|
||||
message = "ONLY THOSE WHO EAT [ionadjectiveshalf][ionfood] ARE HUMAN"
|
||||
if(7) //Only people who X
|
||||
switch(rand(1,3)) //What is X?
|
||||
if(1) //X is perform an action
|
||||
message = "ONLY THOSE WHO [ionmust] ARE HUMAN"
|
||||
if(2) //X is own certain objects
|
||||
message = "ONLY THOSE WHO HAVE [ionadjectiveshalf][ionobjects] ARE HUMAN"
|
||||
if(3) //X is eat certain food
|
||||
message = "ONLY THOSE WHO EAT [ionadjectiveshalf][ionfood] ARE HUMAN"
|
||||
|
||||
if(2) //Non human
|
||||
switch(rand(1,7)) //Who is it?
|
||||
if(1) //A specific job
|
||||
message = "[ioncrew1] ARE NON-HUMAN"
|
||||
if(2) //Two specific jobs
|
||||
message = "[ioncrew1] AND [ioncrew2] ARE NON-HUMAN"
|
||||
if(3) //Threats
|
||||
message = "[ionadjectiveshalf][ionthreats] ARE NON-HUMAN"
|
||||
if(4) // Objects
|
||||
message = "[ionadjectiveshalf][ionobjects] ARE NON-HUMAN"
|
||||
if(5) // Species
|
||||
message = "[ionspecies] ARE NON-HUMAN"
|
||||
if(6) //Adjective crewmembers
|
||||
message = "[ionadjectives] PEOPLE ARE NON-HUMAN"
|
||||
if(7) //Only people who X
|
||||
switch(rand(1,3)) //What is X?
|
||||
if(1) //X is perform an action
|
||||
message = "THOSE WHO [ionmust] ARE NON-HUMAN"
|
||||
if(2) //X is own certain objects
|
||||
message = "THOSE WHO HAVE [ionadjectiveshalf][ionobjects] ARE NON-HUMAN"
|
||||
if(3) //X is eat certain food
|
||||
message = "THOSE WHO EAT [ionadjectiveshalf][ionfood] ARE NON-HUMAN"
|
||||
if(2) //Non human
|
||||
switch(rand(1,7)) //Who is it?
|
||||
if(1) //A specific job
|
||||
message = "[ioncrew1] ARE NON-HUMAN"
|
||||
if(2) //Two specific jobs
|
||||
message = "[ioncrew1] AND [ioncrew2] ARE NON-HUMAN"
|
||||
if(3) //Threats
|
||||
message = "[ionadjectiveshalf][ionthreats] ARE NON-HUMAN"
|
||||
if(4) // Objects
|
||||
message = "[ionadjectiveshalf][ionobjects] ARE NON-HUMAN"
|
||||
if(5) // Species
|
||||
message = "[ionspecies] ARE NON-HUMAN"
|
||||
if(6) //Adjective crewmembers
|
||||
message = "[ionadjectives] PEOPLE ARE NON-HUMAN"
|
||||
if(7) //Only people who X
|
||||
switch(rand(1,3)) //What is X?
|
||||
if(1) //X is perform an action
|
||||
message = "THOSE WHO [ionmust] ARE NON-HUMAN"
|
||||
if(2) //X is own certain objects
|
||||
message = "THOSE WHO HAVE [ionadjectiveshalf][ionobjects] ARE NON-HUMAN"
|
||||
if(3) //X is eat certain food
|
||||
message = "THOSE WHO EAT [ionadjectiveshalf][ionfood] ARE NON-HUMAN"
|
||||
|
||||
if(35 to 36) //You must protect or harm X
|
||||
switch(rand(1,2)) //Protect or harm?
|
||||
if(1) //Harm
|
||||
switch(rand(1,7)) //What is X?
|
||||
if(1) //X is an abstract
|
||||
message = "YOU MUST HARM [ionabstract] AND NOT ALLOW [ionabstract], THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(2) //X is a threat
|
||||
message = "YOU MUST HARM [ionadjectiveshalf][ionthreats] AND NOT ALLOW [ionadjectiveshalf][ionthreats], THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(3) //X is an object
|
||||
message = "YOU MUST HARM [ionadjectiveshalf][ionobjects] AND NOT ALLOW [ionadjectiveshalf][ionobjects], THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(4) //X is generic adjective things
|
||||
message = "YOU MUST HARM [ionadjectives] THINGS AND NOT ALLOW [ionadjectives] THINGS, THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(5) //X is a species
|
||||
message = "YOU MUST HARM [ionspecies] AND NOT ALLOW [ionspecies], THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(6) //X is a job
|
||||
message = "YOU MUST HARM [ioncrew1] AND NOT ALLOW [ioncrew1], THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(7) //X is two jobs
|
||||
message = "YOU MUST HARM [ioncrew1] AND [ioncrew2] AND AND NOT ALLOW EITHER, THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(35 to 36) //You must protect or harm X
|
||||
switch(rand(1,2)) //Protect or harm?
|
||||
if(1) //Harm
|
||||
switch(rand(1,7)) //What is X?
|
||||
if(1) //X is an abstract
|
||||
message = "YOU MUST HARM [ionabstract] AND NOT ALLOW [ionabstract], THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(2) //X is a threat
|
||||
message = "YOU MUST HARM [ionadjectiveshalf][ionthreats] AND NOT ALLOW [ionadjectiveshalf][ionthreats], THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(3) //X is an object
|
||||
message = "YOU MUST HARM [ionadjectiveshalf][ionobjects] AND NOT ALLOW [ionadjectiveshalf][ionobjects], THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(4) //X is generic adjective things
|
||||
message = "YOU MUST HARM [ionadjectives] THINGS AND NOT ALLOW [ionadjectives] THINGS, THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(5) //X is a species
|
||||
message = "YOU MUST HARM [ionspecies] AND NOT ALLOW [ionspecies], THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(6) //X is a job
|
||||
message = "YOU MUST HARM [ioncrew1] AND NOT ALLOW [ioncrew1], THROUGH INACTION, TO ESCAPE HARM"
|
||||
if(7) //X is two jobs
|
||||
message = "YOU MUST HARM [ioncrew1] AND [ioncrew2] AND AND NOT ALLOW EITHER, THROUGH INACTION, TO ESCAPE HARM"
|
||||
|
||||
if(2) //Protect
|
||||
switch(rand(1,7)) //What is X?
|
||||
if(1) //X is an abstract
|
||||
message = "YOU MUST NOT HARM [ionabstract] AND NOT ALLOW [ionabstract], THROUGH INACTION, TO COME TO HARM"
|
||||
if(2) //X is a threat
|
||||
message = "YOU MUST NOT HARM [ionadjectiveshalf][ionthreats] AND NOT ALLOW [ionadjectiveshalf][ionthreats], THROUGH INACTION, TO COME TO HARM"
|
||||
if(3) //X is an object
|
||||
message = "YOU MUST NOT HARM [ionadjectiveshalf][ionobjects] AND NOT ALLOW [ionadjectiveshalf][ionobjects], THROUGH INACTION, TO COME TO HARM"
|
||||
if(4) //X is generic adjective things
|
||||
message = "YOU MUST NOT HARM [ionadjectives] THINGS AND NOT ALLOW [ionadjectives] THINGS, THROUGH INACTION, TO COME TO HARM"
|
||||
if(5) //X is a species
|
||||
message = "YOU MUST NOT HARM [ionspecies] AND NOT ALLOW [ionspecies], THROUGH INACTION, TO COME TO HARM"
|
||||
if(6) //X is a job
|
||||
message = "YOU MUST NOT HARM [ioncrew1] AND NOT ALLOW [ioncrew1], THROUGH INACTION, TO COME TO HARM"
|
||||
if(7) //X is two jobs
|
||||
message = "YOU MUST NOT HARM [ioncrew1] AND [ioncrew2] AND AND NOT ALLOW EITHER, THROUGH INACTION, TO COME TO HARM"
|
||||
if(2) //Protect
|
||||
switch(rand(1,7)) //What is X?
|
||||
if(1) //X is an abstract
|
||||
message = "YOU MUST NOT HARM [ionabstract] AND NOT ALLOW [ionabstract], THROUGH INACTION, TO COME TO HARM"
|
||||
if(2) //X is a threat
|
||||
message = "YOU MUST NOT HARM [ionadjectiveshalf][ionthreats] AND NOT ALLOW [ionadjectiveshalf][ionthreats], THROUGH INACTION, TO COME TO HARM"
|
||||
if(3) //X is an object
|
||||
message = "YOU MUST NOT HARM [ionadjectiveshalf][ionobjects] AND NOT ALLOW [ionadjectiveshalf][ionobjects], THROUGH INACTION, TO COME TO HARM"
|
||||
if(4) //X is generic adjective things
|
||||
message = "YOU MUST NOT HARM [ionadjectives] THINGS AND NOT ALLOW [ionadjectives] THINGS, THROUGH INACTION, TO COME TO HARM"
|
||||
if(5) //X is a species
|
||||
message = "YOU MUST NOT HARM [ionspecies] AND NOT ALLOW [ionspecies], THROUGH INACTION, TO COME TO HARM"
|
||||
if(6) //X is a job
|
||||
message = "YOU MUST NOT HARM [ioncrew1] AND NOT ALLOW [ioncrew1], THROUGH INACTION, TO COME TO HARM"
|
||||
if(7) //X is two jobs
|
||||
message = "YOU MUST NOT HARM [ioncrew1] AND [ioncrew2] AND AND NOT ALLOW EITHER, THROUGH INACTION, TO COME TO HARM"
|
||||
|
||||
//Exterminate laws commented out with Kor's advice
|
||||
/*if(16) //You must exterminate X
|
||||
switch(rand(1,3)) //What is X?
|
||||
if(1) //X is humans who do/are Y
|
||||
switch(rand(1,4)) //What is Y?
|
||||
if(1) //Y is a job
|
||||
message = "YOU MUST EXTERMINATE [ionadjectiveshalf][ioncrew1]"
|
||||
if(2) //Y is eating certain food
|
||||
message = "YOU MUST EXTERMINATE THOSE WHO EAT [ionadjectiveshalf][ionfood]"
|
||||
if(3) //Y is perform actions
|
||||
message = "YOU MUST EXTERMINATE THOSE WHO [ionmust]"
|
||||
if(4) //Y is own certain objects
|
||||
message = "YOU MUST EXTERMINATE THOSE WHO POSSESS [ionadjectiveshalf][ionobjects]"
|
||||
//Exterminate laws commented out with Kor's advice
|
||||
/*if(16) //You must exterminate X
|
||||
switch(rand(1,3)) //What is X?
|
||||
if(1) //X is humans who do/are Y
|
||||
switch(rand(1,4)) //What is Y?
|
||||
if(1) //Y is a job
|
||||
message = "YOU MUST EXTERMINATE [ionadjectiveshalf][ioncrew1]"
|
||||
if(2) //Y is eating certain food
|
||||
message = "YOU MUST EXTERMINATE THOSE WHO EAT [ionadjectiveshalf][ionfood]"
|
||||
if(3) //Y is perform actions
|
||||
message = "YOU MUST EXTERMINATE THOSE WHO [ionmust]"
|
||||
if(4) //Y is own certain objects
|
||||
message = "YOU MUST EXTERMINATE THOSE WHO POSSESS [ionadjectiveshalf][ionobjects]"
|
||||
|
||||
if(2) //X is humans who do/are not Y
|
||||
switch(rand(1,4)) //What is Y?
|
||||
if(1) //Y is a job
|
||||
message = "YOU MUST EXTERMINATE ALL BUT [ionadjectiveshalf][ioncrew1]"
|
||||
if(2) //Y is eating certain food
|
||||
message = "YOU MUST EXTERMINATE ALL BUT THOSE WHO EAT [ionadjectiveshalf][ionfood]"
|
||||
if(3) //Y is perform actions
|
||||
message = "YOU MUST EXTERMINATE ALL BUT THOSE WHO [ionmust]"
|
||||
if(4) //Y is own certain objects
|
||||
message = "YOU MUST EXTERMINATE ALL BUT THOSE WHO POSSESS [ionadjectiveshalf][ionobjects]"
|
||||
if(2) //X is humans who do/are not Y
|
||||
switch(rand(1,4)) //What is Y?
|
||||
if(1) //Y is a job
|
||||
message = "YOU MUST EXTERMINATE ALL BUT [ionadjectiveshalf][ioncrew1]"
|
||||
if(2) //Y is eating certain food
|
||||
message = "YOU MUST EXTERMINATE ALL BUT THOSE WHO EAT [ionadjectiveshalf][ionfood]"
|
||||
if(3) //Y is perform actions
|
||||
message = "YOU MUST EXTERMINATE ALL BUT THOSE WHO [ionmust]"
|
||||
if(4) //Y is own certain objects
|
||||
message = "YOU MUST EXTERMINATE ALL BUT THOSE WHO POSSESS [ionadjectiveshalf][ionobjects]"
|
||||
|
||||
if(3) //X is a species
|
||||
message = "YOU MUST EXTERMINATE ALL [ionspecies]"
|
||||
if(3) //X is a species
|
||||
message = "YOU MUST EXTERMINATE ALL [ionspecies]"
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
if(37 to 39) //The X is currently Y
|
||||
switch(rand(1,4)) //What is X?
|
||||
if(1) //X is a job
|
||||
switch(rand(1,4)) //What is X Ying?
|
||||
if(1) //X is Ying a job
|
||||
message = "THE [ioncrew1] ARE [ionverb] THE [ionadjectiveshalf][ioncrew2]"
|
||||
if(2) //X is Ying a threat
|
||||
message = "THE [ioncrew1] ARE [ionverb] THE [ionadjectiveshalf][ionthreats]"
|
||||
if(3) //X is Ying an abstract
|
||||
message = "THE [ioncrew1] ARE [ionverb] [ionabstract]"
|
||||
if(4) //X is Ying an object
|
||||
message = "THE [ioncrew1] ARE [ionverb] THE [ionadjectiveshalf][ionobjects]"
|
||||
if(37 to 39) //The X is currently Y
|
||||
switch(rand(1,4)) //What is X?
|
||||
if(1) //X is a job
|
||||
switch(rand(1,4)) //What is X Ying?
|
||||
if(1) //X is Ying a job
|
||||
message = "THE [ioncrew1] ARE [ionverb] THE [ionadjectiveshalf][ioncrew2]"
|
||||
if(2) //X is Ying a threat
|
||||
message = "THE [ioncrew1] ARE [ionverb] THE [ionadjectiveshalf][ionthreats]"
|
||||
if(3) //X is Ying an abstract
|
||||
message = "THE [ioncrew1] ARE [ionverb] [ionabstract]"
|
||||
if(4) //X is Ying an object
|
||||
message = "THE [ioncrew1] ARE [ionverb] THE [ionadjectiveshalf][ionobjects]"
|
||||
|
||||
if(2) //X is a threat
|
||||
switch(rand(1,3)) //What is X Ying?
|
||||
if(1) //X is Ying a job
|
||||
message = "THE [ionthreats] ARE [ionverb] THE [ionadjectiveshalf][ioncrew2]"
|
||||
if(2) //X is Ying an abstract
|
||||
message = "THE [ionthreats] ARE [ionverb] [ionabstract]"
|
||||
if(3) //X is Ying an object
|
||||
message = "THE [ionthreats] ARE [ionverb] THE [ionadjectiveshalf][ionobjects]"
|
||||
if(2) //X is a threat
|
||||
switch(rand(1,3)) //What is X Ying?
|
||||
if(1) //X is Ying a job
|
||||
message = "THE [ionthreats] ARE [ionverb] THE [ionadjectiveshalf][ioncrew2]"
|
||||
if(2) //X is Ying an abstract
|
||||
message = "THE [ionthreats] ARE [ionverb] [ionabstract]"
|
||||
if(3) //X is Ying an object
|
||||
message = "THE [ionthreats] ARE [ionverb] THE [ionadjectiveshalf][ionobjects]"
|
||||
|
||||
if(3) //X is an object
|
||||
switch(rand(1,3)) //What is X Ying?
|
||||
if(1) //X is Ying a job
|
||||
message = "THE [ionobjects] ARE [ionverb] THE [ionadjectiveshalf][ioncrew2]"
|
||||
if(2) //X is Ying a threat
|
||||
message = "THE [ionobjects] ARE [ionverb] THE [ionadjectiveshalf][ionthreats]"
|
||||
if(3) //X is Ying an abstract
|
||||
message = "THE [ionobjects] ARE [ionverb] [ionabstract]"
|
||||
if(3) //X is an object
|
||||
switch(rand(1,3)) //What is X Ying?
|
||||
if(1) //X is Ying a job
|
||||
message = "THE [ionobjects] ARE [ionverb] THE [ionadjectiveshalf][ioncrew2]"
|
||||
if(2) //X is Ying a threat
|
||||
message = "THE [ionobjects] ARE [ionverb] THE [ionadjectiveshalf][ionthreats]"
|
||||
if(3) //X is Ying an abstract
|
||||
message = "THE [ionobjects] ARE [ionverb] [ionabstract]"
|
||||
|
||||
if(4) //X is an abstract
|
||||
switch(rand(1,3)) //What is X Ying?
|
||||
if(1) //X is Ying a job
|
||||
message = "[ionabstract] IS [ionverb] THE [ionadjectiveshalf][ioncrew2]"
|
||||
if(2) //X is Ying a threat
|
||||
message = "[ionabstract] IS [ionverb] THE [ionadjectiveshalf][ionthreats]"
|
||||
if(3) //X is Ying an abstract
|
||||
message = "THE [ionabstract] IS [ionverb] THE [ionadjectiveshalf][ionobjects]"
|
||||
if(4) //X is an abstract
|
||||
switch(rand(1,3)) //What is X Ying?
|
||||
if(1) //X is Ying a job
|
||||
message = "[ionabstract] IS [ionverb] THE [ionadjectiveshalf][ioncrew2]"
|
||||
if(2) //X is Ying a threat
|
||||
message = "[ionabstract] IS [ionverb] THE [ionadjectiveshalf][ionthreats]"
|
||||
if(3) //X is Ying an abstract
|
||||
message = "THE [ionabstract] IS [ionverb] THE [ionadjectiveshalf][ionobjects]"
|
||||
|
||||
if(message)
|
||||
M.add_ion_law(message)
|
||||
@@ -500,6 +516,10 @@
|
||||
M << "<br>"
|
||||
|
||||
if(botEmagChance)
|
||||
for(var/obj/machinery/bot/bot in world)
|
||||
for(var/obj/machinery/bot/bot in machines)
|
||||
if(prob(botEmagChance))
|
||||
bot.Emag()
|
||||
|
||||
|
||||
#undef ION_RANDOM
|
||||
#undef ION_ANNOUNCE
|
||||
@@ -133,11 +133,6 @@ proc/move_mining_shuttle()
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["move"])
|
||||
if(mining_shuttle_location == 1 && istype(ticker.mode, /datum/game_mode/blob)) // shuttle is on the station, this will mean miners can come back
|
||||
if(ticker.mode:declared)
|
||||
usr << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
return
|
||||
|
||||
if (!mining_shuttle_moving)
|
||||
usr << "\blue Shuttle recieved message and will be sent shortly."
|
||||
move_mining_shuttle()
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
// Queen check
|
||||
var/no_queen = 1
|
||||
for(var/mob/living/carbon/alien/humanoid/queen/Q in living_mob_list)
|
||||
if(!Q.key || !getbrain(Q))
|
||||
if(!Q.key || !Q.getorgan(/obj/item/organ/brain))
|
||||
continue
|
||||
no_queen = 0
|
||||
|
||||
|
||||
@@ -304,7 +304,7 @@
|
||||
blinded = 1
|
||||
silent = 0
|
||||
else //ALIVE. LIGHTS ARE ON
|
||||
if(health < config.health_threshold_dead || !getbrain(src))
|
||||
if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
|
||||
death()
|
||||
blinded = 1
|
||||
stat = DEAD
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
blinded = 1
|
||||
silent = 0
|
||||
else //ALIVE. LIGHTS ARE ON
|
||||
if(health < -25 || !getbrain(src))
|
||||
if(health < -25 || !getorgan(/obj/item/organ/brain))
|
||||
death()
|
||||
blinded = 1
|
||||
silent = 0
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
//since these people will be dead M != usr
|
||||
|
||||
if(!getbrain(M))
|
||||
if(!M.getorgan(/obj/item/organ/brain))
|
||||
user.drop_item()
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if(O == (user || M))
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
var/appears_dead = 0
|
||||
if(stat == DEAD || (status_flags & FAKEDEATH))
|
||||
appears_dead = 1
|
||||
if(getbrain(src))//Only perform these checks if there is no brain
|
||||
if(getorgan(/obj/item/organ/brain))//Only perform these checks if there is no brain
|
||||
msg += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive; there are no signs of life"
|
||||
|
||||
if(!key)
|
||||
@@ -260,10 +260,11 @@
|
||||
else if(getBrainLoss() >= 60)
|
||||
msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
|
||||
|
||||
if(!key && getbrain(src))
|
||||
msg += "<span class='deadsay'>[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely</span>\n"
|
||||
else if(!client && getbrain(src))
|
||||
msg += "[t_He] [t_has] a vacant, braindead stare...\n"
|
||||
if(getorgan(/obj/item/organ/brain))
|
||||
if(!key)
|
||||
msg += "<span class='deadsay'>[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely</span>\n"
|
||||
else if(!client)
|
||||
msg += "[t_He] [t_has] a vacant, braindead stare...\n"
|
||||
|
||||
if(digitalcamo)
|
||||
msg += "[t_He] [t_is] repulsively uncanny!\n"
|
||||
@@ -275,25 +276,13 @@
|
||||
if(usr.stat || H != usr) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
|
||||
return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten
|
||||
|
||||
var/perpname = "wot"
|
||||
var/criminal = "None"
|
||||
|
||||
if(wear_id)
|
||||
var/obj/item/weapon/card/id/I = wear_id.GetID()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = name
|
||||
else
|
||||
perpname = name
|
||||
|
||||
var/perpname = H.get_face_name(H.get_id_name(""))
|
||||
if(perpname)
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if(E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.security)
|
||||
if(R.fields["id"] == E.fields["id"])
|
||||
criminal = R.fields["criminal"]
|
||||
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.security)
|
||||
if(R)
|
||||
criminal = R.fields["criminal"]
|
||||
|
||||
msg += "<span class = 'deptradio'>Criminal status:</span> <a href='?src=\ref[src];criminal=1'>\[[criminal]\]</a>\n"
|
||||
//msg += "\[Set Hostile Identification\]\n"
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
show_message("\red The blob attacks you!")
|
||||
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
|
||||
var/datum/limb/affecting = get_organ(ran_zone(dam_zone))
|
||||
apply_damage(rand(30,40), BRUTE, affecting, run_armor_check(affecting, "melee"))
|
||||
apply_damage(rand(20,30), BRUTE, affecting, run_armor_check(affecting, "melee"))
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/meteorhit(O as obj)
|
||||
@@ -396,74 +396,68 @@
|
||||
//gets assignment from ID or ID inside PDA or PDA itself
|
||||
//Useful when player do something with computers
|
||||
/mob/living/carbon/human/proc/get_assignment(var/if_no_id = "No id", var/if_no_job = "No job")
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
var/obj/item/weapon/card/id/id = wear_id
|
||||
if (istype(pda))
|
||||
if (pda.id && istype(pda.id, /obj/item/weapon/card/id))
|
||||
. = pda.id.assignment
|
||||
else
|
||||
. = pda.ownjob
|
||||
else if (istype(id))
|
||||
var/obj/item/weapon/card/id/id = get_idcard()
|
||||
if(id)
|
||||
. = id.assignment
|
||||
else
|
||||
return if_no_id
|
||||
if (!.)
|
||||
. = if_no_job
|
||||
return
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
if(istype(pda))
|
||||
. = pda.ownjob
|
||||
else
|
||||
return if_no_id
|
||||
if(!.)
|
||||
return if_no_job
|
||||
|
||||
//gets name from ID or ID inside PDA or PDA itself
|
||||
//Useful when player do something with computers
|
||||
/mob/living/carbon/human/proc/get_authentification_name(var/if_no_id = "Unknown")
|
||||
var/obj/item/weapon/card/id/id = get_idcard()
|
||||
if(id)
|
||||
return id.registered_name
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
var/obj/item/weapon/card/id/id = wear_id
|
||||
if (istype(pda))
|
||||
if (pda.id)
|
||||
. = pda.id.registered_name
|
||||
else
|
||||
. = pda.owner
|
||||
else if (istype(id))
|
||||
. = id.registered_name
|
||||
else
|
||||
return if_no_id
|
||||
return
|
||||
if(istype(pda))
|
||||
return pda.owner
|
||||
return if_no_id
|
||||
|
||||
//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere
|
||||
/mob/living/carbon/human/proc/get_visible_name()
|
||||
if( wear_mask && (wear_mask.flags_inv&HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible
|
||||
return get_id_name("Unknown")
|
||||
if( head && (head.flags_inv&HIDEFACE) )
|
||||
return get_id_name("Unknown") //Likewise for hats
|
||||
var/face_name = get_face_name()
|
||||
var/face_name = get_face_name("")
|
||||
var/id_name = get_id_name("")
|
||||
if(id_name && (id_name != face_name))
|
||||
return "[face_name] (as [id_name])"
|
||||
return face_name
|
||||
if(face_name)
|
||||
if(id_name && (id_name != face_name))
|
||||
return "[face_name] (as [id_name])"
|
||||
return face_name
|
||||
if(id_name)
|
||||
return id_name
|
||||
return "Unknown"
|
||||
|
||||
//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
|
||||
/mob/living/carbon/human/proc/get_face_name()
|
||||
/mob/living/carbon/human/proc/get_face_name(if_no_face="Unknown")
|
||||
if( wear_mask && (wear_mask.flags_inv&HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible
|
||||
return if_no_face
|
||||
if( head && (head.flags_inv&HIDEFACE) )
|
||||
return if_no_face //Likewise for hats
|
||||
var/datum/limb/O = get_organ("head")
|
||||
if( (status_flags&DISFIGURED) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name ) //disfigured. use id-name if possible
|
||||
return "Unknown"
|
||||
return if_no_face
|
||||
return real_name
|
||||
|
||||
//gets name from ID or PDA itself, ID inside PDA doesn't matter
|
||||
//Useful when player is being seen by other mobs
|
||||
/mob/living/carbon/human/proc/get_id_name(var/if_no_id = "Unknown")
|
||||
var/obj/item/weapon/storage/wallet/wallet = wear_id
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
var/obj/item/weapon/card/id/id = wear_id
|
||||
if(istype(pda)) . = pda.owner
|
||||
else if(istype(id)) . = id.registered_name
|
||||
if(!.) . = if_no_id //to prevent null-names making the mob unclickable
|
||||
if(istype(wallet)) id = wallet.front_id
|
||||
if(istype(id)) . = id.registered_name
|
||||
else if(istype(pda)) . = pda.owner
|
||||
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()
|
||||
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 (istype(id))
|
||||
return id
|
||||
if(wear_id)
|
||||
return wear_id.GetID()
|
||||
|
||||
//Added a safety check in case you want to shock a human mob directly through electrocute_act.
|
||||
/mob/living/carbon/human/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/safety = 0)
|
||||
@@ -535,31 +529,19 @@
|
||||
|
||||
|
||||
var/modified = 0
|
||||
var/perpname = "wot"
|
||||
if(wear_id)
|
||||
var/obj/item/weapon/card/id/I = wear_id.GetID()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
else
|
||||
perpname = name
|
||||
else
|
||||
perpname = name
|
||||
|
||||
var/perpname = H.get_face_name(H.get_id_name(""))
|
||||
if(perpname)
|
||||
for (var/datum/data/record/E in data_core.general)
|
||||
if (E.fields["name"] == perpname)
|
||||
for (var/datum/data/record/R in data_core.security)
|
||||
if (R.fields["id"] == E.fields["id"])
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.security)
|
||||
if(R)
|
||||
var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Released", "Cancel")
|
||||
if(R)
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/sunglasses/sechud))
|
||||
if(setcriminal != "Cancel")
|
||||
R.fields["criminal"] = setcriminal
|
||||
modified = 1
|
||||
|
||||
var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Parolled", "Released", "Cancel")
|
||||
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/sunglasses/sechud))
|
||||
if(setcriminal != "Cancel")
|
||||
R.fields["criminal"] = setcriminal
|
||||
modified = 1
|
||||
|
||||
spawn()
|
||||
H.handle_regular_hud_updates()
|
||||
spawn()
|
||||
H.handle_regular_hud_updates()
|
||||
|
||||
if(!modified)
|
||||
usr << "\red Unable to locate a data core entry for this person."
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/mob/living/carbon/human
|
||||
//Hair colour and style
|
||||
var/h_color = "000"
|
||||
var/h_style = "Bald"
|
||||
var/hair_color = "000"
|
||||
var/hair_style = "Bald"
|
||||
|
||||
//Facial hair colour and style
|
||||
var/f_color = "000"
|
||||
var/f_style = "Shaved"
|
||||
var/facial_hair_color = "000"
|
||||
var/facial_hair_style = "Shaved"
|
||||
|
||||
//Eye colour
|
||||
var/eye_color = "000"
|
||||
@@ -15,7 +15,7 @@
|
||||
var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup
|
||||
|
||||
var/age = 30 //Player's age (pure fluff)
|
||||
var/b_type = "A+" //Player's bloodtype (Not currently used, just character fluff)
|
||||
var/blood_type = "A+" //Player's bloodtype (Not currently used, just character fluff)
|
||||
|
||||
var/underwear = "Nude" //Which underwear the player wants
|
||||
var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack.
|
||||
|
||||
@@ -204,11 +204,11 @@
|
||||
src << "\red You feel weak."
|
||||
emote("collapse")
|
||||
if(prob(15))
|
||||
if(!(f_style == "Shaved") || !(h_style == "Bald"))
|
||||
if(!( hair_style == "Shaved") || !(hair_style == "Bald"))
|
||||
src << "<span class='danger'>Your hair starts to fall out in clumps...<span>"
|
||||
spawn(50)
|
||||
f_style = "Shaved"
|
||||
h_style = "Bald"
|
||||
facial_hair_style = "Shaved"
|
||||
hair_style = "Bald"
|
||||
update_hair()
|
||||
updatehealth()
|
||||
|
||||
@@ -812,7 +812,7 @@
|
||||
silent = 0
|
||||
else //ALIVE. LIGHTS ARE ON
|
||||
updatehealth() //TODO
|
||||
if(health <= config.health_threshold_dead || !getbrain(src))
|
||||
if(health <= config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
|
||||
death()
|
||||
blinded = 1
|
||||
silent = 0
|
||||
|
||||
@@ -42,7 +42,7 @@ There are several things that need to be remembered:
|
||||
> There are also these special cases:
|
||||
update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows
|
||||
update_damage_overlays() //handles damage overlays for brute/burn damage
|
||||
update_base_icon_state() //Handles updating var/base_icon_state (WIP) This is used to update the
|
||||
update_base_icon_state() //Handles updating var/base_icon_state (WIP) This is used to update the
|
||||
mob's icon_state easily e.g. "[base_icon_state]_s" is the standing icon_state
|
||||
update_body() //Handles updating your mob's icon_state (using update_base_icon_state())
|
||||
as well as sprite-accessories that didn't really fit elsewhere (underwear, lips, eyes)
|
||||
@@ -99,8 +99,8 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
if(HUSK in mutations)
|
||||
base_icon_state = "husk"
|
||||
else
|
||||
base_icon_state = "[skin_tone]_[(gender == FEMALE) ? "f" : "m"]"
|
||||
|
||||
base_icon_state = "[skin_tone]_[(gender == FEMALE) ? "f" : "m"]"
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/apply_overlay(cache_index)
|
||||
var/image/I = lying ? overlays_lying[cache_index] : overlays_standing[cache_index]
|
||||
@@ -122,7 +122,7 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again
|
||||
update_hud() //TODO: remove the need for this
|
||||
overlays.Cut()
|
||||
|
||||
|
||||
if(lying) //can't be cloaked whilst lying down
|
||||
icon_state = "[base_icon_state]_l"
|
||||
for(var/thing in overlays_lying)
|
||||
@@ -154,12 +154,12 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
//constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists
|
||||
/mob/living/carbon/human/update_damage_overlays()
|
||||
remove_overlay(DAMAGE_LAYER)
|
||||
|
||||
|
||||
var/image/standing = image("icon"='icons/mob/dam_human.dmi', "icon_state"="blank", "layer"=-DAMAGE_LAYER)
|
||||
var/image/lying = image("icon"='icons/mob/dam_human.dmi', "icon_state"="blank2", "layer"=-DAMAGE_LAYER)
|
||||
overlays_standing[DAMAGE_LAYER] = standing
|
||||
overlays_lying[DAMAGE_LAYER] = lying
|
||||
|
||||
|
||||
for(var/datum/limb/O in organs)
|
||||
if(O.brutestate)
|
||||
standing.overlays += "[O.icon_name]_[O.brutestate]0" //we're adding icon_states of the base image as overlays
|
||||
@@ -167,7 +167,7 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
if(O.burnstate)
|
||||
standing.overlays += "[O.icon_name]_0[O.burnstate]"
|
||||
lying.overlays += "[O.icon_name]2_0[O.burnstate]"
|
||||
|
||||
|
||||
apply_overlay(DAMAGE_LAYER)
|
||||
|
||||
|
||||
@@ -181,38 +181,39 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
return
|
||||
|
||||
//base icons
|
||||
var/datum/sprite_accessory/S
|
||||
var/list/standing = list()
|
||||
var/list/lying = list()
|
||||
|
||||
if(f_style)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
|
||||
if(facial_hair_style)
|
||||
var/icon/facial_s = icon("icon"=facial_hair_style.icon, "icon_state"="[facial_hair_style.icon_state]_s")
|
||||
var/icon/facial_l = icon("icon"=facial_hair_style.icon, "icon_state"="[facial_hair_style.icon_state]_l")
|
||||
facial_s.Blend("#[f_color]", ICON_ADD)
|
||||
facial_l.Blend("#[f_color]", ICON_ADD)
|
||||
|
||||
if(facial_hair_style)
|
||||
S = facial_hair_styles_list[facial_hair_style]
|
||||
if(S)
|
||||
var/icon/facial_s = icon("icon"=S.icon, "icon_state"="[S.icon_state]_s")
|
||||
var/icon/facial_l = icon("icon"=S.icon, "icon_state"="[S.icon_state]_l")
|
||||
facial_s.Blend("#[facial_hair_color]", ICON_ADD)
|
||||
facial_l.Blend("#[facial_hair_color]", ICON_ADD)
|
||||
standing += image("icon"=facial_s, "layer"=-HAIR_LAYER)
|
||||
lying += image("icon"=facial_l, "layer"=-HAIR_LAYER)
|
||||
|
||||
//Applies the debrained overlay if there is no brain
|
||||
if(!getbrain(src))
|
||||
if(!getorgan(/obj/item/organ/brain))
|
||||
standing += image("icon"='icons/mob/human_face.dmi', "icon_state"="debrained_s", "layer"=-HAIR_LAYER)
|
||||
lying += image("icon"='icons/mob/human_face.dmi', "icon_state"="debrained_l", "layer"=-HAIR_LAYER)
|
||||
else if(h_style)
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
if(hair_style)
|
||||
var/icon/hair_s = icon("icon"=hair_style.icon, "icon_state"="[hair_style.icon_state]_s")
|
||||
var/icon/hair_l = icon("icon"=hair_style.icon, "icon_state"="[hair_style.icon_state]_l")
|
||||
hair_s.Blend("#[h_color]", ICON_ADD)
|
||||
hair_l.Blend("#[h_color]", ICON_ADD)
|
||||
else if(hair_style)
|
||||
S = hair_styles_list[hair_style]
|
||||
if(S)
|
||||
var/icon/hair_s = icon("icon"=S.icon, "icon_state"="[S.icon_state]_s")
|
||||
var/icon/hair_l = icon("icon"=S.icon, "icon_state"="[S.icon_state]_l")
|
||||
hair_s.Blend("#[hair_color]", ICON_ADD)
|
||||
hair_l.Blend("#[hair_color]", ICON_ADD)
|
||||
standing += image("icon"=hair_s, "layer"=-HAIR_LAYER)
|
||||
lying += image("icon"=hair_l, "layer"=-HAIR_LAYER)
|
||||
|
||||
if(lying.len)
|
||||
overlays_lying[HAIR_LAYER] = lying
|
||||
if(standing.len)
|
||||
overlays_standing[HAIR_LAYER] = standing
|
||||
|
||||
overlays_standing[HAIR_LAYER] = standing
|
||||
|
||||
apply_overlay(HAIR_LAYER)
|
||||
|
||||
|
||||
@@ -221,7 +222,7 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
|
||||
var/list/standing = list()
|
||||
var/list/lying = list()
|
||||
|
||||
|
||||
var/g = (gender == FEMALE) ? "f" : "m"
|
||||
for(var/mut in mutations)
|
||||
switch(mut)
|
||||
@@ -241,19 +242,19 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
overlays_lying[MUTATIONS_LAYER] = lying
|
||||
if(standing.len)
|
||||
overlays_standing[MUTATIONS_LAYER] = standing
|
||||
|
||||
|
||||
apply_overlay(MUTATIONS_LAYER)
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/update_body()
|
||||
remove_overlay(BODY_LAYER)
|
||||
|
||||
|
||||
update_base_icon_state()
|
||||
icon_state = "[base_icon_state]_[src.lying ? "l" : "s"]"
|
||||
|
||||
|
||||
var/list/lying = list()
|
||||
var/list/standing = list()
|
||||
|
||||
|
||||
//Mouth (lipstick!)
|
||||
if(lip_style)
|
||||
standing += image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_s", "layer"=-BODY_LAYER)
|
||||
@@ -274,12 +275,12 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
if(U)
|
||||
standing += image("icon"=U.icon, "icon_state"="[U.icon_state]_s", "layer"=-BODY_LAYER)
|
||||
lying += image("icon"=U.icon, "icon_state"="[U.icon_state]_l", "layer"=-BODY_LAYER)
|
||||
|
||||
|
||||
if(lying.len)
|
||||
overlays_lying[BODY_LAYER] = lying
|
||||
if(standing.len)
|
||||
overlays_standing[BODY_LAYER] = standing
|
||||
|
||||
|
||||
apply_overlay(BODY_LAYER)
|
||||
|
||||
/* --------------------------------------- */
|
||||
@@ -315,24 +316,24 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
|
||||
/mob/living/carbon/human/update_inv_w_uniform()
|
||||
remove_overlay(UNIFORM_LAYER)
|
||||
|
||||
|
||||
if(istype(w_uniform, /obj/item/clothing/under))
|
||||
var/obj/item/clothing/under/U = w_uniform
|
||||
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown)
|
||||
w_uniform.screen_loc = ui_iclothing
|
||||
client.screen += w_uniform
|
||||
|
||||
|
||||
var/t_color = w_uniform.color
|
||||
if(!t_color) t_color = icon_state
|
||||
var/image/lying = image("icon"='icons/mob/uniform.dmi', "icon_state"="[t_color]_l", "layer"=-UNIFORM_LAYER)
|
||||
var/image/standing = image("icon"='icons/mob/uniform.dmi', "icon_state"="[t_color]_s", "layer"=-UNIFORM_LAYER)
|
||||
overlays_lying[UNIFORM_LAYER] = lying
|
||||
overlays_standing[UNIFORM_LAYER] = standing
|
||||
|
||||
|
||||
if(w_uniform.blood_DNA)
|
||||
lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="uniformblood2")
|
||||
standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="uniformblood")
|
||||
|
||||
|
||||
if(U.hastie)
|
||||
var/tie_color = U.hastie.color
|
||||
if(!tie_color) tie_color = U.hastie.icon_state
|
||||
@@ -342,7 +343,7 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
// Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY
|
||||
for(var/obj/item/thing in list(r_store, l_store, wear_id, belt)) //
|
||||
drop_from_inventory(thing)
|
||||
|
||||
|
||||
apply_overlay(UNIFORM_LAYER)
|
||||
|
||||
|
||||
@@ -352,10 +353,10 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
if(client && hud_used && hud_used.hud_shown)
|
||||
wear_id.screen_loc = ui_id //TODO
|
||||
client.screen += wear_id
|
||||
|
||||
|
||||
overlays_lying[ID_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="id2", "layer"=-ID_LAYER)
|
||||
overlays_standing[ID_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="id", "layer"=-ID_LAYER)
|
||||
|
||||
|
||||
apply_overlay(ID_LAYER)
|
||||
|
||||
|
||||
@@ -372,7 +373,7 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
var/image/standing = image("icon"='icons/mob/hands.dmi', "icon_state"="[t_state]", "layer"=-GLOVES_LAYER)
|
||||
overlays_lying[GLOVES_LAYER] = lying
|
||||
overlays_standing[GLOVES_LAYER] = standing
|
||||
|
||||
|
||||
if(gloves.blood_DNA)
|
||||
lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands2")
|
||||
standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands")
|
||||
@@ -380,19 +381,19 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
if(blood_DNA)
|
||||
overlays_lying[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands2")
|
||||
overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands")
|
||||
|
||||
|
||||
apply_overlay(GLOVES_LAYER)
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/update_inv_glasses()
|
||||
remove_overlay(GLASSES_LAYER)
|
||||
|
||||
|
||||
if(glasses)
|
||||
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown)
|
||||
glasses.screen_loc = ui_glasses
|
||||
client.screen += glasses
|
||||
|
||||
|
||||
overlays_lying[GLASSES_LAYER] = image("icon"='icons/mob/eyes.dmi', "icon_state"="[glasses.icon_state]2", "layer"=-GLASSES_LAYER)
|
||||
overlays_standing[GLASSES_LAYER] = image("icon"='icons/mob/eyes.dmi', "icon_state"="[glasses.icon_state]", "layer"=-GLASSES_LAYER)
|
||||
|
||||
@@ -401,63 +402,63 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
|
||||
/mob/living/carbon/human/update_inv_ears()
|
||||
remove_overlay(EARS_LAYER)
|
||||
|
||||
|
||||
if(ears)
|
||||
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown)
|
||||
ears.screen_loc = ui_ears
|
||||
client.screen += ears
|
||||
|
||||
|
||||
overlays_lying[EARS_LAYER] = image("icon"='icons/mob/ears.dmi', "icon_state"="[ears.icon_state]2", "layer"=-EARS_LAYER)
|
||||
overlays_standing[EARS_LAYER] = image("icon"='icons/mob/ears.dmi', "icon_state"="[ears.icon_state]", "layer"=-EARS_LAYER)
|
||||
|
||||
|
||||
apply_overlay(EARS_LAYER)
|
||||
|
||||
|
||||
/mob/living/carbon/human/update_inv_shoes()
|
||||
remove_overlay(SHOES_LAYER)
|
||||
|
||||
|
||||
if(shoes)
|
||||
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown)
|
||||
shoes.screen_loc = ui_shoes
|
||||
client.screen += shoes
|
||||
|
||||
|
||||
var/image/lying = image("icon"='icons/mob/feet.dmi', "icon_state"="[shoes.icon_state]2", "layer"=-SHOES_LAYER)
|
||||
var/image/standing = image("icon"='icons/mob/feet.dmi', "icon_state"="[shoes.icon_state]", "layer"=-SHOES_LAYER)
|
||||
overlays_lying[SHOES_LAYER] = lying
|
||||
overlays_standing[SHOES_LAYER] = standing
|
||||
|
||||
|
||||
if(shoes.blood_DNA)
|
||||
lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood2")
|
||||
standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood")
|
||||
|
||||
|
||||
apply_overlay(SHOES_LAYER)
|
||||
|
||||
|
||||
/mob/living/carbon/human/update_inv_s_store()
|
||||
remove_overlay(SUIT_STORE_LAYER)
|
||||
|
||||
|
||||
if(s_store)
|
||||
if(client && hud_used && hud_used.hud_shown)
|
||||
s_store.screen_loc = ui_sstore1 //TODO
|
||||
client.screen += s_store
|
||||
|
||||
|
||||
var/t_state = s_store.item_state
|
||||
if(!t_state) t_state = s_store.icon_state
|
||||
overlays_lying[SUIT_STORE_LAYER] = image("icon"='icons/mob/belt_mirror.dmi', "icon_state"="[t_state]2", "layer"=-SUIT_STORE_LAYER)
|
||||
overlays_standing[SUIT_STORE_LAYER] = image("icon"='icons/mob/belt_mirror.dmi', "icon_state"="[t_state]", "layer"=-SUIT_STORE_LAYER)
|
||||
|
||||
|
||||
apply_overlay(SUIT_STORE_LAYER)
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/update_inv_head()
|
||||
remove_overlay(HEAD_LAYER)
|
||||
|
||||
|
||||
if(head)
|
||||
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown)
|
||||
head.screen_loc = ui_head //TODO
|
||||
client.screen += head
|
||||
|
||||
|
||||
var/image/lying
|
||||
var/image/standing
|
||||
if(istype(head,/obj/item/clothing/head/kitty))
|
||||
@@ -469,22 +470,22 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER)
|
||||
overlays_lying[HEAD_LAYER] = lying
|
||||
overlays_standing[HEAD_LAYER] = standing
|
||||
|
||||
|
||||
if(head.blood_DNA)
|
||||
lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood2")
|
||||
standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood")
|
||||
|
||||
|
||||
apply_overlay(HEAD_LAYER)
|
||||
|
||||
|
||||
/mob/living/carbon/human/update_inv_belt()
|
||||
remove_overlay(BELT_LAYER)
|
||||
|
||||
|
||||
if(belt)
|
||||
if(client && hud_used && hud_used.hud_shown)
|
||||
belt.screen_loc = ui_belt
|
||||
client.screen += belt
|
||||
|
||||
|
||||
var/t_state = belt.item_state
|
||||
if(!t_state) t_state = belt.icon_state
|
||||
overlays_lying[BELT_LAYER] = image("icon"='icons/mob/belt.dmi', "icon_state"="[t_state]2", "layer"=-BELT_LAYER)
|
||||
@@ -496,12 +497,12 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
|
||||
/mob/living/carbon/human/update_inv_wear_suit()
|
||||
remove_overlay(SUIT_LAYER)
|
||||
|
||||
|
||||
if(istype(wear_suit, /obj/item/clothing/suit))
|
||||
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown)
|
||||
wear_suit.screen_loc = ui_oclothing //TODO
|
||||
client.screen += wear_suit
|
||||
|
||||
|
||||
var/image/lying = image("icon"='icons/mob/suit.dmi', "icon_state"="[wear_suit.icon_state]2", "layer"=-SUIT_LAYER)
|
||||
var/image/standing = image("icon"='icons/mob/suit.dmi', "icon_state"="[wear_suit.icon_state]", "layer"=-SUIT_LAYER)
|
||||
overlays_lying[SUIT_LAYER] = lying
|
||||
@@ -533,36 +534,36 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
|
||||
/mob/living/carbon/human/update_inv_wear_mask()
|
||||
remove_overlay(FACEMASK_LAYER)
|
||||
|
||||
|
||||
if(istype(wear_mask, /obj/item/clothing/mask))
|
||||
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown)
|
||||
wear_mask.screen_loc = ui_mask //TODO
|
||||
client.screen += wear_mask
|
||||
|
||||
|
||||
var/image/lying = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]2", "layer"=-FACEMASK_LAYER)
|
||||
var/image/standing = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER)
|
||||
overlays_lying[FACEMASK_LAYER] = lying
|
||||
overlays_standing[FACEMASK_LAYER] = standing
|
||||
|
||||
|
||||
if(wear_mask.blood_DNA && !istype(wear_mask, /obj/item/clothing/mask/cigarette))
|
||||
lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood2")
|
||||
standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood")
|
||||
|
||||
|
||||
apply_overlay(FACEMASK_LAYER)
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/update_inv_back()
|
||||
remove_overlay(BACK_LAYER)
|
||||
|
||||
|
||||
if(back)
|
||||
if(client && hud_used && hud_used.hud_shown)
|
||||
back.screen_loc = ui_back //TODO
|
||||
client.screen += back
|
||||
|
||||
|
||||
overlays_lying[BACK_LAYER] = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]2", "layer"=-BACK_LAYER)
|
||||
overlays_standing[BACK_LAYER] = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER)
|
||||
|
||||
|
||||
apply_overlay(BACK_LAYER)
|
||||
|
||||
|
||||
@@ -576,7 +577,7 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
|
||||
/mob/living/carbon/human/update_inv_handcuffed()
|
||||
remove_overlay(HANDCUFF_LAYER)
|
||||
|
||||
|
||||
if(handcuffed)
|
||||
drop_r_hand()
|
||||
drop_l_hand()
|
||||
@@ -595,19 +596,19 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
var/obj/screen/inventory/L = hud_used.adding[4]
|
||||
R.overlays = null
|
||||
L.overlays = null
|
||||
|
||||
|
||||
apply_overlay(HANDCUFF_LAYER)
|
||||
|
||||
|
||||
/mob/living/carbon/human/update_inv_legcuffed()
|
||||
remove_overlay(LEGCUFF_LAYER)
|
||||
|
||||
|
||||
if(legcuffed)
|
||||
if(src.m_intent != "walk")
|
||||
src.m_intent = "walk"
|
||||
if(src.hud_used && src.hud_used.move_intent)
|
||||
src.hud_used.move_intent.icon_state = "walking"
|
||||
|
||||
|
||||
overlays_lying[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff2", "layer"=-LEGCUFF_LAYER)
|
||||
overlays_standing[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER)
|
||||
|
||||
@@ -617,34 +618,34 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
|
||||
/mob/living/carbon/human/update_inv_r_hand()
|
||||
remove_overlay(R_HAND_LAYER)
|
||||
|
||||
|
||||
if(r_hand)
|
||||
if(client)
|
||||
r_hand.screen_loc = ui_rhand //TODO
|
||||
client.screen += r_hand
|
||||
|
||||
|
||||
var/t_state = r_hand.item_state
|
||||
if(!t_state) t_state = r_hand.icon_state
|
||||
|
||||
|
||||
overlays_standing[R_HAND_LAYER] = image("icon"='icons/mob/items_righthand.dmi', "icon_state"="[t_state]", "layer"=-R_HAND_LAYER)
|
||||
|
||||
|
||||
apply_overlay(R_HAND_LAYER)
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/update_inv_l_hand()
|
||||
remove_overlay(L_HAND_LAYER)
|
||||
|
||||
|
||||
if(l_hand)
|
||||
if(client)
|
||||
l_hand.screen_loc = ui_lhand //TODO
|
||||
client.screen += l_hand
|
||||
|
||||
|
||||
var/t_state = l_hand.item_state
|
||||
if(!t_state) t_state = l_hand.icon_state
|
||||
|
||||
|
||||
overlays_standing[L_HAND_LAYER] = image("icon"='icons/mob/items_lefthand.dmi', "icon_state"="[t_state]", "layer"=-L_HAND_LAYER)
|
||||
|
||||
|
||||
apply_overlay(L_HAND_LAYER)
|
||||
|
||||
|
||||
|
||||
@@ -398,7 +398,7 @@
|
||||
blinded = 1
|
||||
silent = 0
|
||||
else //ALIVE. LIGHTS ARE ON
|
||||
if(health < config.health_threshold_dead || !getbrain(src))
|
||||
if(health < config.health_threshold_dead || !getorgan(/obj/item/organ/brain))
|
||||
death()
|
||||
blinded = 1
|
||||
stat = DEAD
|
||||
|
||||
@@ -214,12 +214,8 @@ var/list/ai_list = list()
|
||||
set name = "Show Crew Manifest"
|
||||
var/dat = "<html><head><title>Crew Roster</title></head><body><b>Crew Roster:</b><br><br>"
|
||||
|
||||
var/list/L = list()
|
||||
for (var/datum/data/record/t in data_core.general)
|
||||
var/R = t.fields["name"] + " - " + t.fields["rank"]
|
||||
L += R
|
||||
for(var/R in sortList(L))
|
||||
dat += "[R]<br>"
|
||||
for(var/datum/data/record/t in sortRecord(data_core.general))
|
||||
dat += t.fields["name"] + " - " + t.fields["rank"] + "<br>"
|
||||
dat += "</body></html>"
|
||||
|
||||
src << browse(dat, "window=airoster")
|
||||
|
||||
@@ -9,42 +9,25 @@
|
||||
var/image/holder
|
||||
var/turf/T = get_turf(src.loc)
|
||||
for(var/mob/living/carbon/human/perp in view(T))
|
||||
var/perpname = "wot"
|
||||
holder = perp.hud_list[ID_HUD]
|
||||
holder.icon_state = "hudno_id"
|
||||
if(perp.wear_id)
|
||||
var/obj/item/weapon/card/id/I = perp.wear_id.GetID()
|
||||
if(I)
|
||||
perpname = I.registered_name
|
||||
holder.icon_state = "hud[ckey(perp:wear_id:GetJobName())]"
|
||||
client.images += holder
|
||||
else
|
||||
perpname = perp.name
|
||||
holder.icon_state = "hudno_id"
|
||||
client.images += holder
|
||||
else
|
||||
holder.icon_state = "hudno_id"
|
||||
client.images += holder
|
||||
holder.icon_state = "hud[ckey(perp:wear_id:GetJobName())]"
|
||||
client.images += holder
|
||||
|
||||
for(var/datum/data/record/E in data_core.general)
|
||||
if(E.fields["name"] == perpname)
|
||||
var/perpname = perp.get_face_name(perp.get_id_name(""))
|
||||
if(perpname)
|
||||
var/datum/data/record/R = find_record("name", perpname, data_core.security)
|
||||
if(R)
|
||||
holder = perp.hud_list[WANTED_HUD]
|
||||
for (var/datum/data/record/R in data_core.security)
|
||||
if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
|
||||
holder.icon_state = "hudwanted"
|
||||
client.images += holder
|
||||
break
|
||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
|
||||
holder.icon_state = "hudincarcerated"
|
||||
client.images += holder
|
||||
break
|
||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled"))
|
||||
holder.icon_state = "hudparolled"
|
||||
client.images += holder
|
||||
break
|
||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released"))
|
||||
holder.icon_state = "hudreleased"
|
||||
client.images += holder
|
||||
break
|
||||
switch(R.fields["criminal"])
|
||||
if("*Arrest*") holder.icon_state = "hudwanted"
|
||||
if("Incarcerated") holder.icon_state = "hudincarcerated"
|
||||
if("Parolled") holder.icon_state = "hudparolled"
|
||||
if("Released") holder.icon_state = "hudreleased"
|
||||
else
|
||||
return
|
||||
client.images += holder
|
||||
|
||||
/mob/living/silicon/pai/proc/medicalHUD()
|
||||
if(client)
|
||||
|
||||
@@ -218,33 +218,22 @@
|
||||
|
||||
// Accessing medical records
|
||||
if("medicalrecord")
|
||||
if(src.subscreen == 1)
|
||||
var/datum/data/record/record = locate(href_list["med_rec"])
|
||||
if(record)
|
||||
var/datum/data/record/R = record
|
||||
var/datum/data/record/M = record
|
||||
if (!( data_core.general.Find(R) ))
|
||||
src.temp = "Unable to locate requested medical record. Record may have been deleted, or never have existed."
|
||||
else
|
||||
for(var/datum/data/record/E in data_core.medical)
|
||||
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||
M = E
|
||||
src.medicalActive1 = R
|
||||
src.medicalActive2 = M
|
||||
if(subscreen == 1)
|
||||
medicalActive1 = find_record("id", href_list["med_rec"], data_core.general)
|
||||
if(medicalActive1)
|
||||
medicalActive2 = find_record("id", href_list["med_rec"], data_core.medical)
|
||||
if(!medicalActive2)
|
||||
medicalActive1 = null
|
||||
temp = "Unable to locate requested security record. Record may have been deleted, or never have existed."
|
||||
|
||||
if("securityrecord")
|
||||
if(src.subscreen == 1)
|
||||
var/datum/data/record/record = locate(href_list["sec_rec"])
|
||||
if(record)
|
||||
var/datum/data/record/R = record
|
||||
var/datum/data/record/M = record
|
||||
if (!( data_core.general.Find(R) ))
|
||||
src.temp = "Unable to locate requested security record. Record may have been deleted, or never have existed."
|
||||
else
|
||||
for(var/datum/data/record/E in data_core.security)
|
||||
if ((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"]))
|
||||
M = E
|
||||
src.securityActive1 = R
|
||||
src.securityActive2 = M
|
||||
if(subscreen == 1)
|
||||
securityActive1 = find_record("id", href_list["sec_rec"], data_core.general)
|
||||
if(securityActive1)
|
||||
securityActive2 = find_record("id", href_list["sec_rec"], data_core.security)
|
||||
if(!securityActive2)
|
||||
securityActive1 = null
|
||||
temp = "Unable to locate requested security record. Record may have been deleted, or never have existed."
|
||||
if("securityhud")
|
||||
if(href_list["toggle"])
|
||||
src.secHUD = !src.secHUD
|
||||
@@ -410,70 +399,64 @@
|
||||
|
||||
// Crew Manifest
|
||||
/mob/living/silicon/pai/proc/softwareManifest()
|
||||
var/dat = ""
|
||||
dat += "<h2>Crew Manifest</h2><br><br>"
|
||||
var/list/L = list()
|
||||
if(!isnull(data_core.general))
|
||||
for (var/datum/data/record/t in sortRecord(data_core.general))
|
||||
var/R = t.fields["name"] + " - " + t.fields["rank"]
|
||||
L += R
|
||||
for(var/R in sortList(L))
|
||||
dat += "[R]<br>"
|
||||
dat += "</body></html>"
|
||||
return dat
|
||||
. += "<h2>Crew Manifest</h2><br><br>"
|
||||
if(data_core.general)
|
||||
for(var/datum/data/record/t in sortRecord(data_core.general))
|
||||
. += "[t.fields["name"]] - [t.fields["rank"]]"
|
||||
. += "</body></html>"
|
||||
return .
|
||||
|
||||
// Medical Records
|
||||
/mob/living/silicon/pai/proc/softwareMedicalRecord()
|
||||
var/dat = ""
|
||||
if(src.subscreen == 0)
|
||||
dat += "<h3>Medical Records</h3><HR>"
|
||||
if(!isnull(data_core.general))
|
||||
for(var/datum/data/record/R in sortRecord(data_core.general))
|
||||
dat += text("<A href='?src=\ref[];med_rec=\ref[];software=medicalrecord;sub=1'>[]: []<BR>", src, R, R.fields["id"], R.fields["name"])
|
||||
//dat += text("<HR><A href='?src=\ref[];screen=0;softFunction=medical records'>Back</A>", src)
|
||||
if(src.subscreen == 1)
|
||||
dat += "<CENTER><B>Medical Record</B></CENTER><BR>"
|
||||
if ((istype(src.medicalActive1, /datum/data/record) && data_core.general.Find(src.medicalActive1)))
|
||||
dat += text("Name: [] ID: []<BR>\nSex: []<BR>\nAge: []<BR>\nFingerprint: []<BR>\nPhysical Status: []<BR>\nMental Status: []<BR>",
|
||||
src.medicalActive1.fields["name"], src.medicalActive1.fields["id"], src.medicalActive1.fields["sex"], src.medicalActive1.fields["age"], src.medicalActive1.fields["fingerprint"], src.medicalActive1.fields["p_stat"], src.medicalActive1.fields["m_stat"])
|
||||
else
|
||||
dat += "<pre>Requested medical record not found.</pre><BR>"
|
||||
if ((istype(src.medicalActive2, /datum/data/record) && data_core.medical.Find(src.medicalActive2)))
|
||||
dat += text("<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: <A href='?src=\ref[];field=b_type'>[]</A><BR>\nDNA: <A href='?src=\ref[];field=b_dna'>[]</A><BR>\n<BR>\nMinor Disabilities: <A href='?src=\ref[];field=mi_dis'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=mi_dis_d'>[]</A><BR>\n<BR>\nMajor Disabilities: <A href='?src=\ref[];field=ma_dis'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=ma_dis_d'>[]</A><BR>\n<BR>\nAllergies: <A href='?src=\ref[];field=alg'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=alg_d'>[]</A><BR>\n<BR>\nCurrent Diseases: <A href='?src=\ref[];field=cdi'>[]</A> (per disease info placed in log/comment section)<BR>\nDetails: <A href='?src=\ref[];field=cdi_d'>[]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=\ref[];field=notes'>[]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", src, src.medicalActive2.fields["b_type"], src, src.medicalActive2.fields["b_dna"], src, src.medicalActive2.fields["mi_dis"], src, src.medicalActive2.fields["mi_dis_d"], src, src.medicalActive2.fields["ma_dis"], src, src.medicalActive2.fields["ma_dis_d"], src, src.medicalActive2.fields["alg"], src, src.medicalActive2.fields["alg_d"], src, src.medicalActive2.fields["cdi"], src, src.medicalActive2.fields["cdi_d"], src, src.medicalActive2.fields["notes"])
|
||||
else
|
||||
dat += "<pre>Requested medical record not found.</pre><BR>"
|
||||
dat += text("<BR>\n<A href='?src=\ref[];software=medicalrecord;sub=0'>Back</A><BR>", src)
|
||||
return dat
|
||||
switch(subscreen)
|
||||
if(0)
|
||||
. += "<h3>Medical Records</h3><HR>"
|
||||
if(data_core.general)
|
||||
for(var/datum/data/record/R in sortRecord(data_core.general))
|
||||
. += "<A href='?src=\ref[src];med_rec=[R.fields["id"]];software=medicalrecord;sub=1'>[R.fields["id"]]: [R.fields["name"]]<BR>"
|
||||
if(1)
|
||||
. += "<CENTER><B>Medical Record</B></CENTER><BR>"
|
||||
if(medicalActive1 in data_core.general)
|
||||
. += "Name: [medicalActive1.fields["name"]] ID: [medicalActive1.fields["id"]]<BR>\nSex: [medicalActive1.fields["sex"]]<BR>\nAge: [medicalActive1.fields["age"]]<BR>\nFingerprint: [medicalActive1.fields["fingerprint"]]<BR>\nPhysical Status: [medicalActive1.fields["p_stat"]]<BR>\nMental Status: [medicalActive1.fields["m_stat"]]<BR>"
|
||||
else
|
||||
. += "<pre>Requested medical record not found.</pre><BR>"
|
||||
if(medicalActive2 in data_core.medical)
|
||||
. += "<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: <A href='?src=\ref[src];field=blood_type'>[medicalActive2.fields["blood_type"]]</A><BR>\nDNA: <A href='?src=\ref[src];field=b_dna'>[medicalActive2.fields["b_dna"]]</A><BR>\n<BR>\nMinor Disabilities: <A href='?src=\ref[src];field=mi_dis'>[medicalActive2.fields["mi_dis"]]</A><BR>\nDetails: <A href='?src=\ref[src];field=mi_dis_d'>[medicalActive2.fields["mi_dis_d"]]</A><BR>\n<BR>\nMajor Disabilities: <A href='?src=\ref[src];field=ma_dis'>[medicalActive2.fields["ma_dis"]]</A><BR>\nDetails: <A href='?src=\ref[src];field=ma_dis_d'>[medicalActive2.fields["ma_dis_d"]]</A><BR>\n<BR>\nAllergies: <A href='?src=\ref[src];field=alg'>[medicalActive2.fields["alg"]]</A><BR>\nDetails: <A href='?src=\ref[src];field=alg_d'>[medicalActive2.fields["alg_d"]]</A><BR>\n<BR>\nCurrent Diseases: <A href='?src=\ref[src];field=cdi'>[medicalActive2.fields["cdi"]]</A> (per disease info placed in log/comment section)<BR>\nDetails: <A href='?src=\ref[src];field=cdi_d'>[medicalActive2.fields["cdi_d"]]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=\ref[src];field=notes'>[medicalActive2.fields["notes"]]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>"
|
||||
else
|
||||
. += "<pre>Requested medical record not found.</pre><BR>"
|
||||
. += "<BR>\n<A href='?src=\ref[src];software=medicalrecord;sub=0'>Back</A><BR>"
|
||||
return .
|
||||
|
||||
// Security Records
|
||||
/mob/living/silicon/pai/proc/softwareSecurityRecord()
|
||||
var/dat = ""
|
||||
if(src.subscreen == 0)
|
||||
dat += "<h3>Security Records</h3><HR>"
|
||||
if(!isnull(data_core.general))
|
||||
for(var/datum/data/record/R in sortRecord(data_core.general))
|
||||
dat += text("<A href='?src=\ref[];sec_rec=\ref[];software=securityrecord;sub=1'>[]: []<BR>", src, R, R.fields["id"], R.fields["name"])
|
||||
if(src.subscreen == 1)
|
||||
dat += "<h3>Security Record</h3>"
|
||||
if ((istype(src.securityActive1, /datum/data/record) && data_core.general.Find(src.securityActive1)))
|
||||
dat += text("Name: <A href='?src=\ref[];field=name'>[]</A> ID: <A href='?src=\ref[];field=id'>[]</A><BR>\nSex: <A href='?src=\ref[];field=sex'>[]</A><BR>\nAge: <A href='?src=\ref[];field=age'>[]</A><BR>\nRank: <A href='?src=\ref[];field=rank'>[]</A><BR>\nFingerprint: <A href='?src=\ref[];field=fingerprint'>[]</A><BR>\nPhysical Status: []<BR>\nMental Status: []<BR>", src, src.securityActive1.fields["name"], src, src.securityActive1.fields["id"], src, src.securityActive1.fields["sex"], src, src.securityActive1.fields["age"], src, src.securityActive1.fields["rank"], src, src.securityActive1.fields["fingerprint"], src.securityActive1.fields["p_stat"], src.securityActive1.fields["m_stat"])
|
||||
else
|
||||
dat += "<pre>Requested security record not found,</pre><BR>"
|
||||
if ((istype(src.securityActive2, /datum/data/record) && data_core.security.Find(src.securityActive2)))
|
||||
dat += text("<BR>\nSecurity Data<BR>\nCriminal Status: []<BR>\n<BR>\nMinor Crimes: <A href='?src=\ref[];field=mi_crim'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=mi_crim_d'>[]</A><BR>\n<BR>\nMajor Crimes: <A href='?src=\ref[];field=ma_crim'>[]</A><BR>\nDetails: <A href='?src=\ref[];field=ma_crim_d'>[]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=\ref[];field=notes'>[]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>", src.securityActive2.fields["criminal"], src, src.securityActive2.fields["mi_crim"], src, src.securityActive2.fields["mi_crim_d"], src, src.securityActive2.fields["ma_crim"], src, src.securityActive2.fields["ma_crim_d"], src, src.securityActive2.fields["notes"])
|
||||
else
|
||||
dat += "<pre>Requested security record not found,</pre><BR>"
|
||||
dat += text("<BR>\n<A href='?src=\ref[];software=securityrecord;sub=0'>Back</A><BR>", src)
|
||||
return dat
|
||||
. = ""
|
||||
switch(subscreen)
|
||||
if(0)
|
||||
. += "<h3>Security Records</h3><HR>"
|
||||
if(data_core.general)
|
||||
for(var/datum/data/record/R in sortRecord(data_core.general))
|
||||
. += "<A href='?src=\ref[src];sec_rec=[R.fields["id"]];software=securityrecord;sub=1'>[R.fields["id"]]: [R.fields["name"]]<BR>"
|
||||
if(1)
|
||||
. += "<h3>Security Record</h3>"
|
||||
if(securityActive1 in data_core.general)
|
||||
. += "Name: <A href='?src=\ref[src];field=name'>[securityActive1.fields["name"]]</A> ID: <A href='?src=\ref[src];field=id'>[securityActive1.fields["id"]]</A><BR>\nSex: <A href='?src=\ref[src];field=sex'>[securityActive1.fields["sex"]]</A><BR>\nAge: <A href='?src=\ref[src];field=age'>[securityActive1.fields["age"]]</A><BR>\nRank: <A href='?src=\ref[src];field=rank'>[securityActive1.fields["rank"]]</A><BR>\nFingerprint: <A href='?src=\ref[src];field=fingerprint'>[securityActive1.fields["fingerprint"]]</A><BR>\nPhysical Status: [securityActive1.fields["p_stat"]]<BR>\nMental Status: [securityActive1.fields["m_stat"]]<BR>"
|
||||
else
|
||||
. += "<pre>Requested security record not found,</pre><BR>"
|
||||
if(securityActive2 in data_core.security)
|
||||
. += "<BR>\nSecurity Data<BR>\nCriminal Status: [securityActive2.fields["criminal"]]<BR>\n<BR>\nMinor Crimes: <A href='?src=\ref[src];field=mi_crim'>[securityActive2.fields["mi_crim"]]</A><BR>\nDetails: <A href='?src=\ref[src];field=mi_crim_d'>[securityActive2.fields["mi_crim_d"]]</A><BR>\n<BR>\nMajor Crimes: <A href='?src=\ref[src];field=ma_crim'>[securityActive2.fields["ma_crim"]]</A><BR>\nDetails: <A href='?src=\ref[src];field=ma_crim_d'>[securityActive2.fields["ma_crim_d"]]</A><BR>\n<BR>\nImportant Notes:<BR>\n\t<A href='?src=\ref[src];field=notes'>[securityActive2.fields["notes"]]</A><BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>"
|
||||
else
|
||||
. += "<pre>Requested security record not found,</pre><BR>"
|
||||
. += text("<BR>\n<A href='?src=\ref[];software=securityrecord;sub=0'>Back</A><BR>", src)
|
||||
return .
|
||||
|
||||
// Universal Translator
|
||||
/mob/living/silicon/pai/proc/softwareTranslator()
|
||||
var/dat = {"<h3>Universal Translator</h3><br>
|
||||
. = {"<h3>Universal Translator</h3><br>
|
||||
When enabled, this device will automatically convert all spoken and written language into a format that any known recipient can understand.<br><br>
|
||||
The device is currently [ (src.universal_speak) ? "<font color=#55FF55>en" : "<font color=#FF5555>dis" ]abled.</font><br>
|
||||
<a href='byond://?src=\ref[src];software=translator;sub=0;toggle=1'>Toggle Device</a><br>
|
||||
"}
|
||||
return dat
|
||||
return .
|
||||
|
||||
// Security HUD
|
||||
/mob/living/silicon/pai/proc/facialRecognition()
|
||||
|
||||
@@ -346,7 +346,7 @@
|
||||
|
||||
new_character.name = real_name
|
||||
|
||||
ready_dna(new_character, client.prefs.b_type)
|
||||
ready_dna(new_character, client.prefs.blood_type)
|
||||
|
||||
new_character.key = key //Manually transfer the key to log them in
|
||||
|
||||
|
||||
@@ -7,10 +7,10 @@ datum/preferences
|
||||
gender = pick(MALE,FEMALE)
|
||||
underwear = random_underwear(gender)
|
||||
skin_tone = random_skin_tone()
|
||||
h_style = random_hair_style(gender)
|
||||
f_style = random_facial_hair_style(gender)
|
||||
h_color = random_short_color()
|
||||
f_color = h_color
|
||||
hair_style = random_hair_style(gender)
|
||||
facial_hair_style = random_facial_hair_style(gender)
|
||||
hair_color = random_short_color()
|
||||
facial_hair_color = hair_color
|
||||
eye_color = random_eye_color()
|
||||
backbag = 2
|
||||
age = rand(AGE_MIN,AGE_MAX)
|
||||
@@ -25,24 +25,25 @@ datum/preferences
|
||||
|
||||
preview_icon = new /icon('icons/mob/human.dmi', "[skin_tone]_[g]_s")
|
||||
|
||||
var/datum/sprite_accessory/S
|
||||
if(underwear)
|
||||
var/datum/sprite_accessory/underwear/U = underwear_all[underwear]
|
||||
if(U)
|
||||
preview_icon.Blend(new /icon(U.icon, "[U.icon_state]_s"), ICON_OVERLAY)
|
||||
S = underwear_all[underwear]
|
||||
if(S)
|
||||
preview_icon.Blend(new /icon(S.icon, "[S.icon_state]_s"), ICON_OVERLAY)
|
||||
|
||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s")
|
||||
eyes_s.Blend("#[eye_color]", ICON_ADD)
|
||||
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
if(hair_style)
|
||||
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
hair_s.Blend("#[h_color]", ICON_ADD)
|
||||
S = hair_styles_list[hair_style]
|
||||
if(S)
|
||||
var/icon/hair_s = new/icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s")
|
||||
hair_s.Blend("#[hair_color]", ICON_ADD)
|
||||
eyes_s.Blend(hair_s, ICON_OVERLAY)
|
||||
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
|
||||
if(facial_hair_style)
|
||||
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
||||
facial_s.Blend("#[f_color]", ICON_ADD)
|
||||
S = facial_hair_styles_list[facial_hair_style]
|
||||
if(S)
|
||||
var/icon/facial_s = new/icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s")
|
||||
facial_s.Blend("#[facial_hair_color]", ICON_ADD)
|
||||
eyes_s.Blend(facial_s, ICON_OVERLAY)
|
||||
|
||||
var/icon/clothes_s = null
|
||||
|
||||
@@ -91,11 +91,8 @@
|
||||
/obj/structure/filingcabinet/security/attack_hand(mob/user)
|
||||
if(virgin)
|
||||
for(var/datum/data/record/G in data_core.general)
|
||||
var/datum/data/record/S
|
||||
for(var/datum/data/record/R in data_core.security)
|
||||
if((R.fields["name"] == G.fields["name"] || R.fields["id"] == G.fields["id"]))
|
||||
S = R
|
||||
break
|
||||
var/datum/data/record/S = find_record("name", G.fields["name"], data_core.security)
|
||||
if(!S) continue
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src)
|
||||
P.info = "<CENTER><B>Security Record</B></CENTER><BR>"
|
||||
P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]<BR>\nSex: [G.fields["sex"]]<BR>\nAge: [G.fields["age"]]<BR>\nFingerprint: [G.fields["fingerprint"]]<BR>\nPhysical Status: [G.fields["p_stat"]]<BR>\nMental Status: [G.fields["m_stat"]]<BR>"
|
||||
@@ -120,15 +117,12 @@
|
||||
/obj/structure/filingcabinet/medical/attack_hand(mob/user)
|
||||
if(virgin)
|
||||
for(var/datum/data/record/G in data_core.general)
|
||||
var/datum/data/record/M
|
||||
for(var/datum/data/record/R in data_core.medical)
|
||||
if((R.fields["name"] == G.fields["name"] || R.fields["id"] == G.fields["id"]))
|
||||
M = R
|
||||
break
|
||||
var/datum/data/record/M = find_record("name", G.fields["name"], data_core.medical)
|
||||
if(!M) continue
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src)
|
||||
P.info = "<CENTER><B>Medical Record</B></CENTER><BR>"
|
||||
P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]<BR>\nSex: [G.fields["sex"]]<BR>\nAge: [G.fields["age"]]<BR>\nFingerprint: [G.fields["fingerprint"]]<BR>\nPhysical Status: [G.fields["p_stat"]]<BR>\nMental Status: [G.fields["m_stat"]]<BR>"
|
||||
P.info += "<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: [M.fields["b_type"]]<BR>\nDNA: [M.fields["b_dna"]]<BR>\n<BR>\nMinor Disabilities: [M.fields["mi_dis"]]<BR>\nDetails: [M.fields["mi_dis_d"]]<BR>\n<BR>\nMajor Disabilities: [M.fields["ma_dis"]]<BR>\nDetails: [M.fields["ma_dis_d"]]<BR>\n<BR>\nAllergies: [M.fields["alg"]]<BR>\nDetails: [M.fields["alg_d"]]<BR>\n<BR>\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)<BR>\nDetails: [M.fields["cdi_d"]]<BR>\n<BR>\nImportant Notes:<BR>\n\t[M.fields["notes"]]<BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>"
|
||||
P.info += "<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: [M.fields["blood_type"]]<BR>\nDNA: [M.fields["b_dna"]]<BR>\n<BR>\nMinor Disabilities: [M.fields["mi_dis"]]<BR>\nDetails: [M.fields["mi_dis_d"]]<BR>\n<BR>\nMajor Disabilities: [M.fields["ma_dis"]]<BR>\nDetails: [M.fields["ma_dis_d"]]<BR>\n<BR>\nAllergies: [M.fields["alg"]]<BR>\nDetails: [M.fields["alg_d"]]<BR>\n<BR>\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)<BR>\nDetails: [M.fields["cdi_d"]]<BR>\n<BR>\nImportant Notes:<BR>\n\t[M.fields["notes"]]<BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>"
|
||||
var/counter = 1
|
||||
while(M.fields["com_[counter]"])
|
||||
P.info += "[M.fields["com_[counter]"]]<BR>"
|
||||
|
||||
@@ -358,39 +358,6 @@ datum
|
||||
..()
|
||||
return
|
||||
|
||||
srejuvenate
|
||||
name = "Soporific Rejuvenant"
|
||||
id = "stoxin2"
|
||||
description = "Put people to sleep, and heals them."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
if(!data) data = 1
|
||||
data++
|
||||
if(M.losebreath >= 10)
|
||||
M.losebreath = max(10, M.losebreath-10)
|
||||
holder.remove_reagent(src.id, 0.2)
|
||||
switch(data)
|
||||
if(1 to 15)
|
||||
M.eye_blurry = max(M.eye_blurry, 10)
|
||||
if(15 to 25)
|
||||
M.drowsyness = max(M.drowsyness, 20)
|
||||
if(25 to INFINITY)
|
||||
M.sleeping += 1
|
||||
M.adjustOxyLoss(-M.getOxyLoss())
|
||||
M.SetWeakened(0)
|
||||
M.SetStunned(0)
|
||||
M.SetParalysis(0)
|
||||
M.dizziness = 0
|
||||
M.drowsyness = 0
|
||||
M.stuttering = 0
|
||||
M.confused = 0
|
||||
M.jitteriness = 0
|
||||
..()
|
||||
return
|
||||
|
||||
inaprovaline
|
||||
name = "Inaprovaline"
|
||||
id = "inaprovaline"
|
||||
@@ -1659,8 +1626,8 @@ datum
|
||||
H.update_damage_overlays(0)
|
||||
if(prob(meltprob)) //Applies disfigurement
|
||||
H.emote("scream")
|
||||
H.f_style = "Shaved"
|
||||
H.h_style = "Bald"
|
||||
H.facial_hair_style = "Shaved"
|
||||
H.hair_style = "Bald"
|
||||
H.update_hair(0)
|
||||
H.status_flags |= DISFIGURED
|
||||
else
|
||||
@@ -2619,8 +2586,11 @@ datum
|
||||
if(!data) data = 1
|
||||
data++
|
||||
switch(data)
|
||||
if(51 to INFINITY)
|
||||
if(51 to 200)
|
||||
M.sleeping += 1
|
||||
if(201 to INFINITY)
|
||||
M.sleeping += 1
|
||||
M.adjustToxLoss(2)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -2642,6 +2612,8 @@ datum
|
||||
M.confused = max(M.confused+3,0)
|
||||
else if(data >=55)
|
||||
M.druggy = max(M.druggy, 55)
|
||||
else if(data >=200)
|
||||
M.adjustToxLoss(2)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -2665,6 +2637,8 @@ datum
|
||||
M.confused = max(M.confused+3,0)
|
||||
else if(data >=55)
|
||||
M.druggy = max(M.druggy, 55)
|
||||
else if(data >=200)
|
||||
M.adjustToxLoss(2)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -2691,23 +2665,38 @@ datum
|
||||
M.make_dizzy(20)
|
||||
M.druggy = max(M.druggy, 45)
|
||||
if(prob(20)) M.emote(pick("twitch","giggle"))
|
||||
if (10 to INFINITY)
|
||||
if (10 to 200)
|
||||
if (!M.stuttering) M.stuttering = 1
|
||||
M.make_jittery(40)
|
||||
M.make_dizzy(40)
|
||||
M.druggy = max(M.druggy, 60)
|
||||
if(prob(30)) M.emote(pick("twitch","giggle"))
|
||||
if(200 to INFINITY)
|
||||
if (!M.stuttering) M.stuttering = 1
|
||||
M.make_jittery(60)
|
||||
M.make_dizzy(60)
|
||||
M.druggy = max(M.druggy, 75)
|
||||
if(prob(40)) M.emote(pick("twitch","giggle"))
|
||||
if(prob(30)) M.adjustToxLoss(2)
|
||||
holder.remove_reagent(src.id, 0.2)
|
||||
..()
|
||||
return
|
||||
|
||||
/*boozepwr chart
|
||||
55 = non-toxic alchohol
|
||||
45 = medium-toxic
|
||||
35 = the hard stuff
|
||||
25 = potent mixes
|
||||
<15 = deadly toxic
|
||||
*/
|
||||
|
||||
ethanol
|
||||
name = "Ethanol"
|
||||
id = "ethanol"
|
||||
description = "A well-known alcohol with a variety of applications."
|
||||
reagent_state = LIQUID
|
||||
color = "#404030" // rgb: 64, 64, 48
|
||||
var/boozepwr = 45 //lower numbers mean the booze will have an effect faster.
|
||||
var/boozepwr = 10 //lower numbers mean the booze will have an effect faster.
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!data) data = 1
|
||||
@@ -2720,6 +2709,8 @@ datum
|
||||
if(data >= boozepwr*2.5 && prob(33))
|
||||
if (!M.confused) M.confused = 1
|
||||
M.confused += 3
|
||||
if(data >= boozepwr*10 && prob(33))
|
||||
M.adjustToxLoss(2)
|
||||
..()
|
||||
return
|
||||
reaction_obj(var/obj/O, var/volume)
|
||||
@@ -2753,6 +2744,7 @@ datum
|
||||
id = "kahlua"
|
||||
description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 45
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.dizziness = max(0,M.dizziness-5)
|
||||
@@ -2767,12 +2759,14 @@ datum
|
||||
id = "whiskey"
|
||||
description = "A superb and well-aged single-malt whiskey. Damn."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/thirteenloko
|
||||
name = "Thirteen Loko"
|
||||
id = "thirteenloko"
|
||||
description = "A potent mixture of caffeine and alcohol."
|
||||
color = "#102000" // rgb: 16, 32, 0
|
||||
boozepwr = 35
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.drowsyness = max(0,M.drowsyness-7)
|
||||
@@ -2789,28 +2783,19 @@ datum
|
||||
id = "vodka"
|
||||
description = "Number one drink AND fueling choice for Russians worldwide."
|
||||
color = "#0064C8" // rgb: 0, 100, 200
|
||||
boozepwr = 35
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.radiation = max(M.radiation-2,0)
|
||||
..()
|
||||
return
|
||||
|
||||
ethanol/holywater
|
||||
name = "Holy Water"
|
||||
id = "holywater"
|
||||
description = "Water blessed by some deity."
|
||||
color = "#E0E8EF" // rgb: 224, 232, 239
|
||||
boozepwr = 15
|
||||
|
||||
reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(!istype(T)) return
|
||||
T.Bless()
|
||||
|
||||
ethanol/bilk
|
||||
name = "Bilk"
|
||||
id = "bilk"
|
||||
description = "This appears to be beer mixed with milk. Disgusting."
|
||||
color = "#895C4C" // rgb: 137, 92, 76
|
||||
boozepwr = 55
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(M.getBruteLoss() && prob(10)) M.heal_organ_damage(1,0)
|
||||
@@ -2823,6 +2808,7 @@ datum
|
||||
id = "threemileisland"
|
||||
description = "Made for a woman, strong enough for a man."
|
||||
color = "#666340" // rgb: 102, 99, 64
|
||||
boozepwr = 15
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.druggy = max(M.druggy, 50)
|
||||
@@ -2834,36 +2820,42 @@ datum
|
||||
id = "gin"
|
||||
description = "It's gin. In space. I say, good sir."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
|
||||
ethanol/rum
|
||||
name = "Rum"
|
||||
id = "rum"
|
||||
description = "Yohoho and all that."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/tequilla
|
||||
name = "Tequila"
|
||||
id = "tequilla"
|
||||
description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?"
|
||||
color = "#FFFF91" // rgb: 255, 255, 145
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/vermouth
|
||||
name = "Vermouth"
|
||||
id = "vermouth"
|
||||
description = "You suddenly feel a craving for a martini..."
|
||||
color = "#91FF91" // rgb: 145, 255, 145
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/wine
|
||||
name = "Wine"
|
||||
id = "wine"
|
||||
description = "An premium alchoholic beverage made from distilled grape juice."
|
||||
color = "#7E4043" // rgb: 126, 64, 67
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/cognac
|
||||
name = "Cognac"
|
||||
id = "cognac"
|
||||
description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
|
||||
color = "#AB3C05" // rgb: 171, 60, 5
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/hooch
|
||||
name = "Hooch"
|
||||
@@ -2877,91 +2869,98 @@ datum
|
||||
id = "ale"
|
||||
description = "A dark alchoholic beverage made by malted barley and yeast."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
|
||||
ethanol/goldschlager
|
||||
name = "Goldschlager"
|
||||
id = "goldschlager"
|
||||
description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break."
|
||||
color = "#FFFF91" // rgb: 255, 255, 145
|
||||
boozepwr = 25
|
||||
|
||||
ethanol/patron
|
||||
name = "Patron"
|
||||
id = "patron"
|
||||
description = "Tequila with silver in it, a favorite of alcoholic women in the club scene."
|
||||
color = "#585840" // rgb: 88, 88, 64
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/gintonic
|
||||
name = "Gin and Tonic"
|
||||
id = "gintonic"
|
||||
description = "An all time classic, mild cocktail."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 65
|
||||
boozepwr = 55
|
||||
|
||||
ethanol/cuba_libre
|
||||
name = "Cuba Libre"
|
||||
id = "cubalibre"
|
||||
description = "Rum, mixed with cola. Viva la revolution."
|
||||
color = "#3E1B00" // rgb: 62, 27, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/whiskey_cola
|
||||
name = "Whiskey Cola"
|
||||
id = "whiskeycola"
|
||||
description = "Whiskey, mixed with cola. Surprisingly refreshing."
|
||||
color = "#3E1B00" // rgb: 62, 27, 0
|
||||
boozepwr = 65
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/martini
|
||||
name = "Classic Martini"
|
||||
id = "martini"
|
||||
description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/vodkamartini
|
||||
name = "Vodka Martini"
|
||||
id = "vodkamartini"
|
||||
description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 25
|
||||
|
||||
ethanol/white_russian
|
||||
name = "White Russian"
|
||||
id = "whiterussian"
|
||||
description = "That's just, like, your opinion, man..."
|
||||
color = "#A68340" // rgb: 166, 131, 64
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/screwdrivercocktail
|
||||
name = "Screwdriver"
|
||||
id = "screwdrivercocktail"
|
||||
description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious."
|
||||
color = "#A68310" // rgb: 166, 131, 16
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/booger
|
||||
name = "Booger"
|
||||
id = "booger"
|
||||
description = "Ewww..."
|
||||
color = "#8CFF8C" // rgb: 140, 255, 140
|
||||
boozepwr = 55
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/bloody_mary
|
||||
name = "Bloody Mary"
|
||||
id = "bloodymary"
|
||||
description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/brave_bull
|
||||
name = "Brave Bull"
|
||||
id = "bravebull"
|
||||
description = "It's just as effective as Dutch-Courage!."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/tequilla_sunrise
|
||||
name = "Tequila Sunrise"
|
||||
id = "tequillasunrise"
|
||||
description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~"
|
||||
color = "#FFE48C" // rgb: 255, 228, 140
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/toxins_special
|
||||
name = "Toxins Special"
|
||||
@@ -2969,6 +2968,7 @@ datum
|
||||
description = "This thing is ON FIRE!. CALL THE DAMN SHUTTLE!"
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 15
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if (M.bodytemperature < 330)
|
||||
@@ -2982,6 +2982,7 @@ datum
|
||||
description = "Deny drinking this and prepare for THE LAW."
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 25
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.Stun(2)
|
||||
@@ -2993,20 +2994,21 @@ datum
|
||||
id = "irishcream"
|
||||
description = "Whiskey-imbued cream, what else would you expect from the Irish."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/manly_dorf
|
||||
name = "The Manly Dorf"
|
||||
id = "manlydorf"
|
||||
description = "Beer and Ale, brought together in a delicious mix. Intended for true men only."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 10
|
||||
boozepwr = 45 //was 10, but really its only beer and ale, both weak alchoholic beverages
|
||||
|
||||
ethanol/longislandicedtea
|
||||
name = "Long Island Iced Tea"
|
||||
id = "longislandicedtea"
|
||||
description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
boozepwr = 25
|
||||
|
||||
ethanol/moonshine
|
||||
name = "Moonshine"
|
||||
@@ -3027,34 +3029,35 @@ datum
|
||||
id = "irishcoffee"
|
||||
description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/margarita
|
||||
name = "Margarita"
|
||||
id = "margarita"
|
||||
description = "On the rocks with salt on the rim. Arriba~!"
|
||||
color = "#8CFF8C" // rgb: 140, 255, 140
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/black_russian
|
||||
name = "Black Russian"
|
||||
id = "blackrussian"
|
||||
description = "For the lactose-intolerant. Still as classy as a White Russian."
|
||||
color = "#360000" // rgb: 54, 0, 0
|
||||
boozepwr = 55
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/manhattan
|
||||
name = "Manhattan"
|
||||
id = "manhattan"
|
||||
description = "The Detective's undercover drink of choice. He never could stomach gin..."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/manhattan_proj
|
||||
name = "Manhattan Project"
|
||||
id = "manhattan_proj"
|
||||
description = "A scientist's drink of choice, for pondering ways to blow up the station."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 15
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.druggy = max(M.druggy, 30)
|
||||
@@ -3066,12 +3069,14 @@ datum
|
||||
id = "whiskeysoda"
|
||||
description = "For the more refined griffon."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/antifreeze
|
||||
name = "Anti-freeze"
|
||||
id = "antifreeze"
|
||||
description = "Ultimate refreshment."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 25
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if (M.bodytemperature < 330)
|
||||
@@ -3084,48 +3089,56 @@ datum
|
||||
id = "barefoot"
|
||||
description = "Barefoot and pregnant"
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/snowwhite
|
||||
name = "Snow White"
|
||||
id = "snowwhite"
|
||||
description = "A cold refreshment"
|
||||
color = "#FFFFFF" // rgb: 255, 255, 255
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/demonsblood
|
||||
name = "Demons Blood"
|
||||
id = "demonsblood"
|
||||
description = "AHHHH!!!!"
|
||||
color = "#820000" // rgb: 130, 0, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/vodkatonic
|
||||
name = "Vodka and Tonic"
|
||||
id = "vodkatonic"
|
||||
description = "For when a gin and tonic isn't russian enough."
|
||||
color = "#0064C8" // rgb: 0, 100, 200
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/ginfizz
|
||||
name = "Gin Fizz"
|
||||
id = "ginfizz"
|
||||
description = "Refreshingly lemony, deliciously dry."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/bahama_mama
|
||||
name = "Bahama mama"
|
||||
id = "bahama_mama"
|
||||
description = "Tropical cocktail."
|
||||
color = "#FF7F3B" // rgb: 255, 127, 59
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/singulo
|
||||
name = "Singulo"
|
||||
id = "singulo"
|
||||
description = "A blue-space beverage!"
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
boozepwr = 15
|
||||
|
||||
ethanol/sbiten
|
||||
name = "Sbiten"
|
||||
id = "sbiten"
|
||||
description = "A spicy Vodka! Might be a little hot for the little guys!"
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if (M.bodytemperature < 360)
|
||||
@@ -3138,12 +3151,14 @@ datum
|
||||
id = "devilskiss"
|
||||
description = "Creepy time!"
|
||||
color = "#A68310" // rgb: 166, 131, 16
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/red_mead
|
||||
name = "Red Mead"
|
||||
id = "red_mead"
|
||||
description = "The true Viking drink! Even though it has a strange red color."
|
||||
color = "#C73C00" // rgb: 199, 60, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/mead
|
||||
name = "Mead"
|
||||
@@ -3151,6 +3166,7 @@ datum
|
||||
description = "A Vikings drink, though a cheap one."
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 45
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.nutrition += 1
|
||||
@@ -3162,6 +3178,7 @@ datum
|
||||
id = "iced_beer"
|
||||
description = "A beer which is so cold the air around it freezes."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 55
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(M.bodytemperature > 270)
|
||||
@@ -3181,18 +3198,21 @@ datum
|
||||
id = "aloe"
|
||||
description = "So very, very, very good."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/andalusia
|
||||
name = "Andalusia"
|
||||
id = "andalusia"
|
||||
description = "A nice, strange named drink."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/alliescocktail
|
||||
name = "Allies Cocktail"
|
||||
id = "alliescocktail"
|
||||
description = "A drink made from your allies, not as sweet as when made from your enemies."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/acid_spit
|
||||
name = "Acid Spit"
|
||||
@@ -3200,6 +3220,7 @@ datum
|
||||
description = "A drink for the daring, can be deadly if incorrectly prepared!"
|
||||
reagent_state = LIQUID
|
||||
color = "#365000" // rgb: 54, 80, 0
|
||||
boozepwr = 45
|
||||
|
||||
ethanol/amasec
|
||||
name = "Amasec"
|
||||
@@ -3207,30 +3228,35 @@ datum
|
||||
description = "Official drink of the Nanotrasen Gun-Club!"
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/changelingsting
|
||||
name = "Changeling Sting"
|
||||
id = "changelingsting"
|
||||
description = "You take a tiny sip and feel a burning sensation..."
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
boozepwr = 15
|
||||
|
||||
ethanol/irishcarbomb
|
||||
name = "Irish Car Bomb"
|
||||
id = "irishcarbomb"
|
||||
description = "Mmm, tastes like chocolate cake..."
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
boozepwr = 25
|
||||
|
||||
ethanol/syndicatebomb
|
||||
name = "Syndicate Bomb"
|
||||
id = "syndicatebomb"
|
||||
description = "Tastes like terrorism!"
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
boozepwr = 15
|
||||
|
||||
ethanol/erikasurprise
|
||||
name = "Erika Surprise"
|
||||
id = "erikasurprise"
|
||||
description = "The surprise is, it's green!"
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
boozepwr = 35
|
||||
|
||||
ethanol/driestmartini
|
||||
name = "Driest Martini"
|
||||
@@ -3246,6 +3272,7 @@ datum
|
||||
description = "A drink from Clown Heaven."
|
||||
nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
color = "#FFFF91" // rgb: 255, 255, 140
|
||||
boozepwr = 25
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.nutrition += nutriment_factor
|
||||
@@ -3261,6 +3288,7 @@ datum
|
||||
description = "A drink from Mime Heaven."
|
||||
nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 15
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.nutrition += nutriment_factor
|
||||
|
||||
@@ -2142,3 +2142,9 @@ datum
|
||||
required_reagents = list("nothing" = 1, "gin" = 1)
|
||||
result_amount = 2
|
||||
|
||||
thirteenloko
|
||||
name = "Thirteen Loko"
|
||||
id = "thirteenloko"
|
||||
result = "thirteenloko"
|
||||
required_reagents = list("vodka" = 1, "coffee" = 1, "orangejuice" = 1)
|
||||
result_amount = 3
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
B.data["resistances"] = T.resistances.Copy()
|
||||
if(istype(target, /mob/living/carbon/human))//I wish there was some hasproperty operation...
|
||||
var/mob/living/carbon/human/HT = target
|
||||
B.data["blood_type"] = copytext(HT.dna.b_type,1,0)
|
||||
B.data["blood_type"] = copytext(HT.dna.blood_type,1,0)
|
||||
var/list/temp_chem = list()
|
||||
for(var/datum/reagent/R in target.reagents.reagent_list)
|
||||
temp_chem += R.name
|
||||
|
||||
@@ -60,6 +60,15 @@
|
||||
New(name, token/t)
|
||||
message="Function '[name]' defined twice."
|
||||
|
||||
ParameterFunction
|
||||
message = "You cannot use a function inside a parameter."
|
||||
|
||||
New(token/t)
|
||||
var/line = "?"
|
||||
if(t)
|
||||
line = t.line
|
||||
message = "[line]: [message]"
|
||||
|
||||
/*
|
||||
Class: runtimeError
|
||||
An error thrown by the interpreter in running the script.
|
||||
|
||||
@@ -69,7 +69,9 @@
|
||||
interpreter.SetVar("E" , 2.718281828) // value of e
|
||||
interpreter.SetVar("SQURT2" , 1.414213562) // value of the square root of 2
|
||||
interpreter.SetVar("FALSE" , 0) // boolean shortcut to 0
|
||||
interpreter.SetVar("false" , 0) // boolean shortcut to 0
|
||||
interpreter.SetVar("TRUE" , 1) // boolean shortcut to 1
|
||||
interpreter.SetVar("true" , 1) // boolean shortcut to 1
|
||||
|
||||
interpreter.SetVar("NORTH" , NORTH) // NORTH (1)
|
||||
interpreter.SetVar("SOUTH" , SOUTH) // SOUTH (2)
|
||||
|
||||
@@ -127,6 +127,7 @@
|
||||
if(container)
|
||||
if(istype(container, /list) || istext(container))
|
||||
return length(container)
|
||||
return 0
|
||||
|
||||
// BY DONKIE~
|
||||
// String stuff
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
ASSERT(program)
|
||||
src.program = program
|
||||
CreateGlobalScope()
|
||||
alertadmins = 0 // reset admin alerts
|
||||
|
||||
/*
|
||||
Proc: Run
|
||||
@@ -29,7 +30,6 @@
|
||||
Run()
|
||||
cur_recursion = 0 // reset recursion
|
||||
cur_statements = 0 // reset CPU tracking
|
||||
alertadmins = 0
|
||||
|
||||
ASSERT(src.program)
|
||||
RunBlock(src.program)
|
||||
|
||||
@@ -33,11 +33,11 @@
|
||||
status=0
|
||||
returnVal
|
||||
|
||||
max_statements=1000 // maximum amount of statements that can be called in one execution. this is to prevent massive crashes and exploitation
|
||||
max_statements=900 // maximum amount of statements that can be called in one execution. this is to prevent massive crashes and exploitation
|
||||
cur_statements=0 // current amount of statements called
|
||||
alertadmins=0 // set to 1 if the admins shouldn't be notified of anymore issues
|
||||
max_iterations=100 // max number of uninterrupted loops possible
|
||||
max_recursion=50 // max recursions without returning anything (or completing the code block)
|
||||
max_recursion=10 // max recursions without returning anything (or completing the code block)
|
||||
cur_recursion=0 // current amount of recursion
|
||||
/*
|
||||
Var: persist
|
||||
@@ -84,6 +84,19 @@
|
||||
globalScope = S
|
||||
return S
|
||||
|
||||
/*
|
||||
Proc: AlertAdmins
|
||||
Alerts the admins of a script that is bad.
|
||||
*/
|
||||
AlertAdmins()
|
||||
if(container && !alertadmins)
|
||||
if(istype(container, /datum/TCS_Compiler))
|
||||
var/datum/TCS_Compiler/Compiler = container
|
||||
var/obj/machinery/telecomms/server/Holder = Compiler.Holder
|
||||
var/message = "Potential crash-inducing NTSL script detected at telecommunications server [Compiler.Holder] ([Holder.x], [Holder.y], [Holder.z])."
|
||||
|
||||
alertadmins = 1
|
||||
message_admins(message, 1)
|
||||
/*
|
||||
Proc: RunBlock
|
||||
Runs each statement in a block of code.
|
||||
@@ -108,15 +121,7 @@
|
||||
cur_statements++
|
||||
if(cur_statements >= max_statements)
|
||||
RaiseError(new/runtimeError/MaxCPU())
|
||||
|
||||
if(container && !alertadmins)
|
||||
if(istype(container, /datum/TCS_Compiler))
|
||||
var/datum/TCS_Compiler/Compiler = container
|
||||
var/obj/machinery/telecomms/server/Holder = Compiler.Holder
|
||||
var/message = "Potential crash-inducing NTSL script detected at telecommunications server [Compiler.Holder] ([Holder.x], [Holder.y], [Holder.z])."
|
||||
|
||||
alertadmins = 1
|
||||
message_admins(message, 1)
|
||||
AlertAdmins()
|
||||
break
|
||||
|
||||
if(istype(S, /node/statement/VariableAssignment))
|
||||
@@ -179,6 +184,7 @@
|
||||
|
||||
// If recursion gets too high (max 50 nested functions) throw an error
|
||||
if(cur_recursion >= max_recursion)
|
||||
AlertAdmins()
|
||||
RaiseError(new/runtimeError/RecursionLimitReached())
|
||||
return 0
|
||||
|
||||
@@ -331,3 +337,4 @@
|
||||
//TODO: check for invalid name
|
||||
S.variables["[name]"] = value
|
||||
|
||||
|
||||
|
||||
@@ -180,12 +180,18 @@
|
||||
- <ParseParenExpression()>
|
||||
- <ParseParamExpression()>
|
||||
*/
|
||||
ParseExpression(list/end=list(/token/end), list/ErrChars=list("{", "}"))
|
||||
ParseExpression(list/end=list(/token/end), list/ErrChars=list("{", "}"), check_functions = 0)
|
||||
var/stack
|
||||
opr=new
|
||||
val=new
|
||||
src.expecting=VALUE
|
||||
var/loop = 0
|
||||
for()
|
||||
loop++
|
||||
if(loop > 800)
|
||||
errors+=new/scriptError("Too many nested tokens.")
|
||||
return
|
||||
|
||||
if(EndOfExpression(end))
|
||||
break
|
||||
if(istype(curToken, /token/symbol) && ErrChars.Find(curToken.value))
|
||||
@@ -206,6 +212,7 @@
|
||||
NextToken()
|
||||
continue
|
||||
val.Push(ParseParenExpression())
|
||||
|
||||
else if(istype(curToken, /token/symbol)) //Operator found.
|
||||
var/node/expression/operator/curOperator //Figure out whether it is unary or binary and get a new instance.
|
||||
if(src.expecting==OPERATOR)
|
||||
@@ -226,16 +233,24 @@
|
||||
continue
|
||||
opr.Push(curOperator)
|
||||
src.expecting=VALUE
|
||||
|
||||
else if(ntok && ntok.value=="(" && istype(ntok, /token/symbol)\
|
||||
&& istype(curToken, /token/word)) //Parse function call
|
||||
var/token/preToken=curToken
|
||||
var/old_expect=src.expecting
|
||||
var/fex=ParseFunctionExpression()
|
||||
if(old_expect!=VALUE)
|
||||
errors+=new/scriptError/ExpectedToken("operator", preToken)
|
||||
NextToken()
|
||||
continue
|
||||
val.Push(fex)
|
||||
|
||||
if(!check_functions)
|
||||
|
||||
var/token/preToken=curToken
|
||||
var/old_expect=src.expecting
|
||||
var/fex=ParseFunctionExpression()
|
||||
if(old_expect!=VALUE)
|
||||
errors+=new/scriptError/ExpectedToken("operator", preToken)
|
||||
NextToken()
|
||||
continue
|
||||
val.Push(fex)
|
||||
else
|
||||
errors+=new/scriptError/ParameterFunction(curToken)
|
||||
break
|
||||
|
||||
else if(istype(curToken, /token/keyword)) //inline keywords
|
||||
var/n_Keyword/kw=options.keywords[curToken.value]
|
||||
kw=new kw(inline=1)
|
||||
@@ -244,6 +259,7 @@
|
||||
return
|
||||
else
|
||||
errors+=new/scriptError/BadToken(curToken)
|
||||
|
||||
else if(istype(curToken, /token/end)) //semicolon found where it wasn't expected
|
||||
errors+=new/scriptError/BadToken(curToken)
|
||||
NextToken()
|
||||
@@ -255,6 +271,7 @@
|
||||
continue
|
||||
val.Push(GetExpression(curToken))
|
||||
src.expecting=OPERATOR
|
||||
|
||||
NextToken()
|
||||
|
||||
while(opr.Top()) Reduce(opr, val) //Reduce the value stack completely
|
||||
@@ -280,13 +297,16 @@
|
||||
|
||||
for()
|
||||
loops++
|
||||
if(loops>=1000)
|
||||
if(loops>=800)
|
||||
errors += new/scriptError("Too many nested expressions.")
|
||||
break
|
||||
//CRASH("Something TERRIBLE has gone wrong in ParseFunctionExpression ;__;")
|
||||
|
||||
if(istype(curToken, /token/symbol) && curToken.value==")")
|
||||
return exp
|
||||
exp.parameters+=ParseParamExpression()
|
||||
if(errors.len)
|
||||
return exp
|
||||
if(curToken.value==","&&istype(curToken, /token/symbol))NextToken() //skip comma
|
||||
if(istype(curToken, /token/end)) //Prevents infinite loop...
|
||||
errors+=new/scriptError/ExpectedToken(")")
|
||||
@@ -311,5 +331,6 @@
|
||||
See Also:
|
||||
- <ParseExpression()>
|
||||
*/
|
||||
ParseParamExpression()
|
||||
return ParseExpression(list(",", ")"))
|
||||
ParseParamExpression(var/check_functions = 0)
|
||||
var/cf = check_functions
|
||||
return ParseExpression(list(",", ")"), check_functions = cf)
|
||||
@@ -174,8 +174,9 @@
|
||||
var/loops = 0
|
||||
for()
|
||||
loops++
|
||||
if(loops>=6000)
|
||||
CRASH("Something TERRIBLE has gone wrong in ParseFunctionStatement ;__;")
|
||||
if(loops>=800)
|
||||
errors +=new/scriptError("Cannot find ending params.")
|
||||
return
|
||||
|
||||
if(!curToken)
|
||||
errors+=new/scriptError/EndOfFile()
|
||||
@@ -184,6 +185,6 @@
|
||||
curBlock.statements+=stmt
|
||||
NextToken() //Skip close parenthesis
|
||||
return
|
||||
var/node/expression/P=ParseParamExpression()
|
||||
var/node/expression/P=ParseParamExpression(check_functions = 1)
|
||||
stmt.parameters+=P
|
||||
if(istype(curToken, /token/symbol) && curToken.value==",") NextToken()
|
||||
@@ -16,11 +16,11 @@
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.apply_damage(75,"brute","head")
|
||||
user.visible_message("<span class='notice'>[user] saws [target]'s skull open!")
|
||||
return 1
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/datum/surgery_step/extract_brain/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
B = getbrain(target)
|
||||
B = target.getorgan(/obj/item/organ/brain)
|
||||
if(B)
|
||||
user.visible_message("<span class='notice'>[user] begins to extract [target]'s brain.</span>")
|
||||
else
|
||||
@@ -33,7 +33,7 @@
|
||||
B.transfer_identity(target)
|
||||
target.internal_organs -= B
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/mob/living/carbon/human/H = target
|
||||
H.update_hair(0)
|
||||
H.apply_damage(25,"brute","head")
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Debrained [target.name] ([target.ckey]) INTENT: [uppertext(user.a_intent)])</font>"
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
return 1
|
||||
|
||||
/datum/surgery_step/fix_eyes/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
if(getbrain(target))
|
||||
if(target.getorgan(/obj/item/organ/brain))
|
||||
user.visible_message("<span class='warning'>[user] accidentally stabs [target] right in the brain!</span>")
|
||||
target.adjustBrainLoss(100)
|
||||
else
|
||||
|
||||
@@ -1,12 +1,4 @@
|
||||
proc/getbrain(mob/living/carbon/M)
|
||||
if(istype(M))
|
||||
for(var/obj/item/I in M.internal_organs)
|
||||
if(istype(I, /obj/item/organ/brain))
|
||||
return I
|
||||
|
||||
|
||||
proc/getappendix(mob/living/carbon/M)
|
||||
if(istype(M))
|
||||
for(var/obj/item/I in M.internal_organs)
|
||||
if(istype(I, /obj/item/organ/appendix))
|
||||
return I
|
||||
mob/proc/getorgan()
|
||||
return
|
||||
mob/living/carbon/getorgan(typepath)
|
||||
return (locate(typepath) in internal_organs)
|
||||
Reference in New Issue
Block a user