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
@@ -53,6 +53,8 @@
var/max_uses = 20
var/uses = 0
var/shards = 0
var/recycle = 3
var/emagged = 0
var/failmsg = ""
// How much to increase per each glass?
@@ -68,7 +70,7 @@
/obj/item/device/lightreplacer/examine(mob/user)
if(..(user, 2))
to_chat(user, "It has [uses] lights remaining.")
to_chat(user, "It has [uses] lights and [shards] shards remaining.")
/obj/item/device/lightreplacer/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/stack/sheet/glass))
@@ -89,14 +91,46 @@
if(istype(W, /obj/item/weapon/light))
var/obj/item/weapon/light/L = W
if(L.status == 0) // LIGHT OKAY
if(!user.drop_item())
to_chat(user, "[L] is stuck to your hand!")
return
if(uses < max_uses)
AddUses(1)
to_chat(user, "You insert the [L.name] into the [src.name]. You have [uses] lights remaining.")
user.drop_item()
qdel(L)
return
else
to_chat(user, "You need a working light.")
else if(L.status == 2 || L.status == 3)
if(!user.drop_item())
to_chat(user, "[L] is stuck to your hand!")
return
else
AddShards(1)
to_chat(user, "You insert [L] into [src]. You have [shards] shards remaining.")
user.drop_item()
qdel(L)
return
if(istype(W, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = W
var/found_lightbulbs = 0
for(var/obj/item/I in S.contents)
if(istype(I,/obj/item/weapon/light))
var/obj/item/weapon/light/L = I
found_lightbulbs = 1
if(uses >= max_uses)
to_chat(user, "<span class='warning'>[src] is full!</span>")
break
if(L.status == 0)
AddUses(1)
qdel(L)
else if(L.status == 2 || L.status == 3)
AddShards(1)
qdel(L)
to_chat(user, "<span class='notice'>You fill [src] with lights from [S].")
if(!found_lightbulbs)
to_chat(user, "<span class='warning'>[S] contains no bulbs.</span>")
return
/obj/item/device/lightreplacer/emag_act(user as mob)
@@ -128,6 +162,14 @@
/obj/item/device/lightreplacer/proc/AddUses(var/amount = 1)
uses = min(max(uses + amount, 0), max_uses)
/obj/item/device/lightreplacer/proc/AddShards(amount = 1)
shards += amount
var/recycled_lights = round(shards / recycle)
if(recycled_lights > 0)
AddUses(recycled_lights)
shards = shards % recycle
return recycled_lights
/obj/item/device/lightreplacer/proc/Charge(var/mob/user)
charge += 1
if(charge > 7)
@@ -206,4 +248,4 @@
#undef LIGHT_OK
#undef LIGHT_EMPTY
#undef LIGHT_BROKEN
#undef LIGHT_BURNED
#undef LIGHT_BURNED
+2 -2
View File
@@ -11,7 +11,7 @@
throw_range = 7
origin_tech = "programming=3"
var/list/signs = list()
var/max_signs = 10
var/max_signs = 20
/obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag)
if(flag)
@@ -45,4 +45,4 @@
desc = "The words flicker as if they mean nothing."
icon = 'icons/obj/janitor.dmi'
icon_state = "holosign"
anchored = 1
anchored = 1
+140 -15
View File
@@ -9,6 +9,7 @@
throwforce = 10
w_class = 1
var/reskinned = FALSE
var/reskin_selectable = TRUE //set to FALSE if a subtype is meant to not normally be available as a reskin option (fluff ones will get re-added through their list)
var/list/fluff_transformations = list() //does it have any special transformations only accessible to it? Should only be subtypes of /obj/item/weapon/nullrod
/obj/item/weapon/nullrod/suicide_act(mob/user)
@@ -31,7 +32,11 @@
reskin_holy_weapon(user)
/obj/item/weapon/nullrod/proc/reskin_holy_weapon(mob/M)
var/list/holy_weapons_list = typesof(/obj/item/weapon/nullrod) - typesof(/obj/item/weapon/nullrod/fluff)
var/list/holy_weapons_list = typesof(/obj/item/weapon/nullrod)
for(var/entry in holy_weapons_list)
var/obj/item/weapon/nullrod/variant = entry
if(!initial(variant.reskin_selectable))
holy_weapons_list -= variant
if(fluff_transformations.len)
for(var/thing in fluff_transformations)
holy_weapons_list += thing
@@ -57,10 +62,13 @@
M.put_in_active_hand(holy_weapon)
qdel(src)
/obj/item/weapon/nullrod/fluff //fluff subtype to be used for all donator nullrods
reskin_selectable = FALSE
/obj/item/weapon/nullrod/godhand
name = "god hand"
icon_state = "disintegrate"
item_state = "disintegrate"
name = "god hand"
desc = "This hand of yours glows with an awesome power!"
flags = ABSTRACT | NODROP
w_class = 5
@@ -69,9 +77,9 @@
attack_verb = list("punched", "cross countered", "pummeled")
/obj/item/weapon/nullrod/staff
name = "red holy staff"
icon_state = "godstaff-red"
item_state = "godstaff-red"
name = "red holy staff"
desc = "It has a mysterious, protective aura."
w_class = 5
force = 5
@@ -84,9 +92,9 @@
item_state = "godstaff-blue"
/obj/item/weapon/nullrod/claymore
name = "holy claymore"
icon_state = "claymore"
item_state = "claymore"
name = "holy claymore"
desc = "A weapon fit for a crusade!"
w_class = 4
slot_flags = SLOT_BACK|SLOT_BELT
@@ -102,26 +110,26 @@
return ..()
/obj/item/weapon/nullrod/claymore/darkblade
name = "dark blade"
icon_state = "cultblade"
item_state = "cultblade"
name = "dark blade"
desc = "Spread the glory of the dark gods!"
slot_flags = SLOT_BELT
hitsound = 'sound/hallucinations/growl1.ogg'
/obj/item/weapon/nullrod/claymore/chainsaw_sword
name = "sacred chainsaw sword"
icon_state = "chainswordon"
item_state = "chainswordon"
name = "sacred chainsaw sword"
desc = "Suffer not a heretic to live."
slot_flags = SLOT_BELT
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
hitsound = 'sound/weapons/chainsaw.ogg'
/obj/item/weapon/nullrod/claymore/glowing
name = "force weapon"
icon_state = "swordon"
item_state = "swordon"
name = "force weapon"
desc = "The blade glows with the power of faith. Or possibly a battery."
slot_flags = SLOT_BELT
@@ -171,9 +179,9 @@
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/nullrod/scythe
name = "reaper scythe"
icon_state = "scythe0"
item_state = "scythe0"
name = "reaper scythe"
desc = "Ask not for whom the bell tolls..."
w_class = 4
armour_penetration = 35
@@ -184,16 +192,16 @@
hitsound = 'sound/weapons/bladeslice.ogg'
/obj/item/weapon/nullrod/scythe/vibro
name = "high frequency blade"
icon_state = "hfrequency0"
item_state = "hfrequency1"
name = "high frequency blade"
desc = "Bad references are the DNA of the soul."
attack_verb = list("chopped", "sliced", "cut", "zandatsu'd")
/obj/item/weapon/nullrod/scythe/talking
name = "possessed blade"
icon_state = "talking_sword"
item_state = "talking_sword"
name = "possessed blade"
desc = "When the station falls into chaos, it's nice to have a friend by your side."
attack_verb = list("chopped", "sliced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -234,9 +242,9 @@
return ..()
/obj/item/weapon/nullrod/hammmer
name = "relic war hammer"
icon_state = "hammeron"
item_state = "hammeron"
name = "relic war hammer"
desc = "This war hammer cost the chaplain fourty thousand space dollars."
slot_flags = SLOT_BELT
w_class = 5
@@ -255,10 +263,10 @@
hitsound = 'sound/weapons/chainsaw.ogg'
/obj/item/weapon/nullrod/clown
name = "clown dagger"
icon = 'icons/obj/wizard.dmi'
icon_state = "clownrender"
item_state = "gold_horn"
name = "clown dagger"
desc = "Used for absolutely hilarious sacrifices."
hitsound = 'sound/items/bikehorn.ogg'
sharp = 1
@@ -342,9 +350,9 @@
item_state = "bostaff0"
/obj/item/weapon/nullrod/tribal_knife
name = "arrhythmic knife"
icon_state = "crysknife"
item_state = "crysknife"
name = "arrhythmic knife"
w_class = 5
desc = "They say fear is the true mind killer, but stabbing them in the head works too. Honour compels you to not sheathe it once drawn."
sharp = 1
@@ -366,9 +374,9 @@
slowdown = rand(-2, 2)
/obj/item/weapon/nullrod/pitchfork
name = "unholy pitchfork"
icon_state = "pitchfork0"
item_state = "pitchfork0"
name = "unholy pitchfork"
w_class = 3
desc = "Holding this makes you look absolutely devilish."
attack_verb = list("poked", "impaled", "pierced", "jabbed")
@@ -377,9 +385,9 @@
edge = 1
/obj/item/weapon/nullrod/rosary
name = "prayer beads"
icon_state = "rosary"
item_state = null
name = "prayer beads"
desc = "A set of prayer beads used by many of the more traditional religions in space.<br>Vampires and other unholy abominations have learned to fear these."
force = 0
throwforce = 0
@@ -445,5 +453,122 @@
if(prob(10))
to_chat(M, "<span class='userdanger'>Being in the presence of [holder]'s [src] is interfering with your powers!</span>")
/obj/item/weapon/nullrod/missionary_staff
name = "holy staff"
desc = "It has a mysterious, protective aura."
description_antag = "This seemingly standard holy staff is actually a disguised neurotransmitter capable of inducing blind zealotry in its victims. It must be allowed to recharge in the presence of a linked set of missionary robes. Activate the staff while wearing robes to link, then aim the staff at your victim to try and convert them."
reskinned = TRUE
reskin_selectable = FALSE
icon_state = "godstaff-red"
item_state = "godstaff-red"
w_class = 5
force = 5
slot_flags = SLOT_BACK
block_chance = 50
var/team_color = "red"
var/obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe/robes = null //the robes linked with this staff
var/faith = 99 //a conversion requires 100 faith to attempt. faith recharges over time while you are wearing missionary robes that have been linked to the staff.
/obj/item/weapon/nullrod/missionary_staff/New()
team_color = pick("red", "blue")
icon_state = "godstaff-[team_color]"
item_state = "godstaff-[team_color]"
name = "[team_color] holy staff"
/obj/item/weapon/nullrod/missionary_staff/Destroy()
if(robes) //delink on destruction
robes.linked_staff = null
robes = null
return ..()
/obj/item/weapon/nullrod/missionary_staff/attack_self(mob/user)
if(robes) //as long as it is linked, sec can't try to meta by stealing your staff and seeing if they get the link error message
return 0
if(!ishuman(user)) //prevents the horror (runtimes) of missionary xenos and other non-human mobs that might be able to activate the item
return 0
var/mob/living/carbon/human/missionary = user
if(missionary.wear_suit && istype(missionary.wear_suit, /obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe))
var/obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe/robe_to_link = missionary.wear_suit
if(robe_to_link.linked_staff)
to_chat(missionary, "<span class='warning'>These robes are already linked with a staff and cannot support another. Connection refused.</span>")
return 0
robes = robe_to_link
robes.linked_staff = src
to_chat(missionary, "<span class='notice'>Link established. Faith generators initialized. Go spread the word.</span>")
faith = 100 //full charge when a fresh link is made (can't be delinked without destroying the robes so this shouldn't be an exploitable thing)
return 1
else
to_chat(missionary, "<span class='warning'>You must be wearing the missionary robes you wish to link with this staff.</span>")
return 0
/obj/item/weapon/nullrod/missionary_staff/afterattack(mob/living/carbon/human/target, mob/living/carbon/human/missionary, flag, params)
if(!istype(target) || !istype(missionary)) //ishuman checks effectively
return
if(target == missionary) //you can't convert yourself, that would raise too many questions about your own dedication to the cause
return
if(!robes) //staff must be linked to convert
to_chat(missionary, "<span class='warning'>You must link your staff to a set of missionary robes before attempting conversions.</span>")
return
if(!missionary.wear_suit || missionary.wear_suit != robes) //must be wearing the robes to convert
return
if(faith < 100)
to_chat(missionary, "<span class='warning'>You don't have enough faith to attempt a conversion right now.</span>")
return
to_chat(missionary, "<span class='notice'>You concentrate on [target] and begin the conversion ritual...</span>")
if(!target.mind) //no mind means no conversion, but also means no faith lost.
to_chat(missionary, "<span class='warning'>You halt the conversion as you realize [target] is mindless! Best to save your faith for someone more worthwhile.</span>")
return
if(do_after(missionary, 40)) //4 seconds to temporarily convert, roughly 1 second faster than a vampire's enthrall ability
if(faith < 100) //to stop people from trying to exploit the do_after system to multi-convert, we check again if you have enough faith when it completes
to_chat(missionary, "<span class='warning'>You don't have enough faith to complete the conversion on [target]!</span>")
return
if(missionary in viewers(target)) //missionary must maintain line of sight to target, but the target doesn't necessary need to be able to see the missionary
do_convert(target, missionary)
else
to_chat(missionary, "<span class='warning'>You lost sight of the target before they could be converted!</span>")
faith -= 25 //they escaped, so you only lost a little faith (to prevent spamming)
else //the do_after failed, probably because you moved or dropped the staff
to_chat(missionary, "<span class='warning'>Your concentration was broken!</span>")
/obj/item/weapon/nullrod/missionary_staff/proc/do_convert(mob/living/carbon/human/target, mob/living/carbon/human/missionary)
var/convert_duration = 6000 //10 min
if(!target || !istype(target) || !missionary || !istype(missionary))
return
if(ismindslave(target) || target.mind.zealot_master) //mindslaves and zealots override the staff because the staff is just a temporary mindslave
to_chat(missionary, "<span class='warning'>Your faith is strong, but their mind is already slaved to someone else's ideals. Perhaps an inquisition would reveal more...</span>")
faith -= 25 //same faith cost as losing sight of them mid-conversion, but did you just find someone who can lead you to a fellow traitor?
return
if(isloyal(target))
if(prob(20)) //loyalty implants typically overpower this, but you CAN get lucky and convert still (20% chance of success)
faith -= 125 //yes, this puts it negative. it's gonna take longer to recharge if you manage to convert a one of these people to balance the new power you gained through them
to_chat(missionary, "<span class='notice'>Through sheer willpower, you overcome their closed mind and rally [target] to your cause! You may need a bit longer than usual before your faith is fully recharged, and they won't remain loyal to you for long ...</span>")
convert_duration = 3000 //5 min, because the loyalty implant will attempt to counteract the subversion
else //80% chance to fail
faith -= 75
to_chat(missionary, "<span class='warning'>Your faith is strong, but their mind remains closed to your ideals. Your resolve helps you retain a bit of faith though.</span>")
return
else if(target.mind.assigned_role == "Psychiatrist" || target.mind.assigned_role == "Librarian") //fancy book lernin helps counter religion (day 0 job love, what madness!)
if(prob(35)) //35% chance to fail
to_chat(missionary, "<span class='warning'>This one is well trained in matters of the mind... They will not be swayed as easily as you thought...</span>")
faith -=50 //lose half your faith to the book-readers
return
else
to_chat(missionary, "<span class='notice'>You successfully convert [target] to your cause. The following grows because of your faith!</span>")
faith -= 100
else if(target.mind.assigned_role == "Civilian")
if(prob(55)) //55% chance to take LESS faith than normal, because civies are stupid and easily manipulated
to_chat(missionary, "<span class='notice'>Your message seems to resound well with [target]; converting them was much easier than expected.</span>")
faith -= 50
else //45% chance to take the normal 100 faith cost
to_chat(missionary, "<span class='notice'>You successfully convert [target] to your cause. The following grows because of your faith!</span>")
faith -= 100
else //everyone else takes 100 faith cost because they are normal
to_chat(missionary, "<span class='notice'>You successfully convert [target] to your cause. The following grows because of your faith!</span>")
faith -= 100
//if you made it this far: congratulations! you are now a religious zealot!
target.mind.make_zealot(missionary, convert_duration, team_color)
target << sound('sound/misc/wololo.ogg', 0, 1, 25)
missionary.say("WOLOLO!")
missionary << sound('sound/misc/wololo.ogg', 0, 1, 25)
@@ -133,6 +133,8 @@
/obj/item/weapon/implant/dust
name = "duster implant"
desc = "An alarm which monitors host vital signs, transmitting a radio message and dusting the corpse on death."
icon = 'icons/effects/blood.dmi'
icon_state = "remains"
/obj/item/weapon/implant/dust/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
@@ -45,21 +45,21 @@
return -1
H.implanting = 1
to_chat(H, "<span class='notice'>You feel completely loyal to [user.name].</span>")
if(!(user.mind in ticker.mode:implanter))
ticker.mode:implanter[ref] = list()
implanters = ticker.mode:implanter[ref]
if(!(user.mind in ticker.mode.implanter))
ticker.mode.implanter[ref] = list()
implanters = ticker.mode.implanter[ref]
implanters.Add(H.mind)
ticker.mode.implanted.Add(H.mind)
ticker.mode.implanted[H.mind] = user.mind
//ticker.mode:implanter[user.mind] += H.mind
ticker.mode:implanter[ref] = implanters
//ticker.mode.implanter[user.mind] += H.mind
ticker.mode.implanter[ref] = implanters
ticker.mode.traitors += H.mind
H.mind.special_role = SPECIAL_ROLE_TRAITOR
to_chat(H, "<span class='warning'><B>You're now completely loyal to [user.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 = H.mind
MS.target = user:mind
MS.explanation_text = "Obey every order from and protect [user:real_name], the [user:mind:assigned_role=="MODE" ? (user:mind:special_role) : (user:mind:assigned_role)]."
MS.target = user.mind
MS.explanation_text = "Obey every order from and protect [user.real_name], the [user.mind.assigned_role=="MODE" ? (user.mind.special_role) : (user.mind.assigned_role)]."
H.mind.objectives += MS
for(var/datum/objective/objective in H.mind.objectives)
to_chat(H, "<B>Objective #1</B>: [objective.explanation_text]")
+3
View File
@@ -34,6 +34,9 @@
materials = list(MAT_METAL=50)
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
/obj/item/weapon/cane/is_crutch()
return 1
/obj/item/weapon/c_tube
name = "cardboard tube"
desc = "A tube... of cardboard."
+3 -3
View File
@@ -73,13 +73,13 @@
/obj/item/weapon/mop/advanced
desc = "The most advanced tool in a custodian's arsenal. Just think of all the viscera you will clean up with this!"
name = "advanced mop"
mopcap = 10
mopcap = 15
icon_state = "advmop"
item_state = "mop" //meh will do for now until TG makes one
force = 6
throwforce = 8
throw_range = 4
mopspeed = 20
mopspeed = 10
/obj/item/weapon/mop/advanced/cyborg
mopcap = 40
@@ -90,4 +90,4 @@
/obj/item/weapon/mop/advanced/cyborg/examine(mob/user)
..(user)
to_chat(user, "<span class='notice'>The mop's water tank has [round(reagents.get_reagent_amount("water"))] units of water left.</span>")
to_chat(user, "<span class='notice'>The mop's water tank has [round(reagents.get_reagent_amount("water"))] units of water left.</span>")
@@ -33,7 +33,7 @@
icon_state = "trashbag"
item_state = "trashbag"
w_class = 4
w_class = 1
max_w_class = 2
storage_slots = 30
can_hold = list() // any
@@ -46,12 +46,17 @@
/obj/item/weapon/storage/bag/trash/update_icon()
if(contents.len == 0)
w_class = 1
icon_state = "[initial(icon_state)]"
else if(contents.len < 12)
w_class = 4
icon_state = "[initial(icon_state)]1"
else if(contents.len < 21)
w_class = 4
icon_state = "[initial(icon_state)]2"
else icon_state = "[initial(icon_state)]3"
else
w_class = 4
icon_state = "[initial(icon_state)]3"
/obj/item/weapon/storage/bag/trash/cyborg
@@ -499,4 +504,4 @@
max_combined_w_class = 200
w_class = 1
can_hold = list("/obj/item/slime_extract","/obj/item/weapon/reagent_containers/food/snacks/monkeycube","/obj/item/weapon/reagent_containers/syringe","/obj/item/weapon/reagent_containers/glass/beaker","/obj/item/weapon/reagent_containers/glass/bottle","/obj/item/weapon/reagent_containers/blood","/obj/item/weapon/reagent_containers/hypospray/autoinjector")
burn_state = FLAMMABLE
burn_state = FLAMMABLE
@@ -77,8 +77,7 @@
new /obj/item/weapon/melee/energy/sword/saber(src)
new /obj/item/weapon/melee/energy/sword/saber(src)
new /obj/item/weapon/dnainjector/telemut/darkbundle(src)
new /obj/item/clothing/head/chaplain_hood(src)
new /obj/item/clothing/suit/chaplain_hoodie(src)
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
new /obj/item/weapon/card/id/syndicate(src)
return
@@ -205,3 +204,16 @@
..()
new /obj/item/weapon/grenade/clusterbuster/plasma(src)
new /obj/item/weapon/grenade/clusterbuster/n2o(src)
/obj/item/weapon/storage/box/syndie_kit/missionary_set
name = "Missionary Starter Kit"
/obj/item/weapon/storage/box/syndie_kit/missionary_set/New()
..()
new /obj/item/weapon/nullrod/missionary_staff(src)
new /obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe(src)
var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible(src)
if(prob(25)) //an omen of success to come?
B.deity_name = "Success"
B.icon_state = "greentext"
B.item_state = "greentext"
@@ -79,6 +79,9 @@
item_state = "cane_nt"
needs_permit = 0
/obj/item/weapon/melee/classic_baton/ntcane/is_crutch()
return 1
//Telescopic baton
/obj/item/weapon/melee/classic_baton/telescopic
name = "telescopic baton"