Merge branch 'master' into upstream-merge-13368

This commit is contained in:
Nadyr
2022-07-20 20:41:14 -04:00
committed by GitHub
86 changed files with 1181 additions and 511 deletions
+7 -2
View File
@@ -81,10 +81,15 @@
// Runechat messages
var/list/seen_messages
//Hide top bars
var/fullscreen = FALSE
//Hide status bar
var/show_status_bar = TRUE
///////////
// INPUT //
///////////
/// Bitfield of modifier keys (Shift, Ctrl, Alt) held currently.
var/mod_keys_held = 0
/// Bitfield of movement keys (WASD/Cursor Keys) held currently.
@@ -108,4 +113,4 @@
/// Movement dir of the most recently pressed movement key. Used in cardinal-only movement mode.
var/last_move_dir_pressed = NONE
#endif
#endif
+36 -1
View File
@@ -86,7 +86,7 @@
return
sane = TRUE
break
if(!sane)
to_chat(src, "<span class='warning'>Sorry, that link doesn't appear to be valid. Please try again.</span>")
return
@@ -196,6 +196,8 @@
. = ..() //calls mob.Login()
prefs.sanitize_preferences()
if(prefs)
prefs.selecting_slots = FALSE
connection_time = world.time
connection_realtime = world.realtime
@@ -573,3 +575,36 @@
set name = "TguiKeyUp"
set hidden = TRUE
return // stub
/client/verb/toggle_fullscreen()
set name = "Toggle Fullscreen"
set category = "OOC"
fullscreen = !fullscreen
if (fullscreen)
winset(usr, "mainwindow", "on-size=")
winset(usr, "mainwindow", "titlebar=false")
winset(usr, "mainwindow", "can-resize=false")
winset(usr, "mainwindow", "menu=")
winset(usr, "mainwindow", "is-maximized=false")
winset(usr, "mainwindow", "is-maximized=true")
else
winset(usr, "mainwindow", "menu=menu")
winset(usr, "mainwindow", "titlebar=true")
winset(usr, "mainwindow", "can-resize=true")
winset(usr, "mainwindow", "is-maximized=false")
winset(usr, "mainwindow", "on-size=attempt_auto_fit_viewport") // The attempt_auto_fit_viewport() proc is not implemented yet
/*
/client/verb/toggle_status_bar()
set name = "Toggle Status Bar"
set category = "OOC"
show_status_bar = !show_status_bar
if (show_status_bar)
winset(usr, "input", "is-visible=true")
else
winset(usr, "input", "is-visible=false")
*/
@@ -1,3 +1,6 @@
/datum/preferences
var/extra_languages = 0
/datum/category_item/player_setup_item/general/language
name = "Language"
sort_order = 2
@@ -5,19 +8,17 @@
/datum/category_item/player_setup_item/general/language/load_character(var/savefile/S)
S["language"] >> pref.alternate_languages
S["extra_languages"] >> pref.extra_languages
testing("LANGSANI: Loaded from [pref.client]'s character [pref.real_name || "-name not yet loaded-"] savefile: [english_list(pref.alternate_languages || list())]")
S["language_prefixes"] >> pref.language_prefixes
//CHOMPEdit Begin
S["species"] >> pref.species
S["pos_traits"] >> pref.pos_traits
var/morelang = 0
for(var/trait in pref.pos_traits)
if(trait==/datum/trait/positive/linguist)
morelang = 1
pref.num_languages = morelang * 12
//CHOMPEdit End
/datum/category_item/player_setup_item/general/language/save_character(var/savefile/S)
S["language"] << pref.alternate_languages
S["extra_languages"] << pref.extra_languages
testing("LANGSANI: Saved to [pref.client]'s character [pref.real_name || "-name not yet loaded-"] savefile: [english_list(pref.alternate_languages || list())]")
S["language_prefixes"] << pref.language_prefixes
/datum/category_item/player_setup_item/general/language/sanitize_character()
@@ -26,9 +27,9 @@
var/datum/species/S = GLOB.all_species[pref.species]
if(!istype(S))
return
if(pref.alternate_languages.len > pref.numlanguage()) //CHOMPEdit
pref.alternate_languages.len = pref.numlanguage() // Truncate to allowed length CHOMPEdit
if(pref.alternate_languages.len > (S.num_alternate_languages + pref.extra_languages))
testing("LANGSANI: Truncated [pref.client]'s character [pref.real_name || "-name not yet loaded-"] language list because it was too long (len: [pref.alternate_languages.len], allowed: [S.num_alternate_languages])")
pref.alternate_languages.len = (S.num_alternate_languages + pref.extra_languages) // Truncate to allowed length
// Sanitize illegal languages
for(var/language in pref.alternate_languages)
@@ -46,18 +47,20 @@
/datum/category_item/player_setup_item/general/language/content()
. += "<b>Languages</b><br>"
var/datum/species/S = GLOB.all_species[pref.species]
if(pref.alternate_languages.len > (S.num_alternate_languages + pref.extra_languages))
testing("LANGSANI: Truncated [pref.client]'s character [pref.real_name || "-name not yet loaded-"] language list because it was too long (len: [pref.alternate_languages.len], allowed: [S.num_alternate_languages])")
pref.alternate_languages.len = (S.num_alternate_languages + pref.extra_languages) // Truncate to allowed length
if(S.language)
. += "- [S.language]<br>"
if(S.default_language && S.default_language != S.language)
. += "- [S.default_language]<br>"
if(pref.numlanguage()) //CHOMPEdit
if(S.num_alternate_languages + pref.extra_languages)
if(pref.alternate_languages.len)
for(var/i = 1 to pref.alternate_languages.len)
var/lang = pref.alternate_languages[i]
. += "- [lang] - <a href='?src=\ref[src];remove_language=[i]'>remove</a><br>"
if(pref.alternate_languages.len < pref.numlanguage()) //CHOMPEdit
. += "- <a href='?src=\ref[src];add_language=1'>add</a> ([pref.numlanguage() - pref.alternate_languages.len] remaining)<br>" //CHOMPEdit
if(pref.alternate_languages.len < (S.num_alternate_languages + pref.extra_languages))
. += "- <a href='?src=\ref[src];add_language=1'>add</a> ([(S.num_alternate_languages + pref.extra_languages) - pref.alternate_languages.len] remaining)<br>"
else
. += "- [pref.species] cannot choose secondary languages.<br>"
@@ -71,7 +74,7 @@
return TOPIC_REFRESH
else if(href_list["add_language"])
var/datum/species/S = GLOB.all_species[pref.species]
if(pref.alternate_languages.len >= pref.numlanguage()) //CHOMPEdit
if(pref.alternate_languages.len >= (S.num_alternate_languages + pref.extra_languages))
tgui_alert_async(user, "You have already selected the maximum number of alternate languages for this species!")
else
var/list/available_languages = S.secondary_langs.Copy()
@@ -89,8 +92,12 @@
tgui_alert_async(user, "There are no additional languages available to select.")
else
var/new_lang = tgui_input_list(user, "Select an additional language", "Character Generation", available_languages)
if(new_lang && pref.alternate_languages.len < pref.numlanguage()) //CHOMPEdit
pref.alternate_languages |= new_lang
if(new_lang && pref.alternate_languages.len < (S.num_alternate_languages + pref.extra_languages))
var/datum/language/chosen_lang = GLOB.all_languages[new_lang]
if(istype(chosen_lang))
var/choice = tgui_alert(usr, "[chosen_lang.desc]",chosen_lang.name, list("Take","Cancel"))
if(choice != "Cancel" && pref.alternate_languages.len < (S.num_alternate_languages + pref.extra_languages))
pref.alternate_languages |= new_lang
return TOPIC_REFRESH
else if(href_list["change_prefix"])
@@ -752,6 +752,12 @@
ckeywhitelist = list("pandora029")
character_name = list("Evelyn Tareen", "Velyn Tareen")
/datum/gear/fluff/seona_flightsuit
path = /obj/item/clothing/under/fluff/foxoflightsuit/
display_name = "padded flightsuit"
ckeywhitelist = list("pandora029")
character_name = list("Seona Young")
/datum/gear/fluff/lily_medal
path = /obj/item/clothing/accessory/medal/silver/unity
display_name = "Lily's Unity Medal"
@@ -1301,4 +1307,4 @@
display_name = "Lucky's amour"
ckeywhitelist = list ("thedavestdave")
character_name = list("Lucky")
allowed_roles = "Chaplain"
allowed_roles = "Chaplain"
@@ -20,7 +20,7 @@
var/list/neg_traits = list()
var/traits_cheating = 0 //Varedit by admins allows saving new maximums on people who apply/etc
var/starting_trait_points = STARTING_SPECIES_POINTS
var/starting_trait_points = 0
var/max_traits = MAX_SPECIES_TRAITS
var/dirty_synth = 0 //Are you a synth
var/gross_meatbag = 0 //Where'd I leave my Voight-Kampff test kit?
@@ -72,7 +72,11 @@
pref.blood_color = sanitize_hexcolor(pref.blood_color, default="#A10808")
if(!pref.traits_cheating)
pref.starting_trait_points = STARTING_SPECIES_POINTS
var/datum/species/S = GLOB.all_species[pref.species]
if(S)
pref.starting_trait_points = S.trait_points
else
pref.starting_trait_points = 0
pref.max_traits = MAX_SPECIES_TRAITS
if(pref.organ_data[O_BRAIN]) //Checking if we have a synth on our hands, boys.
@@ -82,14 +86,14 @@
pref.gross_meatbag = 1
pref.dirty_synth = 0
if(pref.species != SPECIES_CUSTOM)
pref.pos_traits.Cut()
pref.neg_traits.Cut()
// Clean up positive traits
for(var/datum/trait/path as anything in pref.pos_traits)
if(!(path in positive_traits))
pref.pos_traits -= path
continue
if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits_positive))
pref.pos_traits -= path
continue
var/take_flags = initial(path.can_take)
if((pref.dirty_synth && !(take_flags & SYNTHETICS)) || (pref.gross_meatbag && !(take_flags & ORGANICS)))
pref.pos_traits -= path
@@ -98,7 +102,7 @@
if(!(path in neutral_traits))
pref.neu_traits -= path
continue
if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits))
if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits_neutral))
pref.neu_traits -= path
continue
var/take_flags = initial(path.can_take)
@@ -109,6 +113,9 @@
if(!(path in negative_traits))
pref.neg_traits -= path
continue
if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits_negative))
pref.neg_traits -= path
continue
var/take_flags = initial(path.can_take)
if((pref.dirty_synth && !(take_flags & SYNTHETICS)) || (pref.gross_meatbag && !(take_flags & ORGANICS)))
pref.neg_traits -= path
@@ -141,6 +148,9 @@
var/datum/species/S = character.species
var/datum/species/new_S = S.produceCopy(pref.pos_traits + pref.neu_traits + pref.neg_traits, character, pref.custom_base)
for(var/datum/trait/T in new_S.traits)
T.apply_pref(src)
//Any additional non-trait settings can be applied here
new_S.blood_color = pref.blood_color
@@ -151,8 +161,6 @@
//Statistics for this would be nice
var/english_traits = english_list(new_S.traits, and_text = ";", comma_text = ";")
log_game("TRAITS [pref.client_ckey]/([character]) with: [english_traits]") //Terrible 'fake' key_name()... but they aren't in the same entity yet
else
/datum/category_item/player_setup_item/vore/traits/content(var/mob/user)
. += "<b>Custom Species Name:</b> "
@@ -164,38 +172,41 @@
. += "<a href='?src=\ref[src];custom_base=1'>[pref.custom_base ? pref.custom_base : "Human"]</a><br>"
var/traits_left = pref.max_traits
if(pref.species == SPECIES_CUSTOM)
var/points_left = pref.starting_trait_points
for(var/T in pref.pos_traits + pref.neg_traits) // CHOMPEdit: Only Positive traits cost slots now.
points_left -= traits_costs[T]
for(var/T in pref.pos_traits)
traits_left--
. += "<b>Traits Left:</b> [traits_left]<br>"
. += "<b>Points Left:</b> [points_left]<br>"
if(points_left < 0 || traits_left < 0 || !pref.custom_species)
. += "<span style='color:red;'><b>^ Fix things! ^</b></span><br>"
. += "<a href='?src=\ref[src];add_trait=[POSITIVE_MODE]'>Positive Trait(s) (Limited) +</a><br>" // CHOMPEdit: More obvious/clear to players.
. += "<ul>"
for(var/T in pref.pos_traits)
var/datum/trait/trait = positive_traits[T]
. += "<li>- <a href='?src=\ref[src];clicked_pos_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "</ul>"
var/points_left = pref.starting_trait_points
for(var/T in pref.pos_traits + pref.neg_traits) // CHOMPEdit: Only Positive traits cost slots now.
points_left -= traits_costs[T]
for(var/T in pref.pos_traits)
traits_left--
. += "<b>Traits Left:</b> [traits_left]<br>"
. += "<b>Points Left:</b> [points_left]<br>"
if(points_left < 0 || traits_left < 0 || (!pref.custom_species && pref.species == SPECIES_CUSTOM))
. += "<span style='color:red;'><b>^ Fix things! ^</b></span><br>"
. += "<a href='?src=\ref[src];add_trait=[POSITIVE_MODE]'>Positive Trait(s) (Limited) +</a><br>" // CHOMPEdit: More obvious/clear to players.
. += "<ul>"
for(var/T in pref.pos_traits)
var/datum/trait/trait = positive_traits[T]
. += "<li>- <a href='?src=\ref[src];clicked_pos_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "</ul>"
. += "<a href='?src=\ref[src];add_trait=[NEGATIVE_MODE]'>Negative Trait(s) (No Limit) +</a><br>" // CHOMPEdit: More obvious/clear to players.
. += "<ul>"
for(var/T in pref.neg_traits)
var/datum/trait/trait = negative_traits[T]
. += "<li>- <a href='?src=\ref[src];clicked_neg_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "</ul>"
. += "<a href='?src=\ref[src];add_trait=[NEUTRAL_MODE]'>Neutral Trait(s) (No Limit) +</a><br>" // CHOMPEdit: More obvious/clear to players.
. += "<ul>"
for(var/T in pref.neu_traits)
var/datum/trait/trait = neutral_traits[T]
. += "<li>- <a href='?src=\ref[src];clicked_neu_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "</ul>"
. += "<a href='?src=\ref[src];add_trait=[NEGATIVE_MODE]'>Negative Trait(s) (No Limit) +</a><br>" // CHOMPEdit: More obvious/clear to players.
. += "<ul>"
for(var/T in pref.neg_traits)
var/datum/trait/trait = negative_traits[T]
. += "<li>- <a href='?src=\ref[src];clicked_neg_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "</ul>"
. += "<b>Blood Color: </b>" //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their own blood color.
. += "<a href='?src=\ref[src];blood_color=1'>Set Color</a>"
. += "<a href='?src=\ref[src];blood_reset=1'>R</a><br>"
@@ -251,13 +262,12 @@
return TOPIC_REFRESH
else if(href_list["clicked_pos_trait"])
var/traitpath = text2path(href_list["clicked_pos_trait"]) //CHOMPEdit
var/datum/trait/trait = text2path(href_list["clicked_pos_trait"])
var/choice = tgui_alert(usr, "Remove [initial(trait.name)] and regain [initial(trait.cost)] points?","Remove Trait",list("Remove","Cancel"))
if(choice == "Remove")
if(traitpath == /datum/trait/positive/linguist) //CHOMPEdit
pref.num_languages = null //CHOMPEdit
pref.pos_traits -= trait
var/datum/trait/instance = all_traits[trait]
instance.remove_pref(pref)
return TOPIC_REFRESH
else if(href_list["clicked_neu_trait"])
@@ -265,6 +275,8 @@
var/choice = tgui_alert(usr, "Remove [initial(trait.name)]?","Remove Trait",list("Remove","Cancel"))
if(choice == "Remove")
pref.neu_traits -= trait
var/datum/trait/instance = all_traits[trait]
instance.remove_pref(pref)
return TOPIC_REFRESH
else if(href_list["clicked_neg_trait"])
@@ -272,6 +284,8 @@
var/choice = tgui_alert(usr, "Remove [initial(trait.name)] and lose [initial(trait.cost)] points?","Remove Trait",list("Remove","Cancel"))
if(choice == "Remove")
pref.neg_traits -= trait
var/datum/trait/instance = all_traits[trait]
instance.remove_pref(pref)
return TOPIC_REFRESH
else if(href_list["custom_say"])
@@ -328,18 +342,26 @@
var/list/mylist
switch(mode)
if(POSITIVE_MODE)
picklist = positive_traits.Copy() - pref.pos_traits
mylist = pref.pos_traits
if(pref.species == SPECIES_CUSTOM)
picklist = positive_traits.Copy() - pref.pos_traits
mylist = pref.pos_traits
else
picklist = everyone_traits_positive.Copy() - pref.pos_traits
mylist = pref.pos_traits
if(NEUTRAL_MODE)
if(pref.species == SPECIES_CUSTOM)
picklist = neutral_traits.Copy() - pref.neu_traits
mylist = pref.neu_traits
else
picklist = everyone_traits.Copy() - pref.neu_traits
picklist = everyone_traits_neutral.Copy() - pref.neu_traits
mylist = pref.neu_traits
if(NEGATIVE_MODE)
picklist = negative_traits.Copy() - pref.neg_traits
mylist = pref.neg_traits
if(pref.species == SPECIES_CUSTOM)
picklist = negative_traits.Copy() - pref.neg_traits
mylist = pref.neg_traits
else
picklist = everyone_traits_negative.Copy() - pref.neg_traits
mylist = pref.neg_traits
else
if(isnull(picklist))
@@ -424,11 +446,16 @@
conflict = instance_test.name
break varconflict
for(var/V in instance.var_changes_pref)
if(V in instance_test.var_changes_pref)
conflict = instance_test.name
break varconflict
if(conflict)
tgui_alert_async(usr, "You cannot take this trait and [conflict] at the same time. Please remove that trait, or pick another trait to add.", "Error")
return TOPIC_REFRESH
if(path==/datum/trait/positive/linguist) //CHOMPEdit
pref.num_languages = 12 //CHOMPEdit
instance.apply_pref(pref)
mylist += path
return TOPIC_REFRESH
-7
View File
@@ -33,7 +33,6 @@ var/list/preferences_datums = list()
var/tgui_swapped_buttons = FALSE
//character preferences
var/num_languages = 0 //CHOMPEdit
var/real_name //our character's name
var/be_random_name = 0 //whether we are a random name every round
var/nickname //our character's nickname
@@ -164,12 +163,6 @@ var/list/preferences_datums = list()
///If they are currently in the process of swapping slots, don't let them open 999 windows for it and get confused
var/selecting_slots = FALSE
//CHOMPEdit Begin
/datum/preferences/proc/numlanguage()
var/datum/species/S = GLOB.all_species[species]
var/num = max(num_languages, S.num_alternate_languages)
return (num == 0) ? 3 : num //Don't return 0
//CHOMPEdit End
/datum/preferences/New(client/C)
player_setup = new(src)
@@ -407,7 +407,7 @@
feedback_add_details("admin_verb","TRadioSounds")
/client/verb/toggle_say_sounds()
set name = "Sound Toggle: Say"
set name = "Sound-Toggle-Say"
set category = "Preferences"
set desc = "Toggle hearing a sound when somebody speaks using say."
@@ -420,7 +420,7 @@
feedback_add_details("admin_verb","TSaySounds")
/client/verb/toggle_emote_sounds()
set name = "Sound Toggle: Me"
set name = "Sound-Toggle-Me"
set category = "Preferences"
set desc = "Toggle hearing a sound when somebody speaks using me ."
@@ -433,7 +433,7 @@
feedback_add_details("admin_verb","TMeSounds")
/client/verb/toggle_whisper_sounds()
set name = "Sound Toggle: Whisper"
set name = "Sound-Toggle-Whisper"
set category = "Preferences"
set desc = "Toggle hearing a sound when somebody speaks using whisper."
@@ -446,7 +446,7 @@
feedback_add_details("admin_verb","TWhisperSounds")
/client/verb/toggle_subtle_sounds()
set name = "Toggle Subtle Sounds"
set name = "Sound-Toggle-Subtle"
set category = "Preferences"
set desc = "Toggle hearing a sound when somebody uses subtle."