Merge branch 'master' into upstream-merge-34894
This commit is contained in:
@@ -153,13 +153,15 @@
|
||||
select_look(owner)
|
||||
return 1
|
||||
|
||||
/datum/action/item_action/chameleon/change/proc/emp_randomise()
|
||||
/datum/action/item_action/chameleon/change/proc/emp_randomise(var/amount = EMP_RANDOMISE_TIME)
|
||||
if(istype(target, /obj/item/gun/energy/laser/chameleon))
|
||||
return //Please no crash!
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
random_look(owner)
|
||||
|
||||
emp_timer = world.time + EMP_RANDOMISE_TIME
|
||||
var/new_value = world.time + amount
|
||||
if(new_value > emp_timer)
|
||||
emp_timer = new_value
|
||||
|
||||
/datum/action/item_action/chameleon/change/process()
|
||||
if(world.time > emp_timer)
|
||||
@@ -189,8 +191,8 @@
|
||||
item_state = "engi_suit"
|
||||
item_color = "engine"
|
||||
|
||||
/obj/item/clothing/under/chameleon/New()
|
||||
..()
|
||||
/obj/item/clothing/under/chameleon/Initialize()
|
||||
. = ..()
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/clothing/under
|
||||
chameleon_action.chameleon_name = "Jumpsuit"
|
||||
@@ -200,6 +202,10 @@
|
||||
/obj/item/clothing/under/chameleon/emp_act(severity)
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
/obj/item/clothing/under/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.emp_randomise(INFINITY)
|
||||
|
||||
/obj/item/clothing/suit/chameleon
|
||||
name = "armor"
|
||||
desc = "A slim armored vest that protects against most types of damage."
|
||||
@@ -211,8 +217,8 @@
|
||||
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
/obj/item/clothing/suit/chameleon/New()
|
||||
..()
|
||||
/obj/item/clothing/suit/chameleon/Initialize()
|
||||
. = ..()
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/clothing/suit
|
||||
chameleon_action.chameleon_name = "Suit"
|
||||
@@ -222,6 +228,10 @@
|
||||
/obj/item/clothing/suit/chameleon/emp_act(severity)
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
/obj/item/clothing/suit/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.emp_randomise(INFINITY)
|
||||
|
||||
/obj/item/clothing/glasses/chameleon
|
||||
name = "Optical Meson Scanner"
|
||||
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition."
|
||||
@@ -232,8 +242,8 @@
|
||||
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
/obj/item/clothing/glasses/chameleon/New()
|
||||
..()
|
||||
/obj/item/clothing/glasses/chameleon/Initialize()
|
||||
. = ..()
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/clothing/glasses
|
||||
chameleon_action.chameleon_name = "Glasses"
|
||||
@@ -243,6 +253,10 @@
|
||||
/obj/item/clothing/glasses/chameleon/emp_act(severity)
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
/obj/item/clothing/glasses/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.emp_randomise(INFINITY)
|
||||
|
||||
/obj/item/clothing/gloves/chameleon
|
||||
desc = "These gloves will protect the wearer from electric shock."
|
||||
name = "insulated gloves"
|
||||
@@ -254,8 +268,8 @@
|
||||
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
/obj/item/clothing/gloves/chameleon/New()
|
||||
..()
|
||||
/obj/item/clothing/gloves/chameleon/Initialize()
|
||||
. = ..()
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/clothing/gloves
|
||||
chameleon_action.chameleon_name = "Gloves"
|
||||
@@ -265,6 +279,10 @@
|
||||
/obj/item/clothing/gloves/chameleon/emp_act(severity)
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
/obj/item/clothing/gloves/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.emp_randomise(INFINITY)
|
||||
|
||||
/obj/item/clothing/head/chameleon
|
||||
name = "grey cap"
|
||||
desc = "It's a baseball hat in a tasteful grey colour."
|
||||
@@ -276,8 +294,8 @@
|
||||
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
/obj/item/clothing/head/chameleon/New()
|
||||
..()
|
||||
/obj/item/clothing/head/chameleon/Initialize()
|
||||
. = ..()
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/clothing/head
|
||||
chameleon_action.chameleon_name = "Hat"
|
||||
@@ -287,6 +305,10 @@
|
||||
/obj/item/clothing/head/chameleon/emp_act(severity)
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
/obj/item/clothing/head/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.emp_randomise(INFINITY)
|
||||
|
||||
/obj/item/clothing/head/chameleon/drone
|
||||
// The camohat, I mean, holographic hat projection, is part of the
|
||||
// drone itself.
|
||||
@@ -294,8 +316,8 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
// which means it offers no protection, it's just air and light
|
||||
|
||||
/obj/item/clothing/head/chameleon/drone/New()
|
||||
..()
|
||||
/obj/item/clothing/head/chameleon/drone/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.random_look()
|
||||
var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src)
|
||||
togglehatmask_action.UpdateButtonIcon()
|
||||
@@ -320,8 +342,8 @@
|
||||
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
/obj/item/clothing/mask/chameleon/New()
|
||||
..()
|
||||
/obj/item/clothing/mask/chameleon/Initialize()
|
||||
. = ..()
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/clothing/mask
|
||||
chameleon_action.chameleon_name = "Mask"
|
||||
@@ -331,6 +353,10 @@
|
||||
/obj/item/clothing/mask/chameleon/emp_act(severity)
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
/obj/item/clothing/mask/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.emp_randomise(INFINITY)
|
||||
|
||||
/obj/item/clothing/mask/chameleon/attack_self(mob/user)
|
||||
vchange = !vchange
|
||||
to_chat(user, "<span class='notice'>The voice changer is now [vchange ? "on" : "off"]!</span>")
|
||||
@@ -343,8 +369,8 @@
|
||||
// Can drones use the voice changer part? Let's not find out.
|
||||
vchange = 0
|
||||
|
||||
/obj/item/clothing/mask/chameleon/drone/New()
|
||||
..()
|
||||
/obj/item/clothing/mask/chameleon/drone/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.random_look()
|
||||
var/datum/action/item_action/chameleon/drone/togglehatmask/togglehatmask_action = new(src)
|
||||
togglehatmask_action.UpdateButtonIcon()
|
||||
@@ -367,8 +393,8 @@
|
||||
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
/obj/item/clothing/shoes/chameleon/New()
|
||||
..()
|
||||
/obj/item/clothing/shoes/chameleon/Initialize()
|
||||
. = ..()
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/clothing/shoes
|
||||
chameleon_action.chameleon_name = "Shoes"
|
||||
@@ -378,6 +404,10 @@
|
||||
/obj/item/clothing/shoes/chameleon/emp_act(severity)
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
/obj/item/clothing/shoes/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.emp_randomise(INFINITY)
|
||||
|
||||
/obj/item/gun/energy/laser/chameleon
|
||||
name = "practice laser gun"
|
||||
desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice."
|
||||
@@ -405,8 +435,6 @@
|
||||
chameleon_action.chameleon_blacklist = typecacheof(/obj/item/gun/magic, ignore_root_path = FALSE)
|
||||
chameleon_action.initialize_disguises()
|
||||
|
||||
/obj/item/gun/energy/laser/chameleon/Initialize()
|
||||
. = ..()
|
||||
projectile_copy_vars = list("name", "icon", "icon_state", "item_state", "speed", "color", "hitsound", "forcedodge", "impact_effect_type", "range", "suppressed", "hitsound_wall", "impact_effect_type", "pass_flags")
|
||||
chameleon_projectile_vars = list("name" = "practice laser", "icon" = 'icons/obj/projectiles.dmi', "icon_state" = "laser")
|
||||
gun_copy_vars = list("fire_sound", "burst_size", "fire_delay")
|
||||
@@ -505,8 +533,8 @@
|
||||
name = "backpack"
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
/obj/item/storage/backpack/chameleon/New()
|
||||
..()
|
||||
/obj/item/storage/backpack/chameleon/Initialize()
|
||||
. = ..()
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/storage/backpack
|
||||
chameleon_action.chameleon_name = "Backpack"
|
||||
@@ -515,14 +543,18 @@
|
||||
/obj/item/storage/backpack/chameleon/emp_act(severity)
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
/obj/item/storage/backpack/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.emp_randomise(INFINITY)
|
||||
|
||||
/obj/item/storage/belt/chameleon
|
||||
name = "toolbelt"
|
||||
desc = "Holds tools."
|
||||
silent = 1
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
/obj/item/storage/belt/chameleon/New()
|
||||
..()
|
||||
/obj/item/storage/belt/chameleon/Initialize()
|
||||
. = ..()
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/storage/belt
|
||||
chameleon_action.chameleon_name = "Belt"
|
||||
@@ -531,6 +563,10 @@
|
||||
/obj/item/storage/belt/chameleon/emp_act(severity)
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
/obj/item/storage/belt/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.emp_randomise(INFINITY)
|
||||
|
||||
/obj/item/device/radio/headset/chameleon
|
||||
name = "radio headset"
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
@@ -545,12 +581,16 @@
|
||||
/obj/item/device/radio/headset/chameleon/emp_act(severity)
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
/obj/item/device/radio/headset/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.emp_randomise(INFINITY)
|
||||
|
||||
/obj/item/device/pda/chameleon
|
||||
name = "PDA"
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
/obj/item/device/pda/chameleon/New()
|
||||
..()
|
||||
/obj/item/device/pda/chameleon/Initialize()
|
||||
. = ..()
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/device/pda
|
||||
chameleon_action.chameleon_name = "PDA"
|
||||
@@ -560,3 +600,7 @@
|
||||
/obj/item/device/pda/chameleon/emp_act(severity)
|
||||
chameleon_action.emp_randomise()
|
||||
|
||||
/obj/item/device/pda/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
chameleon_action.emp_randomise(INFINITY)
|
||||
|
||||
|
||||
@@ -292,9 +292,9 @@
|
||||
|
||||
/obj/item/integrated_circuit/manipulation/grabber
|
||||
name = "grabber"
|
||||
desc = "A circuit with it's own inventory for tiny/small items, used to grab and store things."
|
||||
desc = "A circuit which is used to grab and store tiny to small objects within it's self-contained inventory."
|
||||
icon_state = "grabber"
|
||||
extended_desc = "The circuit accepts a reference to thing to be grabbed. It can store up to 10 things. Modes: 1 for grab. 0 for eject the first thing. -1 for eject all."
|
||||
extended_desc = "The circuit accepts a reference to an object to be grabbed and can store up to 10 objects. Modes: 1 to grab, 0 to eject the first object, and -1 to eject all objects."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
size = 3
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
pressure_resistance = 15
|
||||
possible_a_intents = list(INTENT_HELP, INTENT_HARM)
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD)
|
||||
has_limbs = 1
|
||||
var/list/stomach_contents = list()
|
||||
var/list/internal_organs = list() //List of /obj/item/organ in the mob. They don't go in the contents for some reason I don't want to know.
|
||||
var/list/internal_organs_slot= list() //Same as above, but stores "slot ID" - "organ" pairs for easy access.
|
||||
@@ -33,7 +34,6 @@
|
||||
|
||||
var/co2overloadtime = null
|
||||
var/temperature_resistance = T0C+75
|
||||
has_limbs = 1
|
||||
var/obj/item/reagent_containers/food/snacks/meat/slab/type_of_meat = /obj/item/reagent_containers/food/snacks/meat/slab
|
||||
|
||||
var/gib_type = /obj/effect/decal/cleanable/blood/gibs
|
||||
@@ -57,3 +57,5 @@
|
||||
var/obj/halitem
|
||||
var/hal_screwyhud = SCREWYHUD_NONE
|
||||
var/next_hallucination = 0
|
||||
var/cpr_time = 1 //CPR cooldown.
|
||||
var/damageoverlaytemp = 0
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,ANTAG_HUD,GLAND_HUD)
|
||||
possible_a_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM)
|
||||
pressure_resistance = 25
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
//Hair colour and style
|
||||
var/hair_color = "000"
|
||||
var/hair_style = "Bald"
|
||||
@@ -43,8 +45,7 @@
|
||||
|
||||
var/drunkenness = 0 //Overall drunkenness - check handle_alcohol() in life.dm for effects
|
||||
var/datum/personal_crafting/handcrafting
|
||||
can_buckle = TRUE
|
||||
buckle_lying = FALSE
|
||||
|
||||
var/creamed = FALSE //to use with creampie overlays
|
||||
var/static/list/can_ride_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot))
|
||||
var/lastpuke = 0
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD)
|
||||
pressure_resistance = 10
|
||||
|
||||
var/resize = 1 //Badminnery resize
|
||||
var/lastattacker = null
|
||||
var/lastattackerckey = null
|
||||
|
||||
//Health and life related vars
|
||||
var/maxHealth = 100 //Maximum health that should be possible.
|
||||
var/health = 100 //A mob's health
|
||||
@@ -17,10 +21,12 @@
|
||||
var/cloneloss = 0 //Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims
|
||||
var/staminaloss = 0 //Stamina damage, or exhaustion. You recover it slowly naturally, and are knocked down if it gets too high. Holodeck and hallucinations deal this.
|
||||
|
||||
var/confused = 0 //Makes the mob move in random directions.
|
||||
|
||||
var/hallucination = 0 //Directly affects how long a mob will hallucinate for
|
||||
|
||||
var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out.
|
||||
var/timeofdeath = 0
|
||||
|
||||
//Allows mobs to move through dense areas without restriction. For instance, in space or out of holder objects.
|
||||
var/incorporeal_move = FALSE //FALSE is off, INCORPOREAL_MOVE_BASIC is normal, INCORPOREAL_MOVE_SHADOW is for ninjas
|
||||
@@ -69,7 +75,16 @@
|
||||
var/blood_volume = 0 //how much blood the mob has
|
||||
var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override
|
||||
|
||||
var/see_override = 0 //0 for no override, sets see_invisible = see_override in silicon & carbon life process via update_sight()
|
||||
|
||||
var/list/status_effects //a list of all status effects the mob has
|
||||
var/druggy = 0
|
||||
|
||||
//Speech
|
||||
var/stuttering = 0
|
||||
var/slurring = 0
|
||||
var/cultslurring = 0
|
||||
var/derpspeech = 0
|
||||
|
||||
var/list/implants = null
|
||||
|
||||
@@ -83,3 +98,7 @@
|
||||
|
||||
var/registered_z
|
||||
var/can_be_held = FALSE //whether this can be picked up and held.
|
||||
|
||||
var/radiation = 0 //If the mob is irradiated.
|
||||
var/ventcrawl_layer = PIPING_LAYER_DEFAULT
|
||||
var/losebreath = 0
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
flags_1 = HEAR_1
|
||||
hud_possible = list(ANTAG_HUD)
|
||||
pressure_resistance = 8
|
||||
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
|
||||
var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
|
||||
var/datum/mind/mind
|
||||
var/list/datum/action/actions = list()
|
||||
@@ -22,10 +23,7 @@
|
||||
*/
|
||||
var/zone_selected = null
|
||||
|
||||
var/damageoverlaytemp = 0
|
||||
var/computer_id = null
|
||||
var/lastattacker = null
|
||||
var/lastattackerckey = null
|
||||
var/list/logging = list(INDIVIDUAL_ATTACK_LOG, INDIVIDUAL_SAY_LOG, INDIVIDUAL_EMOTE_LOG, INDIVIDUAL_OOC_LOG)
|
||||
var/obj/machinery/machine = null
|
||||
|
||||
@@ -33,25 +31,15 @@
|
||||
var/notransform = null //Carbon
|
||||
var/eye_blind = 0 //Carbon
|
||||
var/eye_blurry = 0 //Carbon
|
||||
var/stuttering = 0 //Carbon
|
||||
var/slurring = 0 //Carbon
|
||||
var/cultslurring = 0 //Carbon
|
||||
var/derpspeech = 0 //Carbon
|
||||
var/real_name = null
|
||||
var/spacewalk = FALSE
|
||||
var/druggy = 0 //Carbon
|
||||
var/confused = 0 //Carbon
|
||||
var/resting = 0 //Carbon
|
||||
var/lying = 0
|
||||
var/lying_prev = 0
|
||||
var/canmove = 1
|
||||
var/lastpuke = 0
|
||||
|
||||
var/name_archive //For admin things like possession
|
||||
|
||||
var/timeofdeath = 0//Living
|
||||
var/cpr_time = 1//Carbon
|
||||
|
||||
var/bodytemperature = BODYTEMP_NORMAL //310.15K / 98.6F
|
||||
var/drowsyness = 0//Carbon
|
||||
var/dizziness = 0//Carbon
|
||||
@@ -60,7 +48,6 @@
|
||||
var/satiety = 0//Carbon
|
||||
|
||||
var/overeatduration = 0 // How long this guy is overeating //Carbon
|
||||
var/losebreath = 0//Carbon
|
||||
var/a_intent = INTENT_HELP//Living
|
||||
var/list/possible_a_intents = null//Living
|
||||
var/m_intent = MOVE_INTENT_RUN//Living
|
||||
@@ -75,8 +62,6 @@
|
||||
|
||||
var/obj/item/storage/s_active = null//Carbon
|
||||
|
||||
var/see_override = 0 //0 for no override, sets see_invisible = see_override in mob life process
|
||||
|
||||
var/datum/hud/hud_used = null
|
||||
|
||||
var/research_scanner = 0 //For research scanner equipped mobs. Enable to show research data when examining.
|
||||
@@ -87,8 +72,6 @@
|
||||
|
||||
var/job = null//Living
|
||||
|
||||
var/radiation = 0//Carbon
|
||||
|
||||
var/list/faction = list("neutral") //A list of factions that this mob is currently in, for hostile mob targetting, amongst other things
|
||||
var/move_on_shuttle = 1 // Can move on the shuttle.
|
||||
|
||||
@@ -104,9 +87,6 @@
|
||||
var/list/viruses = list() // list of all diseases in a mob
|
||||
var/list/resistances = list()
|
||||
|
||||
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
|
||||
|
||||
|
||||
var/status_flags = CANSTUN|CANKNOCKDOWN|CANUNCONSCIOUS|CANPUSH //bitflags defining which status effects can be inflicted (replaces canknockdown, canstun, etc)
|
||||
|
||||
var/digitalcamo = 0 // Can they be tracked by the AI?
|
||||
@@ -121,12 +101,8 @@
|
||||
|
||||
var/turf/listed_turf = null //the current turf being examined in the stat panel
|
||||
|
||||
var/resize = 1 //Badminnery resize
|
||||
|
||||
var/list/observers = null //The list of people observing this mob.
|
||||
|
||||
var/list/progressbars = null //for stacking do_after bars
|
||||
|
||||
var/list/mousemove_intercept_objects
|
||||
|
||||
var/ventcrawl_layer = PIPING_LAYER_DEFAULT
|
||||
|
||||
@@ -89,17 +89,17 @@
|
||||
move_delay = world.time
|
||||
var/oldloc = mob.loc
|
||||
|
||||
if(mob.confused)
|
||||
if(L.confused)
|
||||
var/newdir = 0
|
||||
if(mob.confused > 40)
|
||||
if(L.confused > 40)
|
||||
newdir = pick(GLOB.alldirs)
|
||||
else if(prob(mob.confused * 1.5))
|
||||
else if(prob(L.confused * 1.5))
|
||||
newdir = angle2dir(dir2angle(direct) + pick(90, -90))
|
||||
else if(prob(mob.confused * 3))
|
||||
else if(prob(L.confused * 3))
|
||||
newdir = angle2dir(dir2angle(direct) + pick(45, -45))
|
||||
if(newdir)
|
||||
direct = newdir
|
||||
n = get_step(mob, direct)
|
||||
n = get_step(L, direct)
|
||||
|
||||
. = ..()
|
||||
|
||||
|
||||
+122
-111
@@ -1,111 +1,122 @@
|
||||
/obj/item/stamp
|
||||
name = "\improper GRANTED rubber stamp"
|
||||
desc = "A rubber stamp for stamping important documents."
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "stamp-ok"
|
||||
item_state = "stamp"
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
materials = list(MAT_METAL=60)
|
||||
item_color = "cargo"
|
||||
pressure_resistance = 2
|
||||
attack_verb = list("stamped")
|
||||
|
||||
/obj/item/stamp/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] stamps 'VOID' on [user.p_their()] forehead, then promptly falls over, dead.</span>")
|
||||
return (OXYLOSS)
|
||||
|
||||
/obj/item/stamp/qm
|
||||
name = "quartermaster's rubber stamp"
|
||||
icon_state = "stamp-qm"
|
||||
item_color = "qm"
|
||||
|
||||
/obj/item/stamp/law
|
||||
name = "law office's rubber stamp"
|
||||
icon_state = "stamp-law"
|
||||
item_color = "cargo"
|
||||
|
||||
/obj/item/stamp/captain
|
||||
name = "captain's rubber stamp"
|
||||
icon_state = "stamp-cap"
|
||||
item_color = "captain"
|
||||
|
||||
/obj/item/stamp/hop
|
||||
name = "head of personnel's rubber stamp"
|
||||
icon_state = "stamp-hop"
|
||||
item_color = "hop"
|
||||
|
||||
/obj/item/stamp/hos
|
||||
name = "head of security's rubber stamp"
|
||||
icon_state = "stamp-hos"
|
||||
item_color = "hosred"
|
||||
|
||||
/obj/item/stamp/ce
|
||||
name = "chief engineer's rubber stamp"
|
||||
icon_state = "stamp-ce"
|
||||
item_color = "chief"
|
||||
|
||||
/obj/item/stamp/rd
|
||||
name = "research director's rubber stamp"
|
||||
icon_state = "stamp-rd"
|
||||
item_color = "director"
|
||||
|
||||
/obj/item/stamp/cmo
|
||||
name = "chief medical officer's rubber stamp"
|
||||
icon_state = "stamp-cmo"
|
||||
item_color = "cmo"
|
||||
|
||||
/obj/item/stamp/denied
|
||||
name = "\improper DENIED rubber stamp"
|
||||
icon_state = "stamp-deny"
|
||||
item_color = "redcoat"
|
||||
|
||||
/obj/item/stamp/clown
|
||||
name = "clown's rubber stamp"
|
||||
icon_state = "stamp-clown"
|
||||
item_color = "clown"
|
||||
|
||||
/obj/item/stamp/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
// Syndicate stamp to forge documents.
|
||||
|
||||
/obj/item/stamp/chameleon
|
||||
actions_types = list(/datum/action/item_action/toggle)
|
||||
|
||||
var/list/stamp_types
|
||||
var/list/stamp_names
|
||||
|
||||
/obj/item/stamp/chameleon/Initialize()
|
||||
. = ..()
|
||||
stamp_types = typesof(/obj/item/stamp) - type // Get all stamp types except our own
|
||||
|
||||
stamp_names = list()
|
||||
// Generate them into a list
|
||||
for(var/i in stamp_types)
|
||||
var/obj/item/stamp/stamp_type = i
|
||||
stamp_names += initial(stamp_type.name)
|
||||
|
||||
stamp_names = sortList(stamp_names)
|
||||
|
||||
/obj/item/stamp/chameleon/emp_act(severity)
|
||||
change_to(pick(stamp_types))
|
||||
|
||||
/obj/item/stamp/chameleon/proc/change_to(obj/item/stamp/stamp_type)
|
||||
name = initial(stamp_type.name)
|
||||
icon_state = initial(stamp_type.icon_state)
|
||||
item_color = initial(stamp_type.item_color)
|
||||
|
||||
/obj/item/stamp/chameleon/attack_self(mob/user)
|
||||
var/input_stamp = input(user, "Choose a stamp to disguise as.",
|
||||
"Choose a stamp.") as null|anything in stamp_names
|
||||
|
||||
if(user && (src in user.contents) && input_stamp)
|
||||
var/obj/item/stamp/stamp_type
|
||||
for(var/i in stamp_types)
|
||||
stamp_type = i
|
||||
if(initial(stamp_type.name) == input_stamp)
|
||||
break
|
||||
change_to(stamp_type)
|
||||
/obj/item/stamp
|
||||
name = "\improper GRANTED rubber stamp"
|
||||
desc = "A rubber stamp for stamping important documents."
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "stamp-ok"
|
||||
item_state = "stamp"
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
materials = list(MAT_METAL=60)
|
||||
item_color = "cargo"
|
||||
pressure_resistance = 2
|
||||
attack_verb = list("stamped")
|
||||
|
||||
/obj/item/stamp/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] stamps 'VOID' on [user.p_their()] forehead, then promptly falls over, dead.</span>")
|
||||
return (OXYLOSS)
|
||||
|
||||
/obj/item/stamp/qm
|
||||
name = "quartermaster's rubber stamp"
|
||||
icon_state = "stamp-qm"
|
||||
item_color = "qm"
|
||||
|
||||
/obj/item/stamp/law
|
||||
name = "law office's rubber stamp"
|
||||
icon_state = "stamp-law"
|
||||
item_color = "cargo"
|
||||
|
||||
/obj/item/stamp/captain
|
||||
name = "captain's rubber stamp"
|
||||
icon_state = "stamp-cap"
|
||||
item_color = "captain"
|
||||
|
||||
/obj/item/stamp/hop
|
||||
name = "head of personnel's rubber stamp"
|
||||
icon_state = "stamp-hop"
|
||||
item_color = "hop"
|
||||
|
||||
/obj/item/stamp/hos
|
||||
name = "head of security's rubber stamp"
|
||||
icon_state = "stamp-hos"
|
||||
item_color = "hosred"
|
||||
|
||||
/obj/item/stamp/ce
|
||||
name = "chief engineer's rubber stamp"
|
||||
icon_state = "stamp-ce"
|
||||
item_color = "chief"
|
||||
|
||||
/obj/item/stamp/rd
|
||||
name = "research director's rubber stamp"
|
||||
icon_state = "stamp-rd"
|
||||
item_color = "director"
|
||||
|
||||
/obj/item/stamp/cmo
|
||||
name = "chief medical officer's rubber stamp"
|
||||
icon_state = "stamp-cmo"
|
||||
item_color = "cmo"
|
||||
|
||||
/obj/item/stamp/denied
|
||||
name = "\improper DENIED rubber stamp"
|
||||
icon_state = "stamp-deny"
|
||||
item_color = "redcoat"
|
||||
|
||||
/obj/item/stamp/clown
|
||||
name = "clown's rubber stamp"
|
||||
icon_state = "stamp-clown"
|
||||
item_color = "clown"
|
||||
|
||||
/obj/item/stamp/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
// Syndicate stamp to forge documents.
|
||||
|
||||
/obj/item/stamp/chameleon
|
||||
actions_types = list(/datum/action/item_action/toggle)
|
||||
|
||||
var/list/stamp_types
|
||||
var/list/stamp_names
|
||||
|
||||
/obj/item/stamp/chameleon/Initialize()
|
||||
. = ..()
|
||||
stamp_types = typesof(/obj/item/stamp) - type // Get all stamp types except our own
|
||||
|
||||
stamp_names = list()
|
||||
// Generate them into a list
|
||||
for(var/i in stamp_types)
|
||||
var/obj/item/stamp/stamp_type = i
|
||||
stamp_names += initial(stamp_type.name)
|
||||
|
||||
stamp_names = sortList(stamp_names)
|
||||
|
||||
/obj/item/stamp/chameleon/emp_act(severity)
|
||||
change_to(pick(stamp_types))
|
||||
|
||||
/obj/item/stamp/chameleon/proc/change_to(obj/item/stamp/stamp_type)
|
||||
name = initial(stamp_type.name)
|
||||
icon_state = initial(stamp_type.icon_state)
|
||||
item_color = initial(stamp_type.item_color)
|
||||
|
||||
/obj/item/stamp/chameleon/attack_self(mob/user)
|
||||
var/input_stamp = input(user, "Choose a stamp to disguise as.",
|
||||
"Choose a stamp.") as null|anything in stamp_names
|
||||
|
||||
if(user && (src in user.contents) && input_stamp)
|
||||
var/obj/item/stamp/stamp_type
|
||||
for(var/i in stamp_types)
|
||||
stamp_type = i
|
||||
if(initial(stamp_type.name) == input_stamp)
|
||||
break
|
||||
change_to(stamp_type)
|
||||
|
||||
/obj/item/stamp/chameleon/broken/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/stamp/chameleon/broken/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/stamp/chameleon/broken/process()
|
||||
change_to(pick(stamp_types))
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
return
|
||||
for(var/V in mother.map)
|
||||
var/turf/T = V
|
||||
T.empty(deleteturfs? null : T.type, ignore_typecache = ignore_typecache, forceop = TRUE)
|
||||
T.empty(deleteturfs? null : T.type, null, ignore_typecache, CHANGETURF_FORCEOP)
|
||||
|
||||
/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs/New()
|
||||
..()
|
||||
|
||||
@@ -126,6 +126,8 @@
|
||||
sharpness = IS_SHARP
|
||||
can_charge = 0
|
||||
heat = 3800
|
||||
|
||||
usesound = 'sound/items/welder.ogg'
|
||||
toolspeed = 0.7 //plasmacutters can be used as welders for a few things, and are faster than standard welders
|
||||
|
||||
/obj/item/gun/energy/plasmacutter/examine(mob/user)
|
||||
|
||||
@@ -1281,3 +1281,19 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_yellow"
|
||||
glass_name = "eggnog"
|
||||
glass_desc = "For enjoying the most wonderful time of the year."
|
||||
|
||||
/datum/reagent/consumable/ethanol/narsour
|
||||
name = "Nar'Sour"
|
||||
id = "narsour"
|
||||
description = "Side effects include self-mutilation and hoarding plasteel."
|
||||
color = RUNE_COLOR_DARKRED
|
||||
boozepwr = 10
|
||||
taste_description = "bloody"
|
||||
glass_icon_state = "narsour"
|
||||
glass_name = "Nar'Sour"
|
||||
glass_desc = "A new hit cocktail inspired by THE ARM Breweries will have you shouting Fuu ma'jin in no time!"
|
||||
|
||||
/datum/reagent/consumable/ethanol/narsour/on_mob_life(mob/living/M)
|
||||
M.cultslurring = min(M.cultslurring + 3, 3)
|
||||
M.stuttering = min(M.stuttering + 3, 3)
|
||||
..()
|
||||
|
||||
@@ -1147,6 +1147,8 @@
|
||||
addiction_threshold = 5
|
||||
|
||||
/datum/reagent/medicine/ketrazine/on_mob_life(mob/living/M)
|
||||
M.status_flags |= IGNORESLOWDOWN
|
||||
M.status_flags |= GOTTAGOFAST
|
||||
M.adjustToxLoss(-3*REM, 0)
|
||||
M.adjustBruteLoss(-5*REM, 0)
|
||||
M.adjustFireLoss(-5*REM, 0)
|
||||
@@ -1243,4 +1245,3 @@
|
||||
M.Dizzy(7)
|
||||
M.Jitter(7)
|
||||
..()
|
||||
|
||||
|
||||
@@ -244,8 +244,10 @@
|
||||
toxpwr = 1
|
||||
|
||||
/datum/reagent/toxin/spore/on_mob_life(mob/living/M)
|
||||
M.damageoverlaytemp = 60
|
||||
M.update_damage_hud()
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.damageoverlaytemp = 60
|
||||
C.update_damage_hud()
|
||||
M.blur_eyes(3)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -232,4 +232,13 @@
|
||||
id = "morphine"
|
||||
results = list("morphine" = 3)
|
||||
required_reagents = list("carbon" = 2, "hydrogen" = 2, "nitrogen" = 1, "oxygen" = 1)
|
||||
required_temp = 480
|
||||
required_temp = 480
|
||||
|
||||
/datum/chemical_reaction/ketrazine
|
||||
name = "Ketrazine"
|
||||
id = "ketrazine"
|
||||
results = list("ketrazine" = 3)
|
||||
required_reagents = list("epinephrine" = 1, "ephedrine" = 1, "tricordazine" = 1, "atropine" = 1)
|
||||
required_catalysts = list("gold" = 1)
|
||||
required_temp = 520
|
||||
mix_message = "The solution fizzes and then settles into an oily, smooth, purple liquid."
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
|
||||
var/launch_status = NOLAUNCH
|
||||
|
||||
var/list/movement_force = list("KNOCKDOWN" = 3, "THROW" = 0)
|
||||
var/list/movement_force = list("KNOCKDOWN" = 3, "THROW" = 2)
|
||||
|
||||
// A timid shuttle will not register itself with the shuttle subsystem
|
||||
// All shuttle templates are timid
|
||||
@@ -745,4 +745,4 @@
|
||||
mode = SHUTTLE_ENDGAME
|
||||
|
||||
/obj/docking_port/mobile/emergency/on_emergency_dock()
|
||||
return
|
||||
return
|
||||
|
||||
@@ -714,10 +714,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
|
||||
exclude_modes = list(/datum/game_mode/nuclear)
|
||||
player_minimum = 20
|
||||
|
||||
/datum/uplink_item/stealthy_tools/chameleon/nuke
|
||||
cost = 6
|
||||
include_modes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_tools/syndigaloshes
|
||||
name = "No-Slip Chameleon Shoes"
|
||||
desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. \
|
||||
@@ -727,6 +723,12 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
|
||||
exclude_modes = list(/datum/game_mode/nuclear)
|
||||
player_minimum = 20
|
||||
|
||||
/datum/uplink_item/stealthy_tools/syndigaloshes/nuke
|
||||
item = /obj/item/clothing/shoes/chameleon
|
||||
cost = 4
|
||||
exclude_modes = list()
|
||||
include_modes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_tools/frame
|
||||
name = "F.R.A.M.E. PDA Cartridge"
|
||||
desc = "When inserted into a personal digital assistant, this cartridge gives you five PDA viruses which \
|
||||
@@ -736,15 +738,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
|
||||
item = /obj/item/cartridge/virus/frame
|
||||
cost = 4
|
||||
|
||||
/datum/uplink_item/stealthy_tools/syndigaloshes/nuke
|
||||
name = "Stealthy No-Slip Chameleon Shoes"
|
||||
desc = "These shoes will allow the wearer to run on wet floors and slippery objects without falling down. \
|
||||
They do not work on heavily lubricated surfaces. The manufacturer claims they are much more stealthy than the normal brand."
|
||||
item = /obj/item/clothing/shoes/chameleon
|
||||
cost = 4
|
||||
exclude_modes = list()
|
||||
include_modes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/stealthy_tools/agent_card
|
||||
name = "Agent Identification Card"
|
||||
desc = "Agent cards prevent artificial intelligences from tracking the wearer, and can copy access \
|
||||
@@ -1328,6 +1321,27 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once.
|
||||
cost = 20
|
||||
cant_discount = TRUE
|
||||
|
||||
/datum/uplink_item/badass/costumes
|
||||
surplus = 0
|
||||
include_modes = list(/datum/game_mode/nuclear)
|
||||
cost = 4
|
||||
cant_discount = TRUE
|
||||
|
||||
/datum/uplink_item/badass/costumes/centcom_official
|
||||
name = "Centcom Official Costume"
|
||||
desc = "Ask the crew to \"inspect\" their nuclear disk and weapons system, and then when they decline, pull out a fully automatic rifle and gun down the Captain. Radio headset does not include key. No gun included."
|
||||
item = /obj/item/storage/box/syndie_kit/centcom_costume
|
||||
|
||||
/datum/uplink_item/badass/costumes/clown
|
||||
name = "Clown Costume"
|
||||
desc = "Nothing is more terrifying than clowns with fully automatic weaponry."
|
||||
item = /obj/item/storage/backpack/duffelbag/clown/syndie
|
||||
|
||||
/datum/uplink_item/badass/costumes/obvious_chameleon
|
||||
name = "Broken Chameleon Kit"
|
||||
desc = "A set of items that contain chameleon technology allowing you to disguise as pretty much anything on the station, and more! Please note that this kit did NOT pass quality control."
|
||||
item = /obj/item/storage/box/syndie_kit/chameleon/broken
|
||||
|
||||
/datum/uplink_item/badass/bundle
|
||||
name = "Syndicate Bundle"
|
||||
desc = "Syndicate Bundles are specialized groups of items that arrive in a plain box. \
|
||||
|
||||
Reference in New Issue
Block a user