Merge branch 'master' into upstream-merge-34894

This commit is contained in:
LetterJay
2018-01-24 21:17:35 -06:00
committed by GitHub
42 changed files with 461 additions and 272 deletions
+72 -28
View File
@@ -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
+19
View File
@@ -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
+1 -25
View File
@@ -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
+5 -5
View File
@@ -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
View File
@@ -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."
+2 -2
View File
@@ -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
+27 -13
View File
@@ -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. \