Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into BookClub

This commit is contained in:
Aurorablade
2016-08-19 01:01:19 -04:00
263 changed files with 5239 additions and 42840 deletions
+12
View File
@@ -145,6 +145,9 @@
/datum/action/item_action/startchainsaw
name = "Pull The Starting Cord"
/datum/action/item_action/print_report
name = "Print Forensic Report"
/datum/action/item_action/toggle_gunlight
name = "Toggle Gunlight"
@@ -244,6 +247,15 @@
name = "Adjust [target.name]"
button.name = name
/datum/action/item_action/pontificate
name = "Pontificate Evilly"
/datum/action/item_action/tip_fedora
name = "Tip Fedora"
/datum/action/item_action/flip_cap
name = "Flip Cap"
/datum/action/item_action/switch_hud
name = "Switch HUD"
+7 -1
View File
@@ -129,6 +129,7 @@
proc/get_id_photo(var/mob/living/carbon/human/H)
var/icon/preview_icon = null
var/obj/item/organ/external/head/head_organ = H.get_organ("head")
var/obj/item/organ/internal/eyes/eyes_organ = H.get_int_organ(/obj/item/organ/internal/eyes)
var/g = "m"
if(H.gender == FEMALE)
@@ -170,7 +171,12 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
var/icon/face_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "bald_s")
if(!(H.species.bodyflags & NO_EYES))
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.species ? H.species.eyes : "eyes_s")
eyes_s.Blend(rgb(H.r_eyes, H.g_eyes, H.b_eyes), ICON_ADD)
if(!eyes_organ)
return
var/eye_red = eyes_organ.eye_colour[1]
var/eye_green = eyes_organ.eye_colour[2]
var/eye_blue = eyes_organ.eye_colour[3]
eyes_s.Blend(rgb(eye_red, eye_green, eye_blue), ICON_ADD)
face_s.Blend(eyes_s, ICON_OVERLAY)
var/datum/sprite_accessory/hair_style = hair_styles_list[head_organ.h_style]
+1 -8
View File
@@ -384,16 +384,9 @@ body
html += "</ol>"
else
html += "<ul>"
// First loop to check for associativity
var/associative = FALSE
for(var/entry in L)
if(!(isnum(entry) || isnull(L[entry])))
associative = TRUE
break
// then we do it again! Except now with knowledge of associativity
var/index = 1
for(var/entry in L)
if(associative)
if(istext(entry))
html += debug_variable(entry, L[entry], level + 1)
else
html += debug_variable(index, L[index], level + 1)
+52 -51
View File
@@ -6,62 +6,63 @@
/datum/events
var/list/events
New()
..()
events = new
/datum/events/New()
..()
events = new
proc/addEventType(event_type as text)
if(!(event_type in events) || !islist(events[event_type]))
events[event_type] = list()
return 1
return
// Arguments: event_type as text, proc_holder as datum, proc_name as text
// Returns: New event, null on error.
proc/addEvent(event_type as text, proc_holder, proc_name as text)
if(!event_type || !proc_holder || !proc_name)
return
addEventType(event_type)
var/list/event = events[event_type]
var/datum/events_event/E = new /datum/events_event(proc_holder,proc_name)
event += E
return E
// Arguments: event_type as text, any number of additional arguments to pass to event handler
// Returns: null
proc/fireEvent()
// to_chat(world, "Events in [args[1]] called")
var/list/event = listgetindex(events,args[1])
if(istype(event))
spawn(-1)
for(var/datum/events_event/E in event)
if(!E.Fire(arglist(args.Copy(2))))
clearEvent(args[1],E)
return
// Arguments: event_type as text, E as /datum/events_event
// Returns: 1 if event cleared, null on error
proc/clearEvent(event_type as text, datum/events_event/E)
if(!event_type || !E)
return
var/list/event = listgetindex(events,event_type)
event -= E
/datum/events/proc/addEventType(event_type as text)
if(!(event_type in events) || !islist(events[event_type]))
events[event_type] = list()
return 1
return
/datum/events_event
// Arguments: event_type as text, proc_holder as datum, proc_name as text
// Returns: New event, null on error.
/datum/events/proc/addEvent(event_type as text, proc_holder, proc_name as text)
if(!event_type || !proc_holder || !proc_name)
return
addEventType(event_type)
var/list/event = events[event_type]
var/datum/event/E = new /datum/event(proc_holder,proc_name)
event += E
return E
// Arguments: event_type as text, any number of additional arguments to pass to event handler
// Returns: null
/datum/events/proc/fireEvent()
//world << "Events in [args[1]] called"
var/list/event = listgetindex(events,args[1])
if(istype(event))
spawn(0)
for(var/datum/event/E in event)
if(!E.Fire(arglist(args.Copy(2))))
clearEvent(args[1],E)
return
// Arguments: event_type as text, E as /datum/event
// Returns: 1 if event cleared, null on error
/datum/events/proc/clearEvent(event_type as text, datum/event/E)
if(!event_type || !E)
return
var/list/event = listgetindex(events,event_type)
event -= E
return 1
/datum/event
var/listener
var/proc_name
New(tlistener,tprocname)
listener = tlistener
proc_name = tprocname
return ..()
/datum/event/New(tlistener,tprocname)
listener = tlistener
proc_name = tprocname
return ..()
proc/Fire()
// to_chat(world, "Event fired")
if(listener)
call(listener,proc_name)(arglist(args))
return 1
return
/datum/event/proc/Fire()
//world << "Event fired"
if(listener)
call(listener,proc_name)(arglist(args))
return 1
return
+69
View File
@@ -75,6 +75,9 @@
//put this here for easier tracking ingame
var/datum/money_account/initial_account
//zealot_master is a reference to the mob that converted them into a zealot (for ease of investigation and such)
var/mob/living/carbon/human/zealot_master = null
/datum/mind/proc/transfer_to(mob/living/new_character)
if(!istype(new_character))
log_to_dd("## DEBUG: transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform Carn")
@@ -1475,6 +1478,72 @@
if(G)
G.reenter_corpse()
/datum/mind/proc/make_zealot(mob/living/carbon/human/missionary, convert_duration = 6000, team_color = "red")
if(!missionary || !istype(missionary)) //better provide a proper missionary or the rest of this is gonna break
return 0
zealot_master = missionary
var/list/implanters
var/ref = "\ref[missionary.mind]"
if(!(missionary.mind in ticker.mode.implanter))
ticker.mode.implanter[ref] = list()
implanters = ticker.mode.implanter[ref]
implanters.Add(src)
ticker.mode.implanted.Add(src)
ticker.mode.implanted[src] = missionary.mind
//ticker.mode.implanter[missionary.mind] += src
ticker.mode.implanter[ref] = implanters
ticker.mode.traitors += src
special_role = "traitor"
to_chat(current, "<span class='warning'><B>You're now a loyal zealot of [missionary.name]!</B> You now must lay down your life to protect them and assist in their goals at any cost.</span>")
var/datum/objective/protect/mindslave/MS = new
MS.owner = src
MS.target = missionary.mind
MS.explanation_text = "Obey every order from and protect [missionary.real_name], the [missionary.mind.assigned_role=="MODE" ? (missionary.mind.special_role) : (missionary.mind.assigned_role)]."
objectives += MS
for(var/datum/objective/objective in objectives)
to_chat(current, "<B>Objective #1</B>: [objective.explanation_text]")
ticker.mode.update_traitor_icons_added(missionary.mind)
ticker.mode.update_traitor_icons_added(src)//handles datahuds/observerhuds
if(missionary.mind.som)//do not add if not a traitor..and you just picked up a robe and staff in the hall...
var/datum/mindslaves/slaved = missionary.mind.som
som = slaved
slaved.serv += current
slaved.add_serv_hud(missionary.mind, "master") //handles master servent icons
slaved.add_serv_hud(src, "mindslave")
var/obj/item/clothing/under/jumpsuit = null
if(ishuman(current)) //only bother with the jumpsuit stuff if we are a human type, since we won't have the slot otherwise
var/mob/living/carbon/human/H = current
if(H.w_uniform)
jumpsuit = H.w_uniform
jumpsuit.color = team_color
H.update_inv_w_uniform(0,0)
log_admin("[ckey(missionary.key)] has converted [ckey(current.key)] as a zealot.")
addtimer(src, "remove_zealot", convert_duration, FALSE, jumpsuit) //deconverts after the timer expires
return 1
/datum/mind/proc/remove_zealot(obj/item/clothing/under/jumpsuit = null)
if(!zealot_master) //if they aren't a zealot, we can't remove their zealot status, obviously. don't bother with the rest so we don't confuse them with the messages
return
ticker.mode.remove_traitor_mind(src)
log_admin("[ckey(current.key)] has deconverted and is no longer a zealot of [ckey(zealot_master.key)].")
zealot_master = null
if(jumpsuit)
jumpsuit.color = initial(jumpsuit.color) //reset the jumpsuit no matter where our mind is
if(ishuman(current)) //but only try updating us if we are still a human type since it is a human proc
var/mob/living/carbon/human/H = current
H.update_inv_w_uniform(0,0)
to_chat(current, "<span class='warning'>You seem to have forgotten the events of the past 10 minutes or so, and your head aches a bit as if someone beat it savagely with a stick.</span>")
to_chat(current, "<span class='warning'>This means you don't remember who you were working for or what you were doing.</span>")
//Initialisation procs
/mob/proc/mind_initialize()
if(mind)
+39
View File
@@ -0,0 +1,39 @@
// Not TECHNICALLY a datum, but this should never be instantiated
// outside of the stat panel
// Clickable stat() button
/obj/effect/statclick
var/target
/obj/effect/statclick/New(ntarget, text)
name = text
target = ntarget
/obj/effect/statclick/proc/update(text)
name = text
return src
/obj/effect/statclick/debug
var/class
/obj/effect/statclick/debug/New(ntarget)
name = "Initializing..."
target = ntarget
if(istype(target, /datum/controller/process))
class = "process"
else if(istype(target, /datum/controller/processScheduler))
class = "scheduler"
else if(istype(target, /datum/controller))
class = "controller"
else if(istype(target, /datum))
class = "datum"
else
class = "unknown"
// This bit is called when clicked in the stat panel
/obj/effect/statclick/debug/Click()
if(!usr.client.holder)
return
usr.client.debug_variables(target)
message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].")
+2 -4
View File
@@ -1198,10 +1198,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater,
/obj/item/weapon/storage/bible/booze,
/obj/item/weapon/storage/bible/booze,
/obj/item/clothing/suit/chaplain_hoodie,
/obj/item/clothing/head/chaplain_hood,
/obj/item/clothing/suit/chaplain_hoodie,
/obj/item/clothing/head/chaplain_hood)
/obj/item/clothing/suit/hooded/chaplain_hoodie,
/obj/item/clothing/suit/hooded/chaplain_hoodie)
cost = 40
containername = "religious supplies crate"
+9 -1
View File
@@ -180,6 +180,14 @@ var/list/uplink_items = list()
cost = 13
job = list("Chaplain")
/datum/uplink_item/jobspecific/missionary_kit
name = "Missionary Starter Kit"
desc = "A box containing a missionary staff, missionary robes, and bible. The robes and staff can be linked to allow you to convert victims at range for a short time to do your bidding. The bible is for bible stuff."
reference = "MK"
item = /obj/item/weapon/storage/box/syndie_kit/missionary_set
cost = 15
job = list("Chaplain")
/datum/uplink_item/jobspecific/artistic_toolbox
name = "Artistic Toolbox"
desc = "An accursed toolbox that grants its followers extreme power at the cost of requiring repeated sacrifices to it. If sacrifices are not provided, it will turn on its follower."
@@ -309,7 +317,7 @@ var/list/uplink_items = list()
item = /obj/item/clothing/under/contortionist
cost = 6
job = list("Life Support Specialist")
/datum/uplink_item/dangerous/energizedfireaxe
name = "Energized Fire Axe"
desc = "A fire axe with a massive electrical charge built into it. It can release this charge on its first victim and will be rather plain after that."