mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-31 07:57:47 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into DWI
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
attack_verb = list("attacked", "coloured")
|
||||
var/colour = "#FF0000" //RGB
|
||||
var/drawtype = "rune"
|
||||
var/list/graffiti = list("body","amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","up","down","left","right","heart","borgsrogue","voxpox","shitcurity","catbeast","hieroglyphs1","hieroglyphs2","hieroglyphs3","security","syndicate1","syndicate2","nanotrasen","lie","valid")
|
||||
var/list/graffiti = list("body","amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","up","down","left","right","heart","borgsrogue","voxpox","shitcurity","catbeast","hieroglyphs1","hieroglyphs2","hieroglyphs3","security","syndicate1","syndicate2","nanotrasen","lie","valid","arrowleft","arrowright","arrowup","arrowdown","chicken","hailcrab","brokenheart","peace","scribble","scribble2","scribble3","skrek","squish","tunnelsnake","yip","youaredead")
|
||||
var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
|
||||
var/uses = 30 //0 for unlimited uses
|
||||
var/instant = 0
|
||||
@@ -92,19 +92,19 @@
|
||||
if(uses)
|
||||
uses--
|
||||
if(!uses)
|
||||
to_chat(user, "<span class='danger'>You used up your [src.name]!</span>")
|
||||
to_chat(user, "<span class='danger'>You used up your [name]!</span>")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/toy/crayon/attack(mob/M as mob, mob/user as mob)
|
||||
var/huffable = istype(src,/obj/item/toy/crayon/spraycan)
|
||||
if(M == user)
|
||||
to_chat(user, "You take a [huffable ? "huff" : "bite"] of the [src.name]. Delicious!")
|
||||
to_chat(user, "You take a [huffable ? "huff" : "bite"] of the [name]. Delicious!")
|
||||
user.nutrition += 5
|
||||
if(uses)
|
||||
uses -= 5
|
||||
if(uses <= 0)
|
||||
to_chat(user, "<span class='danger'>There is no more of [src.name] left!</span>")
|
||||
to_chat(user, "<span class='danger'>There is no more of [name] left!</span>")
|
||||
qdel(src)
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -277,7 +277,7 @@ var/global/list/default_medbay_channels = list(
|
||||
..()
|
||||
|
||||
/mob/living/automatedannouncer/proc/autocleanup()
|
||||
log_debug("An announcer somehow managed to outlive the radio! Deleting! Area: [get_area(src)], Name: \"[name]\", Message: \"[message]\"")
|
||||
log_runtime(EXCEPTION("An announcer somehow managed to outlive the radio! Deleting!"), src, list("Message: '[message]'"))
|
||||
qdel(src)
|
||||
|
||||
// Interprets the message mode when talking into a radio, possibly returning a connection datum
|
||||
|
||||
@@ -129,3 +129,11 @@
|
||||
turf_type = /turf/simulated/floor/silent
|
||||
mineralType = "tranquillite"
|
||||
materials = list(MAT_TRANQUILLITE=500)
|
||||
|
||||
//Pod floor
|
||||
/obj/item/stack/tile/pod
|
||||
name = "pod floor tile"
|
||||
singular_name = "pod floor tile"
|
||||
desc = "A grooved floor tile."
|
||||
icon_state = "tile_pod"
|
||||
turf_type = /turf/simulated/floor/pod
|
||||
@@ -352,7 +352,7 @@
|
||||
if(ghost && !ghost.client)
|
||||
// In case the ghost's not getting deleted for some reason
|
||||
H.key = ghost.key
|
||||
log_to_dd("Ghost of name [ghost.name] is bound to [H.real_name], but lacks a client. Deleting ghost.")
|
||||
log_runtime(EXCEPTION("Ghost of name [ghost.name] is bound to [H.real_name], but lacks a client. Deleting ghost."), src)
|
||||
|
||||
qdel(ghost)
|
||||
ghost = null
|
||||
@@ -499,7 +499,7 @@
|
||||
if(ghost && !ghost.client)
|
||||
// In case the ghost's not getting deleted for some reason
|
||||
H.key = ghost.key
|
||||
log_to_dd("Ghost of name [ghost.name] is bound to [H.real_name], but lacks a client. Deleting ghost.")
|
||||
log_runtime(EXCEPTION("Ghost of name [ghost.name] is bound to [H.real_name], but lacks a client. Deleting ghost."), H)
|
||||
|
||||
qdel(ghost)
|
||||
ghost = null
|
||||
|
||||
@@ -1,16 +1,49 @@
|
||||
/obj/item/weapon/dice
|
||||
name = "d6"
|
||||
/obj/item/weapon/storage/pill_bottle/dice
|
||||
name = "bag of dice"
|
||||
desc = "Contains all the luck you'll ever need."
|
||||
icon = 'icons/obj/dice.dmi'
|
||||
icon_state = "dicebag"
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dice/New()
|
||||
..()
|
||||
var/special_die = pick("1","2","fudge","00","100")
|
||||
if(special_die == "1")
|
||||
new /obj/item/weapon/dice/d1(src)
|
||||
if(special_die == "2")
|
||||
new /obj/item/weapon/dice/d2(src)
|
||||
new /obj/item/weapon/dice/d4(src)
|
||||
new /obj/item/weapon/dice/d6(src)
|
||||
if(special_die == "fudge")
|
||||
new /obj/item/weapon/dice/fudge(src)
|
||||
new /obj/item/weapon/dice/d8(src)
|
||||
new /obj/item/weapon/dice/d10(src)
|
||||
if(special_die == "00")
|
||||
new /obj/item/weapon/dice/d00(src)
|
||||
new /obj/item/weapon/dice/d12(src)
|
||||
new /obj/item/weapon/dice/d20(src)
|
||||
if(special_die == "100")
|
||||
new /obj/item/weapon/dice/d100(src)
|
||||
|
||||
/obj/item/weapon/dice //depreciated d6, use /obj/item/weapon/dice/d6 if you actually want a d6
|
||||
name = "die"
|
||||
desc = "A die with six sides. Basic and servicable."
|
||||
icon = 'icons/obj/dice.dmi'
|
||||
icon_state = "d6"
|
||||
w_class = 1
|
||||
var/sides = 6
|
||||
var/result = null
|
||||
var/list/special_faces = list() //entries should match up to sides var if used
|
||||
|
||||
/obj/item/weapon/dice/New()
|
||||
result = rand(1, sides)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/dice/d1
|
||||
name = "d1"
|
||||
desc = "A die with one side. Deterministic!"
|
||||
icon_state = "d1"
|
||||
sides = 1
|
||||
|
||||
/obj/item/weapon/dice/d2
|
||||
name = "d2"
|
||||
desc = "A die with two sides. Coins are undignified!"
|
||||
@@ -23,6 +56,16 @@
|
||||
icon_state = "d4"
|
||||
sides = 4
|
||||
|
||||
/obj/item/weapon/dice/d6
|
||||
name = "d6"
|
||||
|
||||
/obj/item/weapon/dice/fudge
|
||||
name = "fudge die"
|
||||
desc = "A die with six sides but only three results. Is this a plus or a minus? Your mind is drawing a blank..."
|
||||
sides = 3 //shhh
|
||||
icon_state = "fudge"
|
||||
special_faces = list("minus","blank","plus")
|
||||
|
||||
/obj/item/weapon/dice/d8
|
||||
name = "d8"
|
||||
desc = "A die with eight sides. It feels... lucky."
|
||||
@@ -53,6 +96,15 @@
|
||||
icon_state = "d20"
|
||||
sides = 20
|
||||
|
||||
/obj/item/weapon/dice/d100
|
||||
name = "d100"
|
||||
desc = "A die with one hundred sides! Probably not fairly weighted..."
|
||||
icon_state = "d100"
|
||||
sides = 100
|
||||
|
||||
/obj/item/weapon/dice/d100/update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/dice/d20/e20
|
||||
var/triggered = 0
|
||||
|
||||
@@ -64,8 +116,9 @@
|
||||
return
|
||||
diceroll(user)
|
||||
|
||||
/obj/item/weapon/dice/proc/diceroll(mob/user as mob)
|
||||
/obj/item/weapon/dice/proc/diceroll(mob/user)
|
||||
result = rand(1, sides)
|
||||
var/fake_result = rand(1, sides)//Daredevil isn't as good as he used to be
|
||||
var/comment = ""
|
||||
if(sides == 20 && result == 20)
|
||||
comment = "Nat 20!"
|
||||
@@ -74,20 +127,14 @@
|
||||
update_icon()
|
||||
if(initial(icon_state) == "d00")
|
||||
result = (result - 1)*10
|
||||
if(special_faces.len == sides)
|
||||
result = special_faces[result]
|
||||
if(user != null) //Dice was rolled in someone's hand
|
||||
user.visible_message("<span class='notice'>[user] has thrown [src]. It lands on [result]. [comment]</span>", \
|
||||
"<span class='notice'>You throw [src]. It lands on [result]. [comment]</span>", \
|
||||
"<span class='notice'>You hear [src] landing on [result]. [comment]</span>")
|
||||
"<span class='italics'>You hear [src] rolling, it sounds like a [fake_result].</span>")
|
||||
else if(src.throwing == 0) //Dice was thrown and is coming to rest
|
||||
visible_message("<span class='notice'>[src] rolls to a stop, landing on [result]. [comment]</span>")
|
||||
/*
|
||||
/obj/item/weapon/dice/d4/Crossed(var/mob/living/carbon/human/H)
|
||||
if(istype(H) && !H.shoes)
|
||||
to_chat(H, "<span class='userdanger'>You step on the D4!</span>")
|
||||
H.apply_damage(4,BRUTE,(pick("l_leg", "r_leg")))
|
||||
H.Weaken(3)
|
||||
*///ew.
|
||||
|
||||
|
||||
/obj/item/weapon/dice/d20/e20/diceroll(mob/user as mob, thrown)
|
||||
if(triggered)
|
||||
@@ -112,6 +159,7 @@
|
||||
/obj/item/weapon/dice/update_icon()
|
||||
overlays.Cut()
|
||||
overlays += "[src.icon_state][src.result]"
|
||||
|
||||
/obj/item/weapon/storage/box/dice
|
||||
name = "Box of dice"
|
||||
desc = "ANOTHER ONE!? FUCK!"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
@@ -212,7 +220,7 @@
|
||||
|
||||
if(candidates.len)
|
||||
theghost = pick(candidates)
|
||||
var/mob/living/simple_animal/shade/S = new(src)
|
||||
var/mob/living/simple_animal/shade/sword/S = new(src)
|
||||
S.real_name = name
|
||||
S.name = name
|
||||
S.ckey = theghost.ckey
|
||||
@@ -227,16 +235,16 @@
|
||||
possessed = FALSE
|
||||
|
||||
/obj/item/weapon/nullrod/scythe/talking/Destroy()
|
||||
for(var/mob/living/simple_animal/shade/S in contents)
|
||||
for(var/mob/living/simple_animal/shade/sword/S in contents)
|
||||
to_chat(S, "You were destroyed!")
|
||||
S.ghostize()
|
||||
qdel(S)
|
||||
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]")
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -447,6 +447,7 @@
|
||||
icon_state = "sheath"
|
||||
item_state = "sheath"
|
||||
storage_slots = 1
|
||||
w_class = 4
|
||||
max_w_class = 4
|
||||
can_hold = list("/obj/item/weapon/melee/rapier")
|
||||
|
||||
|
||||
@@ -276,16 +276,6 @@
|
||||
new /obj/item/weapon/reagent_containers/food/pill/charcoal( src )
|
||||
new /obj/item/weapon/reagent_containers/food/pill/charcoal( src )
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dice
|
||||
name = "pack of dice"
|
||||
desc = "It's a small container with dice inside."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/dice( src )
|
||||
new /obj/item/weapon/dice/d20( src )
|
||||
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/painkillers
|
||||
name = "Pill Bottle (Salicylic Acid)"
|
||||
desc = "Contains various pills for minor pain relief."
|
||||
|
||||
@@ -576,5 +576,5 @@
|
||||
if(islist(thing))
|
||||
list_to_object(thing, src)
|
||||
else
|
||||
log_debug("Non-list thing: [thing]. We are a [name]")
|
||||
log_runtime(EXCEPTION("Non-list thing found in storage/deserialize."), src, list("Thing: [thing]"))
|
||||
..()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
icon = loc
|
||||
if(!in_range(src, user))
|
||||
if(icon == src)
|
||||
to_chat(user, "\blue It's \a [bicon(icon)][src]! If you want any more information you'll need to get closer.")
|
||||
to_chat(user, "<span class='notice'>It's \a [bicon(icon)][src]! If you want any more information you'll need to get closer.</span>")
|
||||
return
|
||||
|
||||
var/celsius_temperature = air_contents.temperature-T0C
|
||||
|
||||
@@ -241,12 +241,20 @@
|
||||
if(!(S.status & ORGAN_ROBOT) || user.a_intent != I_HELP || S.open == 2)
|
||||
return ..()
|
||||
|
||||
if(!isOn()) //why wasn't this being checked already?
|
||||
to_chat(user, "<span class='warning'>Turn on [src] before attempting repairs!</span>")
|
||||
return 1
|
||||
|
||||
if(S.brute_dam)
|
||||
if(S.brute_dam < ROBOLIMB_SELF_REPAIR_CAP)
|
||||
if(remove_fuel(0,null))
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
S.heal_damage(15,0,0,1)
|
||||
user.visible_message("<span class='alert'>\The [user] patches some dents on \the [M]'s [S.name] with \the [src].</span>")
|
||||
if(get_fuel() >= 1)
|
||||
if(H == user)
|
||||
if(!do_mob(user, H, 10))
|
||||
return 1
|
||||
if(remove_fuel(1,null))
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
S.heal_damage(15,0,0,1)
|
||||
user.visible_message("<span class='alert'>\The [user] patches some dents on \the [M]'s [S.name] with \the [src].</span>")
|
||||
else if(S.open != 2)
|
||||
to_chat(user, "<span class='warning'>Need more welding fuel!</span>")
|
||||
return 1
|
||||
|
||||
@@ -82,13 +82,6 @@
|
||||
user.put_in_inactive_hand(O)
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/mob_can_equip(mob/M, slot)
|
||||
//Cannot equip wielded items.
|
||||
if(wielded)
|
||||
to_chat(M, "<span class='warning'>Unwield the [name] first!</span>")
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/twohanded/dropped(mob/user)
|
||||
..()
|
||||
//handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
|
||||
@@ -108,6 +101,12 @@
|
||||
else //Trying to wield it
|
||||
wield(user)
|
||||
|
||||
|
||||
/obj/item/weapon/twohanded/equip_to_best_slot(mob/M)
|
||||
if(..())
|
||||
unwield(M)
|
||||
return
|
||||
|
||||
///////////OFFHAND///////////////
|
||||
/obj/item/weapon/twohanded/offhand
|
||||
w_class = 5
|
||||
@@ -130,8 +129,8 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/twohanded/required/mob_can_equip(M as mob, slot)
|
||||
if(wielded)
|
||||
to_chat(M, "<span class='warning'>[src.name] is too cumbersome to carry with anything but your hands!</span>")
|
||||
if(wielded && !slot_flags)
|
||||
to_chat(M, "<span class='warning'>[src] is too cumbersome to carry with anything but your hands!</span>")
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
@@ -140,12 +139,18 @@
|
||||
if(get_dist(src,user) > 1)
|
||||
return 0
|
||||
if(H != null)
|
||||
to_chat(user, "<span class='notice'>[src.name] is too cumbersome to carry in one hand!</span>")
|
||||
to_chat(user, "<span class='notice'>[src] is too cumbersome to carry in one hand!</span>")
|
||||
return
|
||||
var/obj/item/weapon/twohanded/offhand/O = new(user)
|
||||
user.put_in_inactive_hand(O)
|
||||
if(loc != user)
|
||||
wield(user)
|
||||
..()
|
||||
wielded = 1
|
||||
|
||||
/obj/item/weapon/twohanded/required/equipped(mob/user, slot)
|
||||
..()
|
||||
if(slot == slot_l_hand || slot == slot_r_hand)
|
||||
wield(user)
|
||||
else
|
||||
unwield(user)
|
||||
|
||||
/*
|
||||
* Fireaxe
|
||||
|
||||
Reference in New Issue
Block a user