[MIRROR] Refactors quirk code. (#6303)

* Refactors quirk code.

* Update neutral.dm

* 0

* Update neutral.dm

Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
Co-authored-by: Gandalf <jzo123@hotmail.com>
This commit is contained in:
SkyratBot
2021-06-15 23:48:10 +01:00
committed by GitHub
co-authored by Timberpoes Gandalf
parent ae68870acf
commit ab709c8dba
23 changed files with 650 additions and 556 deletions
@@ -376,7 +376,7 @@
SSticker.mode.make_antag_chance(humanc)
if(humanc && CONFIG_GET(flag/roundstart_traits))
SSquirks.AssignQuirks(humanc, humanc.client, TRUE)
SSquirks.AssignQuirks(humanc, humanc.client)
log_manifest(character.mind.key,character.mind,character,latejoin = TRUE)
+1 -1
View File
@@ -253,7 +253,7 @@
blood_data["features"] = dna.features
blood_data["factions"] = faction
blood_data["quirks"] = list()
for(var/V in roundstart_quirks)
for(var/V in quirks)
var/datum/quirk/T = V
blood_data["quirks"] += T.type
return blood_data
+10 -6
View File
@@ -819,22 +819,26 @@
return
var/list/options = list("Clear"="Clear")
for(var/x in subtypesof(/datum/quirk))
var/datum/quirk/T = x
var/qname = initial(T.name)
options[has_quirk(T) ? "[qname] (Remove)" : "[qname] (Add)"] = T
for(var/type in subtypesof(/datum/quirk))
var/datum/quirk/quirk_type = type
if(initial(quirk_type.abstract_parent_type) == type)
continue
var/qname = initial(quirk_type.name)
options[has_quirk(quirk_type) ? "[qname] (Remove)" : "[qname] (Add)"] = quirk_type
var/result = input(usr, "Choose quirk to add/remove","Quirk Mod") as null|anything in sortList(options)
if(result)
if(result == "Clear")
for(var/datum/quirk/q in roundstart_quirks)
for(var/datum/quirk/q in quirks)
remove_quirk(q.type)
else
var/T = options[result]
if(has_quirk(T))
remove_quirk(T)
else
add_quirk(T,TRUE)
add_quirk(T)
if(href_list[VV_HK_MAKE_MONKEY])
if(!check_rights(R_SPAWN))
return
@@ -891,7 +891,7 @@
damaged_message += D
combined_msg += "<span class='info'>Your [damaged_message] [damaged_plural ? "are" : "is"] hurt.</span>"
if(roundstart_quirks.len)
if(quirks.len)
combined_msg += "<span class='notice'>You have these quirks: [get_quirk_string(FALSE, CAT_QUIRK_ALL)].</span>"
to_chat(src, combined_msg.Join("\n"))
+1 -1
View File
@@ -62,7 +62,7 @@
*/
var/incorporeal_move = FALSE
var/list/roundstart_quirks = list()
var/list/quirks = list()
var/list/surgeries = list() ///a list of surgery datums. generally empty, they're added when the player wants them.
///Mob specific surgery speed modifier
+13 -11
View File
@@ -421,27 +421,29 @@
priority_absorb_key["stuns_absorbed"] += amount
return TRUE
/////////////////////////////////// DISABILITIES ////////////////////////////////////
/mob/living/proc/add_quirk(quirktype, spawn_effects) //separate proc due to the way these ones are handled
/mob/living/proc/add_quirk(quirktype) //separate proc due to the way these ones are handled
if(HAS_TRAIT(src, quirktype))
return
var/datum/quirk/T = quirktype
var/qname = initial(T.name)
var/datum/quirk/quirk = quirktype
var/qname = initial(quirk.name)
if(!SSquirks || !SSquirks.quirks[qname])
return
new quirktype (src, spawn_effects)
return TRUE
quirk = new quirktype()
if(quirk.add_to_holder(src))
return TRUE
qdel(quirk)
return FALSE
/mob/living/proc/remove_quirk(quirktype)
for(var/datum/quirk/Q in roundstart_quirks)
if(Q.type == quirktype)
qdel(Q)
for(var/datum/quirk/quirk in quirks)
if(quirk.type == quirktype)
qdel(quirk)
return TRUE
return FALSE
/mob/living/proc/has_quirk(quirktype)
for(var/datum/quirk/Q in roundstart_quirks)
if(Q.type == quirktype)
for(var/datum/quirk/quirk in quirks)
if(quirk.type == quirktype)
return TRUE
return FALSE