diff --git a/baystation12.dme b/baystation12.dme
index 6b0199caf76..7d6bfb56b26 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -1257,7 +1257,6 @@
#include "code\WorkInProgress\Cael_Aislinn\Rust\gyrotron_controller.dm"
#include "code\WorkInProgress\Cael_Aislinn\Rust\radiation.dm"
#include "code\WorkInProgress\Cael_Aislinn\Rust\virtual_particle_catcher.dm"
-#include "code\WorkInProgress\Cael_Aislinn\Tajara\tajaran_placeholder.dm"
#include "code\WorkInProgress\Mini\atmos_control.dm"
#include "code\WorkInProgress\SkyMarshal\Ultralight.dm"
#include "code\WorkInProgress\Tastyfish\livestock.dm"
diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm
index aefa4bf0b49..6be4b474d9e 100644
--- a/code/modules/mob/living/silicon/ai/say.dm
+++ b/code/modules/mob/living/silicon/ai/say.dm
@@ -8,8 +8,6 @@
/mob/living/silicon/ai/say_understands(var/other)
if (istype(other, /mob/living/carbon/human))
return 1
- if (istype(other, /mob/living/carbon/human/tajaran))
- return 1
if (istype(other, /mob/living/silicon/robot))
return 1
if (istype(other, /mob/living/silicon/decoy))
diff --git a/code/modules/mob/living/silicon/decoy/decoy.dm b/code/modules/mob/living/silicon/decoy/decoy.dm
index 0bcf13e5933..acabb07d59d 100644
--- a/code/modules/mob/living/silicon/decoy/decoy.dm
+++ b/code/modules/mob/living/silicon/decoy/decoy.dm
@@ -14,8 +14,6 @@
/mob/living/silicon/decoy/say_understands(var/other)
if (istype(other, /mob/living/carbon/human))
return 1
- if (istype(other, /mob/living/carbon/human/tajaran))
- return 1
if (istype(other, /mob/living/silicon/robot))
return 1
if (istype(other, /mob/living/silicon/ai))
diff --git a/code/modules/mob/living/silicon/pai/say.dm b/code/modules/mob/living/silicon/pai/say.dm
index 61cf214952a..46ee324792d 100644
--- a/code/modules/mob/living/silicon/pai/say.dm
+++ b/code/modules/mob/living/silicon/pai/say.dm
@@ -11,8 +11,6 @@
return 1
if (istype(other, /mob/living/carbon/brain))
return 1
- if (istype(other, /mob/living/carbon/human/tajaran))
- return 1
return ..()
/mob/living/silicon/pai/say_quote(var/text)
diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm
index 447f38b46b8..f67464ee837 100644
--- a/code/modules/mob/new_player/preferences.dm
+++ b/code/modules/mob/new_player/preferences.dm
@@ -107,6 +107,7 @@ datum/preferences
var/default_slot = 1//Holder so it doesn't default to slot 1, rather the last one used
var/slot_name = ""
+
var/used_skillpoints = 0
var/skill_specialization = null
var/list/skills = list() // skills can range from 0 to 3
@@ -118,9 +119,9 @@ datum/preferences
var/list/job_alt_titles = new() // the default name of a job like "Medical Doctor"
var/flavor_text = ""
-
var/med_record = ""
var/sec_record = ""
+ var/disabilities = 0
// OOC Metadata:
var/metadata = ""
@@ -283,7 +284,7 @@ datum/preferences
dat += "Skill Choices
"
dat += "\t[GetSkillClass(used_skillpoints)] ([used_skillpoints])
"
- dat += "\tSet Skills
"
+ dat += "\tSet Skills
"
//column 2
dat += "
" //height='300px'
@@ -346,6 +347,66 @@ datum/preferences
user << browse(dat, "window=preferences;size=570x650")
+ proc/SetDisabilities(mob/user)
+ var/HTML = ""
+ HTML += ""
+ HTML += "Choose disabilities "
+
+ HTML += "Need Glasses? [disabilities & (1<<0) ? "Yes" : "No"] "
+ HTML += "Seizures? [disabilities & (1<<1) ? "Yes" : "No"] "
+ HTML += "Coughing? [disabilities & (1<<2) ? "Yes" : "No"] "
+ HTML += "Tourettes/Twitching? [disabilities & (1<<3) ? "Yes" : "No"] "
+ HTML += "Nervousness? [disabilities & (1<<4) ? "Yes" : "No"] "
+ HTML += "Deafness? [disabilities & (1<<5) ? "Yes" : "No"] "
+
+ HTML += " "
+ HTML += "\[Done\]"
+ HTML += ""
+
+ user << browse(null, "window=preferences")
+ user << browse(HTML, "window=disabil;size=350x300")
+ return
+
+ proc/SetRecords(mob/user)
+ var/HTML = ""
+ HTML += ""
+ HTML += "Set Character Records "
+
+ HTML += "Medical Records "
+
+ if(lentext(med_record) <= 40)
+ HTML += "[med_record]"
+ else
+ HTML += "[copytext(med_record, 1, 37)]..."
+
+ HTML += "
Security Records "
+
+ if(lentext(sec_record) <= 40)
+ HTML += "[sec_record] "
+ else
+ HTML += "[copytext(sec_record, 1, 37)]... "
+
+ HTML += " "
+ HTML += "\[Done\]"
+ HTML += ""
+
+ user << browse(null, "window=preferences")
+ user << browse(HTML, "window=records;size=350x300")
+ return
+
+ proc/GetAltTitle(datum/job/job)
+ return job_alt_titles.Find(job.title) > 0 \
+ ? job_alt_titles[job.title] \
+ : job.title
+
+ proc/SetAltTitle(datum/job/job, new_title)
+ // remove existing entry
+ if(job_alt_titles.Find(job.title))
+ job_alt_titles -= job.title
+ // add one if it's not default
+ if(job.title != new_title)
+ job_alt_titles[job.title] = new_title
+
proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Chief Engineer"), width = 550, height = 500)
//limit - The amount of jobs allowed per column. Defaults to 17 to make it look nice.
//splitJobs - Allows you split the table by job. You can make different tables for each department by including their heads. Defaults to CE to make it look nice.
@@ -549,6 +610,40 @@ datum/preferences
else
SetChoices(user)
return 1
+ else if(href_list["preference"] == "skills")
+ if(href_list["cancel"])
+ user << browse(null, "window=show_skills")
+ ShowChoices(user)
+ else if(href_list["skillinfo"])
+ var/datum/skill/S = locate(href_list["skillinfo"])
+ var/HTML = "[S.name] [S.desc]"
+ user << browse(HTML, "window=\ref[user]skillinfo")
+ else if(href_list["setskill"])
+ var/datum/skill/S = locate(href_list["setskill"])
+ var/value = text2num(href_list["newvalue"])
+ skills[S.ID] = value
+ CalculateSkillPoints()
+ SetSkills(user)
+ else if(href_list["preconfigured"])
+ var/selected = input(user, "Select a skillset", "Skillset") as null|anything in SKILL_PRE
+ if(!selected) return
+
+ ZeroSkills(1)
+ for(var/V in SKILL_PRE[selected])
+ if(V == "field")
+ skill_specialization = SKILL_PRE[selected]["field"]
+ continue
+ skills[V] = SKILL_PRE[selected][V]
+ CalculateSkillPoints()
+
+ SetSkills(user)
+ else if(href_list["setspecialization"])
+ skill_specialization = href_list["setspecialization"]
+ CalculateSkillPoints()
+ SetSkills(user)
+ else
+ SetSkills(user)
+ return 1
switch(href_list["task"])
if("random")
@@ -800,39 +895,41 @@ datum/preferences
flavor_text = msg
- if("skills")
- if(href_list["cancel"])
- user << browse(null, "window=show_skills")
- ShowChoices(user)
- else if(href_list["skillinfo"])
- var/datum/skill/S = locate(href_list["skillinfo"])
- var/HTML = "[S.name] [S.desc]"
- user << browse(HTML, "window=\ref[user]skillinfo")
- else if(href_list["setskill"])
- var/datum/skill/S = locate(href_list["setskill"])
- var/value = text2num(href_list["newvalue"])
- skills[S.ID] = value
- CalculateSkillPoints()
- SetSkills(user)
- else if(href_list["preconfigured"])
- var/selected = input(user, "Select a skillset", "Skillset") as null|anything in SKILL_PRE
- if(!selected) return
-
- ZeroSkills(1)
- for(var/V in SKILL_PRE[selected])
- if(V == "field")
- skill_specialization = SKILL_PRE[selected]["field"]
- continue
- skills[V] = SKILL_PRE[selected][V]
- CalculateSkillPoints()
-
- SetSkills(user)
- else if(href_list["setspecialization"])
- skill_specialization = href_list["setspecialization"]
- CalculateSkillPoints()
- SetSkills(user)
+ if("disabilities")
+ if(text2num(href_list["disabilities"]) >= -1)
+ if(text2num(href_list["disabilities"]) >= 0)
+ disabilities ^= (1<= 1)
+ SetRecords(user)
+ return
+ else
+ user << browse(null, "window=records")
+
+ if("med_record")
+ var/medmsg = input(usr,"Set your medical notes here.","Medical Records",html_decode(med_record)) as message
+
+ if(medmsg != null)
+ medmsg = copytext(medmsg, 1, MAX_PAPER_MESSAGE_LEN)
+ medmsg = html_encode(medmsg)
+
+ med_record = medmsg
+ SetRecords(user)
+
+ if("sec_record")
+ var/secmsg = input(usr,"Set your security notes here.","Security Records",html_decode(sec_record)) as message
+
+ if(secmsg != null)
+ secmsg = copytext(secmsg, 1, MAX_PAPER_MESSAGE_LEN)
+ secmsg = html_encode(secmsg)
+
+ sec_record = secmsg
+ SetRecords(user)
else
switch(href_list["preference"])
@@ -982,13 +1079,12 @@ datum/preferences
character.f_style = f_style
switch(UI_style)
- /*if("Midnight")
- character.UI = 'icons/mob/screen1_Midnight.dmi'*/
if("Orange")
character.UI = 'icons/mob/screen1_Orange.dmi'
if("old")
character.UI = 'icons/mob/screen1_old.dmi'
else
+ //default
character.UI = 'icons/mob/screen1_Midnight.dmi'
if(underwear > 12 || underwear < 1)
diff --git a/code/modules/mob/new_player/savefile.dm b/code/modules/mob/new_player/savefile.dm
index 7750c67d680..74fdcf8819f 100644
--- a/code/modules/mob/new_player/savefile.dm
+++ b/code/modules/mob/new_player/savefile.dm
@@ -105,6 +105,11 @@ datum/preferences/proc/savefile_save(mob/user)
F["ghost_sight"] << src.ghost_sight
F["ooccolor"] << src.ooccolor
F["lastchangelog"] << src.lastchangelog
+ F["disabilities"] << src.disabilities
+
+ F["used_skillpoints"] << src.used_skillpoints
+ F["skills"] << src.skills
+ F["skill_specialization"] << src.skill_specialization
F["OOC_Notes"] << src.metadata
diff --git a/code/setup.dm b/code/setup.dm
index 14279fa4be0..1546d24d9f7 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -479,7 +479,10 @@ var/list/liftable_structures = list(\
//The number of deciseconds which someone needs to be inactive to be classified as AFK:
#define AFK_THRESHOLD 3000
-
+#define MAX_MESSAGE_LEN 1024
+#define MAX_PAPER_MESSAGE_LEN 3072
+#define MAX_BOOK_MESSAGE_LEN 9216
+#define MAX_NAME_LEN 32
#define SEE_INVISIBLE_MINIMUM 5
|