mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 21:18:37 +01:00
Merge branch 'master' into ItemNameFixingRound3
This commit is contained in:
@@ -13,10 +13,10 @@
|
||||
#define USEDELAY 16 // For adding extra delay to heavy items, not currently used
|
||||
#define NOSHIELD 32 // weapon not affected by shield
|
||||
#define CONDUCT 64 // conducts electricity (metal etc.)
|
||||
#define ABSTRACT 128 // for all things that are technically items but used for various different stuff, made it 128 because it could conflict with other flags other way
|
||||
#define FPRINT 256 // takes a fingerprint
|
||||
#define ON_BORDER 512 // item has priority to check when entering or leaving
|
||||
#define NOBLUDGEON 4 // when an item has this it produces no "X has been hit by Y with Z" message in the default attackby()
|
||||
#define NOBLOODY 65535 // used by objects that don't want to get bloodied
|
||||
|
||||
#define GLASSESCOVERSEYES 1024
|
||||
#define MASKCOVERSEYES 1024 // get rid of some of the other retardation in these flags
|
||||
|
||||
@@ -77,3 +77,7 @@
|
||||
#define TR_KEEPSE 32 // changelings shouldn't edit the DNA's SE when turning into a monkey
|
||||
#define TR_DEFAULTMSG 64
|
||||
#define TR_KEEPSRC 128
|
||||
|
||||
//Organ stuff, It's here because "Genetics" is the most relevant file for organs
|
||||
#define ORGAN_ORGANIC 1
|
||||
#define ORGAN_ROBOTIC 2
|
||||
@@ -12,6 +12,12 @@
|
||||
return null
|
||||
return 0
|
||||
|
||||
/proc/get_area_master(O)
|
||||
var/area/A = get_area(O)
|
||||
if(A && A.master)
|
||||
A = A.master
|
||||
return A
|
||||
|
||||
/proc/get_area_name(N) //get area by its name
|
||||
for(var/area/A in world)
|
||||
if(A.name == N)
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
//Returns the world time in english
|
||||
proc/worldtime2text()
|
||||
return "[round(world.time / 36000)+12]:[(world.time / 600 % 60) < 10 ? add_zero(world.time / 600 % 60, 1) : world.time / 600 % 60]"
|
||||
return gameTimestamp("hh:mm")
|
||||
|
||||
proc/time_stamp()
|
||||
return time2text(world.timeofday, "hh:mm:ss")
|
||||
proc/time_stamp(var/format = "hh:mm:ss")
|
||||
return time2text(world.timeofday, format)
|
||||
|
||||
proc/gameTimestamp(var/format = "hh:mm:ss") // Get the game time in text
|
||||
return time2text(world.time - timezoneOffset + 432000, format)
|
||||
|
||||
/* Preserving this so future generations can see how fucking retarded some people are
|
||||
proc/time_stamp()
|
||||
|
||||
@@ -1256,3 +1256,17 @@ var/list/WALLITEMS = list(
|
||||
else
|
||||
user << "\blue [target] is empty!"
|
||||
return
|
||||
|
||||
proc/check_target_facings(mob/living/initator, mob/living/target)
|
||||
/*This can be used to add additional effects on interactions between mobs depending on how the mobs are facing each other, such as adding a crit damage to blows to the back of a guy's head.
|
||||
Given how click code currently works (Nov '13), the initiating mob will be facing the target mob most of the time
|
||||
That said, this proc should not be used if the change facing proc of the click code is overriden at the same time*/
|
||||
if(!ismob(target) || target.lying)
|
||||
//Make sure we are not doing this for things that can't have a logical direction to the players given that the target would be on their side
|
||||
return
|
||||
if(initator.dir == target.dir) //mobs are facing the same direction
|
||||
return 1
|
||||
if(initator.dir + 4 == target.dir || initator.dir - 4 == target.dir) //mobs are facing each other
|
||||
return 2
|
||||
if(initator.dir + 2 == target.dir || initator.dir - 2 == target.dir || initator.dir + 6 == target.dir || initator.dir - 6 == target.dir) //Initating mob is looking at the target, while the target mob is looking in a direction perpendicular to the 1st
|
||||
return 3
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
var/global/obj/effect/overlay/plmaster = null // atmospheric overlay for plasma
|
||||
var/global/obj/effect/overlay/slmaster = null // atmospheric overlay for sleeping gas
|
||||
var/admin_notice = null // Admin notice that all clients see when joining the server
|
||||
|
||||
|
||||
// nanomanager, the manager for Nano UIs
|
||||
var/datum/nanomanager/nanomanager = new()
|
||||
|
||||
var/timezoneOffset = 0 // The difference betwen midnight (of the host computer) and 0 world.ticks.
|
||||
|
||||
// For FTP requests. (i.e. downloading runtime logs.)
|
||||
// However it'd be ok to use for accessing attack logs and such too, which are even laggier.
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
if(stat || paralysis || stunned || weakened)
|
||||
return
|
||||
|
||||
face_atom(A) // change direction to face what you clicked on
|
||||
face_atom(A)
|
||||
|
||||
if(next_move > world.time) // in the year 2000...
|
||||
return
|
||||
|
||||
@@ -103,3 +103,5 @@
|
||||
|
||||
#define ui_iarrowleft "SOUTH-1,11"
|
||||
#define ui_iarrowright "SOUTH-1,13"
|
||||
|
||||
#define ui_lingstingdisplay "1,6:15"
|
||||
|
||||
@@ -89,6 +89,7 @@ var/datum/global_hud/global_hud = new()
|
||||
var/hotkey_ui_hidden = 0 //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons)
|
||||
|
||||
var/obj/screen/lingchemdisplay
|
||||
var/obj/screen/lingstingdisplay
|
||||
var/obj/screen/blobpwrdisplay
|
||||
var/obj/screen/blobhealthdisplay
|
||||
var/obj/screen/alien_plasma_display
|
||||
|
||||
@@ -282,6 +282,12 @@
|
||||
lingchemdisplay.layer = 20
|
||||
lingchemdisplay.invisibility = 101
|
||||
|
||||
lingstingdisplay = new /obj/screen()
|
||||
lingstingdisplay.name = "current sting"
|
||||
lingstingdisplay.screen_loc = ui_lingstingdisplay
|
||||
lingstingdisplay.layer = 20
|
||||
lingstingdisplay.invisibility = 101
|
||||
|
||||
mymob.blind = new /obj/screen()
|
||||
mymob.blind.icon = 'icons/mob/screen_full.dmi'
|
||||
mymob.blind.icon_state = "blackimageoverlay"
|
||||
@@ -310,7 +316,7 @@
|
||||
|
||||
mymob.client.screen = null
|
||||
|
||||
mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.nutrition_icon, mymob.pullin, mymob.blind, mymob.flash, mymob.damageoverlay, lingchemdisplay) //, mymob.hands, mymob.rest, mymob.sleep) //, mymob.mach )
|
||||
mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.nutrition_icon, mymob.pullin, mymob.blind, mymob.flash, mymob.damageoverlay, lingchemdisplay, lingstingdisplay) //, mymob.hands, mymob.rest, mymob.sleep) //, mymob.mach )
|
||||
mymob.client.screen += adding + hotkeybuttons
|
||||
inventory_shown = 0;
|
||||
|
||||
|
||||
@@ -142,6 +142,12 @@
|
||||
lingchemdisplay.layer = 20
|
||||
lingchemdisplay.invisibility = 101
|
||||
|
||||
lingstingdisplay = new /obj/screen()
|
||||
lingstingdisplay.name = "current sting"
|
||||
lingstingdisplay.screen_loc = ui_lingstingdisplay
|
||||
lingstingdisplay.layer = 20
|
||||
lingstingdisplay.invisibility = 101
|
||||
|
||||
mymob.blind = new /obj/screen()
|
||||
mymob.blind.icon = 'icons/mob/screen_full.dmi'
|
||||
mymob.blind.icon_state = "blackimageoverlay"
|
||||
@@ -162,5 +168,5 @@
|
||||
|
||||
mymob.client.screen = null
|
||||
|
||||
mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.pullin, mymob.blind, mymob.flash) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
|
||||
mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.pullin, mymob.blind, mymob.flash, lingchemdisplay, lingstingdisplay) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
|
||||
mymob.client.screen += adding + other
|
||||
@@ -179,6 +179,10 @@
|
||||
var/mob/living/carbon/human/H = usr
|
||||
H.quick_equip()
|
||||
|
||||
if("current sting")
|
||||
var/mob/living/carbon/U = usr
|
||||
U.unset_sting()
|
||||
|
||||
if("resist")
|
||||
if(isliving(usr))
|
||||
var/mob/living/L = usr
|
||||
@@ -201,26 +205,6 @@
|
||||
usr.hud_used.move_intent.icon_state = "running"
|
||||
if(istype(usr,/mob/living/carbon/alien/humanoid))
|
||||
usr.update_icons()
|
||||
if("m_intent")
|
||||
if(!usr.m_int)
|
||||
switch(usr.m_intent)
|
||||
if("run")
|
||||
usr.m_int = "13,14"
|
||||
if("walk")
|
||||
usr.m_int = "14,14"
|
||||
if("face")
|
||||
usr.m_int = "15,14"
|
||||
else
|
||||
usr.m_int = null
|
||||
if("walk")
|
||||
usr.m_intent = "walk"
|
||||
usr.m_int = "14,14"
|
||||
if("face")
|
||||
usr.m_intent = "face"
|
||||
usr.m_int = "15,14"
|
||||
if("run")
|
||||
usr.m_intent = "run"
|
||||
usr.m_int = "13,14"
|
||||
if("Reset Machine")
|
||||
usr.unset_machine()
|
||||
if("internal")
|
||||
|
||||
@@ -17,8 +17,13 @@
|
||||
/atom/proc/attack_hand(mob/user as mob)
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/RestrainedClickOn(var/atom/A)
|
||||
/*
|
||||
/mob/living/carbon/human/RestrainedClickOn(var/atom/A) ---carbons will handle this
|
||||
return
|
||||
*/
|
||||
|
||||
/mob/living/carbon/RestrainedClickOn(var/atom/A)
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/RangedAttack(var/atom/A)
|
||||
if(!gloves && !mutations.len) return
|
||||
@@ -51,6 +56,7 @@
|
||||
/mob/living/RestrainedClickOn(var/atom/A)
|
||||
return
|
||||
|
||||
|
||||
/*
|
||||
Monkeys
|
||||
*/
|
||||
@@ -67,6 +73,8 @@
|
||||
things considerably
|
||||
*/
|
||||
/mob/living/carbon/monkey/RestrainedClickOn(var/atom/A)
|
||||
if(..())
|
||||
return
|
||||
if(a_intent != "harm" || !ismob(A)) return
|
||||
if(istype(wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
return
|
||||
|
||||
@@ -90,16 +90,25 @@ datum/controller/vote
|
||||
var/list/winners = get_result()
|
||||
var/text
|
||||
if(winners.len > 0)
|
||||
if(winners.len > 1)
|
||||
text = "<b>Vote Tied Between:</b>\n"
|
||||
for(var/option in winners)
|
||||
text += "\t[option]\n"
|
||||
. = pick(winners)
|
||||
text += "<b>Vote Result: [.]</b>"
|
||||
if(question) text += "<b>[question]</b>"
|
||||
else text += "<b>[capitalize(mode)] Vote</b>"
|
||||
for(var/i=1,i<=choices.len,i++)
|
||||
var/votes = choices[choices[i]]
|
||||
if(!votes) votes = 0
|
||||
text += "\n<b>[choices[i]]:</b> [votes]"
|
||||
if(mode != "custom")
|
||||
if(winners.len > 1)
|
||||
text = "\n<b>Vote Tied Between:</b>"
|
||||
for(var/option in winners)
|
||||
text += "\n\t[option]"
|
||||
. = pick(winners)
|
||||
text += "\n<b>Vote Result: [.]</b>"
|
||||
else
|
||||
text += "\n<b>Did not vote:</b> [clients.len-voted.len]"
|
||||
else
|
||||
text += "<b>Vote Result: Inconclusive - No Votes!</b>"
|
||||
log_vote(text)
|
||||
world << "<font color='purple'>[text]</font>"
|
||||
world << "\n<font color='purple'>[text]</font>"
|
||||
return .
|
||||
|
||||
proc/result()
|
||||
@@ -167,7 +176,7 @@ datum/controller/vote
|
||||
if(mode == "custom")
|
||||
text += "\n[question]"
|
||||
log_vote(text)
|
||||
world << "<font color='purple'><b>[text]</b>\nType vote to place your votes.\nYou have [config.vote_period/10] seconds to vote.</font>"
|
||||
world << "\n<font color='purple'><b>[text]</b>\nType <b>vote</b> to place your votes.\nYou have [config.vote_period/10] seconds to vote.</font>"
|
||||
time_remaining = round(config.vote_period/10)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -49,6 +49,8 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
|
||||
var/can_carry = 1 // If the disease allows "carriers".
|
||||
// if hidden[1] is true, then virus is hidden from medical scanners
|
||||
// if hidden[2] is true, then virus is hidden from PANDEMIC machine
|
||||
var/requires = 0
|
||||
var/list/required_limb = list()
|
||||
|
||||
|
||||
/datum/disease/proc/stage_act()
|
||||
@@ -141,6 +143,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
|
||||
|
||||
|
||||
/datum/disease/proc/process()
|
||||
|
||||
if(!holder)
|
||||
active_diseases -= src
|
||||
return
|
||||
@@ -181,6 +184,13 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease
|
||||
|
||||
|
||||
/datum/disease/New(var/process=1, var/datum/disease/D)//process = 1 - adding the object to global list. List is processed by master controller.
|
||||
if(requires == 1)
|
||||
if(ishuman(affected_mob))
|
||||
var/mob/living/carbon/human/H = affected_mob
|
||||
if(!H.getlimb(required_limb))
|
||||
cure(1)
|
||||
return
|
||||
|
||||
cure_list = list(cure_id) // to add more cures, add more vars to this list in the actual disease's New()
|
||||
if(process) // Viruses in list are considered active.
|
||||
active_diseases += src
|
||||
|
||||
@@ -7,8 +7,6 @@
|
||||
|
||||
*/
|
||||
|
||||
#define RANDOM_STARTING_LEVEL 2
|
||||
|
||||
var/list/archive_diseases = list()
|
||||
|
||||
// The order goes from easy to cure to hard to cure.
|
||||
@@ -62,7 +60,7 @@ var/list/advance_cures = list(
|
||||
if(!symptoms || !symptoms.len)
|
||||
|
||||
if(!D || !D.symptoms || !D.symptoms.len)
|
||||
symptoms = GenerateSymptoms()
|
||||
symptoms = GenerateSymptoms(0, 2)
|
||||
else
|
||||
for(var/datum/symptom/S in D.symptoms)
|
||||
symptoms += new S.type
|
||||
@@ -136,7 +134,7 @@ var/list/advance_cures = list(
|
||||
return 0
|
||||
|
||||
// Will generate new unique symptoms, use this if there are none. Returns a list of symptoms that were generated.
|
||||
/datum/disease/advance/proc/GenerateSymptoms(var/type_level_limit = RANDOM_STARTING_LEVEL, var/amount_get = 0)
|
||||
/datum/disease/advance/proc/GenerateSymptoms(var/level_min, var/level_max, var/amount_get = 0)
|
||||
|
||||
var/list/generated = list() // Symptoms we generated.
|
||||
|
||||
@@ -144,13 +142,12 @@ var/list/advance_cures = list(
|
||||
var/list/possible_symptoms = list()
|
||||
for(var/symp in list_symptoms)
|
||||
var/datum/symptom/S = new symp
|
||||
if(S.level <= type_level_limit)
|
||||
if(S.level >= level_min && S.level <= level_max)
|
||||
if(!HasSymptom(S))
|
||||
possible_symptoms += S
|
||||
|
||||
if(!possible_symptoms.len)
|
||||
return
|
||||
//error("Advance Disease - We weren't able to get any possible symptoms in GenerateSymptoms([type_level_limit], [amount_get])")
|
||||
return generated
|
||||
|
||||
// Random chance to get more than one symptom
|
||||
var/number_of = amount_get
|
||||
@@ -159,10 +156,8 @@ var/list/advance_cures = list(
|
||||
while(prob(20))
|
||||
number_of += 1
|
||||
|
||||
for(var/i = 1; number_of >= i; i++)
|
||||
var/datum/symptom/S = pick(possible_symptoms)
|
||||
generated += S
|
||||
possible_symptoms -= S
|
||||
for(var/i = 1; number_of >= i && possible_symptoms.len; i++)
|
||||
generated += pick_n_take(possible_symptoms)
|
||||
|
||||
return generated
|
||||
|
||||
@@ -269,8 +264,8 @@ var/list/advance_cures = list(
|
||||
return
|
||||
|
||||
// Randomly generate a symptom, has a chance to lose or gain a symptom.
|
||||
/datum/disease/advance/proc/Evolve(var/level = 2)
|
||||
var/s = safepick(GenerateSymptoms(level, 1))
|
||||
/datum/disease/advance/proc/Evolve(var/min_level, var/max_level)
|
||||
var/s = safepick(GenerateSymptoms(min_level, max_level, 1))
|
||||
if(s)
|
||||
AddSymptom(s)
|
||||
Refresh(1)
|
||||
|
||||
@@ -12,12 +12,16 @@
|
||||
severity = "Medium"
|
||||
longevity = 1000
|
||||
hidden = list(0, 1)
|
||||
requires = 1
|
||||
required_limb = list(/obj/item/organ/limb/chest)
|
||||
|
||||
/datum/disease/appendicitis/stage_act()
|
||||
..()
|
||||
|
||||
switch(stage)
|
||||
if(1)
|
||||
if(prob(5)) affected_mob.emote("cough")
|
||||
if(prob(5))
|
||||
affected_mob.emote("cough")
|
||||
if(2)
|
||||
var/obj/item/organ/appendix/A = affected_mob.getorgan(/obj/item/organ/appendix)
|
||||
if(A)
|
||||
@@ -41,4 +45,5 @@
|
||||
else
|
||||
affected_mob << "<span class='warning'>You gag as you want to throw up, but there's nothing in your stomach!</span>"
|
||||
affected_mob.Weaken(10)
|
||||
affected_mob.adjustToxLoss(3)
|
||||
affected_mob.adjustToxLoss(3)
|
||||
|
||||
|
||||
@@ -11,9 +11,12 @@
|
||||
cure_chance = 15//higher chance to cure, since two reagents are required
|
||||
desc = "This disease destroys the braincells, causing brain fever, brain necrosis and general intoxication."
|
||||
severity = "Major"
|
||||
requires = 1
|
||||
required_limb = list(/obj/item/organ/limb/head)
|
||||
|
||||
/datum/disease/brainrot/stage_act() //Removed toxloss because damaging diseases are pretty horrible. Last round it killed the entire station because the cure didn't work -- Urist
|
||||
/datum/disease/brainrot/stage_act() //Removed toxloss because damaging diseases are pretty horrible. Last round it killed the entire station because the cure didn't work -- Urist -ACTUALLY Removed rather than commented out, I don't see it returning - RR
|
||||
..()
|
||||
|
||||
switch(stage)
|
||||
if(2)
|
||||
if(prob(2))
|
||||
@@ -35,21 +38,12 @@
|
||||
affected_mob.updatehealth()
|
||||
if(prob(2))
|
||||
affected_mob << "\red Your try to remember something important...but can't."
|
||||
/* if(prob(10))
|
||||
affected_mob.adjustToxLoss(3)
|
||||
affected_mob.updatehealth()
|
||||
if(prob(2))
|
||||
affected_mob << "\red Your head hurts." */
|
||||
|
||||
if(4)
|
||||
if(prob(2))
|
||||
affected_mob.emote("stare")
|
||||
if(prob(2))
|
||||
affected_mob.emote("drool")
|
||||
/* if(prob(15))
|
||||
affected_mob.adjustToxLoss(4)
|
||||
affected_mob.updatehealth()
|
||||
if(prob(2))
|
||||
affected_mob << "\red Your head hurts." */
|
||||
if(prob(15) && affected_mob.getBrainLoss()<=98) //shouldn't retard you to death now
|
||||
affected_mob.adjustBrainLoss(3)
|
||||
affected_mob.updatehealth()
|
||||
@@ -64,4 +58,5 @@
|
||||
affected_mob.emote("snore")
|
||||
if(prob(15))
|
||||
affected_mob.stuttering += 3
|
||||
|
||||
return
|
||||
@@ -11,7 +11,8 @@
|
||||
permeability_mod = 0.75
|
||||
desc = "Some speculate, that this virus is the cause of Wizard Federation existance. Subjects affected show the signs of mental retardation, yelling obscure sentences or total gibberish. On late stages subjects sometime express the feelings of inner power, and, cite, 'the ability to control the forces of cosmos themselves!' A gulp of strong, manly spirits usually reverts them to normal, humanlike, condition."
|
||||
severity = "Major"
|
||||
|
||||
requires = 1
|
||||
required_limb = list(/obj/item/organ/limb/head)
|
||||
|
||||
/*
|
||||
BIRUZ BENNAR
|
||||
|
||||
+22
-22
@@ -509,7 +509,7 @@ datum/mind
|
||||
ticker.mode.update_rev_icons_removed(src)
|
||||
special_role = null
|
||||
message_admins("[key_name_admin(usr)] has de-rev'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has de-rev'ed [current].")
|
||||
log_admin("[key_name(usr)] has de-rev'ed [current].")
|
||||
|
||||
if("rev")
|
||||
if(src in ticker.mode.head_revolutionaries)
|
||||
@@ -524,7 +524,7 @@ datum/mind
|
||||
ticker.mode.update_rev_icons_added(src)
|
||||
special_role = "Revolutionary"
|
||||
message_admins("[key_name_admin(usr)] has rev'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has rev'ed [current].")
|
||||
log_admin("[key_name(usr)] has rev'ed [current].")
|
||||
|
||||
if("headrev")
|
||||
if(src in ticker.mode.revolutionaries)
|
||||
@@ -550,7 +550,7 @@ datum/mind
|
||||
ticker.mode.update_rev_icons_added(src)
|
||||
special_role = "Head Revolutionary"
|
||||
message_admins("[key_name_admin(usr)] has head-rev'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has head-rev'ed [current].")
|
||||
log_admin("[key_name(usr)] has head-rev'ed [current].")
|
||||
|
||||
if("autoobjectives")
|
||||
ticker.mode.forge_revolutionary_objectives(src)
|
||||
@@ -600,7 +600,7 @@ datum/mind
|
||||
current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a cultist!</B></FONT>"
|
||||
memory = ""
|
||||
message_admins("[key_name_admin(usr)] has de-cult'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has de-cult'ed [current].")
|
||||
log_admin("[key_name(usr)] has de-cult'ed [current].")
|
||||
if("cultist")
|
||||
if(!(src in ticker.mode.cult))
|
||||
ticker.mode.cult += src
|
||||
@@ -612,7 +612,7 @@ datum/mind
|
||||
if (istype(cult))
|
||||
cult.memorize_cult_objectives(src)
|
||||
message_admins("[key_name_admin(usr)] has cult'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has cult'ed [current].")
|
||||
log_admin("[key_name(usr)] has cult'ed [current].")
|
||||
if("tome")
|
||||
var/mob/living/carbon/human/H = current
|
||||
if (istype(H))
|
||||
@@ -643,7 +643,7 @@ datum/mind
|
||||
special_role = null
|
||||
current.spellremove(current)
|
||||
current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a wizard!</B></FONT>"
|
||||
log_admin("[key_name_admin(usr)] has de-wizard'ed [current].")
|
||||
log_admin("[key_name(usr)] has de-wizard'ed [current].")
|
||||
if("wizard")
|
||||
if(!(src in ticker.mode.wizards))
|
||||
ticker.mode.wizards += src
|
||||
@@ -651,7 +651,7 @@ datum/mind
|
||||
//ticker.mode.learn_basic_spells(current)
|
||||
current << "<B>\red You are the Space Wizard!</B>"
|
||||
message_admins("[key_name_admin(usr)] has wizard'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has wizard'ed [current].")
|
||||
log_admin("[key_name(usr)] has wizard'ed [current].")
|
||||
if("lair")
|
||||
current.loc = pick(wizardstart)
|
||||
if("dressup")
|
||||
@@ -673,7 +673,7 @@ datum/mind
|
||||
if(changeling) del(changeling)
|
||||
current << "<FONT color='red' size = 3><B>You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!</B></FONT>"
|
||||
message_admins("[key_name_admin(usr)] has de-changeling'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has de-changeling'ed [current].")
|
||||
log_admin("[key_name(usr)] has de-changeling'ed [current].")
|
||||
if("changeling")
|
||||
if(!(src in ticker.mode.changelings))
|
||||
ticker.mode.changelings += src
|
||||
@@ -681,7 +681,7 @@ datum/mind
|
||||
special_role = "Changeling"
|
||||
current << "<B><font color='red'>Your powers are awoken. A flash of memory returns to us...we are a changeling!</font></B>"
|
||||
message_admins("[key_name_admin(usr)] has changeling'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has changeling'ed [current].")
|
||||
log_admin("[key_name(usr)] has changeling'ed [current].")
|
||||
if("autoobjectives")
|
||||
ticker.mode.forge_changeling_objectives(src)
|
||||
usr << "\blue The objectives for changeling [key] have been generated. You can edit them and anounce manually."
|
||||
@@ -707,7 +707,7 @@ datum/mind
|
||||
objectives-=O
|
||||
current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a syndicate operative!</B></FONT>"
|
||||
message_admins("[key_name_admin(usr)] has de-nuke op'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has de-nuke op'ed [current].")
|
||||
log_admin("[key_name(usr)] has de-nuke op'ed [current].")
|
||||
if("nuclear")
|
||||
if(!(src in ticker.mode.syndicates))
|
||||
ticker.mode.syndicates += src
|
||||
@@ -721,7 +721,7 @@ datum/mind
|
||||
ticker.mode.forge_syndicate_objectives(src)
|
||||
ticker.mode.greet_syndicate(src)
|
||||
message_admins("[key_name_admin(usr)] has nuke op'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has nuke op'ed [current].")
|
||||
log_admin("[key_name(usr)] has nuke op'ed [current].")
|
||||
if("lair")
|
||||
current.loc = get_turf(locate("landmark*Syndicate-Spawn"))
|
||||
if("dressup")
|
||||
@@ -758,7 +758,7 @@ datum/mind
|
||||
special_role = null
|
||||
current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a traitor!</B></FONT>"
|
||||
message_admins("[key_name_admin(usr)] has de-traitor'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has de-traitor'ed [current].")
|
||||
log_admin("[key_name(usr)] has de-traitor'ed [current].")
|
||||
if(isAI(current))
|
||||
var/mob/living/silicon/ai/A = current
|
||||
A.set_zeroth_law("")
|
||||
@@ -771,7 +771,7 @@ datum/mind
|
||||
special_role = "traitor"
|
||||
current << "<B>\red You are a traitor!</B>"
|
||||
message_admins("[key_name_admin(usr)] has traitor'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has traitor'ed [current].")
|
||||
log_admin("[key_name(usr)] has traitor'ed [current].")
|
||||
if(isAI(current))
|
||||
var/mob/living/silicon/ai/A = current
|
||||
call(/datum/game_mode/proc/add_law_zero)(A)
|
||||
@@ -826,7 +826,8 @@ datum/mind
|
||||
log_admin("[key_name(usr)] attempting to humanize [key_name(current)]")
|
||||
message_admins("\blue [key_name_admin(usr)] attempting to humanize [key_name_admin(current)]")
|
||||
H = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG)
|
||||
src = H.mind
|
||||
if(H)
|
||||
src = H.mind
|
||||
|
||||
else if (href_list["silicon"])
|
||||
switch(href_list["silicon"])
|
||||
@@ -850,12 +851,12 @@ datum/mind
|
||||
|
||||
A << "\red <FONT size = 3><B>You have been patched! You are no longer malfunctioning!</B></FONT>"
|
||||
message_admins("[key_name_admin(usr)] has de-malf'ed [A].")
|
||||
log_admin("[key_name_admin(usr)] has de-malf'ed [A].")
|
||||
log_admin("[key_name(usr)] has de-malf'ed [A].")
|
||||
|
||||
if("malf")
|
||||
make_AI_Malf()
|
||||
message_admins("[key_name_admin(usr)] has malf'ed [current].")
|
||||
log_admin("[key_name_admin(usr)] has malf'ed [current].")
|
||||
log_admin("[key_name(usr)] has malf'ed [current].")
|
||||
|
||||
if("unemag")
|
||||
var/mob/living/silicon/robot/R = current
|
||||
@@ -873,7 +874,7 @@ datum/mind
|
||||
R.module_state_3 = null
|
||||
R.contents -= R.module.emag
|
||||
message_admins("[key_name_admin(usr)] has unemag'ed [R].")
|
||||
log_admin("[key_name_admin(usr)] has unemag'ed [R].")
|
||||
log_admin("[key_name(usr)] has unemag'ed [R].")
|
||||
|
||||
if("unemagcyborgs")
|
||||
if (istype(current, /mob/living/silicon/ai))
|
||||
@@ -893,7 +894,7 @@ datum/mind
|
||||
R.module_state_3 = null
|
||||
R.contents -= R.module.emag
|
||||
message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.")
|
||||
log_admin("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.")
|
||||
log_admin("[key_name(usr)] has unemag'ed [ai]'s Cyborgs.")
|
||||
|
||||
else if (href_list["common"])
|
||||
switch(href_list["common"])
|
||||
@@ -903,7 +904,7 @@ datum/mind
|
||||
if("takeuplink")
|
||||
take_uplink()
|
||||
memory = null//Remove any memory they may have had.
|
||||
log_admin("[key_name_admin(usr)] removed [current]'s uplink.")
|
||||
log_admin("[key_name(usr)] removed [current]'s uplink.")
|
||||
if("crystals")
|
||||
if (check_rights(R_FUN, 0))
|
||||
var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink()
|
||||
@@ -914,11 +915,11 @@ datum/mind
|
||||
if (!isnull(crystals))
|
||||
if (suplink)
|
||||
suplink.uses = crystals
|
||||
log_admin("[key_name_admin(usr)] changed [current]'s telecrystal count to [crystals].")
|
||||
log_admin("[key_name(usr)] changed [current]'s telecrystal count to [crystals].")
|
||||
if("uplink")
|
||||
if (!ticker.mode.equip_traitor(current, !(src in ticker.mode.traitors)))
|
||||
usr << "\red Equipping a syndicate failed!"
|
||||
log_admin("[key_name_admin(usr)] attempted to give [current] an uplink.")
|
||||
log_admin("[key_name(usr)] attempted to give [current] an uplink.")
|
||||
|
||||
else if (href_list["obj_announce"])
|
||||
var/obj_count = 1
|
||||
@@ -1222,4 +1223,3 @@ datum/mind
|
||||
mind.special_role = "Cultist"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
if(!projectile) // step and step_to sleeps so we'll have to check again.
|
||||
break
|
||||
|
||||
if(!proj_lingering && projectile.loc == current_loc) //if it didn't move since last time
|
||||
if(!target || (!proj_lingering && projectile.loc == current_loc)) //if it didn't move since last time
|
||||
del(projectile)
|
||||
break
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@ var/list/uplink_items = list()
|
||||
name = "C-20r Submachine Gun"
|
||||
desc = "A fully-loaded Scarborough Arms-developed submachine gun that fires 12mm automatic rounds with a 20-round magazine."
|
||||
item = /obj/item/weapon/gun/projectile/automatic/c20r
|
||||
cost = 8
|
||||
cost = 7
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/dangerous/machinegun
|
||||
@@ -159,7 +159,7 @@ var/list/uplink_items = list()
|
||||
desc = "A chemical sprayer that allows a wide dispersal of selected chemicals. Especially tailored by the Tiger Cooperative, the deadly blend it comes stocked with will disorient, damage, and disable your foes... \
|
||||
Use with extreme caution, to prevent exposure to yourself and your fellow operatives."
|
||||
item = /obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror
|
||||
cost = 15
|
||||
cost = 10
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/dangerous/gygax
|
||||
@@ -201,7 +201,7 @@ var/list/uplink_items = list()
|
||||
name = "Ammo-10mm"
|
||||
desc = "An additional 8-round 10mm magazine for use in the Stetchkin pistol."
|
||||
item = /obj/item/ammo_box/magazine/m10mm
|
||||
cost = 2
|
||||
cost = 1
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/ammo/machinegun
|
||||
@@ -241,7 +241,7 @@ var/list/uplink_items = list()
|
||||
name = "Stetchkin Silencer"
|
||||
desc = "Fitted for use on the Stetchkin pistol, this silencer will make its shots quieter when equipped onto it."
|
||||
item = /obj/item/weapon/silencer
|
||||
cost = 3
|
||||
cost = 2
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
// STEALTHY TOOLS
|
||||
@@ -373,11 +373,18 @@ var/list/uplink_items = list()
|
||||
|
||||
/datum/uplink_item/device_tools/syndicate_bomb
|
||||
name = "Syndicate Bomb"
|
||||
desc = "The Syndicate Bomb has an adjustable timer with a minimum setting of 30 seconds. Ordering the bomb sends you a small beacon, which will teleport the explosive to your location when you activate it. \
|
||||
You can wrench the bomb down to prevent removal. The crew may defuse the bomb."
|
||||
desc = "The Syndicate Bomb has an adjustable timer with a minimum setting of 60 seconds. Ordering the bomb sends you a small beacon, which will teleport the explosive to your location when you activate it. \
|
||||
You can wrench the bomb down to prevent removal. The crew may attempt to defuse the bomb."
|
||||
item = /obj/item/device/sbeacondrop/bomb
|
||||
cost = 5
|
||||
|
||||
/datum/uplink_item/device_tools/syndicate_detonator
|
||||
name = "Syndicate Detonator"
|
||||
desc = "The Syndicate Detonator is a companion device to the Syndicate Bomb. Simply press the included button and an encrypted radio frequency will instruct all live syndicate bombs to detonate. \
|
||||
Useful for when speed matters or you wish to synchronize multiple bomb blasts. Be sure to stand clear of the blast radius before using the detonator."
|
||||
item = /obj/item/device/syndicatedetonator
|
||||
cost = 1
|
||||
|
||||
/datum/uplink_item/device_tools/teleporter
|
||||
name = "Teleporter Circuit Board"
|
||||
desc = "A printed circuit board that completes the teleporter onboard the mothership. Advise you test fire the teleporter before entering it, as malfunctions can occur."
|
||||
|
||||
@@ -11,6 +11,8 @@ var/const/WIRE_ACTIVATE = 16 // Will start a bombs timer if pulsed, will hint if
|
||||
|
||||
/datum/wires/syndicatebomb/UpdatePulsed(var/index)
|
||||
var/obj/machinery/syndicatebomb/P = holder
|
||||
if(P.degutted)
|
||||
return
|
||||
switch(index)
|
||||
if(WIRE_BOOM)
|
||||
if (P.active)
|
||||
@@ -47,6 +49,8 @@ var/const/WIRE_ACTIVATE = 16 // Will start a bombs timer if pulsed, will hint if
|
||||
|
||||
/datum/wires/syndicatebomb/UpdateCut(var/index, var/mended)
|
||||
var/obj/machinery/syndicatebomb/P = holder
|
||||
if(P.degutted)
|
||||
return
|
||||
switch(index)
|
||||
if(WIRE_EXPLODE)
|
||||
if(!mended)
|
||||
|
||||
@@ -150,10 +150,12 @@ proc/process_ghost_teleport_locs()
|
||||
|
||||
/area/shuttle/escape/centcom
|
||||
name = "\improper Emergency Shuttle Centcom"
|
||||
icon_state = "shuttle"
|
||||
destination = /area/shuttle/escape/station
|
||||
|
||||
/area/shuttle/escape/transit // the area to pass through for 3 minute transit
|
||||
name = "\improper Emergency Shuttle Transit"
|
||||
icon_state = "shuttle"
|
||||
destination = /area/shuttle/escape/centcom
|
||||
|
||||
/area/shuttle/escape_pod1
|
||||
|
||||
+3
-4
@@ -17,9 +17,6 @@
|
||||
// replaced by OPENCONTAINER flags and atom/proc/is_open_container()
|
||||
///Chemistry.
|
||||
|
||||
//Detective Work, used for the duplicate data points kept in the scanners
|
||||
var/list/original_atom
|
||||
|
||||
/atom/proc/throw_impact(atom/hit_atom)
|
||||
if(istype(hit_atom,/mob/living))
|
||||
var/mob/living/M = hit_atom
|
||||
@@ -244,7 +241,7 @@ var/list/blood_splatter_icons = list()
|
||||
|
||||
//returns 1 if made bloody, returns 0 otherwise
|
||||
/atom/proc/add_blood(mob/living/carbon/M)
|
||||
if(flags & NOBLOODY)
|
||||
if(rejects_blood())
|
||||
return 0
|
||||
if(!initial(icon) || !initial(icon_state))
|
||||
return 0
|
||||
@@ -297,6 +294,8 @@ var/list/blood_splatter_icons = list()
|
||||
update_inv_gloves() //handles bloody hands overlays and updating
|
||||
return 1 //we applied blood to the item
|
||||
|
||||
/atom/proc/rejects_blood()
|
||||
return 0
|
||||
|
||||
/atom/proc/add_vomit_floor(mob/living/carbon/M as mob, var/toxvomit = 0)
|
||||
if( istype(src, /turf/simulated) )
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
layer = 3
|
||||
var/last_move = null
|
||||
var/anchored = 0
|
||||
// var/elevation = 2 - not used anywhere
|
||||
var/move_speed = 10
|
||||
var/l_move_time = 1
|
||||
var/m_flag = 1
|
||||
|
||||
+1
-1
@@ -309,7 +309,7 @@
|
||||
else
|
||||
if(istype(M, /mob/living/carbon/monkey)) // monkey > human,
|
||||
var/mob/living/carbon/human/O = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS)
|
||||
if(connected) //inside dna thing
|
||||
if(O && connected) //inside dna thing
|
||||
var/obj/machinery/dna_scannernew/C = connected
|
||||
O.loc = C
|
||||
C.occupant = O
|
||||
|
||||
@@ -231,6 +231,8 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
var/purchasedpowers = list()
|
||||
var/mimicing = ""
|
||||
var/canrespec = 0
|
||||
var/datum/dna/chosen_dna
|
||||
var/chosen_sting
|
||||
|
||||
/datum/changeling/New(var/gender=FEMALE)
|
||||
..()
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
|
||||
//removes our changeling verbs
|
||||
/mob/proc/remove_changeling_powers()
|
||||
var/mob/living/carbon/C = src
|
||||
C.unset_sting()
|
||||
for(var/datum/power/changeling/P in powerinstances)
|
||||
if(P.isVerb)
|
||||
verbs -= P.verbpath
|
||||
@@ -179,12 +181,12 @@
|
||||
|
||||
O.make_changeling(1)
|
||||
O.verbs += /mob/living/carbon/proc/changeling_human_form
|
||||
O.unset_sting()
|
||||
feedback_add_details("changeling_powers","LF")
|
||||
. = 1
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
//Transform into a human
|
||||
/mob/living/carbon/proc/changeling_human_form()
|
||||
|
||||
@@ -213,7 +215,9 @@
|
||||
|
||||
var/mob/living/carbon/human/O = humanize((TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPSRC),chosen_dna.real_name)
|
||||
|
||||
O.make_changeling()
|
||||
if(O)
|
||||
O.make_changeling()
|
||||
O.unset_sting()
|
||||
feedback_add_details("changeling_powers","LFT")
|
||||
. = 1
|
||||
del(src)
|
||||
@@ -524,118 +528,113 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
if(src && src.mind && src.mind.changeling)
|
||||
src.mind.changeling.mimicing = ""
|
||||
|
||||
|
||||
|
||||
//////////
|
||||
//STINGS// //They get a pretty header because there's just so fucking many of them ;_;
|
||||
//////////
|
||||
|
||||
/mob/proc/sting_can_reach(mob/M as mob, sting_range = 1)
|
||||
if(M.loc == src.loc) return 1 //target and source are in the same thing
|
||||
if(!isturf(src.loc) || !isturf(M.loc)) return 0 //One is inside, the other is outside something.
|
||||
if(AStar(src.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, sting_range)) //If a path exists, good!
|
||||
/mob/living/carbon/proc/set_sting(A, icon, dna=null) //setting the sting and ui icon for it
|
||||
src << "<span class='notice'>We prepare our sting, use alt+click on target to sting them.</span>"
|
||||
src.mind.changeling.chosen_sting = A
|
||||
if(dna)
|
||||
src.mind.changeling.chosen_dna = dna
|
||||
hud_used.lingstingdisplay.icon_state = icon
|
||||
hud_used.lingstingdisplay.invisibility = 0
|
||||
|
||||
/mob/living/carbon/proc/unset_sting() //unsetting the previous
|
||||
src << "<span class='warning'>We retract our sting, we can't sting anyone for now.</span>"
|
||||
src.mind.changeling.chosen_sting = null
|
||||
hud_used.lingstingdisplay.icon_state = null
|
||||
hud_used.lingstingdisplay.invisibility = 101
|
||||
|
||||
/mob/living/carbon/proc/sting_can_reach(mob/living/carbon/C, chem_cost) //handles all the checks there are
|
||||
if(!isturf(src.loc)) return 0
|
||||
if(get_dist(src, C) > (src.mind.changeling.sting_range)) return 0 //sanity check as AStar is still throwing insane stunts
|
||||
if(!AStar(src.loc, C.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, src.mind.changeling.sting_range)) return 0 //hope this ancient magic still works
|
||||
if(src.mind.changeling.chem_charges < chem_cost)
|
||||
src << "<span class='warning'>Not enough chemicals.</span>"
|
||||
return 0
|
||||
src.mind.changeling.chem_charges -= chem_cost
|
||||
src << "<span class='notice'>We stealthly sting [C.name].</span>"
|
||||
if(C.mind && C.mind.changeling)
|
||||
C << "<span class='warning'>You feel a tiny prick.</span>"
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//Handles the general sting code to reduce on copypasta (seeming as somebody decided to make SO MANY dumb abilities)
|
||||
/mob/proc/changeling_sting(var/required_chems=0, var/verb_path)
|
||||
var/datum/changeling/changeling = changeling_power(required_chems)
|
||||
if(!changeling) return
|
||||
|
||||
var/list/victims = list()
|
||||
for(var/mob/living/carbon/C in oview(changeling.sting_range))
|
||||
victims += C
|
||||
var/mob/living/carbon/T = input(src, "Who will we sting?") as null|anything in victims
|
||||
|
||||
if(!T) return
|
||||
if(!(T in view(changeling.sting_range))) return
|
||||
if(!sting_can_reach(T, changeling.sting_range)) return
|
||||
if(!changeling_power(required_chems)) return
|
||||
|
||||
changeling.chem_charges -= required_chems
|
||||
verbs -= verb_path
|
||||
spawn(5) verbs += verb_path
|
||||
|
||||
src << "<span class='notice'>We stealthily sting [T].</span>"
|
||||
if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting
|
||||
T << "<span class='warning'>You feel a tiny prick.</span>"
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/proc/changeling_transformation_sting()
|
||||
set category = "Changeling"
|
||||
set name = "Transformation Sting (40)"
|
||||
set desc= "Transform the target to one of our stored DNAs"
|
||||
|
||||
var/datum/changeling/changeling = changeling_power(40)
|
||||
if(!changeling) return 0
|
||||
|
||||
var/list/names = list()
|
||||
for(var/datum/dna/DNA in changeling.absorbed_dna)
|
||||
for(var/datum/dna/DNA in mind.changeling.absorbed_dna)
|
||||
names += DNA.real_name
|
||||
|
||||
var/S = input("Select the target DNA: ", "Target DNA", null) as null|anything in names
|
||||
if(!S) return
|
||||
|
||||
var/datum/dna/chosen_dna = changeling.GetDNA(S)
|
||||
if(!chosen_dna)
|
||||
var/datum/dna/D = mind.changeling.GetDNA(S)
|
||||
if(!D)
|
||||
return
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(40,/mob/living/carbon/proc/changeling_transformation_sting)
|
||||
if(!T) return 0
|
||||
set_sting(/mob/living/carbon/proc/sting_effect_trasnform, "sting_transform", D)
|
||||
|
||||
/mob/living/carbon/proc/sting_effect_trasnform(mob/living/carbon/T)
|
||||
if(!sting_can_reach(T, 40))
|
||||
return 0
|
||||
if((HUSK in T.mutations) || !check_dna_integrity(T))
|
||||
src << "<span class='warning'>Our sting appears ineffective against its DNA.</span>"
|
||||
return 0
|
||||
T.dna = chosen_dna
|
||||
T.real_name = chosen_dna.real_name
|
||||
|
||||
T.dna = src.mind.changeling.chosen_dna
|
||||
T.real_name = src.mind.changeling.chosen_dna.real_name
|
||||
updateappearance(T)
|
||||
domutcheck(T, null)
|
||||
feedback_add_details("changeling_powers","TS")
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/carbon/proc/changeling_extract_dna_sting()
|
||||
set category = "Changeling"
|
||||
set name = "Extract DNA Sting (25)"
|
||||
set desc="Stealthily sting a target to extract their DNA."
|
||||
|
||||
var/datum/changeling/changeling = null
|
||||
if(src.mind && src.mind.changeling)
|
||||
changeling = src.mind.changeling
|
||||
if(!changeling)
|
||||
set_sting(/mob/living/carbon/proc/sting_effect_extract, "sting_extract")
|
||||
|
||||
/mob/living/carbon/proc/sting_effect_extract(mob/living/carbon/T)
|
||||
if(!sting_can_reach(T, 25))
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(25, /mob/living/carbon/proc/changeling_extract_dna_sting)
|
||||
if(!T) return 0
|
||||
|
||||
if(changeling.can_absorb_dna(T, usr))
|
||||
changeling.absorb_dna(T, usr)
|
||||
if(src.mind.changeling.can_absorb_dna(T, usr))
|
||||
src.mind.changeling.absorb_dna(T, usr)
|
||||
else//If the sting fails, give the guy most of his chems back.
|
||||
changeling.chem_charges += 20
|
||||
src.mind.changeling.chem_charges += 20
|
||||
|
||||
feedback_add_details("changeling_powers","ED")
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/carbon/proc/changeling_mute_sting()
|
||||
set category = "Changeling"
|
||||
set name = "Mute sting (20)"
|
||||
set desc= "Temporarily mutes the target."
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(20,/mob/living/carbon/proc/changeling_mute_sting)
|
||||
if(!T) return 0
|
||||
set_sting(/mob/living/carbon/proc/sting_effect_mute, "sting_mute")
|
||||
|
||||
/mob/living/carbon/proc/sting_effect_mute(mob/living/carbon/T)
|
||||
if(!sting_can_reach(T, 20))
|
||||
return 0
|
||||
T.silent += 30
|
||||
feedback_add_details("changeling_powers","MS")
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/carbon/proc/changeling_blind_sting()
|
||||
set category = "Changeling"
|
||||
set name = "Blind Sting (25)"
|
||||
set desc= "Temporarily blinds the target."
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(25,/mob/living/carbon/proc/changeling_blind_sting)
|
||||
if(!T) return 0
|
||||
set_sting(/mob/living/carbon/proc/sting_effect_blind, "sting_blind")
|
||||
|
||||
/mob/living/carbon/proc/sting_effect_blind(mob/living/carbon/T)
|
||||
if(!sting_can_reach(T, 25))
|
||||
return 0
|
||||
T << "<span class='danger'>Your eyes burn horrifically!</span>"
|
||||
T.disabilities |= NEARSIGHTED
|
||||
T.eye_blind = 20
|
||||
@@ -643,28 +642,31 @@ var/list/datum/dna/hivemind_bank = list()
|
||||
feedback_add_details("changeling_powers","BS")
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/carbon/proc/changeling_lsd_sting()
|
||||
set category = "Changeling"
|
||||
set name = "Hallucination Sting (5)"
|
||||
set desc = "Causes terror in the target."
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(5,/mob/living/carbon/proc/changeling_lsd_sting)
|
||||
if(!T) return 0
|
||||
set_sting(/mob/living/carbon/proc/sting_effect_lsd, "sting_lsd")
|
||||
|
||||
/mob/living/carbon/proc/sting_effect_lsd(mob/living/carbon/T)
|
||||
if(!sting_can_reach(T, 5))
|
||||
return 0
|
||||
spawn(rand(300,600))
|
||||
if(T) T.hallucination += 400
|
||||
feedback_add_details("changeling_powers","HS")
|
||||
return 1
|
||||
|
||||
|
||||
/mob/living/carbon/proc/changeling_cryo_sting()
|
||||
set category = "Changeling"
|
||||
set name = "Cryogenic Sting (15)"
|
||||
set desc = "Cools the target, slowing them."
|
||||
|
||||
var/mob/living/carbon/T = changeling_sting(15,/mob/living/carbon/proc/changeling_cryo_sting)
|
||||
if(!T) return 0
|
||||
set_sting(/mob/living/carbon/proc/sting_effect_cryo, "sting_cryo")
|
||||
|
||||
/mob/living/carbon/proc/sting_effect_cryo(mob/living/carbon/T)
|
||||
if(!sting_can_reach(T, 15))
|
||||
return 0
|
||||
if(T.reagents)
|
||||
T.reagents.add_reagent("frostoil", 30)
|
||||
T.reagents.add_reagent("ice", 30)
|
||||
|
||||
@@ -90,29 +90,37 @@
|
||||
if (href_list["rune"])
|
||||
switch(href_list["rune"])
|
||||
if("newtome")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(usr)
|
||||
usr.put_in_hands(T)
|
||||
T.imbue = "newtome"
|
||||
if("teleport")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(usr)
|
||||
usr.put_in_hands(T)
|
||||
T.imbue = "[pick("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")]"
|
||||
T.info = "[T.imbue]"
|
||||
if("emp")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(usr)
|
||||
usr.put_in_hands(T)
|
||||
T.imbue = "emp"
|
||||
if("conceal")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(usr)
|
||||
usr.put_in_hands(T)
|
||||
T.imbue = "conceal"
|
||||
if("communicate")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(usr)
|
||||
usr.put_in_hands(T)
|
||||
T.imbue = "communicate"
|
||||
if("runestun")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(usr)
|
||||
usr.put_in_hands(T)
|
||||
T.imbue = "runestun"
|
||||
if("armor")
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
|
||||
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(usr)
|
||||
usr.put_in_hands(T)
|
||||
T.imbue = "armor"
|
||||
if("soulstone")
|
||||
new /obj/item/device/soulstone(get_turf(usr))
|
||||
var/obj/item/device/soulstone/T = new /obj/item/device/soulstone(usr)
|
||||
usr.put_in_hands(T)
|
||||
if("construct")
|
||||
new /obj/structure/constructshell(get_turf(usr))
|
||||
src.uses--
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
//Triumvirate?
|
||||
if (ticker.triai == 1)
|
||||
required_enemies = 3
|
||||
required_players = max(required_enemies+1, required_players) //to prevent issues if players are set too low
|
||||
required_players = max(required_enemies+1, required_players) //to prevent issues if players are set too low
|
||||
return ..()
|
||||
|
||||
/datum/game_mode/malfunction/get_players_for_role(var/role = BE_MALF)
|
||||
@@ -187,6 +187,12 @@
|
||||
command_alert("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert")
|
||||
set_security_level("delta")
|
||||
|
||||
for(var/obj/item/weapon/pinpointer/point in world)
|
||||
for(var/datum/mind/AI_mind in ticker.mode.malf_ai)
|
||||
var/mob/living/silicon/ai/A = AI_mind.current // the current mob the mind owns
|
||||
if(A.stat != DEAD)
|
||||
point.the_disk = A //The pinpointer now tracks the AI core.
|
||||
|
||||
ticker.mode:malf_mode_declared = 1
|
||||
for(var/datum/mind/AI_mind in ticker.mode:malf_ai)
|
||||
AI_mind.current.verbs -= /datum/game_mode/malfunction/proc/takeover
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#define METEOR_TEMPERATURE
|
||||
|
||||
/var/const/meteor_wave_delay = 625 //minimum wait between waves in tenths of seconds
|
||||
//set to at least 100 unless you want evarr ruining every round
|
||||
|
||||
@@ -95,37 +93,22 @@
|
||||
icon_state = "smallf"
|
||||
pass_flags = PASSTABLE | PASSGRILLE
|
||||
|
||||
/obj/effect/meteor/Move()
|
||||
var/turf/T = src.loc
|
||||
if (istype(T, /turf))
|
||||
T.hotspot_expose(METEOR_TEMPERATURE, 1000)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/effect/meteor/Bump(atom/A)
|
||||
spawn(0)
|
||||
for(var/mob/M in range(10, src))
|
||||
if(!M.stat && !istype(M, /mob/living/silicon/ai)) //bad idea to shake an ai's view
|
||||
shake_camera(M, 3, 1)
|
||||
if (A)
|
||||
A.meteorhit(src)
|
||||
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||||
if (--src.hits <= 0)
|
||||
if (A)
|
||||
A.meteorhit(src)
|
||||
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||||
if (--src.hits <= 0)
|
||||
|
||||
//Prevent meteors from blowing up the singularity's containment.
|
||||
//Changing emitter and generator ex_act would result in them being bomb and C4 proof.
|
||||
if(!istype(A,/obj/machinery/power/emitter) && \
|
||||
!istype(A,/obj/machinery/field/generator) && \
|
||||
prob(15))
|
||||
|
||||
explosion(src.loc, 4, 5, 6, 7, 0)
|
||||
playsound(src.loc, "explosion", 50, 1)
|
||||
del(src)
|
||||
return
|
||||
//Prevent meteors from blowing up the singularity's containment.
|
||||
//Changing emitter and generator ex_act would result in them being bomb and C4 proof.
|
||||
if(!istype(A,/obj/machinery/power/emitter) && \
|
||||
!istype(A,/obj/machinery/field/generator) && \
|
||||
prob(15))
|
||||
explosion(src.loc, 4, 5, 6, 7, 0)
|
||||
del(src)
|
||||
|
||||
|
||||
/obj/effect/meteor/ex_act(severity)
|
||||
|
||||
if (severity < 4)
|
||||
del(src)
|
||||
return
|
||||
@@ -138,26 +121,26 @@
|
||||
return
|
||||
|
||||
Bump(atom/A)
|
||||
spawn(0)
|
||||
//Prevent meteors from blowing up the singularity's containment.
|
||||
//Changing emitter and generator ex_act would result in them being bomb and C4 proof
|
||||
if(!istype(A,/obj/machinery/power/emitter) && \
|
||||
!istype(A,/obj/machinery/field/generator))
|
||||
if(--src.hits <= 0)
|
||||
del(src) //Dont blow up singularity containment if we get stuck there.
|
||||
//Prevent meteors from blowing up the singularity's containment.
|
||||
//Changing emitter and generator ex_act would result in them being bomb and C4 proof
|
||||
if(!istype(A,/obj/machinery/power/emitter) && \
|
||||
!istype(A,/obj/machinery/field/generator))
|
||||
if(--src.hits <= 0)
|
||||
del(src) //Dont blow up singularity containment if we get stuck there.
|
||||
|
||||
for(var/mob/M in range(10, src))
|
||||
if(!M.stat && !istype(M, /mob/living/silicon/ai)) //bad idea to shake an ai's view
|
||||
shake_camera(M, 3, 1)
|
||||
if (A)
|
||||
explosion(src.loc, 0, 1, 2, 3, 0)
|
||||
playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1)
|
||||
if (--src.hits <= 0)
|
||||
if(prob(15) && !istype(A, /obj/structure/grille))
|
||||
explosion(src.loc, 1, 2, 3, 4, 0)
|
||||
playsound(src.loc, "explosion", 50, 1)
|
||||
del(src)
|
||||
return
|
||||
if (A)
|
||||
for(var/mob/M in player_list)
|
||||
var/turf/T = get_turf(M)
|
||||
if(!T || T.z != src.z)
|
||||
continue
|
||||
shake_camera(M, 3, get_dist(M.loc, src.loc) > 20 ? 1 : 3)
|
||||
M.playsound_local(src.loc, 'sound/effects/meteorimpact.ogg', 50, 1, get_rand_frequency(), 10)
|
||||
explosion(src.loc, 0, 1, 2, 3, 0)
|
||||
|
||||
if (--src.hits <= 0)
|
||||
if(prob(15) && !istype(A, /obj/structure/grille))
|
||||
explosion(src.loc, 1, 2, 3, 4, 0)
|
||||
del(src)
|
||||
|
||||
/obj/effect/meteor/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/pickaxe))
|
||||
|
||||
@@ -7,7 +7,6 @@ var/bomb_set
|
||||
icon_state = "nuclearbomb0"
|
||||
density = 1
|
||||
|
||||
var/extended = 0.0
|
||||
var/timeleft = 60.0
|
||||
var/timing = 0.0
|
||||
var/r_code = "ADMIN"
|
||||
@@ -37,9 +36,6 @@ var/bomb_set
|
||||
|
||||
/obj/machinery/nuclearbomb/attackby(obj/item/weapon/I as obj, mob/user as mob)
|
||||
if (istype(I, /obj/item/weapon/disk/nuclear))
|
||||
if (!src.extended)
|
||||
user << "<span class='notice'>You have to deploy the bomb first.</span>"
|
||||
return
|
||||
usr.drop_item()
|
||||
I.loc = src
|
||||
src.auth = I
|
||||
@@ -51,44 +47,29 @@ var/bomb_set
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/nuclearbomb/attack_hand(mob/user as mob)
|
||||
if (src.extended)
|
||||
user.set_machine(src)
|
||||
var/dat = text("<TT>\nAuth. Disk: <A href='?src=\ref[];auth=1'>[]</A><HR>", src, (src.auth ? "++++++++++" : "----------"))
|
||||
if (src.auth)
|
||||
if (src.yes_code)
|
||||
dat += text("\n<B>Status</B>: []-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] <A href='?src=\ref[];timer=1'>Toggle</A><BR>\nTime: <A href='?src=\ref[];time=-10'>-</A> <A href='?src=\ref[];time=-1'>-</A> [] <A href='?src=\ref[];time=1'>+</A> <A href='?src=\ref[];time=10'>+</A><BR>\n<BR>\nSafety: [] <A href='?src=\ref[];safety=1'>Toggle</A><BR>\nAnchor: [] <A href='?src=\ref[];anchor=1'>Toggle</A><BR>\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src, src, src, src.timeleft, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src)
|
||||
else
|
||||
dat += text("\n<B>Status</B>: Auth. S2-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\n[] Safety: Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
user.set_machine(src)
|
||||
var/dat = text("<TT>\nAuth. Disk: <A href='?src=\ref[];auth=1'>[]</A><HR>", src, (src.auth ? "++++++++++" : "----------"))
|
||||
if (src.auth)
|
||||
if (src.yes_code)
|
||||
dat += text("\n<B>Status</B>: []-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] <A href='?src=\ref[];timer=1'>Toggle</A><BR>\nTime: <A href='?src=\ref[];time=-10'>-</A> <A href='?src=\ref[];time=-1'>-</A> [] <A href='?src=\ref[];time=1'>+</A> <A href='?src=\ref[];time=10'>+</A><BR>\n<BR>\nSafety: [] <A href='?src=\ref[];safety=1'>Toggle</A><BR>\nAnchor: [] <A href='?src=\ref[];anchor=1'>Toggle</A><BR>\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src, src, src, src.timeleft, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src)
|
||||
else
|
||||
if (src.timing)
|
||||
dat += text("\n<B>Status</B>: Set-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
else
|
||||
dat += text("\n<B>Status</B>: Auth. S1-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
var/message = "AUTH"
|
||||
if (src.auth)
|
||||
message = text("[]", src.code)
|
||||
if (src.yes_code)
|
||||
message = "*****"
|
||||
dat += text("<HR>\n>[]<BR>\n<A href='?src=\ref[];type=1'>1</A><A href='?src=\ref[];type=2'>2</A><A href='?src=\ref[];type=3'>3</A><BR>\n<A href='?src=\ref[];type=4'>4</A><A href='?src=\ref[];type=5'>5</A><A href='?src=\ref[];type=6'>6</A><BR>\n<A href='?src=\ref[];type=7'>7</A><A href='?src=\ref[];type=8'>8</A><A href='?src=\ref[];type=9'>9</A><BR>\n<A href='?src=\ref[];type=R'>R</A><A href='?src=\ref[];type=0'>0</A><A href='?src=\ref[];type=E'>E</A><BR>\n</TT>", message, src, src, src, src, src, src, src, src, src, src, src, src)
|
||||
var/datum/browser/popup = new(user, "nuclearbomb", name, 300, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
dat += text("\n<B>Status</B>: Auth. S2-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\n[] Safety: Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
else
|
||||
user << "<span class='notice'>You have to deploy the bomb first.</span>"
|
||||
if (src.timing)
|
||||
dat += text("\n<B>Status</B>: Set-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
else
|
||||
dat += text("\n<B>Status</B>: Auth. S1-[]<BR>\n<B>Timer</B>: []<BR>\n<BR>\nTimer: [] Toggle<BR>\nTime: - - [] + +<BR>\n<BR>\nSafety: [] Toggle<BR>\nAnchor: [] Toggle<BR>\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off"))
|
||||
var/message = "AUTH"
|
||||
if (src.auth)
|
||||
message = text("[]", src.code)
|
||||
if (src.yes_code)
|
||||
message = "*****"
|
||||
dat += text("<HR>\n>[]<BR>\n<A href='?src=\ref[];type=1'>1</A><A href='?src=\ref[];type=2'>2</A><A href='?src=\ref[];type=3'>3</A><BR>\n<A href='?src=\ref[];type=4'>4</A><A href='?src=\ref[];type=5'>5</A><A href='?src=\ref[];type=6'>6</A><BR>\n<A href='?src=\ref[];type=7'>7</A><A href='?src=\ref[];type=8'>8</A><A href='?src=\ref[];type=9'>9</A><BR>\n<A href='?src=\ref[];type=R'>R</A><A href='?src=\ref[];type=0'>0</A><A href='?src=\ref[];type=E'>E</A><BR>\n</TT>", message, src, src, src, src, src, src, src, src, src, src, src, src)
|
||||
var/datum/browser/popup = new(user, "nuclearbomb", name, 300, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/machinery/nuclearbomb/verb/make_deployable()
|
||||
set category = "Object"
|
||||
set name = "Deploy Bomb"
|
||||
set src in oview(1)
|
||||
|
||||
if(isliving(usr))
|
||||
if(!src.extended)
|
||||
src.anchored = 1
|
||||
flick("nuclearbombc", src)
|
||||
src.icon_state = "nuclearbomb1"
|
||||
src.extended = 1
|
||||
|
||||
/obj/machinery/nuclearbomb/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
@@ -143,11 +124,15 @@ var/bomb_set
|
||||
bomb_set = 0
|
||||
if (href_list["safety"])
|
||||
src.safety = !( src.safety )
|
||||
src.icon_state = "nuclearbomb1"
|
||||
if(safety)
|
||||
src.timing = 0
|
||||
bomb_set = 0
|
||||
if (href_list["anchor"])
|
||||
src.anchored = !( src.anchored )
|
||||
if(!isinspace())
|
||||
src.anchored = !( src.anchored )
|
||||
else
|
||||
usr << "<span class='warning'>There is nothing to anchor to!</span>"
|
||||
src.add_fingerprint(usr)
|
||||
for(var/mob/M in viewers(1, src))
|
||||
if ((M.client && M.machine == src))
|
||||
|
||||
@@ -26,12 +26,12 @@ datum/hSB
|
||||
var/objinfo = null
|
||||
var/canisterinfo = null
|
||||
var/hsbinfo = null
|
||||
|
||||
//items that shouldn't spawn on the floor because they would bug or act weird
|
||||
var/global/list/spawn_forbidden = list(
|
||||
/obj/item/weapon/grab, /obj/item/tk_grab, /obj/item/weapon/implant, // not implanter, the actual thing that is inside you
|
||||
/obj/item/assembly,/obj/item/device/onetankbomb, /obj/item/radio, /obj/item/device/pda/ai,
|
||||
/obj/item/device/uplink/hidden, /obj/item/smallDelivery, /obj/item/missile,/obj/item/projectile,
|
||||
/obj/item/borg/sight,/obj/item/borg/overdrive,/obj/item/borg/stun)
|
||||
/obj/item/borg/sight,/obj/item/borg/overdrive,/obj/item/borg/stun,/obj/item/weapon/robot_module)
|
||||
|
||||
proc
|
||||
update()
|
||||
@@ -49,25 +49,31 @@ datum/hSB
|
||||
"Spawn All-Access ID" = "hsbaaid",
|
||||
|
||||
"Building Supplies",
|
||||
"Spawn 50 Wood" = "hsbwood",
|
||||
"Spawn 50 Metal" = "hsbmetal",
|
||||
"Spawn 50 Plasteel" = "hsbplasteel",
|
||||
"Spawn 50 Reinforced Glass" = "hsbrglass",
|
||||
"Spawn 50 Glass" = "hsbglass",
|
||||
"Spawn Full Cable Coil" = "hsbspawn&path=[/obj/item/weapon/cable_coil]",
|
||||
"Spawn Hyper Capacity Power Cell" = "hsbspawn&path=[/obj/item/weapon/cell/hyper]",
|
||||
"Spawn Inf. Capacity Power Cell" = "hsbspawn&path=[/obj/item/weapon/cell/infinite]",
|
||||
"Spawn Rapid Construction Device" = "hsbrcd",
|
||||
"Spawn RCD Ammo" = "hsb_safespawn&path=[/obj/item/weapon/rcd_ammo]",
|
||||
"Spawn Airlock" = "hsbairlock",
|
||||
|
||||
"Miscellaneous",
|
||||
"Spawn Air Scrubber" = "hsbscrubber",
|
||||
"Spawn Canister..." = "hsbcanister",
|
||||
"Spawn Welding Fuel Tank" = "hsbspawn&path=[/obj/structure/reagent_dispensers/fueltank]",
|
||||
"Spawn Water Tank" = "hsbspawn&path=[/obj/structure/reagent_dispensers/watertank]",
|
||||
|
||||
"Bots",
|
||||
"Spawn Cleanbot" = "hsbspawn&path=[/obj/machinery/bot/cleanbot]",
|
||||
"Spawn Floorbot" = "hsbspawn&path=[/obj/machinery/bot/floorbot]",
|
||||
"Spawn Medbot" = "hsbspawn&path=[/obj/machinery/bot/medbot]")
|
||||
"Spawn Medbot" = "hsbspawn&path=[/obj/machinery/bot/medbot]",
|
||||
|
||||
"Canisters",
|
||||
"Spawn O2 Canister" = "hsbspawn&path=[/obj/machinery/portable_atmospherics/canister/oxygen]",
|
||||
"Spawn Air Canister" = "hsbspawn&path=[/obj/machinery/portable_atmospherics/canister/air]")
|
||||
|
||||
|
||||
if(!hsbinfo)
|
||||
@@ -75,9 +81,15 @@ datum/hSB
|
||||
if(admin)
|
||||
hsbinfo += "<b>Administration</b><br>"
|
||||
hsbinfo += "- <a href='?src=\ref[src];hsb=hsbtobj'>Toggle Object Spawning</a><br>"
|
||||
hsbinfo += "- <a href='?src=\ref[src];hsb=hsbtac'>Toggle Item Spawn Panel Auto-close</a><hr>"
|
||||
hsbinfo += "- <a href='?src=\ref[src];hsb=hsbtac'>Toggle Item Spawn Panel Auto-close</a><br>"
|
||||
hsbinfo += "<b>Canister Spawning</b><br>"
|
||||
hsbinfo += "- <a href='?src=\ref[src];hsb=hsbspawn&path=[/obj/machinery/portable_atmospherics/canister/toxins]'>Spawn Plasma Canister</a><br>"
|
||||
hsbinfo += "- <a href='?src=\ref[src];hsb=hsbspawn&path=[/obj/machinery/portable_atmospherics/canister/carbon_dioxide]'>Spawn CO2 Canister</a><br>"
|
||||
hsbinfo += "- <a href='?src=\ref[src];hsb=hsbspawn&path=[/obj/machinery/portable_atmospherics/canister/nitrogen]'>Spawn Nitrogen Canister</a><br>"
|
||||
hsbinfo += "- <a href='?src=\ref[src];hsb=hsbspawn&path=[/obj/machinery/portable_atmospherics/canister/sleeping_agent]'>Spawn N2O Canister</a><hr>"
|
||||
else
|
||||
hsbinfo += "<i>Some item spawning may be disabled by the administrators.</i><br>"
|
||||
hsbinfo += "<i>Only administrators may spawn dangerous canisters.</i><br>"
|
||||
for(var/T in hrefs)
|
||||
var/href = hrefs[T]
|
||||
if(href)
|
||||
@@ -124,7 +136,6 @@ datum/hSB
|
||||
world << "<b>\red Sandbox: \black [usr.key] has added a limiter to object spawning. The window will now auto-close after use.</b>"
|
||||
config.sandbox_autoclose = 1
|
||||
return
|
||||
|
||||
//
|
||||
// Spacesuit with full air jetpack set as internals
|
||||
//
|
||||
@@ -167,6 +178,13 @@ datum/hSB
|
||||
var/obj/hsb = new/obj/machinery/portable_atmospherics/scrubber{volume_rate=50*ONE_ATMOSPHERE;on=1}(usr.loc)
|
||||
hsb.update_icon() // hackish but it wasn't meant to be spawned I guess?
|
||||
|
||||
//
|
||||
// Stacked Materials
|
||||
//
|
||||
|
||||
if("hsbrglass")
|
||||
new/obj/item/stack/sheet/rglass{amount=50}(usr.loc)
|
||||
|
||||
if("hsbmetal")
|
||||
new/obj/item/stack/sheet/metal{amount=50}(usr.loc)
|
||||
|
||||
@@ -176,6 +194,9 @@ datum/hSB
|
||||
if("hsbglass")
|
||||
new/obj/item/stack/sheet/glass{amount=50}(usr.loc)
|
||||
|
||||
if("hsbwood")
|
||||
new/obj/item/stack/sheet/wood{amount=50}(usr.loc)
|
||||
|
||||
//
|
||||
// All access ID
|
||||
//
|
||||
@@ -201,16 +222,6 @@ datum/hSB
|
||||
if("hsbairlock")
|
||||
new /datum/airlock_maker(usr.loc)
|
||||
|
||||
//
|
||||
// Canister select window
|
||||
//
|
||||
if("hsbcanister")
|
||||
if(!canisterinfo)
|
||||
canisterinfo = "Choose a canister type:<hr>"
|
||||
for(var/O in (typesof(/obj/machinery/portable_atmospherics/canister/) - /obj/machinery/portable_atmospherics/canister/))
|
||||
canisterinfo += "<a href='?src=\ref[src];hsb=hsbspawn&path=[O]'>[O]</a><br>"
|
||||
usr << browse(canisterinfo,"window=sandbox")
|
||||
|
||||
//
|
||||
// Object spawn window
|
||||
//
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
..() // Give them standard objectives.
|
||||
return
|
||||
|
||||
/datum/game_mode/traitor/double_agents/add_latejoin_traitor(var/mob/living/carbon/human/character)
|
||||
/datum/game_mode/traitor/double_agents/add_latejoin_traitor(var/datum/mind/character)
|
||||
|
||||
check_potential_agents()
|
||||
|
||||
@@ -60,14 +60,15 @@
|
||||
|
||||
// Basically setting the target_list for who is killing who
|
||||
var/i = 0
|
||||
for(var/mob/living/carbon/human/traitor in late_joining_list)
|
||||
for(var/datum/mind/traitor in late_joining_list)
|
||||
i++
|
||||
if(i + 1 > late_joining_list.len)
|
||||
i = 0
|
||||
target_list[traitor] = late_joining_list[i + 1]
|
||||
traitor.special_role = traitor_name
|
||||
|
||||
// Now, give them their targets
|
||||
for(var/mob/living/carbon/human/traitor in late_joining_list)
|
||||
for(var/datum/mind/traitor in target_list)
|
||||
..(traitor)
|
||||
|
||||
late_joining_list = list()
|
||||
@@ -78,11 +79,13 @@
|
||||
/datum/game_mode/traitor/double_agents/proc/check_potential_agents()
|
||||
|
||||
for(var/M in late_joining_list)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.stat != DEAD)
|
||||
if(H.client)
|
||||
continue // It all checks out.
|
||||
if(istype(M, /datum/mind))
|
||||
var/datum/mind/agent_mind = M
|
||||
if(ishuman(agent_mind.current))
|
||||
var/mob/living/carbon/human/H = agent_mind.current
|
||||
if(H.stat != DEAD)
|
||||
if(H.client)
|
||||
continue // It all checks out.
|
||||
|
||||
// If any check fails, remove them from our list
|
||||
late_joining_list -= M
|
||||
@@ -80,11 +80,11 @@
|
||||
if(character.client.prefs.be_special & BE_TRAITOR)
|
||||
if(!jobban_isbanned(character.client, "traitor") && !jobban_isbanned(character.client, "Syndicate"))
|
||||
if(!(character.job in ticker.mode.restricted_jobs))
|
||||
add_latejoin_traitor(character)
|
||||
add_latejoin_traitor(character.mind)
|
||||
..()
|
||||
|
||||
/datum/game_mode/traitor/proc/add_latejoin_traitor(var/mob/living/carbon/human/character)
|
||||
character.mind.make_Traitor()
|
||||
/datum/game_mode/traitor/proc/add_latejoin_traitor(var/datum/mind/character)
|
||||
character.make_Traitor()
|
||||
|
||||
|
||||
/datum/game_mode/proc/forge_traitor_objectives(var/datum/mind/traitor)
|
||||
|
||||
@@ -95,8 +95,8 @@
|
||||
C.auto_turn()
|
||||
|
||||
C.network = tempnetwork
|
||||
|
||||
C.c_tag = "[get_area_name(src)] ([rand(1, 999)]"
|
||||
var/area/A = get_area_master(src)
|
||||
C.c_tag = "[A.name] ([rand(1, 999)]"
|
||||
|
||||
for(var/i = 5; i >= 0; i -= 1)
|
||||
var/direct = input(user, "Direction?", "Assembling Camera", null) in list("LEAVE IT", "NORTH", "EAST", "SOUTH", "WEST" )
|
||||
|
||||
@@ -252,13 +252,14 @@
|
||||
for(var/obj/effect/landmark/L in linkedholodeck)
|
||||
if(L.name=="Atmospheric Test Start")
|
||||
spawn(20)
|
||||
var/turf/T = get_turf(L)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, T)
|
||||
s.start()
|
||||
if(T)
|
||||
T.temperature = 5000
|
||||
T.hotspot_expose(50000,50000,1)
|
||||
if(istype(target,/area/holodeck/source_burntest))
|
||||
var/turf/T = get_turf(L)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(2, 1, T)
|
||||
s.start()
|
||||
if(T)
|
||||
T.temperature = 5000
|
||||
T.hotspot_expose(50000,50000,1)
|
||||
if(L.name=="Holocarp Spawn")
|
||||
new /mob/living/simple_animal/hostile/carp(L.loc)
|
||||
|
||||
|
||||
@@ -175,10 +175,21 @@
|
||||
anchored = 1
|
||||
state = 20//So it doesn't interact based on the above. Not really necessary.
|
||||
|
||||
attackby(var/obj/item/device/aicard/A as obj, var/mob/user as mob)
|
||||
if(istype(A, /obj/item/device/aicard))//Is it?
|
||||
A.transfer_ai("INACTIVE","AICARD",src,user)
|
||||
return
|
||||
/obj/structure/AIcore/deactivated/attackby(var/obj/item/A as obj, var/mob/user as mob)
|
||||
if(istype(A, /obj/item/device/aicard))//Is it?
|
||||
A.transfer_ai("INACTIVE","AICARD",src,user)
|
||||
if(istype(A, /obj/item/weapon/wrench))
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
switch(anchored)
|
||||
if(0)
|
||||
if(do_after(user, 20))
|
||||
user << "\blue You wrench the core into place."
|
||||
anchored = 1
|
||||
if(1)
|
||||
if(do_after(user, 20))
|
||||
user << "\blue You unfasten the core."
|
||||
anchored = 0
|
||||
return
|
||||
|
||||
/*
|
||||
This is a good place for AI-related object verbs so I'm sticking it here.
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
new /obj/effect/spawner/newbomb/timer/syndicate(src.loc)
|
||||
new /obj/item/clothing/head/collectable/petehat(src.loc)
|
||||
message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.")
|
||||
log_game("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.")
|
||||
log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.")
|
||||
src.New()
|
||||
emagged = 0
|
||||
else if(!contents.len)
|
||||
|
||||
@@ -160,21 +160,21 @@
|
||||
var/target_owner
|
||||
var/target_rank
|
||||
if(modify)
|
||||
target_name = modify.name
|
||||
target_name = html_encode(modify.name)
|
||||
else
|
||||
target_name = "--------"
|
||||
if(modify && modify.registered_name)
|
||||
target_owner = modify.registered_name
|
||||
target_owner = html_encode(modify.registered_name)
|
||||
else
|
||||
target_owner = "--------"
|
||||
if(modify && modify.assignment)
|
||||
target_rank = modify.assignment
|
||||
target_rank = html_encode(modify.assignment)
|
||||
else
|
||||
target_rank = "Unassigned"
|
||||
|
||||
var/scan_name
|
||||
if(scan)
|
||||
scan_name = scan.name
|
||||
scan_name = html_encode(scan.name)
|
||||
else
|
||||
scan_name = "--------"
|
||||
|
||||
@@ -323,9 +323,12 @@
|
||||
if (authenticated)
|
||||
var/t1 = href_list["assign_target"]
|
||||
if(t1 == "Custom")
|
||||
var/temp_t = copytext(sanitize(input("Enter a custom job assignment.","Assignment")),1,MAX_NAME_LEN)
|
||||
if(temp_t)
|
||||
t1 = temp_t
|
||||
var/newJob = reject_bad_name(input("Enter a custom job assignment.", "Assignment", modify ? modify.assignment : "Unassigned"))
|
||||
if(newJob)
|
||||
t1 = newJob
|
||||
else
|
||||
usr << "\red Invalid job name entered."
|
||||
return
|
||||
else
|
||||
var/datum/job/jobdatum
|
||||
for(var/jobtype in typesof(/datum/job))
|
||||
@@ -345,7 +348,12 @@
|
||||
var/t2 = modify
|
||||
//var/t1 = input(usr, "What name?", "ID computer", null) as text
|
||||
if ((authenticated && modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf)))
|
||||
modify.registered_name = copytext(sanitize(href_list["reg"]),1,MAX_NAME_LEN)
|
||||
var/newName = reject_bad_name(href_list["reg"])
|
||||
if(newName)
|
||||
modify.registered_name = newName
|
||||
else
|
||||
usr << "\red Invalid name entered."
|
||||
return
|
||||
if ("mode")
|
||||
mode = text2num(href_list["mode_target"])
|
||||
|
||||
|
||||
@@ -325,10 +325,10 @@
|
||||
if (subject.suiciding == 1)
|
||||
scantemp = "<font class='bad'>Subject's brain is not responding to scanning stimuli.</font>"
|
||||
return
|
||||
if ((!subject.ckey) || (!subject.client))
|
||||
scantemp = "<font class='bad'>Mental interface failure.</font>"
|
||||
return
|
||||
if (NOCLONE in subject.mutations)
|
||||
scantemp = "<font class='bad'>Subject no longer contains the fundamental materials required to create a living clone.</font>"
|
||||
return
|
||||
if ((!subject.ckey) || (!subject.client))
|
||||
scantemp = "<font class='bad'>Mental interface failure.</font>"
|
||||
return
|
||||
if (find_record("ckey", subject.ckey, records))
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
|
||||
else
|
||||
message_admins("\blue [key_name_admin(usr)] detonated [R.name]!")
|
||||
log_game("\blue [key_name_admin(usr)] detonated [R.name]!")
|
||||
log_game("\blue [key_name(usr)] detonated [R.name]!")
|
||||
R.self_destruct()
|
||||
else
|
||||
usr << "\red Access Denied."
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
bulb = new /obj/item/device/flash(src)
|
||||
|
||||
/obj/machinery/flasher/power_change()
|
||||
if (powered() && bulb && anchored)
|
||||
if (powered() && anchored && bulb)
|
||||
stat &= ~NOPOWER
|
||||
if(bulb.broken)
|
||||
icon_state = "[base_state]1-p"
|
||||
@@ -131,15 +131,14 @@
|
||||
|
||||
if (!anchored && !isinspace())
|
||||
user << "<span class='notice'>[src] is now secured.</span>"
|
||||
overlays.Cut()
|
||||
power_change()
|
||||
overlays += "[base_state]-s"
|
||||
anchored = 1
|
||||
|
||||
power_change()
|
||||
else
|
||||
user << "<span class='notice'>[src] can now be moved.</span>"
|
||||
overlays += "[base_state]-s"
|
||||
power_change()
|
||||
overlays.Cut()
|
||||
anchored = 0
|
||||
power_change()
|
||||
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -288,4 +288,4 @@
|
||||
/obj/machinery/smartfridge/chemistry/virology
|
||||
name = "smart virus storage"
|
||||
desc = "A refrigerated storage unit for volatile sample storage."
|
||||
spawn_meds = list(/obj/item/weapon/reagent_containers/syringe/antiviral = 4, /obj/item/weapon/reagent_containers/glass/bottle/cold = 1, /obj/item/weapon/reagent_containers/glass/bottle/flu_virion = 1, /obj/item/weapon/reagent_containers/glass/bottle/mutagen = 1, /obj/item/weapon/reagent_containers/glass/bottle/synaptizine = 1)
|
||||
spawn_meds = list(/obj/item/weapon/reagent_containers/syringe/antiviral = 4, /obj/item/weapon/reagent_containers/glass/bottle/cold = 1, /obj/item/weapon/reagent_containers/glass/bottle/flu_virion = 1, /obj/item/weapon/reagent_containers/glass/bottle/mutagen = 1, /obj/item/weapon/reagent_containers/glass/bottle/plasma = 1, /obj/item/weapon/reagent_containers/glass/bottle/synaptizine = 1)
|
||||
@@ -30,6 +30,7 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/*
|
||||
/obj/machinery/recycler/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/weapon/card/emag) && !emagged)
|
||||
emagged = 1
|
||||
@@ -37,8 +38,13 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
safety_mode = 0
|
||||
update_icon()
|
||||
playsound(src.loc, "sparks", 75, 1, -1)
|
||||
else if(istype(I, /obj/item/weapon/screwdriver) && emagged)
|
||||
emagged = 0
|
||||
update_icon()
|
||||
user << "<span class='notice'>You reset the crusher to its default factory settings.</span>"
|
||||
else
|
||||
..()
|
||||
*/
|
||||
|
||||
/obj/machinery/recycler/update_icon()
|
||||
..()
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
var/open_panel = 0 //are the wires exposed?
|
||||
var/active = 0 //is the bomb counting down?
|
||||
var/defused = 0 //is the bomb capable of exploding?
|
||||
var/degutted = 0 //is the bomb even a bomb anymore?
|
||||
|
||||
/obj/machinery/syndicatebomb/process()
|
||||
if(active && !defused && (timer > 0)) //Tick Tock
|
||||
@@ -68,14 +69,37 @@
|
||||
user << "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>"
|
||||
|
||||
else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler ))
|
||||
if(open_panel)
|
||||
if(degutted)
|
||||
user << "<span class='notice'>The wires aren't connected to anything!<span>"
|
||||
else if(open_panel)
|
||||
wires.Interact(user)
|
||||
|
||||
else if(istype(I, /obj/item/weapon/crowbar))
|
||||
if(open_panel && !degutted && isWireCut(WIRE_BOOM) && isWireCut(WIRE_UNBOLT) && isWireCut(WIRE_DELAY) && isWireCut(WIRE_PROCEED) && isWireCut(WIRE_ACTIVATE))
|
||||
user << "<span class='notice'>You carefully pry out the bomb's payload.</span>"
|
||||
degutted = 1
|
||||
new /obj/item/weapon/syndicatebombcore(user.loc)
|
||||
else if (open_panel)
|
||||
user << "<span class='notice'>The wires conneting the shell to the explosives are holding it down!</span>"
|
||||
else if (degutted)
|
||||
user << "<span class='notice'>The explosives have already been removed.</span>"
|
||||
else
|
||||
user << "<span class='notice'>The cover is screwed on, it won't pry off!</span>"
|
||||
else if(istype(I, /obj/item/weapon/syndicatebombcore))
|
||||
if(degutted)
|
||||
user << "<span class='notice'>You place the payload into the shell.</span>"
|
||||
degutted = 0
|
||||
user.drop_item()
|
||||
del(I)
|
||||
else
|
||||
user << "<span class='notice'>While a double strength bomb would surely be a thing of terrible beauty, there's just no room for it.</span>"
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/machinery/syndicatebomb/attack_hand(var/mob/user)
|
||||
if(anchored)
|
||||
if(degutted)
|
||||
user << "<span class='notice'>The bomb's explosives have been removed, the [open_panel ? "wires" : "buttons"] are useless now.</span>"
|
||||
else if(anchored)
|
||||
if(open_panel)
|
||||
wires.Interact(user)
|
||||
else if(!active)
|
||||
@@ -87,26 +111,84 @@
|
||||
|
||||
/obj/machinery/syndicatebomb/proc/settings(var/mob/user)
|
||||
var/newtime = input(usr, "Please set the timer.", "Timer", "[timer]") as num
|
||||
newtime = Clamp(newtime, 30, 60000)
|
||||
newtime = Clamp(newtime, 60, 60000)
|
||||
if(in_range(src, usr) && isliving(usr)) //No running off and setting bombs from across the station
|
||||
timer = newtime
|
||||
src.loc.visible_message("\blue \icon[src] timer set for [timer] seconds.")
|
||||
if(alert(usr,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, usr) && isliving(usr))
|
||||
if(defused || active)
|
||||
if(defused)
|
||||
if(defused || active || degutted)
|
||||
if(degutted)
|
||||
src.loc.visible_message("\blue \icon[src] Device error: Payload missing")
|
||||
else if(defused)
|
||||
src.loc.visible_message("\blue \icon[src] Device error: User intervention required")
|
||||
return
|
||||
else
|
||||
src.loc.visible_message("\red \icon[src] [timer] seconds until detonation, please clear the area.")
|
||||
playsound(loc, 'sound/machines/click.ogg', 30, 1)
|
||||
icon_state = "syndicate-bomb-active"
|
||||
if(!open_panel)
|
||||
icon_state = "syndicate-bomb-active"
|
||||
else
|
||||
icon_state = "syndicate-bomb-active-wires"
|
||||
active = 1
|
||||
add_fingerprint(user)
|
||||
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
var/log_str = "[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>."
|
||||
message_admins("[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
|
||||
processing_objects.Add(src) //Ticking down
|
||||
|
||||
/obj/machinery/syndicatebomb/proc/isWireCut(var/index)
|
||||
return wires.IsIndexCut(index)
|
||||
|
||||
/obj/item/weapon/syndicatebombcore
|
||||
name = "bomb payload"
|
||||
desc = "A powerful secondary explosive of syndicate design and unknown composition, it should be stable under normal conditions..."
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "bombcore"
|
||||
item_state = "eshield0"
|
||||
flags = FPRINT | TABLEPASS
|
||||
w_class = 3.0
|
||||
origin_tech = "syndicate=6;combat=5"
|
||||
|
||||
/obj/item/weapon/syndicatebombcore/ex_act(severity) //Little boom can chain a big boom
|
||||
explosion(src.loc,2,5,11, flame_range = 11)
|
||||
del(src)
|
||||
|
||||
/obj/item/device/syndicatedetonator
|
||||
name = "big red button"
|
||||
desc = "Nothing good can come of pressing a button this garish..."
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "bigred"
|
||||
item_state = "electronic"
|
||||
flags = FPRINT | TABLEPASS
|
||||
w_class = 1.0
|
||||
origin_tech = "syndicate=2"
|
||||
var/cooldown = 0
|
||||
var/detonated = 0
|
||||
var/existant = 0
|
||||
|
||||
/obj/item/device/syndicatedetonator/attack_self(mob/user as mob)
|
||||
if(!cooldown)
|
||||
for(var/obj/machinery/syndicatebomb/B in machines)
|
||||
if(B.active)
|
||||
B.timer = 0
|
||||
detonated++
|
||||
existant++
|
||||
playsound(user, 'sound/machines/click.ogg', 20, 1)
|
||||
user << "<span class='notice'>[existant] found, [detonated] triggered.</span>"
|
||||
if(detonated)
|
||||
var/turf/T = get_turf(src)
|
||||
var/area/A = get_area(T)
|
||||
detonated--
|
||||
var/log_str = "[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>[A.name] (JMP)</a>."
|
||||
bombers += log_str
|
||||
message_admins(log_str)
|
||||
log_game(log_str)
|
||||
processing_objects.Add(src) //Ticking down
|
||||
log_game("[key_name(usr)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name]([T.x],[T.y],[T.z])")
|
||||
detonated = 0
|
||||
existant = 0
|
||||
cooldown = 1
|
||||
spawn(30) cooldown = 0
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -112,28 +112,28 @@
|
||||
|
||||
var/to_restock = 0
|
||||
for(var/datum/data/vending_product/machine_content in machine)
|
||||
if(machine_content.amount == 0 && refill.charges > 0)
|
||||
machine_content.amount++
|
||||
refill.charges--
|
||||
total++
|
||||
to_restock += machine_content.max_amount - machine_content.amount
|
||||
|
||||
if(to_restock <= refill.charges)
|
||||
for(var/datum/data/vending_product/machine_content in machine)
|
||||
if(machine_content.amount != machine_content.max_amount)
|
||||
usr << "<span class='notice'>[machine_content.max_amount - machine_content.amount] of [machine_content.product_name]</span>"
|
||||
machine_content.amount = machine_content.max_amount
|
||||
machine_content.amount = machine_content.max_amount
|
||||
refill.charges -= to_restock
|
||||
total = to_restock
|
||||
total += to_restock
|
||||
else
|
||||
var/tmp_charges = refill.charges
|
||||
for(var/datum/data/vending_product/machine_content in machine)
|
||||
if(refill.charges == 0)
|
||||
break
|
||||
var/restock = Ceiling(((machine_content.max_amount - machine_content.amount)/to_restock)*tmp_charges)
|
||||
if(restock > refill.charges)
|
||||
restock = refill.charges
|
||||
machine_content.amount += restock
|
||||
refill.charges -= restock
|
||||
total += restock
|
||||
if(restock)
|
||||
usr << "<span class='notice'>[restock] of [machine_content.product_name]</span>"
|
||||
if(refill.charges == 0) //due to rounding, we ran out of refill charges, exit.
|
||||
break
|
||||
return total
|
||||
|
||||
|
||||
|
||||
@@ -349,16 +349,13 @@
|
||||
do_after_cooldown()
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve
|
||||
name = "\improper SOP-6 grenade launcher"
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze
|
||||
name = "\improper SOB-3 grenade launcher"
|
||||
projectiles = 3
|
||||
projectile = /obj/item/weapon/grenade/flashbang/clusterbang
|
||||
construction_cost = list("metal"=20000,"gold"=6000,"uranium"=6000)
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited/get_equip_info()//Limited version of the clusterbang launcher that can't reload
|
||||
return "<span style=\"color:[equip_ready?"#0f0":"#f00"];\">*</span> [chassis.selected==src?"<b>":"<a href='?src=\ref[chassis];select_equip=\ref[src]'>"][src.name][chassis.selected==src?"</b>":"</a>"]\[[src.projectiles]\]"
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited/rearm()
|
||||
return//Extra bit of security
|
||||
projectile_energy_cost = 1600 //getting off cheap seeing as this is 3 times the flashbangs held in the grenade launcher.
|
||||
equip_cooldown = 90
|
||||
construction_cost = list("metal"=20000,"gold"=10000,"uranium"=10000) //now as expensive as a Honkblast.
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar
|
||||
name = "banana mortar"
|
||||
|
||||
@@ -367,7 +367,7 @@
|
||||
src.overlays -= "fab-active"
|
||||
src.desc = initial(src.desc)
|
||||
if(being_built)
|
||||
src.being_built.Move(get_step(src,SOUTH))
|
||||
src.being_built.loc = get_step(src,SOUTH)
|
||||
src.visible_message("\icon[src] <b>[src]</b> beeps, \"The [src.being_built] is complete\".")
|
||||
src.being_built = null
|
||||
src.updateUsrDialog()
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
/obj/structure/alien/resin/CanAtmosPass()
|
||||
return !density
|
||||
|
||||
|
||||
/obj/structure/alien/resin/wall
|
||||
name = "resin wall"
|
||||
desc = "Purple slime solidified into a wall."
|
||||
@@ -140,6 +140,7 @@
|
||||
#define NODERANGE 3
|
||||
|
||||
/obj/structure/alien/weeds
|
||||
gender = PLURAL
|
||||
name = "weeds"
|
||||
desc = "Weird purple weeds."
|
||||
icon_state = "weeds"
|
||||
@@ -376,6 +377,7 @@
|
||||
* Acid
|
||||
*/
|
||||
/obj/effect/acid
|
||||
gender = PLURAL
|
||||
name = "acid"
|
||||
desc = "Burbling corrossive stuff."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
|
||||
@@ -1,23 +1,18 @@
|
||||
/obj/effect/decal/remains/human
|
||||
/obj/effect/decal/remains
|
||||
name = "remains"
|
||||
desc = "They look like human remains. They have a strange aura about them."
|
||||
gender = PLURAL
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "remains"
|
||||
anchored = 1
|
||||
|
||||
/obj/effect/decal/remains/human
|
||||
desc = "They look like human remains. They have a strange aura about them."
|
||||
icon_state = "remains"
|
||||
|
||||
/obj/effect/decal/remains/xeno
|
||||
name = "remains"
|
||||
desc = "They look like the remains of something... alien. They have a strange aura about them."
|
||||
gender = PLURAL
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "remainsxeno"
|
||||
anchored = 1
|
||||
|
||||
/obj/effect/decal/remains/robot
|
||||
name = "remains"
|
||||
desc = "They look like the remains of something mechanical. They have a strange aura about them."
|
||||
gender = PLURAL
|
||||
icon = 'icons/mob/robots.dmi'
|
||||
icon_state = "remainsrobot"
|
||||
anchored = 1
|
||||
icon_state = "remainsrobot"
|
||||
@@ -914,7 +914,8 @@ steam.start() -- spawns the effect
|
||||
anchored = 1
|
||||
name = "foamed metal"
|
||||
desc = "A lightweight foamed metal wall."
|
||||
var/metal = 1 // 1=aluminum, 2=iron
|
||||
gender = PLURAL
|
||||
var/metal = 1 // 1=aluminium, 2=iron
|
||||
|
||||
New()
|
||||
..()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/effect/mine
|
||||
name = "Mine"
|
||||
name = "mine"
|
||||
desc = "I Better stay away from that thing."
|
||||
density = 1
|
||||
anchored = 1
|
||||
@@ -69,26 +69,26 @@
|
||||
del(src)
|
||||
|
||||
/obj/effect/mine/dnascramble
|
||||
name = "Radiation Mine"
|
||||
name = "radiation mine"
|
||||
icon_state = "uglymine"
|
||||
triggerproc = "triggerrad"
|
||||
|
||||
/obj/effect/mine/plasma
|
||||
name = "Plasma Mine"
|
||||
name = "plasma mine"
|
||||
icon_state = "uglymine"
|
||||
triggerproc = "triggerplasma"
|
||||
|
||||
/obj/effect/mine/kick
|
||||
name = "Kick Mine"
|
||||
name = "kick mine"
|
||||
icon_state = "uglymine"
|
||||
triggerproc = "triggerkick"
|
||||
|
||||
/obj/effect/mine/n2o
|
||||
name = "N2O Mine"
|
||||
name = "\improper N2O mine"
|
||||
icon_state = "uglymine"
|
||||
triggerproc = "triggern2o"
|
||||
|
||||
/obj/effect/mine/stun
|
||||
name = "Stun Mine"
|
||||
name = "stun mine"
|
||||
icon_state = "uglymine"
|
||||
triggerproc = "triggerstun"
|
||||
@@ -99,20 +99,29 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
|
||||
else if(dist < light_impact_range) dist = 3
|
||||
else dist = 0
|
||||
|
||||
if(flame_dist && prob(40) && !istype(T, /turf/space))
|
||||
new /obj/effect/hotspot(T) //Mostly for ambience!
|
||||
hotspot_exists = 1
|
||||
if(dist)
|
||||
T.ex_act(dist)
|
||||
|
||||
//------- TURF FIRES -------\\
|
||||
if(T)
|
||||
if(flame_dist && prob(40) && !istype(T, /turf/space))
|
||||
new/obj/effect/hotspot(T) //Mostly for ambience!
|
||||
hotspot_exists = 1
|
||||
if(dist)
|
||||
T.ex_act(dist)
|
||||
|
||||
//------- THINGS IN TURFS FIRES -------\\
|
||||
|
||||
for(var/atom_movable in T.contents) //bypass type checking since only atom/movable can be contained by turfs anyway
|
||||
var/atom/movable/AM = atom_movable
|
||||
if(flame_dist)
|
||||
if(isliving(AM) && !hotspot_exists && !istype(T, /turf/space))
|
||||
new /obj/effect/hotspot(AM.loc)
|
||||
//Just in case we missed a mob while they were in flame_range, but a hotspot didn't spawn on them, otherwise it looks weird when you just burst into flame out of nowhere
|
||||
if(dist)
|
||||
AM.ex_act(dist)
|
||||
|
||||
if(AM) //Something is inside T (We have already checked T exists above) - RR
|
||||
if(flame_dist) //if it has flame distance, run this - RR
|
||||
if(isliving(AM) && !hotspot_exists && !istype(T, /turf/space))
|
||||
new /obj/effect/hotspot(AM.loc)
|
||||
//Just in case we missed a mob while they were in flame_range, but a hotspot didn't spawn on them, otherwise it looks weird when you just burst into flame out of nowhere
|
||||
if(dist) //if no flame_dist, run this - RR
|
||||
AM.ex_act(dist)
|
||||
|
||||
|
||||
|
||||
var/took = (world.timeofday-start)/10
|
||||
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/obj/item
|
||||
name = "item"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
var/abstract = 0
|
||||
var/item_state = null
|
||||
var/r_speed = 1.0
|
||||
var/health = null
|
||||
@@ -180,19 +179,23 @@
|
||||
if(istype(W,/obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = W
|
||||
if(S.use_to_pickup)
|
||||
if(S.collection_mode) //Mode is set to collect all items on a tile and we clicked on a valid one.
|
||||
if(S.collection_mode) //Mode is set to collect multiple items on a tile and we clicked on a valid one.
|
||||
if(isturf(src.loc))
|
||||
var/list/rejections = list()
|
||||
var/success = 0
|
||||
var/failure = 0
|
||||
|
||||
for(var/obj/item/I in src.loc)
|
||||
if(S.collection_mode == 2 && !istype(I,src.type)) // We're only picking up items of the target type
|
||||
failure = 1
|
||||
continue
|
||||
if(I.type in rejections) // To limit bag spamming: any given type only complains once
|
||||
continue
|
||||
if(!S.can_be_inserted(I)) // Note can_be_inserted still makes noise when the answer is no
|
||||
rejections += I.type // therefore full bags are still a little spammy
|
||||
failure = 1
|
||||
continue
|
||||
|
||||
success = 1
|
||||
S.handle_item_insertion(I, 1) //The 1 stops the "You put the [src] into [S]" insertion message from being displayed.
|
||||
if(success && !failure)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// APC HULL
|
||||
|
||||
/obj/item/apc_frame
|
||||
name = "APC frame"
|
||||
name = "\improper APC frame"
|
||||
desc = "Used for repairing or building APCs"
|
||||
icon = 'icons/obj/apc_repair.dmi'
|
||||
icon_state = "apc_frame"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/blueprints
|
||||
name = "station blueprints"
|
||||
name = "\proper the station blueprints"
|
||||
desc = "Blueprints of the station. There's stamp \"Classified\" and several coffee stains on it."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "blueprints"
|
||||
|
||||
@@ -133,7 +133,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
/obj/item/device/pda/syndicate
|
||||
default_cartridge = /obj/item/weapon/cartridge/syndicate
|
||||
icon_state = "pda-syndi"
|
||||
name = "Military PDA"
|
||||
name = "military PDA"
|
||||
owner = "John Doe"
|
||||
hidden = 1
|
||||
|
||||
|
||||
@@ -34,27 +34,27 @@
|
||||
var/list/stored_data = list()
|
||||
|
||||
engineering
|
||||
name = "Power-ON Cartridge"
|
||||
name = "\improper Power-ON cartridge"
|
||||
icon_state = "cart-e"
|
||||
access_engine = 1
|
||||
|
||||
atmos
|
||||
name = "BreatheDeep Cartridge"
|
||||
name = "\improper BreatheDeep cartridge"
|
||||
icon_state = "cart-a"
|
||||
access_atmos = 1
|
||||
|
||||
medical
|
||||
name = "Med-U Cartridge"
|
||||
name = "\improper Med-U cartridge"
|
||||
icon_state = "cart-m"
|
||||
access_medical = 1
|
||||
|
||||
chemistry
|
||||
name = "ChemWhiz Cartridge"
|
||||
name = "\improper ChemWhiz cartridge"
|
||||
icon_state = "cart-chem"
|
||||
access_reagent_scanner = 1
|
||||
|
||||
security
|
||||
name = "R.O.B.U.S.T. Cartridge"
|
||||
name = "\improper R.O.B.U.S.T. cartridge"
|
||||
icon_state = "cart-s"
|
||||
access_security = 1
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
radio = new /obj/item/radio/integrated/beepsky(src)
|
||||
|
||||
detective
|
||||
name = "D.E.T.E.C.T. Cartridge"
|
||||
name = "\improper D.E.T.E.C.T. cartridge"
|
||||
icon_state = "cart-s"
|
||||
access_security = 1
|
||||
access_medical = 1
|
||||
@@ -74,30 +74,30 @@
|
||||
radio = new /obj/item/radio/integrated/beepsky(src)
|
||||
|
||||
janitor
|
||||
name = "CustodiPRO Cartridge"
|
||||
name = "\improper CustodiPRO cartridge"
|
||||
desc = "The ultimate in clean-room design."
|
||||
icon_state = "cart-j"
|
||||
access_janitor = 1
|
||||
|
||||
lawyer
|
||||
name = "P.R.O.V.E. Cartridge"
|
||||
name = "\improper P.R.O.V.E. cartridge"
|
||||
icon_state = "cart-s"
|
||||
access_security = 1
|
||||
|
||||
clown
|
||||
name = "Honkworks 5.0"
|
||||
name = "\improper Honkworks 5.0 cartridge"
|
||||
icon_state = "cart-clown"
|
||||
access_clown = 1
|
||||
var/honk_charges = 5
|
||||
|
||||
mime
|
||||
name = "Gestur-O 1000"
|
||||
name = "\improper Gestur-O 1000 cartridge"
|
||||
icon_state = "cart-mi"
|
||||
access_mime = 1
|
||||
var/mime_charges = 5
|
||||
/*
|
||||
botanist
|
||||
name = "Green Thumb v4.20"
|
||||
name = "\improper Green Thumb v4.20 cartridge"
|
||||
icon_state = "cart-b"
|
||||
access_flora = 1
|
||||
*/
|
||||
@@ -107,7 +107,7 @@
|
||||
desc = "A data cartridge with an integrated radio signaler module."
|
||||
|
||||
toxins
|
||||
name = "Signal Ace 2"
|
||||
name = "\improper Signal Ace 2 cartridge"
|
||||
desc = "Complete with integrated radio signaler!"
|
||||
icon_state = "cart-tox"
|
||||
access_reagent_scanner = 1
|
||||
@@ -120,7 +120,7 @@
|
||||
|
||||
|
||||
quartermaster
|
||||
name = "Space Parts & Space Vendors Cartridge"
|
||||
name = "space parts & space vendors cartridge"
|
||||
desc = "Perfect for the Quartermaster on the go!"
|
||||
icon_state = "cart-q"
|
||||
access_quartermaster = 1
|
||||
@@ -130,13 +130,13 @@
|
||||
radio = new /obj/item/radio/integrated/mule(src)
|
||||
|
||||
head
|
||||
name = "Easy-Record DELUXE"
|
||||
name = "\improper Easy-Record DELUXE cartridge"
|
||||
icon_state = "cart-h"
|
||||
access_manifest = 1
|
||||
access_status_display = 1
|
||||
|
||||
hop
|
||||
name = "HumanResources9001"
|
||||
name = "\improper HumanResources9001 cartridge"
|
||||
icon_state = "cart-h"
|
||||
access_manifest = 1
|
||||
access_status_display = 1
|
||||
@@ -149,7 +149,7 @@
|
||||
radio = new /obj/item/radio/integrated/mule(src)
|
||||
|
||||
hos
|
||||
name = "R.O.B.U.S.T. DELUXE"
|
||||
name = "\improper R.O.B.U.S.T. DELUXE cartridge"
|
||||
icon_state = "cart-hos"
|
||||
access_manifest = 1
|
||||
access_status_display = 1
|
||||
@@ -160,7 +160,7 @@
|
||||
radio = new /obj/item/radio/integrated/beepsky(src)
|
||||
|
||||
ce
|
||||
name = "Power-On DELUXE"
|
||||
name = "\improper Power-On DELUXE cartridge"
|
||||
icon_state = "cart-ce"
|
||||
access_manifest = 1
|
||||
access_status_display = 1
|
||||
@@ -168,7 +168,7 @@
|
||||
access_atmos = 1
|
||||
|
||||
cmo
|
||||
name = "Med-U DELUXE"
|
||||
name = "\improper Med-U DELUXE cartridge"
|
||||
icon_state = "cart-cmo"
|
||||
access_manifest = 1
|
||||
access_status_display = 1
|
||||
@@ -176,7 +176,7 @@
|
||||
access_medical = 1
|
||||
|
||||
rd
|
||||
name = "Signal Ace DELUXE"
|
||||
name = "\improper Signal Ace DELUXE cartridge"
|
||||
icon_state = "cart-rd"
|
||||
access_manifest = 1
|
||||
access_status_display = 1
|
||||
@@ -188,7 +188,7 @@
|
||||
radio = new /obj/item/radio/integrated/signal(src)
|
||||
|
||||
captain
|
||||
name = "Value-PAK Cartridge"
|
||||
name = "\improper Value-PAK cartridge"
|
||||
desc = "Now with 200% more value!"
|
||||
icon_state = "cart-c"
|
||||
access_manifest = 1
|
||||
@@ -204,7 +204,7 @@
|
||||
radio = new /obj/item/radio/integrated/beepsky(src)
|
||||
|
||||
syndicate
|
||||
name = "Detomatix Cartridge"
|
||||
name = "\improper Detomatix cartridge"
|
||||
icon_state = "cart"
|
||||
access_remote_door = 1
|
||||
remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/radio/integrated
|
||||
name = "PDA radio module"
|
||||
name = "\improper PDA radio module"
|
||||
desc = "An electronic radio system of nanotrasen origin."
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "power_mod"
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
name = "camera bug"
|
||||
desc = "For illicit snooping through the camera network."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "mindflash2"
|
||||
icon_state = "camera_bug"
|
||||
w_class = 1.0
|
||||
item_state = "electronic"
|
||||
item_state = "camera_bug"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
|
||||
@@ -198,6 +198,7 @@
|
||||
|
||||
|
||||
/obj/item/device/flashlight/slime
|
||||
gender = PLURAL
|
||||
name = "glowing slime extract"
|
||||
desc = "Extract from a yellow slime. It emits a strong light when squeezed."
|
||||
icon = 'icons/obj/lighting.dmi'
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
emagged = !emagged
|
||||
playsound(src.loc, "sparks", 100, 1)
|
||||
if(emagged)
|
||||
name = "Shortcircuited [initial(name)]"
|
||||
name = "shortcircuited [initial(name)]"
|
||||
else
|
||||
name = initial(name)
|
||||
update_icon()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/device/radio/beacon
|
||||
name = "Tracking Beacon"
|
||||
name = "tracking beacon"
|
||||
desc = "A beacon used by a teleporter."
|
||||
icon_state = "beacon"
|
||||
item_state = "signaler"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/obj/item/device/encryptionkey/
|
||||
name = "Standard Encryption Key"
|
||||
name = "standard encryption key"
|
||||
desc = "An encryption key for a radio headset. Has no special codes in it. WHY DOES IT EXIST? ASK NANOTRASEN."
|
||||
icon = 'icons/obj/radio.dmi'
|
||||
icon_state = "cypherkey"
|
||||
@@ -27,91 +27,91 @@
|
||||
origin_tech = "syndicate=3"
|
||||
|
||||
/obj/item/device/encryptionkey/headset_sec
|
||||
name = "Security Radio Encryption Key"
|
||||
name = "security radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the security channel, use :s."
|
||||
icon_state = "sec_cypherkey"
|
||||
channels = list("Security" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_eng
|
||||
name = "Engineering Radio Encryption Key"
|
||||
name = "engineering radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the engineering channel, use :e."
|
||||
icon_state = "eng_cypherkey"
|
||||
channels = list("Engineering" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_rob
|
||||
name = "Robotics Radio Encryption Key"
|
||||
name = "robotics radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the engineering channel, use :e. For research, use :n."
|
||||
icon_state = "rob_cypherkey"
|
||||
channels = list("Science" = 1, "Engineering" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_med
|
||||
name = "Medical Radio Encryption Key"
|
||||
name = "medical radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the medical channel, use :m."
|
||||
icon_state = "med_cypherkey"
|
||||
channels = list("Medical" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_sci
|
||||
name = "Science Radio Encryption Key"
|
||||
name = "science radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the science channel, use :n."
|
||||
icon_state = "sci_cypherkey"
|
||||
channels = list("Science" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_medsci
|
||||
name = "Medical Research Radio Encryption Key"
|
||||
name = "medical research radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the medical channel, use :m. For science, use :n."
|
||||
icon_state = "medsci_cypherkey"
|
||||
channels = list("Science" = 1, "Medical" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_com
|
||||
name = "Command Radio Encryption Key"
|
||||
name = "command radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the command channel, use :c."
|
||||
icon_state = "com_cypherkey"
|
||||
channels = list("Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/captain
|
||||
name = "Captain's Encryption Key"
|
||||
name = "\proper the captain's encryption key"
|
||||
desc = "An encryption key for a radio headset. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
|
||||
icon_state = "cap_cypherkey"
|
||||
channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/rd
|
||||
name = "Research Director's Encryption Key"
|
||||
name = "\proper the research director's encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the science channel, use :n. For command, use :c."
|
||||
icon_state = "rd_cypherkey"
|
||||
channels = list("Science" = 1, "Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/hos
|
||||
name = "Head of Security's Encryption Key"
|
||||
name = "\proper the head of security's encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the security channel, use :s. For command, use :c."
|
||||
icon_state = "hos_cypherkey"
|
||||
channels = list("Security" = 1, "Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/ce
|
||||
name = "Chief Engineer's Encryption Key"
|
||||
name = "\proper the chief engineer's encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the engineering channel, use :e. For command, use :c."
|
||||
icon_state = "ce_cypherkey"
|
||||
channels = list("Engineering" = 1, "Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/cmo
|
||||
name = "Chief Medical Officer's Encryption Key"
|
||||
name = "\proper the chief medical officer's encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the medical channel, use :m. For command, use :c."
|
||||
icon_state = "cmo_cypherkey"
|
||||
channels = list("Medical" = 1, "Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/heads/hop
|
||||
name = "Head of Personnel's Encryption Key"
|
||||
name = "\proper the head of personnel's encryption key"
|
||||
desc = "An encryption key for a radio headset. Channels are as follows: :u - supply, :v - service, :c - command."
|
||||
icon_state = "hop_cypherkey"
|
||||
channels = list("Supply" = 1, "Service" = 1, "Command" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_cargo
|
||||
name = "Supply Radio Encryption Key"
|
||||
name = "supply radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the supply channel, use :u."
|
||||
icon_state = "cargo_cypherkey"
|
||||
channels = list("Supply" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_service
|
||||
name = "Service Radio Encryption Key"
|
||||
name = "service radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the service channel, use :v."
|
||||
icon_state = "srv_cypherkey"
|
||||
channels = list("Service" = 1)
|
||||
@@ -99,42 +99,42 @@
|
||||
keyslot2 = new /obj/item/device/encryptionkey/headset_com
|
||||
|
||||
/obj/item/device/radio/headset/heads/captain
|
||||
name = "captain's headset"
|
||||
name = "\proper the captain's headset"
|
||||
desc = "The headset of the boss. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
keyslot2 = new /obj/item/device/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/device/radio/headset/heads/rd
|
||||
name = "Research Director's headset"
|
||||
name = "\proper the research director's headset"
|
||||
desc = "Headset of the fellow who keeps society marching towards technological singularity. To access the science channel, use :n. For command, use :c."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
keyslot2 = new /obj/item/device/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/device/radio/headset/heads/hos
|
||||
name = "head of security's headset"
|
||||
name = "\proper the head of security's headset"
|
||||
desc = "The headset of the man in charge of keeping order and protecting the station. To access the security channel, use :s. For command, use :c."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
keyslot2 = new /obj/item/device/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/device/radio/headset/heads/ce
|
||||
name = "chief engineer's headset"
|
||||
name = "\proper the chief engineer's headset"
|
||||
desc = "The headset of the guy in charge of keeping the station powered and undamaged. To access the engineering channel, use :e. For command, use :c."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
keyslot2 = new /obj/item/device/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/device/radio/headset/heads/cmo
|
||||
name = "chief medical officer's headset"
|
||||
name = "\proper the chief medical officer's headset"
|
||||
desc = "The headset of the highly trained medical chief. To access the medical channel, use :m. For command, use :c."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
keyslot2 = new /obj/item/device/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/device/radio/headset/heads/hop
|
||||
name = "head of personnel's headset"
|
||||
name = "\proper the head of personnel's headset"
|
||||
desc = "The headset of the guy who will one day be captain. Channels are as follows: :u - supply, :v - service, :c - command."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
anchored = 1
|
||||
w_class = 4.0
|
||||
canhear_range = 2
|
||||
flags = FPRINT | CONDUCT | TABLEPASS | NOBLOODY
|
||||
flags = FPRINT | CONDUCT | TABLEPASS
|
||||
var/number = 0
|
||||
var/anyai = 1
|
||||
var/mob/living/silicon/ai/ai = list()
|
||||
@@ -73,3 +73,6 @@
|
||||
icon_state = "intercom-p"
|
||||
else
|
||||
icon_state = "intercom"
|
||||
|
||||
/obj/item/device/radio/intercom/rejects_blood()
|
||||
return 1
|
||||
@@ -9,7 +9,7 @@ MASS SPECTROMETER
|
||||
|
||||
*/
|
||||
/obj/item/device/t_scanner
|
||||
name = "T-ray scanner"
|
||||
name = "\improper T-ray scanner"
|
||||
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
|
||||
icon_state = "t-ray0"
|
||||
var/on = 0
|
||||
@@ -61,7 +61,7 @@ MASS SPECTROMETER
|
||||
|
||||
|
||||
/obj/item/device/healthanalyzer
|
||||
name = "Health Analyzer"
|
||||
name = "health analyzer"
|
||||
icon_state = "health"
|
||||
item_state = "analyzer"
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
|
||||
|
||||
@@ -167,21 +167,24 @@
|
||||
else
|
||||
attacher_name = "[attacher.name]([attacher.ckey])"
|
||||
|
||||
var/log_str = "Bomb valve opened in <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name]</a> "
|
||||
log_str += "with [attached_device ? attached_device : "no device"] attacher: [attacher_name]"
|
||||
var/log_str1 = "Bomb valve opened in "
|
||||
var/log_str2 = "with [attached_device ? attached_device : "no device"] attacher: [attacher_name]"
|
||||
|
||||
var/log_attacher = ""
|
||||
if(attacher)
|
||||
log_str += "(<A HREF='?_src_=holder;adminmoreinfo=\ref[attacher]'>?</A>)"
|
||||
log_attacher = "(<A HREF='?_src_=holder;adminmoreinfo=\ref[attacher]'>?</A>)"
|
||||
|
||||
var/mob/mob = get_mob_by_key(src.fingerprintslast)
|
||||
var/last_touch_info = ""
|
||||
|
||||
if(mob)
|
||||
last_touch_info = "(<A HREF='?_src_=holder;adminmoreinfo=\ref[mob]'>?</A>)"
|
||||
|
||||
log_str += " Last touched by: [src.fingerprintslast][last_touch_info]"
|
||||
bombers += log_str
|
||||
message_admins(log_str, 0, 1)
|
||||
log_game(log_str)
|
||||
var/log_str3 = " Last touched by: [src.fingerprintslast]"
|
||||
bombers += "[log_str1] <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name]</a> [log_str2][log_attacher] [log_str3][last_touch_info]"
|
||||
|
||||
message_admins("[log_str1] <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name]</a> [log_str2][log_attacher] [log_str3][last_touch_info]", 0, 1)
|
||||
log_game("[log_str1] [A.name]([A.x],[A.y],[A.z]) [log_str2] [log_str3]")
|
||||
merge_gases()
|
||||
spawn(20) // In case one tank bursts
|
||||
for (var/i=0,i<5,i++)
|
||||
@@ -197,4 +200,4 @@
|
||||
// this doesn't do anything but the timer etc. expects it to be here
|
||||
// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs
|
||||
/obj/item/device/transfer_valve/proc/c_state()
|
||||
return
|
||||
return
|
||||
|
||||
@@ -121,7 +121,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid
|
||||
*/
|
||||
|
||||
/obj/item/device/uplink/hidden
|
||||
name = "Hidden Uplink."
|
||||
name = "hidden uplink."
|
||||
desc = "There is something wrong if you're examining this."
|
||||
|
||||
/obj/item/device/uplink/hidden/Topic(href, href_list)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/latexballon
|
||||
name = "Latex glove"
|
||||
name = "latex glove"
|
||||
desc = "" //todo
|
||||
icon_state = "latexballon"
|
||||
item_state = "lgloves"
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0, user))
|
||||
overlays.Cut()
|
||||
usr << "You slice off [src]'s uneven chunks of aluminum and scorch marks."
|
||||
usr << "You slice off [src]'s uneven chunks of aluminium and scorch marks."
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -11,61 +11,72 @@
|
||||
var/heal_burn = 0
|
||||
|
||||
/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if (M.stat == 2)
|
||||
var/t_him = "it"
|
||||
if (M.gender == MALE)
|
||||
t_him = "him"
|
||||
else if (M.gender == FEMALE)
|
||||
t_him = "her"
|
||||
user << "\red \The [M] is dead, you cannot help [t_him]!"
|
||||
return
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/limb/affecting = H.get_organ("chest")
|
||||
|
||||
if (!istype(M))
|
||||
user << "\red \The [src] cannot be applied to [M]!"
|
||||
return 1
|
||||
|
||||
if ( ! (istype(user, /mob/living/carbon/human) || \
|
||||
istype(user, /mob/living/silicon) || \
|
||||
istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
|
||||
user << "\red You don't have the dexterity to do this!"
|
||||
return 1
|
||||
if(affecting.status == ORGAN_ORGANIC) //Limb must be organic to be healed - RR
|
||||
if (M.stat == 2)
|
||||
var/t_him = "it"
|
||||
if (M.gender == MALE)
|
||||
t_him = "him"
|
||||
else if (M.gender == FEMALE)
|
||||
t_him = "her"
|
||||
user << "\red \The [M] is dead, you cannot help [t_him]!"
|
||||
return
|
||||
|
||||
if (user)
|
||||
if (M != user)
|
||||
user.visible_message( \
|
||||
"\blue [M] has been applied with [src] by [user].", \
|
||||
"\blue You apply \the [src] to [M]." \
|
||||
)
|
||||
if (!istype(M))
|
||||
user << "\red \The [src] cannot be applied to [M]!"
|
||||
return 1
|
||||
|
||||
if ( ! (istype(user, /mob/living/carbon/human) || \
|
||||
istype(user, /mob/living/silicon) || \
|
||||
istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
|
||||
user << "\red You don't have the dexterity to do this!"
|
||||
return 1
|
||||
|
||||
if (user)
|
||||
if (M != user)
|
||||
user.visible_message( \
|
||||
"\blue [M] has been applied with [src] by [user].", \
|
||||
"\blue You apply \the [src] to [M]." \
|
||||
)
|
||||
else
|
||||
var/t_himself = "itself"
|
||||
if (user.gender == MALE)
|
||||
t_himself = "himself"
|
||||
else if (user.gender == FEMALE)
|
||||
t_himself = "herself"
|
||||
|
||||
user.visible_message( \
|
||||
"\blue [M] applied [src] on [t_himself].", \
|
||||
"\blue You apply \the [src] on yourself." \
|
||||
)
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
|
||||
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/user2 = user
|
||||
affecting = H.get_organ(check_zone(user2.zone_sel.selecting))
|
||||
else
|
||||
if(!istype(affecting, /obj/item/organ/limb) || affecting:burn_dam <= 0)
|
||||
affecting = H.get_organ("head")
|
||||
|
||||
if(affecting.status == ORGAN_ORGANIC) // Just in case a robotic limb SOMEHOW got down to this point of the proc all you get is a message - RR
|
||||
|
||||
if (affecting.heal_damage(src.heal_brute, src.heal_burn))
|
||||
H.update_damage_overlays(0)
|
||||
|
||||
M.updatehealth()
|
||||
else
|
||||
var/t_himself = "itself"
|
||||
if (user.gender == MALE)
|
||||
t_himself = "himself"
|
||||
else if (user.gender == FEMALE)
|
||||
t_himself = "herself"
|
||||
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
|
||||
|
||||
user.visible_message( \
|
||||
"\blue [M] applied [src] on [t_himself].", \
|
||||
"\blue You apply \the [src] on yourself." \
|
||||
)
|
||||
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/limb/affecting = H.get_organ("chest")
|
||||
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/user2 = user
|
||||
affecting = H.get_organ(check_zone(user2.zone_sel.selecting))
|
||||
else
|
||||
if(!istype(affecting, /obj/item/organ/limb) || affecting:burn_dam <= 0)
|
||||
affecting = H.get_organ("head")
|
||||
|
||||
if (affecting.heal_damage(src.heal_brute, src.heal_burn))
|
||||
H.update_damage_overlays(0)
|
||||
M.updatehealth()
|
||||
use(1)
|
||||
else
|
||||
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
|
||||
user << "<span class='notice'>Medicine won't work on a robotic limb!</span>"
|
||||
|
||||
use(1)
|
||||
|
||||
/obj/item/stack/medical/bruise_pack
|
||||
name = "bruise pack"
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
* Fake singularity
|
||||
*/
|
||||
/obj/item/toy/spinningtoy
|
||||
name = "Gravitational Singularity"
|
||||
name = "gravitational singularity"
|
||||
desc = "\"Singulo\" brand spinning toy."
|
||||
icon = 'icons/obj/singularity.dmi'
|
||||
icon_state = "singularity_s1"
|
||||
@@ -484,26 +484,26 @@
|
||||
..()
|
||||
|
||||
/obj/item/toy/prize/ripley
|
||||
name = "toy ripley"
|
||||
name = "toy Ripley"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 1/11."
|
||||
|
||||
/obj/item/toy/prize/fireripley
|
||||
name = "toy firefighting ripley"
|
||||
name = "toy firefighting Ripley"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 2/11."
|
||||
icon_state = "fireripleytoy"
|
||||
|
||||
/obj/item/toy/prize/deathripley
|
||||
name = "toy deathsquad ripley"
|
||||
name = "toy deathsquad Ripley"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 3/11."
|
||||
icon_state = "deathripleytoy"
|
||||
|
||||
/obj/item/toy/prize/gygax
|
||||
name = "toy gygax"
|
||||
name = "toy Gygax"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 4/11."
|
||||
icon_state = "gygaxtoy"
|
||||
|
||||
/obj/item/toy/prize/durand
|
||||
name = "toy durand"
|
||||
name = "toy Durand"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 5/11."
|
||||
icon_state = "durandprize"
|
||||
|
||||
@@ -513,27 +513,27 @@
|
||||
icon_state = "honkprize"
|
||||
|
||||
/obj/item/toy/prize/marauder
|
||||
name = "toy marauder"
|
||||
name = "toy Marauder"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 7/11."
|
||||
icon_state = "marauderprize"
|
||||
|
||||
/obj/item/toy/prize/seraph
|
||||
name = "toy seraph"
|
||||
name = "toy Seraph"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 8/11."
|
||||
icon_state = "seraphprize"
|
||||
|
||||
/obj/item/toy/prize/mauler
|
||||
name = "toy mauler"
|
||||
name = "toy Mauler"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 9/11."
|
||||
icon_state = "maulerprize"
|
||||
|
||||
/obj/item/toy/prize/odysseus
|
||||
name = "toy odysseus"
|
||||
name = "toy Odysseus"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 10/11."
|
||||
icon_state = "odysseusprize"
|
||||
|
||||
/obj/item/toy/prize/phazon
|
||||
name = "toy phazon"
|
||||
name = "toy Phazon"
|
||||
desc = "Mini-Mecha action figure! Collect them all! 11/11."
|
||||
icon_state = "phazonprize"
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
w_class = 1.0
|
||||
|
||||
raisins
|
||||
name = "4no raisins"
|
||||
name = "\improper 4no raisins"
|
||||
icon_state= "4no_raisins"
|
||||
candy
|
||||
name = "candy"
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
|
||||
|
||||
B1.reagents.add_reagent("aluminum", 30)
|
||||
B1.reagents.add_reagent("aluminium", 30)
|
||||
B2.reagents.add_reagent("foaming_agent", 10)
|
||||
B2.reagents.add_reagent("pacid", 10)
|
||||
|
||||
@@ -282,7 +282,7 @@
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
|
||||
|
||||
B1.reagents.add_reagent("aluminum", 25)
|
||||
B1.reagents.add_reagent("aluminium", 25)
|
||||
B2.reagents.add_reagent("plasma", 25)
|
||||
B2.reagents.add_reagent("sacid", 25)
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing
|
||||
name = "improvised explosive assembly"
|
||||
desc = "An igniter stuffed into an aluminum shell."
|
||||
desc = "An igniter stuffed into an aluminium shell."
|
||||
w_class = 2.0
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "improvised_grenade"
|
||||
|
||||
@@ -64,9 +64,8 @@
|
||||
add_fingerprint(user)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
var/log_str = "[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>."
|
||||
message_admins(log_str)
|
||||
log_game(log_str)
|
||||
message_admins("[key_name(usr)]<A HREF='?_src_=holder;adminmoreinfo=\ref[usr]'>?</A> has primed a [name] for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).")
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.throw_mode_on()
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
/obj/item/weapon/melee/energy
|
||||
var/active = 0
|
||||
flags = FPRINT | TABLEPASS | NOBLOODY
|
||||
flags = FPRINT | TABLEPASS
|
||||
|
||||
suicide_act(mob/user)
|
||||
viewers(user) << pick("\red <b>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</b>", \
|
||||
"\red <b>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</b>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
/obj/item/weapon/melee/energy/suicide_act(mob/user)
|
||||
viewers(user) << pick("\red <b>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</b>", \
|
||||
"\red <b>[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.</b>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/melee/energy/rejects_blood()
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/melee/energy/axe
|
||||
name = "energy axe"
|
||||
@@ -16,7 +19,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 3.0
|
||||
flags = FPRINT | CONDUCT | NOSHIELD | TABLEPASS | NOBLOODY
|
||||
flags = FPRINT | CONDUCT | NOSHIELD | TABLEPASS
|
||||
origin_tech = "combat=3"
|
||||
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
|
||||
|
||||
@@ -50,7 +53,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD
|
||||
origin_tech = "magnets=3;syndicate=4"
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
var/hacked = 0
|
||||
@@ -152,7 +155,7 @@
|
||||
throw_speed = 1
|
||||
throw_range = 1
|
||||
w_class = 4.0//So you can't hide it in your pocket or some such.
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY
|
||||
flags = FPRINT | TABLEPASS | NOSHIELD
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
var/datum/effect/effect/system/spark_spread/spark_system
|
||||
|
||||
|
||||
@@ -27,8 +27,9 @@
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/heal_amt = 10
|
||||
for(var/obj/item/organ/limb/affecting in H.organs)
|
||||
if(affecting.heal_damage(heal_amt, heal_amt))
|
||||
H.update_damage_overlays(0)
|
||||
if(affecting.status == ORGAN_ORGANIC) //No Bible can heal a robotic arm!
|
||||
if(affecting.heal_damage(heal_amt, heal_amt))
|
||||
H.update_damage_overlays(0)
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/bible/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
@@ -70,10 +71,24 @@
|
||||
ticker.mode.remove_cultist(M.mind)*/
|
||||
if ((istype(M, /mob/living/carbon/human) && prob(60)))
|
||||
bless(M)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] heals [] with the power of [src.deity_name]!</B>", user, M), 1)
|
||||
M << "\red May the power of [src.deity_name] compel you to be healed!"
|
||||
playsound(src.loc, "punch", 25, 1, -1)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/message_halt = 0
|
||||
for(var/obj/item/organ/limb/affecting in H.organs)
|
||||
if(affecting.status == ORGAN_ORGANIC)
|
||||
if(message_halt == 0)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] heals [] with the power of [src.deity_name]!</B>", user, M), 1)
|
||||
M << "\red May the power of [src.deity_name] compel you to be healed!"
|
||||
playsound(src.loc, "punch", 25, 1, -1)
|
||||
message_halt = 1
|
||||
else
|
||||
src << "<span class='warning'>[src.deity_name] refuses to heal this metalic taint!</span>"
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
else
|
||||
if(ishuman(M) && !istype(M:head, /obj/item/clothing/head/helmet))
|
||||
M.adjustBrainLoss(10)
|
||||
@@ -81,6 +96,7 @@
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] beats [] over the head with []!</B>", user, M, src), 1)
|
||||
playsound(src.loc, "punch", 25, 1, -1)
|
||||
|
||||
else if(M.stat == 2)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] smacks []'s lifeless corpse with [].</B>", user, M, src), 1)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
var/display_contents_with_number //Set this to make the storage item group contents of the same type and display them as a number.
|
||||
var/allow_quick_empty //Set this variable to allow the object to have the 'empty' verb, which dumps all the contents on the floor.
|
||||
var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile.
|
||||
var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile
|
||||
var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile, 2 = pick all of a type
|
||||
|
||||
|
||||
/obj/item/weapon/storage/MouseDrop(obj/over_object)
|
||||
@@ -180,7 +180,7 @@
|
||||
//This proc return 1 if the item can be picked up and 0 if it can't.
|
||||
//Set the stop_messages to stop it from printing messages
|
||||
/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W, stop_messages = 0)
|
||||
if(!istype(W)) return //Not an item
|
||||
if(!istype(W) || (W.flags & ABSTRACT)) return //Not an item
|
||||
|
||||
if(loc == W)
|
||||
return 0 //Means the item is already in the storage item
|
||||
@@ -351,8 +351,10 @@
|
||||
set name = "Switch Gathering Method"
|
||||
set category = "Object"
|
||||
|
||||
collection_mode = !collection_mode
|
||||
collection_mode = (collection_mode+1)%3
|
||||
switch (collection_mode)
|
||||
if(2)
|
||||
usr << "[src] now picks up all items of a single type at once."
|
||||
if(1)
|
||||
usr << "[src] now picks up all items in a tile at once."
|
||||
if(0)
|
||||
|
||||
@@ -31,11 +31,11 @@
|
||||
on = !on
|
||||
if(on)
|
||||
icon_state = "[icon_state]-on"
|
||||
// item_state = "[item_state]-on"
|
||||
// item_state = "[item_state]-on"
|
||||
ion_trail.start()
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
// item_state = initial(item_state)
|
||||
// item_state = initial(item_state)
|
||||
ion_trail.stop()
|
||||
return
|
||||
|
||||
@@ -81,6 +81,14 @@
|
||||
..()
|
||||
air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)
|
||||
|
||||
/obj/item/weapon/tank/jetpack/oxygen/harness
|
||||
name = "jet harness (oxygen)"
|
||||
desc = "A lightweight tactical harness, used by those who don't want to be weighed down by traditional jetpacks."
|
||||
icon_state = "jetpack-mini"
|
||||
item_state = "jetpack-mini"
|
||||
volume = 40
|
||||
throw_range = 7
|
||||
w_class = 3
|
||||
|
||||
/obj/item/weapon/tank/jetpack/carbondioxide
|
||||
name = "jetpack (carbon dioxide)"
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
name = "offhand"
|
||||
icon_state = "offhand"
|
||||
w_class = 5.0
|
||||
abstract = 1
|
||||
flags = ABSTRACT
|
||||
|
||||
/obj/item/weapon/twohanded/offhand/unwield()
|
||||
del(src)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
/obj/structure/closet/syndicate/personal/New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/weapon/tank/jetpack/oxygen(src)
|
||||
new /obj/item/weapon/tank/jetpack/oxygen/harness(src)
|
||||
new /obj/item/clothing/mask/gas/syndicate(src)
|
||||
new /obj/item/clothing/under/syndicate(src)
|
||||
new /obj/item/clothing/head/helmet/space/rig/syndi(src)
|
||||
|
||||
@@ -120,8 +120,8 @@
|
||||
|
||||
/obj/structure/closet/wardrobe/yellow
|
||||
name = "yellow wardrobe"
|
||||
icon_state = "wardrobe-y"
|
||||
icon_closed = "wardrobe-y"
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yeloww"
|
||||
|
||||
/obj/structure/closet/wardrobe/yellow/New()
|
||||
new /obj/item/clothing/under/color/yellow(src)
|
||||
@@ -135,8 +135,8 @@
|
||||
|
||||
/obj/structure/closet/wardrobe/atmospherics_yellow
|
||||
name = "atmospherics wardrobe"
|
||||
icon_state = "yellow"
|
||||
icon_closed = "yellow"
|
||||
icon_state = "atmos"
|
||||
icon_closed = "atmos"
|
||||
|
||||
/obj/structure/closet/wardrobe/atmospherics_yellow/New()
|
||||
new /obj/item/clothing/under/rank/atmospheric_technician(src)
|
||||
|
||||
@@ -378,23 +378,3 @@
|
||||
src.req_access += pick(get_all_accesses())
|
||||
..()
|
||||
|
||||
|
||||
/obj/structure/closet/crate/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
for(var/obj/O in src.contents)
|
||||
del(O)
|
||||
del(src)
|
||||
return
|
||||
if(2.0)
|
||||
for(var/obj/O in src.contents)
|
||||
if(prob(50))
|
||||
del(O)
|
||||
del(src)
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(50))
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
+6
-6
@@ -7,21 +7,22 @@
|
||||
return
|
||||
|
||||
var/frequency = get_rand_frequency() // Same frequency for everybody
|
||||
var/turf/turf_source = get_turf(source)
|
||||
|
||||
// Looping through the player list has the added bonus of working for mobs inside containers
|
||||
for (var/P in player_list)
|
||||
var/mob/M = P
|
||||
if(!M || !M.client)
|
||||
continue
|
||||
var/turf/T = get_turf(M)
|
||||
if(T && T.z == source.z)
|
||||
if(get_dist(T, source) <= world.view + extrarange)
|
||||
M.playsound_local(source, soundin, vol, vary, frequency, falloff)
|
||||
if(get_dist(M, turf_source) <= world.view + extrarange)
|
||||
var/turf/T = get_turf(M)
|
||||
if(T && T.z == turf_source.z)
|
||||
M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff)
|
||||
|
||||
var/const/FALLOFF_SOUNDS = 1
|
||||
var/const/SURROUND_CAP = 7
|
||||
|
||||
/mob/proc/playsound_local(var/atom/source, soundin, vol as num, vary, frequency, falloff)
|
||||
/mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff)
|
||||
if(!src.client || ear_deaf > 0) return
|
||||
soundin = get_sfx(soundin)
|
||||
|
||||
@@ -36,7 +37,6 @@ var/const/SURROUND_CAP = 7
|
||||
else
|
||||
S.frequency = get_rand_frequency()
|
||||
|
||||
var/turf/turf_source = get_turf(source)
|
||||
if(isturf(turf_source))
|
||||
// 3D sounds, the technology is here!
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
+22
-1
@@ -76,4 +76,25 @@ var/global/normal_ooc_colour = "#002eb8"
|
||||
prefs.ooccolor = sanitize_ooccolor(new_ooccolor)
|
||||
prefs.save_preferences()
|
||||
feedback_add_details("admin_verb","OC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
return
|
||||
return
|
||||
|
||||
//Checks admin notice
|
||||
/client/verb/admin_notice()
|
||||
set name = "Adminnotice"
|
||||
set category = "Admin"
|
||||
set desc ="Check the admin notice if it has been set"
|
||||
|
||||
if(admin_notice)
|
||||
src << "\blue <b>Admin Notice:</b>\n \t [admin_notice]"
|
||||
else
|
||||
src << "\blue There are no admin notices at the moment."
|
||||
|
||||
/client/verb/motd()
|
||||
set name = "MOTD"
|
||||
set category = "OOC"
|
||||
set desc ="Check the Message of the Day"
|
||||
|
||||
if(join_motd)
|
||||
src << "<div class=\"motd\">[join_motd]</div>"
|
||||
else
|
||||
src << "\blue The Message of the Day has not been set."
|
||||
@@ -134,8 +134,8 @@ var/savefile/Banlist
|
||||
log_admin("Ban Expired: [key]")
|
||||
message_admins("Ban Expired: [key]")
|
||||
else
|
||||
ban_unban_log_save("[key_name_admin(usr)] unbanned [key]")
|
||||
log_admin("[key_name_admin(usr)] unbanned [key]")
|
||||
ban_unban_log_save("[key_name(usr)] unbanned [key]")
|
||||
log_admin("[key_name(usr)] unbanned [key]")
|
||||
message_admins("[key_name_admin(usr)] unbanned: [key]")
|
||||
feedback_inc("ban_unban",1)
|
||||
usr.client.holder.DB_ban_unban( ckey(key), BANTYPE_ANY_FULLBAN)
|
||||
|
||||
@@ -537,6 +537,25 @@ var/global/floorIsLava = 0
|
||||
log_admin("Announce: [key_name(usr)] : [message]")
|
||||
feedback_add_details("admin_verb","A") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/datum/admins/proc/set_admin_notice()
|
||||
set category = "Special Verbs"
|
||||
set name = "Set Admin Notice"
|
||||
set desc ="Set an announcement that appears to everyone who joins the server. Only lasts this round"
|
||||
if(!check_rights(0)) return
|
||||
|
||||
admin_notice = input(src,"Set a public notice for this round. Everyone who joins the server will see it.\n(Leaving it blank will delete the current notice):","Set Notice",admin_notice) as null|message
|
||||
switch(admin_notice)
|
||||
if(null)
|
||||
return
|
||||
if("")
|
||||
message_admins("[key_name(usr)] removed the admin notice.")
|
||||
log_admin("[key_name(usr)] removed the admin notice:\n[admin_notice]")
|
||||
return
|
||||
message_admins("[key_name(usr)] set the admin notice.")
|
||||
log_admin("[key_name(usr)] set the admin notice:\n[admin_notice]")
|
||||
world << "\blue <b>Admin Notice:</b>\n \t [admin_notice]"
|
||||
feedback_add_details("admin_verb","SAN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/datum/admins/proc/toggleooc()
|
||||
set category = "Server"
|
||||
set desc="Toggle dis bitch"
|
||||
|
||||
@@ -281,4 +281,4 @@ var/list/admin_ranks = list() //list of all admin_rank datums
|
||||
log_admin("[key_name(usr)] added keyword [keyword] to permission of [adm_ckey]")
|
||||
log_admin_permission_modification(adm_ckey, D.rank.rights)
|
||||
|
||||
edit_admin_permissions()
|
||||
edit_admin_permissions()
|
||||
|
||||
@@ -27,6 +27,7 @@ var/list/admin_verbs_admin = list(
|
||||
/datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/
|
||||
/datum/admins/proc/toggleguests, /*toggles whether guests can join the current game*/
|
||||
/datum/admins/proc/announce, /*priority announce something to all clients.*/
|
||||
/datum/admins/proc/set_admin_notice,/*announcement all clients see when joining the server.*/
|
||||
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
|
||||
/client/proc/toggle_view_range, /*changes how far we can see*/
|
||||
/datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/
|
||||
@@ -138,6 +139,7 @@ var/list/admin_verbs_hideable = list(
|
||||
/datum/admins/proc/toggleenter,
|
||||
/datum/admins/proc/toggleguests,
|
||||
/datum/admins/proc/announce,
|
||||
/datum/admins/proc/set_admin_notice,
|
||||
/client/proc/admin_ghost,
|
||||
/client/proc/toggle_view_range,
|
||||
/datum/admins/proc/view_txt_log,
|
||||
|
||||
@@ -175,9 +175,9 @@ var/savefile/Banlistjob
|
||||
log_admin("Banjob Expired: [key]")
|
||||
message_admins("Banjob Expired: [key]")
|
||||
else
|
||||
log_admin("[key_name_admin(usr)] unjobbanned [key] from [rank]")
|
||||
log_admin("[key_name(usr)] unjobbanned [key] from [rank]")
|
||||
message_admins("[key_name_admin(usr)] unjobbanned:[key] from [rank]")
|
||||
ban_unban_log_save("[key_name_admin(usr)] unjobbanned [key] from [rank]")
|
||||
ban_unban_log_save("[key_name(usr)] unjobbanned [key] from [rank]")
|
||||
feedback_inc("ban_job_unban",1)
|
||||
feedback_add_details("ban_job_unban","- [rank]")
|
||||
|
||||
|
||||
@@ -1671,7 +1671,7 @@
|
||||
MAX_EX_HEAVY_RANGE = 7
|
||||
MAX_EX_DEVESTATION_RANGE = 3
|
||||
message_admins("\red <b> [key_name_admin(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]</b>", 1)
|
||||
log_admin("[key_name_admin(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]")
|
||||
log_admin("[key_name(usr)] changed the bomb cap to [MAX_EX_DEVESTATION_RANGE], [MAX_EX_HEAVY_RANGE], [MAX_EX_LIGHT_RANGE]")
|
||||
|
||||
if("wave")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
@@ -1944,7 +1944,7 @@
|
||||
for(var/name in listkicked)
|
||||
strkicked += "[name], "
|
||||
message_admins("[key_name_admin(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]", 1)
|
||||
log_admin("[key_name_admin(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]")
|
||||
log_admin("[key_name(usr)] has kicked [afkonly ? "all AFK" : "all"] clients from the lobby. [length(listkicked)] clients kicked: [strkicked ? strkicked : "--"]")
|
||||
else
|
||||
usr << "You may only use this when the game is running"
|
||||
if("showailaws")
|
||||
@@ -2070,7 +2070,7 @@
|
||||
newChannel.is_admin_channel = 1
|
||||
feedback_inc("newscaster_channels",1)
|
||||
news_network.network_channels += newChannel //Adding channel to the global network
|
||||
log_admin("[key_name_admin(usr)] created command feed channel: [src.admincaster_feed_channel.channel_name]!")
|
||||
log_admin("[key_name(usr)] created command feed channel: [src.admincaster_feed_channel.channel_name]!")
|
||||
src.admincaster_screen=5
|
||||
src.access_news_network()
|
||||
|
||||
@@ -2105,7 +2105,7 @@
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
|
||||
NEWSCASTER.newsAlert(src.admincaster_feed_channel.channel_name)
|
||||
|
||||
log_admin("[key_name_admin(usr)] submitted a feed story to channel: [src.admincaster_feed_channel.channel_name]!")
|
||||
log_admin("[key_name(usr)] submitted a feed story to channel: [src.admincaster_feed_channel.channel_name]!")
|
||||
src.access_news_network()
|
||||
|
||||
else if(href_list["ac_create_channel"])
|
||||
@@ -2170,7 +2170,7 @@
|
||||
news_network.wanted_issue.body = src.admincaster_feed_message.body
|
||||
news_network.wanted_issue.backup_author = src.admincaster_feed_message.backup_author
|
||||
src.admincaster_screen = 19
|
||||
log_admin("[key_name_admin(usr)] issued a Station-wide Wanted Notification for [src.admincaster_feed_message.author]!")
|
||||
log_admin("[key_name(usr)] issued a Station-wide Wanted Notification for [src.admincaster_feed_message.author]!")
|
||||
src.access_news_network()
|
||||
|
||||
else if(href_list["ac_cancel_wanted"])
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
/obj/effect/spawner/lootdrop/initialize()
|
||||
if(loot && loot.len)
|
||||
for(var/i = lootcount, i > 0, i--)
|
||||
if(!loot.len) return
|
||||
if(!loot.len) break
|
||||
var/lootspawn = pick(loot)
|
||||
if(!lootdoubles)
|
||||
loot.Remove(lootspawn)
|
||||
|
||||
@@ -129,7 +129,10 @@
|
||||
prefs.save_preferences()
|
||||
src << "Others can[(prefs.toggles & MEMBER_PUBLIC) ? "" : "not"] see whether you are a byond member."
|
||||
|
||||
var/list/ghost_forms = list("ghost","ghostking","ghostian2")
|
||||
var/list/ghost_forms = list("ghost","ghostking","ghostian2","ghost_red","ghost_black", \
|
||||
"ghost_blue","ghost_yellow","ghost_green","ghost_pink", \
|
||||
"ghost_cyan","ghost_dblue","ghost_dred","ghost_dgreen", \
|
||||
"ghost_dcyan","ghost_grey","ghost_dyellow","ghost_dpink")
|
||||
/client/verb/pick_form()
|
||||
set name = "Choose Ghost Form"
|
||||
set category = "Preferences"
|
||||
|
||||
@@ -42,8 +42,12 @@
|
||||
item_color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
|
||||
|
||||
/obj/item/clothing/gloves/botanic_leather
|
||||
desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin."
|
||||
desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin. They're also quite warm."
|
||||
name = "botanist's leather gloves"
|
||||
icon_state = "leather"
|
||||
item_state = "ggloves"
|
||||
permeability_coefficient = 0.9
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
|
||||
@@ -20,6 +20,7 @@
|
||||
item_state = "bio_suit"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
allowed = list(/obj/item/weapon/disk, /obj/item/weapon/stamp, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/weapon/melee, /obj/item/weapon/storage/lockbox/medal, /obj/item/device/flash, /obj/item/weapon/storage/box/matches, /obj/item/weapon/lighter, /obj/item/clothing/mask/cigarette, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/tank/emergency_oxygen)
|
||||
|
||||
//Chaplain
|
||||
/obj/item/clothing/suit/chaplain_hoodie
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
|
||||
/mob
|
||||
|
||||
var/bloody_hands = 0
|
||||
var/mob/living/carbon/human/bloody_hands_mob
|
||||
var/track_blood
|
||||
var/mob/living/carbon/human/track_blood_mob
|
||||
var/track_blood_type
|
||||
|
||||
/obj/item/clothing/gloves
|
||||
var/transfer_blood = 0
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user