Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into super-special-awesome-dynamic
This commit is contained in:
@@ -203,11 +203,12 @@ GLOBAL_LIST_EMPTY(bloody_footprints_cache)
|
||||
#define LOCKED_SENSORS 2
|
||||
|
||||
//Wet floor type flags. Stronger ones should be higher in number.
|
||||
#define TURF_DRY 0
|
||||
#define TURF_WET_WATER 1
|
||||
#define TURF_WET_PERMAFROST 2
|
||||
#define TURF_WET_ICE 4
|
||||
#define TURF_WET_LUBE 8
|
||||
#define TURF_DRY (0)
|
||||
#define TURF_WET_WATER (1<<0)
|
||||
#define TURF_WET_PERMAFROST (1<<1)
|
||||
#define TURF_WET_ICE (1<<2)
|
||||
#define TURF_WET_LUBE (1<<3)
|
||||
#define TURF_WET_SUPERLUBE (1<<4)
|
||||
|
||||
#define IS_WET_OPEN_TURF(O) O.GetComponent(/datum/component/wet_floor)
|
||||
|
||||
@@ -515,3 +516,5 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S
|
||||
|
||||
//Misc text define. Does 4 spaces. Used as a makeshift tabulator.
|
||||
#define FOURSPACES " "
|
||||
|
||||
#define CRYOMOBS 'icons/obj/cryo_mobs.dmi'
|
||||
|
||||
@@ -201,6 +201,8 @@
|
||||
#define SLIDE (1<<1)
|
||||
#define GALOSHES_DONT_HELP (1<<2)
|
||||
#define SLIDE_ICE (1<<3)
|
||||
#define SLIP_WHEN_CRAWLING (1<<4) //clown planet ruin
|
||||
#define SLIP_WHEN_JOGGING (1<<5) //slips prevented by walking are also dodged if the mob is not sprinting or fatigued... unless this flag is on.
|
||||
|
||||
#define MAX_CHICKENS 50
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/// Represents a proc or verb path.
|
||||
///
|
||||
/// Despite having no DM-defined static type, proc paths have some variables,
|
||||
/// listed below. These are not modifiable, but for a given procpath P,
|
||||
/// `new P(null, "Name", "Desc")` can be used to create a new procpath with the
|
||||
/// same code but new `name` and `desc` values. The other variables cannot be
|
||||
/// changed in this way.
|
||||
///
|
||||
/// This type exists only to act as an annotation, providing reasonable static
|
||||
/// typing for procpaths. Previously, types like `/atom/verb` were used, with
|
||||
/// the `name` and `desc` vars of `/atom` thus being accessible. Proc and verb
|
||||
/// paths will fail `istype` and `ispath` checks against `/procpath`.
|
||||
/procpath
|
||||
// Although these variables are effectively const, if they are marked const
|
||||
// below, their accesses are optimized away.
|
||||
|
||||
/// A text string of the verb's name.
|
||||
var/name as text
|
||||
/// The verb's help text or description.
|
||||
var/desc as text
|
||||
/// The category or tab the verb will appear in.
|
||||
var/category as text
|
||||
/// Only clients/mobs with `see_invisibility` higher can use the verb.
|
||||
var/invisibility as num
|
||||
@@ -0,0 +1,13 @@
|
||||
// Interfaces for the SpacemanDMM linter, define'd to nothing when the linter
|
||||
// is not in use.
|
||||
|
||||
// The SPACEMAN_DMM define is set by the linter and other tooling when it runs.
|
||||
#ifdef SPACEMAN_DMM
|
||||
#define RETURN_TYPE(X) set SpacemanDMM_return_type = X
|
||||
#define SHOULD_CALL_PARENT(X) set SpacemanDMM_should_call_parent = X
|
||||
#define UNLINT(X) SpacemanDMM_unlint(X)
|
||||
#else
|
||||
#define RETURN_TYPE(X)
|
||||
#define SHOULD_CALL_PARENT(X)
|
||||
#define UNLINT(X) X
|
||||
#endif
|
||||
@@ -192,7 +192,6 @@
|
||||
#define STASIS_MUTE "stasis"
|
||||
#define GENETICS_SPELL "genetics_spell"
|
||||
#define EYES_COVERED "eyes_covered"
|
||||
#define CULT_TRAIT "cult"
|
||||
#define CLOWN_NUKE_TRAIT "clown-nuke"
|
||||
#define STICKY_MOUSTACHE_TRAIT "sticky-moustache"
|
||||
#define CHAINSAW_FRENZY_TRAIT "chainsaw-frenzy"
|
||||
@@ -214,4 +213,4 @@
|
||||
#define NINJA_SUIT_TRAIT "ninja-suit"
|
||||
#define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant"
|
||||
#define ABDUCTOR_ANTAGONIST "abductor-antagonist"
|
||||
#define MADE_UNCLONEABLE "made-uncloneable"
|
||||
#define MADE_UNCLONEABLE "made-uncloneable"
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
|
||||
//returns a new list with only atoms that are in typecache L
|
||||
/proc/typecache_filter_list(list/atoms, list/typecache)
|
||||
RETURN_TYPE(/list)
|
||||
. = list()
|
||||
for(var/thing in atoms)
|
||||
var/atom/A = thing
|
||||
@@ -131,6 +132,7 @@
|
||||
. += A
|
||||
|
||||
/proc/typecache_filter_list_reverse(list/atoms, list/typecache)
|
||||
RETURN_TYPE(/list)
|
||||
. = list()
|
||||
for(var/thing in atoms)
|
||||
var/atom/A = thing
|
||||
@@ -257,6 +259,7 @@
|
||||
|
||||
//Pick a random element from the list and remove it from the list.
|
||||
/proc/pick_n_take(list/L)
|
||||
RETURN_TYPE(L[_].type)
|
||||
if(L.len)
|
||||
var/picked = rand(1,L.len)
|
||||
. = L[picked]
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#define WRITE_LOG(log, text) rustg_log_write(log, text)
|
||||
|
||||
//print a warning message to world.log
|
||||
#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [src] usr: [usr].")
|
||||
#define WARNING(MSG) warning("[MSG] in [__FILE__] at line [__LINE__] src: [UNLINT(src)] usr: [usr].")
|
||||
/proc/warning(msg)
|
||||
msg = "## WARNING: [msg]"
|
||||
log_world(msg)
|
||||
|
||||
@@ -68,9 +68,10 @@
|
||||
/atom/movable/Adjacent(var/atom/neighbor)
|
||||
if(neighbor == loc)
|
||||
return TRUE
|
||||
if(!isturf(loc))
|
||||
var/turf/T = loc
|
||||
if(!istype(T))
|
||||
return FALSE
|
||||
if(loc.Adjacent(neighbor,target = neighbor, mover = src))
|
||||
if(T.Adjacent(neighbor, neighbor, src))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
if(_directory)
|
||||
directory = _directory
|
||||
if(entries)
|
||||
CRASH("[THIS_PROC_TYPE_WEIRD] called more than once!")
|
||||
CRASH("/datum/controller/configuration/Load() called more than once!")
|
||||
InitEntries()
|
||||
LoadModes()
|
||||
if(fexists("[directory]/config.txt") && LoadEntries("config.txt") <= 1)
|
||||
|
||||
@@ -166,7 +166,7 @@ SUBSYSTEM_DEF(traumas)
|
||||
|
||||
"syndicate" = typecacheof(list(/obj/item/stack/tile/mineral/plastitanium, /obj/machinery/computer/shuttle/syndicate, /obj/machinery/computer/shuttle/syndicate/recall, /obj/machinery/computer/shuttle/syndicate/drop_pod, /obj/machinery/computer/camera_advanced/shuttle_docker/syndicate, /obj/machinery/recharge_station,
|
||||
/obj/machinery/porta_turret/syndicate, /obj/structure/closet/syndicate, /obj/machinery/suit_storage_unit/syndicate, /obj/item/clothing/under/syndicate, /obj/item/folder/syndicate, /obj/item/documents/syndicate, /obj/item/clothing/glasses/phantomthief/syndicate, /obj/item/antag_spawner/nuke_ops, /obj/item/storage/box/syndicate,
|
||||
/obj/structure/fluff/empty_sleeper/syndicate, /obj/item/implant/radio/syndicate, /obj/item/clothing/head/helmet/space/syndicate, /obj/machinery/nuclearbomb/syndicate, /obj/item/grenade/syndieminibomb, /obj/item/storage/backpack/duffelbag/syndie, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver/syndie,
|
||||
/obj/structure/fluff/empty_sleeper/syndicate, /obj/item/implant/radio/syndicate, /obj/item/clothing/head/helmet/space/syndicate, /obj/machinery/nuclearbomb/syndicate, /obj/item/grenade/syndieminibomb, /obj/item/storage/backpack/duffelbag/syndie, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver,
|
||||
/obj/item/gun/ballistic/automatic/shotgun/bulldog, /obj/item/gun/ballistic/automatic/c20r, /obj/item/gun/ballistic/automatic/m90, /obj/item/gun/ballistic/automatic/l6_saw, /obj/item/storage/belt/grenade/full, /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate, /obj/item/gun/energy/kinetic_accelerator/crossbow,
|
||||
/obj/item/melee/transforming/energy/sword/saber, /obj/item/twohanded/dualsaber, /obj/item/melee/powerfist, /obj/item/storage/box/syndie_kit, /obj/item/grenade/spawnergrenade/manhacks, /obj/item/grenade/chem_grenade/bioterrorfoam, /obj/item/reagent_containers/spray/chemsprayer/bioterror, /obj/item/ammo_box/magazine/m10mm,
|
||||
/obj/item/ammo_box/magazine/pistolm9mm, /obj/item/ammo_box/a357, /obj/item/ammo_box/magazine/m12g, /obj/item/ammo_box/magazine/mm195x129, /obj/item/antag_spawner/nuke_ops, /obj/mecha/combat/gygax/dark, /obj/mecha/combat/marauder/mauler, /obj/item/soap/syndie, /obj/item/gun/syringe/syndicate, /obj/item/cartridge/virus/syndicate,
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
.=..()
|
||||
opentime = 0
|
||||
|
||||
/datum/browser/modal/open()
|
||||
/datum/browser/modal/open(use_onclose = 1)
|
||||
set waitfor = 0
|
||||
opentime = world.time
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
var/mood_level = 5 //To track what stage of moodies they're on
|
||||
var/sanity_level = 5 //To track what stage of sanity they're on
|
||||
var/mood_modifier = 1 //Modifier to allow certain mobs to be less affected by moodlets
|
||||
var/datum/mood_event/list/mood_events = list()
|
||||
var/list/datum/mood_event/mood_events = list()
|
||||
var/insanity_effect = 0 //is the owner being punished for low mood? If so, how much?
|
||||
var/obj/screen/mood/screen_obj
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/component/storage/concrete/secret_satchel/can_be_inserted(I,msg,user)
|
||||
/datum/component/storage/concrete/secret_satchel/can_be_inserted(obj/item/I, stop_messages = FALSE, mob/M)
|
||||
if(SSpersistence.spawned_objects[I])
|
||||
to_chat(user, "<span class='warning'>[I] is unstable after its journey through space and time, it wouldn't survive another trip.</span>")
|
||||
to_chat(M, "<span class='warning'>[I] is unstable after its journey through space and time, it wouldn't survive another trip.</span>")
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
@@ -88,6 +88,9 @@
|
||||
if(TURF_WET_PERMAFROST)
|
||||
intensity = 120
|
||||
lube_flags = SLIDE_ICE | GALOSHES_DONT_HELP
|
||||
if(TURF_WET_SUPERLUBE)
|
||||
intensity = 120
|
||||
lube_flags = SLIDE | GALOSHES_DONT_HELP | SLIP_WHEN_CRAWLING
|
||||
else
|
||||
qdel(parent.GetComponent(/datum/component/slippery))
|
||||
return
|
||||
@@ -159,7 +162,7 @@
|
||||
//NB it's possible we get deleted after this, due to inherit
|
||||
|
||||
/datum/component/wet_floor/proc/add_wet(type, duration_minimum = 0, duration_add = 0, duration_maximum = MAXIMUM_WET_TIME, _permanent = FALSE)
|
||||
var/static/list/allowed_types = list(TURF_WET_WATER, TURF_WET_LUBE, TURF_WET_ICE, TURF_WET_PERMAFROST)
|
||||
var/static/list/allowed_types = list(TURF_WET_WATER, TURF_WET_LUBE, TURF_WET_ICE, TURF_WET_PERMAFROST, TURF_WET_SUPERLUBE)
|
||||
if(duration_minimum <= 0 || !type)
|
||||
return FALSE
|
||||
if(type in allowed_types)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
var/list/datum_components //for /datum/components
|
||||
var/list/status_traits
|
||||
var/list/comp_lookup //it used to be for looking up components which had registered a signal but now anything can register
|
||||
var/list/signal_procs
|
||||
var/list/list/datum/callback/signal_procs
|
||||
var/signal_enabled = FALSE
|
||||
var/datum_flags = NONE
|
||||
var/datum/weakref/weak_reference
|
||||
|
||||
@@ -192,7 +192,7 @@
|
||||
if (T && isturf(T))
|
||||
if (!D.stat)
|
||||
D.emote("scream")
|
||||
D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, /mob/living/carbon/human/.Knockdown, 20))
|
||||
D.throw_at(T, 10, 4, A, TRUE, TRUE, callback = CALLBACK(D, /mob/living/carbon/human.proc/Knockdown, 20))
|
||||
log_combat(A, D, "has thrown with wrestling")
|
||||
return 0
|
||||
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
tick_interval = 4
|
||||
alert_type = /obj/screen/alert/status_effect/his_grace
|
||||
var/bloodlust = 0
|
||||
|
||||
|
||||
/obj/screen/alert/status_effect/his_grace
|
||||
name = "His Grace"
|
||||
desc = "His Grace hungers, and you must feed Him."
|
||||
@@ -356,7 +356,7 @@
|
||||
var/new_staminaloss = owner.getStaminaLoss()
|
||||
if(new_staminaloss < last_staminaloss)
|
||||
var/heal_amount = -5 // CIT CHANGE - makes blood drunk status effect not exhaust you
|
||||
owner.adjustStaminaLoss(heal_amount, updating_health = FALSE)
|
||||
owner.adjustStaminaLoss(heal_amount, FALSE)
|
||||
new_staminaloss = owner.getStaminaLoss()
|
||||
needs_health_update = TRUE
|
||||
last_staminaloss = new_staminaloss
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
//do things for each entry in Generate_list
|
||||
//return value sets Generate_list[verbpath]
|
||||
/datum/verbs/proc/HandleVerb(list/entry, atom/verb/verbpath, ...)
|
||||
/datum/verbs/proc/HandleVerb(list/entry, procpath/verbpath, ...)
|
||||
return entry
|
||||
|
||||
/datum/verbs/New()
|
||||
@@ -82,7 +82,7 @@
|
||||
. += childlist
|
||||
|
||||
for (var/thing in verblist)
|
||||
var/atom/verb/verbpath = thing
|
||||
var/procpath/verbpath = thing
|
||||
if (!verbpath)
|
||||
stack_trace("Bad VERB in [type] verblist: [english_list(verblist)]")
|
||||
var/list/entry = list()
|
||||
|
||||
+2
-2
@@ -266,7 +266,7 @@
|
||||
if(SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED)
|
||||
should_override = TRUE
|
||||
|
||||
|
||||
|
||||
if(blood_DNA && !istype(src, /obj/effect/decal))
|
||||
override[EXAMINE_POSITION_BEFORE] = " blood-stained "
|
||||
should_override = TRUE
|
||||
@@ -563,7 +563,7 @@
|
||||
|
||||
|
||||
//Hook for running code when a dir change occurs
|
||||
/atom/proc/setDir(newdir)
|
||||
/atom/proc/setDir(newdir, ismousemovement=FALSE)
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir)
|
||||
dir = newdir
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
var/datum/component/slippery/slipper = GetComponent(/datum/component/slippery)
|
||||
slipper.signal_enabled = active
|
||||
|
||||
/obj/item/shield/energy/bananium/throw_at(atom/target, range, speed, mob/thrower, spin=1)
|
||||
/obj/item/shield/energy/bananium/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
|
||||
if(active)
|
||||
if(iscarbon(thrower))
|
||||
var/mob/living/carbon/C = thrower
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
var/recommended_enemies = 0
|
||||
var/antag_flag = null //preferences flag such as BE_WIZARD that need to be turned on for players to be antag
|
||||
var/mob/living/living_antag_player = null
|
||||
var/list/datum/game_mode/replacementmode = null
|
||||
var/datum/game_mode/replacementmode = null
|
||||
var/round_converted = 0 //0: round not converted, 1: round going to convert, 2: round converted
|
||||
var/reroll_friendly //During mode conversion only these are in the running
|
||||
var/continuous_sanity_checked //Catches some cases where config options could be used to suggest that modes without antagonists should end when all antagonists die
|
||||
|
||||
@@ -474,8 +474,6 @@
|
||||
|
||||
flesh_number = unattached_flesh.len
|
||||
|
||||
#define CRYOMOBS 'icons/obj/cryo_mobs.dmi'
|
||||
|
||||
/obj/machinery/clonepod/update_icon()
|
||||
cut_overlays()
|
||||
|
||||
|
||||
@@ -148,7 +148,6 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E
|
||||
virgin = 0
|
||||
|
||||
/obj/machinery/computer/telecrystals/boss/proc/getDangerous()//This scales the TC assigned with the round population.
|
||||
..()
|
||||
var/list/nukeops = get_antag_minds(/datum/antagonist/nukeop)
|
||||
var/danger = GLOB.joined_player_list.len - nukeops.len
|
||||
danger = CEILING(danger, 10)
|
||||
|
||||
@@ -307,7 +307,6 @@
|
||||
//Handle Borg stuff first
|
||||
if(iscyborg(mob_occupant))
|
||||
var/mob/living/silicon/robot/R = mob_occupant
|
||||
if(!istype(R)) return ..()
|
||||
|
||||
R.contents -= R.mmi
|
||||
qdel(R.mmi)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
src.Insert(loc)
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/body_egg/Insert(var/mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/body_egg/Insert(var/mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
ADD_TRAIT(owner, TRAIT_XENO_HOST, TRAIT_GENERIC)
|
||||
owner.med_hud_set_status()
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
/obj/item/pda/clown/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/slippery, 120, NO_SLIP_WHEN_WALKING, CALLBACK(src, .proc/AfterSlip))
|
||||
AddComponent(/datum/component/slippery, 120, NO_SLIP_WHEN_WALKING|SLIP_WHEN_JOGGING, CALLBACK(src, .proc/AfterSlip))
|
||||
|
||||
/obj/item/pda/clown/proc/AfterSlip(mob/living/carbon/human/M)
|
||||
if (istype(M) && (M.real_name != owner))
|
||||
|
||||
@@ -697,7 +697,7 @@ Code:
|
||||
|
||||
if(href_list["mule"]) //MULEbots are special snowflakes, and need different args due to how they work.
|
||||
|
||||
active_bot.bot_control(command= href_list["mule"], user= usr, pda= 1)
|
||||
active_bot.bot_control(href_list["mule"], usr, TRUE)
|
||||
|
||||
if(!host_pda)
|
||||
return
|
||||
@@ -772,4 +772,4 @@ Code:
|
||||
return ""
|
||||
|
||||
//This is called for special abilities of cartridges
|
||||
/obj/item/cartridge/proc/special(mov/living/user, list/params)
|
||||
/obj/item/cartridge/proc/special(mob/living/user, list/params)
|
||||
|
||||
@@ -651,7 +651,7 @@ SLIME SCANNER
|
||||
|
||||
/proc/atmosanalyzer_scan(mixture, mob/living/user, atom/target = src)
|
||||
var/icon = target
|
||||
user.visible_message("[user] has used the analyzer on [icon2html(icon, viewers(src))] [target].", "<span class='notice'>You use the analyzer on [icon2html(icon, user)] [target].</span>")
|
||||
user.visible_message("[user] has used the analyzer on [icon2html(icon, viewers(user))] [target].", "<span class='notice'>You use the analyzer on [icon2html(icon, user)] [target].</span>")
|
||||
to_chat(user, "<span class='boldnotice'>Results of analysis of [icon2html(icon, user)] [target].</span>")
|
||||
|
||||
var/list/airs = islist(mixture) ? mixture : list(mixture)
|
||||
|
||||
@@ -288,7 +288,6 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
|
||||
generate_rubber_toolbox_icon()
|
||||
icon = GLOB.rubber_toolbox_icons[icon_state]
|
||||
AddComponent(/datum/component/bouncy)
|
||||
. = ..()
|
||||
|
||||
/obj/item/storage/toolbox/proc/generate_rubber_toolbox_icon()
|
||||
var/icon/new_icon = icon(icon, icon_state)
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
|
||||
|
||||
L.Knockdown(stunpwr)
|
||||
L.adjustStaminaLoss(stunpwr*0.1, affected_zone = (istype(user) ? user.zone_selected : BODY_ZONE_CHEST))//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
|
||||
L.adjustStaminaLoss(stunpwr*0.1)//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
|
||||
L.apply_effect(EFFECT_STUTTER, stunforce)
|
||||
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
|
||||
if(user)
|
||||
|
||||
@@ -267,14 +267,15 @@
|
||||
if(!(lube&GALOSHES_DONT_HELP)) //can't slip while buckled unless it's lube.
|
||||
return 0
|
||||
else
|
||||
if(C.lying || !(C.status_flags & CANKNOCKDOWN)) // can't slip unbuckled mob if they're lying or can't fall.
|
||||
if(!(lube&SLIP_WHEN_CRAWLING) && (C.lying || !(C.status_flags & CANKNOCKDOWN))) // can't slip unbuckled mob if they're lying or can't fall.
|
||||
return 0
|
||||
if(C.m_intent == MOVE_INTENT_WALK && (lube&NO_SLIP_WHEN_WALKING))
|
||||
return 0
|
||||
if(ishuman(C) && (lube&NO_SLIP_WHEN_WALKING))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(!H.sprinting && H.getStaminaLoss() <= 20)
|
||||
if(lube & NO_SLIP_WHEN_WALKING)
|
||||
if(C.m_intent == MOVE_INTENT_WALK)
|
||||
return 0
|
||||
if(ishuman(C) && !(lube & SLIP_WHEN_JOGGING))
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(!H.sprinting && H.getStaminaLoss() <= 20)
|
||||
return 0
|
||||
if(!(lube&SLIDE_ICE))
|
||||
to_chat(C, "<span class='notice'>You slipped[ O ? " on the [O.name]" : ""]!</span>")
|
||||
playsound(C.loc, 'sound/misc/slip.ogg', 50, 1, -3)
|
||||
|
||||
@@ -144,5 +144,5 @@
|
||||
..()
|
||||
ScrapeAway()
|
||||
|
||||
/turf/open/floor/plating/foam/tool_act(mob/living/user, obj/tool/I, tool_type)
|
||||
/turf/open/floor/plating/foam/tool_act(mob/living/user, obj/item/I, tool_type)
|
||||
return
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
|
||||
//the procs are cause you can't put the comments in the GLOB var define
|
||||
GLOBAL_PROTECT(admin_verbs_default)
|
||||
GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault())
|
||||
GLOBAL_PROTECT(admin_verbs_default)
|
||||
/world/proc/AVerbsDefault()
|
||||
return list(
|
||||
/client/proc/deadmin, /*destroys our own admin datum so we can play as a regular player*/
|
||||
@@ -13,8 +13,8 @@ GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault())
|
||||
/client/proc/toggleprayers,
|
||||
/client/proc/toggleadminhelpsound
|
||||
)
|
||||
GLOBAL_PROTECT(admin_verbs_admin)
|
||||
GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
|
||||
GLOBAL_PROTECT(admin_verbs_admin)
|
||||
/world/proc/AVerbsAdmin()
|
||||
return list(
|
||||
/client/proc/invisimin, /*allows our mob to go invisible/visible*/
|
||||
@@ -78,11 +78,10 @@ GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
|
||||
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
|
||||
/datum/admins/proc/open_borgopanel
|
||||
)
|
||||
GLOBAL_PROTECT(admin_verbs_ban)
|
||||
GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/DB_ban_panel, /client/proc/stickybanpanel))
|
||||
GLOBAL_PROTECT(admin_verbs_sounds)
|
||||
GLOBAL_PROTECT(admin_verbs_ban)
|
||||
GLOBAL_LIST_INIT(admin_verbs_sounds, list(/client/proc/play_local_sound, /client/proc/play_sound, /client/proc/set_round_end_sound))
|
||||
GLOBAL_PROTECT(admin_verbs_fun)
|
||||
GLOBAL_PROTECT(admin_verbs_sounds)
|
||||
GLOBAL_LIST_INIT(admin_verbs_fun, list(
|
||||
/client/proc/cmd_admin_dress,
|
||||
/client/proc/cmd_admin_gib_self,
|
||||
@@ -108,9 +107,9 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
|
||||
/client/proc/admin_away,
|
||||
/client/proc/roll_dices //CIT CHANGE - Adds dice verb
|
||||
))
|
||||
GLOBAL_PROTECT(admin_verbs_spawn)
|
||||
GLOBAL_PROTECT(admin_verbs_fun)
|
||||
GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /client/proc/respawn_character))
|
||||
GLOBAL_PROTECT(admin_verbs_server)
|
||||
GLOBAL_PROTECT(admin_verbs_spawn)
|
||||
GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer())
|
||||
/world/proc/AVerbsServer()
|
||||
return list(
|
||||
@@ -130,7 +129,7 @@ GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer())
|
||||
/client/proc/adminchangemap,
|
||||
/client/proc/toggle_hub
|
||||
)
|
||||
GLOBAL_PROTECT(admin_verbs_debug)
|
||||
GLOBAL_PROTECT(admin_verbs_server)
|
||||
GLOBAL_LIST_INIT(admin_verbs_debug, world.AVerbsDebug())
|
||||
/world/proc/AVerbsDebug()
|
||||
return list(
|
||||
@@ -172,15 +171,15 @@ GLOBAL_LIST_INIT(admin_verbs_debug, world.AVerbsDebug())
|
||||
/datum/admins/proc/create_or_modify_area,
|
||||
/client/proc/generate_wikichem_list //DO NOT PRESS UNLESS YOU WANT SUPERLAG
|
||||
)
|
||||
GLOBAL_PROTECT(admin_verbs_possess)
|
||||
GLOBAL_PROTECT(admin_verbs_debug)
|
||||
GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, /proc/release))
|
||||
GLOBAL_PROTECT(admin_verbs_permissions)
|
||||
GLOBAL_PROTECT(admin_verbs_possess)
|
||||
GLOBAL_LIST_INIT(admin_verbs_permissions, list(/client/proc/edit_admin_permissions))
|
||||
GLOBAL_PROTECT(admin_verbs_poll)
|
||||
GLOBAL_PROTECT(admin_verbs_permissions)
|
||||
GLOBAL_LIST_INIT(admin_verbs_poll, list(/client/proc/create_poll))
|
||||
|
||||
//verbs which can be hidden - needs work
|
||||
GLOBAL_PROTECT(admin_verbs_hideable)
|
||||
GLOBAL_PROTECT(admin_verbs_poll)
|
||||
GLOBAL_LIST_INIT(admin_verbs_hideable, list(
|
||||
/client/proc/set_ooc,
|
||||
/client/proc/reset_ooc,
|
||||
@@ -248,6 +247,7 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list(
|
||||
/client/proc/cmd_admin_man_up, //CIT CHANGE - adds man up verb
|
||||
/client/proc/cmd_admin_man_up_global //CIT CHANGE - ditto
|
||||
))
|
||||
GLOBAL_PROTECT(admin_verbs_hideable)
|
||||
|
||||
/client/proc/add_admin_verbs()
|
||||
if(holder)
|
||||
|
||||
@@ -504,7 +504,7 @@
|
||||
output += ruler
|
||||
var/datum/browser/browser = new(usr, "Note panel", "Manage player notes", 1000, 500)
|
||||
var/datum/asset/notes_assets = get_asset_datum(/datum/asset/simple/notes)
|
||||
notes_assets.send(src)
|
||||
notes_assets.send(usr.client)
|
||||
browser.set_content(jointext(output, ""))
|
||||
browser.open()
|
||||
|
||||
@@ -556,7 +556,7 @@
|
||||
/proc/convert_notes_sql(ckey)
|
||||
if(!fexists(NOTESFILE))
|
||||
return
|
||||
|
||||
|
||||
var/savefile/notesfile = new(NOTESFILE)
|
||||
if(!notesfile)
|
||||
log_game("Error: Cannot access [NOTESFILE]")
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
var/output = "<b>Radio Report</b><hr>"
|
||||
for (var/fq in SSradio.frequencies)
|
||||
output += "<b>Freq: [fq]</b><br>"
|
||||
var/list/datum/radio_frequency/fqs = SSradio.frequencies[fq]
|
||||
var/datum/radio_frequency/fqs = SSradio.frequencies[fq]
|
||||
if (!fqs)
|
||||
output += " <b>ERROR</b><br>"
|
||||
continue
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
//- Identify how hard it is to break into the area and where the weak points are
|
||||
//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels.
|
||||
|
||||
GLOBAL_PROTECT(admin_verbs_debug_mapping)
|
||||
GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list(
|
||||
/client/proc/camera_view, //-errorage
|
||||
/client/proc/sec_camera_report, //-errorage
|
||||
@@ -50,6 +49,7 @@ GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list(
|
||||
/client/proc/debug_z_levels,
|
||||
/client/proc/place_ruin
|
||||
))
|
||||
GLOBAL_PROTECT(admin_verbs_debug_mapping)
|
||||
|
||||
/obj/effect/debugging/mapfix_marker
|
||||
name = "map fix marker"
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
clear_mind_control()
|
||||
..()
|
||||
|
||||
/obj/item/organ/heart/gland/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/heart/gland/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
if(special != 2 && uses) // Special 2 means abductor surgery
|
||||
Start()
|
||||
@@ -124,7 +124,7 @@
|
||||
mind_control_uses = 1
|
||||
mind_control_duration = 2400
|
||||
|
||||
/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/heart/gland/slime/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
owner.faction |= "slime"
|
||||
owner.grant_language(/datum/language/slime)
|
||||
@@ -286,7 +286,7 @@
|
||||
mind_control_uses = 2
|
||||
mind_control_duration = 900
|
||||
|
||||
/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/heart/gland/electric/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
ADD_TRAIT(owner, TRAIT_SHOCKIMMUNE, ORGAN_TRAIT)
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
/mob/living/carbon/true_devil/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null)
|
||||
return 666
|
||||
|
||||
/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0)
|
||||
/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0)
|
||||
if(mind && has_bane(BANE_LIGHT))
|
||||
mind.disrupt_spells(-500)
|
||||
return ..() //flashes don't stop devils UNLESS it's their bane.
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
user.temporarilyRemoveItemFromInventory(src, TRUE)
|
||||
src.Insert(user) //Consuming the heart literally replaces your heart with a demon heart. H A R D C O R E
|
||||
|
||||
/obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/heart/demon/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
if(M.mind)
|
||||
M.mind.AddSpell(new /obj/effect/proc_holder/spell/bloodcrawl(null))
|
||||
|
||||
@@ -223,8 +223,6 @@
|
||||
special_role = TRAITOR_AGENT_ROLE
|
||||
syndicate = TRUE
|
||||
forge_single_objective()
|
||||
else
|
||||
..() // Give them standard objectives.
|
||||
return
|
||||
|
||||
/datum/antagonist/traitor/internal_affairs/forge_traitor_objectives()
|
||||
|
||||
@@ -208,7 +208,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
|
||||
var/unlock_text = "<span class='notice'>Hello World!</span>" //Text shown when an ability is unlocked
|
||||
var/unlock_sound //Sound played when an ability is unlocked
|
||||
|
||||
/datum/AI_Module/proc/upgrade(mob/living/silicon/AI/AI) //Apply upgrades!
|
||||
/datum/AI_Module/proc/upgrade(mob/living/silicon/ai/AI) //Apply upgrades!
|
||||
return
|
||||
|
||||
/datum/AI_Module/large //Big, powerful stuff that can only be used once.
|
||||
@@ -397,7 +397,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
|
||||
unlock_text = "<span class='notice'>You establish a power diversion to your turrets, upgrading their health and damage.</span>"
|
||||
unlock_sound = 'sound/items/rped.ogg'
|
||||
|
||||
/datum/AI_Module/large/upgrade_turrets/upgrade(mob/living/silicon/AI/AI)
|
||||
/datum/AI_Module/large/upgrade_turrets/upgrade(mob/living/silicon/ai/AI)
|
||||
for(var/obj/machinery/porta_turret/ai/turret in GLOB.machines)
|
||||
turret.obj_integrity += 30
|
||||
turret.lethal_projectile = /obj/item/projectile/beam/laser/heavylaser //Once you see it, you will know what it means to FEAR.
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
. = ..()
|
||||
setDir(t)
|
||||
|
||||
/obj/item/assembly/infra/throw_at()
|
||||
/obj/item/assembly/infra/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
|
||||
. = ..()
|
||||
olddir = dir
|
||||
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#define CRYOMOBS 'icons/obj/cryo_mobs.dmi'
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell
|
||||
name = "cryo cell"
|
||||
icon = 'icons/obj/cryogenics.dmi'
|
||||
|
||||
@@ -257,7 +257,7 @@
|
||||
|
||||
//Non-human spawners
|
||||
|
||||
/obj/effect/mob_spawn/AICorpse/create() //Creates a corrupted AI
|
||||
/obj/effect/mob_spawn/AICorpse/create(ckey, name) //Creates a corrupted AI
|
||||
var/A = locate(/mob/living/silicon/ai) in loc
|
||||
if(A)
|
||||
return
|
||||
@@ -277,7 +277,7 @@
|
||||
/obj/effect/mob_spawn/slime/equip(mob/living/simple_animal/slime/S)
|
||||
S.colour = mobcolour
|
||||
|
||||
/obj/effect/mob_spawn/human/facehugger/create() //Creates a squashed facehugger
|
||||
/obj/effect/mob_spawn/human/facehugger/create(ckey, name) //Creates a squashed facehugger
|
||||
var/obj/item/clothing/mask/facehugger/O = new(src.loc) //variable O is a new facehugger at the location of the landmark
|
||||
O.name = src.name
|
||||
O.Die() //call the facehugger's death proc
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/world/proc/_BSQL_Internal_Call(func, ...)
|
||||
var/list/call_args = args.Copy(2)
|
||||
BSQL_Debug("[.....]: [args[1]]([call_args.Join(", ")])")
|
||||
BSQL_Debug("_BSQL_Internal_Call(): [args[1]]([call_args.Join(", ")])")
|
||||
. = call(_BSQL_Library_Path(), func)(arglist(call_args))
|
||||
BSQL_Debug("Result: [. == null ? "NULL" : "\"[.]\""]")
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
//This was originally created as a way to get adminspawned items to the station in an IC manner. It's evolved to contain a few more
|
||||
//features such as item removal, smiting, controllable delivery mobs, and more.
|
||||
|
||||
//This works by creating a supplypod (refered to as temp_pod) in a special room in the centcom map.
|
||||
//This works by creating a supplypod (refered to as temp_pod) in a special room in the centcom map.
|
||||
//IMPORTANT: Even though we call it a supplypod for our purposes, it can take on the appearance and function of many other things: Eg. cruise missiles, boxes, or walking, living gondolas.
|
||||
//When the user launched the pod, items from special "bays" on the centcom map are taken and put into the supplypod
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
var/launchCounter = 1 //Used with the "Ordered" launch mode (launchChoice = 1) to see what item is launched
|
||||
var/specificTarget //Do we want to target a specific mob instead of where we click? Also used for smiting
|
||||
var/list/orderedArea = list() //Contains an ordered list of turfs in an area (filled in the createOrderedArea() proc), read top-left to bottom-right. Used for the "ordered" launch mode (launchChoice = 1)
|
||||
var/list/acceptableTurfs = list() //Contians a list of turfs (in the "bay" area on centcom) that have items that can be launched. Taken from orderedArea
|
||||
var/list/turf/acceptableTurfs = list() //Contians a list of turfs (in the "bay" area on centcom) that have items that can be launched. Taken from orderedArea
|
||||
var/list/launchList = list() //Contains whatever is going to be put in the supplypod and fired. Taken from acceptableTurfs
|
||||
var/obj/effect/supplypod_selector/selector = new() //An effect used for keeping track of what item is going to be launched when in "ordered" mode (launchChoice = 1)
|
||||
var/obj/structure/closet/supplypod/centcompod/temp_pod //The temporary pod that is modified by this datum, then cloned. The buildObject() clone of this pod is what is launched
|
||||
@@ -69,7 +69,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
|
||||
data["landingDelay"] = temp_pod.landingDelay //How long the pod takes to land after launching
|
||||
data["openingDelay"] = temp_pod.openingDelay //How long the pod takes to open after landing
|
||||
data["departureDelay"] = temp_pod.departureDelay //How long the pod takes to leave after opening (if bluespace=true, it deletes. if reversing=true, it flies back to centcom)
|
||||
data["styleChoice"] = temp_pod.style //Style is a variable that keeps track of what the pod is supposed to look like. It acts as an index to the POD_STYLES list in cargo.dm defines to get the proper icon/name/desc for the pod.
|
||||
data["styleChoice"] = temp_pod.style //Style is a variable that keeps track of what the pod is supposed to look like. It acts as an index to the POD_STYLES list in cargo.dm defines to get the proper icon/name/desc for the pod.
|
||||
data["effectStun"] = temp_pod.effectStun //If true, stuns anyone under the pod when it launches until it lands, forcing them to get hit by the pod. Devilish!
|
||||
data["effectLimb"] = temp_pod.effectLimb //If true, pops off a limb (if applicable) from anyone caught under the pod when it lands
|
||||
data["effectBluespace"] = temp_pod.bluespace //If true, the pod deletes (in a shower of sparks) after landing
|
||||
@@ -150,7 +150,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
|
||||
if("launchRandom") //Pick random turfs from the supplypod bay at centcom to launch
|
||||
if (launchChoice == 2)
|
||||
launchChoice = 0
|
||||
updateSelector()
|
||||
updateSelector()
|
||||
return
|
||||
launchChoice = 2
|
||||
updateSelector()
|
||||
@@ -326,7 +326,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
|
||||
temp_pod.soundVolume = 50
|
||||
. = TRUE
|
||||
////////////////////////////STYLE CHANGES//////////////////
|
||||
//Style is a value that is used to keep track of what the pod is supposed to look like. It can be used with the POD_STYLES list (in cargo.dm defines)
|
||||
//Style is a value that is used to keep track of what the pod is supposed to look like. It can be used with the POD_STYLES list (in cargo.dm defines)
|
||||
//as a way to get the proper icon state, name, and description of the pod.
|
||||
if("styleStandard")
|
||||
temp_pod.setStyle(STYLE_STANDARD)
|
||||
@@ -367,7 +367,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
|
||||
if("refresh") //Refresh the Pod bay. User should press this if they spawn something new in the centcom bay. Automatically called whenever the user launches a pod
|
||||
refreshBay()
|
||||
. = TRUE
|
||||
if("giveLauncher") //Enters the "Launch Mode". When the launcher is activated, temp_pod is cloned, and the result it filled and launched anywhere the user clicks (unless specificTarget is true)
|
||||
if("giveLauncher") //Enters the "Launch Mode". When the launcher is activated, temp_pod is cloned, and the result it filled and launched anywhere the user clicks (unless specificTarget is true)
|
||||
launcherActivated = !launcherActivated
|
||||
updateCursor(launcherActivated) //Update the cursor of the user to a cool looking target icon
|
||||
. = TRUE
|
||||
@@ -436,7 +436,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
|
||||
orderedArea = list()
|
||||
if (!isemptylist(A.contents)) //Go through the area passed into the proc, and figure out the top left and bottom right corners by calculating max and min values
|
||||
var/startX = A.contents[1].x //Create the four values (we do it off a.contents[1] so they have some sort of arbitrary initial value. They should be overwritten in a few moments)
|
||||
var/endX = A.contents[1].x
|
||||
var/endX = A.contents[1].x
|
||||
var/startY = A.contents[1].y
|
||||
var/endY = A.contents[1].y
|
||||
for (var/turf/T in A) //For each turf in the area, go through and find:
|
||||
@@ -453,7 +453,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
|
||||
orderedArea.Add(locate(j,startY - (i - endY),1)) //After gathering the start/end x and y, go through locating each turf from top left to bottom right, like one would read a book
|
||||
return orderedArea //Return the filled list
|
||||
|
||||
/datum/centcom_podlauncher/proc/preLaunch() //Creates a list of acceptable items,
|
||||
/datum/centcom_podlauncher/proc/preLaunch() //Creates a list of acceptable items,
|
||||
numTurfs = 0 //Counts the number of turfs that can be launched (remember, supplypods either launch all at once or one turf-worth of items at a time)
|
||||
acceptableTurfs = list()
|
||||
for (var/turf/T in orderedArea) //Go through the orderedArea list
|
||||
@@ -478,7 +478,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
|
||||
//UpdateSelector() is here (instead if the if(1) switch block) because it also moves the selector to nullspace (to hide it) if needed
|
||||
|
||||
/datum/centcom_podlauncher/proc/launch(turf/A) //Game time started
|
||||
if (isnull(A))
|
||||
if (isnull(A))
|
||||
return
|
||||
var/obj/structure/closet/supplypod/centcompod/toLaunch = DuplicateObject(temp_pod) //Duplicate the temp_pod (which we have been varediting or configuring with the UI) and store the result
|
||||
toLaunch.bay = bay //Bay is currently a nonstatic expression, so it cant go into toLaunch using DuplicateObject
|
||||
@@ -487,7 +487,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
|
||||
for (var/atom/movable/O in launchList)
|
||||
DuplicateObject(O).forceMove(toLaunch) //Duplicate each atom/movable in launchList and forceMove them into the supplypod
|
||||
new /obj/effect/DPtarget(A, toLaunch) //Create the DPTarget, which will eventually forceMove the temp_pod to it's location
|
||||
else
|
||||
else
|
||||
for (var/atom/movable/O in launchList) //If we aren't cloning the objects, just go through the launchList
|
||||
O.forceMove(toLaunch) //and forceMove any atom/moveable into the supplypod
|
||||
new /obj/effect/DPtarget(A, toLaunch) //Then, create the DPTarget effect, which will eventually forceMove the temp_pod to it's location
|
||||
|
||||
@@ -211,7 +211,8 @@
|
||||
/datum/export/weapon/revolver
|
||||
cost = 200
|
||||
unit_name = "large handgun"
|
||||
export_types = list(/obj/item/gun/ballistic/revolver/syndie)
|
||||
export_types = list(/obj/item/gun/ballistic/revolver)
|
||||
exclude_types = list(/obj/item/gun/ballistic/revolver/russian, /obj/item/gun/ballistic/revolver/doublebarrel)
|
||||
|
||||
/datum/export/weapon/rocketlauncher
|
||||
cost = 1000
|
||||
@@ -353,4 +354,4 @@
|
||||
cost = 30
|
||||
unit_name = "unlisted weapon"
|
||||
export_types = list(/obj/item/gun)
|
||||
include_subtypes = TRUE
|
||||
include_subtypes = TRUE
|
||||
|
||||
@@ -39,14 +39,14 @@
|
||||
set name = "Release Contents"
|
||||
set category = "Gondola"
|
||||
set desc = "Release any contents stored within your vast belly."
|
||||
linked_pod.open(src, manual = TRUE)
|
||||
linked_pod.open(src)
|
||||
|
||||
/mob/living/simple_animal/pet/gondola/gondolapod/verb/check()
|
||||
set name = "Count Contents"
|
||||
set category = "Gondola"
|
||||
set desc = "Take a deep look inside youself, and count up what's inside"
|
||||
var/total = contents.len
|
||||
if (total)
|
||||
if (total)
|
||||
to_chat(src, "<span class='notice'>You detect [total] object[total > 1 ? "s" : ""] within your incredibly vast belly.</span>")
|
||||
else
|
||||
to_chat(src, "<span class='notice'>A closer look inside yourself reveals... nothing.</span>")
|
||||
|
||||
@@ -410,7 +410,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
|
||||
for (var/child in entries)
|
||||
winset(src, "[child]", "[entries[child]]")
|
||||
if (!ispath(child, /datum/verbs/menu))
|
||||
var/atom/verb/verbpath = child
|
||||
var/procpath/verbpath = child
|
||||
if (copytext(verbpath.name,1,2) != "@")
|
||||
new child(src)
|
||||
|
||||
|
||||
@@ -2338,9 +2338,10 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
character.Digitigrade_Leg_Swap(TRUE)
|
||||
|
||||
//let's be sure the character updates
|
||||
character.update_body()
|
||||
character.update_hair()
|
||||
character.update_body_parts()
|
||||
if(icon_updates)
|
||||
character.update_body()
|
||||
character.update_hair()
|
||||
character.update_body_parts()
|
||||
|
||||
/datum/preferences/proc/get_default_name(name_id)
|
||||
switch(name_id)
|
||||
|
||||
@@ -223,7 +223,6 @@ BLIND // can't see anything
|
||||
if(H.w_uniform == src)
|
||||
H.update_suit_sensors()
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/clothing/under/CtrlClick(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -672,7 +672,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
"AI [pick("rogue", "is dead")]!!")
|
||||
|
||||
var/list/mob/living/carbon/people = list()
|
||||
var/list/mob/living/carbon/person = null
|
||||
var/mob/living/carbon/person = null
|
||||
var/datum/language/understood_language = target.get_random_understood_language()
|
||||
for(var/mob/living/carbon/H in view(target))
|
||||
if(H == target)
|
||||
|
||||
@@ -5,6 +5,7 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars,list(
|
||||
))
|
||||
|
||||
/proc/DuplicateObject(atom/original, perfectcopy = TRUE, sameloc = FALSE, atom/newloc = null, nerf = FALSE, holoitem=FALSE)
|
||||
RETURN_TYPE(original.type)
|
||||
if(!original)
|
||||
return
|
||||
var/atom/O
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
for(var/datum/plant_gene/trait/T in seed.genes)
|
||||
T.on_throw_impact(src, hit_atom)
|
||||
|
||||
/obj/item/grown/microwave_act(obj/machine/microwave/M)
|
||||
/obj/item/grown/microwave_act(obj/machinery/microwave/M)
|
||||
return
|
||||
|
||||
/obj/item/grown/on_grind()
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
interact(user)
|
||||
|
||||
/datum/integrated_io/lists/proc/interact(mob/user)
|
||||
. = ..()
|
||||
var/list/my_list = data
|
||||
var/t = "<h2>[src]</h2><br>"
|
||||
t += "List length: [my_list.len]<br>"
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
#define TARGET_TO_SOURCE 1
|
||||
#define PUMP_EFFICIENCY 0.6
|
||||
#define TANK_FAILURE_PRESSURE (ONE_ATMOSPHERE*25)
|
||||
#define PUMP_MAX_PRESSURE (ONE_ATMOSPHERE*24)
|
||||
#define PUMP_MAX_VOLUME 100
|
||||
|
||||
|
||||
|
||||
@@ -199,7 +199,6 @@
|
||||
set_pin_data(IC_OUTPUT, 1, WEAKREF(null))
|
||||
if(installed_brain.brainmob)
|
||||
installed_brain.brainmob.remote_control = null
|
||||
..()
|
||||
|
||||
|
||||
//Brain changes
|
||||
@@ -238,7 +237,7 @@
|
||||
|
||||
brainholder.do_work(6)
|
||||
|
||||
/mob/living/brain/canUseTopic()
|
||||
/mob/living/brain/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE)
|
||||
return check_bot_self
|
||||
|
||||
/obj/item/integrated_circuit/smart/advanced_pathfinder/proc/hippie_xor_decrypt()
|
||||
@@ -329,7 +328,6 @@
|
||||
installed_pai.forceMove(drop_location())
|
||||
set_pin_data(IC_OUTPUT, 1, WEAKREF(null))
|
||||
installed_pai.pai.remote_control = null
|
||||
..()
|
||||
|
||||
|
||||
//pAI changes
|
||||
@@ -371,5 +369,5 @@
|
||||
|
||||
paiholder.do_work(6)
|
||||
|
||||
/mob/living/silicon/pai/canUseTopic()
|
||||
return check_bot_self
|
||||
/mob/living/silicon/pai/canUseTopic(atom/movable/M, be_close=FALSE, no_dextery=FALSE, no_tk=FALSE)
|
||||
return check_bot_self
|
||||
|
||||
@@ -171,7 +171,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs)
|
||||
return
|
||||
var/datum/ore_silo_log/entry = new(M, action, amount, noun, mats)
|
||||
|
||||
var/list/logs = GLOB.silo_access_logs[REF(src)]
|
||||
var/list/datum/ore_silo_log/logs = GLOB.silo_access_logs[REF(src)]
|
||||
if(!LAZYLEN(logs))
|
||||
GLOB.silo_access_logs[REF(src)] = logs = list(entry)
|
||||
else if(!logs[1].merge(entry))
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
var/list/datum/brain_trauma/traumas = list()
|
||||
|
||||
/obj/item/organ/brain/Insert(mob/living/carbon/C, special = 0,no_id_transfer = FALSE)
|
||||
/obj/item/organ/brain/Insert(mob/living/carbon/C, special = 0,no_id_transfer = FALSE, drop_if_replaced = TRUE)
|
||||
..()
|
||||
|
||||
name = "brain"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
QDEL_LIST(alien_powers)
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/alien/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/alien/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
for(var/obj/effect/proc_holder/alien/P in alien_powers)
|
||||
M.AddAbility(P)
|
||||
@@ -94,7 +94,7 @@
|
||||
else
|
||||
owner.adjustPlasma(plasma_rate * 0.1)
|
||||
|
||||
/obj/item/organ/alien/plasmavessel/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/alien/plasmavessel/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
if(isalien(M))
|
||||
var/mob/living/carbon/alien/A = M
|
||||
@@ -117,7 +117,7 @@
|
||||
var/recent_queen_death = 0 //Indicates if the queen died recently, aliens are heavily weakened while this is active.
|
||||
alien_powers = list(/obj/effect/proc_holder/alien/whisper)
|
||||
|
||||
/obj/item/organ/alien/hivenode/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/alien/hivenode/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
M.faction |= ROLE_ALIEN
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
var/sound/attack_sound = 'sound/weapons/punch1.ogg'
|
||||
var/sound/miss_sound = 'sound/weapons/punchmiss.ogg'
|
||||
|
||||
var/mob/living/list/ignored_by = list() // list of mobs that will ignore this species
|
||||
var/list/mob/living/ignored_by = list() // list of mobs that will ignore this species
|
||||
//Breathing!
|
||||
var/obj/item/organ/lungs/mutantlungs = null
|
||||
var/breathid = "o2"
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
icon_state = "brain-x-d"
|
||||
var/obj/effect/proc_holder/spell/targeted/shadowwalk/shadowwalk
|
||||
|
||||
/obj/item/organ/brain/nightmare/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/brain/nightmare/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
if(M.dna.species.id != "nightmare")
|
||||
M.set_species(/datum/species/shadow/nightmare)
|
||||
@@ -118,7 +118,7 @@
|
||||
user.temporarilyRemoveItemFromInventory(src, TRUE)
|
||||
Insert(user)
|
||||
|
||||
/obj/item/organ/heart/nightmare/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/heart/nightmare/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
if(special != HEART_SPECIAL_SHADOWIFY)
|
||||
blade = new/obj/item/light_eater
|
||||
|
||||
@@ -783,7 +783,7 @@
|
||||
/mob/living/silicon/ai/can_buckle()
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/ai/incapacitated()
|
||||
/mob/living/silicon/ai/incapacitated(ignore_restraints, ignore_grab)
|
||||
if(aiRestorePowerRoutine)
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
else
|
||||
padloc = "(UNKNOWN)"
|
||||
src.log_talk(message, LOG_SAY, tag="HOLOPAD in [padloc]")
|
||||
send_speech(message, 7, T, "robot", message_language = language)
|
||||
send_speech(message, 7, T, "robot", language)
|
||||
to_chat(src, "<i><span class='game say'>Holopad transmitted, <span class='name'>[real_name]</span> <span class='message robot'>\"[message]\"</span></span></i>")
|
||||
else
|
||||
to_chat(src, "No holopad connected.")
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
bot_control(action, usr) // Kill this later.
|
||||
. = TRUE
|
||||
|
||||
/mob/living/simple_animal/bot/mulebot/bot_control(command, mob/user, pda = 0)
|
||||
/mob/living/simple_animal/bot/mulebot/bot_control(command, mob/user, pda = 0, turf/user_turf, list/user_access = list())
|
||||
if(pda && wires.is_cut(WIRE_RX)) // MULE wireless is controlled by wires.
|
||||
return
|
||||
|
||||
|
||||
@@ -728,7 +728,7 @@ Difficulty: Very Hard
|
||||
holder_animal.mind.AddSpell(P)
|
||||
holder_animal.verbs -= /mob/living/verb/pulled
|
||||
|
||||
/obj/structure/closet/stasis/dump_contents(var/kill = 1)
|
||||
/obj/structure/closet/stasis/dump_contents(override = TRUE, kill = 1)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
for(var/mob/living/L in src)
|
||||
REMOVE_TRAIT(L, TRAIT_MUTE, STASIS_MUTE)
|
||||
@@ -774,7 +774,7 @@ Difficulty: Very Hard
|
||||
for(var/i in user)
|
||||
if(istype(i, /obj/structure/closet/stasis))
|
||||
var/obj/structure/closet/stasis/S = i
|
||||
S.dump_contents(0)
|
||||
S.dump_contents(kill=0)
|
||||
qdel(S)
|
||||
break
|
||||
user.gib()
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
/obj/item/paper/contract/infernal/suicide_act(mob/user)
|
||||
if(signed && (user == target.current) && istype(user, /mob/living/carbon/human/))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.forcesay("OH GREAT INFERNO! I DEMAND YOU COLLECT YOUR BOUNTY IMMEDIATELY!", forced = "infernal contract suicide")
|
||||
H.forcesay("OH GREAT INFERNO! I DEMAND YOU COLLECT YOUR BOUNTY IMMEDIATELY!")
|
||||
H.visible_message("<span class='suicide'>[H] holds up a contract claiming [user.p_their()] soul, then immediately catches fire. It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
H.adjust_fire_stacks(20)
|
||||
H.IgniteMob()
|
||||
|
||||
@@ -167,6 +167,7 @@
|
||||
/obj/item/gun/ballistic/revolver/russian
|
||||
name = "\improper Russian revolver"
|
||||
desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism requiring you to spin the chamber before each trigger pull."
|
||||
icon_state = "russianrevolver"
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357
|
||||
var/spun = FALSE
|
||||
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
new_mob =new hooman(M.loc)
|
||||
|
||||
var/datum/preferences/A = new() //Randomize appearance for the human
|
||||
A.copy_to(new_mob, icon_updates=0)
|
||||
A.copy_to(new_mob, FALSE)
|
||||
|
||||
var/mob/living/carbon/human/H = new_mob
|
||||
H.update_body()
|
||||
|
||||
@@ -114,7 +114,6 @@
|
||||
recharge_counter++
|
||||
|
||||
/obj/machinery/chem_dispenser/proc/display_beaker()
|
||||
..()
|
||||
var/mutable_appearance/b_o = beaker_overlay || mutable_appearance(icon, "disp_beaker")
|
||||
b_o.pixel_y = -4
|
||||
b_o.pixel_x = -7
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
var/setting = 1 // displayed range is 3 * setting
|
||||
var/max_range = 3 // displayed max range is 3 * max range
|
||||
|
||||
/datum/effect_system/smoke_spread/chem/smoke_machine/set_up(datum/reagents/carry, setting=1, efficiency=10, loc)
|
||||
/datum/effect_system/smoke_spread/chem/smoke_machine/set_up(datum/reagents/carry, setting=1, efficiency=10, loc, silent=FALSE)
|
||||
amount = setting
|
||||
carry.copy_to(chemholder, 20)
|
||||
carry.remove_any(amount * 16 / efficiency)
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
/datum/reagent/drug/methamphetamine
|
||||
name = "Methamphetamine"
|
||||
id = "methamphetamine"
|
||||
description = "Reduces stun times by about 300%, speeds the user up, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
|
||||
description = "Reduces stun times by about 300%, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
|
||||
reagent_state = LIQUID
|
||||
color = "#FAFAFA"
|
||||
overdose_threshold = 20
|
||||
|
||||
@@ -629,7 +629,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
/datum/reagent/medicine/ephedrine
|
||||
name = "Ephedrine"
|
||||
id = "ephedrine"
|
||||
description = "Increases stun resistance and movement speed. Overdose deals toxin damage and inhibits breathing."
|
||||
description = "Increases stun resistance. Overdose deals toxin damage and inhibits breathing."
|
||||
reagent_state = LIQUID
|
||||
color = "#D2FFFA"
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
|
||||
@@ -503,12 +503,19 @@
|
||||
description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
|
||||
color = "#009CA8" // rgb: 0, 156, 168
|
||||
taste_description = "cherry" // by popular demand
|
||||
var/lube_kind = TURF_WET_LUBE ///What kind of slipperiness gets added to turfs.
|
||||
|
||||
/datum/reagent/lube/reaction_turf(turf/open/T, reac_volume)
|
||||
if (!istype(T))
|
||||
return
|
||||
if(reac_volume >= 1)
|
||||
T.MakeSlippery(TURF_WET_LUBE, 15 SECONDS, min(reac_volume * 2 SECONDS, 120))
|
||||
T.MakeSlippery(lube_kind, 15 SECONDS, min(reac_volume * 2 SECONDS, 120))
|
||||
|
||||
///Stronger kind of lube. Applies TURF_WET_SUPERLUBE.
|
||||
/datum/reagent/lube/superlube
|
||||
name = "Super Duper Lube"
|
||||
description = "This \[REDACTED\] has been outlawed after the incident on \[DATA EXPUNGED\]."
|
||||
lube_kind = TURF_WET_SUPERLUBE
|
||||
|
||||
/datum/reagent/spraytan
|
||||
name = "Spray Tan"
|
||||
|
||||
@@ -223,6 +223,15 @@
|
||||
/obj/item/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays
|
||||
return
|
||||
|
||||
///Subtype used for the lavaland clown ruin.
|
||||
/obj/item/reagent_containers/spray/waterflower/superlube
|
||||
name = "clown flower"
|
||||
desc = "A delightly devilish flower... you got a feeling where this is going."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "clownflower"
|
||||
volume = 30
|
||||
list_reagents = list(/datum/reagent/lube/superlube = 30)
|
||||
|
||||
/obj/item/reagent_containers/spray/waterflower/cyborg
|
||||
reagent_flags = NONE
|
||||
volume = 100
|
||||
|
||||
@@ -83,6 +83,6 @@
|
||||
else
|
||||
playsound(user.loc, pick('sound/misc/null.ogg','sound/misc/null.ogg'), 100, 1)
|
||||
if("whisper")
|
||||
user.whisper("[invocation] [uppertext(chosenarea.name)]", forced = "spell")
|
||||
user.whisper("[invocation] [uppertext(chosenarea.name)]")
|
||||
|
||||
return
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
if(!amt_knockdown && amt_dam_stam)
|
||||
target.adjustStaminaLoss(amt_dam_stam)
|
||||
else
|
||||
target.Knockdown(amt_knockdown, override_hardstun = amt_hardstun, amt_dam_stam)
|
||||
target.Knockdown(amt_knockdown, override_hardstun = amt_hardstun, override_stamdmg = amt_dam_stam)
|
||||
target.Unconscious(amt_unconscious)
|
||||
target.Stun(amt_stun)
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/item/organ/appendix/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/appendix/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
if(inflamed)
|
||||
M.ForceContractDisease(new /datum/disease/appendicitis(), FALSE, TRUE)
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
var/on = FALSE
|
||||
var/datum/effect_system/trail_follow/ion/ion_trail
|
||||
|
||||
/obj/item/organ/cyberimp/chest/thrusters/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/cyberimp/chest/thrusters/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
. = ..()
|
||||
if(!ion_trail)
|
||||
ion_trail = new
|
||||
|
||||
@@ -135,7 +135,7 @@ obj/item/organ/heart/slime
|
||||
else
|
||||
last_pump = world.time //lets be extra fair *sigh*
|
||||
|
||||
/obj/item/organ/heart/cursed/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/heart/cursed/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
if(owner)
|
||||
to_chat(owner, "<span class ='userdanger'>Your heart has been replaced with a cursed one, you have to pump this one manually otherwise you'll die!</span>")
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
to_chat(owner, "<span class='notice'>Your tongue is really starting to hurt.</span>")
|
||||
|
||||
|
||||
/obj/item/organ/tongue/Insert(mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/tongue/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
..()
|
||||
if(say_mod && M.dna && M.dna.species)
|
||||
M.dna.species.say_mod = say_mod
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
user.say(message, spans = span_list, sanitize = FALSE)
|
||||
|
||||
message = lowertext(message)
|
||||
var/mob/living/list/listeners = list()
|
||||
var/list/mob/living/listeners = list()
|
||||
for(var/mob/living/L in get_hearers_in_view(8, user))
|
||||
if(L.can_hear() && !L.anti_magic_check(FALSE, TRUE) && L.stat != DEAD)
|
||||
if(L == user && !include_speaker)
|
||||
@@ -663,7 +663,7 @@
|
||||
|
||||
//FIND THRALLS
|
||||
message = lowertext(message)
|
||||
var/mob/living/list/listeners = list()
|
||||
var/list/mob/living/listeners = list()
|
||||
for(var/mob/living/L in get_hearers_in_view(8, user))
|
||||
if(L.can_hear() && !L.anti_magic_check(FALSE, TRUE) && L.stat != DEAD)
|
||||
if(L.has_status_effect(/datum/status_effect/chem/enthrall))//Check to see if they have the status
|
||||
|
||||
@@ -302,7 +302,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
/datum/uplink_item/dangerous/revolver
|
||||
name = "Syndicate Revolver"
|
||||
desc = "A brutally simple syndicate revolver that fires .357 Magnum rounds and has 7 chambers."
|
||||
item = /obj/item/gun/ballistic/revolver/syndie
|
||||
item = /obj/item/gun/ballistic/revolver
|
||||
cost = 13
|
||||
surplus = 50
|
||||
exclude_modes = list(/datum/game_mode/nuclear/clown_ops)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
GLOB.zombie_infection_list -= src
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/zombie_infection/Insert(var/mob/living/carbon/M, special = 0)
|
||||
/obj/item/organ/zombie_infection/Insert(var/mob/living/carbon/M, special = 0, drop_if_replaced = TRUE)
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user