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

# Conflicts:
#	code/modules/clothing/glasses/glasses.dm
#	code/modules/customitems/item_defines.dm
This commit is contained in:
Mark van Alphen
2019-05-13 22:08:49 +02:00
562 changed files with 11683 additions and 10675 deletions
+12 -18
View File
@@ -174,14 +174,10 @@
var/list/SPECIALS = list(
/area/shuttle,
/area/admin,
/area/arrival,
/area/centcom,
/area/asteroid,
/area/tdome,
/area/syndicate_station,
/area/wizard_station,
/area/prison
// /area/derelict //commented out, all hail derelict-rebuilders!
/area/wizard_station
)
for(var/type in SPECIALS)
if( istype(A,type) )
@@ -211,23 +207,21 @@
return
var/area/A = new
A.name = str
//var/ma
//ma = A.master ? "[A.master]" : "(null)"
// to_chat(world, "DEBUG: create_area: <br>A.name=[A.name]<br>A.tag=[A.tag]<br>A.master=[ma]")
A.power_equip = 0
A.power_light = 0
A.power_environ = 0
A.always_unpowered = 0
move_turfs_to_area(turfs, A)
A.power_equip = FALSE
A.power_light = FALSE
A.power_environ = FALSE
A.always_unpowered = FALSE
A.set_dynamic_lighting()
for(var/i in 1 to turfs.len)
var/turf/thing = turfs[i]
var/area/old_area = thing.loc
A.contents += thing
thing.change_area(old_area, A)
interact()
return
/obj/item/areaeditor/proc/move_turfs_to_area(var/list/turf/turfs, var/area/A)
A.contents.Add(turfs)
/obj/item/areaeditor/proc/edit_area()
var/area/A = get_area()
var/prevname = "[sanitize(A.name)]"
+1 -1
View File
@@ -37,7 +37,7 @@
visible_message("<span class='notice'>[src] swells up!</span>")
// Animation
icon = 'icons/mob/animal.dmi'
icon = 'icons/mob/carp.dmi'
flick("carp_swell", src)
// Wait for animation to end
sleep(6)
+3 -3
View File
@@ -155,14 +155,14 @@
/obj/item/flash/proc/terrible_conversion_proc(mob/M, mob/user)
if(ishuman(M) && ishuman(user) && M.stat != DEAD)
if(user.mind && (user.mind in ticker.mode.head_revolutionaries))
if(user.mind && (user.mind in SSticker.mode.head_revolutionaries))
if(M.client)
if(M.stat == CONSCIOUS)
M.mind_initialize() //give them a mind datum if they don't have one.
var/resisted
if(!ismindshielded(M))
if(user.mind in ticker.mode.head_revolutionaries)
if(ticker.mode.add_revolutionary(M.mind))
if(user.mind in SSticker.mode.head_revolutionaries)
if(SSticker.mode.add_revolutionary(M.mind))
times_used -- //Flashes less likely to burn out for headrevs when used for conversion
else
resisted = 1
@@ -51,7 +51,7 @@
if(((CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
return ..() //just hit them in the head
if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") //don't have dexterity
if(!(istype(user, /mob/living/carbon/human) || SSticker) && SSticker.mode.name != "monkey") //don't have dexterity
to_chat(user, "<span class='notice'>You don't have the dexterity to do this!</span>")
return
@@ -76,7 +76,7 @@
var/obj/item/organ/internal/eyes/eyes = H.get_int_organ(/obj/item/organ/internal/eyes)
if(M.stat == DEAD || !eyes || M.disabilities & BLIND) //mob is dead or fully blind
to_chat(user, "<span class='notice'>[M]'s pupils are unresponsive to the light!</span>")
else if((XRAY in M.mutations) || eyes.get_dark_view() >= 8) //The mob's either got the X-RAY vision or has a tapetum lucidum (extreme nightvision, i.e. Vulp/Tajara with COLOURBLIND & their monkey forms).
else if((XRAY in M.mutations) || eyes.see_in_dark >= 8) //The mob's either got the X-RAY vision or has a tapetum lucidum (extreme nightvision, i.e. Vulp/Tajara with COLOURBLIND & their monkey forms).
to_chat(user, "<span class='notice'>[M]'s pupils glow eerily!</span>")
else //they're okay!
if(M.flash_eyes(visual = 1))
+2 -2
View File
@@ -31,8 +31,8 @@ var/list/world_uplinks = list()
/obj/item/uplink/New()
..()
welcome = ticker.mode.uplink_welcome
uses = ticker.mode.uplink_uses
welcome = SSticker.mode.uplink_welcome
uses = SSticker.mode.uplink_uses
uplink_items = get_uplink_items()
world_uplinks += src
+1 -2
View File
@@ -245,7 +245,7 @@
to_chat(user, "<span class='warning'>Sticking a dead [M] into the frame would sort of defeat the purpose.</span>")
return
if(M.brainmob.mind in ticker.mode.head_revolutionaries)
if(M.brainmob.mind in SSticker.mode.head_revolutionaries)
to_chat(user, "<span class='warning'>The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the [M].</span>")
return
@@ -306,7 +306,6 @@
O.Namepick()
feedback_inc("cyborg_birth",1)
callHook("borgify", list(O))
forceMove(O)
O.robot_suit = src
@@ -240,6 +240,7 @@ var/global/list/datum/stack_recipe/cloth_recipes = list ( \
var/global/list/datum/stack_recipe/cardboard_recipes = list (
new /datum/stack_recipe("box", /obj/item/storage/box),
new /datum/stack_recipe("large box", /obj/item/storage/box/large, 4),
new /datum/stack_recipe("patch pack", /obj/item/storage/pill_bottle/patch_pack, 2),
new /datum/stack_recipe("light tubes", /obj/item/storage/box/lights/tubes),
new /datum/stack_recipe("light bulbs", /obj/item/storage/box/lights/bulbs),
new /datum/stack_recipe("mouse traps", /obj/item/storage/box/mousetraps),
+26
View File
@@ -1066,6 +1066,32 @@ obj/item/toy/cards/deck/syndicate/black
name = "tuxedo cat plushie"
icon_state = "tuxedocat"
//New generation TG plushies
/obj/item/toy/plushie/lizardplushie
name = "lizard plushie"
desc = "An adorable stuffed toy that resembles a lizardperson."
icon_state = "plushie_lizard"
item_state = "plushie_lizard"
/obj/item/toy/plushie/snakeplushie
name = "snake plushie"
desc = "An adorable stuffed toy that resembles a snake. Not to be mistaken for the real thing."
icon_state = "plushie_snake"
item_state = "plushie_snake"
/obj/item/toy/plushie/nukeplushie
name = "operative plushie"
desc = "An stuffed toy that resembles a syndicate nuclear operative. The tag claims operatives to be purely fictitious."
icon_state = "plushie_nuke"
item_state = "plushie_nuke"
/obj/item/toy/plushie/slimeplushie
name = "slime plushie"
desc = "An adorable stuffed toy that resembles a slime. It is practically just a hacky sack."
icon_state = "plushie_slime"
item_state = "plushie_slime"
/*
* Foam Armblade
*/
+10 -10
View File
@@ -443,15 +443,15 @@
return ..()
if(!user.mind || !user.mind.isholy)
to_chat(user, "<span class='notice'>You are not close enough with [ticker.Bible_deity_name] to use [src].</span>")
to_chat(user, "<span class='notice'>You are not close enough with [SSticker.Bible_deity_name] to use [src].</span>")
return
if(praying)
to_chat(user, "<span class='notice'>You are already using [src].</span>")
return
user.visible_message("<span class='info'>[user] kneels[M == user ? null : " next to [M]"] and begins to utter a prayer to [ticker.Bible_deity_name].</span>", \
"<span class='info'>You kneel[M == user ? null : " next to [M]"] and begin a prayer to [ticker.Bible_deity_name].</span>")
user.visible_message("<span class='info'>[user] kneels[M == user ? null : " next to [M]"] and begins to utter a prayer to [SSticker.Bible_deity_name].</span>", \
"<span class='info'>You kneel[M == user ? null : " next to [M]"] and begin a prayer to [SSticker.Bible_deity_name].</span>")
praying = 1
if(do_after(user, 150, target = M))
@@ -460,18 +460,18 @@
if(target.mind)
if(iscultist(target))
ticker.mode.remove_cultist(target.mind) // This proc will handle message generation.
SSticker.mode.remove_cultist(target.mind) // This proc will handle message generation.
praying = 0
return
if(target.mind.vampire && !target.mind.vampire.get_ability(/datum/vampire_passive/full)) // Getting a full prayer off on a vampire will interrupt their powers for a large duration.
target.mind.vampire.nullified = max(120, target.mind.vampire.nullified + 120)
to_chat(target, "<span class='userdanger'>[user]'s prayer to [ticker.Bible_deity_name] has interfered with your power!</span>")
to_chat(target, "<span class='userdanger'>[user]'s prayer to [SSticker.Bible_deity_name] has interfered with your power!</span>")
praying = 0
return
if(prob(25))
to_chat(target, "<span class='notice'>[user]'s prayer to [ticker.Bible_deity_name] has eased your pain!</span>")
to_chat(target, "<span class='notice'>[user]'s prayer to [SSticker.Bible_deity_name] has eased your pain!</span>")
target.adjustToxLoss(-5)
target.adjustOxyLoss(-5)
target.adjustBruteLoss(-5)
@@ -480,7 +480,7 @@
praying = 0
else
to_chat(user, "<span class='notice'>Your prayer to [ticker.Bible_deity_name] was interrupted.</span>")
to_chat(user, "<span class='notice'>Your prayer to [SSticker.Bible_deity_name] was interrupted.</span>")
praying = 0
/obj/item/nullrod/rosary/process()
@@ -506,13 +506,13 @@
/obj/item/nullrod/salt/attack_self(mob/user)
if(!user.mind || !user.mind.isholy)
to_chat(user, "<span class='notice'>You are not close enough with [ticker.Bible_deity_name] to use [src].</span>")
to_chat(user, "<span class='notice'>You are not close enough with [SSticker.Bible_deity_name] to use [src].</span>")
return
if(!(ghostcall_CD > world.time))
ghostcall_CD = world.time + 3000 //deciseconds..5 minutes
user.visible_message("<span class='info'>[user] kneels and begins to utter a prayer to [ticker.Bible_deity_name] while drawing a circle with salt!</span>", \
"<span class='info'>You kneel and begin a prayer to [ticker.Bible_deity_name] while drawing a circle!</span>")
user.visible_message("<span class='info'>[user] kneels and begins to utter a prayer to [SSticker.Bible_deity_name] while drawing a circle with salt!</span>", \
"<span class='info'>You kneel and begin a prayer to [SSticker.Bible_deity_name] while drawing a circle!</span>")
notify_ghosts("The Chaplain is calling ghosts to [get_area(src)] with [name]!", source = src)
else
to_chat(user, "<span class='notice'>You need to wait before using [src] again.</span>")
@@ -3,7 +3,7 @@
desc = "An alarm which monitors host vital signs and transmits a radio message upon death."
var/mobname = "Will Robinson"
activated = 0
var/static/list/stealth_areas = typecacheof(list(/area/syndicate_station, /area/syndicate_mothership, /area/shuttle/syndicate_elite))
var/static/list/stealth_areas = typecacheof(list(/area/syndicate_mothership, /area/shuttle/syndicate_elite))
/obj/item/implant/death_alarm/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
@@ -19,14 +19,14 @@
/obj/item/implant/mindshield/implant(mob/target)
if(..())
if(target.mind in ticker.mode.head_revolutionaries || is_shadow_or_thrall(target))
if(target.mind in SSticker.mode.head_revolutionaries || is_shadow_or_thrall(target))
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel the corporate tendrils of Nanotrasen try to invade your mind!</span>")
removed(target, 1)
qdel(src)
return -1
if(target.mind in ticker.mode.revolutionaries)
ticker.mode.remove_revolutionary(target.mind)
if(target.mind in ticker.mode.cult)
if(target.mind in SSticker.mode.revolutionaries)
SSticker.mode.remove_revolutionary(target.mind)
if(target.mind in SSticker.mode.cult)
to_chat(target, "<span class='warning'>You feel the corporate tendrils of Nanotrasen try to invade your mind!</span>")
else
to_chat(target, "<span class='notice'>Your mind feels hardened - more resistant to brainwashing.</span>")
@@ -45,15 +45,15 @@
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 SSticker.mode.implanter))
SSticker.mode.implanter[ref] = list()
implanters = SSticker.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.traitors += H.mind
SSticker.mode.implanted.Add(H.mind)
SSticker.mode.implanted[H.mind] = user.mind
//SSticker.mode.implanter[user.mind] += H.mind
SSticker.mode.implanter[ref] = implanters
SSticker.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 [user.p_them()] and assist in [user.p_their()] goals at any cost.</span>")
var/datum/objective/protect/mindslave/MS = new
@@ -64,8 +64,8 @@
for(var/datum/objective/objective in H.mind.objectives)
to_chat(H, "<B>Objective #1</B>: [objective.explanation_text]")
ticker.mode.update_traitor_icons_added(user.mind)
ticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds
SSticker.mode.update_traitor_icons_added(user.mind)
SSticker.mode.update_traitor_icons_added(H.mind)//handles datahuds/observerhuds
if(user.mind.som)//do not add if not a traitor..and you just picked up an implanter in the hall...
var/datum/mindslaves/slaved = user.mind.som
@@ -77,12 +77,12 @@
log_admin("[key_name(user)] has mind-slaved [key_name(H)].")
activated = 1
if(jobban_isbanned(M, ROLE_SYNDICATE))
ticker.mode.replace_jobbanned_player(M, ROLE_SYNDICATE)
SSticker.mode.replace_jobbanned_player(M, ROLE_SYNDICATE)
return 1
return 0
/obj/item/implant/traitor/removed(mob/target)
if(..())
ticker.mode.remove_traitor_mind(target.mind)
SSticker.mode.remove_traitor_mind(target.mind)
return 1
return 0
+1 -1
View File
@@ -27,7 +27,7 @@
if(user)
user.update_inv_l_hand()
user.update_inv_r_hand()
if(user.mind in ticker.mode.wizards)
if(user.mind in SSticker.mode.wizards)
user.flying = wielded ? 1 : 0
if(wielded)
to_chat(user, "<span class='notice'>You hold \the [src] between your legs.</span>")
@@ -4,23 +4,22 @@
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "utilitybelt"
item_state = "utility"
lefthand_file = 'icons/mob/inhands/equipment/belt_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/belt_righthand.dmi'
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
var/use_item_overlays = 0 // Do we have overlays for items held inside the belt?
/obj/item/storage/belt/update_icon()
if(use_item_overlays)
overlays.Cut()
for(var/obj/item/I in contents)
overlays += "[I.name]"
..()
/obj/item/storage/belt/proc/can_use()
return is_equipped()
/obj/item/storage/belt/MouseDrop(obj/over_object as obj, src_location, over_location)
var/mob/M = usr
if(!istype(over_object, /obj/screen))
@@ -68,7 +67,7 @@
new /obj/item/weldingtool(src)
new /obj/item/crowbar(src)
new /obj/item/wirecutters(src)
new /obj/item/stack/cable_coil(src, 30, pick(COLOR_RED, COLOR_YELLOW, COLOR_ORANGE))
new /obj/item/stack/cable_coil/random(src, 30)
update_icon()
/obj/item/storage/belt/utility/full/multitool/New()
@@ -99,7 +98,7 @@
new /obj/item/crowbar/power(src)
new /obj/item/weldingtool/experimental(src)//This can be changed if this is too much
new /obj/item/multitool(src)
new /obj/item/stack/cable_coil(src, 30, pick(COLOR_RED, COLOR_YELLOW, COLOR_ORANGE))
new /obj/item/stack/cable_coil/random(src, 30)
new /obj/item/extinguisher/mini(src)
new /obj/item/analyzer(src)
update_icon()
@@ -184,7 +183,6 @@
new /obj/item/reagent_containers/food/pill/salicylic(src)
update_icon()
/obj/item/storage/belt/botany
name = "botanist belt"
desc = "Can hold various botanical supplies."
@@ -207,7 +205,6 @@
/obj/item/wrench,
)
/obj/item/storage/belt/security
name = "security belt"
desc = "Can hold security gear like handcuffs and flashes."
@@ -472,7 +469,6 @@
..()
update_icon()
/obj/item/storage/belt/holster
name = "shoulder holster"
desc = "A holster to conceal a carried handgun. WARNING: Badasses only."
@@ -510,7 +506,6 @@
W.charges = W.max_charges
update_icon()
/obj/item/storage/belt/fannypack
name = "fannypack"
desc = "A dorky fannypack for keeping small items in."
@@ -599,7 +594,6 @@
// Bluespace Belt
// -------------------------------------
/obj/item/storage/belt/bluespace
name = "Belt of Holding"
desc = "The greatest in pants-supporting technology."
@@ -632,8 +626,6 @@
var/bolacount = 0
var/cooldown = 0
/obj/item/storage/belt/bluespace/owlman/New()
..()
new /obj/item/grenade/smokebomb(src)
@@ -45,7 +45,7 @@
else
M.LAssailant = user
if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
if(!(istype(user, /mob/living/carbon/human) || SSticker) && SSticker.mode.name != "monkey")
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
if(!user.mind || !user.mind.isholy)
@@ -151,8 +151,8 @@
src.boxes.screen_loc = "[tx]:,[ty] to [mx],[my]"
for(var/obj/O in src.contents)
O.screen_loc = "[cx],[cy]"
O.layer = 20
O.plane = HUD_PLANE
O.layer = ABOVE_HUD_LAYER
O.plane = ABOVE_HUD_PLANE
cx++
if(cx > mx)
cx = tx
@@ -171,8 +171,8 @@
ND.sample_object.mouse_opacity = MOUSE_OPACITY_OPAQUE
ND.sample_object.screen_loc = "[cx]:16,[cy]:16"
ND.sample_object.maptext = "<font color='white'>[(ND.number > 1)? "[ND.number]" : ""]</font>"
ND.sample_object.layer = 20
ND.sample_object.plane = HUD_PLANE
ND.sample_object.layer = ABOVE_HUD_LAYER
ND.sample_object.plane = ABOVE_HUD_PLANE
cx++
if(cx > (4+cols))
cx = 4
@@ -182,8 +182,8 @@
O.mouse_opacity = MOUSE_OPACITY_OPAQUE //This is here so storage items that spawn with contents correctly have the "click around item to equip"
O.screen_loc = "[cx]:16,[cy]:16"
O.maptext = ""
O.layer = 20
O.plane = HUD_PLANE
O.layer = ABOVE_HUD_LAYER
O.plane = ABOVE_HUD_PLANE
cx++
if(cx > (4+cols))
cx = 4
@@ -312,6 +312,7 @@
if(usr.s_active)
usr.s_active.show_to(usr)
W.mouse_opacity = MOUSE_OPACITY_OPAQUE //So you can click on the area around the item to equip it, instead of having to pixel hunt
W.in_inventory = TRUE
update_icon()
return 1
@@ -332,8 +333,8 @@
if(ismob(loc))
W.dropped(usr)
if(ismob(new_location))
W.layer = 20
W.plane = HUD_PLANE
W.layer = ABOVE_HUD_LAYER
W.plane = ABOVE_HUD_PLANE
else
W.layer = initial(W.layer)
W.plane = initial(W.plane)
@@ -447,17 +448,18 @@
else
verbs -= /obj/item/storage/verb/toggle_gathering_mode
src.boxes = new /obj/screen/storage( )
src.boxes.name = "storage"
src.boxes.master = src
src.boxes.icon_state = "block"
src.boxes.screen_loc = "7,7 to 10,8"
src.boxes.layer = 19
src.closer = new /obj/screen/close( )
src.closer.master = src
src.closer.icon_state = "x"
src.closer.layer = 20
src.closer.plane = HUD_PLANE
boxes = new /obj/screen/storage( )
boxes.name = "storage"
boxes.master = src
boxes.icon_state = "block"
boxes.screen_loc = "7,7 to 10,8"
boxes.layer = HUD_LAYER
boxes.plane = HUD_PLANE
closer = new /obj/screen/close( )
closer.master = src
closer.icon_state = "x"
closer.layer = ABOVE_HUD_LAYER
closer.plane = ABOVE_HUD_PLANE
orient2hud()
/obj/item/storage/Destroy()
@@ -469,7 +471,7 @@
return ..()
/obj/item/storage/emp_act(severity)
if(!istype(src.loc, /mob/living))
if(!istype(loc, /mob/living))
for(var/obj/O in contents)
O.emp_act(severity)
..()